原文:https://www.rdmamojo.com/2012/11/03/ibv_create_cq/

描述

ibv_create_cq()为RDMA设备上下文创建完成队列(CQ)。
当发送或接收队列中的未完成工作请求完成时,会将【工作完成】添加到该工作队列的CQ中。此【工作完成】指示未完成的工作请求已完成(不再视为未完成),并提供有关此请求的详细信息(状态,方向,操作码等)。
一个CQ 可以在多个QP之间共享用于发送和接收。WC(工作完成)保存 QP编号以及它来自的(发送或接收)队列。
用户可以定义CQ的最小尺寸。实际创建的大小可以等于或大于此值。

参数

context 入参

从ibv_open_device()返回的RDMA设备上下文

cqe 入参

The minimum requested capacity of the CQ, value can be [1..dev_cap.max_cqe]

CQ的最小请求容量值可以是[1..dev_cap.max_cqe]

cq_context 入参

(可选)用户定义的值,将在cq-> cq_context中可用。在使用ibv_get_cq_event()等待完成事件通知时,将返回此值

channel 入参

(可选)完成事件通道,将用于指示新的WC(工作完成)已添加到此CQ。 NULL表示将不使用任何完成事件通道

comp_vector 入参

MSI-X完成向量,将用于发信号通知完成事件。如果这些中断的IRQ关联掩码已配置为将要由不同内核处理每个MSI-X中断,则可以使用此参数在多个内核上 配置工作负载。值可以是[0..context-> num_comp_vectors)。

(MSI-X completion vector that will be used for signaling Completion events. If the IRQ affinity masks of these interrupts have been configured to spread each MSI-X interrupt to be handled by a different core, this parameter can be used to spread the completion workload over multiple cores. Value can be [0..context->num_comp_vectors).)

返回值

Value Description
CQ

指向新分配的完成队列(CQ)的指针。
该指针还包含以下字段:

cq_context 提供给ibv_create_cq()的值cq_context
cqe CQ的实际大小
NULL

发生错误时,errno指示错误原因:

EINVAL

无效的cqe,channel 或comp_vector

ENOMEM

没有足够的资源来完成此操作

例子

  • 创建一个包含100个entry的CQ并将其销毁:
struct ibv_cq *cq;cq = ibv_create_cq(context, 100, NULL, NULL, 0);
if (!cq) {fprintf(stderr, "Error, ibv_create_cq() failed\n");return -1;
}if (ibv_destroy_cq(cq)) {fprintf(stderr, "Error, ibv_destroy_cq() failed\n");return -1;
}

创建一个带有100个与“完成”事件通道相关联的entry的CQ:
(在此示例中,我们假设完成事件通道之前已经创建):

struct ibv_cq *cq;
struct ibv_comp_channel *channel;cq = ibv_create_cq(context, 100, NULL, channel, 0);
if (!cq) {fprintf(stderr, "Error, ibv_create_cq() failed\n");return -1;
} 

常见问题

  • 为何CQ有益呢?

CQ用于为已完成的任何工作请求保留WC(工作完成,WC能提供详细信息)。

  • 我可以在同一QP中对发送/接收队列使用不同的CQ吗?

是的。在任何QP中,发送队列的CQ和接收队列的CQ可以相同或不同。这是灵活的,由用户决定。

  • 几个QP可以与同一个CQ相关联吗?

是的。多个QP可以在它们的发送或接收队列中或在两个队列中与同一个CQ相关联。

  • CQ大小应该是多少?

A CQ should have enough room to hold all of Work Completions of the Outstanding Work Requests of the Queues that are associated with that CQ, so the CQ size shouldn't be less than the total number of Work Request that may be outstanding.

一个CQ应该有足够的空间来容纳与该CQ相关的队列中未完成的工作请求的所有工作完成,因此CQ的大小不应小于可能未完成的工作请求的总数。

  • 如果我选择的CQ尺寸太小会发生什么?

If there will be a case that the CQ will be full and a new Work Completion is going to be added to that CQ, there will be a CQ overrun. A Completion with error will be added to the CQ and an asynchronous event IBV_EVENT_CQ_ERR will be generated.

如果可能出现CQ满的情况,并且要向该CQ添加新的工作完成,则CQ会超支。有错误的完成将添加到CQ中,并生成一个异步事件IBV_EVENT_CQ_ERR。

  • 我可以将哪个值用作cq_context?

由于cq_context  void*,因此您使用任何值。

