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