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