軟硬件協同的分組處理是FAST區別其他數據平面開源項目的最重要的特點。模塊(Module)是FAST平臺中交換功能定義、資源分配以及代碼重用的基本單元,特定分組處理功能到軟硬件模塊的映射也是FAST軟硬件協同分組處理的關鍵。
一、FAST模塊簡介
FAST中的模塊是能夠實現特定網絡處理功能的,具有唯一標識的,相對獨立的一個軟件程序(UA)或FAST流水線中的硬件邏輯塊。FAST模塊能夠按需連接,組成上下游關系,實現分組處理的流水線。FAST模塊具有一些共有的屬性:
(1)用戶可見
模塊的用戶可見是在交換功能設計時,模塊實現的功能是用戶可以感知到并且關注的功能。如FPGA實現的分組協議解析邏輯塊、輸出調度邏輯塊、IEEE 1588端節點的時鐘同步功能塊以及操作系統內核中的TCP/IP協議棧等。這些功能都與用戶實現的分組交換目標密切關聯。FPGA OS和操作系統內核中用戶不可見且不關心的功能實現不能稱為模塊,例如FPGA中的DMA引擎、DDR接口控制器以及操作系統中的FAST驅動程序等。
(2)獨立可重用
模塊間是相互獨立的,在功能實現上沒有明確的功能依賴或調用關系。模塊之間只存在上下游關系,不存在父模塊和子模塊關系。不同的模塊可能來自不同的開發人員,這些模塊在不同的設計中可以重用,用戶通過不同模塊的組合實現不同的分組交換功能。因此硬件模塊的設計必須遵循FAST流水線規范中對模塊接口信號語法語義的要求,FAST軟件UA模塊設計必須基于FAST API,不能對其上游或下游模塊的實現方法提出任何假設。
(3)唯一標識
FAST平臺中每個模塊都用被稱為MID的8比特ID唯一標識,因此平臺中最多支持256個模塊。FAST規定0-127為FAST流水線中硬件模塊的MID標識,128-255為FAST軟件模塊的標識。硬件模塊在實例化時通過外部連線獲取MID,軟件UA在初始化注冊時獲取自己的MID。在軟硬件協同分組處理中,對分組目的模塊號(DMID)的設置是實現分組處理路經控制的重要手段。
FAST開源項目為用戶提供了經過測試可直接使用的通用軟硬件模塊。其中FAST流水線中的通用硬件模塊包括:
通用分組解析模塊(GPP),實現以太網、ARP、IPv4、IPv6、ICMP/ICMPv6,TCP和UDP等協議的解析功能;
通用關鍵字提取模塊(GKE),實現IPv4/IPv6分組的多元組(五元組+輸入端口號等)信息的提取和查表關鍵字的生成;
通用查表模塊(GME),實現TCAM查表功能,將GKE提取的五元組信息映射為14位的FlowID。
通用動作模塊(GAC),根據FlowID查找動作表,獲取分組的目的輸出接口或UA的MID(如果需要將分組定向到軟件處理)。
通用輸出引擎(GOE),實現基于令牌桶的輸出分組Meter,丟棄分組計數等功能;
通用的軟件模塊包括:
OpenFlow通道UA(OXFP),在FAST硬件流水線與源端SDN控制器之間建立OpenFlow 1.3協議通道的連接,實現packet-in/packet-out分組交換以及FlowMOD等消息的解析執行操作。
不同用戶根據自身需求,已開發的FAST流水線模塊還包括IEEE 1588 PTP協議解析模塊、DDOS前端檢測模塊、TCP代理模塊、Lisp協議封裝/解封裝模塊、假冒源IPv6地址檢測模塊、測量分組定時發送模塊及傳輸協議跳變模塊等。實現的軟件UA包括IPv6路經MTU發現模塊、DDOS檢測控制模塊、狀態防火墻模塊及LISP映射管理代理模塊等。
上述用戶自定義模塊與FAST提供的基本軟硬件模塊組合,即可在標準OpenFlow交換基礎上,擴充更多的用戶定制功能,實現有狀態的數據平面處理。
二、模塊的組織與交換功能實現
不失一般性,FAST平臺中包含n個硬件模塊和m個軟件模塊(n>0,m>0)。n個硬件模塊組成硬件流水線,到達分組依次由硬件流水線的第1級(模塊X1),第2級(模塊X2)…第n級(模塊Xn)進行處理。m個軟件模塊(UA)連接到FAST內核上,通過FAST API與其他軟件模塊和FAST硬件流水線進行分組交換。
FAST模塊間交換的信息包括分組信息(P)以及保留中間處理結果的元數據(MD)。元數據中包含了處理分組的目的模塊MID(DMID)、上一個處理該分組的源模塊MID(SMID)、以及分組接收端口號、接收時間戳等信息。FPGA OS需要為網絡端口輸入的分組初始化其MD字段,例如填寫接收端口號,標記接收時間戳等。
分組在FAST平臺中處理的路經控制主要由MD中的DMID和SMID字段控制。例如FAST內核基于MD中的DMID和SMID實現分組在不同軟件UA與硬件流水線之間的交換。而SMID在路經選擇中使用主要是為了靈活的實現分組處理流程的編排。
基于上圖所示的模塊組織方法,FAST平臺可將已有開源模塊連接起來實現通用分組交換功能。例如,當FAST流水線由GPP、GKE、GME、GAC和GOE五個模塊依次連接組成,軟件加載OpenFlow通道UA(OXFP)時,平臺即可支持基本的OpenFlow1.3功能。
用戶可以通過在已有的模塊處理架構中插入新的模塊實現功能擴展。例如當需要在特定接口上(例如連接外部網絡的端口0上)實現針對TCP的狀態防火墻(SFW)功能時,一種方法是軟件擴展,在linux用戶空間編寫SFW功能的UA,通過配置GME的規則,將0號口進出的TCP分組定向到SFW UA進行處理,這種方法實現快速,不需要改動現有的硬件;另一種方法是硬件擴展,直接在FAST流水線中插入SFW硬件模塊,這種方法處理性能高,適合熟悉硬件設計的研究人員。
如何基于DMID和SMID實現分組處理路經控制,如何選取合適的功能擴展方式以及功能擴展的實現細節將在后續文章中逐步介紹。