硬中断、软中断详解

文章目录

        什么是中断?

        什么是计算机的中断?

        什么叫硬中断、什么叫软中断?

        怎么查看硬中断、软中断

                查看硬中断的运行情况 cat /proc/interrupts

                查看软中断的运行情况 cat /proc/softirqs

        怎么排查软中断过高的问题?

        软中断注意事项

什么是中断?

举个现实生活中的例子:你正在学习,突然快递员给你打电话通知你快递到了。快递员打的电话就是中断信号,因为它中断了你的学习。你接完电话转头给女朋友说送她的礼物到了,她就蹦跶蹦跶地去拿快递了,这个过程属于对中断信号的处理。给女朋友说完之后你继续学习,这叫中断的恢复。

什么是计算机的中断?

在计算机中,中断是系统响应硬件/软件设备消息的一种机制。系统运行时收到设备发来的信号,会打断当前进程,调用内核的中断处理程序来处理此信号,这个过程叫中断。

很明显,中断机制大大提高了系统的并发能力,但由于中断处理会打断当前程序的执行,所以中断处理越快越好。

要注意的是:中断处理程序在响应中断时,可能会"临时关闭中断响应",即中断处理过程中无法响应新的中断信号,意味着中断信号会无响应。以上面的收快递为例,快递员在给你电话的时候,别人就没办法再给你打电话了,所以接快递员电话的时间越短越好。

什么叫硬中断、什么叫软中断?

继续以上面的收快递为例:你正在学习,这叫当前进程;快递员给你打电话,这叫中断信号;

你接快递员电话,这叫中断处理的上半部分,可以理解为硬中断,时间很短

你挂掉电话,通知给了女朋友,她下楼去拿快递,这叫中断处理的下半部分,可以理解为软中断,处理过程比较慢,唯一好处是你立马恢复了学习;

计算机的例子:系统正在运行,这个时候收到一条网络消息,网卡把消息通过DMA复制到内存的RingBuffer后会向CPU发出中断信号,CPU的处理也很简单,唤醒一个内核中断进程,中断进程ksoftirqd会根据RingBuffer中的数据的IP和端口号将其拷贝到对应socket的缓冲区并唤醒对应的进程处理。其中:

1. DMA向CPU发出的信号就叫硬中断信号,CPU对该信号的处理叫硬中断处理。

硬中断的特点是向CPU发出了中断,会打断CPU当前工作,CPU的处理也很快,唤醒软中断处理就不管了。

2. CPU唤醒内核中断程序,发出的信号就叫软中断信号,中断进程对RingBuffer消息的分析处理,唤醒对应的进程,叫软中断处理

软中断的特点是由中断进程ksoftirqd处理,比较复杂且耗时。其实不仅有网络消息,系统内部也会触发软中断,比如定时器触发,内核调度,RCU锁等等。

每个CPU都有自己专属的中断进程,名字为「ksoftirqd/CPU编号」,比如第0号CPU对应的软中断内核线程的名字是 ksoftirqd/0

怎么查看硬中断、软中断

查看硬中断的运行情况 cat /proc/interrupts

 各个列的说明如下

第1列:逻辑中断号(linux分配的中断号)

第2~5列:每个逻辑CPU上中断的数

第6列:处理这个中断的中断控制器。在具有I/O APIC的系统上,大多数中断会列出IO-APIC-level或IO-APIC-edge,为自己的中断控制器

最后一列:与这个中断相关的设备名字,比如i8042一般表示键盘和鼠标,比如 virtio3-intput.0 和virtio3-output.0对应的是虚拟网卡eth3的接收和发送队列

查看软中断的运行情况 cat /proc/softirqs

 第一列表中断类型

TIMER表定时器中断;NET_TX表络发送中断;NET_RX表网络接收中断;SCHED表示内核调度中断,RCU表RCU锁中断

第2~5列表各个CPU上发生的中断计数

注意:这些数值是系统运行以来的累计中断次数,数值的大小没什么参考意义,我们更关注的是这些中断的变化速率。所以使用命令 watch -d cat /proc/softirqs 来查看软中断的变化速度,如下图

 使用命令 ps axu | grep ksoftirqd 来查看各个软中断线程,跟上面的 cat /proc/softirqs结果一一对应,每个ksoftirqd对应一个逻辑CPU

 怎么排查软中断过高的问题?

用top命令查看整体系统的运行情况,再按数字1可以查看各个cpu的详细信息(由于我手头上没有软中断高的机器,这个图是网上找的)

