2. Catalyst QoS架构总览

在 Catalyst 交换机上谈 QoS,最容易犯的错误是把“配置命令所在的位置”当成“报文实际被处理的位置”。一台 Catalyst 交换机的 QoS 能力分布在多个层次:ASIC 硬件转发路径、端口缓冲与队列、以及控制平面的软件策略。理解这三者的分工,才能判断一条策略到底在入口生效、在出口生效,还是在硬件队列调度时才真正决定报文的命运。

一、Ingress 与 Egress:两个方向、两套职责

从报文进入交换机端口的那一刻起,QoS 处理就开始了。Ingress(入方向)的核心任务是分类、标记与信任:识别报文属于哪个业务流,决定是否信任终端或上游设备已经打好的 DSCP/CoS,必要时重新标记,并把它映射到内部优先级。Egress(出方向)的核心任务是排队、调度与丢弃:根据内部优先级把报文放入对应硬件队列,在多个队列之间按权重或优先级取包发送,当队列拥塞时按策略丢弃。

需要特别强调的是:Catalyst 的 QoS 决策大多在 ASIC 中完成,配置只是把策略“编程”进硬件表项。因此 Ingress 的分类结果会通过内部优先级(如内部 DSCP 或 QoS 标签)传递给 Egress,而不是在出口重新做一次完整分类。这个“入口分类、出口调度”的分工,是理解整机 QoS 的主线。

Catalyst QoS 处理路径:Ingress 分类 → 内部优先级 → Egress 排队调度 Ingress 入方向(ASIC 硬件) 报文进入端口 CoS / DSCP / ACL 匹配 分类与信任 trust dscp / cos,或重标记 PFC 优先级流控 按 802.1p 逐优先级暂停 Ingress 策略 / 限速 policer 标记或丢弃 输出:内部优先级 内部优先级 Internal DSCP / QoS Label 跨 ASIC 传递 Egress 出方向(ASIC 硬件) 映射到硬件队列 8 个单播队列 + 1 个组播队列 LLQ 低延迟队列 priority 队列优先调度,严格优先 WRED 拥塞避免 按 DSCP 设置丢弃阈值 队列调度与整形 SRR / 优先级 + 带宽权重 输出:端口发送 软件队列(控制平面)仅处理协议报文与 CPU 相关流量;数据面转发全部由硬件队列完成

二、硬件队列与软件队列:谁在真正转发报文

Catalyst 交换机每个端口通常有 8 个单播硬件队列和 1 个组播队列,这些队列位于 ASIC 的端口缓冲中,是数据面转发的唯一通道。所谓“硬件队列”,指的就是这些由 ASIC 直接调度、无需 CPU 介入的队列。它们的特点是:调度速度快、支持严格优先级和加权轮询、支持 WRED 等拥塞避免机制。

“软件队列”则是另一回事。它通常指控制平面用于处理协议报文(如 STP BPDU、路由协议报文、ARP、SNMP)的队列,由 CPU 参与调度。软件队列的带宽有限,且优先级处理逻辑与硬件队列不同。在 QoS 设计中,我们关心的是如何保护控制平面不被数据面流量淹没,例如通过 CoPP(Control Plane Policing)限制上送 CPU 的流量速率。因此,硬件队列决定业务流量的转发质量,软件队列决定控制协议的生存能力,两者不能混为一谈。

三、PFC、LLQ、WRED 在 Catalyst 上的实现位置

PFC(Priority Flow Control,802.1Qbb)工作在 Ingress 方向,但它的作用对象是链路对端。当本端某个优先级的接收缓冲达到阈值时,本端会向对端发送 PFC 暂停帧,要求对端暂停该优先级的发送。在 Catalyst 上,PFC 需要与信任 CoS 配合使用,因为暂停帧是按 802.1p 优先级区分的。典型配置是:在接口上启用 priority-flow-control mode on,并确保该优先级映射到无损队列。

LLQ(Low Latency Queueing)工作在 Egress 方向。它把某个队列配置为严格优先级队列,调度器会优先发送该队列中的报文,直到队列为空才处理其他队列。在 Catalyst 上,LLQ 通常通过 priority level 命令在策略映射中实现,对应硬件队列 1(或指定队列)。LLQ 适合语音、视频等对时延和抖动敏感的业务,但必须配合限速,否则高优先级流量可能饿死其他队列。

WRED(Weighted Random Early Detection)同样工作在 Egress 方向,作用于队列的拥塞避免阶段。当队列长度超过最小阈值时,WRED 开始按概率随机丢弃报文;超过最大阈值时全部丢弃。Catalyst 支持基于 DSCP 的 WRED,可以为不同优先级设置不同的阈值。例如,语音流量可以设置较高的最小阈值,而尽力而为流量设置较低阈值,从而在拥塞初期就丢弃低优先级报文,保护高优先级业务。

四、一个可参考的配置示例

下面给出一个 Catalyst 交换机上常见的 QoS 配置片段,用于说明上述机制如何落地。示例假设:语音流量标记为 DSCP EF,视频流量标记为 AF41,其余为默认流量。

! 1. 定义分类策略
class-map match-any VOICE
 match dscp ef
class-map match-any VIDEO
 match dscp af41

! 2. 定义入方向信任与标记
policy-map INGRESS-TRUST
 class VOICE
  set dscp ef
 class VIDEO
  set dscp af41
 class class-default
  set dscp default

! 3. 定义出方向队列与调度
policy-map EGRESS-QOS
 class VOICE
  priority level 1
  police 1000000
 class VIDEO
  bandwidth remaining percent 30
  random-detect dscp-based
 class class-default
  bandwidth remaining percent 70
  random-detect

! 4. 应用到接口
interface GigabitEthernet1/0/1
 service-policy input INGRESS-TRUST
 service-policy output EGRESS-QOS
 priority-flow-control mode on

在这个示例中,Ingress 策略负责信任和重标记,Egress 策略负责队列调度和 WRED。语音队列被配置为严格优先级并限速 1 Mbps,视频队列获得剩余带宽的 30%,默认流量获得 70%。WRED 在视频和默认队列上启用,语音队列由于是严格优先级且已限速,通常不启用 WRED。

判断一条 QoS 策略是否生效,可以观察接口的 show policy-map interface 输出,重点看每个 class 的匹配报文数、丢弃数和队列深度。如果匹配数为 0,说明分类没有命中;如果丢弃数持续增长,说明队列拥塞或限速过紧。

五、关键判断:策略到底在哪一层生效

在实际排障中,经常遇到“配置了 QoS 但效果不明显”的情况。此时需要按以下顺序判断:第一,确认报文是否在 Ingress 被正确分类和标记,可以通过 show policy-map interface input 查看匹配计数;第二,确认内部优先级是否正确传递到 Egress,如果中间经过堆叠或跨 ASIC 转发,需要检查内部 DSCP 映射;第三,确认 Egress 队列是否按预期调度,观察各队列的发送速率和丢弃计数;第四,确认 WRED 阈值是否合理,阈值过高会导致拥塞加剧,阈值过低会导致过早丢弃。

理解 Ingress 与 Egress 的分工、硬件队列与软件队列的边界、以及 PFC/LLQ/WRED 各自的作用位置,是设计任何 Catalyst QoS 方案的基础。只有把策略配置到正确的处理阶段,才能让业务流量获得预期的转发质量。