软中断

2023-02-14  本文已影响0人  _Irving

软中断:为了处理中断处理程序执行过长和中断丢失的问题,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

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

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

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

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

猜你喜欢

热点阅读