PCIe从入门到精通之三:PCIe设备的内部组件

0,引言

在上一篇文章《PCIe从入门到精通之二:计算机王国中的PCIe设备》中,我们介绍了三类PCIe device:PCIe Root Complex,PCIe Endpoint和PCIe Switch,并着重详细介绍了Root Complex内的三个组件:Host Bridge, RCiEP和Root Port的基本功能。在这一篇文章中我们继续介绍PCIe device的更多内部组件。

所有PCIe主题的文章都会收录在《深入浅出聊PCIe》合集里,欢迎评阅。

需要下载 PCIe学习资料标准的朋友(pdf格式),请关注本微信公众号"硬件工程师宝典",在对话框内回复"PCIe",将获取标准下载链接。*****

一, PCIe设备内的组件: Upstream port,Downstream Port和Virtual PCI-PCI bridge

在PCIe(Peripheral Component Interconnect Express)设备中,"上游端口"(Upstream Port)和"下游端口"(Downstream Port)是根据它们相对于"根联合体"(Root Complex, RC)的方向来定义的,就像总公司向子公司传达命令的方向。如下图所示。

上图是一个Root Complex和PCIe device直接互联图。Root Complex包含有Virtual PCI-PCI bridge和Downstream Root port(因为总公司总是向下传达命令的);PCIe device包含有一个upstream port(因为子公司总是向上递交报告的)。图中蓝色的箭头代表一个PCIe Bus。

在图中一个PCIe的root complex通过自身的Virtual PCI-PCI bridge连到了他自己的root port上。Root port具有向下的downstream port。 Endpoint device上有一个upstream port和 Root Complex的downstream port相连接。

· 上游端口 (Upstream Port)

    • 定义: 上游端口是指指向根联合体(Root Complex)方向的端口。
    • 作用: 它负责将数据和控制信号从设备或PCIe交换机发送到更靠近根联合体的方向。

· Upstream Port示例

o 对于一个终端设备(Endpoint Device),例如显卡或SSD,它连接到CPU(即根联合体)的端口就是上游端口。

o 对于一个PCIe交换机,连接到根联合体或另一个更靠近根联合体的交换机的端口,是该交换机的上游端口。

  • 下游端口 (Downstream Port)
    • 定义: 下游端口是指远离根联合体(Root Complex)方向的端口。
    • 作用: 它负责将数据和控制信号从根联合体或PCIe交换机发送到更远离根联合体的设备。

· Downstream Port示例:

o 对于根联合体本身,其根端口(Root Port)就是下游端口,因为它连接着拓扑结构中更下层的设备。

o 对于一个PCIe交换机,连接到终端设备或另一个更远离根联合体的交换机的端口,是该交换机的下游端口。

  • Virtual PCI-PCI bridge

"虚拟PCI-PCI桥"并不是一个像传统PCI架构中那样独立的物理桥接芯片,而是一个逻辑概念或软件抽象。它的存在是为了让操作系统(OS)能够沿用PCI时代已有的设备枚举和配置机制来管理PCIe设备。可以将"虚拟PCI-PCI桥"比拟成一个公司内的项目小组,它是虚拟,下面team members也是可以按照项目拆分的,每个"项目小组"有个项目名字,我们用PCIe Bus Number来命名它。因此每个"虚拟PCI-PCI桥"下面有个独立的PCIe Bus Number。Host Bridge的PCIe Bus Number从0开始,其它的PCIe Bus Number根据系统开机时枚举来确定。(关于****PCIe Bus枚举,我们后面在专门章节讲解。)

每个根端口在软件角度来看都像一个PCI-PCI桥。这意味着它拥有一个配置空间,操作系统可以通过这个配置空间来。

简而言之,理解上游和下游的关键在于方向性:数据流向根联合体为"上游",数据流离根联合体为"下游"。

二, PCIe Switch的内部组件

PCIe交换机(PCIe Switch)是扩展PCIe总线拓扑的关键组件。它通过其上游端口(downstream port)和下游端口(downstream port)来管理和路由数据流量。

它欺上瞒下(承上启下),与Root complex联系时,它俯耳倾听,拥有upstream port(可以向上递交报告)的权利;与Endpoint联系时,它趾高气扬,拥有downstream port(可以向下传达命令)的权利。PCIe Switch角色转换非常丝滑。

如下图所示,这个PCIe Switch拥有一个upstream port和三个downstream port,每个PCIe port都和一个Virtual PCI-PCI bridge相连。PCIe Switch是唯一一个既有upstream port又有downstream port的PCI device。和Root Complex一样,每个"虚拟PCI-PCI桥"下面有个独立的PCIe Bus, 图中每一个蓝色的箭头代表一个PCIe Bus,拥有唯一的PCIe Bus Number。

PCIe交换机的上游端口是其连接到PCIe层次结构中更高级别(即更靠近根联合体Root Complex)的那个端口。一个PCIe交换机通常只有一个上游端口,Multi-Host mode可以有两个upstream ports。

