什么是PCIe Switch?

PCIe Switch(交换器)是一种多端口的PCIe设备,用于扩展PCIe拓扑结构。它有一个上游端口(Upstream Port)连接Root Complex或其他Switch,以及多个下游端口(Downstream Port)连接Endpoint设备或下游Switch。

主要作用

  • 端口扩展:RC的PCIe端口有限,Switch可以扩展出更多端口连接设备
  • 拓扑扩展:支持多级级联,构建复杂的PCIe拓扑
  • 带宽汇聚:多个低速设备共享上游带宽
  • 热插拔支持:下游端口支持独立的热插拔

Switch架构

Root Complex

CPU/SoC

PCIe Switch

UP
DP0
DP1
DP2
DP3
GPU
NVMe
NIC
AI卡

内部结构

PCIe Switch内部包含:

  • 上游端口(Upstream Port):Type 1配置头,连接RC或上级Switch
  • 下游端口(Downstream Port):多个Type 1配置头,连接设备或下级Switch
  • 内部交换逻辑:负责TLP路由和转发
  • 仲裁器:管理多个端口间的流量仲裁

路由机制

Switch的核心功能是路由(Routing)——根据TLP中的地址或ID信息,将数据包转发到正确的端口。

地址路由(Address Routing)

用于Memory和I/O事务,Switch根据TLP中的目标地址决定转发端口。

Switch内部路由表示例:

目标地址范围 输出端口 说明
0xA0000000 - 0xAFFFFFFF Downstream Port 0 GPU BAR空间
0xB0000000 - 0xB0FFFFFF Downstream Port 1 NVMe SSD BAR空间
0xB1000000 - 0xB1FFFFFF Downstream Port 2 网卡 BAR空间
其他 Upstream Port 发往RC

ID路由(ID Routing)

用于配置事务,Switch根据Bus/Device/Function号路由TLP。

配置Type 0

目标为Endpoint,Switch根据设备号转发到对应下游端口

配置Type 1

目标为Bridge/Switch,Switch根据总线号决定是否转发到下游

隐式路由(Implicit Routing)

用于消息事务(如中断、电源管理),不需要地址信息,Switch根据消息类型决定处理方式。

Switch的配置空间

Switch的每个端口都有独立的Type 1配置空间,包含总线号配置和路由信息。

关键寄存器

寄存器 偏移 说明
Primary Bus Number 0x18 上游总线号
Secondary Bus Number 0x19 下游直接连接的总线号
Subordinate Bus Number 0x1A 下游最大总线号
Memory Base/Limit 0x20 Memory空间范围
Prefetchable Base/Limit 0x24 可预取Memory空间范围
I/O Base/Limit 0x1C I/O空间范围

总线号分配示例

RC (Bus 0)
  └── Switch Upstream Port (Bus 0, Dev 0)
        ├── Downstream Port 0 (Bus 1) → GPU (Bus 1, Dev 0)
        ├── Downstream Port 1 (Bus 2) → NVMe (Bus 2, Dev 0)
        └── Downstream Port 2 (Bus 3) → NIC (Bus 3, Dev 0)
                    

典型应用场景

1. 服务器扩展

服务器主板通常只有有限的PCIe插槽,通过Switch可以扩展连接更多设备:

  • 连接多个GPU用于AI训练/推理
  • 连接多个NVMe SSD构建高速存储
  • 连接多个高速网卡(25G/100G)

2. GPU服务器架构

典型8卡GPU服务器架构:

  • CPU提供2-4个PCIe x16端口
  • 每个CPU端口连接一个PCIe Switch
  • Switch下游连接4个GPU(x16或x8)
  • GPU之间通过NVLink或PCIe P2P通信

3. 存储服务器

全闪存存储服务器使用Switch连接大量NVMe SSD:

  • 单个Switch可支持24-32个NVMe设备
  • 多级级联支持更多设备
  • 支持热插拔,便于维护

4. 嵌入式系统

SoC的PCIe端口有限,使用Switch扩展:

  • 工业控制计算机
  • 网络设备(路由器、交换机)
  • 边缘计算设备

