OpenTSN网卡和端系统间采用千兆以太网连接,通过网卡上分组缓冲区实现应用与网卡间延时确定性保证与TSN网络(发送网卡-TSN网络-接收网卡)延时确定性保证的解耦。OpenTSN采用CQF方式(802.1Qch)实现确定性的保证。本文介绍支持CQF的OpenTSN网卡发送调度表的设计思想和分组的发送控制方法。

一、发送调度时间规划

802.1Qch标准描述了CQF工作的基本原理。即将交换系统时间划分为固定大小的时间槽d,交换机确保在第i个时间槽接收到的分组在第i+1个时间槽发出。因此经过h跳交换机的分组延时可以保证在(h-1)*d和(h+1)*d之间。

虽然CQF标准中并没有对网卡的行为进行定义,但CQF端系统在发送分组(向CQF网络注入)时仍需进行离线的时间规划,这是TSN网络中CQF离线规划最核心的组成部分,与CQF时间槽大小以及应用流特征密不可分。

本文以图1场景为例,说明OpenTSN网卡进行时间规划的原理。图1中包含4个端系统和3个交换机,其中主机A/B向主机C/D发送三条周期性的数据流,如图1(b)所示。

图1 基于CQF的TSN交换场景

针对上述场景,可进行简单的离线调度规划分析。

(1)分析1:

由于流f1的跳数最多(3跳),延时要求最短,因此可以考虑以f1为基准进行时间槽规划。由于f1延时最大为4倍时间槽长度,因此可选择时间槽大小为200us。

(2)分析2:

由于三条流的周期不同,取30ms(2ms,3ms和5ms的最小公倍数)作为CQF端系统调度周期。因此每个调度周期包含150个时间槽(200us*150=30ms),在150个时间槽内,f1发送15次,f2发送10次,f3发送6次。

(3)分析3:

由于三条流的分组可能会在S1,S2和S3的相同输出接口竞争输出带宽,为减小对CQF队列长度需求,需要在调度时尽量避免三条流的分组同时到达交换机的相同输出接口。

二、网卡的发送调度表

       针对图1所示交换场景以及上述分析,可给出一种NIC-a和NIC-b中发送调度表的配置方案,如图2所示。

图2 NIC-a和NIC-b的发送调度表方案

根据上表可分析得出:在任何时间槽,交换机S1,S2和S3的输出接口的CQF队列中,都不存在两个分组进行冲突。

当然,如果NIC-b发送调度表设置在时间槽0同时发送B2和B3缓冲区中的分组,那么在时间槽0结束时,S1连接S2的输出接口的CQF队列将会缓存3个分组。这在流数目较少的情况下也可以接受,但随着流数目增加,离线调度必须避免不同流分组在同一时间槽内在同一交换机的CQF队列中聚集,防止CQF队列溢出情况。

三、网卡发送调度与主机发送时间的解耦

       OpenTSN网卡的发送缓冲区实现了主机发送时间与网卡发送时间的解耦。以NIC-a为例,主机A以2ms为周期将分组发送到网卡,并写入B1缓存。

在固定时间槽,NIC-a从B1读出分组并发送。例如在时间槽10开始时,NIC-a会从B1读取分组发出,但不会关心主机A将分组写入B1缓冲区的时间是时间槽1还是时间槽9。

显然,如果分组在时间槽1写入B1缓冲区,那么将在缓冲区中等待9个时间槽,增加约1.8ms的延时,如果在时间槽9结束前5us到达网卡,那么在B1中的等待延时只有5us。如何精确控制分组进入B1缓冲区的时间,是由应用及端主机操作系统和驱动(如果有的话)共同决定的,需要case bycase定制解决,不在OpenTSN项目的设计范畴之内。

       最后举一个简单的例子,OpenTSN网卡的发送调度表就像高铁的发送时刻表。高铁会按照时刻表定时发出,而不关心乘客到高铁站所乘坐的交通工具,路上是否拥堵,在高铁站候车室等待的时间,甚至买到票的乘客能否及时上车。

       OpenTSN网卡在接收到时间敏感流的分组后,如何根据接收调度表向主机提交,将在后续文章中介绍。

分类: OpenTSN

发表评论

电子邮件地址不会被公开。 必填项已用*标注