通过环回优化套接字数据传输 wrt NUMA

Optimize socket data transfer over loopback wrt NUMA

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

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

我的问题是:

有几个 projects/attempts 可以将接口添加到旨在用于 HPS (mpi) 的内存到内存 DMA 引擎:

KNEM 可能会在某些微架构和尺寸上使用 I/OAT 英特尔 DMA 引擎

I/OAT copy offload through DMA Engine One interesting asynchronous feature is certainly I/OAT copy offload. icopy.flags = KNEM_FLAG_DMA;

一些作者说它在较新的英特尔微体系结构上没有硬件 DMA 引擎的优势:

http://www.ipdps.org/ipdps2010/ipdps2010-slides/CAC/slides_cac_Mor10OptMPICom.pdf

I/OAT only useful for obsolete architectures

CMA 被宣布为与 knem 类似的项目:http://www.open-mpi.org/community/lists/devel/2012/01/10208.php

These system calls were designed to permit fast message passing by allowing messages to be exchanged with a single copy operation (rather than the double copy that would be required when using, for example, shared memory or pipes).

如果可以的话,你不应该使用套接字(尤其是 tcp 套接字)来传输数据,它们有很高的软件开销,当你在单机上工作时不需要。标准 skb 大小限制可能太小而无法有效使用 I/OAT,因此网络堆栈可能不会使用 I/OAT。