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