4. 交换流水线基础

在 Broadcom 高速以太网交换芯片(如 Trident、Tomahawk 系列)中,一个报文从端口进入芯片到从另一端口发出,并不是“一步到位”的转发,而是被拆解成若干条流水线阶段(pipeline stage)依次处理。理解这些阶段以及报文在各阶段之间的“生命周期”,是理解交换芯片行为、定位转发异常、评估时延与吞吐的基础。本节以典型的单播二层/三层转发为主线,梳理入向解析、查表、编辑与出向队列四个核心阶段,并说明报文在每个阶段被读取、修改和排队的过程。

一、流水线的整体视角

交换芯片内部通常采用多级流水线结构,每一级只做一件事,级与级之间用寄存器或片上缓存衔接。这样做的目的是让不同报文在同一时刻处于不同阶段,从而在时钟频率受限的情况下实现线速转发。一个报文进入芯片后,会依次经过:入向解析(Ingress Parsing)、入向查表与决策(Ingress Lookup / Decision)、编辑(Editing / Rewrite)、出向队列与调度(Egress Queuing & Scheduling),最后从出端口发出。整个过程在芯片内部以流水线方式并行推进,单个报文的处理时延(latency)由各级延迟累加决定,而吞吐则由流水线深度和时钟频率决定。

入向解析 Ingress Parsing 提取 L2/L3/L4 头 识别 EtherType / IP Proto 生成解析结果向量 查表与决策 Lookup / Decision MAC / IP / ACL 查表 确定出端口与优先级 生成转发决策 编辑 Editing / Rewrite 改写 MAC / TTL / DSCP 插入 / 剥离 VLAN Tag 更新校验和 出向队列 Egress Queuing 入队 / 缓存管理 调度与整形 出端口发送 报文生命周期: 进入端口 → 解析 → 查表 → 编辑 → 入队 → 调度 → 出端口 关键观察点: • 每级流水线延迟固定,总时延 = 各级延迟之和(典型 200ns~500ns,视芯片型号与配置而定) • 吞吐由流水线深度与时钟频率决定,与单报文时延无关;多报文可同时处于不同阶段 入端口 出端口

二、入向解析:把比特流变成结构化字段

报文从 SerDes 恢复出比特流后,首先进入入向解析阶段。解析器按协议层次逐层剥离头部:先看以太网头,读取目的 MAC、源 MAC 和 EtherType;若 EtherType 为 0x0800,则继续解析 IPv4 头,读取协议号、源/目的 IP、TTL、DSCP;若协议号为 TCP/UDP,再解析端口号。解析结果被组织成一个“解析结果向量”(parse result vector),供后续查表阶段使用。

解析阶段的关键在于“识别能力”。现代交换芯片支持可编程解析器,可以识别 VXLAN、Geneve、MPLS、RoCE 等封装格式,并提取内层字段。例如,对于 VXLAN 报文,解析器需要识别 UDP 目的端口 4789,然后跳过外层 IP/UDP 头,继续解析内层以太网帧。解析深度和可识别的协议类型由芯片的解析器配置决定,配置不当会导致内层字段无法被正确提取,进而影响查表结果。

三、查表与决策:从字段到转发行为

查表阶段是交换芯片的“大脑”。它根据解析阶段提取的字段,在多个表中并行或串行查找,最终确定报文的出端口、优先级、是否需要丢弃、是否需要镜像等。典型的查表包括:

  • MAC 表(L2 FDB):根据目的 MAC + VLAN 查找出端口,用于二层转发。
  • 路由表(L3 Host / LPM):根据目的 IP 查找下一跳和出接口,用于三层转发。
  • ACL 表:根据五元组匹配,决定 permit/deny、重定向、计数等。
  • ECMP / LAG 表:在多条等价路径或多条成员链路之间做哈希选路。

