操作系统: RHEL Centos 7.9 Latest
操作:通过Mellanox电缆从一个系统向另一个系统发送500MB块21次。(以太网控制器:Mellanox Technologies MT28908 Family [ConnectX-6])
(注册的内存区域(500MB)在所有21次迭代中重用。)
使用aligned_alloc()(系统页面大小为4096B)代替malloc()注册内存时,Message Send Bandwidth的增益约为35Gbps。
with malloc(): ~86Gbps
with aligned_alloc(): ~121Gbps
既然CPU不参与这些操作,那么这个操作如何在对齐内存下更快呢?请提供有用的参考链接,如果有解释这一点。对齐内存给读/写操作带来了什么变化?是设备内的地址转换得到了改进吗?
[互联网上关于这方面的信息非常有限,因此在这里询问。]
RDMA操作使用MMIO或DMA通过PCI总线将数据从主存传输到网卡,DMA用于更大的传输。
您观察到的行为可以完全由传输的DMA组件来解释。DMA在物理层上操作,并且虚拟地址空间中的连续区域不太可能映射到物理空间中的连续区域。这种碎片会产生成本——每单位传输需要更多的转换,并且DMA传输在物理页边界处被中断。
[1] https://www.kernel.org/doc/html/latest/core-api/dma-api-howto.html[2]内存对齐