Windows KMDF驱动中ibv_post_send性能优化及RDMA零拷贝方案咨询
Windows KMDF驱动RDMA零拷贝实现方案及相关问题解答
零拷贝写入实现方案
无需拷贝到预注册RDMA内存区域的实现方案完全可行,核心逻辑是直接对EvtIoWrite回调收到的缓冲区做动态RDMA内存注册:
- 首先调用
WdfRequestRetrieveInputMemory获取EvtIoWrite对应的WDFMEMORY对象,随后调用MmProbeAndLockPages将缓冲区锁定到物理内存,避免传输过程中发生页交换 - 直接用锁定后的物理内存页列表创建RDMA内存区域(MR),获取L_Key后即可直接提交RDMA Write工作请求,全程无内存拷贝开销
Fast Registration Work Request(FRWR)支持情况
FRWR并非Linux平台独有特性,Windows内核RDMA接口NDKPI(Network Direct Kernel Provider Interface)从Windows Server 2012版本开始已原生支持该特性
- 对应NDKPI接口为
NdkBuildFastRegisterMr,相比传统全量MR注册开销降低70%以上,完全适配高频动态注册临时缓冲区的场景,传输完成后可快速销毁MR释放资源
内核层面其他加速优化手段
- 若传输缓冲区大小固定,可提前初始化MR资源池,复用预创建的MR避免每次传输的注册/销毁开销
- 非关键路径的工作请求关闭signaled completion配置,减少中断触发次数降低CPU开销
- 开启对应RDMA网卡的scatter gather offload特性,支持非连续物理内存页一次性提交传输,无需拼接为连续缓冲区
- 按对齐要求分配IO缓冲区,尽量满足4K/2M大页对齐,进一步降低MR注册开销和网卡寻址开销
正规技术支持渠道
- 微软WDK官方开发者社区,可提交NDKPI相关问题的技术咨询工单
- 所用RDMA网卡厂商的企业级内核驱动支持团队,比如NVIDIA Networking、Intel Ethernet产品专属技术支持通道
- 微软RDMA技术合作伙伴支持计划,企业级驱动开发场景可申请专属技术对接支持
内容的提问来源于stack exchange,提问作者CommanderLake
相关产品推荐
相关产品推荐

