3. 流量工程基础与Broadcom实现映射

流量工程的核心目标可以归纳为三件事:让流量尽量均匀地落在可用链路上、在拥塞发生前后及时把流量挪走、对时延敏感的业务给出可预期的转发路径。Broadcom 交换芯片并不直接提供“流量工程”这个功能名,而是通过 ECMP、WCMP、动态负载均衡(DLB)、哈希选择、链路状态感知等机制,把上述目标落到硬件转发路径上。理解这些机制与目标之间的映射关系,是后续做参数调优和排障的基础。

三个目标与芯片机制的对应关系

负载均衡对应的是等价多路径转发。当路由表或叠加网络中存在多条到达同一目的地的等价下一跳时,芯片按哈希把流分配到不同成员链路上。ECMP 是等权版本,WCMP 是加权版本,权重通过下一跳组的成员权重字段表达。拥塞避免对应的是动态负载均衡与链路利用率反馈:当某条成员链路出现拥塞或利用率升高时,芯片可以把新流或可迁移流重新分配到较空闲的成员上。时延保障则更多依赖路径选择与队列调度:通过为特定业务指定下一跳组、结合优先级队列和整形,使关键流量走时延更可控的路径。

流量工程目标 → Broadcom 芯片机制映射 负载均衡 流量均匀分布到多链路 拥塞避免 拥塞前/后迁移流量 时延保障 关键业务走可控路径 ECMP 等价多路径 等权哈希分流 WCMP 加权多路径 按权重分配流量 动态负载均衡 DLB 按链路利用率迁移流 哈希选择与队列调度 流分类 + 优先级队列 下一跳组成员表 成员端口、权重、状态位 哈希引擎 五元组/流标签 → 成员索引 链路利用率监测 端口计数器 / 拥塞信号 调度与整形 优先级队列、令牌桶 映射要点:ECMP/WCMP 决定“怎么分”,DLB 决定“何时重新分”,哈希与队列调度决定“分得准不准、时延稳不稳”。 权重、哈希种子、DLB 触发阈值、队列调度参数是调优时最常改动的四类输入。

ECMP 与 WCMP:从等权到加权

ECMP 的前提是“等价”。在路由层面,到达同一前缀的多条路径若度量值相同,就会被安装为等价下一跳。芯片侧把它们组织成一个下一跳组,组内每个成员对应一个出端口或下一跳地址。转发时,芯片对报文头做哈希,得到一个索引,再按索引用模运算或查表方式选中成员。ECMP 的隐含假设是各成员链路容量相同、负载相近,一旦某条链路容量更小或已被其他流量占用,等权分配就会造成局部拥塞。

WCMP 解决的就是这个问题。它给每个成员分配一个权重,权重可以按链路带宽比例设置,也可以按运维策略手工指定。例如三条上行链路带宽分别为 100G、100G、50G,若按带宽比例分配,权重可设为 2:2:1。芯片在哈希后按权重区间选择成员,使流量大致按权重比例分布。需要注意,WCMP 只改变“分配比例”,不改变“单条流走哪条链路”的哈希结果,因此它改善的是统计意义上的均衡,而不是逐流均衡。

动态负载均衡:让流量跟着拥塞走

ECMP 和 WCMP 都是静态分配:哈希一旦确定,同一条流通常固定走同一成员,除非成员状态变化。这种稳定性对保序有好处,但遇到大象流或链路突发拥塞时,静态分配无法及时把流量挪走。动态负载均衡(DLB)在芯片中引入链路利用率或拥塞反馈,当某成员链路利用率超过阈值或出现拥塞信号时,允许把部分流重新哈希到较空闲的成员上。

DLB 的关键参数包括触发阈值、重新哈希的流选择策略、以及是否允许同一流在短时间内多次迁移。阈值设得太低会导致流频繁迁移,可能引起乱序;设得太高则起不到缓解拥塞的作用。实际调优时,通常先观察各成员链路的利用率分布,再决定阈值和迁移粒度。Broadcom 芯片中,DLB 往往与下一跳组的成员状态位配合:成员被标记为拥塞或不可用时,新流不再选它,已有流按策略迁移。

时延保障:路径选择与队列调度

时延保障不是单一机制能完成的。它需要两件事配合:一是让关键流量走时延更可控的路径,二是让关键流量在出端口获得更优先的调度。路径选择上,可以为时延敏感业务单独指定下一跳组,避免与普通流量混用同一条拥塞链路。队列调度上,通过优先级队列和整形,保证关键流量在拥塞时仍能获得服务。Broadcom 芯片支持多级队列和调度算法,配合流分类把不同业务映射到不同队列。

一个可参考的映射检查表

下面这张表把目标、机制、关键参数和观察点对应起来,便于在实际调优时逐项核对。表中参数为示例值,实际取值需结合芯片型号、端口速率和业务流量特征确定。

流量工程目标 Broadcom 机制 关键参数(示例) 观察点
负载均衡 ECMP 哈希种子、成员数 各成员端口出向速率是否接近
负载均衡 WCMP 成员权重 2:2:1 按权重比例核对流量分布
拥塞避免 DLB 利用率阈值 70%、迁移粒度 拥塞链路利用率是否回落
时延保障 下一跳组 + 优先级队列 队列优先级、整形速率 关键业务时延与丢包率
调优顺序建议:先确认 ECMP/WCMP 的权重和成员状态是否正确,再观察是否存在持续拥塞,最后才考虑开启或调整 DLB。跳过前两步直接调 DLB,容易把静态分配问题误判为动态迁移问题。