Switch Buffers and Clos

导言

讨论服务器通信和交换机优化时,我听到了“反压水线寄存器”。顺着这个词往下问:如果交换机有 512 个端口,需要多大的缓存、花多少钱?既然端口能通过硬件互通,为什么还会拥塞?本文从一个两路汇聚的例子出发,串起水线、缓存容量、SRAM/DRAM 和 Clos。读完后,可以分清它们各自解决的问题,也能判断一个容量或价格数字究竟在什么条件下成立。

水线决定什么时候让上游停

先看最小的拥塞场景:两台服务器各以 100 Gbps 向同一个交换机出口发送,而出口只能转发 100 Gbps。进来的数据多于能送走的数据,多出的部分就会积压在缓存里。

把缓存想成水池,数据量就是水位。反压水线是警戒线:达到一定占用量,就通知上游暂停;积压缓解后,再允许继续发送。 “寄存器”则是芯片中保存这类硬件配置的小存储单元,芯片按照配置自动执行。

图中需要分清两种方向:数据向接收端前进,反压通知向发送端返回。

![两台服务器向一个出口汇聚,交换机向上游返回暂停通知;示例 XOFF 为 700 KB,XON 为 400 KB。](https://pic.shaojiemike.top/shaojiemike/2026/09/a6e37ec57ae85c28b444ec7fe3c70abb.png)
根据会话内容整理的自绘示意图。100 Gbps 与两条水线用于解释机制,不是设备配置建议或实测结果。

在 RoCE 网络常用的 PFC(基于优先级的流量控制) 中,交换机会要求相邻上游设备暂停某个优先级的流量。这个上游可能是服务器网卡,也可能是另一台交换机。HPE 的 PFC 文档给出了这种控制过程。

水线 仅用于说明的数值 动作
XOFF:触发反压 缓存占用达到 700 KB 通知上游暂停发送
XON:解除反压 缓存占用降到 400 KB 通知上游恢复发送

如果暂停和恢复都用同一条线,水位稍微下降就恢复、稍微上涨又暂停,容易反复切换。两条线之间的间隔叫回差。有的设备直接配置 XON,有的配置它相对 XOFF 的偏移量。Juniper 的阈值说明可以帮助区分这两种表达。

暂停通知也不能瞬间生效。通知传到上游、上游停止发送都需要时间,链路上已经发出的包还会继续到达。因此,必须在缓存装满之前反压,并预留空间接住这些在途数据;这部分空间称为 Headroom。HPE 的缓存说明

调水线就是在这些条件之间取舍:触发太早,可能产生不必要的暂停;触发太晚,排队更深,预留空间不足时可能丢包;恢复时机不合适,则可能频繁停启或让链路空等。

但“反压水线寄存器”不是统一的寄存器名。它也可能控制网卡或芯片内部队列,数值可能表示字节数、缓存块数、剩余空间或动态阈值系数。只有拿到设备型号和寄存器定义,才能判断“调大”究竟意味着更早还是更晚反压。

512 个端口需要多少缓存

端口越多,同时进入的数据通常越多,但容量不能只由端口数决定。缓存要吸收的是一段时间内来不及排出的数据。

在输入速率大于输出速率、且这段时间内速率保持不变的简化模型中:

$$
\text{新增缓存需求}
=\frac{\text{总输入速率}-\text{总输出速率}}{8}
\times\text{持续时间}
$$

速率用 bit/s,除以 8 后得到 byte/s。为了看清数量级,先假设 512 个入口都满速接收,相关出口暂时完全不能排出数据。以下 MB、GB 均使用十进制单位。

每个端口的速率 总输入带宽 积压 1 μs 积压 10 μs 积压 100 μs
100 Gbps 51.2 Tbps 6.4 MB 64 MB 640 MB
400 Gbps 204.8 Tbps 25.6 MB 256 MB 2.56 GB
800 Gbps 409.6 Tbps 51.2 MB 512 MB 5.12 GB

例如,512×400G 的入口在反压生效前还要承接 10 μs 的数据:

$$
B=\frac{512\times400\times10^9\times10^{-5}}{8}
=256\ \text{MB}
$$

每个端口对应 500 KB。这里的 256 MB 是特定假设下的新增积压量,不是整机必须配置的 SRAM 容量。实际还要考虑原来已经排队的数据、出口还能排出多少、同时拥塞的端口数,以及缓存能否跨端口共享。

读写带宽是另一道约束。512×400G 的输入数据量为 25.6 TB/s;如果全部数据都要写入缓存,再读出一次,整个缓存系统就需要合计约 51.2 TB/s 的读写带宽。即使容量只有几百 MB,也不能直接拿同容量的普通内存替换。

先确认 512 指什么

端口数和 SerDes 电气通道数不是同一个概念。Tomahawk 5 的官方规格列出 512 条 100G SerDes,它们可以组合为 64 个 800G 端口。看到“512 路”时,要先确认是在数独立网络端口,还是芯片的电气通道。

算到这里,问题就从“要多少 MB”变成了“什么存储能及时接住、又及时送出这些数据”。

为什么优先用 SRAM

交换机中的不同端口、不同优先级数据会交错到来。处理一个包,可能需要写入报文、更新队列长度和指针,再由调度器选出要发送的队列,最后读出报文。访问不一定是长段连续的,因此小粒度访问能力、延迟稳定性和并行读写带宽都很重要。

片上 SRAM 的优势,是靠近交换逻辑,能够以较低、较容易预测的延迟服务这些访问。 DRAM 的行操作、存储体冲突和刷新会增加访问约束;SRAM 更适合需要稳定随机访问性能的缓存、状态更新与调度。Infineon 的技术说明

对比项 片上 SRAM 外部 DRAM,包括 DDR、HBM
数据保存 通电时不需要周期性刷新 需要刷新
访问延迟 通常更低,也更容易预测 受行操作、存储体冲突和刷新等影响
与交换逻辑的距离 在同一颗芯片中 通过芯片外部接口访问
并行访问 定制多个存储块和宽数据通路 依靠通道、存储体和控制器调度
容量与成本 占逻辑芯片面积大,容量昂贵 密度高,更适合大容量

这里容易混淆延迟和带宽。延迟是发起一次读取后多久拿到数据,带宽是流水线持续工作时每秒能搬多少数据。HBM 可以有很高的带宽,但单次访问延迟仍通常高于片上 SRAM。并行和流水线能缓解等待,却需要相应的调度设计。

所以,“交换机使用 SRAM,不用 DRAM”这个前提需要修正。实际既有以片上 SRAM 为主的设备,也有 SRAM+DRAM/HBM 的混合设计:快速路径使用 SRAM,拥塞时使用更大的外部缓存。Cisco 的混合缓存说明

两个已经查到的产品规格,能说明这种差异:

实际产品 端口规模 公布的缓存
Arista 7060X6-64PE-B 最大可拆分为 512×100G 总缓存 165 MB
Arista 7800R3 大型机箱 最大 576×400G 整机最高 384 GB,主要由多颗处理器旁的 HBM2 提供

第一行来自 7060X6 规格。第二类设备的处理器带有 32 MB 或 64 MB 片上缓存,以及 8 GB HBM2;没有拥塞的流量使用片上缓存,积压时使用 HBM2。HBM2 本身就是 DRAM,384 GB 也不能理解成一块所有端口任意访问的巨大 SRAM。7800R3 产品规格、架构白皮书

这些数据没有矛盾:端口规模、端口速率、目标缓存深度,以及单芯片还是多芯片系统,都不同。看规格表时,也要区分 Packet Buffer(报文缓存) 和管理 CPU 的系统内存,它们服务于不同的数据路径。

Clos 怎样组织交换路径

谈到缓存,另一个疑问也跟着出现:“我记得交换机不同端口之间有 full mesh 的直联硬件链路?”

这个印象抓住了“硬件能让端口互通”,但还需要区分连接方式。交换机是转发数据的设备;Clos 是把交换单元连接起来的架构。 一台交换机内部可以采用 Clos,多台交换机也可以组成 Clos 网络。

概念 含义
Full mesh,全互连 每两个节点之间都有直接链路
Crossbar,交叉开关 输入通过可选择的交叉点接到输出,互不冲突的传输可以并行
Clos,多级交换网络 多个较小的交换单元分级连接,共同完成更大规模的转发

如果 512 个端口真的按“每对端口一条独立双向链路”连接,需要:

$$
\frac{512\times511}{2}=130{,}816\ \text{条链路}
$$

理想的 512×512 Crossbar 有 262,144 个逻辑交叉点。交叉点是可选择的连接位置,不等于这么多条独立的外部高速链路;实际芯片还可能采用分组、多级或共享存储结构。

Clos 的思路,是用多个较小交换单元和中间级路径来扩展规模。数据中心常见的 Leaf–Spine(叶—脊)网络,是 Folded Clos 的一种实现。下面只画两台叶交换机和两台脊交换机,先看清“每台叶连接每台脊”。

![两台叶交换机分别连接两台脊交换机,服务器 A 到 B 可以经过任意一台脊交换机;交叉线没有连接点。](https://pic.shaojiemike.top/shaojiemike/2026/09/3a762310a98368007c9bef63c249a032.png)
根据会话内容整理的 Folded Clos 自绘示意图。叶层与脊层的方框各代表一台交换机;连线表示连接关系,不是实测流量。

A 发给 B,可以走“叶 1 → 脊 1 → 叶 2”,也可以经过脊 2。图里有多条路径,不自动意味着任何流量都无阻塞;还要看各级带宽、端口数和调度。

把这种分层连接缩进一个机箱,节点可以换成交换芯片。Cisco Nexus 9500 内部就采用 Folded Clos:线卡上的 ASIC 构成叶层,交换板上的 ASIC 构成脊层,对外仍是一台交换机。Cisco Nexus 9500 白皮书

大型机箱的数据路径可以概括为:

1
2
入口端口 → 入口线卡(查表、缓存)→ 硬件交换网络
→ 出口线卡(调度)→ 出口端口

这也不是交换机相对于路由器的独有能力。Cisco 8000 路由器内部同样用 Clos 连接线卡和交换芯片;现代高端设备的二层交换、三层路由都可以由专用芯片完成。Cisco 8000 架构说明

即使内部路径足够强,A→B、C→D 可以同时线速,A 和 C 同时满速发给 B 仍会争抢 B 的出口。Clos 组织路径,缓存承接积压,反压控制上游,它们分别处理不同的问题。

价格要算到哪一层

理解了多芯片和多设备的区别,再看价格就不容易混在一起。片上 SRAM 的成本包含在交换 ASIC 中,受工艺、面积、良率等影响;已有公开资料不足以可靠拆出“256 MB SRAM 单独值多少钱”。大容量使用 HBM,也是为了避免缓存占用过多逻辑芯片面积。

整套交换设备则可以做一个条件明确的预算。下面沿用讨论中的 512 个 400G 服务器接口例子,用 64×400G 交换机构建两层网络:

  1. 16 台叶交换机:每台 32 口接服务器、32 口上联,共接入 512 个服务器端口。
  2. 8 台脊交换机:每台与每台叶交换机连接 4 条 400G 链路,正好用满 64 口。
  3. 合计 24 台交换机,叶交换机上下联物理带宽为 1:1。

讨论时查到的 FS N9550-64D 经销商页面标价为 29,000 美元/台,并显示需要订货。沿用这个报价快照:

$$
24\times29{,}000=696{,}000\ \text{美元}
$$

再按仅用于演算的 1 美元=7 元人民币换算,约为 487.2 万元人民币。

这个数字的边界

这是上述 24 台设备组成的网络预算,不是一台 512 口机箱的报价,更不是 SRAM 的价格。它不包含光模块、线缆、税运等费用;页面标价不是成交价,演算汇率也不是实时汇率。

回到最初听到的“反压水线寄存器”:现在可以解释它为什么存在,也能在给定速率和时间后估算积压量,但仍不能据此给某台设备填写配置值。下一步需要的是具体设备型号、寄存器名及字段定义,先确认它控制哪一个缓存、使用什么单位,再判断水线该怎样调整。

Author

Shaojie Tan

Posted on

2026-09-29

Updated on

2026-09-29

Licensed under