硬件结构——(6) 软中断

2023-05-16

1. 中断是什么?

在计算机中,中断是 系统用来响应硬件设备请求 的一种机制。操作系统收到 硬件的中断请求后,会打断正在执行的进程,然后调用内核中的 中断处理程序 来响应请求。

中断是⼀种 异步的事件处理机制可以提高系统的 并发处理能力

操作系统收到了中断请求后,会打断其他进程的运行。所以中断请求的 响应程序,也就是中断处理程序,要尽可能快的执行完,这样可以减少 对正常进程运行调度 的影响。

而且,中断处理程序在响应中断时,可能还会"临时关闭中断"。这意味着,在中断处理程序  执行完之前,系统中其他的中断请求 都无法被响应,也就是说 中断有可能会丢失,所以中断处理程序 要短且快。
 

2. 什么是软中断?

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

  • 上半部直接处理硬件请求,也就是硬中断,主要是负责耗时短的⼯作,特点是快速执⾏。(⼀般会暂时 关闭中断请求,处理与 硬件紧密相关或者时间敏感 的事情)
  • 下半部由内核触发,也就是软中断,主要是负责上半部未完成的⼯作,通常都是耗时较长的事情,特点是延迟执行。(⼀般以 内核线程 的方式运行)

区别:硬中断(上半部) 会先打断 CPU正在执行的任务,然后执行中断处理程序软中断(下半部) 以内核线程的方式执行,每一个CPU 都对应一个软中断内核线程,名字通常为 "ksoftirqd / CPU编号"。(比如:0号CPU对应的 软中断内核线程的名字是ksoftirqd/0)

软中断不仅包括 硬件设备中断处理程序的下半部分,⼀些内核的自定义事件 也属于软中断。(比如:内核调度、RCU锁 等)
 

3.系统中有哪些软中断?

在Linux系统中,可以通过 cat /proc/softirqs命令 查看软中断的运行情况;通过 cat /proc/interrupts命令 查看硬中断的运行情况。

可以看到,每个CPU都有自己对应的 不同类型软中断的累计运行次数。以下3点需要注意:

  • 第⼀列的内容代表 软中断的类型。在该系统中,软中断包括了 10 个类型,分别对应不同的⼯作类型。(比如:NET_RX 表示网络接收中断,NET_TX 表示网络发送中断、TIMER 表示定时中断、RCU 表示RCU锁中断、SCHED 表示内核调度中断)
  • 正常情况下,同⼀种中断在不同CPU上 的累计次数相差不大。(比如:该系统中,NET_RX在 CPU0、CPU1、CPU2、CPU3 上的中断次数 基本是同⼀数量级,相差不大)
  • 这些数值是 系统自运行以来的累计中断次数,数值本身 没什么参考意义,但系统中的 中断次数的变化速率 是需要关注的。可以使用 watch -d cat /proc/softirqs命令 查看中断次数的变化速率

前面提到,软中断是以 内核线程的方式 执行的,可以使用 ps命令 查看软中断内核线程的结果

可以发现,内核线程的名字外⾯ 都有中括号,这说明 ps命令 无法获取它们的命令行参数,所以⼀般来说,名字在中括号中的线程 都可以认为是内核线程。而且,可以看到有4个 ksoftirqd内核线程,这是因为这台服务器的CPU 是4核心的,每个CPU核心 都对应着⼀个内核线程。
 

4. 如何定位软中断 CPU 使用率过高的问题?

可以使用 top命令 查看系统中的软中断情况。

黄色部分si 就是CPU在软中断上的使用率。可以发现,所有CPU的使用率 都不高 (id 表示空闲CPU的百分比),Cpu0和Cpu1的使用率 只有3%和4%左右,并且都用于软中断。另外,CPU使用率最高的进程 也是软中断ksoftirqd ,因此可以认为 此时的系统开销主要来源于软中断。

如果想要知道 是哪种软中断类型导致的,可以使用 watch -d cat /proc/softirqs命令 查看每个软中断类型的 中断次数的变化速率。

对于网络I/O较高的 Web服务器,NET_RX网络接收中断 的变化速率 相比其他中断类型快很多。

如果发现 NET_RX网络接收中断 次数的变化速率过快,可以使用 sar -n DEV命令 查看网卡的网络包接收速率,然后分析 是哪个网卡有大量的网络包进来。

再通过 tcpdump 抓包,分析这些数据包的来源。如果是非法的地址,可以考虑增加防火墙;如果是正常流量,则要考虑硬件升级等。
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

