我一直在研究Linux回送和IP网络数据处理,似乎没有代码可以涵盖不同套接字上的2个CPU通过回送传递数据的情况。

我认为应该有可能检测到这种情况,然后在可用时应用硬件DMA,以避免NUMA争用将数据复制到接收器。

我的问题是:

  • 我是否正确说这在Linux中还没有完成?
  • 我认为这在正确的轨道上是可能的吗?
  • 我应该学习哪些内核API或现有驱动程序来帮助完成这样的环回版本?
  • 最佳答案

    有几个项目/尝试将接口(interface)添加到旨在用于HPS(mpi)的内存到内存DMA引擎:

  • KNEM内核模块-高性能节点内MPI通信-http://knem.gforge.inria.fr/
  • 交叉内存附加(CMA)-新系统调用process_vm_readvprocess_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/

    10-11 03:35
    查看更多