美文网首页
理解Linux中的软中断

理解Linux中的软中断

作者: wayyyy | 来源:发表于2020-12-20 01:11 被阅读0次

    Linux 将中断处理过程分成了2个阶段:

    • 上半部:
    • 下半部:

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

    查看软中断和和内核线程

    /proc/softirqs 提供了软中断的运行情况
    # cat  /proc/softirqs
                        CPU0       
              HI:          1
           TIMER: 1189813227
          NET_TX:          8
          NET_RX:   26627363
           BLOCK:    2361265
        IRQ_POLL:          0
         TASKLET:         16
           SCHED:          0
         HRTIMER:          0
             RCU:  145966351
    

    第一列,表示软中断的类型:

    • NET_RX
      网络小包会导致性能问题,大量的网络小包会导致频繁的硬中断和软中断。
    • NET_TX

    后面表示同一种软中断在不同CPU上的分布情况。

    软中断实际上是以内核线程的方式运行的,每个 CPU 都对应一个软中断内核线程,这个软中断内核线程就叫做 ksoftirqd/CPU 编号。

    # ps aux | grep softirq | grep -v "grep"
    root         7  0.0  0.0      0     0 ?        S    Oct25   4:20 [ksoftirqd/0]
    
    /proc/interrupts 提供了硬中断的运行情况

    案例测试

    相关文章

      网友评论

          本文标题:理解Linux中的软中断

          本文链接:https://www.haomeiwen.com/subject/rfyhnktx.html