Notes about RDMA Direct WQE与Inline data机制
本文将mark下RDMA Direct WQE与Inline data机制,主要内容转载自知乎:RDMA 高级。
Normal flow
以发包为例:
- 填充要发送的数据
- 填充WQE描述符
- 敲doorbell通知硬件有数据要发送
- 硬件通过DMA读取WQE
- 硬件通过DMA读取要发送的数据
Direct WQE
以发包为例:
与Normal flow相比,Direct WQE先将WQE写入MMIO bar中,再写doorbell通知硬件有数据要发送。这样RNIC就无需通过DMA来读取WQE了。
需要将MMIO页以write combining方式映射,这里的MMIO页属于RDMA Device Memory。
Inline-Send
ibv_post_send
时带上IBV_SEND_INLINE
标识,如果要发送的数据小于128字节则填WQE时会将这部分数据直接append在WQE的后面。这样硬件DMA WQE时就顺便将data也读出来了,这样就省去了单独DMA data的操作。
Inline-Receive
与发送类似,如果接收的是一个小数据,则没有必要将其放入RQ的receive buffer中,而是可以直接将其放入CQE中。这可以省去硬件将数据DMA至RQ SGE list的过程。使用ibv_exp_create_qp
创建QP时指定max_inl_recv
即可开启此功能。
总结
Direct WQE与Inline data机制的目标都是减少RDMA数据面上的PCIe TLP交互次数。
参考资料:
- RDMA 高级
- Inline-Receive
- [rdma-core,4/4] libhns: Add support for direct wqe
- Design Guidelines for High Performance RDMA Systems(ATC’16)