CFS中的虛擬執行時間

2021-07-15 19:32:01 字數 1093 閱讀 3360

cfs中的虛擬執行時間

本文**:

一直對cfs(completely fair scheduling,完全公平排程)中的虛擬執行時間(vruntime)不太理解,最近在看cgroup中的cpu子系統算是搞清楚了它是怎麼回事。

先 簡單說一下cfs排程演算法的思想:理想狀態下每個程序都能獲得相同的時間片,並且同時執行在cpu上,但實際上乙個cpu同一時刻執行的程序只能有乙個。 也就是說,當乙個程序占用cpu時,其他程序就必須等待。cfs為了實現公平,必須懲罰當前正在執行的程序,以使那些正在等待的程序下次被排程。

具體實現時,cfs通過每個程序的虛擬執行時間(vruntime)來衡量哪個程序最值得被排程。cfs中的就緒佇列是一棵以vruntime為鍵值的紅黑樹,虛擬時間越小的程序越靠近整個紅黑樹的最左端。因此,排程器每次選擇位於紅黑樹最左端的那個程序,該程序的vruntime最小。

虛擬執行時間是通過程序的實際執行時間和程序的權重(weight)計算出來的。在cfs排程器中,將程序優先順序這個概念弱化,而是強調程序的權重。乙個程序的權重越大,則說明這個程序更需要執行,因此它的虛擬執行時間就越小,這樣被排程的機會就越大。

那麼,在使用者態程序的優先順序nice值與cfs排程器中的權重又有什麼關係?在核心中通過prio_to_weight陣列進行nice值和權重的轉換。

static const int prio_to_weight[40] = ;

而在核心中,程序的虛擬執行時間是自程序誕生以來進行累加的,每個時鐘週期內乙個程序的虛擬執行時間是通過下面的方法計算的:

一次排程間隔的虛擬執行時間=實際執行時間*(nice_0_load/權重)

其中,nice_0_load是nice為0時的權重。也就是說,nice值為0的程序實際執行時間和虛擬執行時間相同。通過這個公式可以看到,權重越大的程序獲得的虛擬執行時間越小,那麼它將被排程器所排程的機會就越大

abap執行時間

abap 4的程式會需要花費大量的時間執行,而且會使其它程序被迫暫停以等待當前程式執行結束。這裡提供一些建議以提高你的程式執行速度和系統荷載。1.最主要的是儘量減少i o操作,然後是記憶體占用,在再就是cpu的負載。類似對硬碟的讀寫的i o操作是最耗費時間的。如果對記憶體的操作不加以控制,可能有些時...

程式執行時間

要獲得乙個c語言程式的執行時間,常用的方法是呼叫標頭檔案time.h,其中提供了clock 函式,可以捕捉從程式開始執行到clock 被呼叫時所 耗費的時間。這個時間單位是clock tick,即 時鐘打點 同時還有乙個常數clk tck,給出了機器時鐘每秒所走的時鐘打點數。於是為了獲 得乙個函式f...

程式執行時間

時間限制 1000 ms 記憶體限制 32768 kb 長度限制 100 kb 判斷程式 standard 來自 小小 要獲得乙個c語言程式的執行時間,常用的方法是呼叫標頭檔案time.h,其中提供了clock 函式,可以捕捉從程式開始執行到clock 被呼叫時所 耗費的時間。這個時間單位是cloc...