WFQ

WFQ

WFQ是加權公平排隊(Weighted Fair Queuing)縮寫。它是一種擁塞管理算法,該算法識別對話(以數據流的形式)、分開屬於各個對話的分組,並確保傳輸容量被這些獨立的對話公平地分享。WFQ是在發生擁塞時穩定網路運行的一種自動的方法,它能提高處理性能並減少分組的重發。

基本介紹

  • 中文名:加權公平排隊
  • 外文名:Weighted Fair Queuing
  • 縮寫:WFQ
  • 類型:一種擁塞管理算法
目標,原理,基本原理,頻寬分配,佇列調度機制,丟棄機制,優缺點,主要優點,缺點,配置和監控,CBWFQ的優點,配置和監控,

目標

1為每個活動流提供公平的頻寬分配機制
2為少量互動流提供更快的調度機制
3為高優先權流提供更多的頻寬
WFQ:是一種基於流的排隊算法,到達的數據包被分成多個流,每個流都被分配給一個FIFO佇列。
可以基於IP和TCPUDP頭中以下欄位標識流:源IP位址 目的IP位址 協定號 TOS 源TCP/UDP連線埠號目的TCP/UDP連線埠號
WFQ插入和丟棄策略
WFQ有一個保持佇列(hold queue),保持佇列=WFQ系統中數據包占用的所有記憶體之和,數據包到達時,保持佇列已滿,那就丟棄數據包(WFQ主動丟棄WFQ aggressive dropping)
例外:數據包分配到一個空佇列,不會丟棄

原理

基本原理

WFQ是根據流對報文進行動態分類,對於IP網路五元組(源IP位址、目的IP位址、源連線埠號、目的連線埠號、協定號)和IP優先權或者DSCP相同的報文屬於同一個流。在接入層的網路中,通常使用IP優先權和五元組配合進行流分類;在匯聚層網路中通常使用DSCP值和五元組配合進行流分類,具有相同特性的報文屬於同一個流,使用Hash算法映射到不同的佇列中;另外的一個區別就是如果使用WFQ,那么low-volume(位元組數小的報文)、higher-precedence(優先權高的報文)的流會比large-volume、lower-precedence的流更先處理。因為WFQ是基於流的,每個流使用不同的佇列,這就要求WFQ能夠支持很大數目的佇列——WFQ最大可以在每個接口支持到4096個佇列。
WFQ與CQ主要區別如下:
  • CQ可以自定義ACL規則來對報文進行分類,而WFQ只能根據元組對報文進行動態分類;
  • WFQ和CQ的佇列調度方式不一樣,CQ的調度方式是RR,而WFQ的調度機制是WFQ調度機制;
  • WFQ和CQ的報文丟棄機制不一樣:CQ使用Tail Drop機制,WFQ使用WFQ丟棄機制,該機制是對Tail Drop的一種改進。
要想理解WFQ,必須了解這個機制出現的目的是什麼,即使用WFQ是為了達到什麼目的?WFQ調度主要是為了兩個主要的目的,一個是在各個流之間提供公平的調度即WFQ名字中的F(fairness)的含義,另外一個就是保證高IP precedence的流能夠得到更多頻寬即WFQ名字中的W(weighted)的含義。

頻寬分配

為了提供各個流之間的公平調度,WFQ給每個流分配的頻寬是相同的。例如一個接口有10條流,該接口頻寬為128Kbps,那么每個流得到的頻寬為128/10=12.8Kbps。從某種意義上講,有些類似於時分復用機制(TDM)。
WFQ允許其它流使用某條流的剩餘頻寬,例如接口頻寬為128kbps,共10條流,則每條流分配的頻寬為12.8kbps,可能實際上某條流例如流1隻有5kbps,而流2有20kbps,那么其它的流就可以分配流1所剩餘下的12.8-5=7.8kbps的頻寬。WFQ的加權是根據流中的IP precedence進行的,保證高IP precedence的流分配到更多的頻寬。算法為(IP precedence+1)/Sum(IP precedence+1),例如有四個流,其IP precedence分別為1、2、3、4,那么每個流占用的頻寬分別為2/14、3/14、4/14、5/14。

佇列調度機制

要想理解WFQ的佇列調度機制,需要理解WFQ中的一個重要概念:序列號SN(不同的文檔可能採用不同的參數,不管使用什麼參數都應該達到小位元組、高IP優先權的流被優先調度),報文在經過流分類後,在決定該報文是入佇列還是丟棄之前,都要賦予一個SN。SN的計算公式為SN=Previous_SN+weight×new_packet_length,WFQ進行報文調度時都是先調度SN小的報文,為了保證IPPrecedence大的能夠獲得更多的頻寬,從SN的計算公式就可以看出Weight應與Precedence成反比。
其中Previous_SN分為兩種情況:
  • 如果報文進入的佇列為非空,使用該佇列中最近進入佇列報文的SN作為Previous_SN;
  • 如果報文進入的佇列為空,使用傳送佇列最近傳送的報文的SN作為Previous_SN。
