0731-84728105
15116127200
FAST入門(4)軟硬協同分組處理模型之(zhī)二
發布時(shí)間:2018-07-04
     模塊是(shì)FAST平台實現分組處理的(de)基本單元,軟硬件模塊間高效的(de)信息交互對實現軟硬件協同分組處理具有重要(yào / yāo)意義。元數據(Metadata)是(shì)FAST平台中模塊間信息交換的(de)核心數據結構,是(shì)控制分組在(zài)軟硬件模塊間的(de)處理路徑以(yǐ)及信息交換的(de)關鍵。
一、軟硬件協同分組處理流程
   FAST平台中傳輸的(de)每個(gè)分組都攜帶一個(gè)元數據塊,用于(yú)存放分組的(de)接收信息(如端口号,接收時(shí)刻等)、路徑控制信息(如下一個(gè)模塊号DMID)、處理的(de)中間狀态(如流分類的(de)标識FlowID)以(yǐ)及用戶自定義狀态信息等。
     FPGA OS必須爲(wéi / wèi)每個(gè)從端口接收的(de)分組創建并初始化一個(gè)元數據塊,每個(gè)軟件UA也(yě)必須爲(wéi / wèi)其産生的(de)分組構建并初始化一個(gè)元數據塊。當硬件模塊把分組DMID設置爲(wéi / wèi)某個(gè)UA的(de)MID,或者UA把分組的(de)DMID設置爲(wéi / wèi)某個(gè)硬件模塊的(de)MID時(shí),分組需要(yào / yāo)攜帶元數據穿越軟硬件界面,如下圖所示。假設硬件流水線由X、Y、Z三個(gè)模塊組成,作爲(wéi / wèi)流水線最後一級的(de)模塊Z通常爲(wéi / wèi)輸出(chū)引擎,FPGA OS将DMID爲(wéi / wèi)Z的(de)分組送輸出(chū)接口發出(chū)。
     如果平台加載了(le/liǎo)一個(gè)軟件程序A,功能是(shì)對p1接口輸入,p2接口輸出(chū)的(de)所有分組進行安全檢查,那麽A可向模塊Z配置規則,将所有輸入接口爲(wéi / wèi)p1,輸出(chū)接口爲(wéi / wèi)p2的(de)分組的(de)DMID設置爲(wéi / wèi)A。因此模塊Z會将分組p的(de)DMID設置爲(wéi / wèi)A,FPGA OS會将p送到(dào)軟件模塊A進行處理,同時(shí)将p的(de)SMID設置爲(wéi / wèi)Z,表示這(zhè)是(shì)硬件模塊Z發出(chū)的(de)分組。
     當A完成對p的(de)安全檢查需要(yào / yāo)繼續從p2發出(chū)分組p時(shí),可将p的(de)DMID設置爲(wéi / wèi)Z,将p再次發送回硬件流水線。雖然p首先經過了(le/liǎo)硬件流水線中的(de)模塊X和(hé / huò)Y,但由于(yú)DMID爲(wéi / wèi)Z,所以(yǐ)X和(hé / huò)Y不(bù)會處理分組p,而(ér)是(shì)将其送到(dào)Z處理。Z發現p的(de)SMID爲(wéi / wèi)A,表示已經過安全檢查,因此會将分組DMID修改爲(wéi / wèi)Z,由FPGA OS從端口發出(chū)。
二、軟硬件協同處理中的(de)信息交互
     元數據中除了(le/liǎo)DMID和(hé / huò)SMID字段外,還定義了(le/liǎo)其他(tā)字段用于(yú)模塊間信息的(de)交互。FAST2.0規範定義的(de)元數據包含了(le/liǎo)14個(gè)字段,如下表所示:
   根據系統的(de)性能要(yào / yāo)求,開發周期,開發人(rén)員喜好(軟件開發或硬件開發),可将需要(yào / yāo)實現的(de)網絡功能劃分到(dào)不(bù)同的(de)軟硬件模塊中實現(這(zhè)一點後面還會詳細介紹),而(ér)軟硬件模塊間狀态信息的(de)交互需要(yào / yāo)在(zài)元數據中攜帶,例如:
     (1)PST字段:硬件可進行分組解析,包括網絡協議類型或者是(shì)應用層解析,并将解析的(de)結果通過PST編碼送UA,實現将UA分組解析功能卸載到(dào)硬件實現;
     TSN在(zài)轉發流程中擴充的(de)單流過濾和(hé / huò)管控(PSFP)機制主要(yào / yāo)實現三個(gè)功能,一是(shì)單流測量,使用令牌桶機制測量到(dào)達的(de)每條流得流量和(hé / huò)最大(dà)幀長度是(shì)否超過預定合約;二是(shì)時(shí)間門控隊列選擇機制,即将全局時(shí)間(分組到(dào)達的(de)時(shí)刻)加入隊列選擇算法中考慮,重新計算分組内部優先級,并根據内部優先級而(ér)不(bù)是(shì)分組VLAN頭或IP頭中攜帶的(de)外部優先級選擇輸出(chū)隊列号;三是(shì)入隊測量,基于(yú)令牌桶機制對進入特定隊列的(de)流量進行測量,保證進入相應隊列緩存的(de)分組流量滿足一定的(de)合約。
     (2)FlowID:硬件實現對分組的(de)分類,然後将分類的(de)結果送UA處理,即實現将軟件的(de)流分類功能卸載到(dào)硬件實現;
     (3)RXTS:硬件實現對分組接收的(de)時(shí)間進行精确标記,軟件UA可以(yǐ)根據這(zhè)個(gè)時(shí)間戳進行時(shí)間敏感的(de)功能處理,這(zhè)對于(yú)精準網絡測量和(hé / huò)IEEE1588時(shí)間同步控制的(de)實現十分關鍵;
     (4)UDM:用戶根據需要(yào / yāo)使用16字節的(de)UDM字段實現UA和(hé / huò)特定硬件模塊之(zhī)間的(de)信息傳遞,例如當硬件模塊按照匹配的(de)規則将分組送給軟件UA時(shí),可以(yǐ)攜帶匹配的(de)規則号或軟件預先設置的(de)cookie信息等。軟件在(zài)将分組發送給硬件時(shí),也(yě)可以(yǐ)攜帶一些控制硬件處理的(de)信息,如定時(shí)發送的(de)信息等。關于(yú)UDM的(de)使用會在(zài)後續的(de)實際案例中更加詳細的(de)介紹。
     因此在(zài)FAST架構下,軟件UA可通過元數據與硬件模塊交換更加豐富的(de)甚至是(shì)用戶自定義的(de)狀态信息。與目前的(de)Socket、Netlink,Libnet/Libpcap、DPDK等網絡編程的(de)API相比,FASTAPI具備更強的(de)軟硬件分組協同分組能力,更加容易的(de)滿足用戶定制的(de)處理需求。