软中断

作者: _Irving | 来源:发表于2023-02-14 10:27 被阅读0次

软中断:为了处理中断处理程序执行过长和中断丢失的问题,linux将中断处理过程分成两个阶段,也就是上半部和下半部:

  • 上半部:用来快速处理中断,它在中断禁止模式下运行,主要处理跟硬件紧密相关的或跟时间敏感的工作,直接处理硬件请求,也就是我们常说的硬中断,特点是快速执行
  • 下半部:用来延迟处理上半部未完成的工作,通常以内核线程的方式运行。由内核触发,也就是我们常说的软中断。

当然软中断不只包括了硬件设备中断处理程序的下半部,一些内核自定义的事件也属于软中断,比如内核调度和RCU锁等

查看软中断和内核线程

proc文件系统是一种内核空间和用户空间进行通信的机制,可以用来查看内核的数据结构,或者用来动态修改内核的配置,其中:
/proc/softirqs 提供了软中断的运行情况
/proc/interrupts 提供了硬中断的运行情况

watch -d cat /proc/softirqs

#watch命令可以定期查看输出,-d高亮显示变化部分
查看软中断信息
$ watch -d cat /proc/softirqs
                    CPU0       CPU1
          HI:          0          0
       TIMER:    1083906    2368646
      NET_TX:         53          9
      NET_RX:    1550643    1916776
       BLOCK:          0          0
    IRQ_POLL:          0          0
     TASKLET:     333637       3930
       SCHED:     963675    2293171
     HRTIMER:          0          0
         RCU:    1542111    1590625
  • 第一列显示软中断类别,总共有10个类别,分贝对应不同的工作类型;
  • 要注意同一种软中断在不同的cpu上的分布情况,正常情况下,同一种中断在不同的cpu上的累计次数应该差不多

ps aux |grep softirq
软中断实际上是以内核线程的方式运行的,每个cpu都对应一个软中断内核线程,就叫做ksoftirqd/1,
查看其运行状况:

#注意,这些线程的名字外面都有中括号,一般来说,ps的输出中,名字括在括号里的,一般都是内核线程
[root@localhost proc]# ps aux|grep softirq
root          3  0.0  0.0      0     0 ?        S    Feb12   0:09 [ksoftirqd/0]
root      80681  0.0  0.0 112648   956 pts/1    R+   00:59   0:00 grep --color=auto softirq

top
定位软中断问题,如下图:

image.png
  • 关注%cpu行的si,当>0时,就有软中断产生
  • 进程列表中如圈出的这种就是软中断内核进程

sar
使用watch -d cat /proc/softirqs看到变化速率最快的是NET_RX(网络接收),那么我们就可以使用sar来观察网络的接收情况,不仅可以观察网络收发的吞吐量(BPS,每秒收发的字节数),还可以观察网络收发的PPS,即每秒收发的网络帧数。

[root@localhost proc]# sar -n DEV 1
Linux 3.10.0-327.el7.x86_64 (localhost.localdomain)     02/14/23    _x86_64_    (1 CPU)

01:21:59        IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
01:22:00    eno16777736      1.00      1.00      0.06      0.17      0.00      0.00      0.00      0.00
01:22:00           lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
  • 第一列:表示报告的时间。
  • 第二列:IFACE 表示网卡。
  • 第三、四列:rxpck/s 和 txpck/s 分别表示每秒接收、发送的网络帧数,也就是 PPS。
  • 第五、六列:rxkB/s 和 txkB/s 分别表示每秒接收、发送的千字节数,也就是 BPS

tcpdump
怀疑是网络接收中断的问题,若上面sar的结果eno16777736的接收网络帧和字节数异常,我们使用tcpdump来抓包查看

#-i eno16777736只抓取该网卡,-n不解析协议名和主机名
#tcp port 80表示只抓取tcp协议并且端口号为80的网络帧
[root@localhost ~]# tcpdump -i eno16777736 -n tcp port 80

相关文章

  • Linux中断机制

    1、硬中断 2、软中断 3、软中断信号

  • Linux中断中能否sleep

    中断、软中断、硬件中断、异常、同步中断、异步中断,这几个概念非常容易混淆,这里对本文使用的中断、软中断、softi...

  • 软中断

    从“取外卖”看中断 假如说你订了一份外卖,但是不确定外卖什么时候送到,也没有别的方法了解外卖的进度,但是,配送员送...

  • 软中断

    含义 为了解决中断处理程序执行过长和中断丢失的问题,Linux 将中断处理过程分成了两个阶段,也就是上半部和下半部...

  • TCP/IP网络

    软中断: 软中断的处理非常像硬中断。然而,它们仅仅是由当前正在运行的进程所产生的。通常,软中断是一些对I/O的请求...

  • 中断

    1. 软中断与硬中断的区别 软中断:如代码调用INT指令触发 硬中断:为响应中断,一般会有一个硬件中断控制器,当设...

  • 软中断和硬中断

    从本质上讲,中断(硬)是一种电信号,当设备有某种事情发生的时候,他就会产生中断,通过总线把电信号发送给中断控制器。...

  • Linux软中断

    中断是一种异步的事件处理机制,可以提高系统的并发处理能力。 中断处理程序在响应中断时,还会临时关闭中断。这就会导致...

  • Linux软中断

    中断其实是一种异步的事件处理机制,可以提高系统的并发处理能力。 由于中断处理程序会打断其他进程的运行,所以,为了减...

  • CPU软中断

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

网友评论

      本文标题:软中断

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