2. Broadcom交换芯片架构与数据通路
要验证一台基于 Broadcom 芯片的高速交换机,第一步不是插上仪表打流,而是在脑中建立一张“硬件对象模型”:一个报文从端口进来,经过哪些物理层与逻辑层模块,在哪个环节被缓存、被调度、被改写,最后从哪个端口出去。只有把这条数据通路上的对象和接口认清楚,后续的丢包定位、时延测量、缓存观测才有明确的落点。本节以典型 Broadcom 数据中心交换芯片(如 Tomahawk、Trident 系列这一类 StrataXGS 架构)为参照,梳理其流水线、缓存管理、流量管理器、SerDes 与 MAC/PCS 层的分工与衔接关系。
一、从端口到端口:一条报文的完整旅程
Broadcom 交换芯片的转发路径可以粗略分为“入向处理—交换决策—出向处理”三大段。入向一侧,信号先经过 SerDes 完成串并转换,再由 MAC/PCS 层恢复出以太网帧边界与对齐关系,随后进入解析器(Parser)。解析器按可编程的解析图逐层剥离以太头、VLAN、IP、TCP/UDP 乃至隧道封装,把关键字段写入内部报文描述符(通常称为 Packet Header / Metadata)。这些字段包括目的 MAC、目的 IP、源端口、VLAN、DSCP、ECN 等,它们决定了后续查表与调度的行为。
查表阶段由多个并行的表组成:L2 MAC 表、L3 主机表与路由表、ACL/TCAM 表、ECMP 组表等。查表结果被合并成一份转发决策,包含出端口或出端口组、下一跳改写信息、优先级与丢弃策略。决策完成后,报文被送入流量管理器(Traffic Manager, TM),由它决定何时把报文写入缓存、何时读出、从哪个端口发出。出向一侧再经过改写器(Rewriter)修改 MAC/IP 头,最后回到 MAC/PCS 与 SerDes,变成线缆上的串行信号。
这条链路上每一段都有独立的可观测点:SerDes 的误码与眼图、PCS 的对齐状态、MAC 的统计计数、解析与查表的命中计数、TM 的队列深度与丢弃计数。验证与诊断的本质,就是把这些观测点与具体故障现象对应起来。
二、流水线:可编程解析与并行查表
Broadcom 芯片的流水线是“可编程”的,这一点对验证非常关键。解析器不是固定解析到某一层,而是由一张解析图(Parse Graph)描述:从以太头开始,根据 EtherType 决定下一层是 IPv4、IPv6 还是 MPLS,再根据协议号决定是否继续解析 TCP/UDP 或 VXLAN/Geneve。验证时如果发现某类隧道报文没有被正确识别,第一件事就是确认解析图里是否包含该封装路径,而不是先怀疑硬件损坏。
查表阶段强调并行性。L2、L3、ACL 等表在流水线中同时被访问,结果按优先级合并。这里有一个容易踩坑的点:ACL 的 deny 与 L3 路由的命中可能同时发生,最终行为取决于芯片定义的优先级顺序。做故障诊断时,若出现“路由表里有条目但报文被丢”,应检查 ACL 是否先一步命中并执行了丢弃动作。此外,ECMP 组的哈希结果决定了实际出端口,哈希种子与字段选择(五元组、还是仅源目 IP)会直接影响流量分布,这也是链路利用率不均的常见根因。
三、缓存管理与流量管理器:丢包发生的地方
缓存管理负责共享缓存池的分配。芯片通常把片上 SRAM 组织成一个共享池,各端口、各队列按阈值或动态门限申请空间。当某个出端口拥塞,其队列占用上升,超过门限后新到的报文要么被丢弃,要么触发 WRED 提前丢弃,要么打上 ECN 标记通知对端降速。如果配置了 PFC,还会向上游发送暂停帧,形成反压。
流量管理器则负责调度。它维护每个出端口的多个队列,按 SP(严格优先级)、WRR 或 DWRR 等算法决定出队顺序,并可对端口或队列做整形(shaping)。验证时常用的观察量是队列深度与丢弃计数:如果某队列深度持续贴近门限且丢弃计数增长,说明该出端口长期过载;如果队列深度很低却仍有丢弃,则要怀疑是缓存分配策略或 PFC 死锁问题。
四、SerDes 与 MAC/PCS:物理层的验证对象
SerDes 是芯片与光模块/线缆之间的串行接口,负责并串转换、时钟恢复与均衡。它的关键参数包括速率(如 25G/50G/100G per lane)、预加重与均衡设置、以及误码率。验证 SerDes 时,通常借助芯片提供的 PRBS 图案生成与检测功能,在环回模式下统计误码;眼图则反映信号质量,是判断链路裕量的直接依据。
MAC/PCS 层位于 SerDes 之上。PCS 负责 64b/66b 编码、块同步与通道对齐(lane deskew),MAC 负责帧的收发与统计。多通道链路(如 4×25G 组成 100G)中,如果某条 lane 的对齐失败,整条链路可能无法 up,或者虽然 up 但出现间歇性错误。诊断时应先确认 PCS 的 block lock 与 align 状态,再看 MAC 层的 CRC 错误计数与帧长统计。
五、建立可操作的硬件对象模型
把上述模块串起来,就得到本节要建立的硬件对象模型。它不是一个抽象框图,而是一张“可寻址、可观测”的清单:每个模块对应一组寄存器或计数器,每个计数器对应一类故障现象。下表给出一个简化的对应关系,供后续验证与诊断时直接引用。
| 硬件对象 | 主要职责 | 典型观测点 | 常见故障现象 |
|---|---|---|---|
| SerDes | 串并转换、均衡 | 误码率、眼图、PRBS 统计 | 链路不稳、间歇性 CRC 错 |
| MAC/PCS | 编码、对齐、成帧 | block lock、align 状态、CRC 计数 | 链路无法 up、帧错误 |
| Parser | 字段提取、描述符生成 | 解析命中计数 | 隧道报文识别失败 |
| 查表引擎 | L2/L3/ACL/ECMP 决策 | 表项命中、未命中计数 | 路由不通、ACL 误丢 |
| 缓存管理 | 共享池分配、门限控制 | 缓存占用、WRED/ECN 计数 | 拥塞丢包、PFC 反压 |
| 流量管理器 | 入队、调度、整形 | 队列深度、丢弃计数 | 出端口过载、调度不均 |