嵌入式基础 -- PCIe 控制器中断管理之MSI与MSI-X简介

PCIe 控制器中断管理技术文档

1. 背景

在现代计算机系统中,中断是设备与 CPU 通信的重要机制,PCIe 控制器提供了从传统线中断到基于消息的中断(MSI/MSI-X)的演进,以提升中断处理效率和可扩展性。x86 和 ARM 架构虽然硬件设计不同,但在 PCIe 中断的管理上有着类似的发展路径。


2. x86 架构中的 PCIe 中断

2.1 传统线中断(Legacy INTx)

  • 实现方式
    • 每个 PCI 设备最多使用 4 条硬件中断引脚(INTA#、INTB#、INTC#、INTD#)。
    • 中断通过物理信号线触发,多个设备可能共享同一中断引脚。
  • 问题
    • 中断线有限(仅 4 条),难以满足现代系统需求。
    • 共享中断导致中断处理效率下降。

2.2 消息信号化中断(MSI/MSI-X)

  • 基本原理

    • 使用 PCIe 总线发送“写事务”(Memory Write)触发中断,而不再依赖物理中断引脚。
    • CPU 或中断控制器接收写事务后,解析中断向量,触发相应的中断处理程序。
  • 优点

    1. 摆脱物理线限制:中断数量不再受限于引脚。
    2. 中断隔离:避免共享中断的性能瓶颈。
    3. 更高并发性:支持为不同设备、队列分配独立中断。
  • MSI vs MSI-X

    特性MSIMSI-X
    最大中断向量数最多 32 个最多 2048 个
    配置复杂度较低较高
    灵活性一般更高,可支持更多设备和功能

2.3 中断管理组件

  • Local APIC

    • 驻留在每个 CPU 内部,负责接收并处理发送给本地 CPU 的中断。
    • 支持本地定时器和 IPI(处理器间中断)。
  • IO-APIC

    • 主板上硬件模块,管理外部设备中断并分发到目标 CPU。
    • 包含一个重定向表,用于配置中断路由和优先级。

3. ARM 架构中的 PCIe 中断

3.1 中断控制框架:GIC

ARM 平台使用 GIC(Generic Interrupt Controller) 作为中断管理核心,替代 x86 中的 APIC。GIC 从 GICv2 演进至 GICv3 和 GICv4,支持更多核心和虚拟化。

  • 主要组件

    1. Distributor(GICv2)或 Redistributor(GICv3+):管理所有外部中断的注册、优先级设置及路由。
    2. CPU Interface:类似 Local APIC,负责将中断信号注入本地 CPU。
    3. Interrupt Translation Service(ITS):处理 PCIe 设备产生的 MSI/MSI-X 中断,翻译为 GIC 内部中断号。
  • 中断类型

    类型描述
    SGI软件生成中断,用于核间通信
    PPI私有中断,仅特定核使用
    SPI共享外设中断,供所有核共享

3.2 GIC 中断处理流程

  1. 外部设备产生中断(SPI 或 MSI/MSI-X)。
  2. Distributor/Redistributor 接收中断,并根据配置分发到目标 CPU。
  3. CPU Interface 接收中断信号,通知 CPU。
  4. CPU 执行中断服务例程,处理完成后向 GIC 发出 EOI 信号。

4. x86 与 ARM 架构的对比

特性x86 (APIC)ARM (GIC)
中断管理模块IO-APIC + Local APICDistributor/Redistributor + CPU Interface
支持的中断类型Legacy INTx, MSI, MSI-XSGI, PPI, SPI
中断向量数量MSI:最多 32 个,MSI-X:最多 2048 个GICv3 支持数千个中断
处理 PCIe MSI/MSI-X通过 IO-APIC 路由并分发ITS 翻译 MSI/MSI-X
IPI(核间中断)支持支持

5. 总结

  • PCIe 中断的演进:从传统线中断(INTx)到基于消息的中断(MSI/MSI-X),极大提升了中断管理的效率和可扩展性。
  • x86 与 ARM 的实现差异
    • x86 架构使用 APIC(Local APIC + IO-APIC)管理中断;
    • ARM 架构使用 GIC(Generic Interrupt Controller),从 GICv2 到 GICv4 支持更强的可扩展性和虚拟化能力。
  • 现代系统趋势
    • MSI/MSI-X 已成为 PCIe 设备中断的主流选择,摆脱了物理中断线的限制。
    • 无论 x86 还是 ARM,目标都是通过高效的中断管理提升系统性能和并行处理能力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/8148.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Leecode刷题C语言之组合总和②

执行结果:通过 执行用时和内存消耗如下: int** ans; int* ansColumnSizes; int ansSize;int* sequence; int sequenceSize;int** freq; int freqSize;void dfs(int pos, int rest) {if (rest 0) {int* tmp malloc(sizeof(int) * sequenceSize);memcpy(tmp, seque…

汽车网络信息安全-ISO/SAE 21434解析(下)

目录 第十二~十四章 - 后开发阶段 1. 十二章节 - 生产 2. 十三章节 - 运营与维护 网络安全事件响应 更新 3. 十四章节 - 结束网络安全支持和停用 结束网络安全支持 报废 第十五章 - TARA分析方法 1. 概述 2. 资产识别 3. 威胁场景识别 4. 影响评级 5. 攻击路径分…

[java] java基础-字符串篇

目录 API String 创建字符串对象的两种方式: Java的内存模型 字符串常量池(串池)存放地址 两种构造方法的内存分析 String的常用方法 号比较的是什么 字符串比较(比较字符串的数据值) 遍历字符串 StringBui…

Unity中关于实现 管道水流+瀑布流动+大肠蠕动效果笔记

Unity中关于实现 管道水流瀑布流动大肠蠕动效果笔记 效果展示: 参考资料及链接: 1、如何在 Unity 中创建水效果 - 水弯曲教程 https://www.youtube.com/watch?v3CcWus6d_B8 关于补充个人技能中:顶点噪波影响网格着色器配合粒子实现水特效 …

Couchbase UI: Indexes

在Couchbase中,索引的这些指标可以帮助你评估索引的性能和状态。下面是每个指标的详细解释,以及如何判断索引的有效性: 1. Index Name(索引名称) 描述:每个索引都有一个唯一的名称。这个名称通常会包括表…

redis的分片集群模式

redis的分片集群模式 1 主从哨兵集群的问题和分片集群特点 主从哨兵集群可应对高并发写和高可用性,但是还有2个问题没有解决: (1)海量数据存储 (2)高并发写的问题 使用分片集群可解决,分片集群…

第一届“启航杯”网络安全挑战赛WP

misc PvzHE 去这个文件夹 有一张图片 QHCTF{300cef31-68d9-4b72-b49d-a7802da481a5} QHCTF For Year 2025 攻防世界有一样的 080714212829302316092230 对应Q 以此类推 QHCTF{FUN} 请找出拍摄地所在位置 柳城 顺丰 forensics win01 这个软件 云沙盒分析一下 md5 ad4…

ThreadLocal概述、解决SimpleDateFormat出现的异常、内存泄漏、弱引用、remove方法

①. ThreadLocal简介 ①. ThreadLocal是什么 ①. ThreadLocal本地线程变量,线程自带的变量副本(实现了每一个线程副本都有一个专属的本地变量,主要解决的就是让每一个线程绑定自己的值,自己用自己的,不跟别人争抢。通过使用get()和set()方法,获取默认值或将其值更改为当前线程…

蓝桥杯模拟算法:多项式输出

P1067 [NOIP2009 普及组] 多项式输出 - 洛谷 | 计算机科学教育新生态 这道题是一道模拟题&#xff0c;我们需要分情况讨论&#xff0c;我们需要做一下分类讨论 #include <iostream> #include <cstdlib> using namespace std;int main() {int n;cin >> n;for…

LLM - 大模型 ScallingLaws 的设计 100B 预训练方案(PLM) 教程(5)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/145356022 免责声明&#xff1a;本文来源于个人知识与公开资料&#xff0c;仅用于学术交流&#xff0c;欢迎讨论&#xff0c;不支持转载。 Scalin…

深度解析:基于Vue 3的教育管理系统架构设计与优化实践

一、项目架构分析 1. 技术栈全景 项目采用 Vue 3 TypeScript Tailwind CSS 技术组合&#xff0c;体现了现代前端开发的三大趋势&#xff1a; 响应式编程&#xff1a;通过Vue 3的Composition API实现细粒度响应 类型安全&#xff1a;约60%的组件采用TypeScript编写 原子化…

计算机组成原理(2)王道学习笔记

数据的表示和运算 提问&#xff1a;1.数据如何在计算机中表示&#xff1f; 2.运算器如何实现数据的算术、逻辑运算&#xff1f; 十进制计数法 古印度人发明了阿拉伯数字&#xff1a;0&#xff0c;1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5&#xff0c;6&#…

(详细)Springboot 整合动态多数据源 这里有mysql(分为master 和 slave) 和oracle,根据不同路径适配不同数据源

文章目录 Springboot 整合多动态数据源 这里有mysql&#xff08;分为master 和 slave&#xff09; 和oracle1. 引入相关的依赖2. 创建相关配置文件3. 在相关目录下进行编码&#xff0c;不同路径会使用不同数据源 Springboot 整合多动态数据源 这里有mysql&#xff08;分为maste…

AI如何帮助解决生活中的琐碎难题?

引言&#xff1a;AI已经融入我们的日常生活 你有没有遇到过这样的情况——早上匆忙出门却忘了带钥匙&#xff0c;到了公司才想起昨天的会议资料没有打印&#xff0c;或者下班回家还在纠结晚饭吃什么&#xff1f;这些看似微不足道的小事&#xff0c;往往让人疲惫不堪。而如今&a…

一分钟搭建promehteus+grafana+alertmanager监控平台

为什么要自己搭建一个监控平台 平时进行后端开发&#xff0c;特别是微服务的后端可开发&#xff0c;一定少不了对接监控平台&#xff0c;但是平时进行一些小功能的测试又没有必要每次都手动安装那么多软件进行一个小功能的测试&#xff0c;这里我使用docker-compose搭建了一个…

深入MapReduce——计算模型设计

引入 通过引入篇&#xff0c;我们可以总结&#xff0c;MapReduce针对海量数据计算核心痛点的解法如下&#xff1a; 统一编程模型&#xff0c;降低用户使用门槛分而治之&#xff0c;利用了并行处理提高计算效率移动计算&#xff0c;减少硬件瓶颈的限制 优秀的设计&#xff0c…

前端【10】jQuery DOM 操作

目录 jquery捕获查取 获得内容 - text()、html() 以及 val() 获取属性 - attr() ​编辑 jQuery 修改/设置内容和属性 设置内容 - text()、html() 以及 val() 设置属性 - attr() jQuery添加元素 jQuery - 删除元素 前端【9】初识jQuery&#xff1a;让JavaScript变得更简…

进程控制的学习

目录 1.进程创建 1.1 fork函数 1.2 fork函数返回值 1.3 写时拷贝 1.4 fork 常规用法 1.5 fork 调用失败的原因 2. 进程终止 2.1 进程退出场景 2.2 进程常见退出方法 2.2.1 从main 返回 2.2.2 echo $&#xff1f; 查看进程退出码 2.2.2.1 我们如何得到退出码代表的含…

数据结构与算法分析:专题内容——人工智能中的寻路7之AlphaBeta(代码详解)

一、算法描述 在考虑到对手的可能走法之后&#xff0c;Minimax算法能够较为恰当地找出玩家的最优走法。但是&#xff0c;在生成博弈树时&#xff0c;这个信息却没有使用&#xff01;我们看看早先介绍的BoardEvaluation评分函数。回忆一下下图Minimax的探测&#xff1a; 这是从…

12、本地缓存分布式缓存(未完待续)

1、哪些数据适合放入缓存&#xff1f; 即时性、数据一致性要求不高的访问量大且更新频率不高的数据&#xff08;读多&#xff0c;写少&#xff09; 2、本地缓存 1、本地缓存&#xff0c;如果是单体项目&#xff0c;部署到一台服务器上&#xff0c;就不存在什么问题&#xff…