news 2026/4/25 16:46:19

irqbalance 动态均衡详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
irqbalance 动态均衡详解

irqbalance 动态均衡详解(Linux 中断负载均衡机制)

irqbalance是 Linux 上用于自动分配硬件中断(IRQ)到不同 CPU 核的守护进程,目标是:

  • 降低单核中断热点(IRQ Hotspot)

  • 平衡多核负载

  • 提高 cache locality(缓存命中)

  • 优化网络、磁盘、存储设备吞吐

  • 减少软中断(softirq)瓶颈

它本质上是:

动态调整/proc/irq/*/smp_affinity的自动调度器


一、先理解什么是 IRQ 绑定


1. 一个网卡中断默认可能集中在一个核

看中断:

cat /proc/interrupts

例如:

CPU0 CPU1 CPU2 CPU3 44: 1000000 0 0 0 IR-PCI-MSI eth0-TxRx-0 45: 950000 0 0 0 IR-PCI-MSI eth0-TxRx-1

全部压在 CPU0:

  • CPU0软中断高

top -H

可能:

si 50%

或者:

ksoftirqd/0 100%

这是热点。


2. 手工绑核

例如:

echo 2 > /proc/irq/44/smp_affinity

2:

0010

表示绑 CPU1。

问题:

  • 手工维护困难

  • NUMA 拓扑变化难处理

  • 网卡队列变化不好适配

所以需要 irqbalance。


二、irqbalance 工作原理


守护进程:

/usr/sbin/irqbalance

周期运行:

默认约:

10 秒扫描一次

做三件事:


(1)采集系统拓扑

读取:

/sys/devices/system/cpu/

识别:

  • CPU core

  • socket

  • NUMA node

  • cache domain

例如:

Socket0 ├── Core0 ├── Core1 Socket1 ├── Core8 ├── Core9

(2)分析中断负载

读:

/proc/interrupts

统计:

  • 每IRQ频率

  • 每CPU中断量

  • 哪个核过载


(3)动态迁移 IRQ

修改:

/proc/irq/N/smp_affinity

把中断迁往空闲核:

例如:


原来:

eth0-rx0 -> CPU0 eth0-rx1 -> CPU0

调整后:

eth0-rx0 -> CPU0 eth0-rx1 -> CPU2

这叫动态均衡。


三、核心算法


Balance Level(平衡层级)

irqbalance 有拓扑层次:


package(socket级)

按CPU物理包均衡

socket0 ←→ socket1

适合:

  • 双路服务器


cache级

按共享L3缓存均衡:

Core0-3 共享cache IRQ尽量留在该组

提高 cache hit。


core级

精细到核:

core-to-core

适合高并发网络。


四、为什么它“动态”

因为负载变了它会重新迁移。


比如:

开始:

网卡忙 CPU0中断高

迁移:

CPU2 分担

后来:

磁盘开始繁忙:

CPU2压力高

再迁:

IRQ -> CPU3

这就是动态。


五、irqbalance 与 RSS/RPS关系

这是最容易混淆的地方。


(1)RSS(硬件多队列)

网卡自己分流:

Flow Hash Queue0 -> CPU0 Queue1 -> CPU1

硬件层。


(2)irqbalance

决定:

Queue0 IRQ绑哪个CPU

软件调度层。


(3)RPS

收到包后:

softirq再转别核

软件第二层。


关系:

RSS ↓ irqbalance ↓ RPS

三层协作。


六、查看 irqbalance 状态


服务状态

systemctl status irqbalance

是否开机启动

systemctl is-enabled irqbalance

查看实际效果

watch -n1 cat /proc/interrupts

观察中断是否分散:

坏:

CPU0 10000000 CPU1 0

好:

CPU0 2500000 CPU1 2500000 CPU2 2500000 CPU3 2500000

看 affinity

cat /proc/irq/44/smp_affinity_list

例如:

0-3

七、配置文件

通常:

/etc/sysconfig/irqbalance

或:

/etc/default/irqbalance

ban cpu(排除CPU)

IRQBALANCE_BANNED_CPUS=00000001

不让CPU0参与。

常用于:

  • 留 CPU0 给 OS housekeeping


balance interval

--interval=5

5秒重平衡。


NUMA策略

--hintpolicy=subset

按 NUMA hint 调优。


八、什么时候不建议开


场景1 低延迟交易系统

手工绑核优于动态迁移:

irqbalance off

因为迁移导致 cache miss。


场景2 DPDK

用户态轮询:

不用中断

irqbalance没意义。


场景3 数据库绑核

比如:

MySQL on CPU2-15 IRQ在CPU0-1

需要手工隔离。


九、生产中常见误区


误区1

以为开 irqbalance 就自动优化网络。

错。

如果:

单队列网卡

无队列可分。

效果有限。


误区2

irqbalance 和 RSS 冲突

错。

它们互补。


误区3

关闭 irqbalance 性能一定更高

错。

普通服务器:

开着通常更优。


十、性能收益(典型)


10G 网卡

不开:

单核瓶颈 4 Gbps

开启:

多核分摊 9+ Gbps

降低 softirq

ksoftirqd CPU 90% ↓ 30%

降低丢包

rx_dropped下降

十一、诊断命令组合


cat /proc/interrupts cat /proc/softirqs mpstat -P ALL 1 watch -n1 'grep eth /proc/interrupts' cat /proc/irq/*/smp_affinity_list

配合:

ethtool -l eth0 ethtool -x eth0

看 RSS 队列。


十二、本质总结


irqbalance 做的是:

实时观察: IRQ负载 CPU拓扑 NUMA结构 ↓ 动态修改: /proc/irq/*/smp_affinity ↓ 让中断跨核均衡

本质是:

Linux 的 IRQ 自动调度器(AIOps for interrupts)


推荐生产策略

通用服务器

开 irqbalance 开 RSS 必要时开 RPS

高性能数据库

IRQ绑 housekeeping cores 业务绑专属 cores 可关 irqbalance

超高吞吐网络

irqbalance + RSS + XPS + RPS

完整中断栈调优。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/25 16:41:16

Mermaid Live Editor终极指南:免费在线图表编辑器快速上手教程

Mermaid Live Editor终极指南:免费在线图表编辑器快速上手教程 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid-liv…

作者头像 李华
网站建设 2026/4/25 16:40:24

如何高效管理ARK游戏模组:TEKLauncher一站式解决方案指南

如何高效管理ARK游戏模组:TEKLauncher一站式解决方案指南 【免费下载链接】TEKLauncher Launcher for ARK: Survival Evolved 项目地址: https://gitcode.com/gh_mirrors/te/TEKLauncher TEKLauncher是一款专为《ARK: Survival Evolved》设计的革命性启动器&…

作者头像 李华
网站建设 2026/4/25 16:38:19

LFM2.5-1.2B-Instruct企业实操:制造业MES系统集成轻量AI助手方案

LFM2.5-1.2B-Instruct企业实操:制造业MES系统集成轻量AI助手方案 1. 项目背景与模型特点 1.1 为什么选择轻量级大模型 在制造业数字化转型过程中,MES(制造执行系统)需要处理大量生产数据并与操作人员频繁交互。传统方案面临两个…

作者头像 李华