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