1. PCIe Switch概述:从单芯片到多层级拓扑的演进

大家好,我是老周。做PCIe系统设计十几年了,今天咱们聊聊Switch的演进史。说白了,就是看它怎么从一个简单的“路口”变成了复杂的“立交桥网络”。

1.1 单芯片时代的PCIe Switch

早期PCIe Switch,就是个纯粹的“数据包转发器”。我刚开始接触PCIe时,用的就是这种单芯片方案。它内部就一个交换矩阵(Switch Fabric),连接几个下游端口和一个上游端口。

核心特征:

  • 所有端口集成在一颗芯片上
  • 端口数量有限(通常2-8个)
  • 内部带宽固定,不可扩展
  • 管理简单,通过配置空间直接控制

你想想看,这种结构就像一个小型十字路口。车流量不大时,一个交警就能搞定。但一旦车多了,这个路口就堵死了。

我记得有个项目,客户要求挂载6个NVMe SSD。单芯片Switch刚好够用,但性能一跑起来,上游端口就成了瓶颈。嗯,这就是单芯片的天花板。

1.2 为什么需要多层级拓扑?

为什么会从单芯片演进到多层级?说白了,三个原因:

  1. 端口数量不够用——服务器要挂几十个设备,单芯片最多也就十几个端口
  2. 带宽扩展受限——单芯片内部交换矩阵的带宽是固定的,没法动态扩容
  3. 物理布局限制——芯片引脚有限,PCB走线也有限制

我的经验:曾经有个数据中心项目,需要连接32个GPU。单芯片方案根本不可能,只能上多层级。那时候我才真正体会到,拓扑设计不是选芯片,而是选架构。

1.3 多层级拓扑的基本结构

多层级PCIe Switch系统,说白了就是把多个Switch芯片级联起来。常见的有两种:

1.3.1 树形拓扑

这是最常用的结构。一个根节点(Root Complex)下面挂一级Switch,一级Switch下面再挂二级Switch。就像一棵树,根粗枝细。

树形多层级PCIe Switch拓扑 Root Complex 一级 Switch x16 二级 Switch A 二级 Switch B 二级 Switch C x8 x8 x8 EP 1 EP 2 EP 3 Root Complex 一级Switch 二级Switch Endpoint

1.3.2 网状拓扑

树形拓扑有个问题——如果一级Switch挂了,下面所有二级Switch都连不上。网状拓扑就是为了解决这个痛点。每个Switch之间都有冗余连接,可靠性高很多。

注意:网状拓扑虽然可靠,但成本也高。每个Switch需要额外的端口做互联,而且路由算法复杂。我曾经在一个项目中用了网状拓扑,结果调试路由表就花了两周。

1.4 多层级带来的设计挑战

从单芯片到多层级,不是简单地把芯片堆起来就完事。我踩过的坑不少,总结下来主要有这几个:

挑战领域 具体问题 我的建议
时钟同步 多级Switch之间时钟抖动累积,导致链路不稳定 使用独立的时钟缓冲器,别偷懒共用
复位时序 各级Switch复位顺序搞错,设备枚举失败 设计复位树,确保先复位上游再复位下游
带宽分配 上游端口带宽被下游多个设备争抢 合理配置VC(虚拟通道)和仲裁权重
热插拔 下级设备热插拔导致上级Switch复位 加隔离电路,或者用Hot Plug控制器

1.5 实际项目中的选型考量

我个人习惯,选型时先问自己三个问题:

  • 需要多少个端口?——8个以内用单芯片,超过8个考虑多层级
  • 带宽要求多高?——每个端口都要x16的话,单芯片扛不住
  • 可靠性要求?——数据中心必须冗余,消费级可以省成本

避坑指南:我曾经为了省成本,在一个存储系统中用了单芯片Switch挂12个SATA SSD。结果带宽不够,读写性能惨不忍睹。后来换成两级Switch,上游用x16,下游分4个x8,问题就解决了。所以,别只看端口数量,带宽才是硬道理。

1.6 小结

从单芯片到多层级,本质上是PCIe系统从“够用”到“好用”的进化。单芯片简单可靠,适合小规模场景;多层级灵活可扩展,适合大规模部署。但多层级也带来了时钟、复位、带宽分配等一系列新问题。

嗯,这些内容就是第一章的核心。后面我们会深入每个技术细节,比如时钟树怎么设计、复位时序怎么保证。今天先到这里,大家消化一下。


公众号:蓝海资料掘金营,微信deep3321