Linux 完全公平排程器

2021-09-27 10:36:55 字數 1070 閱讀 4572

讀書筆記,linux 系統程式設計 第六章高階程序管理

linux排程器為完全公平排程器,簡稱為cfs。和最近華為鴻蒙提出的確定時延排程相反。

完全公平排程器和傳統的unix排程器有很大的區別。在大多數unix系統中,包括引入cfs之前的linux系統,在程序排程中存在兩個基本的基於程序的因素:優先順序和時間片。在傳統的程序排程器中,會給每個就緒程序分配乙個時間片。程序可能會一直執行直到消耗完分配給它的時間片。排程器會給每個程序分配優先順序。程序排程器會先排程優先順序高的程序,再排程優先順序低的程序。這個排程演算法非常簡單,而且對於早期的基於時間片共享的unix系統效果良好。但對於互動和公平性的系統而言,如現代計算機的桌面和移動裝置,該演算法就有些差強人意了。

完全公平排程器引入了一種不同的演算法,成為公平排程,它消除了時間片作為處理器分配單元,而是給每個程序分配了處理器的分配比例。

演算法邏輯如下:cfs最初給n個程序分別分配1/n的處理器時間。然後cfs通過優先順序(nice值)權衡每個程序的比例,調整分配。預設的優先順序為0,權值是1,則比例不變。優先順序的值設定的越小(優先順序越高),權值就越高,就增加給該程序的處理器比例值;優先順序的值設定的越高(優先順序越低),權值越低,就減少分配給該程序的比例值。

通過這種方式,cfs就基於權值分配給了每個程序處理器比例。要確定每個進**正的執行時間,cfs需要把比例劃分為乙個固定週期,這個週期叫目標延遲,表示系統的排程延遲。

舉個例子:假設目標延遲設定為20ms,有兩個優先順序相同的程序,那每個程序分配到的時間就是10ms。這樣cfs就會先執行乙個程序執行10ms,再執行另乙個程序執行10ms,不斷反覆。

如果當前有200個程序怎麼辦,延遲如果是20ms,那每個程序只能分配到100微秒。這樣大部分時間就會浪費在切換程序的上下文,cfs引入最小粒度解決這個問題。

「最小粒度」是指任意程序執行時間的基準值。所有程序,不管分配到處理器的時間比例是多少,都會至少執行最小粒度的時間。這種機制可以保證不會大部分時間浪費在程序切換上。

通過給程序分配處理器資源比例,而不是固定的時間片,cfs可以實現公平性。cfs也支援可配置的時間延遲。cfs中,程序按配額執行,時間片是根據系統可執行的程序數動態變化的,解決了傳統排程器對於互動程序和io約束性程序所面臨的很多問題。

完全公平排程

cfs定義了一種新的模型,它給執行佇列中的每個程序都設定了乙個虛擬時鐘,即vruntime。如果乙個程序被排程器投入執行,隨著時間的增長,其vruntime將不斷增大,而沒有得到執行的程序vruntime則不會發生變化。排程器總是選擇vruntime最小的那個程序來執行,這就是所謂的 完全公平 為了...

完全公平排程 cfs

現代os都會把時間用 當量quanta 來表示。這樣的單位有助於對不同任務的管理和排程。os version tick freqency linux2.4 100hz linux2.6 above 100,250,300 or1000hz 更高的os具有可選的tick頻率,這種配置一般在開始階段配置...

linux程序排程 完全公平排程類

完全公平排程類是排程類的乙個例項 static const struct sched class fair sched class 在主排程器和週期排程器中會根據程序型別呼叫完全公平排程類或者實時排程類的函式。next,指向空閒排程類,而實時排程類的next則指向完全公平排程類。這個順序在編譯之前已...