Skip to content

片间互联

未考虑网卡(Network Interface Card)

南桥和北桥

主要年代:1995~2005

  • 北桥负责连接:CPU、DDR、PCIE、南桥
  • 南桥负责连接:PCI、USB、SATA、Ethernet、LPC、Super I/O

串行和并行总线:

仅北桥

主要年代:2010~至今

  • DMI:Direct Media Interface
  • PCH:Platform Controller Hub

CPU内置了原先的北桥功能(内存访问、PCIE RC),南桥演化为PCH。

PCIE

全称:Peripheral Component Interconnect Express。

总体抽象: - 系统层 -- PCIe分层交换互联结构 - 拓扑层 -- PCIe Tree(连接结构) - 协议层 -- TLP / DLLP / PHY

拓扑层

  • Root Complex
    • 整个PCIE拓扑的根节点。
    • 负责连接CPU、内存和其他PCIE设备。
    • 可以集成在CPU中,也可以单独使用一块芯片。
    • 但是总体来说,PCIE还是需要一个主控的。
    • Root Port:RC上的端口(主控侧端口)。可以有一个或者多个。
    • Non-Root Port:非主控侧口。
  • Endpoint:叶子节点上的设备。
  • Switch:把一条上游PCIE路扩成多条下游PCIE路。
    • upstream port:指向Root Complex。
    • downstream port:背离Root Complex。
    • switch的带宽要看upstream port带宽,所有downstream port汇聚带宽的上限是upstream port的带宽。

  • Link:两个设备之间的一条连接。
  • Lane是Link中的单条通道。

一条PCIE lane: - 一组独立的高速全双工串行通道。 - 由两对差分发送信号TX和差分接受信号RX组成。 - 差分信号指的是由两根线传输,信号 = (正线电压) - (负线电压)。 - 抗干扰、稳定。

常见lane数:x1 x2 x4 x8 x16

  • PCI/PCI-X
    • 共享并行总线
    • 一条PCI总线上的设备会竞争带宽

系统层

拓扑层只说明如何连接。 系统层说明请求如何路由,互联网络运行机制。

  • PCIe系统的对象划分

    • RC / Switch / Bridge
      • 负责拓扑管理与事务转发。
      • 维护层级、配置bus number和地址窗口、按规则路由TLP。
    • Endpoint(GPU / NIC / NVMe等)
      • 负责实现功能本体。
      • 通过配置空间暴露BAR、能力结构、DMA能力等。
    • BAR
      • 设备配置空间中的寄存器。
      • 描述设备需要的一段I/O或Memory窗口的大小、类型、属性。
      • 系统枚举时给BAR分配地址。
    • MMIO
      • CPU侧对BAR资源的映射访问方式。
      • CPU通过load/store访问设备寄存器,本质上会被RC转成PCIe Memory TLP。
    • DMA
      • 设备主动访问主机内存的机制。
      • 大块数据搬运通常由DMA引擎完成,CPU只负责配置。
    • IOMMU
      • 负责把设备看到的DMA地址/IOVA翻译成CPU物理地址。
    • ATS
      • 设备侧缓存IOMMU翻译结果,降低地址翻译开销。
    • P2P
      • 设备直接访问另一设备暴露出来的BAR/peer aperture,不经过主机内存数据搬运。
  • PCIe中的几类地址

    • CPU虚拟地址
      • CPU程序看到的地址,经CPU页表翻译后才变成CPU物理地址。
    • CPU物理地址
      • 主机DRAM和主机侧MMIO资源最终对应的物理地址。
    • PCIe Memory Space / bus-visible address
      • PCIe链路上传输、被Switch/Bridge用来路由的地址。
    • DMA地址 / IOVA
      • 设备访问主机内存时使用的device-visible地址。
      • 不等于CPU虚拟地址,也不一定等于CPU物理地址。
      • 本质上是PCIe Memory Space地址。
    • peer BAR地址
      • 设备访问另一个设备时使用的目标设备BAR/aperture地址。
      • 本质上也是PCIe Memory Space地址,但目标是peer device,不是主机内存。
  • 过程思想:PCIe初始化与资源建立

    1. RC从Root Port向下枚举整棵PCIe hierarchy。

    2. 遇到Bridge / Switch Port时,配置其下游bus number和地址窗口。

    3. 读取各设备配置空间,识别BAR、能力结构和功能类型。

    4. 为BAR分配I/O或Memory资源。

    5. 驱动将BAR资源映射成CPU可访问的MMIO区域。

    6. 若设备需要访问主机内存,则驱动进一步建立DMA映射,得到IOVA。

  • 过程思想:三条核心访问路径

    • CPU -> Device

      • CPU通过MMIO访问设备BAR对应的寄存器或窗口。

      • MMIO对应的物理地址被RC转换成PCIe Memory地址。

      • 路径:CPU -> RC -> Switch按地址窗口转发 -> Endpoint BAR decode。

    • Device -> Host Memory

      • 驱动把DMA地址写入设备寄存器。

      • 设备DMA引擎发起Memory Read/Write。

      • 若地址不命中其他下游窗口,Switch就把事务送往upstream port,朝RC方向走。

      • IOMMU再把IOVA翻译成CPU物理地址,最终访问主存。

    • Device -> Device(P2P)

      • 系统给目标设备暴露出的peer BAR/aperture分配PCIe地址。

      • 发起设备对该地址发起Memory Read/Write。

      • Switch发现该地址命中目标设备所在downstream port的window,就直接转发给目标设备。

      • 返回Completion时,再按Requester ID返回给发起者。

  • 路由思想

    • 配置访问:按bus number路由。

    • Memory / I/O访问:按地址窗口路由。

    • Completion返回:按Requester ID路由。

    • 访问主机内存时,事务通常往上走;

    • 访问peer device时,事务可能在Switch内部直接横向/向下转发。

  • 总括

    • BAR/MMIO:CPU访问设备。

    • DMA/IOMMU/ATS:设备访问主机内存。

    • peer BAR/P2P:设备访问另一设备。

    • Switch/Bridge负责“路由”,Endpoint负责“地址认领与功能执行”。