查表结果通常以“决策向量”的形式传递给后续阶段,包含出端口号、队列号、优先级、编辑指令索引等。以三层转发为例,假设目的 IP 为 10.1.1.1,查 L3 Host 表命中,得到下一跳 MAC 为 00:11:22:33:44:55,出端口为 Te0/1,TTL 需要减 1,DSCP 保持不变。这些信息会被编码成决策向量,送入编辑阶段。

四、编辑:改写报文头部

编辑阶段根据决策向量中的编辑指令,对报文头部进行修改。常见的编辑操作包括:

  • 替换目的 MAC 和源 MAC(三层转发时替换为下一跳 MAC 和出接口 MAC)。
  • TTL 减 1,并重新计算 IP 头校验和。
  • 插入或剥离 VLAN Tag(根据出端口是否属于同一 VLAN)。
  • 修改 DSCP 或 PCP,用于 QoS 标记。
  • 对于 VXLAN 封装,插入外层 UDP/IP/Ethernet 头。

编辑操作通常由芯片内的编辑引擎(rewrite engine)执行,编辑指令以微码或表项形式存储。编辑完成后,报文被重新组装成完整的帧,送入出向队列。需要注意的是,编辑阶段只修改头部,不改变净荷;校验和更新通常由硬件自动完成,但某些芯片要求软件预先计算伪头校验和。

五、出向队列与调度:缓存、排队与发送

编辑后的报文进入出向队列阶段。每个出端口通常有多个队列(如 8 个或更多),每个队列对应一个优先级。报文根据决策向量中的队列号入队,队列管理器负责缓存分配、丢弃决策(如 WRED)和调度。调度器按照配置的算法(如 SP、WRR、DWRR)从各队列中取出报文,发送到出端口。

出向队列阶段的关键参数包括:队列深度、缓存阈值、调度权重、整形速率。例如,若队列 0 配置为 SP,队列 1-7 配置为 WRR,权重分别为 1:2:4:8,则高优先级队列 0 会优先发送,其余队列按权重比例分享剩余带宽。当队列缓存超过阈值时,新到的报文可能被丢弃,丢弃策略可以是尾丢弃(Tail Drop)或 WRED。

六、报文生命周期的完整示例

假设一个报文从端口 Te0/1 进入,目的 MAC 为 00:AA:BB:CC:DD:EE,VLAN 10,目的 IP 为 192.168.1.100。芯片处理过程如下:

  1. 入向解析:识别 EtherType 0x0800,解析 IPv4 头,提取目的 IP 192.168.1.100,协议号 TCP,目的端口 80。
  2. 查表:L2 FDB 未命中(目的 MAC 是网关 MAC),转 L3 路由表,命中 192.168.1.0/24,下一跳 MAC 为 00:11:22:33:44:55,出端口 Te0/2,TTL 减 1,DSCP 保持。
  3. 编辑:目的 MAC 替换为 00:11:22:33:44:55,源 MAC 替换为出接口 MAC,TTL 减 1,重新计算 IP 校验和。
  4. 出向队列:根据决策向量中的队列号(假设为队列 3)入队,调度器按 WRR 权重发送到 Te0/2。

整个过程中,报文在芯片内部经历了解析、查表、编辑、排队四个阶段,每个阶段都有明确的输入和输出。理解这些阶段,有助于在出现转发异常时快速定位问题:例如,若报文被错误丢弃,可能是 ACL 表命中 deny;若 TTL 未减 1,可能是编辑指令未正确配置;若出端口错误,可能是 FDB 或路由表项错误。

提示:不同 Broadcom 芯片型号的流水线级数和命名可能略有差异,但核心阶段(解析、查表、编辑、队列)是一致的。实际调试时,应结合芯片的编程指南和寄存器手册,确认各级的配置和状态。
注意:解析深度和查表键值必须匹配。若解析器未提取某字段,查表阶段就无法使用该字段作为键值,可能导致查表失败或误命中。配置解析器时,应确保其覆盖所有需要的协议字段。