首先任務
理論上
- 的虛擬運行時間是當任務將開始執行 其下一個時間片理論上完美的多線程CPU上。
- 在實踐中它的實際運行時間歸到正在運行的任務
1總數如何進行調度安排所有的 sysctl_sched_latency時間內的任務?
它維護一個時間排序的紅色和黑色的樹,其中所有可運行的任務是 按其虛擬運行時間排序。左邊的節點已經運行了最短的時間。 CFS挑選最左邊的任務,並運行它,直到任務計劃或調度蜱 那麼CPU時間花在它被添加到其虛擬運行時中運行。 當它不再是最左邊的節點時,則運行具有最短虛擬的新任務,並且舊的任務被預充電。
2.當一個進程被喚醒究竟在place_entity功能呢?
短版:
當一個進程被喚醒的place_entity功能要麼保留 任務的虛擬運行,因爲它是或增加它。
龍版本:
當一個進程被喚醒的place_entity功能做以下的事情
初始化臨時虛擬運行時最小的任務的CFS運行隊列的虛擬運行。
由於睡眠時間少於一個延遲時間不計算,所以 將初始化閾值變量初始化爲sysctl_sched_latency。 如果啓用GENTLE_FAIR_SLEEPERS功能,那麼 則是該變量值的一半。 用此閾值減少先前初始化的臨時虛擬運行時間。
確保臨時虛擬運行時間至少等於任務的虛擬運行時,通過計算虛擬運行時間設置爲最大的本身和任務的虛擬運行。
設置任務的虛擬運行到臨時運行。
3.當一個進程被喚醒,爲什麼是vruntime由sched_latency減去調整?
虛擬運行時間遞減,因爲睡眠不足單等待時間不計。 例如,如果它的 只睡眠一個調度程序延遲,那麼該任務不應在紅黑樹中更改其位置。
能4.不是導致在運行隊列中vruntime值差異較大的過程?
相信在步驟3對問題2所述的邏輯,防止或至少最小化。
參考
sched.c Linux Kernel Source
sched_fair.c Linux Kernel Source
Notes on the CFS Scheduler Design
回答問題1並沒有真正回答關於內'sysctl_sched_latency' CFS調度。 – kavadias