QOS隊列類型簡介(CQ、PQ、WFQ、CBWFQ)

    對於網絡單元,當分組到達的速度大於該接口傳送分組的速度時,在該接口處就會產生擁塞。如果沒有足夠的存儲空間來保存這些分組,它們其中的一部分就會丟失。分組的丟失又可能會導致發送該分組的主機或路由器因超時而重傳此分組,這將導致惡性循環。

  造成擁塞的因素有很多。比如,當分組流從高速鏈路進入路由器,由低速鏈路傳送出去時,就可能產生擁塞。分組流同時從多個接口進入路由器、由一個接口轉發出去或處理器速度慢也可能會產生擁塞。

  擁塞管理是指網絡在發生擁塞時,如何進行管理和控制。處理的方法是使用隊列技術。將所有要從一個接口發出的報文進入多個隊列,按照各個隊列的優先級進行處理。不同的隊列算法用來解決不同的問題,併產生不同的效果。常用的隊列有FIFO、PQ、CQ、WFQ、CBWFQ、LLQ等。

1、FlFO(先進現出隊列)

先進先出隊列(First In First Out Queuing,簡稱FIFO)不對報文進行分類,當報文進入接口的速度大於接口能發送的速度時,FIFO按報文到達接口的先後順序讓報文進入隊列,同時,FIFO在隊列的出口讓報文按進隊的順序出隊,先進的報文將先出隊,後進的報文將後出隊。

  Internet的默認服務模式是Best-Effort,採用FIFO隊列策略。

2、PQ (Priority Queueing,優先隊列)

PQ使用了4個子隊列,優先級分別是high,medium,normal,low。PQ會先服務高優先級的子隊列,若高優先級子隊列裏沒有數據後,再服務中等優先級子隊列,依次類推。如果PQ正在服務中等優先級子隊列,但是高優先級裏又來了數據包,則PQ會中斷中等優先級子隊列的服務,轉而服務高優先級子隊列。每一個子隊列都有一個最大隊列深度(queue-size),如果達到了最大隊列深度,則進行尾丟棄。

PQ優點:

1)對高優先級的數據流提供了低延遲的轉發

2)大多數平臺上都支持該隊列機制

3)支持所有的IOS版本

PQ缺點:

1)對單一子隊列而言,會繼承FIFO隊列的所有缺點

2)對低優先級的數據流而言,可能會被“餓死”,因爲只有高優先級隊列裏有數據,PQ就不會服務低優先級隊列

3)需要在每一跳上都手工的配置分類

3、CQ(Customized Queue,用戶定製隊列)

CQ最多可包含16個組(即group-number的取值範圍爲1~16),在每個組中指明瞭什麼樣的數據包進入什麼樣的隊列、各隊列的長度和每次輪詢各隊列所能連續發送的字節數等信息。CQ對報文進行分類,將所有報文分成最多至17類,分別屬於CQ的17個隊列中的一個,然後,按報文的類別將報文進入相應的隊列。

CQ的17個隊列中,0號隊列是優先隊列,路由器總是先把0號隊列中的報文發送完,然後才處理1到16隊列中的報文,所以0號隊列一般作爲系統隊列把實時性要求高的交互式協議報文放到0號隊列。1到16號隊列可以按用戶的定義分配它們能佔用接口帶寬的比例,在報文出隊的時候,CQ按定義的帶寬比例分別從1到16號隊列中取一定量的報文在接口上發送出去。其中,按帶寬比例分別發送的實現過程是這樣的,16個普通隊列採用輪詢的方式進行調度,當調度到某一個隊列時,從這個隊列取出一定字節數的報文發送,用戶通過指定這個字節數,就可以控制不同隊列之間的帶寬分配比例。

用戶在指定每個隊列每次調度時發送的字節數時,需要把握所配數值的大小,因爲這關係到輪詢中配置增加的粒度。例如,爲了實現4個隊列間的1:2:2:4的關係,我們可以配置這4個隊列發送字節數爲:1、2、2、4,也可以配置爲:500、1000、1000、2000。但在考慮了線路的MTU後,若MTU爲500,則後一種方式較好。因爲在輪詢時,所剩配額不夠發送當前報文時,會只累加配額,然後等下次調度,顯然當前條件下.第二種方案浪費在輪詢空轉上的時間要少。

