PCIe介绍

总线

总线是连接各个部件的信息传输线,是各个部件共享的传输介质。总线充当了计算机内各个硬件组件之间的通信媒介,使得中央处理器(CPU)、内存、输入输出设备等能够协同工作。

总线分类:

  • 片内总线: 片内总线是指在芯片内部连接各个元件的总线。这些元件可以包括内部的寄存器、缓存、算术单元等。片内总线用于在芯片内部传递数据和控制信号,以协调不同部件的工作。

  • 系统总线: 系统总线是连接计算机主要部件的总线。连接了中央处理器、内存、输入输出控制器等主要组件。系统总线用于在这些主要组件之间传递地址、数据和控制信号,协调它们之间的工作。

  • 通信总线: 通信总线,外部总线,是计算机系统之间或计算机系统与其他系统之间的通信通道。它包括串行传输和并行传输。

PCIe总线

PCIe(Peripheral Component Interconnect Express)是一种计算机总线标准,用于连接内部硬件设备,例如图形卡、存储设备、网卡等。PCIe 是 PCI 标准的一种现代化、高速、并行的演进版本,提供更高的数据传输速率和更强大的性能。

PCIe 具有以下特点:

  • 点对点连接: PCIe 采用点对点(point-to-point)连接架构,每个 PCIe 设备直接连接到主板上的 PCIe 控制器,而不是共享总线。这种点对点连接架构消除了传统总线结构中的冲突和瓶颈,提高了系统性能。

  • 高速串行传输: PCIe 使用高速的差分串行通信,相较于传统的并行总线,提供更高的数据传输速率。这使得 PCIe 能够支持更大的带宽需求,适应了现代高性能计算和通信的要求。

  • 可伸缩性: PCIe 提供了可伸缩性,支持不同数量和配置的通道,例如 PCIe x1、PCIe x4、PCIe x8 和 PCIe x16。这使得 PCIe 能够适应各种设备和应用的需求,从网络适配器到高性能图形卡。

  • 热插拔支持: PCIe 支持热插拔功能,允许用户在系统运行时插入或拔出 PCIe 设备,而无需关闭系统。这增加了系统的灵活性和可维护性。

背景知识

ISA(Industry Standard Architecture)总线是一种计算机总线标准,它的前身可以追溯到1981年IBM推出的个人电脑(PC)。当时,IBM为了连接主板上的微处理器和外部设备(如显卡、声卡等),设计了一个内部通信接口。这个早期的总线被称作PC总线。随着时间的发展,IBM在其1984年推出的IBM PC/AT(Advanced Technology)中引入了一个新版本的总线,这就是ISA总线的前身。它最初是16位的,并且比之前的8位PC总线提供了更高的数据传输速率。ISA总线不仅能兼容新的16位卡,而且还向后兼容之前的8位扩展卡。尽管ISA总线曾经非常流行,但它基于并行通信原理,导致传输速度相对较慢且存在长度限制,这使得它难以满足日益增长的数据传输需求。

英特尔在1992年首次提出了 PCI(Peripheral Component Interconnect) 总线的概念,旨在解决 ISA 总线的瓶颈问题。PCI 是一种并行总线标准,最初被设计为用于连接外部设备,如网卡、显卡、磁盘控制器等。之后,PCI 很快成为一种开放标准,得到了多家硬件制造商的支持。这使得各种设备能够在不同厂商的计算机系统中互通性更好。

随着计算机技术的发展,PCI总线标准逐渐显露出一些限制,如带宽瓶颈和对未来高性能设备的支持不足。因此,产业界开始寻找一种更先进的替代方案。英特尔在2003年首次提出了 PCI Express (Peripheral Component Interconnect Express)的概念,作为对传统 PCI 标准的更新和改进。PCIe 最初被设计为一种高性能、灵活性更强的串行总线标准,以适应未来计算机的需求。

发展历程

  1. PCIe 1.0: PCIe 1.0 标准于2003年发布。它引入了高速串行连接,每个通道的数据速率为2.5 GT/s(gigatransfers per second)。PCIe 1.0 提供了比传统的并行总线更高的性能和可扩展性。
  2. PCIe 2.0: PCIe 2.0 标准于2007年发布。它在每个通道上将数据速率提高到5 GT/s,从而提供了更大的总线带宽。PCIe 2.0 向下兼容 PCIe 1.0,并为图形卡和其他高性能设备提供了更多的带宽。
  3. PCIe 3.0: PCIe 3.0 标准于2010年发布。它将每个通道的数据速率进一步提高到8 GT/s,进一步增加了总线带宽。PCIe 3.0 的发布支持更高分辨率的图形、更快速的存储设备和更多高带宽应用。
  4. PCIe 4.0: PCIe 4.0 标准于2017年发布。它将每个通道的数据速率提高到16 GT/s,实现了比 PCIe 3.0 更高的带宽。PCIe 4.0 的推出对于数据中心、高性能计算和其他需要更高带宽的应用具有重要意义。
  5. PCIe 5.0: PCIe 5.0 标准于2019年发布。它将每个通道的数据速率提高到32 GT/s,再次增加了总线带宽。PCIe 5.0 的推出进一步满足了对更高性能和更大带宽的需求。
  6. PCIe 6.0: PCIe 6.0 标准于2022年发布。它将每个通道的数据速率提高到64 GT/s,为未来计算机系统提供更大的带宽和性能。PCIe 6.0 的推出标志着 PCIe 标准的不断创新和发展。
