2.6 什么是软中断?
中断是什么?
中断是一种异步的事件处理机制,可以提高系统的并发处理能力。
操作系统收到了中断请求,会打断其他进程的运行,所以中断请求的响应程序,也就是中断处理程序,要尽可能快的执行完,这样可以减少对正常进程运行调度地影响。
而且,中断处理程序在响应中断时,可能还会「临时关闭中断」,这意味着,如果当前中断处理程序没有执行完之前,系统中其他的中断请求都无法被响应,也就说中断有可能会丢失,所以中断处理程序要短且快。
什么是软中断?
那 Linux 系统为了解决中断处理程序执行过长和中断丢失的问题,将中断过程分成了两个阶段,分别是「上半部和下半部分」。
上半部(硬中断)用来直接处理硬件请求,一般会处理时暂时关闭中断请求,主要负责处理跟硬件紧密相关或者时间敏感的事情。
- 主要是负责耗时短的工作,特点是快速执行,硬中断(上半部)是会打断 CPU 正在执行的任务
下半部(软中断)是由内核触发,用来延迟处理上半部未完成的工作,一般以「内核线程」的方式运行。
- 通常都是耗时比较长的事情,特点是延迟执行;每个CPU一个软中断内核线程
系统里有哪些软中断?
一般软中断包括了 10 个类型,分别对应不同的工作类型,比如 NET_RX 表示网络接收中断,NET_TX 表示网络发送中断、TIMER 表示定时中断、RCU 表示 RCU 锁中断、SCHED 表示内核调度中断。
每个 CPU 核心都对应着一个内核线程。
如何定位软中断 CPU 使用率过高的问题?
如果在 top 命令发现,CPU 在软中断上的使用率比较高,而且 CPU 使用率最高的进程也是软中断 ksoftirqd 的时候,这种一般可以认为系统的开销被软中断占据了。
这时我们就可以分析是哪种软中断类型导致的,一般来说都是因为网络接收软中断导致的,如果是的话,可以用 sar 命令查看是哪个网卡的有大量的网络包接收,再用 tcpdump 抓网络包,做进一步分析该网络包的源头是不是非法地址,如果是就需要考虑防火墙增加规则,如果不是,则考虑硬件升级等。