硬件结构——(6) 软中断 的相关文章

  • 还弄不明白【委托和事件】么?看这一篇就足够了!!!

    这两个概念长时间不用了 xff0c 今天看到CAD二次开发中用到了自定义事件 xff0c 有点迷糊了 xff0c 索性再整理一下加深印象 xff01 一说到委托和事件 xff0c 他们总是绑定在一起的不可分割 xff01 可能你会说啊 xf
  • 三种简单排序(冒泡、插入、选择)的比较和图解

    冒泡排序 这种排序方式是最容易理解的 xff0c 主体思想就是 xff1a 指针重复地走访过要排序的数列 xff0c 一次比较两个元素 xff0c 如果他们的顺序错误就把他们交换过来 走访数列的工作是重复地进行直到没有再需要交换 xff0c
  • ModuleNotFoundError: No module named 'XXX'的解决办法

    类似问题一 ModuleNotFoundError No module named 39 captcha 39 pycharm打开的项目 xff0c 在虚拟环境里通过终端命令python manage py runserver运行pytho
  • 微信小程序实现搜索功能以及效果(超详细)

    我们先来看一下实现哪些功能 1 搜索历史记录以及清空历史记录 2 热门搜索推荐以及更新推荐内容 3 根据输入框输入的内容来自动搜索相关查询 后台逻辑是模糊查询 后台就先不扯了 这里我用的是自己定义的虚拟数据 暂时没用后台接口 可能有点问题
  • 微信小程序实现收货地址城市选择效果(添加收货地址)

    先来张效果图 这里主要是城市选择效果 请忽视其他 不要吐槽 谢谢 接下来看一下代码吧 wxml lt pages my my add address index wxml gt lt view class 61 34 redact addr
  • uni-app实现商城多商家购物车功能(超详细, 附带源码)

    我们先来看一下效果 有什么不懂可以直接下方留言 先来看代码 lt template gt lt view class 61 34 cart 34 gt lt 购物车为空 S gt lt view v if 61 34 cartList le
  • 微信小程序web-view的使用教程

    最近公司有需求 xff0c 需要点击小程序首页banner xff0c 跳转到别人的h5页面 首先是域名的问题 xff1a 步骤 xff1a 先登录小程序开发平台 xff0c 将页面需要跳转的域名写上去 xff0c 注意了 xff0c 域名
  • uni-app实现上传图片裁剪效果(附源码)

    我们先来看一下效果 封装一个组件在components下创建一个 文件夹随意命名 xff0c 这里我是uni img cropper uni img cropper vue lt template gt lt view class 61 3
  • js 一维数组和二维数组实现足迹、浏览记录等场景

    再开发过程中 xff0c 再没有接口提供的情况下来实现浏览记录或者搜索记录等场景 我们可以利用本地缓存实现 xff0c 废话不多说 xff0c 直接上代码 xff1a 多维数组 64 param Array arr 数组 64 param
  • Markdown使用(超详细)

    xff08 HBuilderX xff09 掌握md及HBuilderX对md的强大支持 如果没有点右键设置自动换行 xff0c 可按Alt 43 滚轮横向滚动查看 很多人只把markdown用于网络文章发表 xff0c 这糟蹋了markd
  • 宫格导航 (自定义更灵活,超详细)

    先来看一下效果 调用方法 lt 页面调用 gt lt nav grid list 61 34 menu 34 64 click 61 34 34 gt lt nav grid gt 数据 export default data return
  • Firefox和Chromedriver驱动下载及安装步骤

    Mozilla Firefox Mozilla Firefox 中文名称 34 火狐 34 是由一个自由及开放源代码的网页浏览器 使用Gecko排版引擎 支持多种操作系统 如 Windows Mac OS X 及GNU Linux等 该浏览
  • 流媒体选择Nginx是福还是祸?

    流媒体选择Nginx是福还是祸 xff1f CDN xff0c 视频云 xff0c 已经 僧多粥少 视频直播的持续升温 xff0c 无意间也让带宽生意的争夺变得异常残酷 一时间 xff0c 各种云计算 CDN 视频云提供商都在视频尤其是直播
  • xpath去除换行\空格

    使用xpath获取文本内容 有空格或者换行就用normalize space 方法 例 intro li 61 div xpath 39 normalize space div 64 class 61 34 bookinfo 34 p te
  • Java 静态域和静态方法

    main方法都被标记为static修饰符 xff0c 本文讨论一下该修饰符含义 静态域和静态方法 一 静态域静态常量 二 静态方法三 工厂方法 一 静态域 若把域定义为static xff0c 则每个类中只有一个这样的域 而每一个对象对于所
  • Linux下传感器驱动。rk3399

    基于rk3399的Linux下的陀螺仪mpu9250传感器驱动 mpu6050 bh1750传感器 xff0c sht30 35温湿度传感器驱动 已经成功移植 xff0c 通过iic驱动获取到数据 Linux驱动开发
  • DaSaimRPN代码运行记录

    demo py xff1a 下载模型 SiamRPNVOT model 放入 code 文件夹即可 test otb py xff1a 在网上下载 OTB2015 数据集放入 data 文件夹中 更改 parser 参数 dataset 运
  • Linux环境下LLVM 6.0 + clang安装步骤

    可以转载 xff0c 请注明出处 xff01 1 准备工作 首先确保你的Linux系统是可以联网的 xff0c 我是win10环境下的VMware 15 43 centos 7 xff0c 这个应该没影响 xff0c 之所以说 xff0c
  • Pixhawk ulog飞行日志分析

    在python下安装pyulog xff0c 在 ulog文件目录下输入ulog2csv即可将ulog转化为csv形式输出 ulog文件的保存时间 43 8即为飞行实际的时间 timestamp为时间戳 xff0c 除以10 6后单位为秒
  • java看书规划

    Java编程思想 大话设计模式 重构 改善既有代码的设计 effective java 深入理解Java虚拟机 Java并发编程实战 深入理解计算机系统 xff0c tcp ip详解 卷一 二 三 xff0c 数据结构与算法 xff08 三

随机推荐