我正在查看Linux环回和IP网络数据处理,似乎没有代码可以覆盖不同套接字上的2个CPU通过环回传递数据的情况。
我认为应该可以检测到这种情况,然后在可用时应用硬件DMA,以避免NUMA争用将数据复制到接收器。
我的问题是:
答案 0 :(得分:2)
有几个项目/尝试将接口添加到用于HPS(mpi)的内存到内存DMA引擎:
process_vm_readv
,process_vm_writev
:http://man7.org/linux/man-pages/man2/process_vm_readv.2.html KNEM可能会在一些微体系结构和尺寸上使用I / OAT英特尔DMA引擎
I / OAT通过DMA引擎复制卸载 一个有趣的异步功能当然是I / OAT复制卸载。
icopy.flags = KNEM_FLAG_DMA;
有些作者表示,对于较新的英特尔微体系结构,它没有硬件DMA引擎的好处:
http://www.ipdps.org/ipdps2010/ipdps2010-slides/CAC/slides_cac_Mor10OptMPICom.pdf
I / OAT仅对过时的体系结构有用
CMA被宣布为类似的项目:http://www.open-mpi.org/community/lists/devel/2012/01/10208.php
这些系统调用旨在允许快速传递消息 允许使用单个复制操作交换消息 (而不是使用时需要的双重副本,用于 例如,共享内存或管道。)
如果可以,您不应该使用套接字(尤其是tcp套接字)来传输数据,它们具有较高的软件开销,而在您使用单台机器时则不需要。标准skb
大小限制可能太小而无法有效使用I / OAT,因此网络堆栈可能不会使用I / OAT。