4. 数据面硬件组成

Broadcom 交换芯片的数据面并不是一条“从端口到端口”的直线,而是一条由多个硬件子系统串联而成的流水线。理解这条流水线的关键,是把它拆成五个相互配合的部件:入向流水线(Ingress Pipeline)、流量管理器(TM,Traffic Manager)、缓冲(Buffer)、调度器(Scheduler)与MMU(Memory Management Unit)。它们共同决定了报文能否被正确解析、缓存、排队、调度并最终从出向端口发出。

入向流水线:解析、查表与转发决策

报文从物理端口进入芯片后,首先进入入向流水线。以典型的 Broadcom Trident/Tomahawk 系列为例,入向流水线大致包含以下阶段:

  • PHY/MAC 层:完成串并转换、对齐、CRC 校验,剥离前导码与 FCS,得到干净的以太帧。
  • 解析器(Parser):逐层解析 L2/L3/L4 头部,提取目的 MAC、源 MAC、VLAN、目的 IP、源 IP、协议号、目的端口等字段,形成内部包头(Internal Header)。
  • 查表与转发决策:通过 TCAM/SRAM 查表完成 MAC 学习、路由查找、ACL 匹配、VLAN 转换等,得到出端口、下一跳、优先级、丢弃策略等结果。
  • 入向处理:执行计量(Metering)、标记(Marking)、镜像(Mirroring)、隧道封装/解封装等操作。

入向流水线的输出是一个带有完整转发元数据的内部报文,它决定了报文接下来进入哪个队列、以什么优先级排队、是否允许被丢弃。

TM、缓冲、调度器与 MMU 的协同关系

入向流水线完成决策后,报文并不会立即从出端口发出,而是先进入 TM 子系统。TM 是数据面的“交通枢纽”,它负责把报文放入正确的队列,并在出向端口拥塞时决定谁先走、谁等待、谁被丢弃。TM 内部由三个关键部件构成:

  • 缓冲(Buffer):由片上 SRAM 与外部 HBM/DDR 组成,按队列或队列组分配空间。缓冲是“蓄水池”,用来吸收突发流量,避免瞬时拥塞导致丢包。
  • 调度器(Scheduler):按端口、队列组、队列三级层次进行调度,支持 SP(严格优先级)、WRR(加权轮询)、DWRR(赤字加权轮询)等算法,决定哪个队列下一个获得出向带宽。
  • MMU(Memory Management Unit):负责缓冲区的分配、回收与阈值管理。它维护每个队列的占用计数,当队列占用超过动态阈值(如 Alpha 阈值)时,触发 WRED 或尾丢弃,防止单一队列耗尽全局缓冲。

三者的关系可以这样理解:MMU 管“能不能存”,缓冲管“存在哪”,调度器管“谁先出”。入向流水线决定报文进入哪个队列,出向流水线则从队列中取出报文并完成最终封装与发送。

入向流水线 Ingress Pipeline PHY / MAC 对齐 · CRC · 剥离FCS Parser 解析器 L2/L3/L4 字段提取 查表与转发决策 TCAM/SRAM · ACL · 路由 入向处理 Meter · Mark · Mirror 内部包头 出端口 · 优先级 · 丢弃策略 TM 流量管理器 Traffic Manager MMU 内存管理单元 缓冲分配 · 回收 · 动态阈值(Alpha) 队列占用计数 · WRED / 尾丢弃触发 缓冲 Buffer 片上 SRAM + 外部 HBM/DDR 按队列 / 队列组分配空间 调度器 Scheduler 三级层次:端口 → 队列组 → 队列 SP · WRR · DWRR Q0 Q1 Q2 队列组 / 端口队列 出向流水线 Egress Pipeline 出向处理 VLAN编辑 · 隧道封装 出向队列 按端口/优先级排队 出向调度 整形 · 优先级仲裁 MAC / PHY FCS · 前导码 · 发送 物理端口输出 线速发送 拥塞反馈 / 丢弃决策 入向 TM 出向 反馈路径

缓冲与 MMU 的阈值机制

缓冲不是无限大的,MMU 必须通过阈值来约束每个队列的占用。常见的阈值策略有两种:静态阈值和动态阈值。静态阈值给每个队列固定分配一个上限,实现简单但利用率低;动态阈值则根据当前空闲缓冲总量动态调整每个队列的上限,典型公式为:

队列阈值 = Alpha × (空闲缓冲总量 - 队列当前占用)

其中 Alpha 是一个可配置系数(通常为 1/2、1/4、1/8 等)。当队列占用超过该阈值时,MMU 会触发 WRED(加权随机早期检测)或尾丢弃。WRED 的好处是提前随机丢弃部分报文,让 TCP 发送端感知拥塞并降速,而不是等到缓冲完全耗尽后一次性丢弃大量报文。

在实际调优中,Alpha 值越大,单队列可占用的缓冲越多,适合少数大流量队列的场景;Alpha 值越小,缓冲分配越公平,适合大量小队列并发的场景。需要结合端口速率、队列数量和业务突发特性综合选择。

调度器的层次与算法选择

调度器通常采用三级层次结构:端口级 → 队列组级 → 队列级。端口级决定哪个端口优先发送,队列组级决定同一端口下哪个队列组优先,队列级决定同一队列组内哪个队列优先。每一级都可以独立配置调度算法。

调度算法 特点 适用场景
SP(严格优先级) 高优先级队列绝对优先,低优先级可能饿死 语音、控制协议等低时延业务
WRR(加权轮询) 按权重分配带宽,实现简单 普通数据业务,权重粒度较粗
DWRR(赤字加权轮询) 按字节数精确分配带宽,支持可变长帧 需要精确带宽保障的业务

一个常见的配置思路是:端口级使用 DWRR 保证各端口带宽公平,队列组级使用 SP 保证控制流量优先,队列级使用 WRR 在数据队列之间分配剩余带宽。这样既保证了关键业务的低时延,又避免了低优先级队列被完全饿死。

出向流水线与端到端闭环

调度器选中某个队列后,报文进入出向流水线。出向流水线完成 VLAN 编辑、隧道封装、TTL 递减、FCS 重算等操作,然后交给 MAC/PHY 发送到物理端口。至此,一个报文从入向到出向的完整路径才真正闭合。

需要特别注意的是,MMU 的拥塞反馈会反向影响入向流水线。当某个队列的缓冲占用超过阈值时,MMU 可以通知入向流水线对该队列的报文执行丢弃或标记,从而在源头上抑制拥塞。这种“入向决策—TM 排队—MMU 阈值—调度出向—反馈入向”的闭环,正是 Broadcom 交换芯片数据面能够在线速下保持稳定吞吐的核心机制。

理解数据面硬件组成的关键,不是记住每个模块的名字,而是理解它们之间的数据流与控制流:入向流水线决定“去哪里”,TM 决定“怎么排队”,MMU 决定“能不能存”,调度器决定“谁先走”,出向流水线决定“怎么发”。五者缺一不可,任何一环配置不当都会导致丢包、时延抖动或带宽利用率下降。