通过环回优化套接字数据传输 wrt NUMA
Optimize socket data transfer over loopback wrt NUMA
我正在查看 Linux 环回和 IP 网络数据处理,似乎没有代码涵盖不同套接字上的 2 个 CPU 通过环回传递数据的情况。
我认为应该可以检测到这种情况,然后在可用时应用硬件 DMA 以避免 NUMA 争用将数据复制到接收器。
我的问题是:
- Linux 目前没有这样做,我对吗?
- 我认为这在正确的轨道上是可能的吗?
- 我应该研究哪些内核 API 或现有驱动程序来帮助完成这样一个版本的环回?
有几个 projects/attempts 可以将接口添加到旨在用于 HPS (mpi) 的内存到内存 DMA 引擎:
- KNEM 内核模块 - 高性能节点内 MPI 通信 - http://knem.gforge.inria.fr/
- 跨内存附加 (CMA) - 新系统调用
process_vm_readv
、process_vm_writev
:http://man7.org/linux/man-pages/man2/process_vm_readv.2.html
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。
我正在查看 Linux 环回和 IP 网络数据处理,似乎没有代码涵盖不同套接字上的 2 个 CPU 通过环回传递数据的情况。
我认为应该可以检测到这种情况,然后在可用时应用硬件 DMA 以避免 NUMA 争用将数据复制到接收器。
我的问题是:
- Linux 目前没有这样做,我对吗?
- 我认为这在正确的轨道上是可能的吗?
- 我应该研究哪些内核 API 或现有驱动程序来帮助完成这样一个版本的环回?
有几个 projects/attempts 可以将接口添加到旨在用于 HPS (mpi) 的内存到内存 DMA 引擎:
- KNEM 内核模块 - 高性能节点内 MPI 通信 - http://knem.gforge.inria.fr/
- 跨内存附加 (CMA) - 新系统调用
process_vm_readv
、process_vm_writev
:http://man7.org/linux/man-pages/man2/process_vm_readv.2.html
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。