时间敏感网络端系统中队列管理器电路的设计与实现

2022-06-11 00:47乔庐峰陈庆华邹仕祥
通信技术 2022年5期
关键词:管理器缓冲区指针

杜 婧,乔庐峰,陈庆华,刘 熹,邹仕祥

(中国人民解放军陆军工程大学,江苏 南京 210007)

0 引言

以太网是目前应用最为广泛的局域网技术,其具有良好的开放性和互操作性,部署方便、成本较低。传统以太网无论是采用载波监听多路访 问/冲突检测(Carrier Sense Multiple Access/Collosion Detection,CSMA/CD)技术还是交换式以太网,都无法在带宽、时延和抖动等网络指标上提供高可靠、确定性的服务,这使得它们无法直接应用于车载网络、工业控制等领域,此类需求推动了时间敏感网络技术(Time Sensitive Network,TSN)的发展。

IEEE 802工作组在传统以太网协议的基础上[1],针对音视频业务流提出了音视频桥接技术(Audio Video Bridging,AVB),使其支持时间同步、带宽预留、低延迟等功能,并发展出多个与之相关的协 议,如IEEE 802.1Qat、IEEE 802.1AS、IEEE 802.1 Qav等。后来,AVB应用范围扩大到了工业控制、汽车控制等领域,同时扩大了所支持的业务类别并更名为TSN。TSN包括时间同步、流量调度和网络配置3大关键技术。其中,时间同步是整个TSN技术实现的前提,流量调度是TSN技术实现的关键,网络配置是实现TSN技术的保障,这些技术的应用有效弥补了传统以太网非实时性和不确定性的短板,为时间敏感型业务提供了低延时、高稳定性的服务[2]。

TSN网络拓扑结构如图1所示,图中的集中网络配置控制器(Centralized Network Configuration controller,CNC)可以通过集中用户配置控制器(Centralized User Configuration controller,CUC),获取发送端和接收端对网络带宽和端到端传输时延需求等服务质量(Quality of Service,QoS)相关参数,然后运算得到网络配置参数并下发给网络中相关的各交换机和端系统(终端0、终端1)。端系统根据网络配置参数产生进入TSN网络的业务流,TSN交换机可以准确识别业务流类型,根据调度策略对数据进行调度,确保多种类型的业务流可以共存在一个网络中,并能够满足各自的QoS需求。

图1 TSN网络基本结构

TSN中的端系统产生进入TSN网络的数据业务,同时也接收来自其他端系统的业务数据。对于不同类型的业务,TSN网络应提供不同的QoS。例如,对于时间敏感的控制数据,TSN端系统在发送数据之前应向CUC发出申请,提出相应的QoS需求参数。CUC将相关信息通知CNC,由CNC生成网络配置参数并下发给所有的TSN交换机,同时也返回对TSN端系统的配置信息。此后,TSN端系统需要按照配置的参数,如最大突发长度、平均速率、调度时间表参数等,输出特定的业务流。端系统根据TSN网络配置参数调度和输出数据业务,是TSN网络保证特定业务端到端QoS的前提和基础。

TSN端系统中,除了特定的数据源,队列管理器是其核心,它由缓冲区管理器和队列调度器两部分组成。缓冲区管理器支持基于优先级的缓冲资源分配机制和基于链表结构的逻辑队列管理机制;队列调度器同时支持基于时间列表的输出门控机制、基于信用的输出调度机制和基于优先级的输出调度机制。缓冲区管理器和队列调度器的工作参数均可根据需要由CNC动态配置,二者配合使用,可以满足多业务混合条件下的端系统业务缓存与输出调度需求。

本文设计并实现了应用于TSN端系统的队列管理器电路,支持灵活的网络参数配置,可以满足TSN网络对端系统的设计需求。

1 TSN端系统队列管理器电路结构设计

TSN端系统有两种基本类型:第一类端系统本身是数据源,可以根据TSN规范产生不同类别的数据帧;第二类端系统是一种TSN网络接入设备,可以对非TSN终端产生的业务数据进行缓冲、流量整形后发送到TSN网络,实现TSN网络对端系统所要求的接入功能。这两类端系统可以看作实现业务汇聚功能的专用TSN交换机,而且在队列管理器设计上具有相似之处。下面以第二类端系统中的队列管理器为例加以分析,此时端系统的应用场景和外部连接关系如图2所示[1]。

