一、PCIe 概述:从并行到串行的通信革命
大家好,我是你们的讲师。
今天我们聊聊 PCIe。说白了,它就是计算机内部用来连接各种高速设备的一条“高速公路”。你想想看,CPU、显卡、NVMe 硬盘、网卡……这些东西要互相传数据,总得有个高效的通路吧?PCIe 就是干这个的。
1.1 发展历史:为什么会有 PCIe?
我刚开始做硬件那会儿,用的还是 PCI 总线。32 位宽、33MHz 频率,峰值带宽只有 133 MB/s。那时候觉得够用了。但随着图形界面、千兆网卡的出现,PCI 很快就不够用了。
后来出现了 AGP,专门给显卡用。但它只是一个临时方案。真正的变革发生在 2003 年左右——PCI-SIG 组织发布了 PCIe 1.0 规范。
为什么叫“革命”?因为它的思路完全变了:
- 从并行到串行:PCI 是并行总线,所有设备共享一条 32 位或 64 位的宽马路。PCIe 改成了串行,用一对差分线(TX+ / TX-)收发数据。你可能会问:串行比并行慢吧?其实不然。并行总线有严重的信号同步问题,频率一高就翻车。串行反而能把频率拉得很高。
- 从共享到点对点:PCI 总线上挂多个设备,大家抢带宽。PCIe 每个设备和根设备之间是独立的物理链路,独享带宽。
我记的有一个项目,老平台用 PCI 总线挂四块千兆网卡,跑满时 CPU 占用率直接飙升到 80%。换成 PCIe 后,同样的负载,CPU 占用降到 20% 以下。
| 标准 | 发布时间 | 单 Lane 速率 | x16 总带宽 | 编码方式 |
|---|---|---|---|---|
| PCI 2.3 | 2002 | — | 1.06 GB/s | — |
| PCIe 1.0 | 2003 | 2.5 GT/s | 8 GB/s | 8b/10b |
| PCIe 2.0 | 2007 | 5 GT/s | 16 GB/s | 8b/10b |
| PCIe 3.0 | 2010 | 8 GT/s | 31.5 GB/s | 128b/130b |
| PCIe 4.0 | 2017 | 16 GT/s | 63 GB/s | 128b/130b |
| PCIe 5.0 | 2019 | 32 GT/s | 126 GB/s | 128b/130b |
| PCIe 6.0 | 2022 | 64 GT/s | ~ 256 GB/s | PAM-4 + FLIT |
嗯,这里要注意——从 PCIe 3.0 开始,编码效率从 8b/10b 的 80% 提升到 128b/130b 的 ~98.4%。这意味同样物理速率下,有效带宽直接多了 20% 以上。我在做 3.0 控制器验证时,第一眼看到这个编码方式就觉得:这才是真正的大招。
1.2 应用场景:PCIe 用在哪?
PCIe 的应用范围很广。但核心场景其实就三个方向:
1.2.1 服务器 / 数据中心
- GPU 加速卡(AI 训练、推理)—— 需要 x16 甚至 x32 链路
- NVMe SSD(高并发存储)—— 单盘 x4,通过 PCIe Switch 扩展
- 智能网卡 / DPU(数据处理器)—— PCIe 是主板与加速器之间的标配连接
- FPGA 加速卡(金融、高频交易)—— 低延迟是刚需
说白了,服务器就是要带宽大、延迟低、能接多设备。PCIe 的分层架构和链路扩展能力正好满足这些需求。
1.2.2 存储
我做了几年存储系统,这类场景对 PCIe 的依赖尤其深:
- NVMe 协议直接跑在 PCIe 上,天然低延迟
- 全闪存阵列通过 PCIe Switch 连接几十甚至上百块 NVMe SSD
- NVMe over Fabrics(RDMA),把 PCIe 域扩展到网络
你想想看,SATA SSD 的延迟在 100μs 级别,而 NVMe + PCIe 可以做到 10μs 以下。这个差距对数据库、HPC 来说,完全是两个世界。
1.2.3 嵌入式 / 消费电子
- 工业相机(高速图像采集)—— 需要 x4 或 x8 链路
- 汽车 ADAS(雷达 / 摄像头信号汇聚)—— 使用 PCIe Switch 做数据交换
- 笔记本扩展坞—— 通过 Thunderbolt(底层是 PCIe + DisplayPort)外接显卡、网卡、存储
其实嵌入式的 PCIe 设计和服务器不太一样。嵌入式更关注功耗、PCB 层数、BOM 成本。我做过一个手持设备,只能给 PCIe 分配 4 层板,结果信号质量堪忧。后来硬生生把走线从 8 英寸缩短到 4 英寸,并用上了低损耗板材。
1.3 与其他总线的对比
经常有同学问我:“PCIe 和 SATA、USB、Ethernet 比,到底强在哪?” 我会答:它们就不该放在一起比。为什么?
- PCIe 是芯片级互连(板内 / 系统内)
- SATA / USB / Ethernet 是外设互连(盒到盒或板到外设)
PCIe 的长板在于 低延迟(亚微秒级)、高带宽(单 Lane 可达 64 GT/s)、原生支持 DMA 和 IO 虚拟化。不过凡事都有代价,PCIe 对 PCB 走线要求高,不能像 USB 那样随便插根线拉 3 米。
| 总线 | 典型带宽 | 延迟 | 协议类型 | 应用场景 |
|---|---|---|---|---|
| PCIe 4.0 x16 | ~ 64 GB/s | < 1 μs | 点对点串行 | GPU / SSD / 网卡 |
| SATA 3.0 | ~ 600 MB/s | ~ 100 μs | AHCI 指令通道 | 机械硬盘 / 光驱 |
| USB 3.2 Gen2x2 | ~ 2 GB/s | ~ 10 μs | 主机控制 + 轮询 | 外设 / 存储 / 视频采集 |
| Ethernet 25GbE | ~ 3.1 GB/s | ~ 5-50 μs | 多层网络协议栈 | 数据中心 |
我个人习惯在选型时先判断:设备是要接在主板内部,还是通过线缆延伸到机箱外? 内部首选 PCIe,外部才考虑 USB / 以太网。有些场合会把 PCIe 通过线缆拉出——例如 Thunderbolt、PCIe over Cable——但那毕竟是少数。
1.4 PCIe 架构总览(一张图理解全貌)
下面这张图,我画了很多次。它是后面每一章的基础。你看懂它,也就看懂了 PCIe 的核心逻辑。
这张图展示了最典型的 PCIe 系统。CPU 通过 Root Complex 连接一个或多个 PCIe Switch,每个 Switch 再挂载若干 Endpoint。注意这个结构是全双工的。
1.5 写在开头的话
好,第一章就讲到这里。
这一章里我们聊了 PCIe 的发展脉络,对比了它与传统总线的差异,也扫了一遍主要应用场景。别小看这些背景知识——我见过不少工程师上来就研究事务层包格式,结果连什么是 Lane 都没搞清。到头来还是得回头补课。
后面的章节,我们会深入每一层的细节,包括物理层的电气特性、数据链路层的重传机制、事务层的 TLP 格式,还有配置空间的枚举过程。嗯,那些才是 PCIe 真正硬核的部分。
- PCIe 是串行点对点互连,不是并行共享总线。
- 每一代速率翻倍(2.5 → 5 → 8 → 16 → 32 → 64 GT/s)。
- 编码效率从 8b/10b 到 128b/130b,再到 PAM-4 调制。
- 分三层:事务层 → 数据链路层 → 物理层。
- 应用覆盖服务器、存储、嵌入式三大领域。