PCIe从入门到精通
+ -

PCIe 从入门到精通之四:PCIe 总线的拓扑结构

2026-04-02 0 0

0. 引言

PCIe 是硬件工程师跨不过去的坎。我刚开始工作就接触 PCIe,工作中遇到的所有产品都有 PCIe 总线。在此想把自己学习 PCIe 的一些经历和感悟,以及踩过的坑分享在这里,与大家一起进步。

所有 PCIe 主题的文章都会收录在《深入浅出聊 PCIe》合集里,每篇文章涵盖一个 PCIe 的主题,预计会有几十篇文章。

在上一篇文章《PCIe 从入门到精通之三:PCIe 设备的内部组件》中,我们分别介绍了三类 PCIe device:PCIe Root Complex、PCIe Endpoint 和 PCIe Switch 的内部结构。在这一篇文章中我们继续介绍 PCIe 总线的拓扑结构。

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


1. 计算机领域常见的拓扑结构

1.1 计算机网络的拓扑结构

拓扑结构是指各个设备与传输介质形成的节点与线的物理构成模式,它描述了工作节点及其之间连接的几何形状。拓扑结构的选择和设计对系统的性能、可靠性和可扩展性有重要影响。

我们比较熟悉的是计算机网络的拓扑结构,常见的网络拓扑结构主要有:

  • 总线型拓扑结构(Bus Topology)
  • 星型拓扑结构(Star Topology)
  • 环型拓扑结构(Ring Topology)
  • 树型拓扑结构(Tree Topology)
  • 网状型拓扑结构(Mesh Topology)
  • 混合型拓扑结构(Hybrid Topology)

1.2 PCI 总线的拓扑结构

PCI 采用的是总线型拓扑结构,所有的 devices 都挂载在同一个 PCI 总线上,大家争夺资源、相互内耗、卷得太厉害了。


2. PCIe 总线的拓扑结构

哪里有压迫哪里就有反抗,PCIe 总线采用高速串行点对点双通道的传输架构,使得每一个所连接的设备都能够被分配到独享的通道带宽。

PCIe 总线的拓扑结构呈树状。下图是从 PCIe 标准的文档里截取的 PCIe 拓扑结构图。把它倒过来看就像一棵树:

  • Root Port 是树根
  • 树根(Root Port)通过躯干(PCIe Link)向外延伸
  • 躯干(PCIe Link)的终点是 Endpoint

一条链路只能挂载一个 Endpoint 设备,要想在一个链路上挂载多个设备必须通过 PCIe Switch 扩展。

我们再次利用上一篇文章的图片,将 PCI device 的内部组件都展现出来:

元素 说明
蓝色箭头 表示 PCIe Bus,每一个蓝色箭头都有一个唯一的 PCIe Bus Number
黄色矩形 表示 PCIe Device,每个 PCIe device 都有自己的 Device ID、Function ID 和独立的配置空间
绿色虚线矩形 表示 Root Port,集成在 CPU 内部,看不见摸不着,比较虚幻
绿色实线矩形 表示 PCIe Switch,是一个独立于 CPU 的芯片,看得见摸得着的实体

在这棵倒立的树中:

  • Root Port 是树根
  • PCIe Switch 可以看作是下一级的子树根
    • 有一个上游端口连接到 CPU 的 Root Port
    • 有若干个下游端口,通过多个下游端口达到了拓展 PCIe 总线挂载 PCIe Endpoint 数量的目的

工作原理类比

  • CPU 是公司的 CEO
  • Root Port 是 CEO 的秘书办——CEO 想要下面的人干点事情,都交由秘书办去安排协调

Root Port 可以直接挂载 Endpoint,也可以挂载 Switch。对每个 Switch 来说:

  • 它下面的 Downstream Port 上的 device,都归它全权负责管理
  • Upstream 下来的 data,它需要判断数据是传给下面哪个设备(这就是路由),然后向下进行转发
  • Downstream 挂载设备向 Root Complex 传输数据,也要通过 Switch 代为转发

3. Switch 的层级有限制吗?

在 PCIe 的拓扑结构中,PCIe 交换机(Switch)可以形成多层级(cascaded switches 或 switch hierarchies),以扩展 PCIe 设备的连接能力。

PCIe 规范本身并没有对交换机层级的最大数量设置一个硬性限制。然而,实际的系统设计和性能会受到多种因素的限制,这些因素会间接限制交换机层级的深度:

3.1 Bus Number 总数限制

同一个 PCIe 体系中 Bus Number 可以有最多 256 个总线号。当使用 PCIe 交换机时,每个交换机每个 port 都会消耗一个总线号,尤其是在大型系统中,过多的层级会迅速消耗这些总线号。这是大家需要考虑的重要因素。

3.2 延迟和带宽

每个 PCIe 交换机都会引入额外的延迟,并且带宽会受到上游端口的限制。随着交换机层级的增加:

  • 数据传输的延迟会累积
  • 共享带宽的效率会降低

这可能会影响系统性能,特别是对于对延迟敏感的应用(特别是最近兴起的 OCP AI Server,延迟和扩展能力必须做到均衡)。

3.3 硬件复杂性和成本

构建多层级的 PCIe 交换机系统会增加:

  • 硬件复杂性
  • 布线难度
  • 成本

设计和实现能够支持大量设备和多层级交换的系统需要仔细考虑功耗、散热和信号完整性等问题。

3.4 实际应用需求

大多数消费级和企业级系统通常不需要非常深的 PCIe 交换机层级。例如,一些讨论中提到,为了连接大量的 GPU,可能需要 5-6 个 PCIe 交换机的层级。

小结:虽然理论上没有严格的层级限制,但在实际应用中,由于上述性能、资源和物理限制,PCIe 交换机的层级深度通常是有限的。

PCIe 6.0 引入了分段(Segmentation)概念,使得交换机能够更智能地路由跨不同层次结构的流量,这有助于管理更复杂的 PCIe 拓扑。


4. 总结:PCIe 拓扑结构的工作原理

PCIe 拓扑结构的工作原理总结如下:

特性 说明
连接方式 使用端到端的连接方式
整体结构 呈现出一种树状结构,以根联合体(RC)为根,通过交换机(Switch)进行分支扩展,最终连接到各种端点(Endpoint)设备
通信机制 CPU 通过 RC 与 PCIe 设备进行通信
设备发现 在系统启动时,Host(CPU)会对 PCIe 设备进行扫描(通常采用深度优先算法),通过配置读写事务包来发现和配置下游设备,为每个设备分配资源并初始化配置空间

这篇文章就聊到这里,敬请关注下一篇:
《PCIe 从入门到精通之五:PCIe 分层结构》


参考文献

  1. PCI Express® Base Specification Revision 5.0 Version 1.0
  2. PCI Express® Base Specification Revision 6.4
  3. PCI Express® Base Specification Revision 7.0

0 篇笔记 写笔记

关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!