本文通过原理剖析与实验验证,彻底揭开 RDMA Write with Immediate 操作中一个容易踩的“坑”。
1. 背景:RDMA Write 的单边特性
在 InfiniBand 和 RoCE 网络中,RDMA(Remote Direct Memory Access)技术允许应用程序直接读写远程内存,几乎不消耗远程 CPU。其中,RDMA Write 是最典型的“单边操作”:发送端准备好数据,指定远程内存地址和 rkey(内存密钥),调用 ibv_post_send() 即可将数据写入对端。接收端完全无需软件参与——不需要调用 ibv_post_recv(),也不会产生任何 CQE。这种零开销的特性使得 RDMA Write 成为高带宽、低延迟传输的首选。
但在实际应用中,发送端常常需要在写入数据的同时,向接收端发送一个轻量级的通知。例如:
- 告诉接收端“这一批数据已经写完,你可以处理了”。
- 传递一个队列索引、消息 ID 或状态码。
- 实现生产者-消费者模型中的“生产完成”信号。
为了满足这类需求,Verbs 提供了 RDMA Write with Immediate 操作(IBV_WR_RDMA_WRITE_WITH_IMM

