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

PCIe的中断机制

参考书籍:《PCI Express Technology 3.0》

INTx#中断机制

image
INTx#是PCI总线遗留的传统中断机制,其采用的是 INTA#~INTD# 四条物理中断引脚(虚拟中断线),多数设备仅使用 INTA#,INTB#~INTD# 用于多功能设备或多设备共享场景。
image
通过设备配置空间的 Interrupt Pin 寄存器(声明所用虚拟引脚)和 Interrupt Line 寄存器(关联系统中断向量)完成初始化,系统枚举阶段分配中断资源。设备触发中断时驱动物理中断引脚,CPU 响应后需通过软件轮询,查询所有共享该中断线的设备状态寄存器,才能定位具体中断源。

PCIe 保留了这种机制,但是由于PCIe 采用点对点串行总线架构,物理中断引脚的共享模式无法适配其串行传输特性,因此并未使用物理中断引脚,而是通过硬件模拟的方式,向 PCIe 链路发送 INTx 消息对应的 TLP 包,该 TLP 包经 PCIe 桥设备转发至 Root Complex(RC),由 RC 将其转换为处理器可识别的中断信号,再转发至中断控制器,完成中断请求的传输。
image
在 TLP 头部中,Message Code 用来区分包的类型,而当其为 0010 0xxxb 时,即为中断产生的包,见下图:
image
更具体地,可以细分使用哪个虚拟引脚:
image
其中,Assert表示有中断请求,Deassert表示清除中断请求。

MSI中断机制

INTx# 中断机制存在很大地局限性:轮询机制导致中断处理延迟较高,并且中断数量有限(至多 4 个),因此引入了 MSI(Message Signaled Interrupts) 机制。

MSI 的核心实现原理是基于发布型 Memory Write TLP 事务,其本质是通过向特定内存地址写入预设数据的方式触发中断,无需依赖任何中断线模拟或轮询操作。系统枚举阶段,操作系统会为 PCIe 设备分配唯一的中断向量,并将该向量对应的Message Address(对应中断控制器的某个寄存器地址)和Message Data,写入设备配置空间的 MSI Capability寄存器(Capability ID=0x05),完成中断资源的分配与初始化。

注意,这里写入的 Message Address 是 PCI 域的地址,触发时会被 PCIe 控制器转换为 CPU 域的地址再发送至对应的中断控制器的寄存器地址。

image
图中的Message Control寄存器结构如下图:
image
其中:
64-bit Address Capable表示设备是否支持 64 位地址作为 MSI 消息的目标地址;
Per-vector Masking Capable表示设备是否支持对单个 MSI 中断向量进行单独屏蔽的硬件能力(通过Mask Bits控制);
Multiple Message Capable表示最大 MSI 中断数量;
Multiple Message Enable表示使能的 MSI 中断数量(见下图)。
image

但是,当多个中断同时触发时,怎么区分呢?(因为Message AddressMessage Data是唯一的)
答案是通过Message Data的低 n 位来区分,而高位不变。

比如,如果分配32个中断,那么当有多个中断触发时,通过Message Address的低 5 位来区分不同的中断。此外,由于Message Data只有 16 位,因此高位需要补 0。

最后,MSI 中断触发流程如下:

  1. 系统初始化时,会在 PCIe 设备的配置空间中找到 MSI Capability 结构,为设备分配中断消息的目标地址(通常指向 CPU 的中断控制器寄存器)和消息数据(包含中断向量等信息),并将这些值写入 Capability 结构的 Message Address 和 Message Data 字段;

  2. 当 PCIe 设备内部产生中断请求(如完成数据传输)时,会触发其 MSI 发送逻辑;

  3. 设备从自身的 MSI Capability 结构中读取预存的 Message Address(拆分为高 32 位和低 32 位)和 Message Data,按照 PCIe 规范构造一个 MSI(Memory Write)事务包,把这些信息填入包的对应字段,如下图:
    image

  4. 设备通过 PCIe 总线发送这个事务包,目标地址就是配置阶段设置的中断消息地址。

MSI-X中断机制

MSI 机制也存在一定缺陷,比如:中断数量还是很少(最多 32 个),它需要系统软件分配连续的中断号,最后,发出中断时,地址是固定的。

为此,引入了其扩展版本,也就是 MSI-X 机制,它所实现的是:可以支持非常多的中断,并且每个中断的地址/数据都可以不同。

