QoS隊列調度算法


隊列指的是在緩存中對報文進行排序的邏輯。當流量的速率超過接口帶寬或超過為該流量設置的帶寬時,報文就以隊列的形式暫存在緩存中。報文離開隊列的時間、順序,以及各個隊列之間報文離開的相互關系由隊列調度算法決定。

華為交換機設備的每個端口上都有 8 個下行隊列,稱為CQ(Class Queue)隊列,也叫 端口隊列(Port-queue),在交換機內部與前文提到的 8 個PHB一一對應,分別為BE、 AF1、AF2、AF3、AF4、EF、CS6 和CS7。單個隊列的報文采用 FIFO(First In First Out)原則入隊和出隊。

image-20200726165220818

  • PQ(Priority Queuing)調度

PQ(Priority Queuing)調度,就是嚴格按照隊列優先級的高低順序進行調度。只有 高優先級隊列中的報文全部調度完畢后,低優先級隊列才有調度機會。 采用PQ 調度方式,將延遲敏感的關鍵業務放入高優先級隊列,將非關鍵業務放入 低優先級隊列,從而確保關鍵業務被優先發送。 PQ調度的缺點是:擁塞發生時,如果較高優先級隊列中長時間有分組存在,那么 低優先級隊列中的報文就會由於得不到服務而“餓死”。

假設端口有 3 個采用PQ調度的隊列,分別為高優先(High)隊列、中優先(Medium) 隊列、和低優先(Low)隊列,它們的優先級依次降低。如圖,其中報文編號表示報文到達順序。

圖1 PQ調度

image-20200726105358964

  • RR(Round Robin)調度

RR調度采用輪詢的方式,對多個隊列進行調度。RR以環形的方式輪詢多個隊列。 如果輪詢的隊列不為空,則從該隊列取走一個報文;如果該隊列為空,則直接跳過該隊列,調度器不等待。

圖2 RR調度

image-20200726105700474

RR調度各個隊列之間沒有優先級之分,都能夠有相等的概率得到調度。RR調度的缺點是:所有隊列無法體現優先級,對於延遲敏感的關鍵業務和非關鍵業務無法得到區別對待,使得關鍵業務無法及時得到處理

  • WRR(Weighted Round Robin)調度

加權輪詢WRR(Weighted Round Robin)調度主要解決RR不能設置權重的不足。 在輪詢的時候,WRR每個隊列享受的調度機會和該隊列的權重成比例。RR調度相當於權值為 1 的WRR調度。 WRR的實現方法是為每個隊列設置一個計數器 Count,根據權重進行初始化。每次 輪詢到一個隊列時,該隊列輸出一個報文且計數器減一。當計數器為 0 時停止調度該隊列,但繼續調度其他計數器不為 0 的隊列。當所有隊列的計數器都為 0 時,所有計數器重新根據權重初始化,開始新一輪調度。在一個循環中,權重大的隊列被多次調度。

圖3 WRR調度

image-20200726105856756

假設某端口有3個隊列采用WRR調度,為每個隊列配置一個權值,依次為50%、 25%、25%,詳細的調度過程如下: 首先計數器初始化:Count[1]=2,Count[2]=1,Count[3]= 1。

− 第 1 個輪詢: 從隊列 1 取出報文 1 發送,Count[1]=1;從隊列 2 取出報文 5 發送,Count[2]=0; 從隊列 3 取出報文 8 發送,Count[3]=0。
− 第 2 個輪詢: 從隊列 1 取出報文 2 發送,Count[1]=0;由於Count[2]=0,Count[3]=0,隊列 2 和隊列 3 不參與此輪調度。 此時,Count[1]=0,Count[2]=0,Count[3]=0,將計數器重新初始化:Count[1]=2, Count[2]=1,Count[3]= 1。
− 第 3 個輪詢:從隊列 1 取出報文 3 發送,Count[1]=1;從隊列 2 取出報文 6 發送,Count[2]=0; 從隊列 3 取出報文 9 發送,Count[3]=0。
− 第 4 個輪詢: 從隊列 1 取出報文 4 發送,Count[1]=0;由於Count[2]=0,Count[3]=0,隊列 2 和隊列 3 不參與此輪調度。 此時,Count[1]=0,Count[2]=0,Count[3]=0,將計數器重新初始化:Count[1]=2, Count[2]=1,Count[3]= 1。

從統計上看,各隊列中的報文流被調度的次數與該隊列的權值成正比,權值越大被調度的次數相對越多。如果該端口為100Mbps,則可以保證最低權重的隊列至少獲得25Mbit/s帶寬,避免了采用PQ調度時低優先級隊列中的報文可能長時間得不到服務的缺點。WRR對於空的隊列直接跳過,循環調度的周期變短,因此當某個隊列流量小的時候,剩余帶寬能夠被其他隊列按照比例占用。

WRR調度有兩個缺點:

  1. WRR調度按照報文個數進行調度,因此每個隊列沒有固定的帶寬,同等調度機 會下大尺寸報文獲得的實際帶寬要大於小尺寸報文獲得的帶寬。而用戶一般關 心的是帶寬。當每個隊列的平均報文長度相等或已知時,通過配置WRR權重, 用戶能夠獲得想要的帶寬;但是,當隊列的平均報文長度變化時,用戶就不能 通過配置WRR權重獲取想要的帶寬。
  2. 低延時需求業務(如語音)得不到及時調度。
  • DRR(Deficit Round Robin)調度

