跳至內容

加權輪詢算法

維基百科,自由的百科全書

加權輪詢Weighted round robin )是網絡中用於調度數據流的算法,也可用於調度進程

加權輪詢[1]輪詢調度的一般化。加權輪詢在隊列或一系列任務上循環,每個輪次中各數據包或進程按權重獲得運行機會。

加權輪詢[2]有若干種類,比如經典加權輪詢和交替加權輪詢。

算法[編輯]

下面以網絡調度程序為例介紹加權輪詢。

假設有個輸入隊列。每個隊列的權重是一個正整數。使用加權輪詢時,隊列運行過程有周期性。在每個周期中,隊列次發送機會。

不同的加權輪詢算法的區別是在一個周期中如何分配機會。

經典加權輪詢[編輯]

採用經典加權輪詢算法時[2][3],調度程序會在隊列間循環。輪到隊列時,調度程序開始發送數據包,直到發出個數據包或遇到隊尾為止。

常量和变量: 
    const N             // 队列数 N
    const weight[1..N]  // 每个队列的权重
    queues[1..N]        // 队列
    i                   // 队列序号
    c                   // 数据包计数器
    
指令:
while true do 
   for i in 1 .. N do
      c:= 0
      while (not queue[i].empty) and (c<weight[i]) do
         send( queue[i].head() )
         queue[i].dequeue()
         c:= c+1

交替加權輪詢[編輯]

為所有隊列中的最大權重。在交替加權輪詢算法中[1][4],每個周期分為輪。第輪中,如果,隊列i可以發送一個數據包。

常量和变量: 
    const N             // 队列数 N 
    const weight[1..N]  // 每个队列的权重
    const w_max
    queues[1..N]        // 队列
    i                   // 队列序号
    r                   // 轮次计数器
    
指令:
while true do
   for r in 1 .. w_max do 
      for i in 1 .. N do
         if (not queue[i].empty) and (weight[1..N] >= r)then
            send( queue[i].head() )
            queue[i].dequeue()

示例[編輯]

經典加權輪詢(CWRR)和交替加權輪詢(IWRR)的調度示例

假設一個系統有三個隊列, 其各自的權重。第一個隊列中有7個數據包A,B,C,D,E,F,G,第二隊列中為3個數據包U,V,W,第三個隊列中有兩個數據包X,Y。且不會有新數據包到達。

如果使用經典加權輪詢算法,在第一個周期中,調度程序首先選擇並傳送位於隊列頭部的A,B,C,D,E(因為),然後選擇第二個隊列 ,傳送隊列開頭的U,V(因為),最後選擇第三個隊列,該隊列的權重等於3,然而該隊列一共只有兩個數據包,因此傳輸X,Y 。在Y的傳輸完畢後,第二個周期開始,先是發送中的F,G,然後是中的W

如果使用交替加權輪詢算法,第一個周期分為5輪。第一輪(r = 1),每個隊列發送一個數據包(A,U,X),第二輪(r = 2),每個隊列再發送一個數據包(B,V,Y),第三輪(r = 3),僅排隊被允許發送數據包(),但由於為空,只有來自C被發送,在第四和第五輪,只有D,E被發送。然後開始第二個周期,依次發送F,W,G

任務調度[編輯]

與數據包調度類似,加權輪詢完成任務或進程調度時:個現行任務以循環方式安排,每個任務得到份的處理器時間[5][6]

性質[編輯]

調度數據包時,如果所有數據包都具有相同的大小,則WRR是通用處理器共享算法的近似[7]:長期來看,隊列將佔據的帶寬(假設所有隊列均處於現行狀態)。

如果數據包長度可變,則每個隊列接收的帶寬部分不僅取決於權重,還取決於數據包大小。

如果隊列的平均數據包大小是,則每個隊列將獲得的長期帶寬份額等於 。如果目標是給每個隊列分配連結容量的 ),則可以設置權重

參考文獻[編輯]

  1. ^ 1.0 1.1 Katevenis, M.; Sidgiropoulos, S.; Courcoubetis, C. Weighted round-robin cell multiplexing in a general-purpose ATM switch chip. IEEE Journal on Selected Areas in Communications. 1991, 9 (8): 1265–1279. ISSN 0733-8716. doi:10.1109/49.105173. 
  2. ^ 2.0 2.1 Chaskar, H.M.; Madhow, U. Fair scheduling with tunable latency: A round-robin approach. IEEE/ACM Transactions on Networking. 2003, 11 (4): 592–601. ISSN 1063-6692. doi:10.1109/TNET.2003.815290. 
  3. ^ Brahimi, B.; Aubrun, C.; Rondeau, E. Modelling and Simulation of Scheduling Policies Implemented in Ethernet Switch by Using Coloured Petri Nets: 667–674. 2006. doi:10.1109/ETFA.2006.355373. 
  4. ^ Semeria, Chuck. Supporting Differentiated Service Classes: Queue Scheduling Disciplines (PDF) (報告): 15–18. [4 May 2020]. (原始內容存檔 (PDF)於2017-08-29). 
  5. ^ Beaulieu, Alain. Real Time Operating Systems -- Scheduling & Schedulers (PDF). Winter 2017 [4 May 2020]. [失效連結]
  6. ^ 20190266019 
  7. ^ Fall, Kevin. EECS 122, "Introduction to Communication Networks", Lecture 27, "Scheduling Best-Effort and Guaranteed Connections". 29 April 1999 [4 May 2020]. (原始內容存檔於2012-07-22).