一、概念
- 中断其实是一种异步的事件处理机制,可以提高系统的并发处理能力。
- Linux将中断处理过程分成了两个阶段:上半部和下半部
(1)上半部用来快速处理中断,它在中断禁止模式下运行,主要处理跟硬件紧密相关的或时间敏感的工作。即硬中断,特点是快速执行。
(2)下半部用来延时处理上半部未完成的工作,通常以内核线程的方式运行。即软中断,特点是延迟执行。
二、排查
- 查看软中断运行情况
cat /proc/softirqs
(1)NET_RX:表示网络接收中断,在不同 CPU 上的累积次数应该差不多
(2)NET_TX :表示网络发送中断,在不同 CPU 上的累积次数应该差不多
(3)TASKLET :是最常用的软中断实现机制,每个 TASKLET 只运行一次就会结束 ,并且只在调用它的函数所在的 CPU 上运行。所以,在不同CPU上分布可能不均匀。
(4)Linux 中的软中断包括网络收发、定时、调度、RCU 锁等各种类型
- 查看硬中断运行情况
cat /proc/interrupts
3. 查看软中断内核线程
ps aux | grep softirq
(1)ps 的输出中,名字括在中括号里的,一般都是内核线程
(2)软中断内核线程就叫做 ksoftirqd/CPU 编号
三、实例
- 大量的网络小包会导致性能问题:大量的小网络包会导致频繁的硬中断和软中断
- 软中断高导致系统卡顿:由于环境用的ssh远程登录,在这期间hping3大量发包,导致其他网络连接延迟,ssh通过网络连接,使ssh客户端感觉卡顿现象(网络延迟丢包)。
相关工具
- sar 是一个系统活动报告工具,既可以实时查看系统的当前活动,又可以配置保存和报告历史统计数据。
- hping3 是一个可以构造 TCP/IP 协议数据包的工具,可以对系统进行安全审计、防火墙测试等。
- tcpdump 是一个常用的网络抓包工具,常用来分析各种网络问题。