Skip to main content
☘️ Septvean's Documents
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

irqbalance

一、irqbalance 是什么

irqbalance 是一个用于自动调整“中断亲和性(IRQ affinity)”的用户态守护进程。

它的核心作用是:

将硬件中断合理分配到多个 CPU 核心上,避免中断集中在单一 CPU,提升整体性能与稳定性。


二、为什么需要 irqbalance

1. 什么是中断(IRQ)

中断(Interrupt Request,IRQ) 是硬件向 CPU 发出的即时通知,例如:

  • 网卡收到数据包
  • 磁盘 I/O 完成
  • 定时器触发
  • 硬件错误

当中断发生时:

  • CPU 暂停当前执行的任务
  • 进入内核态
  • 执行对应的 中断处理函数

2. 中断亲和性(IRQ Affinity)

中断亲和性 指的是:

某个中断只能由哪些 CPU 核心来处理

在 Linux 中:

  • 每个 IRQ 都有一个 smp_affinity 位掩码
  • 决定该 IRQ 可在哪些 CPU 上运行

查看方式:

cat /proc/interrupts
cat /proc/irq/IRQ编号/smp_affinity

3. 没有 irqbalance 会发生什么

在很多系统中(尤其是服务器、虚拟机、双路 NUMA):

  • 网卡中断集中在 CPU0
  • CPU0 软中断(softirq)占用极高
  • 其他 CPU 空闲

典型问题:

  • 网络吞吐下降
  • 延迟升高
  • CPU 使用率不均衡
  • 数据库、网络服务性能不稳定

三、irqbalance 的工作原理

1. 整体流程

irqbalance 周期性执行以下步骤:

  1. 读取系统中所有 IRQ
  2. 分析:
    • 中断频率
    • CPU 负载
    • NUMA 拓扑
  3. 计算更优的中断分配方案
  4. 动态调整每个 IRQ 的 smp_affinity

2. 核心决策依据

irqbalance 主要考虑:

  • CPU 核心数量
  • CPU 当前负载
  • 中断触发频率
  • NUMA 节点亲和性
  • 是否为 MSI/MSI-X 中断

3. NUMA 感知

在 NUMA 系统中:

  • 优先将设备中断绑定到 本地 NUMA 节点的 CPU
  • 减少跨 NUMA 内存访问
  • 提升缓存命中率

四、irqbalance 适合的场景

强烈建议开启

  • 多核服务器
  • 双路 / 多路 NUMA 服务器
  • 高速网卡(10G / 25G / 100G)
  • 虚拟化宿主机
  • 容器宿主机

不建议开启的场景

  1. 实时系统

    • 需要严格、可预测的中断延迟
  2. 数据库或网络服务已手动绑定中断

    • 人工指定 IRQ -> CPU
  3. 高性能调优场景

    • 明确知道每个中断应该跑在哪个 CPU 上

五、irqbalance 的优缺点

优点

  • 自动化
  • 开箱即用
  • 减少 CPU 热点
  • 改善网络和 I/O 性能
  • 对 NUMA 友好

缺点

  • 行为不可完全预测
  • 可能打乱人工优化的 IRQ 绑定
  • 对极端低延迟场景不友好

六、irqbalance 常用操作

1. 查看状态

systemctl status irqbalance

2. 启动 / 停止

systemctl enable --now irqbalance
systemctl disable --now irqbalance

3. 查看当前中断分布

cat /proc/interrupts

关注:

  • 单个 IRQ 是否集中在某一个 CPU
  • 网卡相关 IRQ 是否分散

七、irqbalance 与手动 IRQ 绑定的关系

手动绑定方式

echo 4 > /proc/irq/IRQ编号/smp_affinity

含义:

  • 将中断绑定到 CPU2(位掩码)

冲突规则(重要)

irqbalance 会覆盖你手动设置的中断亲和性

如果你需要手动控制:

  • 必须停止 irqbalance
  • 或在 irqbalance 配置中排除指定 IRQ

八、irqbalance 配置文件

配置文件路径

/etc/sysconfig/irqbalance

常见配置项

IRQBALANCE_BANNED_CPUS=00000001

含义:

  • 禁止将中断分配到 CPU0

  • 常用于:

    • CPU0 专门跑系统任务
    • 其它 CPU 跑业务负载

九、irqbalance 与性能调优的关系

网络性能

  • 避免网卡中断堆积
  • 减少软中断延迟
  • 提升 PPS 和吞吐

数据库性能

  • 减少 CPU 抢占
  • 提升 I/O 稳定性
  • 降低尾延迟(tail latency)

十、总结(非常重要)

一句话总结

irqbalance 的本质是:自动管理中断亲和性,让中断“平均且合理”地跑在多个 CPU 上。


使用建议

场景 建议
普通服务器 开启
NUMA 服务器 开启
人工 IRQ 调优 关闭
实时系统 关闭