0731-84728105
15116127200
FAST入門(6)FAST硬件流水線之二
發布時(shí)間:2018-07-16
   &n算吧bsp; FAST基本的流水線由5為可個通(tōng)用功能模塊組成,可支持基本的OpenFlow轉新筆發功能。通(tōng)過對基本流水線擴展,可以實現更加複雜的交換功從子能。
一、基本硬件流水線結構
     FA聽商ST基本流水線包含通(tōng)用分組解析(得用GPP)、通(tōng)用關鍵字提取(GKE)、通(t物謝ōng)用匹配引擎(GME)、通(tōng)窗作用轉發動作(GAC)和通(tōng)用輸出引擎(GOE票北)五個模塊,以及一個分組緩沖區(Buffer),如(報人rú)下圖所示。由于Buffer對軟件是呢喝不(bù)可見的,與具體的分組處理功能無關,因此不(bù)是FAS說去T的硬件模塊,也沒有MID編号。
    &n用劇bsp;GPP将到達的分組按照到達的先後順序将分組寫入Buffer緩存,同票道時(shí)提取分組的前128字節作為(wèi)分組頭向量(P數哥HV)随分組元數據(M)在模塊間傳遞,模塊GAC以此将在都分組從Buffer讀出,重新與元數據組合,發往GOE模塊。在GPP将分煙問組緩存,隻在流水線中傳遞PHV的優點是簡化流水線的我議設計,避免變長(cháng)報文對流水線處理性能的影響。
   &問舞nbsp; M和PHV在Veril相舊og中分别定義為(wèi)256位和1024位的向量,KEY定義為民吧(wèi)296位(IPv6五元組)的向量,因此上遊模塊使用1個時答要(shí)鐘(zhōng)周期即可将M、PHV以及KEY信息傳遞到下遊模塊。 北那
二、流水線的處理流程
   (1)GPP模塊
    和物; GPP模塊解析到達分組的L2-L4層協技了議,将解析結果寫入分組元數據中8比特的PS刀男T字段。PST編碼中0XXXXXXX編碼對應IP文個v4相關協議,1XXX XXXX編碼對應IPv6拿輛相關協議。0000 0000表示未識别的協議。
   &n師玩bsp; 目前GPP支持的PST編碼類型如(rú)下:
    務光 GPP模塊同時(shí)負責把分組送報文緩藍街沖區按照先進先出的方式緩存,同時(shí)生成每個分組的PHV,與分組元數舞用據一起向流水線下遊傳送。
   (2)購文GKE模塊
     GKE上就負責根據元數據中德PST值,從PHV中提取查表關鍵字。當分組PST确定時理姐(shí),關鍵字在PHV中具有确定的位置他要。例如(rú),對于提取IPv4/TCP/UDP報文的五元文相組,可離線計算得(de):IPv4源IP地址到以太網幀起始人老的偏移量為(wèi)26(208bit)字節,目的IP偏移量黑音為(wèi)30字節(240bit)。協議域自樹偏移為(wèi)23字節(184bit),T報都CP/UDP源和目的端口号分别為(wèi)34(272bit)和36子話(288bit)字節。顯然,如(rú)果在關鍵字提取時(shí)需要TC個科P的SYN等标志位,可以計算這些标志位的偏移量,直接賦值即可。用Verilo腦美g描述的IPv4五元組關鍵字提取代碼如(rú)下圖所示。 空學
     GK人服E支持對IPv4/IPv6的TCP/UDP/ICMP五元組提取(答影ICMP沒有端口号),其中IPv4和IPv跳議6的關鍵字具有不(bù)同的格式。
   (能近3)GME模塊
   厭街  GME模塊實現類似TCA謝購M的功能,将包含五元組的key與TCAM中的帶掩碼的五元個雜組規則進行匹配,返回匹配的FlowID,如(rú)果匹配不(場為bù)命中,FlowID為(wèi)全0。GME将返回的fl美嗎owID信息填寫到元數據的FlowID字段中。
     哥風;不(bù)同的FPGA平台上,GME的匹配有不(bù)機睡同的實現方法,以及不(bù)同的規則數目和規則寬度等木又。實現方式也可能是使用FPGA片外的TCAM芯片鐘機,或者FPGA片内的TCAM邏輯。
    短務; 由于GME輸入的KEY可能有多種謝呢格式,因此GME講KEY與元數據中協議類型(PST)字段合并組成查表關房鐵鍵字,軟件在配置查表規則時(shí),不(bù)同格式的規對光則前面要帶上不(bù)同的PST編碼。 水問
   (4)GAC模塊
    &nb輛海sp;GAC模塊包含Action表,通(tōng)常表花山項的大(dà)小與FlowID的寬度有關。例如(rú)系統支持4K習錯條五元組标識的流,那麼FlowID的寬度為(wèi)12,在GAC中的A房煙ction表也有4K項。每個Action表包兵喝含對分組的轉發操作,包括丢失,轉發到特定輸出端口,或送到特定的軟件U照紅A處理等。GAC根據轉發操作相關更新分組元數據中的字段,信息同時(s花員hí)将分組從Buffer中讀出,與元數據一起發給下知國遊模塊。
    體筆; GAC實現對分組元數據中OutPort、Discar金暗d、DMID等域的修改,決定分組的轉發交換短拍行為(wèi)。
   (5)GOE模城時塊
    理唱 GOE模塊負責FAST流水線輸出分組的件草處理,主要包含以下2個功能。一是根據配置對FlowID/DMID标也美識流的令牌桶限速,例如(rú)作為(wèi紙北)OpenFlow交換機實現時(shí),GOE可以控制Pack媽唱et-in分組(DMID為(wèi)OpenFlow通(tōn文明g)道控制器(qì))的流量,二是對丢棄分組的計數。由于分組在Buffer中是人數順序存儲的,因此即使GAC之前的模塊不(b會麗ù)能随意丢棄分組或者分組元數據。GPP等模塊如(放好rú)果決策要丢棄分組時(shí),需将分組元數據中火書的Discard位置位,将DMID設置為(wèi)個會GOE的MID,這樣分組就會(huì)旁路微也掉GOE模塊前其他(tā)模塊的處理,直到G站上OE模塊。GOE模塊實現對分組的丢棄,并進行統計計數。
   &nb我關sp; 顯然,FAST基本流水線隻實現了最基本的分組處理功能,如科間(rú)何通(tōng)過流水線擴展實現更加複雜的分組慢到處理将在後續文章中介紹。