【verbs】ibv_create_comp_channel()

原文:ibv_create_comp_channel() - RDMAmojo RDMAmojo

描述
ibv_create_comp_channel() 为 RDMA 设备上下文创建完成事件通道。

这个 Completion  event channel是 libibverbs(库) 引入的抽象,在 InfiniBand 架构verbs规范或 RDMA 协议verbs规范中不存在。 Completion  event channel本质上是文件描述符,用于向用户空间进程传递工作完成通知。当为完成队列 (CQ) 生成‘工作完成’事件时,该事件通过附加到该 CQ 的 Completion  event channel传递。这可能有助于通过使用多个 Completion  event channel将完成事件引导到不同的线程,或者为不同的 CQ 赋予不同的优先级。

一个或多个完成队列(CQ)可以与同一个Completion  event channel相关联。

参数

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

返回值

ValueDescription
Completion event channel

指向新分配的 Completion event channel的指针

NULL失败时,errno 指示失败原因:
EMFILE此进程打开的文件太多
ENOMEM没有足够的资源来完成此操作

例子

创建一个Completion event channel并销毁它:

struct ibv_comp_channel *event_channel;
 
event_channel = ibv_create_comp_channel(context);
if (!event_channel) {
	fprintf(stderr, "Error, ibv_create_comp_channel() failed\n");
	return -1;
}
 
if (ibv_destroy_comp_channel(event_channel)) {
	fprintf(stderr, "Error, ibv_destroy_comp_channel() failed\n");
	return -1;
}

 常见问题

为什么 Completion event channel无论如何都有用?
Completion event channel是一个对象,它使用事件模式而不是轮询模式帮助处理用户空间进程中的'工作完成'(WC)。

为什么我要在事件模式下read '工作完成'(WC)?

如果您的进程不需要低延迟或需要降低 CPU 使用率,则事件模式更好;在没有事件到来时,read线程将进入睡眠状态,当 CQ 中有新的WC生成时,线程被内核唤醒。(估计是把Completion event channel当条件变量,线程在Completion event channel上wait,WC到来时候,唤醒wait)

是否可以将多个 CQ 与同一个 Completion event channel相关联?
是的。多个 CQ 可以与同一个Completion event channel相关联。

(也)可以使用多个Completion event channel来“聚合”不同的 CQ。这可能有助于通过使用多个Completion event channel将完成事件引导到不同的线程,或者为不同的 CQ 赋予不同的优先级。

(估计是不同的Completion event channel绑定到不同等级的CQ,然后对应等级的线程wait在不同的Completion event channel上)

如何使用多个Completion event channel​​​​​​​来为不同的 CQ 赋予不同的优先级?
您可以将所有具有相同优先级的 CQ 关联到同一个Completion event channel,并根据 CQ 组的优先级处理 Work Completion 事件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值