0731-84728105
15116127200
FAST入门(4)软硬协同分组处理模型之二
发布时间:2018-07-04
     模块是FAST平台实现分组处理的基本单元,软硬件模块间高效的信息交互对实现软硬件协同分组处理具有重要意义。元数据(Metadata)是FAST平台中模块间信息交换的核心数据结构,是控制分组在软硬件模块间的处理路径以及信息交换的关键。
一、软硬件协同分组处理流程
   FAST平台中传输的每个分组都携带一个元数据块,用于存放分组的接收信息(如端口号,接收时刻等)、路径控制信息(如下一个模块号DMID)、处理的中间状态(如流分类的标识FlowID)以及用户自定义状态信息等。
     FPGA OS必须为每个从端口接收的分组创建并初始化一个元数据块,每个软件UA也必须为其产生的分组构建并初始化一个元数据块。当硬件模块把分组DMID设置为某个UA的MID,或者UA把分组的DMID设置为某个硬件模块的MID时,分组需要携带元数据穿越软硬件界面,如下图所示。假设硬件流水线由X、Y、Z三个模块组成,作为流水线最后一级的模块Z通常为输出引擎,FPGA OS将DMID为Z的分组送输出接口发出。
     如果平台加载了一个软件程序A,功能是对p1接口输入,p2接口输出的所有分组进行安全检查,那么A可向模块Z配置规则,将所有输入接口为p1,输出接口为p2的分组的DMID设置为A。因此模块Z会将分组p的DMID设置为A,FPGA OS会将p送到软件模块A进行处理,同时将p的SMID设置为Z,表示这是硬件模块Z发出的分组。
     当A完成对p的安全检查需要继续从p2发出分组p时,可将p的DMID设置为Z,将p再次发送回硬件流水线。虽然p首先经过了硬件流水线中的模块X和Y,但由于DMID为Z,所以X和Y不会处理分组p,而是将其送到Z处理。Z发现p的SMID为A,表示已经过安全检查,因此会将分组DMID修改为Z,由FPGA OS从端口发出。
二、软硬件协同处理中的信息交互
     元数据中除了DMID和SMID字段外,还定义了其他字段用于模块间信息的交互。FAST2.0规范定义的元数据包含了14个字段,如下表所示:
   根据系统的性能要求,开发周期,开发人员喜好(软件开发或硬件开发),可将需要实现的网络功能划分到不同的软硬件模块中实现(这一点后面还会详细介绍),而软硬件模块间状态信息的交互需要在元数据中携带,例如:
     (1)PST字段:硬件可进行分组解析,包括网络协议类型或者是应用层解析,并将解析的结果通过PST编码送UA,实现将UA分组解析功能卸载到硬件实现;
     TSN在转发流程中扩充的单流过滤和管控(PSFP)机制主要实现三个功能,一是单流测量,使用令牌桶机制测量到达的每条流得流量和最大帧长度是否超过预定合约;二是时间门控队列选择机制,即将全局时间(分组到达的时刻)加入队列选择算法中考虑,重新计算分组内部优先级,并根据内部优先级而不是分组VLAN头或IP头中携带的外部优先级选择输出队列号;三是入队测量,基于令牌桶机制对进入特定队列的流量进行测量,保证进入相应队列缓存的分组流量满足一定的合约。
     (2)FlowID:硬件实现对分组的分类,然后将分类的结果送UA处理,即实现将软件的流分类功能卸载到硬件实现;
     (3)RXTS:硬件实现对分组接收的时间进行精确标记,软件UA可以根据这个时间戳进行时间敏感的功能处理,这对于精准网络测量和IEEE1588时间同步控制的实现十分关键;
     (4)UDM:用户根据需要使用16字节的UDM字段实现UA和特定硬件模块之间的信息传递,例如当硬件模块按照匹配的规则将分组送给软件UA时,可以携带匹配的规则号或软件预先设置的cookie信息等。软件在将分组发送给硬件时,也可以携带一些控制硬件处理的信息,如定时发送的信息等。关于UDM的使用会在后续的实际案例中更加详细的介绍。
     因此在FAST架构下,软件UA可通过元数据与硬件模块交换更加丰富的甚至是用户自定义的状态信息。与目前的Socket、Netlink,Libnet/Libpcap、DPDK等网络编程的API相比,FASTAPI具备更强的软硬件分组协同分组能力,更加容易的满足用户定制的处理需求。