通过NUMA

时间:2015-04-23 22:17:27

标签: linux-kernel x86 x86-64 dma numa

我正在查看Linux环回和IP网络数据处理,似乎没有代码可以覆盖不同套接字上的2个CPU通过环回传递数据的情况。

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

我的问题是:

  • 我是否认为目前在Linux中没有这样做?
  • 我认为这可以在正确的轨道上进行吗?
  • 我应该学习哪些内核API或现有驱动程序来帮助完成这种版本的环回?

1 个答案:

答案 0 :(得分:2)

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

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。