PCIe Specification(版本) Specification ratification year(发布时间) Encoding(有效数据) Data Rate per lane(传输速率) Throughput(吞吐量)
x1 x2 x4 x8 x16
1.0 2003 8b/10b 2.5GT/s 250MB/s 0.500GB/s 1.000GB/s 2.000GB/s 4.000GB/s
2.0 2007 8b/10b 5.0GT/s 500MB/s 1.000GB/s 2.000GB/s 4.000GB/s 8.000GB/s
3.0 2010 128b/130b 8.0GT/s 985MB/s 1.969GB/s 3.938GB/s 7.877GB/s 15.754GB/s
4.0 2017 128b/130b 16.0GT/s 1.969GB/s 3.938GB/s 7.877GB/s 15.754GB/s 31.508GB/s
5.0 2019 128b/130b 32.0GT/s 3.938GB/s 7.877GB/s 15.754GB/s 31.508GB/s 63.015GB/s
6.0 2022 1b/1b 64.0GT/s 7.563GB/s 15.125GB/s 30.250GB/s 60.500GB/s 121.000GB/s

PCIe链路

PCIe Link表示两个组件之间的全双工通信信道,是PCIe总线中两个设备之间的通信连接,采用点对点的通信架构,一条链路可以包含多个通道(lane),可增加通道个数来满足更高的带宽要求。

image-20231226120533938

Lane,是指一组差分信号的组合,包括发送和接收。一个发送方向的差分信号包括TX+和TX-两条线,接收亦然。所以一条lane有四条物理连线。

image-20231226143119817

PCIe拓扑结构

image-20231226120936484

  1. 点对点连接: PCIe总线采用点对点的通信方式,每个设备都直接连接到根复杂器(Root Complex)或其他中继设备。这种结构消除了共享总线的瓶颈,提供了更高的性能。
  2. 树状结构: PCIe的拓扑结构通常呈现为树状结构。根复杂器是总线的起点,连接到根复杂器的设备称为端点(Endpoint)。可以通过 Switch 进一步连接到其他设备,形成一个树状的拓扑结构。
  3. 根复杂器 Root Complex(RC): RC是PCIe总线的起点,负责初始化和管理总线。RC可以连接到CPU、北桥芯片组或其他I/O控制器。
  4. PCIe Bridge To PCI/PCI-X: 桥接设备,可以连接不同的PCIe域,例如连接其他的PCI总线、PCI-X、PCIe总线。
  5. Switch: PCIe的转接器设备(PCIe扩展端口),为挂载设备提供路由以及转发服务;Switch的内部结构可以看作由PCI桥组成,在Switch中,每个端口对应的PCIe设备号是确定的,Switch设备会记录下游PCIe端口连接设备分配到的PCIe地址,在接收到TLP包时,通过比较目的地址和下游设备的地址,来判断是否转发以及转发到哪个PCIe端口。
  6. 端点设备 PCIe Endponit(EP): 端点是直接连接到PCIe总线的终端设备,如显卡、网卡等。每个设备都有自己的设备标识和唯一的设备ID。
  7. 链路: 链路是连接PCIe设备的通信通道,可以根据需要进行配置。链路的宽度(Link Width)和速度(Link Speed)是PCIe连接的关键参数,决定了数据传输的带宽和速率。
  8. 多域拓扑: PCIe支持多域拓扑,允许将PCIe总线划分为不同的域,每个域内有独立的根复杂器和设备。

PCIe架构

PCIe架构包括四个主要层次:物理层(Physical Layer)、数据链路层(Data Link Layer)、传输层(Transaction Layer)、应用层(Application Layer)。

1. 物理层(Physical Layer):

  • 电气特性: 定义了PCIe信号的电气特性,包括电压水平、时钟频率等。PCIe使用差分信号传输,以提高抗干扰性和传输速率。
  • 连接器和插槽: 规定了物理连接的标准,包括插槽的形状和尺寸,以及连接器的设计。常见的物理连接形式包括x1、x4、x8、x16等。
  • 数据传输: 负责将数据以数据包的形式传输到数据链路层。物理层还管理时序、流控和数据逐字节的传输。
  • 数据包组装: 将数据划分为适当大小的数据包,并在每个数据包上添加控制信息,包括起始和终止标志、错误检测和纠错码等。
  • 流量控制: 确保数据在物理层上的稳定传输,避免因接收方处理能力不足而导致数据丢失。
  • 错误检测和纠错: 负责检测并在可能的情况下纠正传输中的错误,以确保数据的可靠性。

3. 传输层(Transaction Layer):

  • 传输事务: 负责将数据包分解为传输层事务,并在设备之间传递这些事务。每个事务包含有关数据的信息、目标设备的地址等。
  • 路由: 确定数据包的路径,使其能够正确地传递到目标设备。传输层支持多通道和多队列,以提高并行性和性能。
  • 可靠性: 确保数据传输的可靠性,包括重传机制、流控等。

4. 应用层(Application Layer):

  • 与操作系统和应用程序的接口: 提供PCIe设备与主机系统之间的通信接口。在这一层,操作系统通过相应的驱动程序与PCIe设备进行交互。
  • 配置和管理: 应用层处理PCIe设备的配置信息,包括设备ID、中断分配等。此外,它还负责设备的启动和关闭。