来源:TSNLAB 微信公众号
万众期待的TSN门控实战环节来啦。
出发前,先要统一思想。让我们再次搬出IEEE 802.1Q标准文档中描述门控的这张经典图片:

我特意上了底色,分解为三部分信息来看:
•橙色部分是门控的核心,配置门控表(GCL,Gate control list),然后各队列的门的“开”、“关”状态,根据门控表决定。门控表可以有多行,每一行包含各队列开关状态和TimeInterval两个信息(后者决定了这一行生效的时间);门控表根据基准时间BaseTime,循环执行,每CycleTime执行一次。
•绿色部分表示不同的流量等级(traffic class)会分别进入这8个队列,是门控方案执行的必要组件。暗含的关键信息是,必须要让多个流量进入不同的队列,才能通过GCL实现差异化的调度服务,即在同一时间,有的队列开门,有的队列关门。具体的入队方式有很多,例如VLAN报文头的优先级字段有8种不同的流量等级,IP报文头的DSCP字段也可以映射到8种不同的流量等级上,另外还可以基于对报文头具体信息(如源目的MAC地址、源目的IP地址等)手动指定报文的流量等级。另外,8队列是比较经典、常用的设计,并不是限制只能有8队列,可以更多或更少。
•蓝色部分是可以和门控配合使用的其它调度技术。图中写的传输选择算法(Transmission Selection Algorithm),在Table 8-6中有绝对优先级(SP,Strict Priority)、基于信用的整形(CBS,Credit-Based Shaper)、增强传输选择(ETS,Enhanced Transmission Selection,不限于各类加权轮询机制如WRR、DWRR等)和异步流量整形(ATS,Asynchronous Traffic Shaping)。以门控配合SP调度举例,当队列7、6同时“开门”,且两个队列都有待调度报文时,由于队列7优先级更高,则需先调度队列7的报文,直到队列7排空或门控状态切换。
本文,我们主要关注橙色部分和绿色部分的配合,尝试一个简单的门控配置案例。
场景见下图。红色流量是要提供时延保障的关键流量,他们有不同的特征;绿色是有大突发的背景流。那么配置的关键,就是要给出这三条流在TSN设备1的出接口(通向TSN设备2)上的门控配置方案。

最理想的情况下,端侧和网络已经实现了1588v2级别的时间同步,即所有设备都有一个相同的时间基准,并且终端的发包时间(相位)、携带的优先级字段,都可以和网络实现协同。这时,我们可以让终端a1的发包相位为0us(即会在0ms、1ms、2ms、...发包),携带优先级2(即会进入TSN设备的队列2);让终端a2的发包相位为10us(即会在0.01ms、2.01ms、4.01ms、...发包),携带优先级1。终端b不做特殊配置,默认优先级为0。假设所有报文从终端发出,到进入TSN设备1的出端口门控队列,需要3us。那么,GCL可以做如下配置:

看到这个,您怎么想?总之我反正觉得,这也太XX离谱了吧,这么理想的条件下,这么简单的拓扑,这么少的流量,配出来的GCL已经看不懂了。要是成百上千条流可怎么办呀?
那么让我们简化亿点点吧:

怎样,是否有种如听仙乐耳暂明的感觉,简直Amazing!What happened?其实,这里我们做了流的聚合编排、归并了大周期和相邻门控时隙,留了安全阈量,同时也没有纠结于“给关键流关门”,而是只要保障关键流来的时候,其它流关门就可以了。
感兴趣的读者可以细细体会和理解一下这两个列表。
现阶段,很多存量端侧都没有更新TSN相关的软硬件特性,故而网络无法轻松的和端侧协同控制端侧的发包时间、优先级,甚至有些场景还做不到端和网络的时间同步。对于第一种情况,当端侧的发包时间(相位)不可控制时,影响不大,让关键业务发生汇聚时,谁先到了就先走(只不过如果能协同规划端侧的发包时间,整体的方案配置可以更优化,最终体现在时延更低或能容纳更多业务上);第二种情况也可以应对,无需报文自己携带优先级,基于流量识别(使用Qci的PSFP或类似技术),把关键业务引入特定队列即可;第三种情况,因为端、网无同步,则报文在网络第一跳进入设计好的时隙时可能会引入一定的等待时间,即端到端的低时延性能会有劣化(但有界时延仍然可以保障)。
还用上面的例子,假设这时终端a1、a2的发包相位都是0us(而非之前协调好的,一个0us发,另一个10us发),也没有携带优先级字段,其它条件不变,那么门控方案可以如下:

同时,需要在TSN设备1的入口处,配置识别源地址为a1、a2,目的地址为A的报文,获得内部优先级5,从而进入队列5。
当然,如果要大规模的应用门控方案,还是推荐使用一套TSN门控编排算法,以代替手工计算。
注:本文对于门控配置中的部分细节进行了省略,比如门控的计算过程、预留安全阈量以应对可能的抖动、Guard band的考虑等。计算门控长度核心就是用报文长度除以带宽(别忘了Byte和bit之间的转换)再加一些安全阈量,而门控的开始时间就是考虑报文发送时间和传输过程中的所有延迟。本文给出的示例场景不涉及多TSN网络设备之间的门控协同配置,因这种情况可以类比发送端到第一个网络设备之间的配置思路进行应对。