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