浅谈PCIE switch
PCIe Switch PCIe交换机像是计算机内部的“网络交换机”。作用是把有限的 PCIe 通道Lanes扩展出更多接口让多个 PCIe 设备可以同时连接到 CPU 并进行高速通信。为什么需要 PCIe SwitchCPU 的 PCIe 通道数量有限如果你想在系统里插满好几块高性能显卡GPU、十几块 NVMe 固态硬盘SSD以及多块万兆网卡CPU 通道根本不够用。这时候就需要 PCIe Switch 出马了通道复用扩展 它向上Upstream只占用 CPU 很少的通道比如 16 条向下Downstream却可以延伸出 32 条甚至 64 条通道连给更多的设备Switch 扮演了“集线器/分流器”的角色。数据路由分流 多个下游设备通过 Switch 共享上游带宽Switch 负责调度数据包TLP把数据精确投递到目标设备。工作原理与内部拓扑在逻辑上一个 PCIe Switch 并不是简单的硬件连线它在系统枚举时会被识别为一组桥接设备PCI-to-PCI Bridges。现代的 PCIe Switch如 Broadcom/博通、Microchip/微芯 的产品不仅仅做数据转发它还自带很多功能。1Peer-to-Peer (P2P) 通信如果设备 A 想给设备 B 发数据比如 GPU 1 拷贝数据到 GPU 2数据可以直接在 PCIe Switch 内部转发不需要绕道 CPU 和系统内存。这极大地降低了延迟解放了 CPU。2Non-Transparent Bridging (NTB非透明桥)允许连接两个不同的 CPU 系统多主机拓扑。两个系统通过 NTB 互相隔离各自的内存地址空间但又能实现高速的数据共享常用于高可用群集和双控存储服务器。3热插拔与故障隔离某个下游的 SSD 坏了或者被拔掉Switch 能把这个端口隔离不影响其他端口和整机系统的稳定运行。应用场景1开启 ACS访问控制服务GPU 1 - Switch - CPU/IOMMU - Switch - GPU 2安全隔离、延迟大、阿里云、腾讯云等公有云的多租户虚拟化环境。2关闭ACS任意两个插在同一个 Switch 下的设备就可以不受控地互相读写对方的内存。这在普通的单用户 PC 上没问题但在云计算、多租户服务器里就是灾难。不安全、延迟小、单一用户独占的 AI 训练服务器、高性能计算集群其他概念ATS 的全称是 Address Translation Services地址转换服务。它是 PCIe 规范中的一个重要扩展协议。一句话总结它的核心作用把主机的地址翻译工作“卸载”给 PCIe 设备自己去干从而大幅减少 IOMMU 的查表延迟。在没有 ATS 之前设备每一次进行 DMA直接内存访问数据包发到主控端时IOMMU 都必须临时去查内存里的页表。当并发量极大时IOMMU 的查表性能就会彻底爆掉成为系统瓶颈。在多卡 AI 服务器里如果要开启虚拟化安全隔离IOMMU 就必须介入。此时如果设备支持 ATS两块 GPU 就可以在本地提前把地址翻译好。当它们发出的 TLP 到达 PCIe Switch 时数据包已经带着明明白白的“物理地址标签”了。Switch 只要对准地址窗口直接转发就能实现真正的硬件级 P2P把传输延迟压到最低。