0731-84728105
15116127200
FAST入门(3)软硬协同分(fēn)组处理(lǐ)模型之一
发布时间:2018-06-29
     软硬件协同的分(fēn)组处理(lǐ)是FAST區(qū)别其他(tā)数据平面开源项目的最重要的特点。模块(Module)是FAST平台中交换功能(néng)定义、资源分(fēn)配以及代码重用(yòng)的基本单元,特定分(fēn)组处理(lǐ)功能(néng)到软硬件模块的映射也是FAST软硬件协同分(fēn)组处理(lǐ)的关键。
一、FAST模块简介
     FAST中的模块是能(néng)够实现特定网络处理(lǐ)功能(néng)的,具有(yǒu)唯一标识的,相对独立的一个软件程序(UA)或FAST流水線(xiàn)中的硬件逻辑块。FAST模块能(néng)够按需连接,组成上下游关系,实现分(fēn)组处理(lǐ)的流水線(xiàn)。FAST模块具有(yǒu)一些共有(yǒu)的属性:
   (1)用(yòng)户可(kě)见
     模块的用(yòng)户可(kě)见是在交换功能(néng)设计时,模块实现的功能(néng)是用(yòng)户可(kě)以感知到并且关注的功能(néng)。如FPGA实现的分(fēn)组协议解析逻辑块、输出调度逻辑块、IEEE 1588端节点的时钟同步功能(néng)块以及操作系统内核中的TCP/IP协议栈等。这些功能(néng)都与用(yòng)户实现的分(fēn)组交换目标密切关联。FPGA OS和操作系统内核中用(yòng)户不可(kě)见且不关心的功能(néng)实现不能(néng)称為(wèi)模块,例如FPGA中的DMA引擎、DDR接口控制器以及操作系统中的FAST驱动程序等。
   (2)独立可(kě)重用(yòng)
     模块间是相互独立的,在功能(néng)实现上没有(yǒu)明确的功能(néng)依赖或调用(yòng)关系。模块之间只存在上下游关系,不存在父模块和子模块关系。不同的模块可(kě)能(néng)来自不同的开发人员,这些模块在不同的设计中可(kě)以重用(yòng),用(yòng)户通过不同模块的组合实现不同的分(fēn)组交换功能(néng)。因此硬件模块的设计必须遵循FAST流水線(xiàn)规范中对模块接口信号语法语义的要求,FAST软件UA模块设计必须基于FAST API,不能(néng)对其上游或下游模块的实现方法提出任何假设。
   (3)唯一标识
     FAST平台中每个模块都用(yòng)被称為(wèi)MID的8比特ID唯一标识,因此平台中最多(duō)支持256个模块。FAST规定0-127為(wèi)FAST流水線(xiàn)中硬件模块的MID标识,128-255為(wèi)FAST软件模块的标识。硬件模块在实例化时通过外部连線(xiàn)获取MID,软件UA在初始化注册时获取自己的MID。在软硬件协同分(fēn)组处理(lǐ)中,对分(fēn)组目的模块号(DMID)的设置是实现分(fēn)组处理(lǐ)路经控制的重要手段。
     FAST开源项目為(wèi)用(yòng)户提供了经过测试可(kě)直接使用(yòng)的通用(yòng)软硬件模块。其中FAST流水線(xiàn)中的通用(yòng)硬件模块包括:
     通用(yòng)分(fēn)组解析模块(GPP),实现以太网、ARP、IPv4、IPv6、ICMP/ICMPv6,TCP和UDP等协议的解析功能(néng);
     通用(yòng)关键字提取模块(GKE),实现IPv4/IPv6分(fēn)组的多(duō)元组(五元组+输入端口号等)信息的提取和查表关键字的生成;
     通用(yòng)查表模块(GME),实现TCAM查表功能(néng),将GKE提取的五元组信息映射為(wèi)14位的FlowID。
     通用(yòng)动作模块(GAC),根据FlowID查找动作表,获取分(fēn)组的目的输出接口或UA的MID(如果需要将分(fēn)组定向到软件处理(lǐ))。
     通用(yòng)输出引擎(GOE),实现基于令牌桶的输出分(fēn)组Meter,丢弃分(fēn)组计数等功能(néng);
     通用(yòng)的软件模块包括:
     OpenFlow通道UA(OXFP),在FAST硬件流水線(xiàn)与源端SDN控制器之间建立OpenFlow 1.3协议通道的连接,实现packet-in/packet-out分(fēn)组交换以及FlowMOD等消息的解析执行操作。
     不同用(yòng)户根据自身需求,已开发的FAST流水線(xiàn)模块还包括IEEE 1588 PTP协议解析模块、DDOS前端检测模块、TCP代理(lǐ)模块、Lisp协议封装/解封装模块、假冒源IPv6地址检测模块、测量分(fēn)组定时发送模块及传输协议跳变模块等。实现的软件UA包括IPv6路经MTU发现模块、DDOS检测控制模块、状态防火墙模块及LISP映射管理(lǐ)代理(lǐ)模块等。
     上述用(yòng)户自定义模块与FAST提供的基本软硬件模块组合,即可(kě)在标准OpenFlow交换基础上,扩充更多(duō)的用(yòng)户定制功能(néng),实现有(yǒu)状态的数据平面处理(lǐ)。
