应通过五步法诊断中断负载异常:一查/proc/interrupts分布;二用watch动态监控增量;三用lsirq排序分析;四比对/proc/stat总中断数;五检/proc/irq/{N}亲和性与触发模式。

如果您尝试评估系统中断负载以识别性能瓶颈或硬件异常,则可能是由于某类设备中断过于频繁或CPU间分布严重不均。以下是解决此问题的步骤:
一、查看/proc/interrupts基础统计
/proc/interrupts是内核动态生成的虚拟文件,记录每个CPU核心处理各中断向量(IRQ)的累计次数,可直接反映中断分布与设备活跃度。
1、在终端中执行命令:cat /proc/interrupts
2、观察输出中各列:最左列为中断号(如20、29),中间为CPU0至CPUn列的计数值,最右列为设备或驱动名称(如eth0、ahci、USB)。
3、定位高计数行:若某设备(如eth0)在单个CPU上计数远高于其他核心(例如CPU0为120000而CPU1仅为500),表明该中断未启用SMP均衡。
二、动态监控中断增量变化
静态快照无法体现瞬时负载波动,需持续采样差值以识别突发性中断风暴或周期性尖峰。
1、运行带高亮差异的实时监控:watch -d -n 1 'cat /proc/interrupts'
2、观察数值跳变剧烈的行,尤其关注非Timer类中断(如IRQ 255、未知设备名或重复出现的“cascade”)。
3、若发现某列数值每秒增长数百以上且持续超过10秒,需结合设备日志进一步排查。
三、使用lsirq工具聚合分析
lsirq是util-linux套件中专用于结构化解析/proc/interrupts的命令,支持按增量、设备名或CPU绑定度排序,避免人工扫视混乱输出。
1、确认系统已安装util-linux 2.39+版本:lsirq --version
2、以中断增量降序列出前10项:lsirq -s increment -n 10
3、检查输出中“Affinity”列是否显示单一CPU掩码(如0x00000001),该特征提示中断亲和性未配置为多核分散。
四、比对/proc/stat验证总中断吞吐
/proc/stat中intr行提供自启动以来所有中断的全局累加值,可用于交叉校验/proc/interrupts是否遗漏高频中断源(如arch_timer)。
1、提取总中断数:awk '/^intr/ {print $2}' /proc/stat
2、提取Timer中断计数:grep -w "timer" /proc/interrupts | awk '{sum += $2 + $3 + $4 + $5} END {print sum}'
3、若总中断数与各设备中断之和相差超过5%,说明存在未命名中断(如GICv3 Level类型或KVM虚拟中断)需深入/proc/irq目录核查。
五、检查/proc/irq子目录下的亲和性与触发模式
/proc/irq/{N}目录包含每个中断的运行时控制参数,其中smp_affinity决定其可被调度的CPU集合,edge/level标识物理触发方式,二者共同影响负载形态。
1、列出所有已注册中断号:ls /proc/irq/
2、查看指定中断(如20)的CPU绑定掩码:cat /proc/irq/20/smp_affinity
3、检查该中断的触发类型与控制器信息:cat /proc/irq/20/trigger











