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 拓扑关系:
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 拓扑与配置周期的关系
配置周期的发起和路由依赖于拓扑结构:
- Type 0 配置周期:由 RC 或 Bridge 发往其直连的下行设备(Endpoint 或下级 Switch),用于读取/写入该设备的配置空间。
- Type 1 配置周期:由 RC 发往非直连的远端设备,需要经过 Switch 或 Bridge 转发,最终由目标设备所在层级的 Bridge 转换为 Type 0 周期。
- 总线号/设备号/功能号(BDF):配置周期使用 BDF 作为目标寻址方式,拓扑中的每个设备都有唯一的 BDF 编号。