隊列指的是在緩存中對報文進行排序的邏輯。當流量的速率超過接口帶寬或超過為該流量設置的帶寬時,報文就以隊列的形式暫存在緩存中。報文離開隊列的時間、順序,以及各個隊列之間報文離開的相互關系由隊列調度算法決定。
華為交換機設備的每個端口上都有 8 個下行隊列,稱為CQ(Class Queue)隊列,也叫 端口隊列(Port-queue),在交換機內部與前文提到的 8 個PHB一一對應,分別為BE、 AF1、AF2、AF3、AF4、EF、CS6 和CS7。單個隊列的報文采用 FIFO(First In First Out)原則入隊和出隊。
PQ(Priority Queuing)調度,就是嚴格按照隊列優(yōu)先級的高低順序進行調度。只有 高優(yōu)先級隊列中的報文全部調度完畢后,低優(yōu)先級隊列才有調度機會。 采用PQ 調度方式,將延遲敏感的關鍵業(yè)務放入高優(yōu)先級隊列,將非關鍵業(yè)務放入 低優(yōu)先級隊列,從而確保關鍵業(yè)務被優(yōu)先發(fā)送。 PQ調度的缺點是:擁塞發(fā)生時,如果較高優(yōu)先級隊列中長時間有分組存在,那么 低優(yōu)先級隊列中的報文就會由于得不到服務而“餓死”。
假設端口有 3 個采用PQ調度的隊列,分別為高優(yōu)先(High)隊列、中優(yōu)先(Medium) 隊列、和低優(yōu)先(Low)隊列,它們的優(yōu)先級依次降低。如圖,其中報文編號表示報文到達順序。
圖1 PQ調度
RR調度采用輪詢的方式,對多個隊列進行調度。RR以環(huán)形的方式輪詢多個隊列。 如果輪詢的隊列不為空,則從該隊列取走一個報文;如果該隊列為空,則直接跳過該隊列,調度器不等待。
圖2 RR調度
RR調度各個隊列之間沒有優(yōu)先級之分,都能夠有相等的概率得到調度。RR調度的缺點是:所有隊列無法體現(xiàn)優(yōu)先級,對于延遲敏感的關鍵業(yè)務和非關鍵業(yè)務無法得到區(qū)別對待,使得關鍵業(yè)務無法及時得到處理
加權輪詢WRR(Weighted Round Robin)調度主要解決RR不能設置權重的不足。 在輪詢的時候,WRR每個隊列享受的調度機會和該隊列的權重成比例。RR調度相當于權值為 1 的WRR調度。 WRR的實現(xiàn)方法是為每個隊列設置一個計數(shù)器 Count,根據(jù)權重進行初始化。每次 輪詢到一個隊列時,該隊列輸出一個報文且計數(shù)器減一。當計數(shù)器為 0 時停止調度該隊列,但繼續(xù)調度其他計數(shù)器不為 0 的隊列。當所有隊列的計數(shù)器都為 0 時,所有計數(shù)器重新根據(jù)權重初始化,開始新一輪調度。在一個循環(huán)中,權重大的隊列被多次調度。
圖3 WRR調度
假設某端口有3個隊列采用WRR調度,為每個隊列配置一個權值,依次為50%、 25%、25%,詳細的調度過程如下: 首先計數(shù)器初始化:Count[1]=2,Count[2]=1,Count[3]= 1。
? 第 1 個輪詢: 從隊列 1 取出報文 1 發(fā)送,Count[1]=1;從隊列 2 取出報文 5 發(fā)送,Count[2]=0; 從隊列 3 取出報文 8 發(fā)送,Count[3]=0。
? 第 2 個輪詢: 從隊列 1 取出報文 2 發(fā)送,Count[1]=0;由于Count[2]=0,Count[3]=0,隊列 2 和隊列 3 不參與此輪調度。 此時,Count[1]=0,Count[2]=0,Count[3]=0,將計數(shù)器重新初始化:Count[1]=2, Count[2]=1,Count[3]= 1。
? 第 3 個輪詢:從隊列 1 取出報文 3 發(fā)送,Count[1]=1;從隊列 2 取出報文 6 發(fā)送,Count[2]=0; 從隊列 3 取出報文 9 發(fā)送,Count[3]=0。
? 第 4 個輪詢: 從隊列 1 取出報文 4 發(fā)送,Count[1]=0;由于Count[2]=0,Count[3]=0,隊列 2 和隊列 3 不參與此輪調度。 此時,Count[1]=0,Count[2]=0,Count[3]=0,將計數(shù)器重新初始化:Count[1]=2, Count[2]=1,Count[3]= 1。
從統(tǒng)計上看,各隊列中的報文流被調度的次數(shù)與該隊列的權值成正比,權值越大被調度的次數(shù)相對越多。如果該端口為100Mbps,則可以保證最低權重的隊列至少獲得25Mbit/s帶寬,避免了采用PQ調度時低優(yōu)先級隊列中的報文可能長時間得不到服務的缺點。WRR對于空的隊列直接跳過,循環(huán)調度的周期變短,因此當某個隊列流量小的時候,剩余帶寬能夠被其他隊列按照比例占用。
WRR調度有兩個缺點:
差分輪詢DRR(Deficit Round Robin)調度實現(xiàn)原理與RR調度基本相同。DRR與RR的區(qū)別是:RR調度是按照報文個數(shù)進行調度,而DRR是按照報文長度進行調度。
DRR為每個隊列設置一個計數(shù)器Deficit,Deficit 初始化為一次調度允許的最大字節(jié)數(shù), 一般為接口MTU。每次輪詢到一個隊列時,該隊列輸出一個報文且計數(shù)器Deficit 減去報文長度。如果報文長度超過了隊列的調度能力,DRR調度允許Deficit 出現(xiàn)負值,以保證長報文也能夠得到調度。但下次輪循調度時該隊列將不會被調度。當計數(shù)器為 0 或 負數(shù)時停止調度該隊列,但繼續(xù)調度其他計數(shù)器為正數(shù)的隊列。當所有隊列的Deficit 都為 0 或負數(shù)時,將所有隊列的Deficit 計數(shù)器加上初始值,開始新一輪調度。
假設某端口MTU=150Bytes,有 2 個隊列Q1和Q2采用DRR調度,Q1 隊列中有多個 200Bytes 的長報文,Q2隊列中有多個100Bytes 的端報文,則調度過程如圖 4 所示。
圖4 DRR調度
由圖4可以看出,經過第 1~6 輪DRR調度,Q1隊列被調出了3個200Bytes 的報文, Q2隊列被調出了6個100Bytes 的報文。從長期的統(tǒng)計看,Q1和 Q2 的實際輸出帶寬比 是 1:1,為公平的比例。DRR調度避免了采用PQ調度時低優(yōu)先級隊列中的報文可能長時間得不到服務的缺點。 但是,DRR調度不能設置權重,且也具有低延時需求業(yè)務(如語音)得不到及時調度的缺點。
差分加權輪詢DWRR(Deficit Weighted Round Robin)調度主要解決DRR不能設置權重的不足。DRR調度相當于權值為 1 的DWRR調度。 DWRR為每個隊列設置一個計數(shù)器Deficit,Deficit 初始化為Weight * MTU。每次輪詢到一個隊列時,該隊列輸出一個報文且計數(shù)器Deficit 減去報文長度。當計數(shù)器為 0 時停止調度該隊列,但繼續(xù)調度其他計數(shù)器不為 0 的隊列。當所有隊列的計數(shù)器都為 0 時,所有計數(shù)器的Deficit 都加上Weight*MTU,開始新一輪調度。
圖5 DWRR調度
假設某端口MTU=150Bytes,有 2 個隊列Q1和Q2采用DRR調度,Q1 隊列中有 多個 200Bytes 的長報文,Q2隊列中有多個 100Bytes 的端報文,Q1和Q2配置權重 比為weight1:weight2=2:1。則DWRR調度過程如圖 2-37。
由上圖可以看出,經過第 1~3 輪DWRR調度,Q1隊列被調出了3個200Bytes 的 報文,Q2 隊列被調出了3個100Bytes 的報文。從長期的統(tǒng)計看,Q1和Q2的實際 輸出帶寬比是 2:1,與權重比相符。
DWRR調度避免了采用PQ調度時低優(yōu)先級隊列中的報文可能長時間得不到服務的缺點,也避免了各隊列報文長度不等或變化較大時,WRR調度不能按配置比例分 配帶寬資源的缺點。但是,DWRR調度也具有低延時需求業(yè)務(如語音)得不到及時調度的缺點。
加權公平隊列WFQ(Weighted Fair Queuing)調度是按隊列權重來分配每個流應占有出口的帶寬。同時,為了使得帶寬分配更加“公平”,WFQ 以 bit 為單位進行調度,類似于圖 6的 bit-by-bit 調度模型
圖6 WFQ調度
Bit-by-bit 調度模型可以完全按照權重分配帶寬,防止長報文比短報文獲得更多帶寬,從 而減少大小報文共存時的時延抖動。但Bit-by-bit 調度模型只是理想化的模型,實際上,華為交換機實現(xiàn)的WFQ是按照一定的粒度,例如 256B、1KB,或其他粒度,具體按何種粒度,與單板類型相關。
WFQ的優(yōu)點主要有以下幾點: