nmcli不能配置QoS调度算法,因其仅管理网络连接层(IP、路由等),而QoS队列调度属内核底层流量整形机制,需用tc工具配合sysctl参数实现;nmcli仅可辅助确保网卡就绪、避免配置冲突。

nmcli 本身不直接配置 Linux 内核级的流量控制(QoS)队列调度算法,比如 tc 的 qdisc、class 或 filter。它专注在**网络连接层**:IP 地址、路由、DNS、DHCP、连接启停等。QoS 队列调度属于**内核网络栈底层的流量整形与调度机制**,需通过 tc(traffic control)工具配合 sysctl 参数完成。
为什么 nmcli 不能设 QoS 调度算法
nmcli 管理的是 NetworkManager 所抽象的「网络连接」(connection),对应配置文件如 /etc/sysconfig/network-scripts/ifcfg-eth0 或 /etc/NetworkManager/system-connections/ 下的 profile。这些配置不包含 qdisc 类型、HTB class 带宽、FQ_CODEL 间隔等参数。NetworkManager 也未提供 tc 相关的扩展接口或属性字段。
正确配置 QoS 队列调度的路径
要为物理网卡(如 eth0)设置 QoS 调度算法,必须绕过 nmcli,直接使用 tc 和内核参数:
-
查看当前 qdisc:
tc qdisc show dev eth0 -
设置默认调度器(影响新连接):
sudo sysctl -w net.core.default_qdisc=fq_codel(推荐低延迟场景) -
手动添加 HTB 根队列(带类分级):
sudo tc qdisc add dev eth0 root handle 1: htb default 10sudo tc class add dev eth0 parent 1: classid 1:10 htb rate 100mbit ceil 100mbit -
绑定流量到特定 class(例如按端口):
sudo tc filter add dev eth0 parent 1: protocol ip u32 match ip dport 80 0xffff flowid 1:10
nmcli 可做的辅助配合
虽然不能设 qdisc,但 nmcli 可确保网卡就绪、避免冲突,为 tc 配置打基础:
- 确认网卡已由 NetworkManager 管理且处于 connected 状态:
nmcli device status - 禁用可能干扰的自动配置(如 DHCP 覆盖静态路由):
nmcli connection modify eth0 ipv4.ignore-auto-routes yes - 将网卡设为开机启动并保持 up:
nmcli connection modify eth0 connection.autoconnect yes,再nmcli connection up eth0 - 若需持久化 tc 规则,可将
tc命令写入 systemd service 或 network script,而非依赖 nmcli 保存
多队列网卡与 CPU 绑定(提升 QoS 效果)
对高吞吐场景,QoS 效果依赖硬件多队列与 CPU 协同。nmcli 不参与此层,但你可以:
- 用
ethtool -l eth0查看支持的 RX/TX 队列数 - 用
echo f > /sys/class/net/eth0/queues/rx-0/rps_cpus启用 RPS(软件包分发) - 用
echo 2 > /proc/irq/XX/smp_affinity_list将 RX 中断绑定到指定 CPU(需先查中断号)











