中断的本质:
中断其实是一种异步的事件处理机制,可以提高系统的并发处理能力
进程的不可中断状态是系统的一种保护机制,可以保证硬件的交互过程不被意外打断。所以,短时间的不可中断状态是很正常的
Linux 中的中断处理程序分为上半部和下半部:
上半部对应硬件中断,用来快速处理中断,特点是快速执行;
下半部则是由内核触发,也就是我们常说的软中断,用来异步处理上半部未完成的工作,特点是延迟执行。
Linux 中的软中断包括网络收发、定时、调度、RCU 锁等各种类型)
中断的处理:
由于中断处理程序会打断其他进程的运行,所以,为了减少对正常进程运行调度的影响,
中断处理程序就需要尽可能快地运行
特别是,中断处理程序在响应中断时,还会临时关闭中断。这就会导致上一次中断处理完
成之前,其他中断都不能响应,也就是说中断有可能会丢失
查看中断:
cat /proc/softirqs 提供了软中断的运行情况: TIMER(定时中断)、NET_RX(网络接收)、SCHED(内核调度)、RCU(RCU 锁)
cat /proc/interrupts 提供了硬中断的运行情况。
在 Linux 中,每个 CPU 都对应一个软中断内核线程,名字是 ksoftirqd/CPU 编号。当软
中断事件的频率过高时,内核线程也会因为 CPU 使用率过高而导致软中断处理不及时,进
而引发网络收发延迟、调度缓慢等性能问题