上图可以看到两个cpu的运行情况,虽然总体使用率不高,但是都用在了si(软中断)上。

另外,也可以看到 CPU 使用率最高的进程也是软中断 ksoftirqd/0 和ksoftirqd/1,所以可以认为此时系统的开销主要耗在了软中断

再结合命令 watch -d cat /proc/softirqs 来查看各个软中断的变化速度,看变化最快的是哪种类型的软中断

如果是网络IO型服务器,那么 NET_TX 和 NET_RX类型的软中断会比较多,再结合tcpdump工具抓包来分析,是不是有非法IP,流量是否正常,而且可结合网关服日志,一起分析

软中断注意事项

默认情况下,单队列的网卡只有一个中断号,同一时刻只能绑定到一个CPU上。虚拟机上很容易出现机器有多个CPU,但只有一个CPU繁忙的情况。

解决办法有多种

1. 把网卡改为多队列网卡,虚拟机可通过镜像设置

2. 设置多CPU中断亲和性配置

3. 设置网卡负载均衡

具体办法参见这几篇博客

软中断竟然是可一个CPU使劲造? - 知乎

软中断处理方法_51CTO博客_软中断

【转】ksoftirqd进程耗尽单核100%si处理软中断导致性能瓶颈 - 简书

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
课程简介 该课程是FPGA在嵌入式系统领域的应用,以XILINX的MICROBLAZE 32位软核处理器为载体,介绍嵌入式系统中软件和件协同设计和协同调试的方法,诠释All Programmable在嵌入式系统设计中的重要意义。 分享到: 课程目录 课程讨论 第35讲:Vivado高级设计技术 5 634 第34讲:基于HLS实现矩阵相乘 5 603 第33讲:基于HLS实现时序逻辑 5 288 第32讲:在Vivado中看逻辑门的内部逻辑结构 5 857 第31讲:从组合逻辑、时序逻辑和矩阵相乘看基于HLS的数字系统实现 5 228 第30讲:HLS关键优化策略 5 304 第29讲:高级综合工具调度及C代码的关键属性 5 271 第28讲:高级综合工具Vivado应用 5 426 第27讲:基于MATLAB的模型设计 5 306 第26讲:软件协同调试及构建中断系统 5 350 第25讲:软件协同调试并分析系统 5 212 第24讲:用在线逻辑分析仪对系统进行件调试 5 274 第23讲:软件协同调试方法 5 263 第22讲:如何修改模版并在系统中运行 5 294 第21讲:详细分析LED IP模版 5 263 第20讲:手把手教如何创建IP核 5 358 第19讲:实验:打通Micorblaze和SRAM的通道2 5 233 第18讲:实验:打通Micorblaze和SRAM的通道1 5 293 第17讲:GPIO实验详细分析 5 443 第16讲:实验:手把手教AXI GPIO核仿真 5 614 第15讲:MicroBlaze处理器结构及使用BSB建立的最小系统结构 5 486 第14讲:3位8进制计数器实现详解 5 268 第13讲:数字逻辑中的关键问题——有限状态机 5 303 第12讲:从PlanAhead及ISE综合实现中详细分析FPGA结构 5 422 第11讲:详解FPGA芯片的内部结构之查找表(LUT) 5 423 第10讲:用ISE设计工具看清FPGA内部结构 5 513 第9讲:AMBA AX14协议规范 5 535 第8讲:AMBA AHB协议规范 5 398 第7讲:AMBA APB协议规范 5 399 第6讲:AMBA协议规范概述 5 559 第5讲:Zynq平台设计学方法II 5 1028 第4讲:Xilinx可扩展处理平台导论(Zynq-7000)及设计方法 805 第3讲:Xilinx可编程SoC设计流程及开发工具概述 716 第2讲:All Programmable(全可编程)平台SoC特点 599 第1讲:可编程SoC设计导论——内容简介
笙泉最新8051单片机例程 ,有PWM,ADC,串口,定时器,IAP,RTC等。使用Keil uVison4开发,请参考,有问题可反馈给作者。 笙泉单片机MA82G5B32特性如下: 高速 1-T 结构 80C51 内核 MA82G5B32/MA82G5B16 32K/16K 字节 flash 程序存储器空间 ━ ISP 空间可以选择为 1KB/1.5KB~4KB ━ 灵活的 IAP 大小空间由软件设置 ━ 密码保护程序区访问 ━ Flash 写/擦 次数:10,000 次 ━ Flash 数据保留时间:100 年在 25℃环境下 ━ MA82G5B32 出厂默认空间设置 AP Flash 程序空间默认设置(29.5KB, 0000h~75FFh) IAP Flash 数据空间默认设置(1KB, 7600h~79FFh) ISP Flash 引导码空间默认设置(1.5KB, 7A00h~7FFFh), ISP 引导码 ━ MA82G5B16 出厂默认空间设置 AP Flash 程序空间默认设置(13.5KB, 0000h~35FFh) IAP Flash 数据空间默认设置(1KB, 3600h~39FFh) ISP Flash 引导码空间默认设置(1.5KB, 3A00h~3FFFh), ISP 引导码 数据存储器 XRAM ━ 内部 256 字节数据存储器 ━ MA82G5B32 1792 字节扩展数据存储器(XRAM) ━ MA82G5B16 768 字节扩展数据存储器(XRAM) 两个数据指针 中断控制 ━ 16 中断源,4 个优先级 ━ 四个带抗干扰滤波器的外部中断, nINT0,nINT1, nINT2 和 nINT3 ━ 所有的外部中断支持高/低电平或上升/下降沿触发 三个 16-位 定时/计数, 定时器 0,定时器 1 和定时器 2 ━ T0CKO 在 P34, T1CKO 在 P35 和 T2CKO 在 P10 ━ T0/T1/T2 可以选择 X12 模式 ━ S1BRG 通过定时器 1 级联到一个 16/24 位的定时/计数器 有 8 个比较/俘获单元的可编程 16 位定时/计数阵列(PCA) ━ 可编程的 16 位基准计数器 ━ 来自片内时钟倍频器(CKM)的时钟源高达 100MHz ━ 俘获模式,16 位软件时钟模式和高速输出模式 ━ 8/10/12/16-位具有相移功能的脉宽调制(PWM)模式,高达 8 通道的脉宽调制(PWM) ━ 脉宽调制(PWM)模块具有空载时间控制和中心对齐选项 键盘中断 10-位 ADC ━ 可编程的转换率高达 200 千次采样每秒(ksps) ━ 最多可到 8 通道单一输入 增强型 UART (S0) ━ 帧误差侦测 ━ 自动地址识别 ━ 速度增强机制(X2/X4 模式) ━ SPI 主机工作在模式 4  第二个 UART (S1) ━ 专用的波特率产生器分享到 S0 或设置为 8 位定时器 ━ SPI 主机工作在模式 4 一个主/从 SPI 串口接口(SPI) ━ 最大 SPI 时钟频率高达 12MHz ━ 高达 3 个 SPI 主机包括 S0 和 S1 工作在模式 4  三个两线串口接口:TWSI, TWI1 和 SID(TWI2) ━ 2 个主机/从机件引擎:TWSI 和 TWI1 ━ 3 个装置地址识别在 TWSI/TWI1 从机模式下 ━ 两线串口接口开始/停止(Start/Stop)侦测(SID)支持 3rd TWI 从机接口 片上调试接口 (OCD) 可编程看门狗定时器,时钟来源于 ILRCO ━ 通过 CPU 或上电复位一次性使能 ━ 看门狗(WDT)溢出会中断或复位 CPU ━ 掉电模式(watch 模式)支持看门狗(WDT)功能 实时时钟模块 ━ 0.5S ~ 64S 可编程中断周期 ━ 21-位长系统定时器 报警器功能 在 32-脚封装中最大 29 个通用输入输出口(GPIO) ━ P3 可以设置成准双向口模式,推挽输出模式,开漏集输出模式和仅输入模式 ━ P1, P2, P4 and P6 可以设置为推挽输出模式,开漏集输出模式 ━ P6.0, P6.1 和 P4.7 公用 XTAL2, XTAL1 和 RST 多种功耗控制模式:掉电模式, 空闲模式,慢频模式,副频模式,RTC 模式,watch 模式和 monitor 模式 ━ 所有的中断能唤醒空闲(IDLE)模式 ━ 11 中源能唤醒掉电模式 ━ 慢频模式和副频模式支持低速 MCU 运转 ━ RTC 模式在掉电模式下支持实时时钟(RTC)复位 CPU ━ Watch 模式在掉电模式下支持看门狗(WDT)复位 CPU ━ Monitor 模式在掉电模式下支持 B

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值