深入解析 ARM64 SOC RK3568的 /proc/interrupts 输出
在 Linux 系统中,/proc/interrupts 文件提供了系统中断的详细信息,是性能分析和故障排除的重要工具。本文将重点解析 RK3568环境下该文件的输出格式及其背后的结构。
什么是 /proc/interrupts?
/proc/interrupts 文件记录了所有中断的信息,包括每个中断在各个 CPU 上的触发次数、对应的中断源以及中断控制器类型等。这些信息对于调试和优化系统性能至关重要。它定义在fs/proc/interrupts.c文件中,#cat /proc/interrupts会触发函数show_interrupts来完成打印输出。
# cat /proc/interruptsCPU0 CPU1 CPU2 CPU35: 78720 81935 81943 77682 GICv3 26 Level arch_timer6: 0 0 0 0 GICv3 141 Level rk_timer7: 0 0 0 0 GICv3 260 Level arm-pmu8: 0 0 0 0 GICv3 261 Level arm-pmu9: 0 0 0 0 GICv3 262 Level arm-pmu10: 0 0 0 0 GICv3 263 Level arm-pmu11: 0 0 0 0 GICv3 128 Level ahci[fc800000.sata]12: 0 0 0 0 GICv3 162 Level ehci_hcd:usb113: 0 0 0 0 GICv3 163 Level ohci_hcd:usb314: 2 0 0 0 GICv3 165 Level ehci_hcd:usb215: 33 0 0 0 GICv3 166 Level ohci_hcd:usb416: 443 0 0 0 GICv3 78 Level fdd40000.i2c17: 0 0 0 0 GICv3 183 Level fde4b000.iommu, fde40000.npu18: 504 0 0 0 GICv3 71 Level fde60000.gpu19: 0 0 0 0 GICv3 73 Level fde60000.gpu20: 308 0 0 0 GICv3 72 Level fde60000.gpu21: 0 0 0 0 GICv3 171 Level fdea0400.vdpu22: 0 0 0 0 GICv3 170 Level fdea0800.iommu23: 0 0 0 0 GICv3 122 Level rga24: 0 0 0 0 GICv3 94 Level fded0000.jpegd25: 0 0 0 0 GICv3 93 Level fded0480.iommu26: 0 0 0 0 GICv3 96 Level fdee0000.vepu27: 0 0 0 0 GICv3 95 Level fdee0800.iommu28: 0 0 0 0 GICv3 88 Level fdef0800.iommu, fdef0000.iep29: 0 0 0 0 GICv3 172 Level fdf40000.rkvenc30: 0 0 0 0 GICv3 173 Level fdf40f00.iommu31: 0 0 0 0 GICv3 174 Level fdf40f00.iommu32: 0 0 0 0 GICv3 123 Level fdf80200.rkvdec33: 0 0 0 0 GICv3 124 Level fdf80800.iommu37: 0 0 0 0 GICv3 91 Level fdff1a00.iommu38: 0 0 0 0 GICv3 64 Level eth039: 0 0 0 0 GICv3 61 Level eth040: 1939 0 0 0 GICv3 180 Level fe043e00.iommu, fe040000.vop41: 3856 0 0 0 GICv3 77 Level fe0a0000.hdmi, dw-hdmi-cec42: 62 0 0 0 GICv3 132 Level dw-mci48: 0 0 0 0 GICv3 59 Level eth149: 0 0 0 0 GICv3 56 Level eth150: 0 0 0 0 GICv3 130 Level dw-mci51: 0 0 0 0 GICv3 133 Level rksfc52: 28170 0 0 0 GICv3 51 Level mmc056: 208 0 0 0 GICv3 46 Level fe530000.dmac57: 0 0 0 0 GICv3 45 Level fe530000.dmac58: 25 0 0 0 GICv3 48 Level fe550000.dmac59: 0 0 0 0 GICv3 47 Level fe550000.dmac60: 0 0 0 0 GICv3 34 Level can061: 0 0 0 0 GICv3 35 Level can162: 2 0 0 0 GICv3 79 Level fe5a0000.i2c63: 0 0 0 0 GICv3 82 Level fe5d0000.i2c64: 44 0 0 0 GICv3 83 Level fe5e0000.i2c66: 418 0 0 0 GICv3 135 Level fe610000.spi71: 0 11 0 0 GICv3 115 Level rk_pwm_irq74: 0 0 0 0 GICv3 147 Level rockchip_thermal75: 868 0 0 0 GICv3 125 Level fe720000.saradc76: 1 0 0 0 GICv3 167 Level rockchip_usb2phy77: 1 0 0 0 GICv3 168 Level rockchip_usb2phy84: 54 0 0 0 GICv3 150 Level debug85: 53 0 0 0 GICv3 201 Level dwc386: 0 0 0 0 GICv3 202 Level xhci-hcd:usb587: 0 0 0 0 gpio0 3 Level rk81788: 0 0 0 0 rk817 0 Edge rk805_pwrkey_fall89: 0 0 0 0 rk817 1 Edge rk805_pwrkey_rise
112: 0 0 0 0 gpio0 27 Edge hym8563
113: 0 0 0 0 gpio2 31 Edge bt_default_wake_host_irq
IPI0: 7129 21830 19937 18 Rescheduling interrupts
IPI1: 50 54 49 7 Function call interrupts
IPI2: 0 0 0 0 CPU stop interrupts
IPI3: 0 0 0 0 CPU stop (for crash dump) interrupts
IPI4: 0 0 0 0 Timer broadcast interrupts
IPI5: 1921 1726 1928 1 IRQ work interrupts
IPI6: 0 0 0 0 CPU wake-up interrupts
Err: 0
输出解析
基本结构
CPU0 CPU1 CPU2 CPU35: 78720 81935 81943 77682 GICv3 26 Level arch_timer6: 0 0 0 0 GICv3 141 Level rk_timer7: 0 0 0 0 GICv3 260 Level arm-pmu
列解析
- 1 中断 ID:
- 每一行的第一列是Linux中断的编号,作为索引用于访问
irq_desc。在内核代码中经常以变量名virq出现。
- 每一行的第一列是Linux中断的编号,作为索引用于访问
- 2 CPU 列:
- 每一列表示一个 CPU 的中断计数,对应于
irq_desc.kstat_irqs成员,显示该中断在各个 CPU 上的触发次数。
- 每一列表示一个 CPU 的中断计数,对应于
- 3 中断控制器类型:
- 输出中的
GICv3表示使用的中断控制器为 GICv3(通用中断控制器版本 3),对应irq_desc->irq_data.chip->name。
- 输出中的
- 4 中断源编号:
- 每行中的数字(如
26,165)是硬件中断请求编号(hwirq),对应desc->irq_data.hwirq
- 每行中的数字(如
- 5 中断类型:
Level表示中断的触发方式为电平触发,来自如下输出
irqd_is_level_type(&desc->irq_data) ? "Level" : "Edge"
- 6 中断名称:
- 最后一列显示中断源的名称,例如
arch_timer或ehci_hcd:usb2,对应于irq_desc.name成员。
- 最后一列显示中断源的名称,例如
IPI(Inter-Processor Interrupts)
在输出中可能还会看到 IPI(Inter-Processor Interrupts)相关的行,这些中断用于 CPU 之间的通信,通常会单独列出。
IPI0: 7129 21830 19937 18 Rescheduling interrupts
IPI1: 50 54 49 7 Function call interrupts
IPI2: 0 0 0 0 CPU stop interrupts
IPI3: 0 0 0 0 CPU stop (for crash dump) interrupts
IPI4: 0 0 0 0 Timer broadcast interrupts
IPI5: 1921 1726 1928 1 IRQ work interrupts
IPI6: 0 0 0 0 CPU wake-up interrupts
按中断类型划分
在 ARM64 架构中,中断主要分为四类:
- SGI (Software Generated Interrupts):
- SGI 是由软件产生的中断,通常用于进程间通信(IPC)或特定的系统调用。当某个进程需要通知另一个进程时,可以触发 SGI。GIC V3中SGI范围是0~15。在Linux中,定义IPI 是核心之间的中断IPI,使用SGI来实现,例如
IPI0: 7129 21830 19937 18 Rescheduling interrupts
IPI1: 50 54 49 7 Function call interrupts
- PPI (Private Peripheral Interrupts):
- PPI 是特定于 CPU 的中断,通常用于处理某个特定硬件设备的请求。这些中断一般不会被其他 CPU 共享,通常用于较为私有的设备,如定时器或某些内部设备。虽然 PPI 在输出中没有特别标记,但可以通过硬件中断号来推测其类型。GIC V3中PPI范围是16~31。例如上面的arch_timer的硬件中断号是26,就是PPI。
CPU0 CPU1 CPU2 CPU35: 78720 81935 81943 77682 GICv3 26 Level arch_timer
- SPI (Shared Peripheral Interrupts):
- SPI 是多个设备共享的中断,通常由外部设备通过中断控制器发送。共享中断允许多个设备使用同一个中断线,从而节省资源。SPI 的中断源通常在输出中直接显示设备名称,例如 USB 控制器或网络接口卡。GIC V3中SPI硬件中断号的范围是32~1019。例如上面的ehci_hcd:usb1的硬件中断号是162,就是SPI。
CPU0 CPU1 CPU2 CPU3
12: 0 0 0 0 GICv3 162 Level ehci_hcd:usb1
- LPI(Locality-specific Peripheral Interrupts)
- LPI 是一种使用消息机制和边沿触发的中断。例如当 PCIe 设备需要中断 CPU 时,它会通过 MSI(Message Signaled Interrupts) 机制发送中断信号,通常是写入特定内存地址。ITS 将接收到的 MSI 中断请求解析,并将其转换为 LPI。转换后的 LPI 被发送到相应的 Redistributor,最终,处理器核心接收到 LPI。GIC V3中LPI硬件中断号的范围是大于等于8192。显然,上面RK3568的输出,没有LPI中断。
共同成长,感谢点赞关注!
相关文章:
深入解析 ARM64 SOC RK3568的 /proc/interrupts 输出
在 Linux 系统中,/proc/interrupts 文件提供了系统中断的详细信息,是性能分析和故障排除的重要工具。本文将重点解析 RK3568环境下该文件的输出格式及其背后的结构。 什么是 /proc/interrupts? /proc/interrupts 文件记录了所有中断的信息&…...
Android常用C++特性之std::unique
声明:本文内容生成自ChatGPT,目的是为方便大家了解学习作为引用到作者的其他文章中。 std::unique 是 C 标准库中的一个算法函数,用于移除相邻的重复元素,使每个相邻的元素在容器中保持唯一。它不会真正移除元素,而是通…...
Redis篇(Java操作Redis)
目录 讲解一:简介 讲解二:Jedis Github 一、创建项目、 二、添加依赖 三、配置文件 四、Java连接Redis 五、通过Redis连接池获取连接对象并操作服务器 六、封装JedisUtil对外提供连接对象获取方法 七、Java操作Redis五种数据类型 1. 连接与释放…...
Cypress自动化Github workflow
目录 Workflow .github/workflows/build.yaml jobs build-deploy: .github/wrokflows/execute-tests.yaml 输入参数 jobs restart_failed_dp: seed_data: execute-tests: Docker File docker/Dockerfile.base docker/service-dockerfile.base Deploy deploy/tes…...
Hbase高阶知识:HBase的协处理器(Coprocessor)原理、使用实例、高级技巧和案例分析
目录 第一章 Hbase概述与基础知识 1.1 HBase的架构与数据模型 1.2 什么是协处理器 1.3 协处理器的优势 第二章 协处理器的工作原理 2.1 协处理器的运行机制 2.2 协处理器的注册与监听 2.3 协处理器与RegionServer的交互 第三章 协处理器的类型 3.1 端点协处理器 3.2…...
海尔嵌入式硬件校招面试题及参考答案
使用 QT 的经验及对控件和信号与槽机制的了解 我使用 QT 有一段时间了,在项目开发中积累了较为丰富的经验。 QT 中的控件丰富多样,涵盖了各种常见的界面元素需求。例如按钮、文本框、列表框、进度条等。这些控件具有良好的可定制性,可以通过属性设置、样式表等方式来调整外观…...
Leetcode基础算法篇|202409(4)贪心算法
贪心算法(Greedy Algorithm):一种在每次决策时,总是采取在当前状态下的最好选择,从而希望导致结果是最好或最优的算法。 学习链接:leetcode-notes/docs/ch04/04.04/04.04.02-Exercises.md at main datawha…...
echarts 导出pdf空白原因
问题阐述 页面样式: 导出pdf: 导出pdf,统计图部分为空白。 问题原因 由于代码中进行了dom字符串的复制,而echarts用canvas绘制,canvas内部内容不会进行复制,只会复制canvas节点,因此导出pdf空白。 解决…...
数据结构及基本算法
目录 第一章 概论 第一节 引言 第二节 基本概念和常用术语 第三节 算法的描述与分析 第二章 线性表 第一节 线性表定义和基本运算个 一、线性表的逻辑定义 二、线性表的基本运算 第二节 线性表的顺序存储和基本运算的实现 一、线性表的顺序存储 二、顺序表上基本运算…...
vue3学习记录-computed
vue3学习记录-computed 1.为什么要用computed2.使用方法2.1 基本实例2.2 可写计算属性 1.为什么要用computed 写个购物车的案例 <script setup> import { ref, reactive,computed } from "vue" const tableData reactive([{ name: 商品1, price: 10, num: 1…...
SQLite3模块使用详解
目录 一、引言 1.1 SQLite3 简介 1.2 Python sqlite3 模块 二、连接数据库 2.1 导入 sqlite3 模块 2.2 连接数据库 2.3 创建游标对象 三、执行 SQL 语句 3.1 创建表 3.2 插入数据 3.3 查询数据 3.4 更新数据 3.5 删除数据 四、处理查询结果 4.1 fetchall() 4.2…...
防火墙详解(三)华为防火墙基础安全策略配置(命令行配置)
实验要求 根据实验要求配置防火墙: 合理部署防火墙安全策略以及安全区域实现内网用户可以访问外网用户,反之不能访问内网用户和外网用户均可以访问公司服务器 实验配置 步骤一:配置各个终端、防火墙端口IP地址 终端以服务器为例ÿ…...
假期学习--iOS中的static关键字
iOS中的static关键字 OC的static关键字 OC也提供了Static关键字,但是这个static关键字不能用于修饰成员变量,也就是说Static是不被允许修饰实例变量,同时Static关键字也不被允许修饰方法。Static关键字可以修饰全局变量,局部变量…...
Maya没有Arnold材质球
MAYA 没有Arnold材质球_哔哩哔哩_bilibili...
面试知识点总结篇三
一、arm中断流程和函数 ARM 中断流程 中断触发保存上下文中断向量表执行ISR - 清除中断标志恢复上下文返回中断 二、STM32任务间通信有哪些方式 消息队列、 信号量、共享内存、任务通知 三、uboot内存没驱动之前是怎么操作的 硬件初始化内存检测设置内存映射控制台初始化…...
数据加密标准(DES)详解:原理、步骤及Python实现
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storm…...
每日OJ_牛客_OR59字符串中找出连续最长的数字串_双指针_C++_Java
目录 牛客_OR59字符串中找出连续最长的数字串 题目解析 C代码1 C代码2 C代码3 Java代码 牛客_OR59字符串中找出连续最长的数字串 字符串中找出连续最长的数字串_牛客题霸_牛客网 题目解析 双指针: 遍历整个字符串,遇到数字的时候,用双…...
虚幻引擎UE5如何云渲染,教程来了
步骤一:获取云渲染权限 访问渲染101官网,使用云渲码6666进行注册。 下载并安装渲染客户端。 步骤二:设置渲染环境 确保云渲染环境与您的本地环境一致,避免出错。 步骤三:任务提交 完成环境配置后,解析…...
使用Python实现图形学光照和着色的光线追踪算法
目录 使用Python实现图形学光照和着色的光线追踪算法引言1. 光线追踪算法概述2. Python实现光线追踪算法2.1 向量类2.2 光源类2.3 材质类2.4 物体类2.5 光线追踪器类2.6 使用示例 3. 实例分析4. 光线追踪算法的优缺点4.1 优点4.2 缺点 5. 改进方向6. 应用场景结论 使用Python实…...
通过openAI的Chat Completions API实现一个支持追问的ChatGPT功能集成
文章目录 前言准备工作代码实现思路完整代码实现备注前言 本文介绍如何通过openAI的Chat Completions API实现一个支持追问的后台功能,追问打个比方,就是当你问了一句”窗前明月光的下一句是什么?“之后,想再往下问就可以直接问”再下一句呢?“,模型也能基于上下文理解你…...
【仅剩217份】《Midjourney后印象派风格白皮书》V2.3——含17位艺术家专属LoRA适配建议、32组跨文化色彩映射表及实时风格强度校准工具(2024.06内部封测版)
更多请点击: https://intelliparadigm.com 第一章:后印象派风格的视觉基因与Midjourney语义解码 后印象派并非对自然的模仿,而是对色彩、结构与主观情绪的系统性重构——梵高旋转的星云、塞尚凝固的苹果、高更平面化的塔希提图腾,…...
【Canvas动画录制实战】从WebM到MP4:MediaRecorder全流程解析与避坑指南
1. Canvas动画录制基础与准备工作 如果你正在开发一个数据可视化项目或者HTML5小游戏,可能会遇到需要将动态内容保存为视频的需求。Canvas动画录制就是解决这个问题的关键技术方案。相比传统的录屏软件,直接通过代码录制能获得更清晰的画质,还…...
CircuitPython硬件交互实战:引脚命名、模块管理与内存优化
1. 项目概述:CircuitPython硬件交互的基石 如果你刚开始接触CircuitPython,或者从Arduino转过来,可能会对如何控制板子上的某个引脚感到困惑。板子上明明印着“A0”、“D13”,但在代码里到底该怎么写? board.A0 和 …...
ARM Jazelle技术:硬件加速Java字节码执行详解
1. ARM Jazelle技术概述Jazelle技术是ARM架构中用于硬件加速Java字节码执行的关键扩展,最早出现在ARMv5TE架构中。这项技术通过在处理器内部集成Java字节码执行单元,实现了Java虚拟机(JVM)功能的硬件化。与传统的软件解释器相比,Jazelle能够将…...
量子误差缓解:Bhattacharyya距离与保形预测的应用
1. 量子噪声与误差缓解的核心挑战在当前的NISQ(Noisy Intermediate-Scale Quantum)时代,量子计算机面临的最大障碍就是噪声和误差问题。这些噪声主要来源于量子比特与环境之间的相互作用、门操作的不完美性以及测量误差等。以一个典型的超导量…...
深度解析VS Code Live Server:高效前端开发实时预览配置秘籍
深度解析VS Code Live Server:高效前端开发实时预览配置秘籍 【免费下载链接】vscode-live-server Launch a development local Server with live reload feature for static & dynamic pages. 项目地址: https://gitcode.com/gh_mirrors/vs/vscode-live-serv…...
SuperDuper框架:AI应用开发的组件化与数据库原生集成实践
1. 项目概述:一个颠覆传统AI应用构建的“超级”框架如果你正在为构建一个集成了多种AI模型、数据库和前后端逻辑的复杂应用而感到头疼,那么superduper-io/superduper这个项目,很可能就是你一直在寻找的“瑞士军刀”。简单来说,它不…...
数据模型代码生成器:从OpenAPI/Schema自动生成Python类型安全模型
1. 项目概述:当数据模型遇上代码生成如果你经常和数据模型打交道,无论是OpenAPI规范、JSON Schema,还是数据库的DDL,那你一定体会过手动编写对应数据类(Data Class)或Pydantic模型的繁琐。一个字段类型写错…...
Arduino电机与舵机控制:从晶体管驱动到PWM调速实战
1. 项目概述与核心价值在机器人、智能小车或者任何一个需要“动起来”的嵌入式项目中,电机控制都是你绕不开的一道坎。你可能已经能让LED闪烁、让屏幕显示文字,但当你第一次尝试让一个小马达转起来,却发现Arduino板子上的引脚直接冒烟时&…...
【197期】视频一键转图文笔记
这期分享一个自己一直在用的视频转图文笔记工具,把视频文件和对应的字幕文件拖进去,一键就能生成详细的图文笔记。目前自媒体平台上的文章基本都靠这个流程来出,不用另外再写一遍,效率高了很多。使用方式很简单,把视频…...
