FAST入门(7)FAST硬件流水線(xiàn)之三
发布时间:2018-07-23
针对不同应用(yòng)场景在不同时间内对交换功能(néng)的需求不一致的特点,FAST流水線(xiàn)支持利用(yòng)FPGA现场可(kě)编程特性,动态增加和卸载流水線(xiàn)模块以满足不断变化需求的特性。
一、硬件流水線(xiàn)的扩展
FAST基本流水線(xiàn)包含通用(yòng)分(fēn)组解析(GPP)、通用(yòng)关键字提取(GKE)、通用(yòng)匹配引擎(GME)、通用(yòng)转发动作(GAC)和通用(yòng)输出引擎(GOE)五个模块。基于这五个模块搭建的基本架构,FAST流水線(xiàn)支持动态模块的插入和删除,如下图所示。
在GAC之前的流水線(xiàn)称為(wèi)Ingress流水線(xiàn),主要在输入端口的上下文(wén)中对分(fēn)组进行转发决策处理(lǐ)。由于分(fēn)组元数据到达GAC模块后,可(kě)根据GME的匹配结果查表的到分(fēn)组输出的接口号(或软件UA编号),因此在GAC之后分(fēn)组在输出接口的上下文(wén)中处理(lǐ),因此GAC模块之后的流水線(xiàn)称為(wèi)Egress流水線(xiàn)。
FAST流水線(xiàn)的功能(néng)扩展主要通过增加以下几类硬件模块:
(1)用(yòng)户定义的解析(UDP)模块
在GPP模块之后增加一个或多(duō)个UDP模块,可(kě)实现对GPP不支持的其他(tā)协议进行解析,并根据解析结果修改元数据中的协议类型字段PST。一个UDP模块在修改完PST后,将DMID设置為(wèi)GKE,旁路掉后续的UDP,即每个分(fēn)组最多(duō)支持一个UDP模块的协议分(fēn)析。
(2)UKE模块
在GKE模块之后增加用(yòng)户定义的关键字提取模块UKE,扩展支持GKE不支持的关键字提取能(néng)力,UKE可(kě)以修改KEY字段。通常如果一个UKE模块完成KEY的提取和修改后,直接将DMID设置為(wèi)GME,旁路掉后续的UKE(如果有(yǒu)的话),即每个分(fēn)组最多(duō)支持一个UKE模块的处理(lǐ)
(3)UDA模块
UDA模块主要实现用(yòng)户定义的action处理(lǐ)。UDA模块插在GME和GAC之间可(kě)以扩充Ingress流水線(xiàn)的处理(lǐ)功能(néng),插入在GAC和GOE之间可(kě)以扩充Egress流水線(xiàn)的处理(lǐ)功能(néng)。位于GAC之前和之后的UDA模块有(yǒu)两点不同。一是UDA之前的只能(néng)对分(fēn)组的元数据进行操作,而GAC之后的UDA可(kě)以直接修改整个分(fēn)组;二是GAC之前的UDA是在分(fēn)组输入的上下文(wén)处理(lǐ)分(fēn)组,而GAC之后的UDA是在分(fēn)组输出端口的上下文(wén)中处理(lǐ)分(fēn)组。
(4)UDO模块
UDO模块物(wù)理(lǐ)位置并不在FAST流水線(xiàn)之内,而是位于FPGA OS中分(fēn)组最终从FPGA引脚输出之前。由于UDO的位置位于分(fēn)组输出调度之后,因此UDO处理(lǐ)的分(fēn)组在输出时不存在任何阻塞,能(néng)够保证分(fēn)组离开后到最终输出到链路上有(yǒu)一个确定的延时。因此UDO可(kě)以看作是FAST流水線(xiàn)在FPGA OS中的一个“飞地”。其主要作用(yòng)是获取精确的分(fēn)组输时间戳,可(kě)以支持IEEE 1588透明时钟的计算或者网络测量中精确发送时间的获取。
FAST流水線(xiàn)扩展模块的设计必须遵循标准的模块接口定义,而且扩展插入的模块对上下游模块都是透明的,即流水線(xiàn)中原有(yǒu)的上下游模块在都应该感知不到新(xīn)模块的插入。
二、硬件流水線(xiàn)扩展的示例
通过对FAST硬件流水線(xiàn)进行扩展,可(kě)以支持在原有(yǒu)的交换平台中扩充支持新(xīn)的协议以及新(xīn)的分(fēn)组处理(lǐ)机制。例如下图分(fēn)别介绍了通过扩展UDP和UDA模块支持IEEE 1588,L3转发控制以及安全网关功能(néng)的例子。
在(a)中,由于GPP协议无法识别封装在特定UDP端口号中传输的IEEE 1588的PTP协议,因此GPP处理(lǐ)后PST字段表示的分(fēn)组类型為(wèi)ETH/IP/UDP,如果交换平台需要支持IEEE 1588的PTP协议,需要插入一个UDP模块,对使用(yòng)319和320端口的UDP分(fēn)组进行解析。如果UDP目地端口号為(wèi)319,即UDP内部包含需要交换平台计算透明时钟的事件消息(sync,delay_req),这些消息可(kě)在PST中标记,UDO会根据PST的标记跟新(xīn)分(fēn)组的透明时钟。如果目的端口号為(wèi)320,则其中包含不需要透明时钟计算的PTP通用(yòng)消息,UDP会进一步分(fēn)析消息类型,将分(fēn)组转发(follow_up消息或delay_resp消息),或送特定的软件UA处理(lǐ)(BMC协议消息)。
在(b)中,增加UDA1实现输出组播复制功能(néng),根据组播分(fēn)组元数据中Outport携带的组播组信息查表获得输出接口集合,将分(fēn)组一次复制发送到每个输出接口,而UDA1实现绑定到特定输出接口的ACL过滤功能(néng),UDA3实现对输出分(fēn)组的修改,例如修改目的MAC等。因此通过扩展Egress流水線(xiàn)中的UDA模块,可(kě)以使FAST流水線(xiàn)支持三层的单播和组播转发功能(néng)。显然,每个新(xīn)增的UDA模块内部也包含相应的控制表格,这些表格会通过相应的软件配置。
在(c)中,可(kě)在Ingress流水線(xiàn)中增加连接管理(lǐ)和复杂的流量统计功能(néng),实现与特定输入端口绑定的安全控制。利用(yòng)连接管理(lǐ)功能(néng),可(kě)以维护五元组标识的TCP/UDP/ICMP的连接状态,实现状态防火墙,并為(wèi)其他(tā)基于流的middlebox功能(néng)提供流的状态信息。而利用(yòng)复杂的流量统计功能(néng)可(kě)以检测到特定输出接口甚至是到特定服務(wù)器流量的非对称性,用(yòng)于早期的发现DDoS攻击。而在Egress流水線(xiàn)中增加流量过滤功能(néng),可(kě)对具有(yǒu)特定属性分(fēn)组进行过滤,例如在“勒索病毒”爆发期间,可(kě)以针对该病毒的特点快速部署硬件过滤模块,对传播病毒的恶意分(fēn)组进行过滤,而过了“勒索病毒”爆发期以后,该模块可(kě)以删除以节约资源用(yòng)于其他(tā)功能(néng)的实现。
上图中三个例子只是对通过模块扩展实现功能(néng)扩展的示意。后续会更加深入的介绍基于软硬件协同方式快速实现特定处理(lǐ)功能(néng)的方法。