深度来源笔记:IEEE 802.1Qbv 增强调度流量
来源信息
- 标题:IEEE Standard for Local and metropolitan area networks, Bridges and Bridged Networks, Amendment 25: Enhancements for Scheduled Traffic
- 标准号:IEEE Std 802.1Qbv-2015
- 发布时间:2016-03-18
- 原始文件:
raw/802.1Qbv-2016.md - 学习定位:TSN 中的发送侧时间门控、周期调度和确定性发送窗口
- 关联概念:概念_802.1Qbv_scheduled_traffic、概念_802.1Qbv_transmission_gate、概念_802.1Qbv_gate_control_list、概念_802.1Qbv_cycle_timer、概念_802.1Qbv_guard_band
这篇资料解决什么问题
802.1Qbv 解决的是“在共享二层桥接网络中,如何让某些流量在预定时间窗口内发送,并降低因为其它流量抢占链路而造成的时延和抖动”。它不是重新定义桥,也不是重新定义帧格式,而是在 802.1Q 的 egress queue 和 transmission selection 之上增加时间门控。
它的核心思想可以压缩成一句话:每个 traffic class queue 前面放一个 transmission gate,gate 的开关由周期性 gate control list 控制;gate open 时,队列才有资格被 transmission selection 选择;gate closed 时,即使队列里有帧,也不能发送。
阅读前需要知道什么
802.1Q 的排队模型
Qbv 直接依赖 802.1Q 的 priority、traffic class、egress queue 和 forwarding process。Qbv 的时间门控不是独立协议,而是插在队列发送资格判断之前。
802.1AS / PTP 时间基准
Qbv 的 gate operation 需要共同时间视图。标准文本中变量使用 PTP timescale。没有稳定时间同步,多个桥上的 gate control list 很难保持相位一致。
优先级不是调度
strict priority 解决“多个队列同时能发时谁先发”;Qbv 解决“某个队列在某个时间是否允许发”。前者是优先级竞争,后者是时间窗口准入。
原文结构地图
Clause 5: Conformance
Clause 5 规定支持 scheduled traffic 时 bridge、MAC bridge component、EVB station、end station 需要满足的能力要求。这里的重点不是背 PICS,而是知道 Qbv 可以出现在桥和端站发送侧。
Clause 8.6.8: Transmission selection
Qbv 修改 transmission selection 条件:帧是否 available,不再只看队列、传输选择算法和优先级,还要看 gate 是否 open,以及是否有足够时间在下一个 gate-close event 之前完整发送该帧。
Clause 8.6.8.4: Enhancements for scheduled traffic
这是核心条款。它定义 transmission gate、open/closed 两种状态、gate control list、gate operation,以及 queueMaxSDU、TransmissionOverrun 等工程约束。
Clause 8.6.9: Scheduled traffic state machines
这里定义三台状态机:Cycle Timer、List Execute、List Config。它们分别负责周期启动、执行 gate operation、安装新的 schedule 配置。
Clause 12.29: Managed objects for scheduled traffic
这里定义管理面对象,包括 Gate Parameter Table、Admin/Oper control list、Admin/Oper cycle time、base time、config change、tick granularity、overrun counter 等。
Clause 17: MIB
这里把 scheduled traffic 的管理对象映射到 IEEE8021-ST-MIB。学习机制时可以先略读;做设备实现或网管建模时再细读。
Annex Q: 背景和使用方式
Annex Q 是理解 Qbv 最友好的部分。它解释为什么 strict priority 不够、guard band 为什么存在、如何用 gate operation 创建 protected window、PTP 不可用时意味着什么、端站是否必须支持调度发送。
核心概念表
| 概念 | 直观理解 | 在 Qbv 中的作用 |
|---|---|---|
| scheduled traffic | 按时间窗口发送的流量 | Qbv 的目标能力 |
| transmission gate | 每个 queue 前面的开关 | 决定队列是否可被选中发送 |
| gate control list | 周期性门控操作表 | 定义各个 gate 的 open/closed 时间节奏 |
| SetGateStates | 设置多个 gate 状态的操作 | gate control list 的基本 operation |
| TimeInterval | 当前 gate 状态持续时间 | 决定下一条 operation 何时执行 |
| OperControlList | 当前运行中的 gate control list | List Execute 实际执行的列表 |
| AdminControlList | 管理面准备的新列表 | List Config 复制到 OperControlList |
| OperCycleTime | 当前运行周期 | gate control list 重复的周期 |
| AdminBaseTime | 管理面配置的起始时间 | 决定新 schedule 的相位 |
| ConfigChangeTime | 配置生效时刻 | 新旧 schedule 切换边界 |
| queueMaxSDU | 队列允许的最大 SDU | 防止帧过长导致窗口不可行 |
| TransmissionOverrun | 发送越过关门事件的计数 | 观测 schedule 是否被破坏 |
| guard band | protected window 前的停发余量 | 防止非保护帧跨入保护窗口 |
机制拆解
1. 在每个队列前加 transmission gate
802.1Q 原本已经有多个 traffic class queue。Qbv 没有改变这一点,而是给每个 queue 关联一个 gate。gate open 时,队列仍需满足原有 transmission selection algorithm;gate closed 时,该队列直接不可用。
这个设计的好处是复用既有 queueing 模型。Qbv 不需要重写转发流程,只把“是否允许发送”变成一个受时间控制的布尔条件。
2. 用 gate control list 描述时间表
gate control list 是 ordered list。每个 entry 通常包含 gate states 和 time interval。执行到某个 entry 时,系统设置所有相关 queue 的 gate 状态,然后等待 TimeInterval,再执行下一项。
这使得一个 port 可以形成周期性发送模式。例如一个周期里先打开控制流队列,再打开普通流队列,再打开管理流队列。实际 protected window 由这些 gate states 组合出来。
3. 用 guard band 保护时间窗口
如果低优先级帧在 protected window 开始前一瞬间开始发送,它可能跨过窗口边界。Qbv 因此要求在判断帧 available 时考虑“是否有足够时间在下一次 gate close 前发完整帧”。
这等价于把 guard band 融入 gate 行为:不一定显式配置一个 guard band entry,但系统不能启动一个注定跨越 gate-close event 的发送。
4. 用状态机保证周期和配置切换
Cycle Timer state machine 负责周期开始时间;List Execute state machine 负责顺序执行 control list;List Config state machine 负责把 Admin 配置安装为 Oper 配置。
这三者分工很重要。没有 List Config,管理面更新 schedule 时会破坏正在运行的周期;没有 Cycle Timer,多桥之间无法保持可预测相位。
5. 与 credit-based shaper 共存时要重新理解 idleSlope
Qbv 修改了 Qav 中 credit-based shaper 的部分语义:当 scheduled traffic 启用且 gate enabled 时,credit 只在 gate open 期间累积,因此有效 idleSlope 需要考虑 gate open duty cycle。
这说明 Qbv 不是替代 Qav,而是与 Qav 共存时会改变整形器的时间条件。
6. queueMaxSDU 和 overrun 是工程约束
schedule 设计不能只看时间片长度,还要看帧大小。queueMaxSDU 限制某个队列的最大 SDU;TransmissionOverrun 则记录帧仍在 MAC 发送时 gate-close event 已经到来的情况。
如果 overrun 频繁出现,通常说明 schedule、frame size、guard band、preemption 或设备实现假设之间不一致。
关键流程 / 数据路径 / 控制路径
数据路径
flowchart TD A["Frame selected for egress queue"] --> B["Traffic class queue"] B --> C["Transmission gate"] C --> D{"Gate open?"} D -- "no" --> E["Frame not available"] D -- "yes" --> F{"Enough time before close?"} F -- "no" --> E F -- "yes" --> G["Transmission selection algorithm"] G --> H["MAC transmission"]
控制路径
flowchart TD A["AdminControlList / AdminBaseTime / AdminCycleTime"] --> B["List Config state machine"] B --> C["OperControlList / OperBaseTime / OperCycleTime"] C --> D["Cycle Timer state machine"] D --> E["CycleStart"] E --> F["List Execute state machine"] F --> G["SetGateStates"] G --> H["OperGateStates"]
章节级拆解
Clause 5 Conformance
这里说明支持 scheduled traffic 的设备需要实现哪些能力。学习重点是 Qbv 不只面向 bridge,也涉及 end station 的发送行为。接收 scheduled traffic 的端站不一定需要特殊能力,但发送 scheduled traffic 的端站必须与桥的门控模型兼容。
Clause 8.6.8 Transmission selection
原本 transmission selection 判断队列中是否有可发送帧。Qbv 增加了额外条件:gate 状态和剩余时间。这个位置说明 Qbv 嵌入的是“选帧发送”的最后阶段。
Clause 8.6.8.2 Credit-based shaper algorithm
Qbv 对 Qav 的 credit 行为做了补充:如果 gate 启用,credit 的累积与 gate open 时间相关。学习时要注意,Qav 和 Qbv 同时部署时,不能把 credit-based shaper 当成独立于门控的连续系统。
Clause 8.6.8.4 Enhancements for scheduled traffic
这是主入口。每个 queue 有 gate,gate 可以 open 或 closed。gate control list 通过 SetGateStates 操作改变每个 queue 的 gate state。若设备不支持 scheduled traffic,则所有 gate 等价于永久 open。
学习重点:Qbv 是 per-port、per-queue 的发送准入机制。
Clause 8.6.9 Scheduled traffic state machines
三台状态机分别解决三个工程问题:
- Cycle Timer:何时开始下一轮周期。
- List Execute:当前周期内按顺序执行哪些 gate operation。
- List Config:如何在不中断语义的情况下安装新配置。
Clause 8.6.9.1 Cycle Timer
SetCycleStartTime() 根据 CurrentTime、OperBaseTime、OperCycleTime、OperCycleTimeExtension、ConfigChangeTime、ConfigPending 计算下一次 cycle start。这里是时间相位的核心。
Clause 8.6.9.2 List Execute
ExecuteOperation() 取出当前 OperControlList entry,设置 gate states 和 time interval。SetGateStates() 将 OperGateStates 应用到各队列。
Clause 8.6.9.3 List Config
SetConfigChangeTime() 负责决定管理面配置何时切到运行态。如果 AdminBaseTime 在过去且当前 schedule 正在运行,还会涉及 ConfigChangeError。
Clause 8.6.9.4 State machine variables
这部分是实现和调试时最重要的变量清单。学习时重点关注 Admin/Oper 成对变量、time 变量、config pending/change 变量,以及 GateEnabled。
Clause 12.29 Managed objects
管理面可以配置 gate control list、cycle time、base time、gate states、queueMaxSDU 等。它说明 Qbv 的 schedule 不是标准自动算出来的,而是由管理或计算软件下发。
Annex Q
Annex Q 给出 Qbv 的工程动机:strict priority 不能阻止低优先级大帧已经占线的问题;protected window 需要 guard band;gate operation 可以表达保护窗口;PTP 不可用时实现可自选替代机制,但标准机制本身依赖共同时间。
关键定义的定位
transmission gate:Clause 8.6.8.4gate control list:Clause 8.6.8.4、8.6.9SetGateStates:Table 8-6、Clause 8.6.9.2.1Cycle Timer state machine:Clause 8.6.9.1List Execute state machine:Clause 8.6.9.2List Config state machine:Clause 8.6.9.3AdminBaseTime/OperBaseTime:Clause 8.6.9.4.1、8.6.9.4.18AdminCycleTime/OperCycleTime:Clause 8.6.9.4.3、8.6.9.4.20queueMaxSDU:Clause 8.6.8.4、12.29.1.1TransmissionOverrun:Clause 8.6.8.4、12.29.1.1.2guard band:Annex Q.1、Q.2
术语之间的依赖关系
flowchart TD A["scheduled traffic"] --> B["transmission gate"] B --> C["gate control list"] C --> D["SetGateStates"] D --> E["OperGateStates"] C --> F["TimeInterval"] F --> G["List Execute state machine"] H["AdminControlList"] --> I["List Config state machine"] I --> C J["OperCycleTime"] --> K["Cycle Timer state machine"] K --> G B --> L["guard band"] B --> M["TransmissionOverrun"]
与其他来源的关系
- 来源_IEEE_802.1Q-2005_虚拟桥接局域网_deep_dive 提供 queue、traffic class、forwarding process 的底座。
- 来源_IEEE_802.1Qav_时间敏感流转发与排队增强_deep_dive 提供 credit-based shaper 背景;Qbv 会改变 credit 累积的时间条件。
- 来源_IEEE_802.1Qci_按流过滤与监管_deep_dive 在接收侧使用 stream gate control,与 Qbv 的 gate state machine 有明显继承关系。
- 概念_802.1Q_Forwarding_Process 是 Qbv 插入位置的背景页。
容易混淆的点
Qbv 不是更高优先级
Qbv 的关键不是“给某个流更高 priority”,而是“在某个时间只允许某些 queue 发送”。高优先级不能阻止已经开始发送的大帧,时间门控可以通过 guard band 避免这种干扰。
gate open 不等于一定会发送
gate open 只是必要条件。队列还要有帧、满足 transmission selection algorithm,并且有足够时间在下一次 close event 前发完整帧。
schedule 不由标准自动计算
标准定义执行机制和管理对象,不替你计算业务流的全网 schedule。实际系统通常需要集中式配置、离线规划或控制器。
PTP 不只是可有可无的增强项
Qbv 的机制需要共同时间视图。Annex Q 允许实现用其它方式获得共同时间,但从学习模型上必须把“时间一致性”当成前提。
例子 / 场景
场景 1:为控制流创建 protected window
一个 port 有 8 个 traffic classes。设计者希望 class 3 每 1 ms 有一个 100 us 的保护窗口。gate control list 可以在窗口开始时只打开 class 3,关闭其它 classes;窗口结束时关闭 class 3,重新打开其它 classes。
场景 2:低优先级大帧被 guard band 拦住
普通流队列 gate open,但系统发现某个大帧无法在下一个 class 3 protected window 前发完。此时即使普通流 gate 仍处于 open,帧也不应被视为 available。
场景 3:在线切换 schedule
管理面下发新的 AdminControlList 和 AdminBaseTime。List Config state machine 根据 base time 和当前运行状态设置 ConfigChangeTime,等到合适时间再切换到新的 OperControlList。
阅读这篇标准时的推荐顺序
- 先读 Annex Q.1/Q.2,建立 guard band 和 protected window 的直觉。
- 再读 Clause 8.6.8.4,理解 transmission gate 和 gate control list。
- 读 Clause 8.6.9,理解三台状态机的分工。
- 读 Clause 12.29,理解实际配置对象。
- 回头读 Clause 5 和 17,理解实现声明和管理接口。
我还没完全理解的问题
- 真实工业网络中 schedule 计算通常由哪些工具或控制器完成。
- Qbv 与 frame preemption 共存时,guard band 如何被实际压缩。
- 多桥跨跳场景中,如何系统性验证每个 hop 的 gate phase。
- Qbv 与 Qci 同时使用时,接收侧 stream gate 的时序是否应与发送侧 transmission gate 做全局联合规划。
已拆出的概念页
- 概念_802.1Qbv_scheduled_traffic
- 概念_802.1Qbv_transmission_gate
- 概念_802.1Qbv_gate_control_list
- 概念_802.1Qbv_cycle_timer
- 概念_802.1Qbv_guard_band
- 概念_802.1Qbv_TransmissionOverrun