图2 接入型端系统在时间敏感网络中的位置

当端系统为多个不同类型的终端提供TSN网络接入时,需要对不同类型的业务进行识别、缓存以及输出调度,TSN把业务分成8个基本类别,其中,时间敏感型业务有音频业务、视频业务和各种控制数据;非时间敏感型数据业务包括最大努力业务、卓越努力业务、关键应用业务和背景业务流。来自不同终端的数据流经过业务合路后统一进行识别和分类,区分时间敏感流和非时间敏感流[3],然后进入队列管理器。本文设计的端系统队列管理器的基本功能如图3所示。图中的输入控制状态机负责将输入以太网帧分割成定长的内部信元,并写入当前可用自由指针指向的数据存储区;数据存储区是所有输出业务流共享的,采用双端口静态随机访问存储器(Static Random Access Memory,SRAM)实现,被划分为多个64字节的数据块;自由指针队列管理着SRAM中当前可用数据缓冲区的指针;缓冲区管理器内部可以以链表形式管理多个逻辑队列,用于存储不同类型的业务;队列调度器可以根据TSN网络的配置,确定不同逻辑队列的输出调度方式,支持灵活的动态配置;输出接口状态机可以根据输出调度结果将数据帧从SRAM中读出并发送到TSN网络。缓冲区管理器和队列调度器是本设计中的两个核心电路[4],是进行设计和分析的重点。

图3 端系统中的队列管理器整体结构[5]

2 端系统中队列管理器的设计与实现

本设计的队列管理器中的缓冲区管理器和队列调度器的详细结构如图4所示。其中缓冲区管理器包括指针写入控制状态机、队列管理状态机、指针读出状态机和存储在链表存储区中的指针队列;队列调度器包括针对16个流采用的基于信用的整形器(Credit Based Shaper,CBS)[1]、不同优先级队列之间采用的严格优先级调度器和支持可配置门控列表的输出门控电路[2],三者相互配合,实现端系统的输出业务调度功能[6]。

图4 缓冲区管理器和队列调度器的详细结构

缓冲区管理器决定了输入端口缓冲区的分配方式,主要功能是对输入端口有限的数据缓冲区进行合理分配和使用。由于端系统需要将多个端口输入的业务汇聚到一个端口进入TSN网络,不同类型的终端产生的数据业务具有各自的流量特征,可能在TSN网络端口处发生拥塞,造成缓冲区溢出和数据丢弃。缓冲区管理器需要根据业务类别、各自的QoS需求、业务优先级等,合理划分和使用有限的缓冲资源,最大限度地保证时间敏感型业务的缓冲区需求,在一定范围内共享缓冲资源以提高缓冲资源利用率,并按照优先级权重对共享进行管理等[4]。

队列调度器决定了输出带宽的分配方式,主要功能是根据TSN网络规范和不同类型业务的QoS需求进行业务输出调度。它可以按照CNC给出的配置参数,针对不同类型的业务采用不同的调度策略,合理分配输出带宽,对进入TSN网络的业务流进行整形,使其既可以符合所配置的流量特征,也可以满足业务本身的QoS需求[5]。

2.1 基于链表结构的缓冲区管理器的设计与实现

端系统作为时间敏感网络的接入设备,从多个终端设备中接收数据帧,而内部存储资源有限,为了提高存储区的利用率,也为了保障端系统正常运行,采用了一种基于链表结构的逻辑队列共享缓存的缓冲区管理方法[3]。其原理是将内部缓冲区划分为64字节的存储块,每个存储块对应一个指针,当前可用的数据缓冲区对应的指针被存储在图中的自由指针队列中,自由指针中包含对应存储块的地址。当一个数据帧到达后,它先被分割成1个或多个长度为64字节的定长内部信元(长度不足时需要进行数据填充)。输入接口状态机处理输入信元时,会首先从自由指针队列读出一个自由指针,其次将当前信元写入该指针指向的共享数据存储空间中,最后该指针根据其对应数据帧的类别被写入到缓冲区管理器内部相应的逻辑队列中。

