PCIe Switch Fabric 技术解析

PCIe Switch Fabric

  • [1. 引言:为什么需要 Fabric](#1. 引言:为什么需要 Fabric)
  • [2. 核心概念:NT2.0 与 NTB 的关系](#2. 核心概念:NT2.0 与 NTB 的关系)
    • [2.1 NTB(Non-Transparent Bridging)基础](#2.1 NTB(Non-Transparent Bridging)基础)
    • [2.2 NT2.0:第二代非透明桥接](#2.2 NT2.0:第二代非透明桥接)
  • [3. 三层地址空间模型:物理域、全局域与本地域](#3. 三层地址空间模型:物理域、全局域与本地域)
    • [3.1 物理域(Physical Domain)](#3.1 物理域(Physical Domain))
    • [3.2 全局域(Global Domain)](#3.2 全局域(Global Domain))
    • [3.3 本地域(Local Domain)](#3.3 本地域(Local Domain))
    • [3.4 三层模型的协同](#3.4 三层模型的协同)
  • [4. Fabric 数据通路详解:Address Trap 与 DLUT 机制](#4. Fabric 数据通路详解:Address Trap 与 DLUT 机制)
    • [4.1 Address Trap](#4.1 Address Trap)
    • [4.2 DLUT(Domain Lookup Table,域查找表)](#4.2 DLUT(Domain Lookup Table,域查找表))
    • [4.3 Hardware Traps:地址转换的执行者](#4.3 Hardware Traps:地址转换的执行者)
  • [5. 跨域数据包生命周期:一次完整的 P2P 传输](#5. 跨域数据包生命周期:一次完整的 P2P 传输)
    • [5.1 传输前准备(控制面)](#5.1 传输前准备(控制面))
    • [5.2 数据面传输流程](#5.2 数据面传输流程)
    • [5.3 关键路径总结](#5.3 关键路径总结)
  • [6. 管理与控制:SM API 与硬件协同](#6. 管理与控制:SM API 与硬件协同)
  • [7. 技术边界与限制](#7. 技术边界与限制)
    • [7.1 错误报告缺失](#7.1 错误报告缺失)
    • [7.2 配置一致性要求](#7.2 配置一致性要求)
    • [7.3 并发安全限制](#7.3 并发安全限制)
  • [8. 总结](#8. 总结)

1. 引言:为什么需要 Fabric

在传统的 PCIe 架构中,系统被限制为单一的树状拓扑(Root Complex → Switch → Endpoint)。这种结构存在根本性局限:

  1. 单主机限制:一个 PCIe 树只能有一个 Root Complex(Host),无法实现多主机对等通信
  2. 地址空间冲突:两个独立 Host各自枚举设备时,可能分配相同的地址或 BDF,导致冲突
  3. P2P 壁垒:不同子树间的 Endpoint(EP)无法直接通信,必须经过Host 中转,造成延迟和带宽浪费

Atlas2 Fabric 是 Broadcom 提出的解决方案:通过将多个物理上独立的 Atlas2 交换机互联,形成一个可编程的 PCIe 交换网络。这不仅支持传统的主机-设备通信,更实现了两大突破:

NT2.0 over Fabric: 不同 Host 之间的直接通信(Host-to-Host)

Peer-to-Peer overFabric: 跨交换机的 EP 直接数据交换(如 GPU 间 DMA)

2. 核心概念:NT2.0 与 NTB 的关系

2.1 NTB(Non-Transparent Bridging)基础

NTB 是 PCIe 标准中的一种桥接技术,用于解决多主机互连的根本问题。

在透明桥(Transparent Bridge)中,Host 可以枚举并访问下游所有设备;但在多主机场景下,如果两个 Host 通过透明桥相连,它们会同时尝试枚举对方,导致地址冲突和系统崩溃。

NTB 通过非透明方式解决此问题:

每个 Host 将对方视为一个Endpoint 设备,而非可枚举的桥

每个 Host 拥有独立的地址空间(LocalDomain),彼此隔离

通过特殊的 BAR(Base Address Register)映射和 Doorbell 机制实现受控的数据交换

2.2 NT2.0:第二代非透明桥接

NT2.0 是 Broadcom 在 NTB 基础上的第二代实现,深度集成于 Atlas2 芯片中。与传统 NTB 相比,NT2.0 实现了三大演进:

特性 传统 NTB NT2.0
拓扑支持 点对点或简单级联 支持多交换机 Fabric 拓扑(Mesh、Dual Tree)
管理接口 简单的寄存器读写 完整的 SM API(System Management API),支持动态配置
功能范围 仅 Host-to-Host 同时支持 Host-to-Host 和跨域 P2P 管理

关键区别:NT2.0 不仅是数据通道,更是管理面代理。在 Atlas2 架构中,NT EP(Non-Transparent Endpoint)是 Host 访问芯片管理功能的入口,Host 通过 NT Driver 发送 SM API 来配置 Fabric 路由(详见第 6 节)。

3. 三层地址空间模型:物理域、全局域与本地域

理解 Atlas2 Fabric 的关键在于其三层的地址空间抽象。这解决了多主机环境下的寻址冲突问题。

3.1 物理域(Physical Domain)

定义: 单个 Atlas2 switch及其直连设备构成的硬件边界。

每个物理域拥有唯一的 Domain ID(如 Domain 1、Domain 2)

对应一个独立的 PCIe 子树,包含 Host Port、Fabric Port 和 Downstream Port

物理上通过 Fabric Link(通常为 Slimline线缆)与其他物理域互联

类比: 物理域如同一座拥有独立行政系统的城市,通过高速公路(Fabric Link)与其他城市相连。

3.2 全局域(Global Domain)

定义: 由 Atlas2 内部 ARM 处理器统一枚举和维护的 跨物理域统一地址空间。

形成过程(Synthetic Mode):

Atlas2 内部 ARM(mCPU)首先枚举所有下游设备,包括其他switch后的设备

ARM 为每个设备分配全局地址(如3400_0000h)和全局 BDF(如 16:0.0)

构建覆盖所有物理域的合成树(Synthetic Tree),即全局域

关键特性:

**跨域唯一性:**无论设备连接到哪个物理域,其全局地址和 ID 在整个 Fabric 中唯一

P2P 通信基准: EP 间直接通信使用全局地址作为目标

对 Host 透明: Host 操作系统 unaware of 全局域的存在

类比: 全局域如同世界地图,为每个城市(物理域)中的建筑(EP)分配全球唯一的 GPS 坐标。

3.3 本地域(Local Domain)

定义: 单个 Host 操作系统看到的地址空间,是 Host 标准 PCIe 枚举的结果。

形成过程:

  1. ARM 完成全局枚举后,将合成树呈现给 Host
  2. Host 进行标准的系统枚举,形成自己的内存映射
  3. 分配本地地址(如 8400_0000h)和本地 BDF(如 3B:00.0)

关键特性:

域内有效:本地地址仅在当前 Host 的地址空间内有效

Host 视角:Host A 认为 GPU1 在 8400_0000h,Host B 认为 GPU2 在 CF00_0000h

边界清晰:Host Port(HP)是本地域与全局域的分界线

**类比:**本地域如同你手机中的城市地图,只显示本地街道,不包含其他城市的地理信息。

3.4 三层模型的协同

转换机制: 当数据包穿越 Host Port(HP)边界时,Atlas2 内部的Hardware Traps自动完成地址和 ID 的翻译。这个过程对软件完全透明,确保 Host 无需修改操作系统即可工作。

4. Fabric 数据通路详解:Address Trap 与 DLUT 机制

在 Fabric 中,跨域数据包的路由依赖两大硬件表项的协同工作。这是实现 P2P over Fabric 的核心。

4.1 Address Trap

功能定位:P2P 路由的开关, 决定数据包是否允许绕过 Host 直接跨域传输。

技术背景: PCIe 标准定义了 ACS(Access Control Service),默认情况下禁止下游端口(DSP)间的 P2P 路由,强制所有流量经过 Root Complex(Host)。这是为了安全性和一致性考虑,但阻碍了高性能 P2P 应用。

工作机制:

  1. 表项结构:每个 DSP 端口维护一组 Address Trap 表项,记录允许 P2P 的地址范围
  2. 匹配动作:当 DSP 收到数据包时,检查目标地址是否命中 Trap 表项
    1. 命中:数据包被重定向到 Fabric Port,绕过 Host
    2. 未命中:按默认路径发往 Host(或根据 ACS 规则丢弃)

配置特性 (通过 SM API):

Station/Index 定位:每个 Trap 通过"站点(端口号)+ 索引"唯一标识

重叠检测:添加时硬件检查地址范围是否重叠,防止路由歧义

权限控制:只有用户添加的 Trap 可删除,系统默认 Trap 不可修改

关键限制: 没有 Address Trap,P2P 路由永远被禁用。

4.2 DLUT(Domain Lookup Table,域查找表)

功能定位:跨域路由的地图, 决定数据包应该通过哪个 Fabric Port 发送到目标 Domain。

工作机制:

  1. 查询逻辑:当数据包需要跨域时,DLUT 根据目标 Domain ID 查询对应的出口 Fabric Port 编号
  2. 与 Choice 寄存器配合:每个 Station(端口)的 Choice 寄存器选择该端口关联的 Fabric Port,实现灵活的路径选择

4.3 Hardware Traps:地址转换的执行者

功能定位:在 Host Port 边界执行地址和 ID 的自动翻译。

转换内容:

地址转换:Local Address ↔ Global Address(如 8400_0000h ↔ 3400_0000h)

ID转换:Local BDF ↔ Global BDF(如 3B:00.0 ↔ 16:0.0)

执行时机:

数据包从 Host 进入 Fabric(Local → Global)

数据包从 Fabric 到达 Host(Global → Local)

纯 P2P 流量(EP 到 EP)通常只需 ID 转换,地址保持全局一致

5. 跨域数据包生命周期:一次完整的 P2P 传输

以 GPU1(Domain 1, Port 32)向 GPU2(Domain 2, Port 48)发起 DMA 写操作为例,详解数据包的完整旅程。

5.1 传输前准备(控制面)

Host 通过 SM API 完成以下配置:

  1. 配置 Address Trap:在 SW0 的 Port 32 上添加表项,允许目标地址 3200_0000h(GPU2 的 BAR0)的 P2P 流量
  2. 配置 DLUT:在 SW0 上设置 Domain 2 → Port 28 的映射;在 SW1 上设置 Domain 1 → Port 28 的映射(双向)

5.2 数据面传输流程

第一步:发起与入口检查

GPU1 生成 TLP 包,目标地址为全局地址 3200_0000h

数据包进入 SW0 的 Port 32(DSP)

Address Trap 检查:命中 GPU2 地址范围 → 触发 P2P 路由,绕过 Host A

第二步:路由决策

SW0 查询 DLUT:目标 Domain 2 → 出口为 Port 28(Fabric Port)

数据包被导向 Fabric Port,准备跨域

第三步:跨域传输与地址转换

数据包通过 Slimline 线缆到达 SW1 的 Port 28

硬件陷阱转换:在边界处完成必要的地址/ID 翻译(确保 Host B 的地址空间一致性)

第四步:出口投递

SW1 识别目标地址 3200_0000h 属于本地 Domain 2

内部交换矩阵将数据包导向 Port 48

数据包到达 GPU2,完成传输

全程无需 Host 介入: Host A 和 Host B 的 CPU 不参与数据搬运,实现了真正的硬件级 P2P。

5.3 关键路径总结

6. 管理与控制:SM API 与硬件协同

管理架构

Fabric 的可编程性通过 SM API(System Management API) 实现,提供 Inband 和 OOB 两种管理通道。

Inband 路径:

Host 上的客户应用通过 NT Driver 发送 SM API

NT Driver 提供透传机制,不解析 API 内容

数据包通过 NT EP 到达 Atlas2 内部的 SM API Handler

最终由硬件写入 Address Trap 和 DLUT 表项

OOB 路径:

BMC 通过 I2C 连接 Atlas2

使用 Scrutinylib(SL API)封装 SM API

适合带外管理,无需 Host操作系统参与

7. 技术边界与限制

7.1 错误报告缺失

Link Up/Down 事件:Fabric Link 的状态变化不会上报给 Host

AER(Advanced Error Reporting):跨域传输中的 PCIe 错误无法透传,排障困难

7.2 配置一致性要求

资源变更需重配:如果系统重新分配了 GPU 的 BAR 地址,必须重新编程对应的 Address Trap 和 DLUT

无自动发现:Atlas2 无法自动检测对端 Domain 的 Bus 号配置,必须由软件确保输入参数正确

7.3 并发安全限制

内存请求在途风险:添加/删除 Address Trap 时,如果目标地址范围内有未完成的内存请求,可能导致乱序执行或数据不一致

操作原子性:必须确保配置时目标地址范围无活动流量

8. 总结

Atlas2 Fabric 通过三层抽象(物理域/全局域/本地域)和两大机制(Address Trap/DLUT),将传统的 PCIe 树状结构扩展为可编程的多主机交换网络。

核心价值:

  1. NT2.0 解决了多主机互连的地址隔离问题,实现了 Host-to-Host 通信
  2. P2P over Fabric 打破了子树边界,使 GPU 等高性能设备能够跨交换机直接 DMA,绕过了 Host 瓶颈
  3. SM API 提供了灵活的控制面,支持动态配置路由规则

技术本质: 这是在 PCIe 物理层之上叠加了网络层路由功能(类似以太网的 VLAN 和路由表),通过硬件加速的地址转换(Hardware Traps)实现高效转发。虽然引入了网络的概念(Domain、路由表、拓扑),但底层传输仍是标准的 PCIe TLP,保留了 PCIe 的可靠性和性能特征。

这种架构特别适合 GPU 集群、分布式存储等需要大规模 P2P 通信的场景,在保持 PCIe 生态兼容的同时,实现了类似 InfiniBand 的交换能力。

相关推荐
夜雪一千1 小时前
Python URL解码详解:单层、双重URL解码实战与踩坑指南
linux·服务器·python
Zs05091 小时前
服务器使用率高处理思路
服务器
一直C1 小时前
【嵌入式 ARM 驱动开发】PWM 脉宽调制原理与 GT9147 电容触控屏驱动开发详解
嵌入式硬件·lcd·嵌入式·arm汇编·imx6ull·cortex-a7
咯哦哦哦哦1 小时前
配置VNC sever 6.11.0版本 linux(激活码)
linux·运维·服务器
傲世仙尊1 小时前
序列化与自定义协议-把结构体拆成字节流再拼回来
linux·服务器·网络·arm开发
尼喃1 小时前
USB接口保护怎么设计?OVP芯片、TVS、ESD器件选型指南
嵌入式硬件
倔强的石头1061 小时前
【Linux指南】动静态库系列(九):动态库如何进入进程地址空间:从磁盘 .so 到共享内存映射
java·linux·服务器
鬼手点金2 小时前
Claude Code示范案例-进阶学习路径
java·服务器·前端·学习·计算机视觉·前向传播