【verbs】IBV_WR API(3) Libibverbs Programmer’s Manual

libibverbs的IBV_WR API提供了一种高效发布工作请求到发送队列的方法,以减少CPU分支和锁定。适用于高级功能,如原子操作、内存窗口、RDMA等。API包括ibv_wr_send等,需使用ibv_create_qp_ex创建支持的QP,并在关键区域内发布。API适用于不依赖于CPU或系统内其他RDMA硬件的原子操作。
摘要由CSDN通过智能技术生成

阅读源码的时候,发现一些陌生 api,如ibv_wr_send。搜索后才发现是一些dev的api

 / testing / libibverbs-dev / ibv_wr_send(3)

源文:ibv_wr_send(3) — libibverbs-dev — Debian testing — Debian Manpages

描述


verbs   API (ibv_wr_*) 允许使用函数调用而不是基于结构的 ibv_post_send() 方案将工作高效地发布到发送队列。这种方法旨在最大限度地减少发布过程中的 CPU 分支和锁定。


此 API 旨在用于访问 ibv_post_send() 提供的功能之外的其他功能。
ibv_post_send() 的 WR 批次和此 API WR 批次可以交织在一起,只要它们不在彼此的关键区域内发布。 (此 API 中的一个关键区由 ibv_wr_start() 和 ibv_wr_complete()/ibv_wr_abort() 界定)

用法


要使用这些 API,必须使用 ibv_create_qp_ex() 创建 QP,它允许在 comp_mask 中设置 IBV_QP_INIT_ATTR_SEND_OPS_FLAGS。 send_ops_flags 应设置为将发布到 QP 的工作请求类型的 OR。


如果 QP 不支持所有请求的工作请求类型,则 QP 创建将失败。
向 QP 发布工作请求是在 ibv_wr_start() 和 ibv_wr_complete()/ibv_wr_abort() 形成的关键区域内完成的(参见下面的 CONCURRENCY)。

每个工作请求都是通过调用 WR 构建器函数(请参阅下面的表列 WR 构建器)来开始创建工作请求,然后是下面描述的允许/必需的 setter 函数来创建的。


可以多次调用 WR builder 和 setter 组合以在单个关键区域内有效地发布多个工作请求。
每个 WR builder 都会使用 struct ibv_qp_ex 的 wr_id 成员来设置完成中要返回的值。某些操作还将使用 wr_flags 成员来影响操作(请参阅下面的标志)。这些值

qpx->wr_id = 1;
ibv_wr_send(qpx);
ibv_wr_set_sge(qpx, lkey, &data, sizeof(data)); 

工作请求部分详细描述了各种 WR 构建器和设置器。
发布工作通过调用 ibv_wr_complete() 或 ibv_wr_abort() 完成。在 ibv_wr_complete() 返回成功之前,不会对队列执行任何工作。 ibv_wr_abort() 将丢弃自 ibv_wr_start() 以来准备的所有工作。

WORK REQUESTS

Operation WR builder QP Type Supported setters
ATOMIC_CMP_AND_SWP ibv_wr_atomic_cmp_swp() RC, XRC_SEND DATA, QP
ATOMIC_FETCH_AND_ADD ibv_wr_atomic_fetch_add() RC, XRC_SEND DATA, QP
BIND_MW ibv_wr_bind_mw() UC, RC, XRC_SEND NONE
LOCAL_INV ibv_wr_local_inv() UC, RC, XRC_SEND NONE
RDMA_READ ibv_wr_rdma_read() RC, XRC_SEND DATA, QP
RDMA_WRITE ibv_wr_rdma_write() UC, RC, XRC_SEND DATA, QP
RDMA_WRITE_WITH_IMM ibv_wr_rdma_write_imm() UC, RC, XRC_SEND DATA, QP
SEND ibv_wr_send() UD, UC, RC, XRC_SEND, RAW_PACKET DATA, QP
SEND_WITH_IMM ibv_wr_send_imm() UD, UC, RC, SRC SEND DATA, QP
SEND_WITH_INV ibv_wr_send_inv() UC, RC, XRC_SEND DATA, QP
TSO ibv_wr_send_ts
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值