来源:TSNLAB 微信公众号
很多时候人们会把TSN和由IEEE 802.1Qbv定义的TSN门控调度划等号。关于这点我在很多场合很多途径都不厌其烦的表达过,TSN是一系列技术的集合,Qbv门控只是其中一项名声很响亮的技术。从数据面调度的角度,TSN还有几种不同的调度方式。
当然,这不是我们今天话题的重点。我们今天就谈Qbv门控调度以及如何理解门控调度的编排。
1.门控编排可以看做是一个纯数学问题,学术界很热衷于研究。
可以用道路交通举例类比,如下图所示:已知每个小汽车通过路口的时间(类比于存储转发时延+设备固有时延)、从一个路口到下一个路口的时间(类比于链路时延),已知小汽车要求抵达机场的最晚时间(类比于时延需求),问如何在各个路口规划让哪个小汽车先通过(类比于TSN门控规划,如让小车A、B在路口甲分别进入队列a、队列b,队列a在1-2s开门,让小车A通过,队列b在2.5-3.5s开门,让小车B通过)。
在进行规划的时候,有一个简单的原则,就是“谁更着急,让谁先走;谁不着急,就可以等等”。
试想,在有几百个路口、几千台小车的情况下,这个问题确实会变得无比复杂。
2.实际场景的约束,带来的是门控编排问题的极大简化
约束1:不是所有“小车”都要保障。TSN相比于当前的总线类解决方案而言,最大的优势在于能为部分流提供确定性低时延服务的同时,混合承载其它流量。也就是说,在进行门控规划时,我们仅仅考虑关键流即可。
约束2:使用Qbv保障的流量都有稳定的周期特征。如果流量是音视频类的,有显著的波动和突发特性,则适合使用异步QoS类调度,TSN或者说802.1Q的标准转发流程里定义了优先级调度、带宽分配调度(如加权轮询)、CBS整形器、ATS整形器。如果流量是事件触发的,但对时延的要求又特别特别高的话,适合使用SP调度,视情况配合帧抢占甚至cut through转发。
约束3:无法编排端侧行为。也就是说,网络(至少在短期内)不能决定,例如让小车A在1s发车,小车B在2s发车,这样他们在路口自然就错开了。因此,对于关键流,并不需要费劲心思把它们的报文编入不同的队列,分配“谁先谁后”;而可以让他们进入一个队列,谁先到就赶紧先走。由于约束1的存在,网络对于关键流而言,一定是轻载的。这时候,对于关键流量进行“你明明可以走,但我偏要你多等等,这样下一跳才不会有突发”的这种操作很可能“费力不讨好”。在一跳上因为基于时间的整形多等了100us的话,可能“一辈子”都追不回来了。 也许在未来,更多的端侧设备支持和网络的协同编排后,可以通过在端侧合理的“负载分担“,即通过编排合理地把发送相位错开,避免报文在网络中突发到一起,从而进一步提高网络性能和对关键流的容量。
3.Qbv时间整形器的本质:整的是非关键流报文,不是整关键流报文
这就好比,领导出行,交通管制,从来我们都是红灯,领导通行方向都是绿灯。同样,Qbv提升关键流时延性能保障的关键,就是要避免低优先级对高优先级报文的阻挡,即在高优先级报文到来之前,把低优先级的队列关闭。而高优先级队列要不要关,什么时候关,并不重要,高优先级队列一直开着门,又有什么影响呢(就像SP调度里面,高优先级永远是高优先级,又有什么关系呢),无非大家一起开门的时候,继续使用优先级或轮询调度而已,带宽不会被浪费。如果真的饿死了低优先级,要么就是因为高优先级确实要占用足够多的带宽,那没办法,扩容吧;要么是因为高优先级的端侧行为错误,那这个属于入口policing的任务(如Qci),而不是出口调度器的任务。 下图是一个门控示例,在每个周期内根据关键报文要到达的时间相位规划了两个“特快通道”时隙。
与此同时,严格优先级调度虽然是一种简单有效的调度方法,但是,一个1500Byte的低优先级以太帧,在100M、1G带宽上,最多可以给高优先级关键流量带来120us、12us的时延。不要小看这点时延,在工业控制的角度,尤其是对于控制精度要求最高的同步运动控制等场景,可能会造成很大的影响。
读完这篇,请先消化一下;下一篇,我们会结合一个具体案例来讲解。