PCIe交换机的下游端口是其连接到PCIe层次结构中更低级别(即更远离根联合体)的那些端口。一个PCIe交换机通常有多个下游端口,这使得它能够连接多个设备或进一步扩展PCIe总线数量。

三, CPU Root Complex的内部组件

我们再回过头来看看CPU root complex的内部组件。它作为总公司CEO的秘书办是最复杂的,通常它里面含有(一个Host Bridge, 若干个Virtual PCI-PCI bridge, 若干个RCiEP, 至少一个Root Ports,若干个Root Complex Integrated Endpoint,若干个Root Complex Event Collector(RCEC))。Host Bridge、Virtual PCI-PCI bridge、RCiEP和Root Ports在上一篇文章中介绍过, Root Complex Event Collector和非透明桥(Non-Transparent Bridge)没有介绍过,我们将它们补上。

上图中Host CPU直接与Host Bridge相连,Host Bridge向下分别和两个Root Complex Integrated Endpoint(RCiEP)、一个Root Complex Event Collector(RCEC)、N个Virtual PCI-PCI bridge相连。每个"虚拟PCI-PCI桥"下面有个独立的PCIe Bus, 图中每一个蓝色的箭头代表一个PCIe Bus,拥有唯一的PCIe Bus number。

· Root Complex Event Collector:RCEC

Root Complex Event Collector:RCEC相当于Root Complex情报机构,也是一个Root Complex的内部PCIe device。它的主要作用是收集和处理来自PCIe层次结构中特定设备(特别是根联合体集成终端设备,Root Complex Integrated Endpoints, RCiEPs)的各种事件消息,并将其报告给系统软件(如操作系统或固件)。

RCEC是专门为支持RCiEPs而设计的。RCiEPs是直接集成在根联合体内部的PCIe终端设备(例如某些CPU内部的集成显卡或存储控制器)

RCEC在PCIe规范中是一个可选组件。在某些平台中,可能存在硬件执行类似功能但对操作系统不可见的情况,或者通过ACPI平台错误接口(APEI)等其他机制来报告错误。 但在支持RCEC的系统中,它提供了一个标准化的接口来处理这些重要的系统事件。

Intel将RCEC集成在IEH(Integrated Error Handler)里。

四,透明桥 (Transparent Bridge)与非透明桥(Non-Transparent Bridge)

· 透明桥 (Transparent Bridge)

在一个集团公司内部(一个PCIe体系Hierarchy内),总公司(root complex)、区域总公司(switch)和子公司(end point)大家都在一个局域网内,内部的信息和资源是完全公开共享的。因此root complex,switch和end point他们之间的memory space和configuration space等信息都相互可以访问。也就是Endpoint今天穿的内裤的颜色,root complex是一清二楚,大家都是透明的,上班时是没法摸鱼的。

因此。处于同一个PCIe体系Hierarchy内,前面提到的Root Complex和PCIe Switch内部的Virtual PCI-PCI bridge都是工作在透明模式(白盒模式),其工作方式和所有信息对系统是可见的,我们称之为透明桥( Transparent Bridge,TB)。

透明桥将两个连接的总线域合并到一个统一的地址空间中,并将它们视为一个统一的地址域。

· 非透明桥 (Non-Transparent Bridge)

两个集团公司(两个不同的PCIe体系Hierarchy)之间有可能建立长期的战略合作伙伴关系,它们之间需要经常的大规模的业务往来(数据交换),两个集团公司可以各自指派一个代表,我们称之为Contact Windows(即PCIe Bridge )。如果有任何的业务往来(数据交换),由这两名Contact Windows(即PCIe Bridge)直接联系处理。

例如下图中一个CPU系统和另一个CPU系统通过Root port的PCIe Bridge互联。

例如下图中一个CPU系统和另一个CPU系统通过PCIe Switch的Non-transparent Bridge互联。

这两名Contact Windows(PCIe Bridge )只负责交换信息,关于公司内部的运营情况和数据那是机密,大家相互之间都守口如瓶。两个PCIe体系memory space和configuration space等信息都相互屏蔽,它们都工作在非透明模式(黑盒模式)。我们称之为非透明桥( Non-Transparent Bridge, NTB)

非透明桥是一种特殊的PCIe桥接器,它不将两个连接的总线域合并到一个统一的地址空间中,而是将它们视为两个独立的地址域。

PCI Express 非透明桥接器(NTB)起到了桥梁的作用,能够实现两个 PCI Express 体系(例如本地系统和远程系统)之间的高性能、低延迟通信。NTB 允许本地处理器独立配置和控制本地系统,并将本地主机内存域与远程主机内存域隔离开来,同时实现两个域之间的状态和数据交换。本地处理器会将 NTB 视为根复杂集成端点(RCiEP)来进行识别。

· 透明桥和非透明桥区别总结****