差分輪詢DRR(Deficit Round Robin)調度實現原理與RR調度基本相同。DRR與RR的區別是:RR調度是按照報文個數進行調度,而DRR是按照報文長度進行調度。

DRR為每個隊列設置一個計數器Deficit,Deficit 初始化為一次調度允許的最大字節數, 一般為接口MTU。每次輪詢到一個隊列時,該隊列輸出一個報文且計數器Deficit 減去報文長度。如果報文長度超過了隊列的調度能力,DRR調度允許Deficit 出現負值,以保證長報文也能夠得到調度。但下次輪循調度時該隊列將不會被調度。當計數器為 0 或 負數時停止調度該隊列,但繼續調度其他計數器為正數的隊列。當所有隊列的Deficit 都為 0 或負數時,將所有隊列的Deficit 計數器加上初始值,開始新一輪調度。

假設某端口MTU=150Bytes,有 2 個隊列Q1和Q2采用DRR調度,Q1 隊列中有多個 200Bytes 的長報文,Q2隊列中有多個100Bytes 的端報文,則調度過程如圖 4 所示。

圖4 DRR調度

image-20200726164055160

由圖4可以看出,經過第 1~6 輪DRR調度,Q1隊列被調出了3個200Bytes 的報文, Q2隊列被調出了6個100Bytes 的報文。從長期的統計看,Q1和 Q2 的實際輸出帶寬比 是 1:1,為公平的比例。DRR調度避免了采用PQ調度時低優先級隊列中的報文可能長時間得不到服務的缺點。 但是,DRR調度不能設置權重,且也具有低延時需求業務(如語音)得不到及時調度的缺點。

  • DWRR(Deficit Weighted Round Robin)調度

差分加權輪詢DWRR(Deficit Weighted Round Robin)調度主要解決DRR不能設置權重的不足。DRR調度相當於權值為 1 的DWRR調度。 DWRR為每個隊列設置一個計數器Deficit,Deficit 初始化為Weight * MTU。每次輪詢到一個隊列時,該隊列輸出一個報文且計數器Deficit 減去報文長度。當計數器為 0 時停止調度該隊列,但繼續調度其他計數器不為 0 的隊列。當所有隊列的計數器都為 0 時,所有計數器的Deficit 都加上Weight*MTU,開始新一輪調度。

圖5 DWRR調度

image-20200726164321936

假設某端口MTU=150Bytes,有 2 個隊列Q1和Q2采用DRR調度,Q1 隊列中有 多個 200Bytes 的長報文,Q2隊列中有多個 100Bytes 的端報文,Q1和Q2配置權重 比為weight1:weight2=2:1。則DWRR調度過程如圖 2-37。

  1. 第一輪調度 Deficit[1] =weight1* MTU=300,Deficit[2] = weight2* MTU=150Bytes,從 Q1 隊 列取出 200Bytes 報文發送,從Q2隊列取出 100Bytes 發送;發送后,Deficit[1] = 100,Deficit[2] =50。
  2. 第二輪調度
    從 Q1 隊列取出 200Bytes 報文發送,從Q2隊列取出 100Bytes 發送;發送后, Deficit[1] = -100,Deficit[2] =-50。
  3. 第三輪調度
    此時兩個隊列都為負,因此,Deficit[1] = Deficit[1]+weight1* MTU=-100+2150=200,Deficit[2] = Deficit[2]+weight2 MTU=-50+1*150=100。
    從 Q1 隊列取出 200Bytes 報文發送,從Q2隊列取出 100Bytes 發送;發送后, Deficit [1] = 0,Deficit[2] = 0。

由上圖可以看出,經過第 1~3 輪DWRR調度,Q1隊列被調出了3個200Bytes 的 報文,Q2 隊列被調出了3個100Bytes 的報文。從長期的統計看,Q1和Q2的實際 輸出帶寬比是 2:1,與權重比相符。

DWRR調度避免了采用PQ調度時低優先級隊列中的報文可能長時間得不到服務的缺點,也避免了各隊列報文長度不等或變化較大時,WRR調度不能按配置比例分 配帶寬資源的缺點。但是,DWRR調度也具有低延時需求業務(如語音)得不到及時調度的缺點。

  • WFQ(Weighted Fair Queuing)調度

加權公平隊列WFQ(Weighted Fair Queuing)調度是按隊列權重來分配每個流應占有出口的帶寬。同時,為了使得帶寬分配更加“公平”,WFQ 以 bit 為單位進行調度,類似於圖 6的 bit-by-bit 調度模型

圖6 WFQ調度

image-20200726162602159

Bit-by-bit 調度模型可以完全按照權重分配帶寬,防止長報文比短報文獲得更多帶寬,從 而減少大小報文共存時的時延抖動。但Bit-by-bit 調度模型只是理想化的模型,實際上,華為交換機實現的WFQ是按照一定的粒度,例如 256B、1KB,或其他粒度,具體按何種粒度,與單板類型相關。
WFQ的優點主要有以下幾點:

  • 不同的隊列獲得公平的調度機會,從總體上均衡各個流的延遲。
  • 短報文和長報文獲得公平的調度:如果不同隊列間同時存在多個長報文和短報文等 待發送,讓短報文優先獲得調度,從而在總體上減少各個流的報文間的抖動。
  • 從統計上看,權重越小,所分得的帶寬越少。權重越大,所分得的帶寬越多。


免責聲明!

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



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