要查看linux中网卡对应的numa节点,可通过/sys/class/net/网卡名/device/numa_node文件查询;再使用lscpu或/proc/cpuinfo确认cpu所属numa节点;随后可按以下步骤优化性能:1. 将网卡中断绑定到同numa节点的cpu;2. 调整rps/rfs设置确保软中断本地处理;3. 使用numactl或taskset限制关键进程运行在特定numa节点;4. bios中设置优先访问本地内存;最后通过perf、numastat及网络压测工具验证优化效果。

Linux系统中,网络接口(NIC)与CPU的NUMA节点绑定情况对性能影响很大,尤其是高性能计算、虚拟化或大规模网络服务场景下。如果网卡所在的NUMA节点和处理它的CPU不在同一节点,就会出现跨节点访问,带来额外延迟和性能损耗。要优化这个问题,首先得知道怎么查看当前网卡绑定了哪个NUMA节点。

在Linux中,每个网络接口都对应一个设备目录,通常位于 /sys/class/net/ 下。比如你的网卡是 eth0,你可以通过下面这个路径来查看它所属的 NUMA 节点:

cat /sys/class/net/eth0/device/numa_node
输出结果是一个数字,表示该网卡关联的 NUMA 节点编号。例如输出 0 表示这个网卡属于 NUMA 节点0。
如果你不确定网卡名字,可以用 ip link show 或者 ls /sys/class/net/ 来列出所有可用的网络接口。

小提示:有些老旧或不支持NUMA的硬件可能会返回 -1,这表示没有指定NUMA节点。
光知道网卡在哪一个NUMA节点还不够,你还得看看你打算用来处理网络数据包的CPU是否也在同一个节点上。
可以使用 lscpu 命令来查看每个CPU核心所属的NUMA节点:
lscpu | grep 'core.*node'
或者更详细地查看每个CPU的信息:
cat /proc/cpuinfo | grep -E 'processor|node'
这样你就能看到各个CPU核心分别属于哪个NUMA节点了。理想情况下,处理某个网卡中断或软中断的CPU应该和该网卡处于同一个NUMA节点。
为了尽量避免跨节点访问带来的性能损耗,可以做以下几个方面的优化:
绑定网卡中断到同NUMA节点的CPU
修改 /proc/irq/<irq_number>/smp_affinity_list,将网卡的中断绑定到与该网卡同NUMA节点的CPU上。
调整RPS/RFS设置
如果你在使用多队列网卡或者启用了RPS(Remote Packet Steering),确保软中断处理也尽量在同节点执行。
使用numactl或taskset启动关键进程
对于一些关键应用,比如DPDK程序、KVM虚拟机监控器等,可以通过 numactl --cpunodebind=0 --membind=0 your_program 来限制其运行在特定NUMA节点上。
BIOS设置优先选择本地内存访问
某些服务器主板的BIOS中提供了“NUMA node interleave”或“Memory Access Mode”选项,设为 Local 可以优先访问本地节点内存,有助于减少延迟。
完成上述配置后,可以通过以下方式验证是否成功减少了跨节点访问:
perf 工具观察是否存在大量的远程内存访问事件;numastat 查看各节点上的内存分配情况;当然,最直接的方式还是测试性能变化。比如跑一个高吞吐量的网络压测工具(如iperf3、netperf等),对比优化前后的吞吐量、延迟和CPU利用率。
基本上就这些操作。虽然看起来有点复杂,但只要一步步查清楚各个部件的位置,再合理安排它们之间的关系,就可以有效避免不必要的跨节点访问问题。
以上就是如何查看Linux网络接口NUMA绑定 跨节点访问优化的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号