Linux CPU软中断问题诊断之基础概念
  IE5LYMWlmdvL 2023年12月02日 19 0

中断概念

1、什么是中断?

Linux中断是操作系统的自我保护机制,可以保证硬件的交互过程不被意外打断,所以短时间内的中断是正常的。

2、为什么要有中断?

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

3、中断丢失

由于中断处理程序会打断其他进程的运行,所以,为了减少对正常进程运行调度的影响,中断处理程序就需要尽可能快地运行。如果中断本身要做的事情不多,那么处理起来也不会有太大问题;但如果中断要处理的事情很多,中断服务程序就有可能要运行很长时间。

4、软中断

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

上半部用来快速处理中断,它在中断禁止模式下运行,主要处理跟硬件紧密相关的或时间敏感的工作。(也就是我们常说的硬中断,特点是快速执行)

下半部用来延迟处理上半部未完成的工作,通常以内核线程的方式运行。(也就是我们常说的软中断,特点是延迟执行)

备注:上半部会打断 CPU 正在执行的任务,然后立即执行中断处理程序。而下半部以内核线程的方式执行,并且每个 CPU 都对应一个软中断内核线程,名字为 “ksoftirqd/CPU 编号”,比如说, 0 号 CPU 对应的软中断内核线程的名字就是 ksoftirqd/0。

软中断不只包括了刚刚硬件设备中断处理程序的下半部,一些内核自定义的事件也属于软中断,比如内核调度和 RCU 锁(Read-Copy Update 的缩写,RCU 是 Linux 内核中最常用的锁之一)等。

查看软中断和内核进程

proc 文件系统。它是一种内核空间和用户空间进行通信的机制,可以用来查看内核的数据结构,或者用来动态修改内核的配置。其中:

/proc/softirqs 提供了软中断的运行情况;(类型+中断次数)

/proc/interrupts 提供了硬中断的运行情况。

ps aux | grep softirq   查看软中断内核线程。

Linux CPU软中断问题诊断之基础概念_中断处理

注意:

  • 要注意软中断的类型,也就是这个界面中第一列的内容。从第一列你可以看到,软中断包括了 10 个类别,分别对应不同的工作类型。比如 NET_RX 表示网络接收中断,而 NET_TX 表示网络发送中断。
  • 注意同一种软中断在不同 CPU 上的分布情况,也就是同一行的内容。正常情况下,同一种中断在不同 CPU 上的累积次数应该差不多。
  • 统计的运行情况数值是累加的,应关注一段时间的变化情况。
  • 软中断10个类别:        

HI---高优先级的tasklet 

TIMER---内核定时器 

NET_TX---网络发送

NET_RX—网络接收   

BLOCK/BLOCK_IOPOLL--- 块设备软中断 

TASKLET--普通的tasklet 

SCHED—内核调度 

HRTIMER—高精度定时器  

RCU—RCU锁

软中断问题常用排查工具

1)、top--查看系统整体负载情况,关注si--软中断的百分比情况。top运行后,按数字 1 切换到显示所有 CPU情况

2)、mpstat –P ALL 1 --定时刷新查看系统所有 CPU情况(关注%soft)

3)、vmstat -n 1 --每秒刷新查看系统所有 CPU情况

SYSTEM中

--in:每秒产生的中断次数

--cs:每秒产生的上下文切换次数

上面2个值越大,会看到由内核消耗的CPU时间会越大

4)、pidstat -w 1  --每秒刷新输出系统上下文切换情况

5)、watch -d cat /proc/softirqs---查看 /proc/softirqs 变化速率,使用 watch 可以看到变化,明确变化最大的软中断或者中断不均的类型:

Linux CPU软中断问题诊断之基础概念_软中断_02

根据定位到的软中断的类别,再继续分析具体的原因。

常见情况下,通过 /proc/softirqs 文件内容的变化情况,可以发现, TIMER(定时中断)、NET_RX(网络接收)、SCHED(内核调度)、RCU(RCU 锁)等这几个软中断都在不停变化。其中,NET_RX,也就是网络数据包接收软中断的变化速率最快。而其他几种类型的软中断,是保证 Linux 调度、时钟和临界区保护这些正常工作所必需的,所以它们有一定的变化在正常范围内。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月02日 0

暂无评论

IE5LYMWlmdvL