nmcli本身不直接配置rss,需用ethtool调整硬件队列与驱动参数,并通过/proc/irq设置irq亲和性;nmcli仅用于禁用接口接管或配置静态连接以保障rss环境稳定。

nmcli 本身不直接配置 RSS(Receive Side Scaling),因为 RSS 是网卡硬件与内核驱动协同实现的底层功能,需通过 ethtool 和内核参数调整,而非 NetworkManager 管理范畴。但 nmcli 可配合完成基础网络就绪工作,确保 RSS 配置生效环境稳定。
确认网卡支持并启用多队列
RSS 依赖网卡硬件多队列能力。先用 ethtool 检查当前状态:
-
查看队列数量:
ethtool -l enp3s0(将enp3s0替换为实际接口名),输出中Current hardware settings行显示当前 RX/TX 队列数 -
启用最大队列数(如支持):
sudo ethtool -L enp3s0 combined 16,设为 CPU 核心数或略少(避免超配) -
验证驱动加载 RSS 支持:检查
sudo ethtool -k enp3s0 | grep receive-scaling,应显示receive-scaling: on
绑定中断到指定 CPU 核心(IRQ affinity)
RSS 队列产生的硬中断需分发到不同 CPU,否则仍集中于单核。这一步不通过 nmcli,而是操作 /proc/irq/:
- 查每个队列对应 IRQ:
grep enp3s0 /proc/interrupts,每行末尾数字即 IRQ 编号 - 将 IRQ 绑定到特定 CPU(例如 IRQ 123 分配给 CPU 0 和 1):
echo 3 | sudo tee /proc/irq/123/smp_affinity_list(3 = 0b11) - 建议使用
irqbalance服务自动管理,或编写脚本按 NUMA 节点均衡分配
配合 nmcli 确保网络连接稳定可靠
虽然 nmcli 不管 RSS,但它能避免因连接管理冲突导致 RSS 队列被重置或中断丢失:
- 禁用 NetworkManager 对该接口的自动接管(防止重启后覆盖 ethtool 设置):
sudo nmcli dev set enp3s0 managed no - 若需保留 NM 管理,创建静态连接时关闭可能干扰的特性:
nmcli con mod "my-eth" ethernet.accept-all-mac-addresses no、ipv4.ignore-auto-routes yes - 检查设备状态是否为
connected且无错误:nmcli device show enp3s0 | grep -E "(STATE|CONNECTION)"
验证 RSS 是否生效
配置完成后,观察负载分布和中断走向是否符合预期:
- 实时查看各队列收包计数:
watch -n1 'cat /sys/class/net/enp3s0/device/rss_indir 2>/dev/null || echo "RSS not exposed"'(部分驱动暴露此文件) - 统计各 CPU 处理的软中断:
watch -n1 'cat /proc/softirqs | grep -i "NET_RX" - 对比启用前后吞吐与延迟:
iperf3 -c SERVER_IP -t 30 -P 8,观察 CPU 使用是否更均衡











