ibv_req_notify_cq

int ibv_req_notify_cq(struct ibv_cq *cq, int solicited_only)

参数:

cq from ibv_create_cq
solicited_only  only notify if WR is flagged as solicied(一般给0)

返回值

成功返回0,失败返回-1.

描述

ibv_req_notify_cq为指定的完成队列(CQ)提供通知机制。当在CQ上放置一个完成队列条目(CQE)时,一个完成事件将被发送到与CQ相关联的完成通道(CC)。
如果该CQ中已经有一个CQE,则不会为该事件生成事件。如果设置了solicited_only标志,那么只有设置了已请求标志的WRs的cq才会触发通知。
用户应该使用ibv_get_cq_event操作来接收通知。通知机制将只针对一个通知。
一旦发送了通知,必须用对ibv_req_notify_cq的新调用重新武装该机制。

ibv_get_cq_event(阻塞)

int ibv_get_cq_event(struct ibv_comp_channel *channel, struct ibv_cq **cq, void **cq_context)

参数:

channel  from ibv_create_comp_channel
cq 和事件相关的cp,后面一般用于ibv_poll_cq等。
cq_context(这个参数好像一般用不上)

返回值

成功返回0,失败返回-1.

描述

ibv_get_cq_event等待在指定的完成通道(CC)上发送通知。
注意,这是一个阻塞操作。用户应该分配指向结构ibv_cq和结构
要传递给函数的Void。返回时将用适当的值填充它们。释放这些指针是用户的责任。
必须用ibv_ack_cq_events操作确认发送的每个通知。
Ibv_destroy_cq操作等待所有事件被确认,如果任何事件没有被正确确认,它将挂起
一旦一个完成队列(CQ)的通知被发送到一个CC上,该CQ现在被“解除武装”和将不会向CC发送任何通知,直到它重新武装与新的调用ibv_req_notify_cq操作。
此操作只通知用户CQ有要处理的完成队列条目(CQE),而不实际处理CQ。用户应该使用ibv_poll_cq操作来处理cq。

如果设置非阻塞也是可以的,参考https://www.rdmamojo.com/2013/03/09/ibv_get_cq_event/的描述:
根据使用ibv_req_notify_cq()为特定的完成事件通道请求的完成事件类型,ibv_get_cq_event()等待下一个完成事件。
默认情况下,ibv_get_cq_event()是一个阻塞函数,如果没有任何Completion事件要读取,它将等待生成下一个Completion事件。有一个专门的线程来等待下一个Completion事件的发生是很有用的。然而,如果希望以非阻塞的方式读取事件,这是可以做到的。可以使用fcntl()将完成事件通道中事件文件的文件描述符配置为非阻塞的,然后使用read()/poll()/epoll()/select()读取该文件描述符,以确定是否有等待读取的完成事件。在这篇文章中有一个如何做到这一点的例子。
所有使用ibv_get_cq_event()接收的完成事件都必须使用ibv_ack_cq_events()进行确认。

ibv_ack_cq_events

void ibv_ack_cq_events(struct ibv_cq *cq, unsigned int nevents)

参数

cq: from ibv_create_cq
nevents: (用于确认一个cq事件,一般给1)

描述

ibv_ack_cq_events确认从ibv_get_cq_event接收到的事件。尽管从ibv_get_cq_event接收到的每个通知只算作一个事件,但用户可以确认
通过对ibv_ack_cq_events的单个调用实现多个事件。要确认的事件数量在事件中传递,并且应该至少为1。
因为这个操作需要一个互斥锁,所以它的开销比较大,并且在一个调用中确认多个事件可以提供更好的性能。有关更多详细信息,请参见ibv_get_cq_event。

ibv_poll_cq

int ibv_poll_cq(struct ibv_cq *cq, int num_entries, struct ibv_wc *wc)

参数

cq – from ibv_create_cq
num_entries – 完成队列里面最大的CQE数量(ibv_poll_cq函数返回时/返回值)
wc:用于处理的信息用这个结构体里面取出

返回值

失败返回-1,成功返回值一般等于num_entries

描述

ibv_poll_cq从完成队列(CQ)检索CQ。用户应该分配结构ibv_wc的数组,并将其传递给wc中的调用。
wc中可用的条目数量应该在num_entries中传递。释放这个内存是用户的责任。

实际检索的cq的数量作为返回值给出。cq必须定期轮询,以防止溢出。
如果出现溢出,则CQ将会关闭,将发送一个异步事件IBV_EVENT_CQ_ERR。