缓冲区管理器可以同时管理多个逻辑队列。每个逻辑队列对应着包括头指针(head)、尾指针(tail)、信元深度(cell_depth)、数据帧数(frame_depth)、队列非空标志(depth_flag)在内的一组寄存器。本设计中包括8个优先级队列和16个基于流的队列,因此共包括24组寄存器。如图5(a)所示,以队列0为例,进行写入操作时,当前到达的指针(图中值为100的指针)如果是一个队列的第一个指针,则head0和tail0的取值同时为100,cell_depth0值变为1,由于该数据帧中包括多个信元,因此frame_depth0保持为0。此后,多个信元到达,相应的指针在指针存储区中以链表方式进行存储,假如当前数据帧包括3个信元,那么当前队列指针链表的构成如图5(b)所示。此时frame_depth0的值由0变为1,depth_flag0由0变为1,表示当前队列中有完整的数据帧,可以被调度输出。指针读出控制状态机持续监视每个逻辑队列的状态,如果发现某个逻辑队列中有完整的数据帧,就会向队列管理状态机申请将该逻辑队列队首的指针读出。队列管理状态机根据head0的值(100)及链表存储结构[3],可以依次读出该队列的多个指针,直至tail0所指向的存储区。读出的指针由读出控制状态机写入与该逻辑队列对应的临时指针缓冲区中。

图5 链表存储区结构

临时指针缓冲区由一个深度很小的先入先出存储器(First In First Out,FIFO)构成,本设计中针对16个流和8个优先级队列分别设置了一个临时指针缓冲区(图中stream0-stream15、class7-class0对应的FIFO),用于存储各逻辑队列首部的指针。传统的缓冲区队列中通常不设置临时指针缓冲区,本设计是为了满足TSN对输出调度实时性的要求而增加的。图5中链表队列的写入和读出操作是互斥的,这使得队列调度器从某个逻辑队列中读出指针的时延可能较大并存在抖动。采用临时指针缓冲区后,队列调度器可以根据调度需要实时读出所选择队列首部的指针,消除了队列管理状态机的指针读出操作时延不确定性,保证了输出数据帧的实时调度,可满足端系统对时间敏感业务调度的时间精度要求。

本设计中的缓冲区管理器把缓冲区分块,建立对应数据块指针,把指针以链表的形式存入存储区,并给各个队列建立临时指针缓冲区,使得端系统的多个输入端口可以共享缓冲区,给时间敏感型业务预留一定存储资源,提高端系统的抗压性能,满足时间敏感网络的需求。

2.2 支持多种调度算法的队列调度器的设计与实现

本设计中的队列调度器调度数据时,使用了严格优先级调度算法和CBS调度两种调度算法,调度算法配合门控实现了对时间敏感型业务的特殊调度,最终实现对时间敏感业务的带宽保证和时延保证。队列调度器中使用8个门来控制8个优先级的缓冲队列,队列调度器通过门控列表控制门状态和门操作的执行时间,相邻两次门操作之间的时间间隔相等。门控列表和门操作间隔都可以由CNC配置,门状态为open时代表允许该门对应优先级的缓冲队列传输数据,当同一时刻有多个门状态为open时,不同优先级之间的缓冲队列按照严格优先级算法进行传输。按照需要制定门控列表并执行门操作,可以给时间敏感业务提供保证带宽和确定性时延的服务。如图4所示,T1时刻门状态为OCCCCCCC,表示门7为open,其他门均为closed,即在T1到T2时间段内,仅允许优先级为7的数据帧传输,这段时间的端口带宽被全部用来传输优先级为7的数据帧,控制每个时间片内门7开启的时间段,可以精确控制优先级为7的业务流占用的总带宽;控制相邻门7两次开启的时间间隔,可以精确控制时间敏感业务的流量分布。这种通过配置门控列表确定时间敏感业务流量分布特征的方式可以精确控制时间敏感业务在每个节点的时延,从而可以精确控制时间敏感业务的端到端时延。

不同优先级的缓冲队列使用严格优先级算法选出传输的数据帧,相同优先级的缓冲队列使用CBS调度算法选择数据帧。如图4所示,门7后共有17条优先级为7的缓冲队列,包括class7和 stream0~ stream15,端系统会根据stream0~ stream15的业务需求和流量特征给每条流配置不同的信用参数。门7开启时,队列调度器使用CBS调度算法从stream0~stream15中选出数据帧进行传输,若stream0~stream15中没有符合发送条件的,则发送class7中的数据帧。