PQ賦予較高優先級的報文絕對的優先權,這樣雖然可以保證關鍵業務的優先,但在較高優先級的報文的速度總是大於接口的速度時,將會使較低優先級的報文始終得不到發送的機會。採用CQ,將可以避免這種情況的發生。CQ可以把報文分類,然後按類別將報文被分配到CQ的一個隊列中去,對每個隊列,可以規定隊列中的報文應占接口帶寬的比例,這樣,就可以讓不同業務的報文獲得合理的帶寬,從而既保證關鍵業務能獲得較多的帶寬,又不至於使非關鍵業務得不到帶寬。當然CQ中的實時業務不能獲得象PQ一樣好的時延指標。

4、WFQ(Weighted Fair Queueing,加權公平隊列)

  WFQ是一個複雜的排隊過程,可以保證相同優先級業務間公平,不同優先級業務間加權。隊列的數目可預先配置,範圍是(16-4096)。

WFQ,在保證公平(帶寬、延遲)的基礎上體現權值,權值大小依賴於JP報文頭中攜帶的IP優先級(Precedence)。WFQ對報文按流進行分類(相同源IP地址,目的IP地址,源端口號,日的端口號,協議號,Precedence的報文屬於同一個流),每一個流被分配到一個隊列,該過程稱爲散列。WFQ入隊過程採用HASH算法來自動完成,儘量將不同的流分入不同的隊列。在出隊的時候,WFQ按流的優先級(precedence)來分配每個流應占有出口的帶寬。優先級的數值越小,所得的帶寬越少。優先級的數值越大,所得的帶寬越多。這樣就保證了相同優先級業務之間的公平,體現了不同優先級業務之間的權值。

如:接口中當前有8個流,它們的優先級分別爲O,2,2,3,4,5,6,7。則帶寬的總配額將是:所有(流的優先級+1)的和。即:1+3+3+4+5+6+7+8=37

  每個流所佔帶寬比例爲:(自己的優先級數+1),(所有(流的優先級+1)的和)。即,每個流可得的帶寬分別爲:1/37,3/37,3/37,4/37,5/37,5/37,6/37,7/37,8/37。

  由此可見,WFQ在保證公平的基礎上對不同優先級的業務體現權值,而權值依賴於IP報文頭中所攜帶的IP優先級。

WFQ優點

1)配置簡單(不用手工分類)

2)保證所有的流都有一定的帶寬

3)丟棄野蠻流量

4)大多數平臺上都支持

5)支持所有IOS版本

WFQ缺點

1)每個子隊列都繼承了FIFO的缺點

2)多個不同的流可能會被分入同一個隊列(流的數量超過了配置的隊列數)

3)不支持手工分類

4)不能提供固定帶寬保證

5)因爲使用了複雜的分類和調度機制,對系統資源有一定的限制

5、CBWFQ(class-based weighted fair queuing,基於類的加權公平隊列)

CBWFQ通常使用ACL定義數據流類別,並將注入寬帶和隊列限制等參數應用於這些類別。CBWFQ是網絡中的一個隊列配置方案,其允許通信基於標準分類,例如訪問控制列表,輸入界面名,協議和服務質量(QoS)標誌。CBWFQ擴展了加權公平隊列WFQ功能的標準來提供自定義通信類型支持。

CBWFQ特點:

1)能夠給不同的類保障一定的帶寬

2)對傳統的WFQ作了擴展支持用戶自己定義流量的分類:

3)隊列的個數和類別是一一對應,給每個class 保留帶寬

CBWFQ與WFQ的區別:

WFQ: 用戶無法控制分類,由HASH算法自己決定

CBWFQ:讓用戶對流量自己來分類

WFQ 對正常流量 處理沒問題,但是對語音流量顯得”太公平”(語音要求低延遲)

CBWFQ:考慮到公平特性,並沒有考慮到語音的應用

6、LLQ(Low Latency Queueing,低延遲隊列)

LLQ爲基於類別的加權公平排隊(CBWFQ)提供絕對優先排隊功能,減少了語音會話的抖動。LLQ相當於CBWFQ加上一個嚴格優先級隊列,該隊列優先級高於其他所有隊列,非常適合時延敏感性應用。LLQ的嚴格優先級隊列是一個有最小保證帶寬的優先級隊列,出現擁塞時,該隊列的數據量不能超過所允許的帶寬,否則會被丟棄。

LLQ具有CBWFQ的所有優點,包括自定義流量類別,爲每種類別的流量提供帶寬保證,並且可以在所有類別的隊列上應用WRED。(嚴格優先級隊列除外)

對於LLQ和CBWFQ來說,任何沒有被顯示分類的流量都被認爲class-default流量,可以將class-default流量類別隊列由FIFO改爲WFQ,需要時也可以用WRED。

LLQ最大優勢是可以爲時延和抖動敏感型應用的流量提供一個或多個有帶寬保證的嚴格優先級隊列,LLQ並不侷限於特定平臺或傳輸介質。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章