模块是FAST平台实现分组处理的基本单元,软硬件模块间高效的信息交互对实现软硬件协同分组处理具有重要意义。元数据(Metadata)是FAST平台中模块间信息交换的核心数据结构,是控制分组在软硬件模块间的处理路径以及信息交换的关键。

一、软硬件协同分组处理流程

FAST平台中传输的每个分组都携带一个元数据块,用于存放分组的接收信息(如端口号,接收时刻等)、路径控制信息(如下一个模块号DMID)、处理的中间状态(如流分类的标识FlowID)以及用户自定义状态信息等。

FPGA OS必须为每个从端口接收的分组创建并初始化一个元数据块,每个软件UA也必须为其产生的分组构建并初始化一个元数据块。当硬件模块把分组DMID设置为某个UA的MID,或者UA把分组的DMID设置为某个硬件模块的MID时,分组需要携带元数据穿越软硬件界面,如下图所示。假设硬件流水线由X、Y、Z三个模块组成,作为流水线最后一级的模块Z通常为输出引擎,FPGA OS将DMID为Z的分组送输出接口发出。

以网络接收分组的处理流程为例,当接口p1接收到分组p时,FPGA OS会在p的头部之前添加一个长度为32字节的元数据块MD。FAST流水线模块X、Y和Z会根据MD和p的内容进行转发决策。例如当模块Y决策将分组转发到端口P2输出,优先级为3时, Y会将分组MD中的DMID设置为Z(网络接口输出),Outport设置为p2,pri设置为3,模块Z将根据上述设置将p送FPGA OS,经接口p2优先级位3的输出队列发出。

如果平台加载了一个软件程序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在软硬件协同处理分组转发路径的控制中发挥了关键作用。硬件模块可通过设置DMID将分组(经FPGA OS的DMA,FAST驱动,FAST内核,FAST库)送指定的UA处理,UA也可以通过设置DMID将分组按照相反的顺序送到指定的硬件模块进行处理。

二、软硬件协同处理中的信息交互

元数据中除了DMID和SMID字段外,还定义了其他字段用于模块间信息的交互。FAST2.0规范定义的元数据包含了14个字段,如下表所示:

信息分类 字段 宽度 含义
输入信息 InPort 6 分组输入端口号
RxTS 32 分组接收时间戳
SeqNum 8 分组接收序列号
Length 12 不包含Metadata字段的分组长度
PktSRC 1 分组来源,0为网络接口,1CPU
路径信息 SMID 8 最近一次处理分组的模块ID
DMID 8 下一个处理分组的模块ID
状态信息 OutType 2 00:单播,01:组播,10:广播,11:保留
PktDST 1 分组目的,0为网络接口输出,1为送CPU
Outport 6 输出端口号或组播ID
PST 8 解析得到的协议类型
FlowID 14 分组所属的流ID
Discard 1 丢弃位
Priority 3 分组优先级
自定义信息 UDM 128 用户自定义的Metadata

根据系统的性能要求,开发周期,开发人员喜好(软件开发或硬件开发),可将需要实现的网络功能划分到不同的软硬件模块中实现(这一点后面还会详细介绍),而软硬件模块间状态信息的交互需要在元数据中携带,例如:

(1)PST字段:硬件可进行分组解析,包括网络协议类型或者是应用层解析,并将解析的结果通过PST编码送UA,实现将UA分组解析功能卸载到硬件实现;

(2)FlowID:硬件实现对分组的分类,然后将分类的结果送UA处理,即实现将软件的流分类功能卸载到硬件实现;

(3)RXTS:硬件实现对分组接收的时间进行精确标记,软件UA可以根据这个时间戳进行时间敏感的功能处理,这对于精准网络测量和IEEE1588时间同步控制的实现十分关键;

(4)UDM:用户根据需要使用16字节的UDM字段实现UA和特定硬件模块之间的信息传递,例如当硬件模块按照匹配的规则将分组送给软件UA时,可以携带匹配的规则号或软件预先设置的cookie信息等。软件在将分组发送给硬件时,也可以携带一些控制硬件处理的信息,如定时发送的信息等。关于UDM的使用会在后续的实际案例中更加详细的介绍。

因此在FAST架构下,软件UA可通过元数据与硬件模块交换更加丰富的甚至是用户自定义的状态信息。与目前的Socket、Netlink,Libnet/Libpcap、DPDK等网络编程的API相比,FASTAPI具备更强的软硬件分组协同分组能力,更加容易的满足用户定制的处理需求。


发表评论

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