✨1. ARI 背景介绍

  Alternative Routing-ID Interpretation,顾名思义,可替换的Routing ID,意味着这是一种要把Routing ID的部分或全部替换掉的机制。通常来讲,Requester ID和Comleter ID等Routing ID由Bus Number, Device Number, Function Number (BDF) 3个字段组成,其中Bus Number 8-bit,Device Number 5-bit,Function Number 3-bit,一共16-bit。即最多支持256个Bus、32个Device及8个Function。由于PCIe采用端到端的传输方式,每一个链路仅挂载一个设备,Device数量为1,Device Number恒为0,采用5-bit宽的Device Number没有意义;此外3-bit Function Number最高支持8个Function,对有多个VM的SR-IOV系统而言,8个Function稍显不足。

  基于以上原因,从PCIe Gen3开始提供一种ARI机制,取消了Device Number字段,合并到Function Number字段中,这样Routing ID便变成了8-bit Bus Number + 8-bit Function Number的格式,最多支持的Bus数量不变,支持的Function数量增大到256个。


✨2. ARI 扩展能力结构

  具备ARI能力的PCIe设备需实现ARI扩展能力结构。ARI扩展能力结构如下图图1所示,有ARI扩展能力头标、ARI控制寄存器、ARI能力寄存器三部分。以下ARI扩展能力结构仅适用于Device,不适用于RP、Switch下行端口、RCiEP、RC事件收集器等。

图1 ARI Extended Capability

  • ARI Extended Capability Header: ARI扩展能力头标(图2),用以指示该设备具备ARI能力、ARI能力版本及下一能力的偏移。
  • ARI Capability Register:ARI能力寄存器(图3),MFVC Function Groups Capability用以指示具备MFVC能力的ARI设备是否支持Function Group粒度的仲裁,ACS Function Groups Capability用以指示具备ACS P2P出口控制的ARI设备是否支持Function Group粒度的访问,这两个字段仅用于Function0,其余Function该字段需置零。Next Function Number字段用以指示该Device中的下一Function Number,若没有则置零。
  • ARI Control Register:ARI控制寄存器(图4),用以开启MFVC Function Group Capability及ACS Function Group Capability,Function Group字段用以指示当前Function所属的Function Group Number。

图2 ARI Extended Capability Header

图3 ARI Capability Register

图4 ARI Control Register


✨3. ARI 能力使用准备工作

  在正式使用ARI能力之前有两个重要工作要做,即 ① 检测组件是否具备ARI能力,② 配置各组件的ARI能力,详细介绍如下。

  1. 软件枚举PCIe拓扑并判断组件是否支持ARI扩展能力。对于常规ARI设备,可检测设备是否实现了ARI扩展能力结构来判断其是否具备ARI扩展能力;对于具备ARI能力的Switch下行端口,则要检测设备能力2寄存器来判断其是否支持ARI。

  2. 软件使能各组件的ARI功能,应注意以下细节:

    1️⃣ 在紧接的下游组件为ARI设备的ARI Switch下行端口中,软件配置其设备控制2寄存器ARI Forwarding Enable位(图5)来打开该端口的ARI转发功能,这样当Switch下行端口在把Type1类型的配置请求转换为Type0类型时,就会关掉Switch原有的Device Number字段,确保配置请求能够访问到该下行端口下游紧邻的ARI设备中的扩展Function(扩展Function是指ARI设备中Function ID大于7的Function)。如果没有开启Switch下行端口的ARI转发功能,那么软件在枚举的时候将无法发现并配置该端口下游ARI设备中的扩展Function。

    2️⃣ ARI设备中,扩展Function必须响应Type0类型的配置请求。

    3️⃣ 若ARI设备实现了带有Function仲裁的多Function VC (MFVC)能力结构,同时实现了MCFVC Function Group,则软件需对多个Function进行归类,归类到指定的Function Group。最大支持8个Function Group;对于相同Function Group的Function,其Function Group Number相同;

    4️⃣ 若ARI设备支持ACS P2P出口控制,访问控制的粒度可以基于Function亦可以基于Function Group。

    5️⃣ 对于支持并开启了 多Function VC仲裁ACS P2P出端口控制 的情况,若非必须基于单Function的细粒度仲裁/控制,那么采用基于Function Group粒度的仲裁/控制不失为一种更优的选项。

    6️⃣ 为提升枚举性能减少不确定性,软件可基于Function Number链表来对PCIe拓扑中的Function进行枚举。Function 0是链表的头,若检测到其ARI能力寄存器Next Function Number字段非零则进行下以Function的扫描。⚠️注意:Function Number不一定是连续的。

  具备ARI能力的设备Function不支持Phantom Function功能,但仍然支持扩展Tag及10-bit Tag的请求者。因此需要把Function设备能力寄存器的Phantom Functions Supported置零(图6)。

  