实现 MSI-X 的核心是MSI-X Capability 寄存器,先看一下它的格式:
image
从图中可以看出,与 MSI 不同的是,MSI-X 维护了一个Table,也就是一张表,而Table BIR记录了这张表在哪个 BAR 空间(0~5),MSI-X Table Offset记录了这张表在该寄存器的偏移,同时还有一个 PBA ,用来表示 MSI-X 中断的挂起状态。下图展示了表的存储方式:
image
接下来看一下MSI-X Table的结构:
image
图中的字段分别表示:

  • Lower Address:中断消息目标地址的低 32 位;
  • Upper Address:中断消息目标地址的高 32 位;
  • Message Data:中断消息的数据内容;
  • Vector Control:只有 bit0 有实际作用,用于单独屏蔽该向量。

最后是Pending Bit Array的结构,如下图:
image
每个 QW 对应 64 个中断向量,总数量由 MSI-X 表的向量总数 N 决定,每个挂起位与 MSI-X 表中的一个中断向量一一对应,用于标记该向量是否在被屏蔽期间触发了中断。

最后,MSI-X 的中断触发流程与 MSI 类似,只是存储消息地址和消息数据的方式不同,但是需要注意:每个 PCIe 设备只能同时使用一种中断机制(即使 3 种均支持)。

http://www.jsqmd.com/news/346833/

相关文章:

  • 提示工程架构师必备:制定实施计划的6个法律合规要点,避免踩红线
  • azerothCode-更改任务语言显示
  • PWA 渐进式Web应用(Progressive Web App)快应用、离线应用(用Web技术构建原生应用体验网站)manifest.json、Service Worker、Instant App
  • ue 不同版本兼容性测试总结
  • 学术写作效率革命!2026 高精准度 AI 论文写作工具推荐指南
  • SameSite=Lax属性(前端Set-Cookie属性)(跨站链接跳转保留登录态、防御跨站请求POST CSRF、防御跨站请求资源CSRF)子资源请求、安全铁三角HttpOnlySecure
  • 价值投资者如何看待并购和分拆
  • 如何用AR虚拟形象打造开发者IP?2026元宇宙营销
  • CSRF(Cross-site Request Forgery)跨站请求伪造攻击(浏览器自动携带同源Cookie机制)与XSS攻击区别、现代网站安全模板、sameSite、Referer校验
  • 端小白也能搞定:CSS文字横向无缝滚动+悬停暂停(附实测代码)
  • 【后端】【工具】从 “Vibe PPT“ 到 “蕉幻“:一个原生 AI PPT 生成应用的深度解析 - 教程
  • 2025四川最新合同纠纷/经济纠纷律所TOP10推荐:优质律师事务所权威榜单发布,精准解决各类商事争议 - 品牌推荐2026
  • 题解:CF251D Two Sets
  • 「雜記」 Hello World
  • P5788 【模板】单调栈
  • 2026年烘干机厂家权威推荐榜:矿石烘干机/不锈钢除尘器/双筒烘干机/锂矿烘干机/镍矿烘干机/三筒烘干机/袋式除尘器/选择指南 - 优质品牌商家
  • 2026四川最新婚姻财产分割/离婚律师事务所TOP10推荐:专业律所权威榜单发布,专业助力婚姻权益保障 - 品牌推荐2026
  • CAI:人机协作的模块化网络安全AI框架
  • 愿我们都能摆脱“无聊焦虑”,把闲下来的时光,过成自己喜欢的样子
  • 设置echo输出的颜色
  • 2026最新成都房产纠纷律师事务所TOP9推荐:优质权威律所榜单发布,专业高效护航房产权益 - 品牌推荐2026
  • 医疗数字化真正难的不是做 App,而是把“合规、数据和 AI”放进同一套系统
  • 零基础3个月转行大数据:我的自学笔记+面试经验,成功拿到字节offer
  • echo 怎么设置不换行
  • CAD插件注册表路径
  • 字母文字的焦虑:当汉字成了文明发展的“高效操作系统”
  • 论文的苦难来自于拖延
  • leetcode 908. Smallest Range I 最小差值 I-耗时100
  • 彼得林奇如何评估公司的人工智能应用效率
  • 天猫超市卡哪里回收安全可靠?看这篇就懂 - 京顺回收