软硬件协同是FAST平台分组处置赏罚
的特征
。FAST平台软件主要
完成
FAST硬件流水线与FAST用户运用
(UA)间数据通路和控制通路的信息交互,为UA编程提供函数库,是支持
UA运转
的基础
。FAST平台软件主要
由Linux内核中的FAST驱动和FAST内核以及用户空间的FAST编程库组成。
一、FAST UA的通讯
形式
FAST UA运转
时与FPGA以及网络接口有多种通讯
需求,征求
FAST分组收发、对FPGA的设置
管理
以及与远端主机举行
尺度的Socket通讯
等。
(1)FAST分组收发
UA从FAST流水线吸收
FAST分组以及向FAST流水线收回
自己
发作
或许
转发的FAST分组。当UA完成
middlebox处置赏罚
成效
时,如防火墙成效
,运用
FAST分组收发的方式与底层FPGA举行
通讯
。这些分组遵照
元数据加以太网帧的FAST分组名堂
界说。FAST分组名堂
界说将在FAST编程 API先容
时给出。
(2)对FPGA的设置
管理
UA对FPGA的设置
管理
征求
对FAST流水线的设置
管理
以及对FPGA OS的设置
管理
。典型的对FAST流水线设置
管理
职掌
征求
设置
GAC模块中的Action表,读取GOE模块中的计数器等;典型的对FPGA OS的设置
管理
征求
读取端口吸收
发送计数器,设置
FPGA OS提供的婚配
协处置赏罚
器得流表项等。
(3)与远程
装备
的Socket通讯
FAST UA还可运用
尺度Socket()机制经过
内核协议栈与远程
的网络装备
举行
通讯
。凭证
目的IP地址,内核协议栈确定该通讯
是经过
挂接到CPU上尺度以太网接口举行
,照旧经过
挂接到FPGA上的网络接口举行
。若是
是前者,协议栈将会以sk_buff的名堂
与尺度以太网驱动交流收发的分组;若是
是后者,协议栈将会把分组送FAST内核,由FAST内核将分组封装成FAST名堂
,经过
FAST驱意向
FPGA中的流水线收回
。
需求
注重
的是,FAST UA能够
同时运用
多种通讯
形式
。例如OpenFlow通道署理(OXFP)UA既要经过
Socket机制与远端的SDN控制器通讯
,完成
packet-in/packet-out/flowmod等OpenFlow旧事
的交互,又要与FAST流水线举行
FAST分组的交互。因为
上述经过
Linux内核的通讯
都是雍塞
式的,是以
需求
为分别
的通讯
树立
分别
的线程。
二、FAST平台软件的完成
FAST平台软件完成
表示
如下图所示,其中征求
FAST驱动、FAST内核、FAST编程库以及两个UA、UAx和UAy。FAST内核维护的Netlink端口照射
表NPMT(Netlink Port Mapping Table)是FAST平台软件中的焦点数据结构
,主要
寄存
UA的MID与NetLink端口号之间的照射
关系。
FAST平台软件完成
时在用户空间其实不
存在一个集中的UA管理
法式。每个UA在启动时都自力
地经过
FAST库函数向FAST内核注册,获取MID以及与NetLink端口号的照射
关系。NPMT中也生涯
了种种用于管理
维护的种种计数器信息,例如某个UA吸收
和发送分组的个数等。
FAST编程库为UA设计提供FAST分组收发的API函数,这些函数经过
Netlink机制与Linux内核中的FAST内核通讯
。Netlink是一种基于Socket缓存行列的,内核与用户态运用
之间转达
的旧事
的异步通讯
机制。FAST编程库会在UA完成
时编译到UA地址空间中,为防止
分别
UA会晤
FAST内核中共享数据结构
存在竞争,FAST编程库在设计时思量
了对NetLink照射
表等共享资源会晤
的互斥机制。
FAST内核维护NPMT数据结构
。每个UA启动时,会经过
FAST编程库提供的初始化函数向FAST内核注册,由用户显式地为UA分配一个独一
的MID编号。FAST内核对分组处置赏罚
的职掌
如下表所示。
是以
FAST内核凭证
FAST分组的DMID完成
了FAST流水线,多个FAST UA以及协议栈之间的分组交流。从协议栈角度看,FAST内核是一个特殊的网络接口,在内核中的职位与尺度的网络接口驱动基本
分歧
。因为
协议栈收回
的分组无分组的输入
接口信息,该分组进入FAST流水线后需求
经过
正常的转发获取输入
接口的信息。
FAST驱动仔细
控制与FPGA的DMA通讯
,FAST驱动与硬件平台亲近
相关,针对分别
完成
平台,DMA可以是轮询方式,也可以
是中止
方式。分别
平台中硬件DMA寄存
器的地址也有所分别
,是以
FAST驱动移植是FAST平台软件移植的关键
。因为
FAST UA编程基于FAST编程API和Linux尺度系统
挪用
,是以
分别
的硬件平台对UA编程是完全透明
的。