首页/系统/Linux 内核与性能调优速查/irqbalance 中断均衡服务
CPU 与调度60 条

irqbalance 中断均衡服务

irqbalance 自动把硬件中断分散到各核心,减少单核软中断热点;与手动 IRQ 亲和性设置冲突时需二选一。

服务是干什么的

irqbalance 是用户态守护进程,周期性读取各中断的计数与系统拓扑,把硬件中断(网卡多队列、存储控制器、USB 等)分散到不同 CPU 上,避免所有中断堆在 CPU0 形成软中断热点。它按 NUMA 节点与缓存层级做启发式分配,因此与手动 IRQ 亲和设置(tuna、smp_affinity、驱动参数)存在直接冲突:谁最后写入,谁的决定生效。

基本信息

适用平台主流 Linux 发行版(RHEL/CentOS/Debian/Ubuntu)
查看状态systemctl is-active irqbalance
配置文件RHEL 系 /etc/sysconfig/irqbalance,Debian 系 /etc/default/irqbalance
常用参数--banirq=<n> 把指定中断排除在均衡之外;--oneshot 执行一次后退出
冲突对象手动 smp_affinity_list、tuna、驱动侧队列绑定
权限读写中断亲和与改配置需 root

典型使用场景

  • 通用业务服务器:开启后自动分散中断,降低单核软中断打满的概率
  • 低延迟/绑核调优:先停用 irqbalance,再按规划手工绑定中断与业务线程
  • 排查「手动绑定几分钟后失效」:确认是 irqbalance 周期性重写亲和掩码
  • 多队列网卡高 PPS 场景:结合队列数、RPS/RFS 与 irqbalance 策略决定是否手工接管
  • NUMA 机器上核对中断是否落在设备所属节点,避免跨节点内存访问

查看与停止

查看与停止
systemctl is-active irqbalance  # 先确认它是否在运行
cat /proc/interrupts | head -20  # 观察各中断计数在不同 CPU 上的分布
sudo irqbalance --oneshot --debug  # 执行一次均衡并打印决策过程,便于对照理解
sudo systemctl stop irqbalance  # 需要完全手工绑定时先停服务
sudo systemctl disable irqbalance  # 方案验证通过后再禁止开机自启
grep -rn 'IRQBALANCE_ARGS' /etc/sysconfig/irqbalance /etc/default/irqbalance  # 核对启动参数

场景与取舍

场景建议原因
通用业务服务器保持开启自动均衡能有效避免单核中断热点
低延迟/绑核调优停用并手工绑定irqbalance 会周期性覆盖手动亲和设置
只需固定个别中断用 --banirq 排除让 irqbalance 不再动该中断,同时保留其他中断的自动均衡
NUMA 敏感业务结合设备所属节点绑核中断跨节点会抬高内存访问延迟
停用 irqbalance 后如果没有配套的手工规划,中断会按驱动默认掩码集中在少数核(常见 CPU0),单核软中断打满的风险反而更高。停之前先确定每条队列绑到哪个核,并记录原始 smp_affinity_list 以便回退。
容器内执行 stop/disable 或改中断亲和通常无效或看不到宿主中断,需要以宿主机视角操作;云主机上部分中断不向 guest 暴露,此时应从实例规格与宿主机侧指标评估。

易错点

  • 手动绑定与 irqbalance 同时存在:手动设置被周期性重写,表现为「刚绑好就恢复原样」,必须先停服务或 banirq
  • 停用 irqbalance 却不做手工规划:中断集中到个别核,软中断热点更严重
  • NUMA 节点错配:把设备中断绑到远端节点的核上,吞吐看着没变但延迟明显上升
  • 只靠 irqbalance 解决所有中断问题:队列数不足、RPS/RFS 未配置、单队列压力过大这些情况均衡能力有限,需要从设备与应用层改
  • 把改动写在运行时而不固化:重启后 irqbalance 恢复默认策略或手工绑定丢失,故障延迟复现

数据来源与参考

  • irqbalance 官方文档
  • Linux 内核 Documentation/core-api/irq/
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