视频国产一区二区三区-久精品视频在线-HD免费看片,欧美一级少妇,闺房里的呻吟h玉势,tai9国产一区二区

0731-84728105
15116127200
FAST入門(6)FAST硬件流水線之二
發(fā)布時間:2018-07-16
     FAST基本的流水線由5個通用功能模塊組成,可支持基本的OpenFlow轉(zhuǎn)發(fā)功能。通過對基本流水線擴展,可以實現(xiàn)更加復雜的交換功能。
一、基本硬件流水線結(jié)構(gòu)
     FAST基本流水線包含通用分組解析(GPP)、通用關鍵字提?。℅KE)、通用匹配引擎(GME)、通用轉(zhuǎn)發(fā)動作(GAC)和通用輸出引擎(GOE)五個模塊,以及一個分組緩沖區(qū)(Buffer),如下圖所示。由于Buffer對軟件是不可見的,與具體的分組處理功能無關,因此不是FAST的硬件模塊,也沒有MID編號。
     GPP將到達的分組按照到達的先后順序?qū)⒎纸M寫入Buffer緩存,同時提取分組的前128字節(jié)作為分組頭向量(PHV)隨分組元數(shù)據(jù)(M)在模塊間傳遞,模塊GAC以此將分組從Buffer讀出,重新與元數(shù)據(jù)組合,發(fā)往GOE模塊。在GPP將分組緩存,只在流水線中傳遞PHV的優(yōu)點是簡化流水線的設計,避免變長報文對流水線處理性能的影響。
     M和PHV在Verilog中分別定義為256位和1024位的向量,KEY定義為296位(IPv6五元組)的向量,因此上游模塊使用1個時鐘周期即可將M、PHV以及KEY信息傳遞到下游模塊。
二、流水線的處理流程
   (1)GPP模塊
     GPP模塊解析到達分組的L2-L4層協(xié)議,將解析結(jié)果寫入分組元數(shù)據(jù)中8比特的PST字段。PST編碼中0XXXXXXX編碼對應IPv4相關協(xié)議,1XXX XXXX編碼對應IPv6相關協(xié)議。0000 0000表示未識別的協(xié)議。
     目前GPP支持的PST編碼類型如下:
     GPP模塊同時負責把分組送報文緩沖區(qū)按照先進先出的方式緩存,同時生成每個分組的PHV,與分組元數(shù)據(jù)一起向流水線下游傳送。
   (2)GKE模塊
     GKE負責根據(jù)元數(shù)據(jù)中德PST值,從PHV中提取查表關鍵字。當分組PST確定時,關鍵字在PHV中具有確定的位置。例如,對于提取IPv4/TCP/UDP報文的五元組,可離線計算得:IPv4源IP地址到以太網(wǎng)幀起始的偏移量為26(208bit)字節(jié),目的IP偏移量為30字節(jié)(240bit)。協(xié)議域偏移為23字節(jié)(184bit),TCP/UDP源和目的端口號分別為34(272bit)和36(288bit)字節(jié)。顯然,如果在關鍵字提取時需要TCP的SYN等標志位,可以計算這些標志位的偏移量,直接賦值即可。用Verilog描述的IPv4五元組關鍵字提取代碼如下圖所示。
     GKE支持對IPv4/IPv6的TCP/UDP/ICMP五元組提?。↖CMP沒有端口號),其中IPv4和IPv6的關鍵字具有不同的格式。
   (3)GME模塊
     GME模塊實現(xiàn)類似TCAM的功能,將包含五元組的key與TCAM中的帶掩碼的五元組規(guī)則進行匹配,返回匹配的FlowID,如果匹配不命中,F(xiàn)lowID為全0。GME將返回的flowID信息填寫到元數(shù)據(jù)的FlowID字段中。
     不同的FPGA平臺上,GME的匹配有不同的實現(xiàn)方法,以及不同的規(guī)則數(shù)目和規(guī)則寬度等。實現(xiàn)方式也可能是使用FPGA片外的TCAM芯片,或者FPGA片內(nèi)的TCAM邏輯。
     由于GME輸入的KEY可能有多種格式,因此GME講KEY與元數(shù)據(jù)中協(xié)議類型(PST)字段合并組成查表關鍵字,軟件在配置查表規(guī)則時,不同格式的規(guī)則前面要帶上不同的PST編碼。
   (4)GAC模塊
     GAC模塊包含Action表,通常表項的大小與FlowID的寬度有關。例如系統(tǒng)支持4K條五元組標識的流,那么FlowID的寬度為12,在GAC中的Action表也有4K項。每個Action表包含對分組的轉(zhuǎn)發(fā)操作,包括丟失,轉(zhuǎn)發(fā)到特定輸出端口,或送到特定的軟件UA處理等。GAC根據(jù)轉(zhuǎn)發(fā)操作相關更新分組元數(shù)據(jù)中的字段,信息同時將分組從Buffer中讀出,與元數(shù)據(jù)一起發(fā)給下游模塊。
     GAC實現(xiàn)對分組元數(shù)據(jù)中OutPort、Discard、DMID等域的修改,決定分組的轉(zhuǎn)發(fā)交換行為。
   (5)GOE模塊
     GOE模塊負責FAST流水線輸出分組的處理,主要包含以下2個功能。一是根據(jù)配置對FlowID/DMID標識流的令牌桶限速,例如作為OpenFlow交換機實現(xiàn)時,GOE可以控制Packet-in分組(DMID為OpenFlow通道控制器)的流量,二是對丟棄分組的計數(shù)。由于分組在Buffer中是順序存儲的,因此即使GAC之前的模塊不能隨意丟棄分組或者分組元數(shù)據(jù)。GPP等模塊如果決策要丟棄分組時,需將分組元數(shù)據(jù)中的Discard位置位,將DMID設置為GOE的MID,這樣分組就會旁路掉GOE模塊前其他模塊的處理,直到GOE模塊。GOE模塊實現(xiàn)對分組的丟棄,并進行統(tǒng)計計數(shù)。
     顯然,F(xiàn)AST基本流水線只實現(xiàn)了最基本的分組處理功能,如何通過流水線擴展實現(xiàn)更加復雜的分組處理將在后續(xù)文章中介紹。