本文介绍PCIe的ARI capability特性。
1. ARI特性介绍
ARI的全称为Alternative Routing-ID Interpretation,即可替代的ID路由机制,最早是在PCIe gen3协议中引入的。
在PCIe协议中,Routing ID、 Requester ID和Completer ID都是16bit的ID,由三部分组成,分别是8-bit Bus Number、5-bit Device Number和3-bit Function Number。由于PCIe是端对端协议,Endpoint设备只有一个device,即device number恒为0,此时5-bit的Device Number没有什么用处,而3-bit的Function Number只能表示8个function,在一些虚拟化场景中可能不够用。
所以,PCIe gen3提出了ARI机制,将TLP header中的Device Number去掉,采用8-bit的 Function Number和8-bit的Bus Number来组成Routing ID、Requester ID和Completer ID,因此占用一个bus number的Endpoint设备最多可以拥有256个function,即0到255。(注:一个Endpoint也可以占用多个bus number)。
一个具有两个ARI设备的系统拓扑示例如下图所示。 其中一个ARI设备位于Root Port A下,另一个ARI设备位于Switch下。
为了访问ARI设备X的扩展function,Root Port A必须支持和使能ARI转发。为了访问ARI设备Y的扩展function,Switch Downstream Port D必须支持和使能ARI转发。
在这种配置下,建议软件不要使能Root Port B和Switch Downstream Port C的ARI转发。
2. PCIe ARI capability结构
ARI是一个可选的能力结构,具体如下图所示。支持ARI特性的Upstream Port(包含Endpoint和Switch upstream port)必须实现ARI扩展能力结构。需要注意的是,ARI不适用于Root Port、 Switch Downstream Port、RCiEP、Root Complex Event Collector。
对于不在RC里的SR-IOV设备,其每个function必须实现ARI capability。
ARI扩展能力结构包含PCIe Extended Capability Header寄存器、ARI Control寄存器、ARI Capability寄存器。
ARI Extended Capability Header寄存器如下:
ARI Capability寄存器如下:
ARI Control寄存器如下:
ARI使用注意:
- 对Endpoint和Switch upstream port来说,如果实现了ARI扩展能力结构,则表示device支持ARI。对Switch Downstream Port和Root Port来说,如果Device Capabilities 2 Register的ARI Forwarding Supported字段为1,则表示设备支持ARI。
如果需要使能ARI Forwarding,则系统软件会将Device Control 2寄存器的ARI Forwarding Enable字段设置为1,此时Downstream Port在将type1的cfg请求转换成Type0的cfg请求时,会删除device number,改用8-bit的function number。
主要参考:
PCI Express® Base Specification Revision 6.0
PCIe ARI扩展能力(一)
1747