PCIE 不同代际带宽

目前H200支持PCIE 5.0 x16。

PCIE 5.0 一条lane 的速率是 32GT/s (GigaTransfers per second)。

编码方式:128b/130b。(每完成130次传输,有128个有效bit)

由于是16lane,所以单向总带宽是 63GB/s。

CXL

CXL指南

CXL:Compute Express Link。

CXL复用了PCIE的PHY层,并在其上运行CXL.io/CXL.cache/CXL.mem。 为CPU、加速器和内存设备提供缓存一致性与内存语义的高速互联Fabric。

PCIE: 1. CPU直连内存是“写回型、缓存一致”。 2. 设备通过DMA访问内存时,一般不考虑Cache Coherent。进而需要处理可能会引发的一系列问题。 3. CPU通过MMIO访问设备内存。

CXL: - 设备通过 Memory Load/Store 进行 Coherent 访问主机内存。 - 主机可以通过CXL将设备内存作为可寻址的内存资源,并且通过 Memory Load/Store 进行 Coherent 访问。

CXL: - 1.0 仅 host-centric。 - 2.0 支持 CXL switching 和 Memory Pooling,需要在PCIE switch硬件的基础上进行改造变为CXL switch才能支持CXL switching功能。 - 3.0 支持 CXL p2p 和 Memory Sharing。

考虑NIC

案例NIC:Nvidia ConnectX-7。

QSFP112

CX7 在 Tray 上通过 PCIE 接入 PCIE Switch 接收来自其他 Endpoint 的数据,然后通过QSFP112接入 Ethernet 以太网 或者 InfiniBand 和其他CX7进行通讯。

QSFP112 插口 1. 4lane 2. 112Gb/s 每 lane 3. 每个lane 高速串行差分全双工 4. 单向总带宽 56GB/s

DAC(Direct Attach Copper)铜缆用于连接两个CX7。 连接距离:无源7m,主动DAC10m。

InfiniBand

  • 节点:HCA、Switch、Router都是一种节点。

    • HCA:Host Channel Adapter。
    • HCA将PCIE树内部和外部连接起来。
    • 多个节点之间构成的网络靠Fabric。
    • Infinite 是一种 Fabric。
  • IB Switch 是 Infinite 网络中的交换机,内部有一颗单独设计的芯片,和PCIE Switch芯片不同。

    • 节点之间通过IB Switch连接起来组成Fabric。

  • IB 子网是一片受统一管理的 IB 网络。

    • 一个 Subnet Manager 实例管理 一个 IB 子网。每个Subnet只有一个Active SM。
    • SM 发现拓扑、分配LID地址、配置转发表和管理端口状态。
      • SM 会发送 管理报文去查询信息,包括节点、端口、Switch、Router,然后逐步建立整张Fabric的拓扑图。
    • SM 实例运行在某台 IB Switch 上,这台IB Switch不光会管理自己,还会管理整片子网中的其他IB Switch和端口。
    • 一个CX7内部可以有一个或多个端口(实体连接点/插线口),IB Switch上也可能有一个或多个端口。
    • 每个端口/实体连接点/插线口实际上还预先设定了一个全球唯一的固定的GUID(类似MAC地址)。
    • LID是子网内部分配给某个端口的地址,只在IB子网内部有效。
    • 某个端口发送报文时会包含SLID(Source)和DLID(Destination)。
    • 当交换机接受到报文后会查表,然后将DLID路由到正确的端口转发出去。
  • IB 子网之间依靠 IB Router连接,Router 也是一颗单独设计的芯片,和IB Switch不同。

  • UFM 是 Nvidia Unified Fabric Manager。

    • 带内指的MAD走IB网络,带外指的是MAD走以太网。
    • UFM在带内可以通过 MAD (IB managemant Datagram)管理整个Fabric。
      • 带内可以实现监控Fabric拓扑、端口状态。
    • UFM在带外通过以太网管理设备。
      • 带外可以实现监控Switch设备的性能,为Switch设备升级。

