PCIe中MSI和MSI-X中断机制详解

目录

1.MSI和MSI-X中断机制

2.MSI和MSI-X对比

3.MSI/MSI-X Capability结构

3.1 MSI Capability结构

3.2 MSI消息格式及发送方式

3.3 MSI-X Capability结构

3.4 MSI-X table查找过程​


1.MSI和MSI-X中断机制

在PCI总线中,所有需要提交中断请求的设备,必须能够通过INTx引脚提交中断请求,而MSI机制是一个可选机制。而在PCIe总线中,PCIe设备必须支持MSI或者MSI-X中断请求机制,而可以不支持INTx中断消息。

在PCIe总线中,MSI和MSI-X中断机制使用存储器写请求TLP向处理器提交中断请求,下文为简便起见将传递MSI/MSI-X中断消息的存储器写报文简称为MSI/MSI-X报文。不同的处理器使用了不同的机制处理这些MSI/MSI-X中断请求,如PowerPC处理器使用MPIC中断控制器处理MSI/MSI-X中断请求,而x86处理器使用FSB Interrupt Message方式处理MSI/MSI-X中断请求。

不同的处理器对PCIe设备发出的MSI报文的解释并不相同。但是PCIe设备在提交MSI中断请求时,都是向MSI/MSI-X Capability结构中的Message Address的地址写Message Data数据,从而组成一个存储器写TLP,向处理器提交中断请求。

有些PCIe设备还可以支持Legacy中断方式[1]。但是PCIe总线并不鼓励其设备使用Legacy中断方式,在绝大多数情况下,PCIe设备使用MSI或者MSI/X方式进行中断请求。

PCIe总线提供Legacy中断方式的主要原因是,在PCIe体系结构中,存在许多PCI设备,而这些设备通过PCIe桥连接到PCIe总线中。这些PCI设备可能并不支持MSI/MSI-X中断机制,因此必须使用INTx信号进行中断请求。

当PCIe桥收到PCI设备的INTx信号后,并不能将其直接转换为MSI/MSI-X中断报文,因为PCI设备使用INTx信号进行中断请求的机制与电平触发方式类似,而MSI/MSI-X中断机制与边沿触发方式类似。这两种中断触发方式不能直接进行转换。因此当PCI设备的INTx信号有效时,PCIe桥将该信号转换为Assert_INTx报文,当这些INTx信号无效时,PCIe桥将该信号转换为Deassert_INTx报文。

与Legacy中断方式相比,PCIe设备使用MSI或者MSI-X中断机制,可以消除INTx这个边带信号,而且可以更加合理地处理PCIe总线的“序”。目前绝大多数PCIe设备使用MSI或者MSI-X中断机制提交中断请求。

MSI和MSI-X机制的基本原理相同,其中MSI中断机制最多只能支持32个中断请求,而且要求中断向量连续,而MSI-X中断机制可以支持更多的中断请求,而并不要求中断向量连续。与MSI中断机制相比,MSI-X中断机制更为合理。本章将首先介绍MSI/MSI-X Capability结构,之后分别以PowerPC处理器和x86处理器为例介绍MSI和MSI-X中断机制。

2.MSI和MSI-X对比


 

3.MSI/MSI-X Capability结构

PCIe设备可以使用MSI或者MSI-X报文向处理器提交中断请求,但是对于某个具体的PCIe设备,可能仅支持一种报文。在PCIe设备中含有两个Capability结构,一个是MSI Capability结构,另一个是MSI-X Capability结构。通常情况下一个PCIe设备仅包含一种结构,或者为MSI Capability结构,或者为MSI-X Capability结构。

3.1 MSI Capability结构

能力 ID字段:记载MSI Capability结构的ID号,其值为0x05。在PCIe设备中,每一个Capability结构都有唯一的ID号。

下一ID指针字段:存放下一个Capability结构的地址。

消息控制寄存器:该字段存放当前PCIe设备使用MSI机制进行中断请求的状态与控制信息。

Message Address字段:当MSI Enable位有效时,该字段存放MSI存储器写事务的目的地址的低32位。该字段的31:2字段有效,系统软件可以对该字段进行读写操作;该字段的第1~0位为0。Message Upper Address字段。如果64 bit Address Capable位有效,该字段存放MSI存储器写事务的目的地址的高32位。

Message Data字段:该字段可读写。当MSI Enable位有效时,该字段存放MSI报文使用的数据。该字段保存的数值与处理器系统相关,在PCIe设备进行初始化时,处理器将初始化该字段,而且不同的处理器填写该字段的规则并不相同。如果Multiple Message Enable字段不为0b000时(即该设备支持多个中断请求时),PCIe设备可以通过改变Message Data字段的低位数据发送不同的中断请求(0-31)。PCIe总线规定当一个设备使用MSI中断机制时,最多可以使用32个中断向量,从而一个设备最多可以发送32种中断请求。

3.2 MSI消息格式及发送方式

可以看出MSI本质是一个32位或者64位地址的存储器写请求。只是消息的地址从能力寄存器获得(主机PC初始化的,不同主机的初始化的方式不同)。

3.3 MSI-X Capability结构

MSI-X Capability中断机制与MSI Capability的中断机制类似。PCIe总线引出MSI-X机制的主要目的是为了扩展PCIe设备使用中断向量的个数,同时解决MSI中断机制要求使用中断向量号连续所带来的问题。

MSI中断机制最多只能使用32个中断向量,而MSI-X可以使用更多的中断向量。目前Intel的许多PCIe设备支持MSI-X中断机制。与MSI中断机制相比,MSI-X机制更为合理。首先MSI-X可以支持更多的中断请求,但是这并不是引入MSI-X中断机制最重要的原因。因为对于多数PCIe设备,32种中断请求已经足够了。而引入MSI-X中断机制的主要原因是,使用该机制不需要中断控制器分配给该设备的中断向量号连续。

如果一个PCIe设备需要使用8个中断请求时,如果使用MSI机制时,Message Data的[2:0]字段可以为0b000~0b111,因此可以发送8种中断请求,但是这8种中断请求的Message Data字段必须连续。在许多中断控制器中,Message Data字段连续也意味着中断控制器需要为这个PCIe设备分配8个连续的中断向量号。

有时在一个中断控制器中,虽然具有8个以上的中断向量号,但是很难保证这些中断向量号是连续的。因此中断控制器将无法为这些PCIe设备分配足够的中断请求,此时该设备的“Multiple Message Enable”字段将小于“Multiple Message Capable”。

而使用MSI-X机制可以合理解决该问题。在MSI-X Capability结构中,每一个中断请求都使用独立的Message Address字段和Message Data字段,从而中断控制器可以更加合理地为该设备分配中断资源。

与MSI Capability寄存器相比,MSI-X Capability寄存器使用一个数组存放Message Address字段和Message Data字段,而不是将这两个字段放入Capability寄存器中,我将这个数组称为MSI-X Table。从而当PCIe设备使用MSI-X机制时,每一个中断请求可以使用独立的Message Address字段和Message Data字段。

除此之外MSI-X中断机制还使用了独立的Pending Table表,该表用来存放与每一个中断向量对应的Pending位。这个Pending位的定义与MSI Capability寄存器的Pending位类似。MSI-X Table和Pending Table存放在PCIe设备的BAR空间中。MSI-X机制必须支持这个Pending Table,而MSI机制的Pending Bits字段是可选的。

MSI-X能力结构如下图。

Capability ID:记载MSI-X Capability结构的ID号,其值为0x11。
Message Control:存放当前PCIe设备使用MSI-x机制进行中断请求的状态和控制信息,如下所示。

Table BIR:BAR Indicator Register。该字段存放MSI-X Table所在的位置,PCIe总线规范规定MSI-X Table存放在设备的BAR空间中。该字段表示设备使用BAR0 ~ 5寄存器中的哪个空间存放MSI-X table。
Table Offset: 存放MSI-X Table在相应BAR空间中的偏移。
PBA(Pending Bit Array) BIR: 存放Pending Table在PCIe设备的哪个BAR空间中。在通常情况下,Pending Table和MSI-X Table存放在PCIe设备的同一个BAR空间中。
PBA Offset: 该字段存放Pending Table在相应BAR空间中的偏移。

通过Table BIR和Table offset知道了MSI-X table在哪一个bar中以及在bar中的偏移,就可以找到对应的MSI-X table。

3.4 MSI-X table查找过程

 查找到的MSI-X table结构:

MSI-X Table由多个Entry组成,其中每个Entry与一个中断请求对应。
除了msg data和msg addr外,还有一个vector control的参数,表示PCIe设备是否能够使用该Entry提交中断请求, 类似MSI的mask位。

类似的,Pending Bits则位于另一个Memory中,其结构图如下。

注:无论是MSI还是MSI-X,其本质上都是基于Memory Write 的,因此也可能会产生错误。比如PCIe中的ECRC错误等。


1.本文部分素材来源网络,版权归原作者所有,如涉及作品版权问题,请与我联系删除;

2.未经原作者允许不得转载本文内容,否则将视为侵权;

3.转载或者引用本文内容请注明来源及原作者;

4.对于不遵守此声明或者其他违法使用本文内容者,本人依法保留追究权等。

下面是我的个人微信公众号,关注【一个早起的程序员】精彩系列文章每天不断。

  • 15
    点赞
  • 118
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: "pcie-xxx-02-x-d-th-footprint"是一个电子元件的标准尺寸。 首先,"pcie"表示这个尺寸是适用于PCI Express(PCIe)接口的元件。PCIe是一种计算机总线标准,用于连接电脑主板和外部设备。 接下来,"xxx"表示这个尺寸所适用的规范和版本。具体规范取决于硬件制造商和应用需求,可能是PCIe 3.0、PCIe 4.0等。 "02"表示这个尺寸的版本或修订号,通常代表了硬件标准的更新或改进。 "x"可能指的是特定尺寸的变量,可以是不同封装类型、连接器数量、针脚数目等。 "d"可能代表了器件的密度,指的是在给定的面积上有多少个引脚或连接器。 "th"表示这个尺寸是一个表面贴装型(SMT)元件,需要通过焊接技术安装在电路板上。 最后,"footprint"指的是元件的物理布局和尺寸。电子元件的脚位位置、尺寸以及间距将会按照这个标准来设计和制造。 因此,"pcie-xxx-02-x-d-th-footprint"可以被理解为一个符合PCI Express接口、特定规范和版本、特定封装类型和形状的表面贴装型电子元件的标准尺寸。这个标准尺寸指导了电路板设计师在设计和布局电路板时需要遵循的硬件规范。 ### 回答2: PCIE-XXX-02-X-D-TH是一种电子元件的封装底座或插座类型,用于安装PCI Express(PCIe)接口的电子设备上。 首先,"PCIE"代表了Peripheral Component Interconnection Express,即外设互连快速总线的缩写,它是一种高速数据传输接口标准,广泛应用于计算机、服务器、图形卡等设备。 "XXX"是具体的型号代码,代表了该电子元件的特定型号及规格。 "02"表示该元件有多个版本或系列,而"-X"代表了一个保密或未公开的特殊版本。 "D"表示该底座或插座是双排连接的,即拥有两个并列的排针或排孔。 "TH"代表Through-Hole,表示这个底座或插座是通过插针固定在电路板上的,而不是表面贴装(Surface Mount)类型。 "footprint"是指底座或插座在电路板上占据的物理空间,也可理解为底座的尺寸和布局。这个尺寸和布局信息对于设计师来说非常重要,因为它决定了元件在电路板上的布局和连线方式,也影响到整个电路的性能和稳定性。 总结来说,PCIE-XXX-02-X-D-TH-footprint表示了一种特定型号的PCIe插座,它采用双排连接,通过插针固定在电路板上,具有特定的尺寸和布局。这个信息对于电子设备的设计和生产非常关键,因为它决定了PCIe接口设备在电路板上的安装方式和连接方式。 ### 回答3: "pcie-xxx-02-x-d-th-footprint" 是一个针对 PCIe 槽位的规格标识。 PCIE 是指 PCI Express,是一种用于电脑主板上插槽的通信接口标准,用于连接外部设备,如显卡、硬盘等等。它提供了高带宽和高速度的数据传输。 而 "xxx-02-x-d-th-footprint" 用于描述 PCI Express 插槽的特征和尺寸。这个标识的每个部分代表了具体的规格: - "xxx" 指的是 PCIe 插槽的物理尺寸和定位,例如 x1、x4、x8 或 x16 等; - "02" 指的是 PCI 版本。PCIe 标准有多个版本,每个版本之间有所不同; - "x" 是插槽的数量和布局,表示该插槽是通过 CPU 来提供扩展能力还是通过北桥芯片来提供扩展能力。例如,x1 指的是插槽数量为1, x16 指的是插槽数量为16; - "d" 是标识插槽的驱动能力,表示 PCIe 插槽能够提供的功率; - "th" 指的是插槽的连接方式,例如 "th" 可以代表固定直插插座,而 "mgc-th" 可以代表通过柔性连接器连接。 通过这样的规格标识,用户、制造商和设计师可以准确了解 PCIe 插槽的尺寸、版本、驱动能力和连接方式,以便选择合适的设备和进行正确的设计。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个早起的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值