OpenFlow Switch學習筆記(五)——Group Table、Meter Table及Counters


  本文主要詳述OpenFlow Switch的另外兩個主要組件——Group Table和Meter Table,它們在整個OpenFlow Swtich Processing中也起到了重要作用。

 

1、Group Table

   Group Table給OpenFlow Switch提供了更加高級的數據包轉發特性(比如select或者all),其由多個Group Entries組成,而每個Group Entry結構如下所示:

                  

 每個Group Entry根據其Group Identifier來唯一定位,每項具體說明如下:

1)Group Identifier:一個32位無符號整數,Group Entry的唯一標識。

2)Group Type:決定了Group的語義,通俗地講,就是表明了對數據包的處理行為,具體參考下文。

3)Counters:被該Group Entry處理過的數據包的統計量。

4)Action Buckets:一個Action Bucket的有序列表,每個Action Bucket又包含了一組Action集合及其參數。

 

2、Group Types

  一個OpenFlow Switch不需要支持下列所有的Group Types,但必須支持下面加黑的類型:

1)all:Group Table中所有的Action Buckets都會被執行,這種類型的Group Table主要用於數據包的多播或者廣播。數據包對於每一個Action Bucket都會被克隆一份,進而克隆體被處理。如果一個Action Bucket顯示地將數據包發回其 ingress port,那么該數據包克隆體會被丟棄;但是,如果確實需要將數據包的一個克隆體發送回其 ingress port,那么該Group Table里就需要一個額外的Action Bucket,它包含了一個 output action 將數據包發送到 OFPP_IN_PORT Reserved Port。

2)select:僅僅執行Group Table中的某一個Action Bucket,基於OpenFlow Switch的調度算法,比如基於用戶某個配置項的hash或者簡單的round robin,所有的配置信息對於OpenFlow Switch來說都是屬於外部的。當將數據包發往一個當前down掉的port時,Switch能將該數據包替代地發送給一個預留集合(能將數據包轉發到當前live的ports上),而不是毫無顧忌地繼續將數據包發送給這個down的port,這或許可以明顯降低由於一個down的link或者switch帶來的災難。

3)indirect:執行Group Table中已經定義好的Action Bucket,這種類型的Group Table僅僅只支持一個Action Bucket。允許多個Flow Entries或者Groups 指向同一個通用的 Group Identifier,支持更快更高效的聚合。這種類型的Group Table與那些僅有一個Action Bucket的Group Table是一樣的。

4)fast failover:執行第一個live的Action Bucket,每一個Action Bucket都關聯了一個指定的port或者group來控制它的存活狀態。Buckets會依照Group順序依次被評估,並且第一個關聯了一個live的port或者group的Action Bucket會被篩選出來。這種Group類型能夠自行改變Switch的轉發行為而不用事先請求Remote Controller。如果當前沒有Buckets是live的,那么數據包就被丟棄,因此這種Group必須要實現一個管理存活狀態的機制。

 

3、Meter Table

   Meter Table同樣是由多個Meter Enties構成,每個Meter Entry定義每個 Flow 的 meters。基於此結構,OpenFlow Switch可以實現各種簡單的QoS功能,比如速率限制等,再結合每個port的queues,可以實現更加復雜的QoS框架,例如DiffServ。

  一個meter可以衡量與它關聯的數據包的速率,並進而可以控制其聚合速率。任何一個Flow Entry都可以在其Instructions Set里指定某一個Meter,從而控制與該Flow Entry能夠成功匹配的數據包的聚合速率。

  Meter Entry的具體結構如下:

    

 同樣地,每個Meter Entry都是由其Meter Identifier來唯一定位。具體每項說明如下:

1)Meter Identifier:一個32位無符號整數,作為一個Meter Entry的唯一標識。

2)Meter Bands:一個無序的Meter Band集合,每個Meter Band指明了帶寬速率以及處理數據包的行為。

3)Counters:被該Meter Entry處理過的數據包的統計量。

 

4、Meter Bands

  每一個Meter Entry都可能有一個或者多個Meter Bands,每個Meter Band指明了帶寬速率以及對數據包的處理行為。數據包基於其當前的速率會被其中一個Meter Band來處理,其篩選策略是選擇那個定義的帶寬速率略低於當前數據包的測量速率的Meter Band, 假若當前數據包的測試速率均低於任何一個Meter Band定義的帶寬速率,那么不會篩選任何一個Meter Band。

   Meter Band的具體結構如下:

          

這里,每個Meter Band以其定義的Rate來唯一標識。每項具體說明如下:

1)Band Type:定義了數據包的處理行為。

2)Rate:Meter Band的唯一標識,定義了Band可以應用的最低速率。

3)Counters:被該Meter Band處理過的數據包的統計量。

4)Type specific arguments:某些Meter Band有一些額外的參數。

  Band Type的類型有如下兩種,它們都是可選的:

1)drop:丟包,可以被用來實現一個rate limiter。

2)dscp remark:增加數據包IP頭DSCP域的丟棄優先級,可以被用來實現一個DiffServ仲裁器。

 

5、Counters

  如前面幾篇學習筆記中描述的,每一個Flow Table、Flow Entry、Group、Action Bucket、Meter和Meter Band都有一個Counters域,表示被其處理的數據包的統計量。這種機制可以由軟件方式實現,也可以由硬件方式實現。下表列出了Counters的集合,但並不需要所有的Counter都需要支持:

           

Duration(Seconds)記錄了該Flow Table或者Meter被安裝到OpenFlow Switch內的時間,並且必須以秒為記錄單位。

Receive Errors記錄了所有接收到Switch里,但是發生碰撞沖突或者其他原因沒有轉發出去的數據包的數量。

每個Counter都是無符號的,並且沒有溢出檢查機制,如果一個數字Counter在Switch中不可用,那么我們需要將其默認設置為最大值。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM