nmcli不支持配置网卡多队列及RPS/RFS/XPS等底层参数,需用ethtool、sysfs写入和IRQ绑定等内核级操作实现软中断均衡。

确认并启用网卡硬件多队列(RSS)
这是所有后续优化的基础。先查当前能力:
ethtool -l eth0(把 eth0 替换为你的实际接口名)
若输出中 Combined 最大值 ≥ 4(常见服务器 CPU 核数),且当前值为 1,则需启用:
- sudo ethtool -L eth0 combined 4(设为物理核心数,非超线程数)
- 验证:ls /sys/class/net/eth0/queues/ 应出现 rx-0、rx-1、rx-2、rx-3
停用 irqbalance 并手动绑定中断到不同 CPU
irqbalance 常误将全部 RSS 队列中断集中到 CPU0,导致 softirq 不均衡:
- sudo systemctl stop irqbalance && sudo systemctl disable irqbalance
- grep eth0 /proc/interrupts | awk '{print $1}' | sed 's/://' → 获取各队列 IRQ 编号(如 123、124…)
- 按顺序绑定:echo 0 > /proc/irq/123/smp_affinity_list(rx-0 → CPU0);echo 1 > /proc/irq/124/smp_affinity_list(rx-1 → CPU1)……
- 验证:watch -n1 'cat /proc/interrupts | grep eth0',确认各队列中断计数在不同 CPU 列增长
启用 RPS + RFS 提升软件层负载与缓存局部性
RPS 在无 RSS 或队列不足时补位;RFS 进一步让同一 TCP 流始终由上次处理它的 CPU 处理:
- 为每个 rx 队列设 CPU 掩码(例:4 核用 f):
echo f > /sys/class/net/eth0/queues/rx-0/rps_cpus
echo f > /sys/class/net/eth0/queues/rx-1/rps_cpus
……(覆盖全部 rx-*) - 设每队列 RFS 流表容量(推荐 2048–4096):
echo 4096 > /sys/class/net/eth0/queues/rx-0/rps_flow_cnt
echo 4096 > /sys/class/net/eth0/queues/rx-1/rps_flow_cnt
…… - 设全局流表总条目:
echo 16384 > /proc/sys/net/core/rps_sock_flow_entries(4 核 × 4096) - 开启 RFS 全局开关:
echo 1 > /proc/sys/net/core/netdev_rfs_threshold
可选:配置 XPS 优化发送路径
避免 TX 软中断跨核竞争,提升发送效率:
- echo f > /sys/class/net/eth0/queues/tx-0/xps_cpus
echo f > /sys/class/net/eth0/queues/tx-1/xps_cpus
……(与 rx 队列一一对应)
完成后,用 watch -n1 'cat /proc/softirqs | grep NET_RX' 观察各 CPU 的 NET_RX 计数是否同步上升——若 CPU0 明显高于其他核,说明某步未生效,需回溯检查队列数、掩码、IRQ 绑定是否对齐。


















