一. yarn的資源分配模型
無論先進先出調度器,容量調度器,還是公平調度器,他們的核心:資源分配模型是一樣的。
- 調度器維護着多個隊列的信息,用戶可以向任意一個或多個隊列提交job。每次NodeManager向ResourceManager發送心跳時,調度器都會選擇一個隊列,再在隊列上選擇一個應用,然后嘗試在這個應用上分配資源。調度器優先選擇本地資源是申請請求,其次是同機架的機器,最后是任意機器。
- 簡言之,3種調度器就是說明如何選擇一個隊列,如何在隊列上選擇一個應用
二.單機操作系統中的任務調度
-
先來先服務調度
(1)先來先服務的調度算法,維護一個后備進程/作業等待隊列,該算法每次從后備作業隊列中選擇一個或幾個作業進入內存,分配必要資源,創建的進程放入到就緒隊列中
(2)這種調度算法不利於短作業,利於長作業。長作業如果先進入到后備隊列就會先被執行,使得后續到來的短作業擁有很長的等待時間 -
短作業優先調度算法
(1)短作業優先調度算法也只維護一個后備作業/進程等待隊列,調度器每次選擇一個或多個運行時間較短的作業調入內存,分配資源。cpu進程調度時,再從就緒隊列中選擇一個估計運行時間最短的進程將時間片分配給它。
(2)該算法優先調度短作業執行,當不斷有短作業進入后備內存時,會使得長作業無法被調度,形成“死鎖”。而且,作業的執行時間是用戶對作業運行的估計值,這種估計值會被用戶有意無意的放大或縮小,使得該算法不能做到真正的短作業優先調度 -
優先級調度算法
(1)優先級調度算法從后被作業隊列中選取優先級最高的進程調入內存,分配資源,加入就緒隊列。在進程調度中,cpu從就緒隊列中選擇優先級最高的進程分配給其時間片
(2)剝奪式優先級與非剝奪式優先級:當有優先級更高的進程進入就緒隊列時,處理劑是否立刻被剝奪分配給高優先級的進程,還是要等待低優先級的進程處理完畢再讓出處理機
(3)靜態優先級與動態優先級:進程在整個運行期間是保持不變還是根據進程占有的CPU時間長短,就需等待時間長短改變自身的優先級 -
高相應比優先調度
(1)高相應比調度主要應用於作業調度
(2)該調度算法是對先進先出和短作業優先的一種綜合調度,同時考慮每個作業的等待時間和估計運行時間,從中選擇響應比最高的作業投入運行
響應必\(R_p=\frac{等待時間+要求服務時間}{要求服務時間}=1+\frac{等待時間}{要求服務時間}\)
(3)短作業:要求服務時間越短,響應必越高
長作業:隨着等待時間的增加,響應必越高 -
時間片輪轉調度
(1)時間片輪轉算法把就緒進程排序成一個隊列,進程調度算法按照先進先出的順序依次執行,每次執行時間是一個時間片,不論進程是否執行完畢,都會讓出處理機去處理下一個進程。
(2)時間片輪轉調度中,如果時間片太大,每個進程都能在一個時間片內執行完畢,則時間片輪轉算法變成了先來先服務調度。如果時間片設置的太小,則處理機需要在進程間頻繁切換,使得處理機開銷增大,真正用於用戶進程的時間減少
(3)時間片的設置應該綜合考慮一下幾個因素:
系統響應時間,就緒隊列的進程數目,系統的處理能力 -
多級反饋隊列調度
(1)多級反饋隊列調度是優先級調度算法和時間片輪轉算法的結合發展,該調度算法能動態調整進程優先級和時間片的大小,同時也不必預先估計進程的執行時間
(2)多級反饋隊列的設計思想- 應用設置多個就緒隊列,每個就緒隊列的優先級不同。一級隊列的優先級最高,2級隊列次之,優先級隨隊列標號的增大而減小
- 下級就緒隊列的時間片要比上級隊列的時間片增大一倍。序號越大的隊列時間片越長
(3)多級反饋隊列的進程調度方式:
- 新進程會放到第1級就緒隊列的末尾,按照先來先服務的順序被調度執行,當該進程執行時,若在一個時間片內處理完畢,則將該進程從隊列中撤除;若在1個時間片內未運行完畢,則將其放到2級隊列中等待處理,若在2級隊列更長的時間片內還沒處理完畢,則進入3級隊列
- 僅當1級隊列空時,調度程序才去調度2級隊列的進程。僅當i級隊列為空,采取調度i+1級隊列的任務
- 如果處理機正在執行第i級隊列中的進程,有新的進程進入到1~i-1中的任何一個隊列,則此時的新進程會搶占處理機,原來的進程放到第i級隊列的末尾等待下一輪被調用
(4)多級反饋隊列的優勢
- 短作業優先
- 短批處理作業的周轉時間很短
- 長批處理作業經過前面幾個隊列的部分執行,不會長期得不到處理