Linux

工作怎麼樣?

  • November 27, 2016

sched_setscheduler說:

所有調度都是搶占式的:如果具有更高靜態優先級的程序準備好執行,則目前執行的程序將被搶占並返回其靜態優先級的等待列表。

setpriority

當系統上有任何其他更高優先級的負載時,這會導致非常低的 nice 值 (+19) 真正為程序提供很少的 CPU,並使得高的 nice 值 (-20) 將大部分 CPU 提供給需要它的應用程序

那麼,改變 nice 值將如何影響程序的執行呢?它是否類似於 RT 調度(具有較高 nice 值的程序將中斷具有較低 nice 值的程序)?


網際網路上的所有資訊都是如何使用nice,以及如何更改程序的優先級。沒有連結解釋具有不同優先級的程序究竟是如何工作的。我什至找不到原始碼。

特定程序接收的處理器時間的比例取決於它與其他可執行程序之間的友好度的相對差異。

Linux Completely Fair Scheduler (CFS) 根據 niceness 計算權重。重量大致相當於1024 / (1.25 ^ nice_value)。隨著 nice 值的降低,權重呈指數增長。為程序分配的時間片與程序的權重除以所有可執行程序的總權重成正比。CFS 的實施是在kernel/sched/fair.c.

CFS 具有調度持續時間的目標延遲。較小的目標延遲會產生更好的互動性,但隨著目標延遲的減少,切換成本會增加,從而降低整體吞吐量。

例如,給定一個 20 毫秒的目標延遲和兩個同等性能的可執行程序,那麼兩個程序將各自執行 10 毫秒,然後被另一個程序搶占。如果有 10 個程序相同,則每個程序執行 2 毫秒。

現在考慮兩個程序,一個niceness為0(預設),另一個niceness為5。相應權重之間的比例差異大約為1/3,這意味著更高優先級的程序接收大約15毫秒的時間片而較低優先級的程序接收 5 毫秒的時間片。

最後考慮兩個程序,niceness 值分別為 5 和 10。雖然在這種情況下絕對好感度更大,但好感度值之間的相對差異與前一個範例中的相同,從而產生相同的時間片劃分。

引用自:https://unix.stackexchange.com/questions/89909