优化numa绑定的核心是让网卡中断、软中断及应用尽可能运行在同一numa节点上。一、理解numa与网络性能的关系:多路cpu服务器中,每个节点有独立内存控制器,跨节点访问内存会带来延迟,尤其影响高吞吐或低延迟场景下的网络io;二、查看网卡与numa节点关联关系:使用cat /sys/class/net/eth0/device/numa_node命令确认网卡对应节点编号,并可通过lspci -v或dmidecode进一步验证硬件连接;三、绑定网卡中断到本地numa节点cpu:通过cat /proc/interrupts获取中断号,并编辑/proc/irq/<irq_number>/smp_affinity_list文件将中断绑定至本地节点cpu核心(如节点0的cpu0~7),同时关闭irqbalance服务以防止干扰;四、优化软中断处理:方法一为设置rfs/rps指定软中断处理cpu集合,例如echo f > /sys/class/net/eth0/queues/rx-0/rps_cpus;方法二为使用isolcpus参数在启动时隔离专用cpu用于网络处理;五、绑定应用程序到本地numa节点:对延迟敏感的应用可使用numactl或taskset命令绑定至与网卡相同的节点,如numactl --membind=0 --cpunodebind=0 your_app或taskset -c 0,1 your_app,从而确保一致性,减少跨节点访问带来的性能损耗。

Linux系统在处理多核、多节点服务器时,网络性能优化变得尤为重要,尤其是涉及到NUMA(Non-Uniform Memory Access)架构下的网络绑定问题。如果你发现网卡中断或网络处理线程频繁跨NUMA节点运行,那很可能会带来明显的延迟和性能下降。优化NUMA绑定,核心就是让网卡中断、软中断、以及应用尽可能跑在同一个NUMA节点上。

在多路CPU服务器中,每个CPU插槽通常对应一个NUMA节点。每个节点有自己的内存控制器和本地内存。当某个CPU访问本地内存时速度最快,访问其他节点的内存就会有延迟。
对于网络IO来说,如果网卡连接的是某个NUMA节点,但处理该网卡中断的CPU却属于另一个节点,那么每次处理都需要跨节点访问内存,造成额外延迟。尤其在高吞吐或低延迟场景下,这种影响会非常明显。

所以优化的第一步是确认:
要优化,首先要确认硬件连接情况。可以使用以下命令来查看网卡对应的NUMA节点:

cat /sys/class/net/eth0/device/numa_node
替换 eth0 为你的实际网卡名。输出是一个数字,代表该网卡所在的NUMA节点编号(比如0或1)。
你也可以通过 lspci -v 或 dmidecode 来查看PCIe设备所属的socket信息,进一步确认其所在节点。
网卡的数据处理首先是通过硬中断触发的,中断处理程序(IRQ)如果不在本地节点上运行,会导致跨节点内存访问。
查看网卡使用的中断号:
cat /proc/interrupts | grep eth0
编辑 /proc/irq/<irq_number>/smp_affinity_list 文件,将中断绑定到本地节点上的CPU核心。
比如你的网卡在NUMA节点0,且节点0包含CPU0~7:
echo 0-7 > /proc/irq/<irq_number>/smp_affinity_list
⚠️ 注意:某些系统需要先关闭irqbalance服务,避免它自动调整中断亲和性。
即使硬中断绑定了正确CPU,软中断(softirq)仍然可能被调度到其他节点上执行。这部分可以通过taskset或cpuset控制。
rss或rps设置软中断处理CPU例如,设置RPS的CPU掩码:
echo f > /sys/class/net/eth0/queues/rx-0/rps_cpus
这里f是十六进制,表示CPU0~3启用RPS。
rps_flow_cnt进行更细粒度的控制。isolcpus隔离专用CPU处理网络在启动参数中加入 isolcpus=...,保留一组CPU专门用于网络处理。这样可以避免其他进程干扰,并确保软中断始终运行在同一节点。
最后,如果你的应用(如Nginx、Redis、DPDK程序等)对延迟敏感,也要将其绑定到与网卡相同的NUMA节点上。
可以使用 numactl 命令来启动程序:
numactl --membind=0 --cpunodebind=0 your_app
这会强制程序只使用NUMA节点0的内存和CPU,避免跨节点访问。
此外,也可以结合taskset来绑定具体CPU核心:
taskset -c 0,1 your_app
基本上就这些。虽然看起来步骤有点多,但只要按顺序理清每个环节,就能有效减少跨NUMA访问带来的延迟问题。关键在于“一致性”——从硬件到中断再到应用,尽量都跑在同一个NUMA节点上。
以上就是如何优化Linux网络NUMA绑定 跨节点访问延迟解决的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号