2. 交换芯片核心架构总览
要理解一颗 Broadcom 高速以太网交换芯片(如 Trident、Tomahawk 系列)的行为,不能只盯着某个寄存器或某条命令,而要先建立一张“数据通路地图”:一个报文从进入芯片到离开芯片,究竟经过了哪些模块,每个模块负责什么,模块之间靠什么连接。本节把芯片内部拆成五个关键部分——端口与 MAC/PCS 层、入向处理流水线(Ingress Pipeline)、缓存与队列管理(MMU/Buffer)、交换矩阵(Fabric/Switching Core)、出向处理流水线(Egress Pipeline)与 CPU 接口,并说明它们如何串成一条完整通路。
一、从物理端口到报文:入口侧的分层结构
芯片最外侧是物理端口。以 100G 端口为例,物理侧通常是 4×25G 的 SerDes 通道(或 1×100G),经 PCS 完成 64b/66b 编解码与通道对齐,再由 MAC 层完成帧定界、CRC 校验、前导码处理。MAC 之后,报文被切分为固定长度的内部信元(Cell),典型为 256 字节或更小粒度,这一步是后续缓存与交换矩阵能够高效调度的前提。信元化之后,报文进入入向流水线。
入向流水线承担的是“判断这个报文该怎么走”的职责,典型子模块包括:解析器(Parser)逐层剥离并识别 L2/L3/L4 字段;VLAN 与隧道处理模块完成 VLAN 成员判定、VXLAN/Geneve 等隧道解封装;ACL/TCAM 完成基于五元组或自定义字段的匹配与动作;L3 路由查表完成最长前缀匹配(LPM);最后是入向转发决策,确定目的端口或目的端口组(如 ECMP 组、LAG 组)。这些模块大多以流水线方式并行工作,单端口线速下每个信元都要在固定周期内完成处理。
二、缓存与队列:芯片的“内存子系统”
交换芯片内部有一块共享缓存(Shared Buffer),通常由片上 SRAM 构成,容量从几 MB 到几十 MB 不等。缓存被划分为多个缓冲池(Pool),并按端口、队列、优先级进行配额管理。报文信元进入缓存后,会被挂入对应的入向队列(Ingress Queue)或直接映射到出向队列(Egress Queue)。MMU(Memory Management Unit)负责信元的分配、回收、丢弃决策(如 WRED、尾丢弃)以及队列调度(SP、WRR、DWRR 等)。
这里有一个关键概念:缓存不是“先到先得”的简单 FIFO。同一出端口下可能挂多个优先级队列,MMU 需要根据队列的阈值、动态共享策略决定是否接收新信元。当某个队列超过阈值时,可能触发丢弃或标记 ECN,这正是拥塞管理的基础。
三、交换矩阵:把信元送到正确的出端口
交换矩阵(Switching Fabric)是芯片内部的“高速公路”。它接收来自入向流水线的信元,根据目的端口信息把信元转发到对应的出向端口。Broadcom 芯片常见的实现是 Crossbar 或基于信元的共享总线结构。矩阵的容量决定了芯片的交换带宽,例如 3.2Tbps 的芯片意味着矩阵每秒可搬运 3.2Tb 的信元。
矩阵调度需要解决两个问题:一是无阻塞,即任意入端口到任意出端口都能同时通信;二是公平性,避免某个出端口被多个入端口同时争抢导致饥饿。实际芯片中通常采用虚拟输出队列(VOQ)或类似机制,在入端口侧按目的端口排队,再由矩阵调度器统一仲裁。
四、出向流水线与 CPU 接口
信元到达出端口后,先进入出向流水线,完成出向 ACL、VLAN 编辑、隧道封装、L3 重写(TTL 递减、MAC 重写)等操作,然后重新组装成完整报文,经 MAC/PCS 发送出去。出向流水线同样需要线速处理,因此与入向一样采用多级流水结构。
CPU 接口是芯片的“控制面入口”。它通常是一条独立的 PCIe 或以太网通道,连接芯片内部 CPU 端口与外部主机 CPU。CPU 接口负责:接收上送 CPU 的协议报文(如 BGP、ARP、LLDP)、下发转发表项、读写寄存器、采集统计信息。在数据通路上,CPU 端口本身也是一个逻辑端口,可以参与转发,但通常被配置为“控制面专用”,避免与业务流量争抢带宽。
五、整体数据通路与关键模块划分
把上述模块串起来,就得到一条完整的报文路径:物理端口 → PCS/MAC → 信元化 → 入向流水线(解析/ACL/L3/转发决策)→ MMU 缓存与队列 → 交换矩阵 → 出向流水线(编辑/封装)→ MAC/PCS → 物理端口。CPU 接口则旁挂在入向和出向流水线上,负责控制面交互。
下面这张图用结构关系的方式,把这条通路和关键模块的从属关系画出来,便于对照理解:
理解这张图后,再看具体配置或排障时,就能快速定位问题发生在哪一段:如果报文在入向被丢弃,可能是 ACL 或 VLAN 判定问题;如果出向队列持续增长,可能是 MMU 阈值或调度权重设置不当;如果 CPU 收不到协议报文,则要检查 CPU 接口的 trap 规则和通道状态。把模块划分与数据通路对应起来,是后续学习具体功能配置的基础。