Switch Buffers and Clos
水线决定什么时候让上游停
先看最小的拥塞场景:两台服务器各以 100 Gbps 向同一个交换机出口发送,而出口只能转发 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,也不能直接拿同容量的普通内存替换。
算到这里,问题就从“要多少 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,可以走“叶 1 → 脊 1 → 叶 2”,也可以经过脊 2。图里有多条路径,不自动意味着任何流量都无阻塞;还要看各级带宽、端口数和调度。
把这种分层连接缩进一个机箱,节点可以换成交换芯片。Cisco Nexus 9500 内部就采用 Folded Clos:线卡上的 ASIC 构成叶层,交换板上的 ASIC 构成脊层,对外仍是一台交换机。Cisco Nexus 9500 白皮书
大型机箱的数据路径可以概括为:
1 | 入口端口 → 入口线卡(查表、缓存)→ 硬件交换网络 |
这也不是交换机相对于路由器的独有能力。Cisco 8000 路由器内部同样用 Clos 连接线卡和交换芯片;现代高端设备的二层交换、三层路由都可以由专用芯片完成。Cisco 8000 架构说明
即使内部路径足够强,A→B、C→D 可以同时线速,A 和 C 同时满速发给 B 仍会争抢 B 的出口。Clos 组织路径,缓存承接积压,反压控制上游,它们分别处理不同的问题。
价格要算到哪一层
理解了多芯片和多设备的区别,再看价格就不容易混在一起。片上 SRAM 的成本包含在交换 ASIC 中,受工艺、面积、良率等影响;已有公开资料不足以可靠拆出“256 MB SRAM 单独值多少钱”。大容量使用 HBM,也是为了避免缓存占用过多逻辑芯片面积。
整套交换设备则可以做一个条件明确的预算。下面沿用讨论中的 512 个 400G 服务器接口例子,用 64×400G 交换机构建两层网络:
- 16 台叶交换机:每台 32 口接服务器、32 口上联,共接入 512 个服务器端口。
- 8 台脊交换机:每台与每台叶交换机连接 4 条 400G 链路,正好用满 64 口。
- 合计 24 台交换机,叶交换机上下联物理带宽为 1:1。
讨论时查到的 FS N9550-64D 经销商页面标价为 29,000 美元/台,并显示需要订货。沿用这个报价快照:
$$
24\times29{,}000=696{,}000\ \text{美元}
$$
再按仅用于演算的 1 美元=7 元人民币换算,约为 487.2 万元人民币。
回到最初听到的“反压水线寄存器”:现在可以解释它为什么存在,也能在给定速率和时间后估算积压量,但仍不能据此给某台设备填写配置值。下一步需要的是具体设备型号、寄存器名及字段定义,先确认它控制哪一个缓存、使用什么单位,再判断水线该怎样调整。
Switch Buffers and Clos
http://icarus.shaojiemike.top/2026/09/29/Work/network/Switch-Buffers-and-Clos/