加權輪詢算法
加權輪詢( 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() |
示例
編輯假設一個系統有三個隊列 , 其各自的權重 。第一個隊列中有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.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.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.
- ^ 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.
- ^ Semeria, Chuck. Supporting Differentiated Service Classes: Queue Scheduling Disciplines (PDF) (報告): 15–18. [4 May 2020]. (原始內容存檔 (PDF)於2017-08-29).
- ^ Beaulieu, Alain. Real Time Operating Systems -- Scheduling & Schedulers (PDF). Winter 2017 [4 May 2020].[失效連結]
- ^ 20190266019
- ^ 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).