前言
在现代高性能网络场景中,单个中断往往成为多核 CPU 处理网络流量的瓶颈。Linux 通过中断负载均衡(IRQ**)与多队列(RSS/RPS/XPS)技术,将网络中断和数据处理分散到多个 CPU 核心,大幅提升并发处理能力和整体吞吐性能。
本篇重点讲解:
-
中断与软中断基础
-
irqbalance 服务与静态绑定
-
多队列网卡(RSS、RPS、XPS)原理与配置
-
实战调优示例:中断绑定与多队列性能测试
-
监控与验证工具
一、中断与软中断基础
1. 硬件中断 (IRQ)
-
定义:硬件设备发起的中断信号,CPU 响应后执行对应中断处理程序。
-
网络接口:网卡在接收/发送完成后触发 IRQ,通知内核处理 sk_buff。
-
问题:单核 CPU 长时间处理中断,导致其他中断/进程延迟。
2. 软中断 (SoftIRQ)
-
定义:内核在中断上下文中延迟执行的处理,用于网络、块设备等子系统。
-
NR_IRQ:软中断类型网络属于 NET_RX 和 NET_TX。
-
处理流程:硬中断 -> 调度软中断 -> 执行软中断处理。
3. NUMA 与中断
-
在 NUMA 系统中,设备与 CPU 距离影响中断延迟及缓存命中率。
二、irqbalance 服务与静态绑定
1. irqbalance
-
功能:自动在多个 CPU 之间分配硬件中断,避免单核过载。
-
使用:常见于服务器默认安装并启用。
# 查看状态
systemctl status irqbalance
# 启用/禁用
sudo systemctl enable irqbalance\ sudo systemctl restart irqbalance
2. 静态绑定(Affinity)
-
场景:关键业务场景需手动精细绑定。
-
实现:通过写入
/proc/irq/<IRQ#>/smp_affinity
设置 CPU 位掩码。
# 查看 irq 列表及对应网络设备
grep eth0 /proc/interrupts
# 假设 IRQ 45 是 eth0 rx
echo 0xFF > /proc/irq/45/smp_affinity # 绑定 CPU0-7
三、多队列网卡原理与配置
1. RSS (Receive Side Scaling)
-
原理:网卡根据哈希算法将接收包分发到多个硬件队列,每队列触发不同中断,分散 CPU 处理负载。
-
配置:通过
ethtool -L
或网卡驱动参数启用。
# 查看当前队列数
ethtool -l eth0
# 设置 Rx/Tx 队列数
sudo ethtool -L eth0 rx 8 tx 8
2. RPS (Receive Packet Steering)
-
原理:内核在软中断处理中将包进一步分发到不同 CPU 软队列。
-
配置:
# 启用全局 RPS
for iface in /sys/class/net/*/queues/rx-*/rps_cpus; do echo f > $iface; done
# 调整每队列的 RPS 配置
3. XPS (Transmit Packet Steering)
-
原理:与 RPS 类似,针对发送侧,将发送队列绑定到不同 CPU。
-
配置:
for iface in /sys/class/net/*/queues/tx-*/xps_cpus; do echo f > $iface; done
四、实战调优示例
1. 环境准备
-
双机直连,网卡支持多队列。
-
安装
iperf3
、mpstat
、htop
。
2. 关闭 irqbalance
sudo systemctl stop irqbalance
3. 强制启用多队列
# 设置 Rx 8 队列、Tx 8 队列
sudo ethtool -L eth0 rx 8 tx 8
4. 绑定中断到 CPU
# 查询 eth0 中断号
grep eth0 /proc/interrupts
# 对每个 Rx 队列分别绑定
echo 1 > /proc/irq/45/smp_affinity
echo 2 > /proc/irq/46/smp_affinity
# 依此类推...
5. 启用 RPS/XPS
# 允许运行所有 CPU
for f in /sys/class/net/eth0/queues/rx-*/rps_cpus; do echo f > $f; done
for f in /sys/class/net/eth0/queues/tx-*/xps_cpus; do echo f > $f; done
6. 性能对比
未启用多队列
iperf3 -c server -P 10
# 带宽:600Mbps
mpstat -P ALL 1 5 # CPU0 80%软中断
启用多队列后
iperf3 -c server -P 10
# 带宽:950Mbps
mpstat -P ALL 1 5 # 多核软中断分散,CPU 利用率均衡
五、监控与验证工具
-
mpstat:监控软中断(softIRQ)
-I CPU
。 -
htop:观察中断负载在各核分布。
-
ethtool -S:查看网卡丢包与队列统计。
mpstat -I ALL 1
ethtool -S eth0 | grep rx_queued
六、小结与建议
-
优先使用驱动多队列:RSS 提升硬件接收并发。
-
结合 RPS/XPS:软件层面再分发,保证软中断和发送均衡。
-
中断绑定策略:对关键业务可做静态绑定,否则启用 irqbalance。
-
持续监控:软中断、队列长度和 CPU 利用是调优依据。