rdma-轮询常用cq函数。相关推荐

  1. 每隔一定时间执行一次函数_python — 轮询执行某函数的方法

    方法1:使用python的Thread类的子类Timer,该子类可控制指定函数在特定时间后执行一次: 所以为了实现多次定时执行某函数,只需要在一个while循环中多次新建Timer即可. from t ...

  2. STM32串口用中断还是用轮询

    1.从轮询到中断 很多同学都不喜欢用中断,而偏爱用轮询的操作方式. 这是不是和我们的天性有关呢?每个人都喜欢一切尽在掌握中,肯定都不喜欢被打断.我们常常都有这样的经验:正在跟别人说一件事,然后突然有个 ...

  3. 首先实现立即执行轮询函数,然后setInterval再间隔执行轮询函数,实现方法

    代码启动后,setInterval可以实现间隔指定时间轮询执行我们定义的函数,但是如果需要启动项目后,首先立即执行一次自定义函数,然后再轮询执行,怎么办?看下面,先手动执行一次函数,然后再setInt ...

  4. 加权轮询算法PHP,PHP实现负载均衡的加权轮询方法分析

    本文实例讲述了PHP实现负载均衡的加权轮询方法.分享给大家供大家参考,具体如下: 1. 负载均衡算法有哪些? 轮询法:将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务 ...

  5. 负载策略_面试官:讲一下什么是负载均衡,什么是轮询策略随机策略哈希策略

    什么是负载均衡? 先举个例子吧.以超市收银为例,假设现在只有一个窗口.一个收银员: 一般情况下,收银员平均 2 分钟服务一位顾客,10 分钟可以服务 5 位顾客:到周末高峰期时,收银员加快收银,平均 ...

  6. 客户端与服务器持续同步解析(轮询,comet,WebSocket)

    作者:盼逆邵年来源:博客园发布时间:2012-02-10 20:42  阅读:1943 次原文链接[收藏] 在B/S模型的Web应用中,客户端常常需要保持和服务器的持续更新.这种对及时性要求比较高的应 ...

  7. redis实现轮询算法_【07期】Redis中是如何实现分布式锁的?

    点击上方"Java面试题精选",关注公众号 面试刷图,查缺补漏 分布式锁常见的三种实现方式: 数据库乐观锁: 基于Redis的分布式锁: 基于ZooKeeper的分布式锁. 本地面 ...

  8. js轮询导致服务器瘫痪_面试官:讲一下什么是负载均衡,什么是轮询策略随机策略哈希策略...

    什么是负载均衡? 先举个例子吧.以超市收银为例,假设现在只有一个窗口.一个收银员: 一般情况下,收银员平均 2 分钟服务一位顾客,10 分钟可以服务 5 位顾客:到周末高峰期时,收银员加快收银,平均 ...

  9. 《深入浅出DPDK》读书笔记(八):网卡性能优化(异步中断模式、轮询模式、混和中断轮询模式)

    本文内容为读书笔记,摘自<深入浅出DPDK> 82.DPDK的轮询模式 <DPDK PMD( Poll Mode Driver)轮询模式驱动程序> DPDK采用了轮询或者轮询混 ...

最新文章

  1. 【Verilog HDL 训练】第 12 天(数据通路)
  2. 如何防止按钮提交表单
  3. H5移动前端性能优化
  4. 关于需求管理的胡思乱想---R3PR
  5. Eclipse安装STS插件
  6. Docker可视化界面(Consul+Shipyard+Swarm+Service Discover
  7. Citrix小贴纸---连接XenAPP时协议驱动程序错误
  8. 计算机网络透明网桥的算法,网基课程设计曼切斯特编码模拟透明网桥自习域转发帧算法模拟IP分片模拟.doc...
  9. 【leetcode】杨辉三角Ⅱ
  10. Linux运维笔记(四)
  11. H3C 双线路 nqa 联动
  12. Linux Email服务搭建与应用
  13. Pt100 铂电阻的三线测温线路
  14. postgresql 中文azw3_制作mobi格式的PostgreSQL文档
  15. 【R语言数据科学】(十二):有趣的概率学(上)
  16. crawler(2)
  17. 计算机毕业设计Python+uniapp学生考勤系统小程序(小程序+源码+LW)
  18. 中国半导体要从点到面,存储器为何是最好下手点?
  19. 鸿蒙系统新平板,华为官宣新款MatePad Pro,首款鸿蒙系统平板
  20. QT:复杂结构体不同窗口间传递

热门文章

  1. 2022 软件测试简答题【太原理工大学】
  2. 用户故事与敏捷方法-第一章问题答案
  3. 基于easyui 1.3.6设计的后台管理系统模板界面
  4. 转帖:DLL劫持技术详解(lpk.dll)
  5. python tus股票数据分析_使用Python进行快速复盘[1]: 数据获取与整理
  6. Map小结(java)
  7. Zigbee W-Z-09 模块规格书
  8. ubuntu16 黑主题_Ubuntu16.04 主题美化
  9. A20 Plus(esp8266与A6C)拍照传输图片
  10. 使用冰封重装系统遇到的问题及解决方案