PCIe配置周期解析与BAR空间读写性能测试 - 第1节

1.1 PCIe 总线发展历史

PCI Express(PCIe)自 2003 年由 Intel 提出以来,经历了多次重大迭代,每次升级都使单通道数据速率翻倍。下表总结了各代次的关键参数:

代次 发布年份 编码方式 单通道速率 (GT/s) x16 带宽 (GB/s)
PCIe 1.x 2003 8b/10b 2.5 4.0
PCIe 2.x 2007 8b/10b 5.0 8.0
PCIe 3.x 2010 128b/130b 8.0 15.8
PCIe 4.0 2017 128b/130b 16.0 31.5
PCIe 5.0 2019 128b/130b 32.0 63.0
PCIe 6.0 2022 PAM-4 + FLIT 64.0 126.0
关键演进趋势:从 PCIe 3.0 开始,编码效率从 8b/10b(80%)提升至 128b/130b(≈98.5%),有效降低了协议开销。PCIe 6.0 引入 PAM-4 信令和 FLIT 编码,是首次在 PCIe 中采用多级信号技术。

1.2 PCIe 与 PCI 的核心区别

PCIe 并非 PCI 的简单提速版本,而是从并行共享总线彻底转向了串行点对点互连架构。下表列出了两者最关键的差异:

对比维度 PCI(传统并行总线) PCIe(串行高速互连)
总线拓扑 共享并行总线,所有设备挂在同一总线上 点对点串行链路,每个设备独享通道
数据传输方式 半双工,共享带宽 全双工,独立收发通道
引脚数量 大量并行信号线(地址/数据/控制) 差分对串行信号,引脚数大幅减少
配置机制 通过配置空间访问设备寄存器 扩展配置空间(4KB),支持 PCIe 能力结构
热插拔支持 原生不支持,需额外电路 原生支持热插拔与电源管理
带宽扩展 固定总线宽度(32/64位) 通道捆绑(x1/x2/x4/x8/x16/x32)
测试视角要点:PCIe 的点对点特性意味着每个链路都需要独立的链路训练、均衡和眼图测试。BAR 空间的访问方式也因配置空间的扩展而更加灵活。

1.3 PCIe 拓扑结构

PCIe 体系结构采用树形层次化拓扑,核心组件包括 Root Complex(RC)、Switch 和 Endpoint(EP)。下图展示了典型的 PCIe 拓扑关系:

PCIe 典型拓扑结构图 PCIe 典型拓扑结构 Root Complex (RC) CPU 接口 | 内存控制器 | 配置管理 Switch (交换器) 上行端口 → 下行端口 | 包路由与转发 Endpoint (EP1) GPU / NVMe SSD Endpoint (EP2) 网卡 / 采集卡 Endpoint (EP3) FPGA 加速卡 拓扑说明: • Root Complex 是 CPU 与 PCIe 域之间的桥梁,负责配置周期发起和内存地址映射。 • Switch 实现多级扩展,下行端口可挂载多个 Endpoint 或下级 Switch。

1.3.1 Root Complex (RC)

  • 功能定位:连接 CPU、内存和 PCIe 域,是系统中最顶层的 PCIe 设备。
  • 关键职责:生成配置周期(Type 0 / Type 1)、管理内存地址到 PCIe 地址空间的映射、处理中断和错误事件。
  • 测试关注点:RC 的配置空间访问能力直接影响 BAR 空间枚举的正确性;RC 内部 DMA 引擎的性能是端到端带宽测试的基础。

1.3.2 Switch (交换器)

  • 功能定位:扩展 PCIe 拓扑,提供多个下行端口,实现多设备互连。
  • 关键职责:基于 PCIe 路由规则(地址路由、ID 路由、隐式路由)转发 TLP 包。
  • 测试关注点:Switch 的转发延迟、端口到端口的带宽隔离性、以及上行/下行流控机制是性能测试的重要指标。

1.3.3 Endpoint (EP)

  • 功能定位:PCIe 总线上的功能设备,如 GPU、NVMe SSD、网卡、FPGA 加速卡等。
  • 关键职责:实现具体的 I/O 或加速功能,通过 BAR 空间暴露寄存器或内存缓冲区给软件访问。
  • 测试关注点:EP 的 BAR 空间大小、可预取属性、以及读写延迟/吞吐量是配置周期解析和性能测试的核心对象。
常见误区:不要将 PCIe Switch 与网络交换机混淆。PCIe Switch 工作在事务层和数据链路层,不涉及 IP 路由;其内部通过内部仲裁和虚拟通道(VC)实现 QoS 和隔离。

1.4 拓扑与配置周期的关系

配置周期的发起和路由依赖于拓扑结构:

  1. Type 0 配置周期:由 RC 或 Bridge 发往其直连的下行设备(Endpoint 或下级 Switch),用于读取/写入该设备的配置空间。
  2. Type 1 配置周期:由 RC 发往非直连的远端设备,需要经过 Switch 或 Bridge 转发,最终由目标设备所在层级的 Bridge 转换为 Type 0 周期。
  3. 总线号/设备号/功能号(BDF):配置周期使用 BDF 作为目标寻址方式,拓扑中的每个设备都有唯一的 BDF 编号。