全部課程
發(fā)布時間: 2023-04-04 17:54:10
FIFO(First In Forst Out)調(diào)度使用的是FCFS策略,是一種不考慮QoS的調(diào)度算法。FIFO調(diào)度不進(jìn)行報文分類,所有業(yè)務(wù)共用一個隊列,按照請求進(jìn)入隊列順序進(jìn)行調(diào)度。如下圖所示,三種不同業(yè)務(wù)的請求全部加入到一個隊列中,按照FIFO的規(guī)則進(jìn)行調(diào)度。
FIFO調(diào)度實現(xiàn)簡單、開銷小,但是FIFO不區(qū)分請求類型、不考慮QoS,對時延、抖動敏感的業(yè)務(wù)不友好,無法保證關(guān)鍵業(yè)務(wù)服務(wù)質(zhì)量。
SP(Strict Priority)嚴(yán)格優(yōu)先級調(diào)度嚴(yán)格按照隊列優(yōu)先級進(jìn)行調(diào)度,只有在高優(yōu)先級隊列中請求全部調(diào)度完成的情況下,才會考慮調(diào)度低優(yōu)先級隊列中的請求。如下圖所示,三種不同業(yè)務(wù)分別對應(yīng)三種不同優(yōu)先級的隊列:高優(yōu)隊列、中優(yōu)隊列和低優(yōu)隊列。不同業(yè)務(wù)的請求分別加入到相應(yīng)優(yōu)先級隊列中,調(diào)度時優(yōu)先調(diào)度高優(yōu)隊列請求,高優(yōu)隊列中請求調(diào)度完成后,依次調(diào)度中優(yōu)和低優(yōu)隊列請求。
SP調(diào)度算法的實現(xiàn)比較簡單,優(yōu)點是可以保證關(guān)鍵業(yè)務(wù)可以優(yōu)先調(diào)度到,可以最大限度的降低網(wǎng)絡(luò)延遲和抖動;缺點是網(wǎng)絡(luò)擁塞,高優(yōu)先級隊列中一直有請求時,會導(dǎo)致低優(yōu)先級隊列中請求一直調(diào)度不到,出現(xiàn)“餓死”的情況。
RR(Round Robin)輪詢調(diào)度通常采用分時機制,為每個隊列分配一個時間片或調(diào)度時刻。RR調(diào)度按照固定順序循環(huán)調(diào)度每一個隊列中的請求,每次調(diào)度相同數(shù)量(一般是1個)的請求,且在調(diào)度過程中不考慮任何優(yōu)先級。算法較為簡單且容易實現(xiàn),同時不會產(chǎn)生“餓死”問題。如下圖所示,RR調(diào)度輪詢調(diào)度隊列1/2/3中的請求,每次調(diào)度一個隊列中的一個請求,直到請求調(diào)度完成。
RR調(diào)度假設(shè)所有隊列的優(yōu)先級和帶寬需求都是相同的,調(diào)度時不考慮包長、隊列時延和帶寬需求。隊列包長差異比較大時,可能導(dǎo)致不同隊列實際占用帶寬差異巨大,同時因為不考慮時延和帶寬需求,導(dǎo)致無法做到對網(wǎng)絡(luò)流量的精準(zhǔn)隔離和調(diào)度。
輪詢調(diào)度保證了各隊列在請求調(diào)度時的公平性,但是無法滿足個性化的調(diào)度需求。WRR(Weighted Round Robin)加權(quán)輪詢調(diào)度在輪詢的基礎(chǔ)上為隊列增加權(quán)重,每個隊列設(shè)置一個計數(shù)器,根據(jù)權(quán)重初始化計數(shù)器初始值,每調(diào)度一個報文,計數(shù)器減1。權(quán)重越大,每次輪詢調(diào)度次數(shù)越多,能調(diào)度的包數(shù)量也就越多。如下圖所示,三個隊列權(quán)重分別是3:2:1,每一輪調(diào)度的包數(shù)量比例就是3:2:1。
當(dāng)所有隊列權(quán)重值都是1時,WRR調(diào)度退化為RR調(diào)度。WRR的優(yōu)點是可以按比例調(diào)度各個隊列的請求,適應(yīng)性更強,但是由于調(diào)度時沒有考慮包長,還是按照請求個數(shù)進(jìn)行調(diào)度,在請求長度變化時無法保證各隊列按照設(shè)置比例占用帶寬,而用戶一般關(guān)心和感知到的是帶寬。此外隊列請求長度不一致時,WRR調(diào)度對請求長度較小的隊列帶來不公平性。
為了解決隊列請求長度不一致帶來的不公平性,DWRR(Deficit Weighted Round Robin)差分加權(quán)輪詢調(diào)度在WRR基礎(chǔ)上,基于請求長度而非請求個數(shù)設(shè)置權(quán)值,按照權(quán)重和請求長度進(jìn)行調(diào)度。DWRR為每個隊列設(shè)置一個計數(shù)器,計數(shù)器初始化為weight * MTU,每次調(diào)度計數(shù)器減去請求長度。具體算法邏輯如下:
DWRR調(diào)度克服了請求長度變化帶來的不公平性,提供了更為精準(zhǔn)的帶寬分配。但是隊列數(shù)量較大或者M(jìn)TU設(shè)置較大時,調(diào)度器完成一輪調(diào)度的時間可能比較長,這樣可能會引發(fā)較大的傳輸時延抖動,此外DWRR調(diào)度無法滿足高優(yōu)隊列優(yōu)先調(diào)度的需求。
SP調(diào)度可能出現(xiàn)“餓死”問題,同時不能實現(xiàn)帶寬按比例調(diào)度;而DWRR調(diào)度可以實現(xiàn)帶寬的按比例調(diào)度,同時解決了“餓死”問題,但是無法滿足高優(yōu)業(yè)務(wù)優(yōu)先調(diào)度的需求。因此結(jié)合SP調(diào)度和DWRR調(diào)度的優(yōu)點,實現(xiàn)SP+DWRR的調(diào)度。調(diào)度時優(yōu)先保證SP調(diào)度,在高優(yōu)隊列無請求調(diào)度時,才嘗試調(diào)度低優(yōu)隊列請求。如下圖所示,SP調(diào)度高優(yōu)隊列、低優(yōu)隊列和普通隊列,隊列優(yōu)先級為:高優(yōu)隊列 > 普通隊列 > 低優(yōu)隊列。
隊列1/2/3按照配置權(quán)重值進(jìn)行DWRR調(diào)度,高優(yōu)隊列、低優(yōu)隊列和普通隊列間按照SP算法進(jìn)行調(diào)度。高優(yōu)隊列無請求調(diào)度時,嘗試調(diào)用普通隊列組內(nèi)的請求,在普通隊列組內(nèi)所有隊列均無請求時,才調(diào)度低優(yōu)隊列請求。
上一篇: Linux中的nohup命令介紹