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阈值按队列独立配置,而带宽保证和整形则按调度组生效。规划时必须先确定“哪些业务共享一个调度组”,再决定组内权重。
二、共享缓冲池与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端口 = 384 | 384 | 0 | 全部启用,按业务映射 |
| 调度组 | 8/端口 × 48端口 = 384 | 96 | 288 | 每端口2组,预留扩展 |
| 共享缓冲 | 16 MB | 12 MB | 4 MB | 服务池8MB,共享池4MB |
| WRED阈值组 | 8/端口 × 48端口 = 384 | 192 | 192 | 高优先级队列启用 |
| 策略器 | 256 | 128 | 128 | 每端口2个,聚合限速 |
| 计数器 | 4096 | 2048 | 2048 | 关键队列+策略器 |
填表时注意三点:第一,队列和调度组是“每端口”资源,总量要乘以端口数;第二,共享缓冲是“全局”资源,不能按端口简单相加;第三,策略器和计数器是“全局”资源,必须做聚合规划。余量建议保留20%–30%,用于应对突发业务和后续策略调整。
掌握这些资源规格后,你就能在配置前回答一个关键问题:“我的QoS策略在硬件上是否可行?”如果队列数不够、调度组映射冲突、缓冲池超配或策略器耗尽,再完美的策略也无法生效。资源预算表就是把这个判断提前到规划阶段,而不是等到上线后才发现丢包或限速失效。