二、模块的组织与交换功能(néng)实现
     不失一般性,FAST平台中包含n个硬件模块和m个软件模块(n>0,m>0)。n个硬件模块组成硬件流水線(xiàn),到达分(fēn)组依次由硬件流水線(xiàn)的第1级(模块X1),第2级(模块X2)…第n级(模块Xn)进行处理(lǐ)。m个软件模块(UA)连接到FAST内核上,通过FAST API与其他(tā)软件模块和FAST硬件流水線(xiàn)进行分(fēn)组交换。
     FAST模块间交换的信息包括分(fēn)组信息(P)以及保留中间处理(lǐ)结果的元数据(MD)。元数据中包含了处理(lǐ)分(fēn)组的目的模块MID(DMID)、上一个处理(lǐ)该分(fēn)组的源模块MID(SMID)、以及分(fēn)组接收端口号、接收时间戳等信息。FPGA OS需要為(wèi)网络端口输入的分(fēn)组初始化其MD字段,例如填写接收端口号,标记接收时间戳等。
      分(fēn)组在FAST平台中处理(lǐ)的路经控制主要由MD中的DMID和SMID字段控制。例如FAST内核基于MD中的DMID和SMID实现分(fēn)组在不同软件UA与硬件流水線(xiàn)之间的交换。而SMID在路经选择中使用(yòng)主要是為(wèi)了灵活的实现分(fēn)组处理(lǐ)流程的编排。
     基于上图所示的模块组织方法,FAST平台可(kě)将已有(yǒu)开源模块连接起来实现通用(yòng)分(fēn)组交换功能(néng)。例如,当FAST流水線(xiàn)由GPP、GKE、GME、GAC和GOE五个模块依次连接组成,软件加载OpenFlow通道UA(OXFP)时,平台即可(kě)支持基本的OpenFlow1.3功能(néng)。
     用(yòng)户可(kě)以通过在已有(yǒu)的模块处理(lǐ)架构中插入新(xīn)的模块实现功能(néng)扩展。例如当需要在特定接口上(例如连接外部网络的端口0上)实现针对TCP的状态防火墙(SFW)功能(néng)时,一种方法是软件扩展,在linux用(yòng)户空间编写SFW功能(néng)的UA,通过配置GME的规则,将0号口进出的TCP分(fēn)组定向到SFW UA进行处理(lǐ),这种方法实现快速,不需要改动现有(yǒu)的硬件;另一种方法是硬件扩展,直接在FAST流水線(xiàn)中插入SFW硬件模块,这种方法处理(lǐ)性能(néng)高,适合熟悉硬件设计的研究人员。
     如何基于DMID和SMID实现分(fēn)组处理(lǐ)路经控制,如何选取合适的功能(néng)扩展方式以及功能(néng)扩展的实现细节将在后续文(wén)章中逐步介绍。
服務(wù)热線(xiàn)