nmcli 不直接配置网卡多队列,需用 ethtool 设置队列数、sysfs 绑定中断亲和性,并可选启用 RPS/RFS;nmcli 仅用于连接管理及持久化配置。

nmcli 本身不直接配置网卡多队列(Multiqueue),它主要用于网络连接管理(如 IP 地址、DNS、路由等),而多队列属于底层驱动与中断调度范畴,需通过 ethtool、sysfs 和内核参数协同完成。真正起作用的是网卡驱动、RSS 硬件能力及中断亲和性设置。
确认并启用网卡多队列(非 nmcli 操作)
多队列必须由网卡硬件支持(如 ixgbe、i40e、mlx5、virtio-net),且驱动已加载 RSS 功能:
- 查看当前队列数:ethtool -l eth0(替换 eth0 为实际接口名);若 Current hardware settings 中 RX/TX channel 数大于 1,说明已启用
- 若未启用,用 ethtool 设置(需 root 权限):sudo ethtool -L eth0 combined 4(设为 CPU 核心数或略高,如 4/8/16)
- 验证生效:ls /sys/class/net/eth0/queues/ 应出现 rx-0、rx-1、tx-0、tx-1 等目录
绑定 RX 中断到不同 CPU(关键步骤)
每个 rx-N 队列对应一个独立 MSI-X 中断,必须手动绑定,否则默认全落在 CPU0:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- 查中断号:grep "eth0-rx" /proc/interrupts,输出形如 45: 123456 0 0 0 PCI-MSI-edge eth0-rx-0
- 按队列编号轮询绑定(推荐脚本化):
echo 1 > /proc/irq/45/smp_affinity_list(rx-0 → CPU0)
echo 2 > /proc/irq/46/smp_affinity_list(rx-1 → CPU1)
echo 4 > /proc/irq/47/smp_affinity_list(rx-2 → CPU2)
依此类推,避免跨 NUMA 节点(可用 lscpu 查看拓扑)
补充软中断均衡(RPS/RFS,增强型分摊)
即使硬件中断已分散,软中断(ksoftirqd)仍可能集中。可启用 RPS 做软件层负载再分发:
- 对所有 rx 队列启用 RPS(例如让前 4 个 CPU 参与):
for i in /sys/class/net/eth0/queues/rx-*/rps_cpus; do echo f > $i; done
(f = 0xf = 二进制 1111,即 CPU0–3) - 启用 RFS 提升缓存局部性(可选):
echo 32768 > /proc/sys/net/core/rps_sock_flow_entries
for i in /sys/class/net/eth0/queues/rx-*/rps_flow_cnt; do echo 2048 > $i; done
nmcli 的辅助角色(仅限连接持久化)
nmcli 不参与队列配置,但可确保 ethtool 设置在重启后不丢失(需配合 systemd 或 ifup 脚本):
- 创建自定义连接配置(可选):nmcli connection add type ethernet con-name "eth0-tuned" ifname eth0
- 将多队列设置写入开机脚本(如 /etc/rc.local 或 systemd service),再用 nmcli 控制连接启停
- 注意:不要依赖 nmcli 修改 /sys/class/net/... 下的队列参数,它无此能力










