2. Arista EOS QoS核心组件
在 Arista EOS 中,QoS 并不是一个单一开关,而是由一组彼此协作的对象共同构成的策略链。理解这条链上每个对象的职责、配置入口以及它们之间的先后关系,是后续做拥塞治理和队列调优的基础。本节围绕六个核心对象展开:队列(Queue)、调度器(Scheduler)、缓存管理(Buffer / WRED)、流分类(Class Map)、标记与重标记(Mark / Remark),以及把它们串起来的 Policy Map。
一、EOS QoS 的处理链与对象关系
数据包进入 EOS 交换芯片后,QoS 处理遵循一条固定的方向链:先分类,再标记或重标记,然后按映射关系进入某个出口队列,最后由调度器和缓存管理决定“谁先发、发多少、满了怎么办”。这条链的方向性非常重要——分类和标记发生在入向或策略入口,队列和调度发生在出向,缓存管理则作用于队列的排队过程。
图中虚线表示“策略对象定义”与“出向执行对象”之间的关联:Class Map 和 Policy Map 负责定义规则,Scheduler、Buffer、Queue 负责在出向真正执行。理解这一点,就能明白为什么只配了 class-map 却没有效果——策略没有被 service-policy 挂载到接口上。
二、队列与调度器:决定“谁先发”
EOS 每个物理端口通常提供 8 个单播出口队列(Queue 0~7),队列号越大优先级越高。队列本身只是缓冲区,真正决定发送顺序的是调度器。EOS 支持两类主要调度方式:严格优先级(Strict Priority)和加权轮询(WRR / DWRR)。严格优先级保证高优先级队列只要非空就优先发送,适合承载控制平面和低时延业务;WRR 按权重比例分配带宽,避免低优先级队列被饿死。
调度器的配置入口是 policy-map type queuing,在 class 内使用 priority 或 bandwidth 声明。例如把 Queue 7 设为严格优先级并限速,把 Queue 0~3 设为 WRR 权重 10:20:30:40:
policy-map type queuing QOS-OUT
class class-default
bandwidth percent 40
class Q7-PRIORITY
priority level 1
shape rate 2 gbps
class Q0-Q3-WRR
bandwidth remaining percent 10
这里 priority level 1 表示第一级严格优先级,shape rate 对高优先级队列做速率整形,防止它无限制抢占。WRR 权重之和不必等于 100,EOS 会按相对比例换算。
三、缓存管理与 WRED:决定“满了怎么办”
队列缓存是共享资源。如果某个队列无限占用缓存,其他队列就会丢包。EOS 通过 queue-limit 限制单队列缓存上限,通过 WRED(加权随机早期检测)在队列尚未完全满时按概率提前丢弃低优先级流量,从而让 TCP 有机会降速,避免全局同步。
WRED 的关键参数是最小阈值、最大阈值和最大丢弃概率。当队列深度低于最小阈值时不丢包;介于两阈值之间时按线性递增概率丢弃;超过最大阈值时全部丢弃。示例配置:
policy-map type queuing QOS-OUT
class Q0-Q3-WRR
bandwidth remaining percent 10
random-detect
random-detect ecn
queue-limit 2048 packets
其中 random-detect ecn 表示对支持 ECN 的流量做标记而非直接丢弃,这对 RoCE 等无损网络尤为关键。
四、流分类与标记/重标记:决定“谁进哪个队列”
流分类使用 class-map type qos 定义匹配条件,常见匹配字段包括 DSCP、CoS、ACL、VLAN、协议端口等。标记与重标记在 policy-map type qos 中通过 set dscp、set cos 完成。典型场景是:信任边缘设备已标记的 DSCP,对不可信流量重新标记,再映射到出口队列。
class-map type qos match-any VOICE
match dscp ef
class-map type qos match-any BULK
match dscp af11
policy-map type qos QOS-IN
class VOICE
set dscp ef
set cos 5
class BULK
set dscp af11
set cos 1
配置完成后,用 show qos maps 查看 DSCP 到队列的映射关系,用 show policy-map interface 查看各 class 的匹配计数和丢弃统计。如果匹配计数为 0,说明分类条件没有命中,需要检查 ACL 或 DSCP 值是否与实际上送报文一致。
五、六个对象的配置入口速查
| 对象 | 配置入口 | 关键命令 |
|---|---|---|
| 流分类 | class-map type qos | match dscp / cos / acl |
| 标记/重标记 | policy-map type qos | set dscp / set cos |
| 队列映射 | qos map cos-dscp / dscp-cos | show qos maps |
| 调度器 | policy-map type queuing | priority / bandwidth / shape |
| 缓存管理 | policy-map type queuing | queue-limit / random-detect |
| 策略挂载 | interface / system qos | service-policy type qos input/output |
掌握这六个对象及其入口后,后续做具体队列调优时就能快速定位:是分类没命中、标记被覆盖、队列映射错位,还是调度权重和缓存阈值设置不合理。建议在实验环境中先用 show policy-map interface 和 show queue 观察基线,再逐步调整参数并对比丢弃计数变化。