【verbs】ibv_create_cq()相关推荐

  1. 【verbs】ibv_get_cq_event|ibv_ack_cq_events()

    目录 ibv_get_cq_event 概要 描述 返回值 提示 ibv_ack_cq_events 描述 参数 返回值 例子 常见问题 ibv_get_cq_event ibv_get_cq_eve ...

  2. 【verbs】ibv_create_comp_channel()

    原文:ibv_create_comp_channel() - RDMAmojo RDMAmojo 描述 ibv_create_comp_channel() 为 RDMA 设备上下文创建完成事件通道. ...

  3. 【verbs】ibv_get_async_event()

    原文:ibv_get_async_event() - RDMAmojo RDMAmojo 描述 ibv_get_async_event() 读取 RDMA 设备上下文context的下一个异步事件. ...

  4. 【verbs】ibv_req_notify_cq()

    ibv_req_notify_cq() - RDMAmojo RDMAmojo 描述 ibv_req_notify_cq() 在完成队列 (CQ) 上请求Completion Notification ...

  5. 【RDMA】12. RDMA之Verbs|OFED

    目录 verbs源码 相关名词解释 Verbs API是什么 设计Verbs API的原因 Verbs API所包含的内容 使用Verbs API编写RDMA应用程序 官方示例程序 参考文献 [RDM ...

  6. 【RDMA】RDMA编程 和相关资料

    目录 RDMA的学习环境搭建 RDMA与socket的类比 RDMA编程流程 RDMA编程2 RDMA学习路线总结 简介--什么是rdma 编程环境 推荐编程库 编程参考手册 相关资料和代码参考 rd ...

  7. 【RDMA】RDMA 编程实例(rdma_cm API)

    目录 RDMA编程基础 说明 1. RDMA的学习环境搭建 2. RDMA与socket的类比 3. RDMA服务器的代码流程 main() { } 实例 用法 Makefile 服务端server. ...

  8. 【推荐】LSI(latent semantic indexing) 完美教程

    [推荐]LSI(latent semantic indexing) 完美教程 "instead of lecturing about SVD I want to show you how t ...

  9. 【写作】Texlive和Texmaker学习

    前言 最近要看一些论文做一下笔记,所以准备使用一下比较流行的Texlive和Texmaker写一下.其实CSDN的Markdown也是不错滴. 首先国际惯例,贴几个地址: Texlive镜像下载地址: ...

  10. 【RDMA】19. RDMA之iWARP Soft-iWARP

    [RDMA]RDMA 学习资料总目录_bandaoyu的博客-CSDN博客SavirRDMA 分享1. RDMA概述https://blog.csdn.net/bandaoyu/article/det ...

最新文章

  1. OpenCV 脸部跟踪(1)
  2. Python3内置模块之Pickle和cPickle数据持久化方法小结
  3. 上海天氣情況及空氣質量指數
  4. 1.18 Java匿名类,匿名内部类
  5. Extjs4 radiogroup打开时的被选中值设置为变量
  6. python中tkinter的使用-中
  7. by截取字段 group_深入理解 group by【思考点滴】
  8. mysql函数做条件_MySQL语句优化(三):避免条件字段做函数操作
  9. 4.5Python数据处理篇之Matplotlib系列(五)---plt.pie()饼状图
  10. 自我与人际沟通课程复习
  11. 【hadoop】HDFS原理 和 重要特性
  12. 光网络时代网络工程师成长路线图
  13. html用css美化表格
  14. WiFi万能钥匙+小米手机拿到coffee店WiFi密码
  15. 虚幻引擎(UE4) UMG 创建菜单
  16. “河南旦”的四个坟墓的故事·《晚唱·贾平凹》
  17. EDM数据营销之HTML模板相关问题
  18. 服务器文件怎么删,怎么删除服务器文件
  19. 地天泰 (易經大意 韓長庚)
  20. 极限测试4 - 系统能创建的最大tcp连接数

热门文章

  1. 网络技术——网络管理技术
  2. Taro项目中设置了设计稿尺寸
  3. 如何批量实现通过MP3标题重命名文件名
  4. 2021全国高校计算机能力挑战赛程序设计赛Python组区域赛(初赛)试题及部分个人解答
  5. matlab wmaxlev函数,CT-PET小波图像融合在精确放射治疗应用研究
  6. 刘国忠:顺周期股受资金青睐,但能走多远还是未知!
  7. Hadoop2.x Yarn作业提交(客户端)
  8. 计算机为什么不能装win7,i5 8400 cpu能装win7吗?为什么安装不了win7
  9. Vue 豆瓣电影项目
  10. 《视觉SLAM十四讲》详细笔记