2. Broadcom交换芯片架构速览

Broadcom的StrataXGS与StrataDNX系列交换芯片虽然面向不同场景,但在缓存组织上遵循一条共同主线:入端口缓存 → 共享缓存(Shared Buffer)→ 出端口队列,由MMU(Memory Management Unit)统一仲裁与调度。理解这条主线,是后续学习拥塞管理、PFC、WRED、动态阈值等特性的前提。

一、三大系列的定位与缓存层次差异

Trident系列(如Trident 3、Trident 4)面向企业园区与数据中心接入/汇聚,采用单片集成、共享缓存池架构,缓存容量通常在几十MB量级,端口速率以10G/25G/100G为主。Tomahawk系列(Tomahawk 3/4/5)面向数据中心Spine/Leaf,追求高密度100G/400G/800G端口,缓存相对较小(数MB到十几MB),强调低时延与线速转发。Jericho系列(Jericho2/Jericho3)属于StrataDNX深度缓存路由芯片,缓存可达数GB,通过外挂HBM/DDR实现,面向运营商边缘与核心路由器,支持大规模路由表和深度队列。

三者的缓存层次可以概括为:Trident与Tomahawk使用片上共享缓存,所有端口竞争同一物理缓存池;Jericho使用片外深度缓存,通过TM(Traffic Manager)芯片与FAP(Fabric Adapter)配合,缓存被划分为多个逻辑分区。无论哪种形态,MMU都是缓存分配、队列管理和调度决策的核心。

二、共享缓存与端口缓存的划分

共享缓存并非“所有端口随意抢占”。芯片内部通常把总缓存划分为若干区域:

  • 共享池(Shared Pool):所有端口按需动态申请,是吞吐优化的主要来源。
  • 保留/专用区(Reserved / Dedicated):为特定端口或队列预留,防止被其他端口挤占,常用于控制平面或高优先级业务。
  • 服务池(Service Pool):按端口组或优先级划分,用于实现公平性与隔离。
  • Headroom:专门用于吸收PFC暂停响应期间的在途报文,是RoCE无损网络的关键。

端口缓存划分则体现在每端口队列(Unicast Queue、Multicast Queue)的阈值配置上。以Trident 3为例,每个端口可配置多个UC队列(通常8个),每个队列有独立的动态阈值(Dynamic Threshold)和静态阈值(Static Threshold)。动态阈值根据当前空闲缓存自动伸缩,静态阈值则给出硬上限。工程上常见的做法是:为高优先级队列设置较大的动态阈值系数,为低优先级队列设置较小的静态上限,从而在拥塞时优先丢弃低优先级流量。

三、MMU的角色与数据通路

MMU位于入端口与出端口之间,承担四项核心职责:缓存分配、队列管理、调度仲裁、丢弃决策。数据通路大致如下:报文从MAC/PCS进入,经解析器提取优先级、DSCP、流标签等信息,送入MMU的入队逻辑;MMU根据队列映射表把报文放入对应出端口队列,同时向缓存管理器申请cell(固定大小的缓存单元,常见为208字节或256字节);若申请失败或超过阈值,则触发丢弃或标记(ECN)。出队时,调度器按SP/WRR/DWRR等算法选择队列,从缓存中读出cell并送往出端口。

需要特别注意的是,MMU的缓存分配以cell为粒度,而非字节。一个1500字节的报文会占用多个cell,最后一个cell可能部分浪费。因此实际缓存利用率与报文长度分布密切相关。在估算缓存需求时,常用公式:所需cell数 ≈ 报文长度 / cell大小(向上取整)。例如cell为208字节时,64字节小包占1个cell,1518字节报文占8个cell。

在Trident/Tomahawk上,MMU的阈值配置通常通过SDK的bcm_cosq_gport_dynamic_threshold_set或bcm_cosq_gport_sched_set等API完成;Jericho则通过TM的队列配置接口。实际工程中建议先用bcm_cosq_stat_get观察各队列的缓存占用与丢弃计数,再调整阈值。

四、一张图看清缓存层次与MMU数据通路

下图把入端口、MMU、共享缓存、出端口队列以及Headroom的关系集中呈现,便于对照理解。

入端口 MAC/PCS 解析 · 优先级 · DSCP 报文+元数据 MMU 缓存分配 · 队列管理 调度仲裁 · 丢弃决策 入队逻辑 阈值检查 调度器 丢弃/ECN cell申请 共享缓存池 Shared Buffer 共享池 动态按需分配 保留/专用区 控制平面 · 高优先级 服务池 端口组隔离 Headroom PFC暂停吸收 出队读取 出端口队列 UC队列0 高优先级 UC队列1 中优先级 UC队列N 低优先级 调度:SP / WRR / DWRR 出端口 MAC/PCS 调度决策 超阈值→丢弃/ECN 图例 报文/元数据流 缓存cell申请 调度/控制反馈 丢弃/ECN标记

五、工程视角下的关键参数与观察点

在实际调优中,需要关注几个可观测指标:每队列的缓存占用(buffer occupancy)、丢弃计数(drop counter)、ECN标记计数以及PFC暂停帧计数。以Trident 3为例,可以通过bcm_cosq_stat_get读取队列统计,结合bcm_cosq_gport_dynamic_threshold_get查看当前动态阈值。若发现某低优先级队列持续丢弃而高优先级队列缓存占用很低,说明动态阈值系数设置过于保守,可适当提高低优先级队列的共享池权重,或降低其静态上限以保护共享池。

对于Jericho系列,由于缓存外挂,MMU的分配逻辑还涉及TM与FAP之间的信元交换,配置时需同时关注TM队列深度与FAP链路信用。Headroom的配置尤其关键:在RoCE场景下,若Headroom不足,PFC暂停帧到达前报文已被丢弃,导致重传和时延抖动。一般建议Headroom按“端口速率 × 往返时延 × 1.5”估算,并留出余量。

不同芯片型号的cell大小、队列数量、阈值寄存器位宽不同,切勿直接套用其他型号的参数。调整前应查阅对应SDK的编程指南,并在实验室环境用打流仪验证丢弃率与时延变化。

总结来看,Trident/Tomahawk/Jericho的缓存层次虽有片上与片外之分,但MMU始终是缓存分配与调度的中枢。掌握共享池、保留区、服务池、Headroom的划分逻辑,以及MMU从入队到出队的数据通路,就能为后续的拥塞管理、PFC、WRED等专题打下坚实基础。