learn
GCL、cycle 与窗口:Qbv 的最小心智模型
从 Gate Control List 的周期、base time、窗口和队列状态理解 Time-Aware Shaper。
本节学习目标
- 理解 GCL 如何按周期控制每个队列 gate 的开关状态。
- 掌握 cycle、base time、window、gate state 的基本关系。
- 知道单设备窗口只是端到端调度的起点。
本章目录
解决什么问题
优先级只能决定谁更应该先发,却不能指定“什么时候发”。Qbv 解决的是把关键队列的发送机会绑定到共同时间上,让关键流量在预先安排的窗口内通过,而不是在运行时和普通流量抢机会。
GCL 是这个机制的核心。它列出一组按时间执行的 gate 状态:在某个时间片里,哪些队列打开,哪些队列关闭。周期结束后,这组状态重复执行。
背景与直觉
你可以把每个队列看成一道门。门开时,队列里的帧可以竞争发送;门关时,即使队列里有帧,也不能从这个端口发出去。Qbv 的特别之处是这些门不是临时决定,而是按共同时间表周期性开关。
cycle 是时间表的重复周期,base time 是时间表从哪个共同时间开始生效,window 是某个 gate 状态持续的时间片,gate state 表示每个队列在这个时间片里开还是关。掌握这几个词,就能读懂大多数 Qbv 入门图。
怎么解决
设计一个简单 GCL 时,通常先知道关键流的周期和截止时间,再为关键队列安排窗口。窗口要足够容纳报文发送时间、同步误差、设备执行误差和 guard band。普通流量则被安排到其他时间片,避免在关键窗口内竞争。
本节的 GCL 编辑器允许你调节周期、关键窗口和误差。它不是完整调度器,但能直观看到窗口余量如何变化:周期越长,窗口位置和等待可能变化;窗口越窄,误差越危险;误差越大,命中判断越脆弱。
带来了什么新问题
Qbv 把运行时竞争减少了,却把复杂度前移到设计时。你必须知道流量周期、帧长、路径、设备能力和时间同步质量。流量一旦变化,原来的 GCL 可能不再可行。多个关键流共享路径时,窗口之间还会互相挤压。
另一个问题是普通流量体验。关键窗口越多,普通流量可用时间越少。如果配置过度保守,链路利用率会下降,非关键业务可能出现明显延迟。
本节掌握标准
学完后,你应该能看懂一张最小 GCL:周期从哪里开始,每个窗口持续多久,哪些队列打开,关键帧为什么能在窗口内通过。你还应该能解释为什么单台设备窗口正确,只是端到端调度的第一步。
gate control
Qbv 用周期性 gate 给关键队列留出时间片。
报文不是抢到就发,而是在被安排好的窗口里通过。
gcl editor
把关键队列安排到明确的时间窗口里。
像编辑 GCL 一样调整周期、关键窗口和时钟误差,观察关键帧是否命中窗口。
Qbv / TAS GCL 编辑器
教学估算窗口余量
65us
命中判断
命中
关键帧有较清晰的窗口余量
关键窗口要扣掉执行误差、guard band 和路径接力成本。
try it
动手调参数
机制拆解
- 1Gate Control List 定义周期和窗口。
- 2关键队列只在打开窗口内发送。
- 3guard band 和时钟误差会吞掉窗口余量。
engineering check