可通过/proc/interrupts查看各CPU中断计数,用/proc/irq/*/smp_affinity_list检查绑定状态,结合irqbalance服务分析均衡策略,手动修改smp_affinity调整亲和性,并用perf捕获中断事件流定位高频源。

如果您需要了解Linux系统中硬件设备产生的中断请求分布情况,可以通过查看内核提供的中断信息接口。以下是获取和分析中断数据的具体操作方式:
一、读取/proc/interrupts文件
该文件由内核动态生成,记录了每个CPU上各类中断向量的触发次数,是观察中断负载最直接的途径。文件内容按列组织,包含中断号、各CPU计数、中断类型及关联设备名称。
1、在终端中执行命令:cat /proc/interrupts。
2、观察输出中各列含义:第一列为中断号(IRQ),后续列为各CPU核心上的中断计数,最后一列为中断来源描述(如IO-APIC、PCI-MSI或设备驱动名)。
3、若需实时监控变化,可使用命令:watch -n 1 'cat /proc/interrupts | head -20',每秒刷新一次前20行。
二、识别中断绑定状态
Linux支持将特定中断绑定到指定CPU核心,以优化缓存局部性与减少跨核同步开销。绑定信息可通过/proc/irq/子目录下的smp_affinity_list文件查看。
1、列出所有可用中断编号:ls /proc/irq/。
2、选择一个IRQ编号(例如42),查看其当前绑定的CPU列表:cat /proc/irq/42/smp_affinity_list。
3、若输出为“0-3”,表示该中断可被调度至CPU 0至CPU 3中的任意一个;若为“2”,则仅绑定在CPU 2上。
三、使用irqbalance服务分析自动均衡行为
irqbalance是一个用户空间守护进程,用于动态将中断分配到负载较低的CPU上,避免单核过载。其运行状态直接影响中断分布的合理性。
1、检查irqbalance是否正在运行:systemctl status irqbalance。
2、查看irqbalance当前策略日志:journalctl -u irqbalance -n 50 --no-pager。
3、临时停止irqbalance以便手动控制中断绑定:sudo systemctl stop irqbalance。
四、手动修改中断CPU亲和性
通过写入十六进制掩码至smp_affinity文件,可强制指定某中断由哪些CPU处理。该操作需谨慎,错误设置可能导致设备响应异常。
1、确认目标中断当前掩码值:cat /proc/irq/42/smp_affinity。
2、计算所需CPU掩码(例如仅允许CPU 1处理,则十六进制为0x2)。
3、以root权限写入新掩码:echo 2 | sudo tee /proc/irq/42/smp_affinity。
4、验证变更是否生效:cat /proc/irq/42/smp_affinity_list。
五、使用perf工具捕获中断事件流
perf是Linux性能分析工具集的一部分,可用于采样中断触发时序与上下文,辅助定位高频中断源或延迟尖峰。
1、启用中断事件采样(需root权限):sudo perf record -e irq:irq_handler_entry -a sleep 10。
2、生成报告:sudo perf report --sort comm,irq --no-children。
3、在报告中查找中断号(IRQ)与对应处理函数名,结合/proc/interrupts中的设备名进行交叉比对。











