进程的不可中断状态是系统的一种保护机制,可以保护硬件的交互过程不被意外打断。所以,短时间的不可中断状态是很正常的。但是,当进程长时间都处于不可中断状态时,就得当心了。这时,可以使用dsta、pidstat等工具,确认是不是磁盘I/O的问题,进而排查相关的进程和磁盘设备。
    其实除了iowait,软中断(softirq)CPU使用率升高也是最常见的一种性能问题。

    中断是系统用来响应硬件设备请求的一种机制,它会打断进程的正常调度和执行,然后调用内核中的中断处理程序来响应设备的请求。

    中断其实是一种异步的事件处理机制,可以提高系统的并发处理能力。

    网卡接收数据包的例子:(思考一下linux中断处理过程的上半部和下半部分别做了什么?)
    网卡接收到数据包后,会通过硬件中断的方式,通知内核有新的数据到了。这时,内核就应该调用中断程序来响应他。
    对于上半部来说,既然是快速处理,其实就是要把网卡的数据读到内存中,更新下硬件寄存器的状态(表示数据已经读好了),最后再发送一个软中断信号,通知下半部做进一步的处理。
    下半部被软中断信号唤醒后,需要从内存中找到网络数据,再按照网络协议栈,对数据进行逐层解析和处理,直到把它送给应用程序

    所以,这两个阶段你也可以这样理解:

    • 上半部直接处理硬件请求,也就是我们常说的硬中断,特点是快速执行;
    • 而下半部则是由内核触发,也就是我们常说的软中断,特点是延迟执行。

    proc 文件系统。它是一种内核空间和用户空间进行通信的机制

    • /proc/softirqs 提供了软中断的运行情况;
    • /proc/interrupts 提供了硬中断的运行情况。
    • image.png