2. Catalyst QoS架构总览
在 Catalyst 交换机上谈 QoS,最容易犯的错误是把“配置命令所在的位置”当成“报文实际被处理的位置”。一台 Catalyst 交换机的 QoS 能力分布在多个层次:ASIC 硬件转发路径、端口缓冲与队列、以及控制平面的软件策略。理解这三者的分工,才能判断一条策略到底在入口生效、在出口生效,还是在硬件队列调度时才真正决定报文的命运。
一、Ingress 与 Egress:两个方向、两套职责
从报文进入交换机端口的那一刻起,QoS 处理就开始了。Ingress(入方向)的核心任务是分类、标记与信任:识别报文属于哪个业务流,决定是否信任终端或上游设备已经打好的 DSCP/CoS,必要时重新标记,并把它映射到内部优先级。Egress(出方向)的核心任务是排队、调度与丢弃:根据内部优先级把报文放入对应硬件队列,在多个队列之间按权重或优先级取包发送,当队列拥塞时按策略丢弃。
需要特别强调的是:Catalyst 的 QoS 决策大多在 ASIC 中完成,配置只是把策略“编程”进硬件表项。因此 Ingress 的分类结果会通过内部优先级(如内部 DSCP 或 QoS 标签)传递给 Egress,而不是在出口重新做一次完整分类。这个“入口分类、出口调度”的分工,是理解整机 QoS 的主线。
二、硬件队列与软件队列:谁在真正转发报文
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。
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 方案的基础。只有把策略配置到正确的处理阶段,才能让业务流量获得预期的转发质量。