4. 拥塞管理核心概念
交换芯片的拥塞管理,本质上是在回答三个问题:拥塞从哪里来、拥塞如何扩散、以及在哪里用哪种机制把它压住。Broadcom 的 Trident、Tomahawk、Jericho 系列虽然缓存规模与调度能力不同,但拥塞管理的逻辑框架是一致的:入口侧识别与标记,缓存侧排队与丢弃,出口侧调度与反压。理解这条链路,才能把 ECN、PFC、WRED 放到正确的位置上。
拥塞产生的三个层次
拥塞不是单一原因造成的,通常可以拆成三个层次。第一层是速率失配:多个入口同时向同一个出口发送,例如 48 个 25G 端口各以线速向一个 100G 端口转发,瞬时汇聚比达到 12:1,出口带宽无法吸收,多余报文只能进入缓存。第二层是突发叠加:即使平均速率不超载,多个端口的微突发在同一微秒窗口内对齐,也会造成瞬时队列深度飙升。第三层是反压传播:当缓存耗尽,芯片要么丢包,要么向上游发送流控信号,把压力从拥塞点推回源端,形成拥塞传播路径。
在 Broadcom 芯片中,缓存被划分为共享池(Shared Buffer Pool)和每端口保留区(Reserved / Headroom)。共享池按 Service Pool 或 PG(Priority Group)动态分配,端口保留区用于吸收微突发和 PFC 响应延迟期间的报文。拥塞是否发生,取决于瞬时入队速率与出队速率之差对缓存深度的积分是否超过可用阈值。
队头阻塞与微突发
队头阻塞(HOL Blocking)发生在同一队列中,一个被阻塞的报文挡住了后面本可以转发的报文。典型场景是:端口 A 向端口 B 发送的报文因 B 拥塞而排队,而端口 A 后面还有发往空闲端口 C 的报文,它们被迫等待。Broadcom 芯片通过 VOQ(Virtual Output Queue)或每端口多队列来缓解:不同出口的流量进入不同队列,避免相互阻塞。在单队列场景下,HOL 会显著放大时延,这也是数据中心普遍启用多队列和动态阈值的原因。
微突发(Microburst)是拥塞管理中最容易被低估的现象。它指在极短时间窗口(通常几十微秒以内)内出现的瞬时流量峰值,平均速率可能远低于链路带宽,但瞬时速率超过出口能力。例如某端口平均利用率仅 30%,但在 20μs 内收到 200KB 突发,若出口为 100Gbps,20μs 只能发出约 250KB,看似够用,但若同时有其他端口竞争共享缓存,队列仍会瞬间冲高。微突发的观测依赖芯片的缓存水位计数器和端口统计,而不是秒级平均速率。
拥塞传播路径
拥塞传播遵循“缓存耗尽 → 丢包或反压 → 上游重传或暂停 → 压力扩散”的路径。在无损网络中,PFC 会把压力从拥塞端口逐跳传回源端;在有损网络中,丢包触发 TCP 重传,同样会把压力扩散。Broadcom 芯片在入口侧通过 PG 映射识别不同优先级的流量,在出口侧通过队列调度和阈值控制决定何时标记、何时丢弃、何时反压。理解这条路径,才能判断应该在哪一跳部署 ECN、在哪一跳启用 PFC、在哪一跳使用 WRED。
ECN、PFC、WRED 的定位与配合
ECN(Explicit Congestion Notification)是端到端的拥塞信号机制。它的核心思想是:当队列深度超过阈值时,交换机不丢包,而是把 IP 头中的 ECN 字段标记为 CE(Congestion Experienced),接收端收到 CE 后通过 TCP 反馈给发送端,发送端主动降速。在 Broadcom 芯片中,ECN 标记通常与 WRED 阈值绑定:队列深度超过 min 阈值后按概率标记 CE,超过 max 阈值后则可能直接丢弃。ECN 适合 RoCEv2 等对丢包敏感的无损网络,因为它用标记代替丢包,避免了重传带来的时延抖动。
PFC(Priority Flow Control)是链路级的反压机制。当某个优先级的队列深度超过 XOFF 阈值时,端口向上游发送 PFC Pause 帧,要求上游暂停该优先级的发送;当队列降到 XON 阈值以下时,再发送恢复帧。PFC 的关键在于 Headroom 的预留:从发出 XOFF 到上游真正停止发送,存在链路传播时延和上游响应时延,这段时间内上游仍会继续发送报文,必须由 Headroom 缓存吸收,否则会丢包。Broadcom 芯片通过 PG(Priority Group)把优先级映射到不同的 Headroom 池,实现精细化的反压控制。
WRED(Weighted Random Early Detection)是主动队列管理机制。它在队列未满之前就开始按概率丢弃报文,避免队列被填满后引发全局同步(Global Synchronization)。WRED 的参数包括最小阈值、最大阈值和最大丢弃概率。在 Broadcom 芯片中,WRED 通常与 ECN 共用同一套阈值配置:低于 min 不动作,min 到 max 之间按概率标记或丢弃,高于 max 则全部丢弃。WRED 适合 TCP 等对丢包有自适应能力的流量,而 ECN 适合需要无损的 RoCE 流量。
工程配置示例
以下是一个典型的 Broadcom 芯片拥塞管理配置片段,用于说明参数之间的关系。示例参数为教学假设值,实际部署需根据端口速率、RTT 和流量模型调整。
# 配置 PG 与 Headroom(示例)
pg_map 3 -> PG3
headroom PG3 size 120KB
# 配置 WRED / ECN 阈值(队列 3)
wred queue 3 min 200KB max 800KB drop-prob 10%
ecn queue 3 min 200KB max 800KB
# 配置 PFC XOFF / XON
pfc queue 3 xoff 600KB xon 300KB
# 配置 VOQ 使能
voq enable
配置完成后,可以通过芯片的队列水位计数器和 PFC 统计来验证效果。观察指标包括:队列深度是否长期停留在 min 阈值附近、ECN 标记比例是否稳定、PFC Pause 帧是否频繁触发、以及丢包计数是否接近零。如果 PFC 频繁触发,说明 XOFF 阈值偏低或 Headroom 不足;如果 ECN 标记比例过高,说明 min 阈值偏低,发送端降速过于频繁,需要适当上调。
总结来看,拥塞管理的核心不是某一个机制,而是机制之间的分工与配合:ECN 负责端到端降速,PFC 负责链路级反压,WRED 负责主动丢弃与标记,VOQ 负责隔离队头阻塞,Headroom 负责吸收微突发。在 Broadcom 芯片中,这些机制通过 PG、队列阈值和缓存池参数统一编排,工程上需要根据流量特征和时延要求逐项调优,而不是简单启用默认值。