专用服务器上跑一个Linux,Linux上跑UFM软件。

  • HA表示High Availability(高可用),备份。
  • GbE 表示 千兆以太网。
  • MLNX-OS 是IB Switch 里的操作系统
  • Switch Agent 是 MLNX-OS 中运行的Agent软件。
  • Switch上同时接IB和Eth。

对于IB网络 -- in-band: - 数据交流 - HCA - IB Switch(SM和普通路由) - in-band 管理 Fabric - UFM(MAD)

对于Ethernet网络 -- out-of-band: - IB Switch(MLNX-OS + Switch Agent) - UFM

带宽

对CX7来说,输入是PCIe 5.0 x16 单向带宽 63GB/s,输出是QSPF 112 单向带宽 56GB/s 基本实现输入输出带宽持平。

对于IB Switch来说:使用 Nvidia Quantum-2 交换机。 - 使用OSFP插口(Octal Small Form-factor Pluggable),400Gb/s 50GB/s,处于NDR速率代际(HDR是200Gb/s一代)。 - 一共64个端口 - 如果64个端口内部形成了32个互不重叠的通信链路,则可以达到近似 32 个 400Gb/s 的单向吞吐。 - 带宽是链路理论上的最大传输能力,吞吐是实际运行中的收发能力。 - Switch的实际吞吐还和实际负载有关。比如某个输出端口需要同时处理多个输入端口的数据。

RDMA

在本场景中: - 一台主机可理解为“一个 RC 及其管理的本地 PCIe 树、设备和软件域”。 - A 主机包含 RC-A、GPU-A、HCA-A,B 主机包含 RC-B、GPU-B、HCA-B,两侧 HCA 通过 InfiniBand 互连。 - 相对某侧 HCA 而言,其所在主机是“本机”,另一侧是“远端”。

RDMA 是远程内存访问语义:一台机器可直接读写另一台机器已注册内存。

GPUDirect RDMA 则是 NVIDIA 提供的本地数据通路能力,使 HCA 能经 PCIe P2P/DMA 直接访问 GPU 显存。

RDMA 通信常见三类操作:SEND/RECVRDMA WRITERDMA READ。 - 其核心对象包括:QP(通信端点,含 SQ/RQ) - CQ(完成队列) - MR(注册内存区域) - PD(本机资源保护边界) - lkey/rkey(本地/远端访问凭证)。

两端先交换 QP 连接信息建立链路;若 A 要访问 B 的 GPU Buffer,A 还必须拿到 B 暴露的 remote_addr + rkey

RDMA WRITE(A GPU → B GPU) 为例: 1. A 侧 CPU软件向 QP-ASQ 投递一个 WQE,其中包含 opcode、本地地址、lkey、remote_addr、rkey、长度 等字段; 2. CPU 通过 doorbell/MMIO 通知 HCA-A。 3. 随后,HCA-A 依据 WQE,经 PCIe DMA 从 GPU-A 显存取数,封装成 IB/RDMA 报文发往 HCA-B; 4. HCA-B 校验 rkey + remote_addr 后,经 PCIe DMA 将数据写入 GPU-B 显存; 5. 完成后写入 CQE

因此数据路径是:GPU-A --PCIe DMA--> HCA-A --InfiniBand--> HCA-B --PCIe DMA--> GPU-B

需要强调:QP、CQ、MR 不是只存在于 CPU 内存,也不是只存在于 HCA 芯片,它们是 RDMA 逻辑对象,状态分布在主机软件栈、HCA 上下文以及 DMA 可访问内存中。 - CPU 负责控制:创建对象、注册内存、填写 WQE、通知 HCA; - HCA 负责数据面:读取 WQE、执行 DMA、完成协议处理并写 CQE。 - 所谓“PCIe 到 IB 的转换”本质上由 HCA 完成,而不是主机软件搬运数据。 - CPU 负责下发命令,WQE 是命令本体,HCA 负责执行,CQE 是执行结果。

A100

H100

GB200

Vera Rubin