Linux之irqbalance

关于Irqbalance

官方介绍:

Irqbalance is a daemon to help balance the cpu load generated by interrupts across all of a systems cpus. Irqbalance identifies the highest volume interrupt sources, and isolates each of them to a single unique cpu, so that load is spread as much as possible over an entire processor set, while minimizing cache miss rates for irq handlers

Irqbalance 是一个守护进程,用于帮助在系统的所有 CPU 之间平衡由中断产生的 CPU 负载。Irqbalance 识别出最高的中断源,并将它们每一个隔离到单个独特的 CPU 上,以尽可能在整个处理器集中分散负载,同时最小化 IRQ 处理器的缓存未命中率。

Irqbalance是用户空间用于优化中断的一个工具,通过周期性的(默认10s)统计各个cpu上的中断情况,重新对中断进行再分配,实现各个cpu上中断负载相对均衡。它的目标是避免某些 CPU 核心因处理过多中断而成为性能瓶颈,从而提高系统的整体响应能力和吞吐量。

官方仓库:
https://github.com/Irqbalance/irqbalance

irqbalance 的作用

  • 中断负载均衡: 将硬件中断(如网络、磁盘、USB 设备的中断)动态分配到多个 CPU 核心,避免单一核心过载。
  • 性能优化: 减少 CPU 核心的竞争,提升多核系统的并行处理能力。
  • 自适应调整: 根据系统负载和 CPU 使用情况实时调整中断分配策略。

适用场景

  • 多核服务器: 在高负载的 Web 服务器、数据库服务器中效果显著。
  • 高吞吐量网络: 优化网卡中断处理,提升网络性能。
  • 桌面/工作站: 改善多任务环境下的系统响应速度。

irqbalance的使用

安装与管理

安装

# Debian/Ubuntu
sudo apt install irqbalance

管理

# 启动服务
sudo systemctl start irqbalance

# 开机自启
sudo systemctl enable irqbalance

# 查看状态
sudo systemctl status irqbalance

# 停止服务
sudo systemctl stop irqbalance

配置文件与参数

配置文件路径:

  • Debian/Ubuntu: /etc/default/irqbalance

重启服务生效

sudo systemctl restart irqbalance

具体的参数这里不做介绍。

何时启用或禁用 irqbalance

建议启用的情况

  • 系统有多个 CPU 核心。
  • 运行高并发网络服务(如 Nginx、Redis)。
  • 使用高性能存储设备(如 NVMe SSD)。

建议禁用的情况

  • 单核 CPU 系统(无负载均衡需求)。
  • 实时性要求极高的场景(需手动绑定 IRQ)。
  • 虚拟化环境中宿主机已优化中断分配。

禁用方法

sudo systemctl stop irqbalance
sudo systemctl disable irqbalance

手动监控中断分布

查看中断分配

# 实时监控中断分布变化(每 2 秒刷新)
watch -n 2 "cat /proc/interrupts"

检查中断绑定

# 查看某个 IRQ 的 CPU 亲和性
cat /proc/irq/<IRQ编号>/smp_affinity

高级调优

手动绑定 IRQ

# 将 IRQ 123 绑定到 CPU 0 和 1
echo 3 > /proc/irq/123/smp_affinity  # 3 的二进制为 11(CPU0 和 CPU1)

结合 taskset 优化进程 CPU 亲和性

# 将进程 PID 4567 绑定到 CPU 2-3
taskset -cp 2-3 4567

查看CPU的性能统计信息

# mpstat是 sysstat 软件包的一部分
mpstat -P ALL 1

总结

这里是irqbalance 的简单介绍及使用,算是科普篇,更多详细的原理及高级应用这里不做介绍。