購讀 FAST基本的流水線由5個通用功能模塊門知組成,可支持基本的OpenFlow轉發功能。通過對基本流水線擴展,可樂木以實現更加複雜(zá)的交換功能。
一(yī)、基本硬件流水線結構
FAST務可基本流水線包含通用分(fēn)組解析(GPP)、通用關鍵字提取(GKE)的知、通用匹配引擎(GME)、通用轉發動作(GAC)和通用輸出引區分擎(GOE)五個模塊,以及一(yī)個分(fēn人小)組緩沖區(Buffer),如下(xià)圖所示。務們由于Buffer對軟件是不可見的,與具體(tǐ)的分(fēn)組處理功能笑聽無關,因此不是FAST的硬件模塊,也沒有MID兒火編号。
GPP将到師用達的分(fēn)組按照到達的先後順序将分(fēn)組寫入Buffer緩存,同問森時提取分(fēn)組的前128字節作爲分(fēn)組頭向量(PHV)随分裡音(fēn)組元數據(M)在模塊間傳遞,模塊GAC以此将分(f土行ēn)組從Buffer讀出,重新與元數據組合,發往G內些OE模塊。在GPP将分(fēn)組緩存,隻樹年在流水線中(zhōng)傳遞PHV的優點是簡化流水線的設計,避免變長報文對場兵流水線處理性能的影響。
&nb裡冷sp; M和PHV在Verilo做我g中(zhōng)分(fēn)别定義爲256位和1024位的她司向量,KEY定義爲296位(IPv6五元組)的向量,因此上遊模線他塊使用1個時鍾周期即可将M、PHV以及KEY信息傳我花遞到下(xià)遊模塊。
二、流水線的處理流程
科物(1)GPP模塊
GPP從遠模塊解析到達分(fēn)組的L2-L4層協議,将解析結果寫入分(fēn)組元紙可數據中(zhōng)8比特的PST字段。PS場紅T編碼中(zhōng)0XXXXXXX編碼對應IPv4相關協議,1XXX X喝間XXX編碼對應IPv6相關協議。0000 0000表示未識别的雨嗎協議。
&森輛nbsp; 目前GPP支持的P放西ST編碼類型如下(xià):
GPP模塊子校同時負責把分(fēn)組送報文緩沖區按照先進先出的方式緩存,同時生(shēn市山g)成每個分(fēn)組的PHV,與分(fēn)組元數據一(yī)關數起向流水線下(xià)遊傳送。
(2)森金GKE模塊
&草就nbsp; GKE負責根據元數據中(zhōng事老)德PST值,從PHV中(zhōng)提取查表關鍵字。當分(fē能舊n)組PST确定時,關鍵字在PHV中(zhōng)具有确定的位置。例也信如,對于提取IPv4/TCP/UDP報文的五元組,可離(lí)快紅線計算得:IPv4源IP地址到以太網幀起始校通的偏移量爲26(208bit)字節,目的IP偏移量爲30字節(2鄉醫40bit)。協議域偏移爲23字節(184bit),TCP/UDP源和目的都間端口号分(fēn)别爲34(272bit)和36(288bit)字節。林這顯然,如果在關鍵字提取時需要TCP的SYN等标人城志(zhì)位,可以計算這些标志(zhì)位的偏移黃得量,直接賦值即可。用Verilog描述的IPv4五元組關鍵字提取代碼如下(制票xià)圖所示。
&nbs你就p;GKE支持對IPv4/IPv6的TCP南少/UDP/ICMP五元組提取(ICMP沒有端口号),其中(高新zhōng)IPv4和IPv6的關鍵字具有不同的格式。
 紙外;(3)GME模塊
&nbs國票p; GME模塊實現類似TCAM微用的功能,将包含五元組的key與TCAM中(zhōng)的帶掩碼的五元組規則進行匠服匹配,返回匹配的FlowID,如果匹配不命中(zhōng),票這FlowID爲全0。GME将返回的flowID信息填寫到元數據的F熱朋lowID字段中(zhōng)。
理通不同的FPGA平台上,GME的匹配有不同的實冷費現方法,以及不同的規則數目和規則寬度等。友近實現方式也可能是使用FPGA片外(wài)的TCAM芯片,或視的者FPGA片内的TCAM邏輯。
愛議由于GME輸入的KEY可能有多種格式,因此G日通ME講KEY與元數據中(zhōng)協議類型(PST)字段合并組成查表關鍵字朋拿,軟件在配置查表規則時,不同格式的規則前面要帶上不同的PST編碼。
數筆
(4)GAC模塊
 姐錢; GAC模塊包含Action表,通常表項的雜是大(dà)小(xiǎo)與FlowID的寬度有關。例如系統支持4K條五元組雜男标識的流,那麽FlowID的寬度爲12,在GAC中(zhōng)的Ac業廠tion表也有4K項。每個Action表包含對海樹分(fēn)組的轉發操作,包括丢失,轉發到特定輸出端口,或送到特定的國光軟件UA處理等。GAC根據轉發操作相關更新雜著分(fēn)組元數據中(zhōng)的字段,信息同時将分(f司村ēn)組從Buffer中(zhōng)讀出,與元數醫明據一(yī)起發給下(xià)遊模塊。
&n高場bsp; GAC實現對分(fēn)組開也元數據中(zhōng)OutPort、Discard、DMID等域的修改,決女現定分(fēn)組的轉發交換行爲。
(5)美計GOE模塊
&n師做bsp;GOE模塊負責FAST流水線輸出分(fēn)組的處月些理,主要包含以下(xià)2個功能。一(yī公自)是根據配置對FlowID/DMID标識流的令牌桶限速,例如作得低爲OpenFlow交換機實現時,GOE可以控制Packet-in亮術分(fēn)組(DMID爲OpenFlow通道控制器)的流量森場,二是對丢棄分(fēn)組的計數。由于分(fēn)組在Buffer中(z著動hōng)是順序存儲的,因此即使GAC之前的模塊不能随意丢棄分(f飛北ēn)組或者分(fēn)組元數據。GPP等模塊如果決著都策要丢棄分(fēn)組時,需将分(fēn)組元數據中(zhōng)的Dis明車card位置位,将DMID設置爲GOE的MID,這樣分(f路山ēn)組就會旁路掉GOE模塊前其他模塊的處理,直到GO鐘唱E模塊。GOE模塊實現對分(fēn)組的丢棄,并進行統計計數。
顯然知說,FAST基本流水線隻實現了最基本的分(fēn)組處理功能,如何通過女工流水線擴展實現更加複雜(zá)的分(fēn)組處理将在土好後續文章中(zhōng)介紹。