特征* 透明桥 (Transparent Bridge) 非透明桥 (Non-Transparent Bridge, NTB)
地址空间 合并为一个统一的地址空间,主机"看到"所有下游设备。 隔离的独立地址空间,每个主机只"看到"NTB本身作为终端设备。
主机可见性 对主机透明,主机直接枚举和访问下游设备。 对主机不透明,主机将NTB视为一个终端设备。
主要功能 扩展PCIe总线,连接更多设备。 连接独立的PCIe域/处理器,实现域间隔离和通信。
通信方式 直接路由事务。 通过地址转换、共享内存窗口、Scratchpad和Doorbell寄存器进行。
应用场景 标准PCIe拓扑扩展,如PCIe交换机、根端口。 多主机系统、高可用性/冗余系统、智能I/O、专用数据传输。

简而言之,透明桥是用于构建和扩展单一PCIe树的标准方式,而NTB则是一种高级功能,用于在需要隔离和独立管理多个PCIe域(通常是多个处理器或子系统)时实现它们之间的通信。

五,非透明桥 (Non-Transparent Bridge)在哪里?

· 透明桥模式和非透明模式*

下面两幅图分别是CPU和Switch的内部组件图,从图中我们根本找不到非透明桥(Non-Transparent Bridge)在哪里。

其实图中的Virtual PCI-PCI bridge既可以工作在透明桥模式又可以工作在非透明桥模式。因此合二为一在一个Root Port实体上,而且一个Root Port只需要一个device充当非透明桥,毕竟两个公司之间的****contact window只要一对就可以了。

· 嫡长子袭爵*

一个Root Port一般有16个lane,可以通过bifurcation被均分为两个或四个devices,Intel给这个功能起了个时尚的新名字叫subdivision。不管是bifurcation还是subdivision,其实就是分家。"分家"时,"财富"(Lanes)可以儿子之间均等分配,一碗水端平,但是只有一个非透明桥的角色分配给哪个儿子?其实我们老祖宗早就给出了答案,世袭罔替的爵位不都是由嫡长子承袭嘛?穿越剧不都是这么演的吗?那么问题又来了,谁是嫡长子?

下图是一个x16 lane的PCIe IO在不同的bifurcation的情况,这个PCIe IO可以工作在x16模式、x8模式或x4模式。在 PCI Express x16 IIO 模块中,只能将一个Root port配置为非透明桥端口。灰色的lane表示充当一般的PCIe的角色,绿色的lane表示充当非透明桥的角色(嫡长子就是从物理****lane的编号最大者开始向编号小的选择)。这里可千万不要连错了,否则只能respin我们的layout了,血淋淋的教训啊!

如上表,在非透明桥 端口为x16的情况下,NT端口总是映射到从第15到第0的最高位物理通道。对于非透明桥 端口为x8的情况,它从物理通道15到8映射;而对于非透明桥端口为x4的情况,则从物理通道15到12映射。

六,大团圆*

前面我们分别将Root Complex、Switch和Endpoint掰开了,揉碎了讲解了一遍。中秋马上就要到了,是时候让它们团聚了。

上图是将它们合并到一起的样子(敲黑板:这张图在以后的很多章节中都会用到。 )。黄色的组件是拥有PCIe配置空间的device。PCIe switch下面挂载着三个NVMe SSD。下一章我们将以这张图为中心介绍PCIe总线的拓扑结构(Topology)。

七, 抛砖引玉*

PCIe的三类核心设备之间是怎么互联的?它们的互联是遵循什么样的拓扑结构?

敬请关注下一篇: PCIe从入门到精通之四:PCIe总线的拓扑结构》

八,参考文献:****

需要以下参考文献( PCIe标准)的朋友,请关注本微信公众号"硬件工程师宝典",在对话框内回复"PCIe",将获取标准下载连接。

百度网盘分享的文件

相关推荐
好多173 小时前
《微服务事务管理》
java·微服务·架构
失散133 小时前
分布式专题——10.5 ShardingSphere的CosID主键生成框架
java·分布式·架构·分库分表·shadingsphere
roman_日积跬步-终至千里5 小时前
【系统架构设计(25)】Web应用服务器与现代架构
前端·架构·系统架构
无责任此方_修行中5 小时前
AWS IoT Core 成本优化实战:从 PoC 到生产的省钱之旅
后端·架构·aws
paopaokaka_luck6 小时前
绿色环保活动平台(AI问答、WebSocket即时通讯、协同过滤算法、Echarts图形化分析)
java·网络·vue.js·spring boot·websocket·网络协议·架构
Lei活在当下6 小时前
【业务场景架构实战】2. 对聚合支付 SDK 的封装
架构·android jetpack
可触的未来,发芽的智生6 小时前
追根索源-神经网络的灾难性遗忘原因
人工智能·神经网络·算法·机器学习·架构
linux修理工7 小时前
n1 ARMbian部署Grafana
arm开发·架构·grafana
axban11 小时前
QT M/V架构开发实战:QFileSystemModel介绍
开发语言·qt·架构