WFQ
上圖中:有四條流,每條流的precedence相同都為0,只是報文的大小不同,Flow1到Flow4的報文長度從大到小,按照SN的計算公式,報文長度小的SN小,所以Flow4中的報文應該被優先調度出去,當然最終的決定因素還是SN的大小,對於SN相同的報文實行順序調度,如本例所示:Packet5和Packet10的SN相同、Packet1和Packet11的SN相同,按照順序調度規則,應該是Packet5在Packet10前,Packet1在Packet11前。最終的調度的結果是:13,14,15,16,9,5,10,1,11,6,12,2,7,8,3,4。

丟棄機制

HQL(Hold-Queue-Limit):限制了所有佇列中能夠存放的報文總數目;
CDT(Congestive Discard threshold):限制了每個佇列中能夠存放的報文數目。
WFQ使用WFQ丟棄機制,該機制是對TailDrop的一種改進,其中的一個決定因素也是SN,另外WFQ還使用HQL和CDT來決定如何對報文進行丟棄。
如果一個新的報文達到時HQL已經到達最大值,該報文直接被丟棄;如果此時HQL沒有到達最大值,WFQ將該報文根據WFQ的分類原則進行分類決定進入到哪個佇列並計算出SN,剩下的丟棄機制還會由CDT決定,CDT是每個佇列自己的丟棄閥值,如果此時CDT沒有到達最大值報文直接進入該佇列,如果CDT已經達到閥值,則判斷其它佇列是否有SN比新進入的報文SN大,如果沒有直接丟棄新進入的報文,如果其他佇列有SN大於當前入佇列的報文,WFQ會選擇丟棄SN大最大的報文。
簡單的說就是當某個佇列的報文數目已經超過該佇列CDT,WFQ可以選擇丟棄其它佇列中SN最大的報文!

優缺點

主要優點

WFQ配置簡單,無需顯示分類
不會讓任何流得不到處理機會,能夠保證所有流的吞吐量
從最主動的流中丟棄數據包,可以為非主動流提供更快的服務
是一種標準.簡單的排隊機制,大多數CISCO平台和IOS版本都支持

缺點

WFQ的每個子佇列都繼承了FIFO的缺點
WFQ的分類和調度機制是不可配置和無法修改的
WFQ僅支持低速鏈路(2.048Mbit/s及以下的)
WFQ不能為流量流提供頻寬和時延保證
WFQ系統中多個流量流可能會被分配到同一個對列中去

配置和監控

默認情況下,所有低速(2.048Mbit/s及以下)串列接口都啟用WFQ
接口模式下: fair-queue [cdt] [dynamic-queues] \\ cdt 為擁塞丟棄門限,dynamic 動態佇列默認為256
hold-queue max-limit out \\定義保持佇列
CBWFQ基於類別的加權公平排隊
比WFQ更好,因為可以創建用戶自定義的類別,並為所有類別分配專屬佇列,每個佇列都有用戶自定義的(最小)頻寬,而且在有可用頻寬佇列可以使用更多頻寬。
最多可以創建64個用戶自定義類別,每個佇列都是有保證頻寬和最大包門限的FIFO佇列,一旦達到最大,就會產生尾部丟棄。
分類,調度和頻寬保證
頻寬
頻寬百分比
頻寬剩餘百分比

CBWFQ的優點

可以創建用戶自定義的類別,利用MQC的分類映射可以很容易地定義這些流量類別
可以基於用戶策略和用戶意願為每種流量類別分配/預留頻寬
可以基於現有網路套用和用戶策略定義最多64個固定類別,從而提供微調手段,而且擴展性更好
缺點:沒有為實時性套用提供合適地佇列(VOIP和 視頻)無法保證低時延

配置和監控

LLQ
包含了一個優先權佇列,使其非常適合時延和抖動敏感型套用
優點:
LLQ具有CBWFQ的所有優點,包括自定義流量類別,為每種類別的流量提供頻寬保證,並且可以在所有類別的佇列上套用WRED。(嚴格優先權佇列除外)
對於LLQ和CBWFQ來說,任何沒有被顯示分類的流量都被認為class-default流量,可以將class-default流量類別佇列由FIFO改為WFQ,需要時也可以用WRED.
LLQ最大優勢 可以為時延和抖動敏感型套用的流量提供一個或多個有頻寬保證的嚴格優先權佇列
LLQ並不局限於特定平台或傳輸介質
配置和監控LLQ

相關詞條

熱門詞條

聯絡我們