为了支持更加灵活的用户逻辑定制,以及基于集中缓存的交换输出调度,解决目前TSN交换开发过程中遇到的用户逻辑定制复杂等问题,经讨论和征求现有用户意见,FAST流水线模型由3.0版本升级到3.1版本。
一、3.0版本存在的问题
FAST3.0流水线模型如图1所示。其主要特点是增加了Pre-Ingress流水线段,避免GPP(通用分组解析)将IEEE1588v2的PTP协议帧定向到软件处理或丢弃,同时将GOE(通用输出引擎)直接与UDO(用户定义输出)连接,取消了UDO到GOE的反压流控信号,避免了分组输出延时的不确定性,为基于FAST架构的TSN交换实现奠定了基础。

图1 FAST流水线3.0版本的结构
然而,FAST用户在TSN交换功能开发时也面临了两个问题。一是基于FIFO结构的PBuf(分组缓存)只支持先来先服务的输出调度算法,限制了其他输出调度算法的应用;二是Pbuf的写入和读出逻辑分别与GPP和GAC(通用转发动作)模块绑定,强制用户必须同时使用PBuf缓存管理和GPP/GAC的功能,限制了用户自定义逻辑的灵活性。
二、3.1版本简介
FAST流水线3.1版本模型如图2所示,对比3.0版本主要有三个主要变化。
(1)基于BID的Pbuf管理
Pbuf按照RAM的方式组织,内部存储被划分为多个分组缓冲区,每个缓冲区使用体格BID(缓冲区ID)表示。每个到达流水线的分组都会被分配一个BID,BID嵌入分组的元数据在流水线中传递。当流水线需要从Pbuf读出分组时,根据分组的BID向Pbuf发出读出请求。由于BID机制可以支持非FIFO的分组读出顺序,因此可以支持流水线采用更加复杂的分组输出调度策略。
(2)Pbuf管理与GPP和GAC解耦
FAST流水线3.0版本及以前均将Pbuf和写入和读出逻辑分别嵌入GPP和GAC模块,因此使用Pbuf时默认需要流水线配置GPP和GAC模块,这给用户逻辑定制带来不便。例如很多用户交换场景(例如二层TSN交换)并不需要对IP的解析,而GPP包含了IPv4/IPv6以及传输层协议的解析,默认使用GPP使得用户的逻辑难以简化。

图2 FAST 3.1的流水线扩展模型
在FAST流水线3.1版本中,Ingress流水线的第一个模块固定为IBM(Ingress缓存管理),IBM从CBM(集中缓存管理)获取一个空闲的BID,将分组写入该BID,并将BID嵌入分组元数据中。在Egress流水线中嵌入EBM(Egress缓存管理)模块,负责根据从上游接收到的分组元数据中德BID从CBM中读取分组,向下游模块发出。
CBM负责Pbuf中空闲缓冲区BID的维护,IBM每接收一个分组就分配一个BID,EBM没读取一个分组就回收一个BID。
由于流水线元数据中需要携带BID信息,因此需要将原有FAST架构中的元数据定义进行修改,主要是取消元数据中的SeqNum序列号字段和缩短分组长度字段,详细见《FAST元数据格式规范》。
(3)模块的颜色标注
为了进一步区分模块的属性,支持用户利用现有成熟模块进行快速原型实现以及完全定制自己的模块,FAST模块引入颜色标注机制。
表1列车数据类型与TSN数据类型映射表
颜色 |
类型 |
知识产权属性 |
知识产权属性 |
绿色 |
要求基于FAST开发必须使用的基础模块 |
任意使用,无知识产权问题 |
IBM、CBM、EBM |
黄色 |
推荐基于FAST开发的用户使用的通用模块 |
任意使用,无知识产权问题 |
GPP,GKE,GME,GAC,GOE |
白色 |
用户自定义的模块 |
开发者拥有知识产权 |
1588-GAC,1588-UDO等 |
FAST社区会严格测试保证绿色和黄色模块的质量,并提供文档和技术支持。白色模块质量有开发用户负责。经用户授权和FAST社区测试,白色模块也会变成黄色模块。
附:FAST流水线版本历史
版本 |
时间 |
改动 |
1.0 |
2016.12 |
初始的FAST流水线版本,主要特点包括:
(1)标准的五级流水线(用户定义的解析、关键字提取,查表,转发action,输出引擎);
(2)用户通过扩充标准五级流水线模块功能,实现定制逻辑
|
2.0 |
2018.6 |
(1)支持用户通过插入自己的模块扩展流水线的处理功能,而无需修改已有的五级流水线逻辑
|
3.0 |
2019.1 |
在2.0版本基础上:
(1)增加了Pre-Ingress流水线段,支持对GPP不支持的协议帧进行解析和处理
(2)将GOE直接与UDO连接,避免了分组输出延时的不确定性,为支持TSN提供保证 |
3.1 |
2019.3 |
在3.0版本基础上:
(1)将分组缓冲区(PB)由单FIFO队列模式改为基于RAM的随机存取的方式,支持有优先级区别的分组缓存和输出调度算法;
(2)将分组写入PB的逻辑从GPP模块中独立出来,将从PB读出分组的逻辑从GAC模块分离出来,有助于用户逻辑定制时,使用流水线提供的分组缓存管理机制,而定制自己的分组解析和转发动作逻辑。
(3)修改相应的元数据格式定义;
(4)FAST流水线模块的颜色标注机制; |