CBS调度算法主要根据队列信用进行调度,队列信用相关参数则是在端系统初始化时由CNC配置的,包括最大信用值hicredit、最小信用值locredit、信用值增加速率idlesope和信用值减小速率sendslope。门7的状态为open且stream0-stream15中有等待传输的数据帧时,该缓冲队列的信用以idlesope的速率开始增长。门状态为open时队列信用值开始累加,门状态从open转为closed时队列信用值清零且保持不变,直到下一个open状态。数据帧在门状态为open且该队列信用值为非负数的时候可以开始传输,数据帧传输时队列信用值以sendslope的速率减小,当前数据帧传输完成后若队列中还有数据帧等待传输且信用值为非负数,则开始传输下一个数据帧。如图6所示,0到t1时间段内,该队列没有数据帧等待,队列信用值保持为0;t1时刻,数据帧A进入队列,此时端口为空闲状态可以发送数据帧,开始发送数据帧A;t1到t2时间段内,数据帧A通过端口发送出去,该队列的信用值以sendslope速率下降;t2时刻,数据帧A发送完毕;t2到t3时间段内,该队列信用值以idlesope速率上升;t3时刻,该队列信用值上升到0,但此时队列中没有等待发送的数据帧,队列信用值保持为0。

图6 发送数据帧时队列信用的变化

队列信用相关参数与队列占用带宽之间存在对应关系,假设门打开时某队列中有数据帧,且每次该队列传输数据帧信用值都刚好降低到locredit,门打开时,传输数据帧的时间和门打开时间之前的比值为:

根据式(1)可知,在门打开时,该队列占用输出端口传输数据的时间和门打开的总时间之间的关系为该队列信用增加速率和信用减小速率的代数关系,说明通过CNC配置队列信用相关参数可以精确控制该队列在门打开时占用输出端口传输数据的时间,CBS调度算法配合门控列表可以精确控制该队列占用的总带宽。门控机制结合严格优先级和CBS算法可以实现对时间敏感业务的带宽保证和时延 保证。

3 关键电路仿真分析

本文设计的队列管理器基于Xilinx Zynq7020 FPGA实现,图7、图8、图9是典型仿真波形。图7中,PHYA_rgmii接口包括信号PHYA_rgmii_rxc、PHYA_rgmii_rx_ctl和PHYA_rgmii_rxd,连续输入长度为1 000字节的以太网数据帧(PHYA_rgmii_rx_ctl为1表示当前正在输入1个数据帧),该业务流在电路内部采用CBS算法进行流量整形。可以看出,大量输入的数据帧被丢弃,只有在该队列的信用值符合输出调度要求时,才会将当前队列首部的数据帧输出,此时,PHYA_rgmii_tx接口按照一定间隔输出经过流量整形的数据帧,说明CBS调度器可以基于信用配置进行数据帧的输出调度。

图7 CBS算法仿真结果

图8中,通过用户端口A和用户端口B分别连续输入长度为1 000字节和500字节的数据帧,二者输入带宽之和大于输出端口的带宽。此时在输出端口上观察PHYA_rgmii_tx_ctl可以看出,端口A输入的长度为1 000字节的数据帧数量明显多于端口B输入的长度为500字节的数据帧,说明队列调度器可以按照优先级进行数据帧的输出调度。

图8 严格优先级算法仿真结果

图9中,输入端口A输入的数据帧按照信用进行调度输出,端口B输入的数据帧按照优先级进行调度。如图9所示,长度为1 000字节的数据帧根据信用累计情况近似等间隔输出,长度为500字节的数据帧占据了剩余的带宽。

图9 CBS算法和严格优先级联合仿真结果

综上仿真分析可见,本文实现的队列管理器可以满足TSN对端系统关于业务缓冲和调度功能的需求。

4 结语

本文设计了一种应用于TSN端系统的队列管理器,说明了队列管理器的工作流程,分析了采用逻辑链表实现的缓冲区管理器的工作机制,分析了支持CBS算法、严格优先级调度和门控列表的队列调度器的工作机制和关键工作参数。仿真分析表明,所实现的队列管理器可以满足TSN端系统对用户业务进行缓冲和分类调度的需求。

猜你喜欢
管理器缓冲区指针
启动Windows11任务管理器的几种方法
垂悬指针检测与防御方法*
应急状态启动磁盘管理器
串行连续生产线的可用度与缓冲库存控制研究*
Windows文件缓冲处理技术概述
基于ARC的闪存数据库缓冲区算法①
为什么表的指针都按照顺时针方向转动
初涉缓冲区
浅析C语言指针
本期导读