3. QoS资源模型与关键限制

在Broadcom交换芯片(如Trident、Tomahawk系列)上做QoS规划,第一步不是写配置,而是把芯片内部的QoS资源账本算清楚。QoS不是“打开一个开关”就能生效的功能,它由一组彼此耦合的硬件资源共同支撑:每端口队列、调度层级、共享缓冲池、WRED阈值、策略器与计数器。这些资源的数量、粒度和分配方式,直接决定了你能承诺什么样的SLA,以及哪些策略在硬件上根本无法落地。

一、每端口队列数与调度层级

Broadcom芯片通常为每个端口提供8个单播队列(UC0–UC7),部分型号支持更多,并额外提供组播队列(MC)。队列号本身不代表优先级,真正决定调度顺序的是队列到调度组的映射关系。典型结构是:8个队列先按端口分组,再映射到4个或8个调度组(Scheduler Group),每个调度组内部做SP(严格优先级)或DWRR(差额加权轮询),调度组之间再做一次SP或WFQ。这就是“两级调度”模型。

理解层级的关键在于:队列是缓冲和WRED的挂载点,调度组是带宽分配的挂载点。如果你把队列0–3映射到调度组0,队列4–7映射到调度组1,那么WRED阈值按队列独立配置,而带宽保证和整形则按调度组生效。规划时必须先确定“哪些业务共享一个调度组”,再决定组内权重。

Broadcom端口QoS资源模型(两级调度 + 共享缓冲) 端口 Port 1 Ingress UC7 语音 UC6 视频 UC5 信令 UC4 关键数据 UC3 普通数据 UC2 普通数据 UC1 尽力而为 UC0 尽力而为 调度组 SG0 SP / DWRR 权重 60% UC7,UC6,UC5,UC4 调度组 SG1 SP / DWRR 权重 40% UC3,UC2,UC1,UC0 共享缓冲池 Shared Buffer 总容量示例:16 MB 服务池 Service Pool 保证带宽业务专用 共享池 Shared Pool 动态借用,按需分配 WRED阈值区 min/max/概率 策略器 Policer CIR/CBS/PIR/PBS 出端口调度 → 线速发送

二、共享缓冲池与WRED阈值

共享缓冲池是QoS中最容易被低估的资源。以16 MB总缓冲为例,它通常被划分为服务池(Service Pool)和共享池(Shared Pool)。服务池按端口或队列预留,保证关键业务在拥塞时仍有缓冲可用;共享池则动态借用,谁先占谁先用。如果规划不当,低优先级业务可能把共享池吃满,导致高优先级业务丢包。

WRED(加权随机早期检测)阈值挂在队列上,每个队列可独立配置min阈值、max阈值和最大丢弃概率。当队列占用超过min时开始按概率丢包,超过max时全丢。这里有一个关键限制:WRED阈值是队列级资源,不是端口级。8个队列意味着最多8组阈值,但共享池的占用是全局的。因此,规划时要同时看“队列本地阈值”和“共享池全局水位”,两者共同决定实际丢包行为。

三、策略器与计数器资源

策略器(Policer)通常以“计量+标记/丢弃”的方式工作,关键参数包括CIR(承诺信息速率)、CBS(承诺突发尺寸)、PIR(峰值信息速率)、PBS(峰值突发尺寸)。Broadcom芯片的策略器资源是有限的,例如某型号支持每端口8个策略器、全局256个。这意味着你不能给每个流都配一个独立策略器,必须做聚合规划。

计数器同样有限。每个队列、每个策略器、每个ACL条目都可能消耗计数器资源。规划时要区分“必须精确计数的业务”和“只需抽样统计的业务”,避免计数器耗尽导致策略无法下发。

四、资源预算表的基本方法

资源预算表的核心是“先算总量,再算分配,最后留余量”。以下是一个可参考的示例结构(参数为教学示例,非实测值):

资源项芯片总量(示例)已分配剩余规划用途
单播队列8/端口 × 48端口 = 3843840全部启用,按业务映射
调度组8/端口 × 48端口 = 38496288每端口2组,预留扩展
共享缓冲16 MB12 MB4 MB服务池8MB,共享池4MB
WRED阈值组8/端口 × 48端口 = 384192192高优先级队列启用
策略器256128128每端口2个,聚合限速
计数器409620482048关键队列+策略器

填表时注意三点:第一,队列和调度组是“每端口”资源,总量要乘以端口数;第二,共享缓冲是“全局”资源,不能按端口简单相加;第三,策略器和计数器是“全局”资源,必须做聚合规划。余量建议保留20%–30%,用于应对突发业务和后续策略调整。

规划提示:先确定业务分级(语音、视频、信令、关键数据、普通数据、尽力而为),再映射到队列和调度组,最后反推缓冲和策略器需求。不要先配策略器再想队列,顺序反了会导致资源碎片化。

掌握这些资源规格后,你就能在配置前回答一个关键问题:“我的QoS策略在硬件上是否可行?”如果队列数不够、调度组映射冲突、缓冲池超配或策略器耗尽,再完美的策略也无法生效。资源预算表就是把这个判断提前到规划阶段,而不是等到上线后才发现丢包或限速失效。