当前位置: 首页 > news >正文

深入解析 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出现。
  • 2 CPU 列
    • 每一列表示一个 CPU 的中断计数,对应于 irq_desc.kstat_irqs 成员,显示该中断在各个 CPU 上的触发次数。
  • 3 中断控制器类型
    • 输出中的 GICv3 表示使用的中断控制器为 GICv3(通用中断控制器版本 3),对应irq_desc->irq_data.chip->name。
  • 4 中断源编号
    • 每行中的数字(如 26165)是硬件中断请求编号(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中断。

共同成长,感谢点赞关注!

http://www.lryc.cn/news/448032.html

相关文章:

  • Android常用C++特性之std::unique
  • Redis篇(Java操作Redis)
  • Cypress自动化Github workflow
  • Hbase高阶知识:HBase的协处理器(Coprocessor)原理、使用实例、高级技巧和案例分析
  • 海尔嵌入式硬件校招面试题及参考答案
  • Leetcode基础算法篇|202409(4)贪心算法
  • echarts 导出pdf空白原因
  • 数据结构及基本算法
  • vue3学习记录-computed
  • SQLite3模块使用详解
  • 防火墙详解(三)华为防火墙基础安全策略配置(命令行配置)
  • 假期学习--iOS中的static关键字
  • Maya没有Arnold材质球
  • 面试知识点总结篇三
  • 数据加密标准(DES)详解:原理、步骤及Python实现
  • 每日OJ_牛客_OR59字符串中找出连续最长的数字串_双指针_C++_Java
  • 虚幻引擎UE5如何云渲染,教程来了
  • 使用Python实现图形学光照和着色的光线追踪算法
  • 通过openAI的Chat Completions API实现一个支持追问的ChatGPT功能集成
  • 8,STM32CubeMX配置SPI工程(读取norflash的ID)
  • 【MATLAB源码-第178期】基于matlab的8PSK调制解调系统频偏估计及补偿算法仿真,对比补偿前后的星座图误码率。
  • AIGC学习笔记—minimind详解+训练+推理
  • 计算机毕业设计 在线项目管理与任务分配系统的设计与实现 Java实战项目 附源码+文档+视频讲解
  • 小程序用户截屏事件
  • HashMap为什么线程不安全?如何实现线程安全
  • Python爬虫之requests模块(一)
  • 当微服务中调度返回大数据量时如何处理
  • 【项目经验分享】深度学习点云算法毕业设计项目案例定制
  • 【Redis 源码】2项目结构说明
  • RP2040 C SDK GPIO和IRQ 唤醒功能使用