【proc/interrupts】内核中断
首先是内核中断的分类,这里只是根据proc/interrupts下显示的中断进行分类,主要包含外部中断和IPI中断
cat proc/interruptsCPU0 CPU1 CPU2 CPU3 CPU4 CPU5 CPU6 CPU71: 107049 104452 77919 106593 17651 2993 2558 3417 GICv3 59 Level r4p0_bcevt_timer2: 340336 310429 188422 253369 39242 16601 7743 12236 GICv3 30 Edge arch_timer3: 0 0 0 0 0 0 0 0 GICv3 26 Edge arch_timer5: 1 0 0 0 0 0 0 0 GICv3 35 Level sprd_serial16: 18 0 0 0 0 0 0 0 GICv3 43 Level 70500000.i2c7: 54 0 0 0 0 0 0 0 GICv3 44 Level 70600000.i2c8: 8175 0 0 0 0 0 0 0 GICv3 46 Level 70800000.i2c9: 309 0 0 0 0 0 0 0 GICv3 47 Level 70900000.i2c11: 0 0 0 0 0 0 0 0 GICv3 82 Level sprd_dma12: 60761 0 0 0 0 0 0 0 GICv3 92 Level mmc013: 0 0 0 0 0 0 0 0 GICv3 89 Level mmc114: 5 0 0 0 0 0 0 0 GICv3 90 Level mmc215: 2608 0 0 0 0 0 0 0 GICv3 87 Level musb-hdrc.0.auto17: 0 0 0 0 0 0 0 0 GICv3 52 Edge sprd_codec_dp21: 21688 0 0 0 0 0 0 0 GICv3 153 Level sprd_cpufreqhw23: 25726 0 0 0 0 0 0 0 GICv3 78 Level DISPC24: 3114 0 0 0 0 0 0 0 GICv3 83 Level GSP025: 0 0 0 0 0 0 0 0 GICv3 75 Level VSP26: 0 0 0 0 0 0 0 0 GICv3 74 Level JPG27: 0 0 0 0 0 0 0 0 GICv3 80 Level DSI_INT028: 0 0 0 0 0 0 0 0 GICv3 81 Level DSI_INT141: 15711 0 0 0 0 0 0 0 GICv3 71 Level pvrsrvkm43: 0 0 0 0 0 0 0 0 GICv3 93 Level pub0_dmc_mpu53: 0 0 0 0 0 0 0 0 GICv3 100 Level sprd-mailbox_source54: 20246 0 0 0 0 0 0 0 GICv3 101 Level sprd-mailbox_target55: 0 0 0 0 0 0 0 0 GICv3 151 Level sprd-mailbox_target56: 0 0 0 0 0 0 0 0 GICv3 115 Edge cptl57: 18 0 0 0 0 0 0 0 GICv3 70 Level spi5.058: 1 0 7 0 0 0 0 0 spi5.0 7 Edge chg_timer59: 0 0 0 0 0 0 0 0 spi5.0 1 Edge sprd_rtc60: 1 0 6 0 0 0 0 0 spi5.0 4 Edge 41800000.spi:pmic@0:gpio-controller@28061: 1 0 2 0 0 0 0 0 spi5.0 10 Edge typec62: 0 0 0 0 0 0 0 0 spi5.0 6 Edge sprd_codec_ap63: 0 0 0 0 0 0 0 0 spi5.0 3 Edge sprdfgu64: 0 0 0 0 0 0 0 0 GICv3 124 Level aon-busmonitor65: 0 0 0 0 0 0 0 0 GICv3 119 Level apcpu-busmonitor66: 1 0 2 0 0 0 0 0 irq-pmic-eic 0 Level musb vbus dectect irq68: 1 0 0 0 0 0 0 0 irq-ap-eic 9 Edge 20300000.sdio cd69: 164020 149945 117589 145551 20421 4260 3483 6879 CustomIPI 13 Edge trusty70: 0 0 0 0 0 0 0 0 SPRDSensor-dev1 Edge SPRDSensor_consumer172: 0 0 0 0 0 0 0 0 irq-ap-gpio 124 Level Volume Down Key73: 0 0 0 0 0 0 0 0 irq-pmic-eic 10 Level Volume Up Key74: 0 0 4 0 0 0 0 0 irq-pmic-eic 1 Level Power Key75: 2038 0 0 0 0 0 0 0 irq-ap-gpio 144 Edge adaptive_ts-irq77: 0 0 0 0 0 0 0 0 irq-pmic-eic 9 Level sprdbat_vbat_detect81: 0 0 0 0 0 0 0 0 irq-pmic-eic 13 Level headset_detect82: 0 0 0 0 0 0 0 0 irq-pmic-eic 3 Level headset_button
IPI0: 168450 167000 146626 128236 24290 12465 6847 9956 Rescheduling interrupts
IPI1: 823 883 1115 1182 1209 1255 1223 1255 Function call interrupts
IPI2: 0 0 0 0 0 0 0 0 CPU stop interrupts
IPI3: 2433 2672 2316 3222 909 212 215 240 Timer broadcast interrupts
IPI4: 9026 7987 2190 2279 1660 1189 128 179 IRQ work interrupts
IPI5: 0 0 0 0 0 0 0 0 CPU wake-up interrupts
Err: 38
外部中断
其中前面带编号的是外部中断,外部中断
网络数据包到达后,网卡向IOAPIC发起中断请求,IOAPIC查“中断重定向表”(Interrupt Redirection Table), 根据这个表的信息和数据包的信息,确定目标CPU,IOAPIC再把这个中断请求转发给目标CPU的LAPIC。目标CPU通过LAPIC收到数据包到达的中断请求,根据中断向量找到中断处理函数,处理中断请求。
IPI中断
下面的ID号是IPI开头的实际上是IPI中断,也可以叫做核间中断
IPI中断则比较简单:
在SMP系统中,每个cpu都有一个LAPIC,LAPC有两个重要的控制器 APIC_ICR 和 APIC_ICR2
APIC_ICR: 存储的是中断向量
APIC_ICR2:存储的是发送中断请求的目标
当CPU0 要给CPU1发送IPI中断时,CPU0只要把中断向量写入APIC_ICR,把中断请求目标写入APIC_ICR2,然后中断控制器就可以通过总线把中断请求发给CPU1的LAPIC。这样CPU1通过LAPIC就可以收到中断请求,并查中断向量表,找到中断处理函数,处理中断请求。
区别
在SMP系统中,每个cpu都有一个LAPIC,LAPC有两个重要的控制器 APIC_ICR 和 APIC_ICR2
APIC_ICR: 存储的是中断向量
APIC_ICR2:存储的是发送中断请求的目标
当CPU0 要给CPU1发送IPI中断时,CPU0只要把中断向量写入APIC_ICR,把中断请求目标写入APIC_ICR2,然后中断控制器就可以通过总线把中断请求发给CPU1的LAPIC。这样CPU1通过LAPIC就可以收到中断请求,并查中断向量表,找到中断处理函数,处理中断请求。
统计一段时间内的中断数的程序如下:
难点主要在数据是动态显示的,所以需要做动态处理:
https://github.com/feifeiyuan/features/blob/master/C/%E7%BB%9F%E8%AE%A1%E4%B8%80%E6%AE%B5%E6%97%B6%E9%97%B4%E7%9A%84%E4%B8%AD%E6%96%AD%E4%BF%A1%E6%81%AF/interrupts.c
【proc/interrupts】内核中断相关推荐
- linux内核看门狗关闭方法,linux内核中断之看门狗
一:内核中断 linux内核中的看门狗中断跟之前的裸板的中断差不多,在编写驱动之前,需要线把内核自带的watch dog模块裁剪掉,要不然会出现错误:在Device Drivers /Watchdog ...
- Linux 内核中断内幕【转】
转自:http://www.ibm.com/developerworks/cn/linux/l-cn-linuxkernelint/ 本文对中断系统进行了全面的分析与探讨,主要包括中断控制器.中断分类 ...
- [arm驱动]linux内核中断编程
第一部分获取中断(开启硬件中断) 一.中断的申请注销: 1)中断的申请 1 2 int request_irq(unsigned int irq, irq_handler_t handler, ...
- Linux驱动技术(六) _内核中断
在硬件上,中断源可以通过中断控制器向CPU提交中断,进而引发中断处理程序的执行,不过这种硬件中断体系每一种CPU都不一样,而Linux作为操作系统,需要同时支持这些中断体系,如此一来,Linux中就提 ...
- Linux内核中断系统处理机制-详细分析
原文地址::https://blog.csdn.net/weixin_42092278/article/details/81989449 相关文章 1.Linux中断管理 (1)Linux中断管理机制 ...
- 龙芯处理器内核中断讲解
龙芯处理器内核中断讲解 这里以龙芯处理器ls2k1000为例讲解 1.和中断相关的协处理器 ① 原因寄存器(Cause) IP7-0指出等待的中断.该位将保持不变直到中断撤除.IP0~IP1 是软中断 ...
- linux内核中断详解
linux内核中断详解 1.中断的硬件触发流程 外设:如果外设有操作或者有数据可用,那么就会产生一个电信号,这个电信号发送给中断控制器. 中断控制器:中断控制器接收到外设发来的电信号以后,进行进一步的 ...
- linux内核中断(一)
一.中断简介 中断是指 CPU 在执行程序的过程中,出现了某些突发事件急待处理,CPU 必须暂停当前程序的执行, 转去处理突发事件,处理完毕后又返回原程序被中断的位置继续执行.由于中断的存在极大的提高 ...
- /proc/irq和/proc/interrupts详解
本文转载于:https://blog.csdn.net/yiyeguzhou100/article/details/51746031 在/proc目录下面,有两个与中断子系统相关的文件和子目录,它们是 ...
最新文章
- git 从远程主服务器当中创建新分支
- .substr()在字符串每个字母前面加上一个1
- 人工智能改变生活的10种方式
- 台湾国立大学郭彦甫Matlab教程笔记(20) root finding(numeric)
- 递归算法学习系列之八皇后问题
- 才子佳人文学传统的戏拟与嘲仿
- oracle数据库集群日志,Oracle集群数据库中恢复归档日志
- 单峰数组找最大元素C语言,查找单峰数组中的第k个元素
- Error running app: Default Activity Not Found
- ie的lan设置无法保存_Bios 无法识别 M2硬盘
- python 保存视频流_[宜配屋]听图阁
- Jasperreports TextField自动换行
- poj - 2255 Tree Recovery
- 用SecureCRSecurePortable查看动态日志
- hypermesh中怎么设置支反力(反作用力)
- linux 命令下载jdk
- 如何将卫星影像按固定比例尺输出(1:5千,1:1万等)
- mongodb官网下载不了, MongoDB下载、安装、配置、使用,如何下载MongoDB数据库,MongoDB入门
- 纺织ERP_面料ERP_指点ERP系统
- 泼冷水!为什么说机器学习在很多方面被高估了? | 精选
热门文章
- 2023年清华大学五道口金融学院联合培养博士、普博招生简章之解读分析
- linux下那些服务可以禁用掉
- 深度分析射频电路的原理及应用
- 幽门螺杆菌来源于哪种食物?如何彻底根治?
- OJ:The Suspects(C++)
- 【附源码下载】推荐20个开源的Java项目
- drop table可以删除多张表吗_python全球疫情分析,告诉你海外疫情到底有多严峻 | 附290行代码...
- 游戏开发第一课:数字华容道
- 入职Salesforce乙方公司前, 需要了解什么?
- js拼装html单引号双引号,js、html中的单引号、双引号及其转义使用