我有一台带有 2 个 Intel Xeon CPU E5-2620(Sandy Bridge)和一个 10Gbps 82599 NIC(2 个端口)的服务器,用于高性能计算。从 PCI 亲和性来看,我看到 10G 网卡连接到 CPU1。我启动了几个数据包接收线程进行实验,线程接收数据包,进行IP / UDP解析,并复制到缓冲区。我10G网卡用的驱动是IOEngine PacketShader/Packet-IO-Engine · GitHub
第一季度!空闲 CPU1 降低 CPU0 数据包接收性能
1.1) 如果 1 或 2 或 4 个线程绑定到 CPU0,所有线程的整体性能约为 2.6-3.2Gbps 1.2) 如果 2 个线程绑定到 CPU1,整体性能为 16.XGbps 1.3) 如果 4 个线程绑定到CPU1,综合性能19.XGbps(2*10G端口最大)
由于CPU0没有直接和网卡相连,看来CPU0上的最大接收速度是2.6-3.2Gbps。但是我发现如果在 CPU1 上运行一些计算密集型进程,CPU0 上的数据包接收线程在 2 个线程时提升到 15.XGbps,在 4 个线程时提升到 19.XGbps。
这是因为电源管理吗?如果CPU1空闲,它会在省电模式下运行吗?即使是这样,CPU1 又如何影响 CPU0 的性能呢?QPI有什么我不知道的吗?
第二季度!CPU1 过载会降低所有数据包接收性能
2.1)如果CPU0上运行1个收包线程,CPU1上运行1个收包线程,则综合性能为10Gbps。每个线程的性能几乎相同——5.X Gbps。2.2)如果CPU0上运行2个数据包接收线程,CPU1上运行2个数据包接收线程,综合性能为13Gbps。而且每个线程的性能几乎一样——3.X Gbps,低于2.1、1.2、1.3
简而言之,当接收到同时在 CPU0 和 CPU1 上运行的线程时,所有线程都无法发挥其最大性能,它们的性能几乎相同。
我认为关于 NUMA 和 QPI 有很多我不知道的地方,有人可以帮我解释一下吗?谢谢