PCIe ARI (Alternative Routing-ID Interpretation)介绍相关推荐

  1. PCIE ARI技术

    目录 1.ARI简介 2.ARI配置过程 3.ARI寄存器 3.1 ARI Capability Header 3.2 ARI Capability Register 3.3 ARI Control ...

  2. ID生成器介绍及著名的五大开源ID生成器的使用UUID,snowflake

    ID在我们日常开发中使用的非常频繁,几乎只要是在开发就会天天打交道,但是你知道吗,ID学问大的很呢,怎么就大了呢,有多大呢?咳咳~~  没开车啊,注意正常,好,接下来我们开始分析分布式ID.别被名字吓 ...

  3. 常用生物信息 ID的介绍

    一.各种ID名称介绍 Gene ID 也称Entrez ID,EntrezGene ID ,是 NCBI 使用的能够对众多数据库进行联合搜索的搜索引擎, 其对不同的 Gene 进行了编号, 每个 ge ...

  4. Vivado18.2 PCIE ip核IO协议详细介绍

    金手指原理部分不多介绍,网上有很多类似的文章,大家可以自行参考 我们直接上手使用IP核建立部分 文章目录 IP核建立 IP核利化代码介绍 PCIE 协议介绍 PCIE 时序图 PCIE 示例代码 介绍 ...

  5. Certificate、Provisioning Profile、App ID的介绍及其之间的关系

      1.概念介绍 如果你拥有一个开发者账户的话,在iOS Dev Center打开Certificates, Indentifiers & Profiles,你就可以看到如下的列表: Prof ...

  6. 关于Certificate、Provisioning Profile、App ID的介绍及其之间的关系

    刚接触iOS开发的人难免会对苹果的各种证书.配置文件等不甚了解,可能你按照网上的教程一步一步的成功申请了真机调试,但是还是对其中的缘由一知半解.这篇文章就对Certificate.Provisioni ...

  7. PCIe TLP Prefix PASID TLP Prefix介绍

    ✨1. TLP Prefix 1.1 基本介绍   通用的TLP包括Prefix.Header.Data.Digest这4部分,格式如图所示,其中Prefix及Digest是可选的.本文主要介绍TLP ...

  8. JS生成唯一id方式介绍(UUID和NanoID)

    记录下JS生成唯一id的方法. 1.生成uuid的方法 方法一: function guid() {return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.repl ...

  9. python中object转str_python的id()函数介绍 python怎么将objectid转为str

    python id函数的输出值问题 Python中id函数为什么会对不同对象返回相同值如果那两个对象指向的是相同的内存地址,也就是说内部指向的其实是一个对象,那他们的ID返回值就是一样的. pytho ...

最新文章

  1. linux 内核 调试工具介绍
  2. python安装步骤3.7.2-linux环境安装python3.7.2
  3. jQuery 快速入门教程
  4. Linux软件包组的选择
  5. EFCore之SQL扩展组件BeetleX.EFCore.Extension
  6. html5 3D微信头像,这组3D动物肖像设计,让微信头像惊艳整个朋友圈
  7. 人工智能?你需要了解的内容和AI学习路线
  8. 【AI视野·今日CV 计算机视觉论文速览 第224期】Tue, 22 Jun 2021
  9. 每天学习虚幻4(一)
  10. wp-bugku-秋名山老司机
  11. 工业镜头倍率及视场范围、焦距的计算方法
  12. 滴滴顺风车女乘客遇害;华为法律应对澳 5G 禁令;苹果研发新背板技术|极客头条...
  13. 卷积神经网络的训练过程,卷积神经网络如何训练
  14. kuangbin 数学训练一 Billiard Balls
  15. python中国最好大学排名_三分钟实现爬取中国前20大学排名
  16. 解决hbase RegionServer频繁宕机的一些办法
  17. 【JVM进阶之路】垃圾回收机制和GC算法之三色标记(三)
  18. 网易云音乐android面试题,# 每日一道面试题 # 如何测试网易云音乐 app 语音识别功能?...
  19. 「紫禁之巅」四大图神经网络架构
  20. c++英文单词填空游戏

热门文章

  1. Oracle删表报错ora00054,Oracle解锁,解决“ORA-00054:资源正忙”错误
  2. 机器学习——支持向量机(SVM)之超平面、间隔与支持向量
  3. 5款工具彻底帮你解决百度网盘限速问题!
  4. Java基础教程1-Java特点和手把手教你安装JDK
  5. windows - PHP 开发环境搭建
  6. 基于BP神经网络改进的DSS工具箱盲源分离系统
  7. 1、 什么是time_wait?如何产生的?
  8. 参加这些国际学术会议:还怕发不了SCI论文?
  9. 中级职称英语计算机考试题库,全国中级职称英语考试试题
  10. Logistic Regression逻辑回归函数Python实现