PCIe
介绍
PCIe是数据传输通道,一端直接连接到CPU,另一端可以连接GPU、磁盘等。内存和CPU不是通过PCIe连接的,CPU 和内存(RAM)之间使用的是内存总线
CPU端:一个主机内部可能有多个CPU,每个CPU都有自己的PCIe接口(这个端口是 Root 根端口),每个PCIe设备都是连接到某个CPU的Root(可能是直接连接,也可能是经过中转)
PCIe的连接方式(拓扑):PCIe 通常呈树形结构(Root → Switch → Endpoint)
PCIe Bridge(PCI Express 桥接器)是一种硬件组件,用于扩展 PCIe 总线,桥接不同的 PCIe 域或层级,起到连接和转发数据的作用。其本质是将一个 PCIe 链路划分成多个子链路,或者将多层 PCIe 层级结构连接起来
如果两个设备连接到同一个PCIe Bridge,那么它们之间做不经过Host的操作的时候速度会更快。拓扑结构上相隔更远,自然速度越慢、延迟越高。
设备端:有的设备可能是直接连接到CPU的根端口的,这样自然速度更快。有的设备和CPU之间是有中转的。
# 一个例子
CPU Root Port
├── PCIe Switch A
│ ├── GPU0
│ └── GPU1
└── PCIe Switch B
├── GPU2
└── GPU3
# NUMA分组 和 CPU分组 是不同的
CPU Affinity: 0-9, 20-29
NUMA Affinity: 0
GPU之间的P2P传输
两个GPU都直接连接到同一个CPU Root:应该是可以的P2P的
单个 PCIe Switch 下的 GPU(PIX):一般支持 GPU 直接 P2P(不经过 Host Memory)
跨 PCIe Switch 的 GPU(NODE):可能允许
跨 NUMA(连接到不同CPU的GPU):也并不是强制必须经过 Host Memory。如果 P2P 支持跨 NUMA(较少见),数据走 CPU interconnect,但未必用 Host Memory
版本
| 版本 | 速率(GT/s) | 单通道带宽(GB/s) | 16通道带宽(GB/s) |
| PCIe 1.0 | 2.5 GT/s | 0.25 GB/s | 4 GB/s |
| PCIe 2.0 | 5.0 GT/s | 0.5 GB/s | 8 GB/s |
| PCIe 3.0 | 8.0 GT/s | 0.985 GB/s | 15.75 GB/s |
| PCIe 4.0 | 16 GT/s | 1.969 GB/s | 31.5 GB/s |
| PCIe 5.0 | 32 GT/s | 3.938 GB/s | 63 GB/s |
| PCIe 6.0 | 64 GT/s | 7.877 GB/s(PAM4编码) | 126 GB/s |
| PCIe 7.0 | 128 GT/s | 15.754 GB/s(PAM4编码) | 252 GB/s |
通道
AI:PCIe 通道(Lane) 是指 一对差分信号线对,由一根负责发送(TX)和一根负责接收(RX)组成,用于数据双向传输。通俗理解:1个通道 = 1对接收线 + 1对发送线。每个通道都有固定的带宽(速率),多个通道可以并行工作,从而成倍提升总带宽。PCIe 插槽的长度通常反映了最大可支持的通道数量,但实际工作时的通道数不一定等于插槽长度所示的最大值。
| 插槽长度 | 通常表示 | 实际用途 |
| 最短 | x1 | 简单扩展卡(网卡、USB扩展等) |
| 较短 | x4 | 固态硬盘(NVMe扩展)、部分存储卡 |
| 中等 | x8 | 专业网卡、加速卡 |
| 最长 | x16 | 显卡、AI加速卡、数据处理卡 |