1. PCIe概述:从PCI到PCIe的演进

大家好,我是你们的PCIe课程讲师。做了十几年硬件,跟各种总线打过交道。PCIe这个家伙,是我见过最能折腾也最能打的系统互连接口。今天咱们就来聊聊它的前世今生。

1.1 从PCI到PCIe:一段不得不说的历史

早期PC里用的都是ISA总线,那玩意儿慢得让人抓狂。后来Intel在1992年搞出了PCI总线,算是给PC产业打了一针强心剂。PCI用了一段时间,大家发现性能还行,但有个硬伤——它是并行的。

并行总线,你想想看,数据线一多,信号同步就成了大问题。频率一上去,信号歪歪扭扭,根本没法用。我记得那时候调PCI时序,真是让人头大。后来PCI-X出来想救场,把频率干到133MHz甚至更高,但并行总线的天花板就在那儿了,再怎么折腾也就是个局部优化。

PCI并行总线的痛点:

  • 共享总线架构,设备多了带宽不够分
  • 并行信号同步难,频率提升受限
  • 热插拔支持弱,电气复杂
  • 引脚多,板卡面积大

到了2000年代初,显卡、网卡、存储控制器对带宽的胃口越来越大。PCI那点带宽,说实话,已经喂不饱它们了。这时候Intel牵头搞了个大动作——推出PCI Express,也就是你们常说的PCIe。

1.2 PCIe的基本概念:串行才是王道

PCIe跟PCI最大的区别是什么?说白了,就是把并行改成了串行。

串行意味着数据在一根线上一个bit一个bit地传。你可能觉得这反而慢了,但实际不是。串行信号频率能跑得非常高,而且用了差分信号对,抗干扰能力很强。

我个人习惯:把PCIe理解成一条高速公路。PCI是8车道并行跑,但每辆车速度慢;PCIe是单车道串行跑,但车速极快,而且可以多车道组合(x1、x4、x8、x16)。

PCIe的核心概念有这几个:

  • Lane(通道):一对差分信号,一个发一个收。这就是PCIe的最小物理单位。
  • Link(链路):多个Lane组合在一起,比如x1、x4、x8、x16。
  • 分层架构:PCIe分了三层——事务层、数据链路层、物理层。每层各司其职,你改底层,上层不用动。
  • 点对点拓扑:每个设备直接跟Root Complex(根复合体)或Switch(交换器)相连,不像PCI那样共享总线。

嗯,这里要注意:PCIe虽然是串行,但它的协议相当复杂。为什么搞这么复杂?就是为了在保证可靠性的前提下把速度提上去。

1.3 PCIe的性能优势:数据说话

咱们来看看PCIe到底比PCI快多少。我先列个表,你们感受一下:

总线类型 带宽(单方向) 带宽(双向) 典型频率
PCI 32位/33MHz 133 MB/s 266 MB/s 33 MHz
PCI-X 64位/133MHz 1.06 GB/s 2.12 GB/s 133 MHz
PCIe 1.0 x1 250 MB/s 500 MB/s 2.5 GT/s
PCIe 1.0 x16 4 GB/s 8 GB/s 2.5 GT/s
PCIe 4.0 x16 32 GB/s 64 GB/s 16 GT/s
PCIe 5.0 x16 64 GB/s 128 GB/s 32 GT/s

看到没?PCIe 1.0单条Lane的带宽就已经超过了PCI 32位/33MHz。到了PCIe 4.0 x16,单向32 GB/s,双向64 GB/s。这是什么概念?一部4K电影一秒就能传完。

我有个项目,客户非要沿用PCI总线做视频采集卡。结果呢?分辨率一高,带宽直接爆炸。后来换成PCIe 3.0 x4,一切问题迎刃而解。你想想看,技术选型这东西,有时候不是能用就行,而是要为未来留空间。

除了带宽,PCIe还有几个硬核优势:

  • 低延迟:点对点连接,数据不用在总线上等来等去。延迟能做到几十纳秒级别。
  • 热插拔:支持热插拔,服务器维护时不用关机。当然,需要OS和驱动配合。
  • 高级特性:比如MSI中断、ACS(访问控制服务)、ARI(替代路由ID)等,对虚拟化和可靠性很有帮助。
  • 向后兼容:PCIe 5.0的设备插在PCIe 3.0的槽上也能用,只是速度会降。这个设计太聪明了,省了多少钱包。

避坑指南:我曾经在项目中遇到过PCIe设备兼容性问题。一块PCIe 4.0的NVMe SSD插在PCIe 3.0 x1的槽上,性能还不如SATA SSD。所以做设计时一定要确认主板的PCIe版本和Lane数量,别花冤枉钱。

1.4 PCIe的应用场景:无处不在

现在的PCIe几乎统治了高性能互连领域。显卡、NVMe SSD、网卡、RAID卡、FPGA加速卡,甚至一些高速数据采集设备,清一色都用PCIe。

我记得第一次接触PCIe是给一个网络交换机做FPGA加速卡。客户要求在10微秒内完成数据包处理,还得支持线速转发。用PCIe 3.0 x8,实测延迟不到5微秒,带宽也刚好够。那时候我就觉得,这玩意儿靠谱。

最后放一张图,给你们看看PCIe在系统里的角色:

PCIe系统架构与层次关系 PCIe系统架构与层次关系 CPU / 主存 Root Complex Switch EP 1 (显卡) EP 2 (NVMe) EP 3 (网卡) PCIe采用点对点拓扑,每个Endpoint(EP)独享带宽。通过Switch扩展设备数量,但根节点是唯一入口。

这张图展示了典型的PCIe系统架构。CPU通过Root Complex连接Switch,Switch再连接多个Endpoint。每个Endpoint独享一条链路,互不干扰。这种架构跟PCI的共享总线完全不同。

好了,这一章咱们把PCIe的背景和优势理了一遍。我个人觉得,理解PCIe的关键就两条:串行差分信号和点对点拓扑。后面讲配置空间和枚举时,你会看到这套架构带来的实际好处。

本章关键点回顾:

  1. PCI从并行总线演进到PCIe串行总线,解决了带宽和信号完整性问题
  2. PCIe的最小物理单元是Lane(一对差分信号)
  3. PCIe采用分层架构(事务层、数据链路层、物理层),便于扩展
  4. 点对点拓扑让每个设备独享带宽,系统性能不再被共享总线拖累
  5. PCIe的带宽随版本提升(2.5 GT/s → 5 GT/s → 8 GT/s → 16 GT/s → 32 GT/s)