我一直在研究Linux回送和IP网络数据处理,似乎没有代码可以涵盖不同套接字上的2个CPU通过回送传递数据的情况。
我认为应该有可能检测到这种情况,然后在可用时应用硬件DMA,以避免NUMA争用将数据复制到接收器。
我的问题是:
最佳答案
有几个项目/尝试将接口(interface)添加到旨在用于HPS(mpi)的内存到内存DMA引擎:
process_vm_readv
,process_vm_writev
:http://man7.org/linux/man-pages/man2/process_vm_readv.2.html KNEM可能在某些微体系结构和大小上使用I/OAT Intel DMA引擎
一些作者说,在较新的英特尔微体系结构上,硬件DMA引擎没有任何好处:
http://www.ipdps.org/ipdps2010/ipdps2010-slides/CAC/slides_cac_Mor10OptMPICom.pdf
CMA被宣布为与knem类似的项目:http://www.open-mpi.org/community/lists/devel/2012/01/10208.php
如果可以,则不应使用套接字(尤其是tcp套接字)来传输数据,因为它们具有较高的软件开销,而在单机上工作时则不需要。标准
skb
大小限制可能太小而无法有效使用I/OAT,因此网络堆栈可能不会使用I/OAT。关于linux-kernel - 通过NUMA环回优化套接字数据传输,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29835330/