Switch高级特性

现代PCIe Switch支持多种高级特性,用于增强系统安全性、扩展性和虚拟化能力。

ACS (Access Control Services)

ACS是PCIe的一项重要安全特性,用于控制Switch内部的路由行为,防止恶意设备访问其他设备的资源。

ACS Source Validation

验证TLP的源地址,防止伪造源地址攻击

ACS Translation Blocking

阻止地址转换请求,确保设备只能访问分配给它的地址空间

ACS P2P Request Redirect

将点对点请求重定向到RC,由RC进行仲裁和转发

ACS P2P Completion Redirect

将点对点完成包重定向到RC

ACS Upstream Forwarding

控制上游端口的转发行为

ACS P2P Egress Control

控制 egress 端口的P2P访问

ACS应用场景

  • 虚拟化环境:防止虚拟机之间的非法内存访问
  • 安全隔离:将不同安全级别的设备隔离
  • SR-IOV:配合SR-IOV实现VF之间的隔离

ARI (Alternative Routing-ID Interpretation)

ARI扩展了PCIe设备的Function编号范围,从传统的3位(最多8个Function)扩展到8位(最多256个Function)。

特性 传统PCIe ARI扩展
Function位宽 3位 8位
最大Function数 8 256
Device号使用 5位(32个Device) 0(Function扩展)
应用场景 普通设备 高密度VF设备(如100G网卡)

MR-IOV (Multi-Root I/O Virtualization)

MR-IOV允许一个PCIe设备同时连接到多个Root Complex,实现多主机共享I/O设备。

MR-IOV架构特点

  • 多根支持:单个设备可被多个独立的RC访问
  • 资源分区:设备资源可以分配给不同的RC
  • 隔离性:不同RC之间的访问相互隔离
  • 应用场景:刀片服务器、多主机系统

路由表生成原理

Switch根据配置空间中的Base/Limit寄存器生成分路由表,决定TLP的转发端口。

地址路由决策流程

// 简化的路由决策逻辑
int route_packet(uint32_t addr, SwitchPort* ports, int num_ports) {
    for (int i = 0; i < num_ports; i++) {
        // 检查Memory空间范围
        if (addr >= ports[i].mem_base && addr <= ports[i].mem_limit) {
            return i;  // 转发到对应端口
        }
        // 检查Prefetchable Memory范围
        if (addr >= ports[i].prefetch_base && addr <= ports[i].prefetch_limit) {
            return i;
        }
        // 检查I/O空间范围
        if (addr >= ports[i].io_base && addr <= ports[i].io_limit) {
            return i;
        }
    }
    return UPSTREAM_PORT;  // 转发到上游端口
}
                        

Memory Base/Limit

定义32位Memory空间范围,用于路由Memory读写请求

Prefetchable Base/Limit

定义可预取Memory空间范围,通常用于大容量BAR

I/O Base/Limit

定义I/O空间范围,用于兼容传统PCI设备

常见PCIe Switch芯片

厂商 型号系列 特点
Broadcom PEX系列 市场份额最大,支持Gen3/Gen4,端口数多
Microchip Switchtec 支持Gen4,功能丰富,支持NVMe热插拔
ASMedia ASM系列 性价比高,常用于消费级产品
Diodes PI7C9X 支持Gen3,低功耗设计
Texas Instruments PCIe Switch 工业级产品,可靠性高

使用Switch的注意事项

带宽规划

  • 上游带宽是所有下游端口的共享资源
  • 避免下游总带宽超过上游带宽过多
  • 考虑设备实际带宽需求进行规划

散热设计

  • Switch芯片功耗较高(5-15W)
  • 需要良好的散热设计
  • 高负载时注意温度监控

延迟影响

  • Switch会引入额外的传输延迟
  • 对延迟敏感的应用需谨慎使用
  • 多级级联会累积延迟

成本控制

  • 高端Switch芯片价格较高
  • 根据实际需求选择合适规格
  • 考虑长期供货稳定性