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