在Linux系统中,查看软中断(SoftIRQ)信息是分析系统性能、排查网络或I/O瓶颈的关键操作。软中断是内核用于处理中断下半部(bottom half)和任务队列(tasklet)的重要机制,其运行状态直接反映了系统的中断处理负载。

查看软中断信息最核心的命令是 cat /proc/softirqs 和 watch -d cat /proc/softirqs。/proc/softirqs 是一个虚拟文件,它动态记录了从系统启动以来每个CPU核上各类软中断触发的累计次数。
| 软中断类型 | 说明 |
|---|---|
| HI | 高优先级任务队列(Tasklet),优先级最高。 |
| TIMER | 定时器中断,由系统定时器触发。 |
| NET_TX | 网络数据包发送中断。 |
| NET_RX | 网络数据包接收中断。 |
| BLOCK | 块设备I/O中断。 |
| IRQ_POLL | 中断轮询机制。 |
| TASKLET | 常规任务队列。 |
| SCHED | 调度器中断,用于负载均衡。 |
| HRTIMER | 高精度定时器中断。 |
| RCU | RCU(Read-Copy-Update)锁处理。 |
通过观察不同CPU核上NET_RX或NET_TX等数值的增长速度,可以判断网络中断处理是否均匀(是否存在单核瓶颈)。使用 watch -d cat /proc/softirqs 可以高亮显示数值变化的部分,便于实时观察。
另一个强大的工具是 mpstat -P ALL 1。虽然它主要报告CPU时间占用,但其输出中的 %soft 列直接显示了每个CPU核用于处理软中断的时间百分比。这是一个关键的性能指标,如果某个核的 %soft 持续过高(例如超过10%),则表明该核的软中断负载很重。
此外,通用系统监控工具 top 或 htop 也可以提供软中断的总体占用情况。在 top 中,第三行 Cpu(s) 信息里,si(softirq)字段即表示整个系统范围内软中断占用CPU时间的百分比。
为了进行更深入的内核级跟踪,可以使用 bpftrace 或 perf 等高级工具。例如,命令 perf record -e irq:softirq_entry -a sleep 5 可以记录5秒内所有软中断的触发事件,然后通过 perf report 进行分析,精确定位是哪个内核函数或驱动触发了最多的软中断。
理解软中断信息对于性能调优至关重要。例如,当服务器网络吞吐量异常时,通常会发现NET_RX在少数CPU核上急剧增长。解决方案可能包括:启用 RPS(Receive Packet Steering)或 RFS(Receive Flow Steering)来将网络中断负载分散到多个CPU核;或者调整网卡的多队列(RSS)设置,使其与CPU核数匹配。

查看详情

查看详情