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全部压在 CPU0CPU0软中断高top -H可能si 50%或者ksoftirqd/0 100%这是热点。2. 手工绑核例如echo 2 /proc/irq/44/smp_affinity20010表示绑 CPU1。问题手工维护困难NUMA 拓扑变化难处理网卡队列变化不好适配所以需要 irqbalance。二、irqbalance 工作原理守护进程/usr/sbin/irqbalance周期运行默认约10 秒扫描一次做三件事1采集系统拓扑读取/sys/devices/system/cpu/识别CPU coresocketNUMA nodecache domain例如Socket0 ├── Core0 ├── Core1 Socket1 ├── Core8 ├── Core92分析中断负载读/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 有拓扑层次packagesocket级按CPU物理包均衡socket0 ←→ socket1适合双路服务器cache级按共享L3缓存均衡Core0-3 共享cache IRQ尽量留在该组提高 cache hit。core级精细到核core-to-core适合高并发网络。四、为什么它“动态”因为负载变了它会重新迁移。比如开始网卡忙 CPU0中断高迁移CPU2 分担后来磁盘开始繁忙CPU2压力高再迁IRQ - CPU3这就是动态。五、irqbalance 与 RSS/RPS关系这是最容易混淆的地方。1RSS硬件多队列网卡自己分流Flow Hash Queue0 - CPU0 Queue1 - CPU1硬件层。2irqbalance决定Queue0 IRQ绑哪个CPU软件调度层。3RPS收到包后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看 affinitycat /proc/irq/44/smp_affinity_list例如0-3七、配置文件通常/etc/sysconfig/irqbalance或/etc/default/irqbalanceban cpu排除CPUIRQBALANCE_BANNED_CPUS00000001不让CPU0参与。常用于留 CPU0 给 OS housekeepingbalance interval--interval55秒重平衡。NUMA策略--hintpolicysubset按 NUMA hint 调优。八、什么时候不建议开场景1 低延迟交易系统手工绑核优于动态迁移irqbalance off因为迁移导致 cache miss。场景2 DPDK用户态轮询不用中断irqbalance没意义。场景3 数据库绑核比如MySQL on CPU2-15 IRQ在CPU0-1需要手工隔离。九、生产中常见误区误区1以为开 irqbalance 就自动优化网络。错。如果单队列网卡无队列可分。效果有限。误区2irqbalance 和 RSS 冲突错。它们互补。误区3关闭 irqbalance 性能一定更高错。普通服务器开着通常更优。十、性能收益典型10G 网卡不开单核瓶颈 4 Gbps开启多核分摊 9 Gbps降低 softirqksoftirqd 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完整中断栈调优。