Linux程序優先順序和nice值

2021-08-15 10:50:07 字數 2616 閱讀 6469

在學習了linux的完全公平排程演算法(cfs)後,記錄下學習軌跡

這篇文章主要講述,完全公平排程演算法的工作方式,和一些排程知識

我們可以通過ps -l看到當前正在執行的程序的詳細資訊其中

pid:程序號

ppid:該程序父程序的程序好

c:cpu是用百分比

pri:優先順序

ni:nice值

addr/sz/wchan:都與記憶體有關

tty:登陸者的終端,和遠端登陸脫不開干係

time:占用cpu時間

cmd:造成此程序的命令

這次講的重點主要和pri還有ni有關

我們把主要程序分為兩種:1.i/o消耗型程序;2.處理器消耗型程序             當然也有既是i/o消耗型也是處理器消耗型的程序

i/o消耗型程序如字面意思一樣,輪到它的時候會把大部分時間消耗在i/o請求和等待i/o上,真正使用cpu的時間很少,處理器消耗性程序會把大部分時間用在使用cpu進行計算之類的,如果給這兩種繼承分配的時間片長度相等,就會體現出不公平。

同時我們想給處理器消耗型的程序多一些處理器時間,而給i/o消耗性程序少一些處理器時間,於是linux採取的不是簡單的時間片排程演算法,而是改進的優先順序排程演算法cfs

linux系統是搶占式的,什麼概念呢,系統當前執行乙個程序,但這個時候乙個具有更高優先順序的程序突然得到某種資源進入了就緒狀態,然後他就來到cpu面前一腳踢開正在執行的程序(你奏凱,我先來)就搶奪了與cpu共度的美好時光。。。

cfs直接分配的不是時間片,而是cpu使用比,這個比例會收到nice值得影響,然後你懂,nice值低比重就高,nice高比重就低

q:linux使用的cfs排程器,決定搶占時機的就是上面說的cpu使用比,注意!反而cpu使用比低的新程序會立刻投入執行,cpu使用比高的新程序會延遲執行,為什麼呢

a:因為cfs的出發點基於乙個非常簡單的概念:程序排程的效果應如同系統具備乙個理想中的完美多工處理器。在這種系統中每個程序將能獲得1/n的處理器時間

就是說每個程序真正使用cpu的時間是一樣的,包括i/o消耗型和處理器消耗型,以達到真正的公平,這就解釋了剛才的問題,cpu使用比低的占用時間會不可避免的少於占用比高的程序,那我們只好讓這個程序具有搶占能力,一就緒就可以搶占,這樣子「看起來cpu使用比高了」(其實沒變)「看起來cpu占用時間也和其他程序一樣多了」(其實不多)

搶占能力高了,互動性相對而言就好了,你看你人打個遊戲,互動性就得高,不然你按個鍵放個技能電腦不給你處理,你就坑隊友了

nice值不是優先順序,但會影響優先順序 pri(new)=pri(old)+nice

時間片過長會導致人機互動欠佳,而時間片過短會導致大量的處理器時間浪費在程序的切換上,而且i/o消耗型程序和處理器消耗型程序之間的處理器時間的不公平之處也顯現出來了

cfs並沒有直接分配時間片到程序,而是將處理器的使用比劃分給了程序,這個比例還會受到nice值的影響

cfs的做法是允許每個程序執行一段時間,迴圈輪轉,選擇執行最少的程序作為寫乙個執行程序,所以根據nice值的含義-占用處理器的百分比,來根據系統中全部可執行程序總數來根據所佔比例的「時間片」執行

linux設計總是想分配給n個程序每個程序同樣多的處理器執行時間,當n趨於無窮大的時候,按理說是可以分配給無限小的時間週期,但是這麼做會很糟糕,我們也無法分配無限小的時間週期,雖然越小的時間週期可以帶來更好的互動性,但還是帶來不可接受的切換消耗,所以引入了乙個目標延遲,來模擬無限小排程週期的近似值,現在假設目標延遲就是20ms,用它除以所有當前可以執行的程序數目就可以得到每個程序獲得的時間片長度,當程序數無限大時候,每個程序分配的時間就趨於無限小,很好,程序切換又**了,那麼如果把最小值設為為1ms呢,程序數目再多我也保證每個程序在被強佔之前獲得1ms的執行時間,那麼這個1ms就被稱為最小粒度

然而最後影響cfs排程器排程程序的並不是優先順序的nice值,因為cfs說了,我要讓每個程序獲得的處理器時間都是一樣的(雖然不可能),所以有乙個vruntime的值表示程序執行的虛擬時間(就是在處理器上跑的時間累加和)這個vruntime值越小,說明該程序應該被優先執行(或者獲得更多的處理器時間片),因為他餓了。。。

一次排程間隔的虛擬執行時間=實際執行時間*(nice_0_load/權重)這就是nice值和vruntime之間的關係,其中,nice_0_load是nice為0時的權重

當nice值為0證明虛擬執行時間=實際執行時間

程序優先順序和程序nice值?

程序優先順序和程序nice值?首先,我想用乙個簡單的命令來引起這個議題。無論在linux或者unix系統中,用ps l命令則會類似輸出以下幾個內容 root dbbak root ps l 這裡用的是linux測試 f s uid pid ppid c pri ni addr sz wchan tt...

程序優先順序,nice理解

用top或者ps命令會輸出pri pr ni ni nice這三種指標值,這些到底是什麼東西?先給出大概的解釋如下 pri 程序優先權,代表這個程序可被執行的優先順序,其值越小,優先順序就越高,越早被執行 ni 程序nice值,代表這個程序的優先值 nice 改變過優先順序的程序的占用cpu的百分比...

程序優先順序,程序nice值和 nice的解釋

用top或者ps命令會輸出pri pr ni ni nice這三種指標值,這些到底是什麼東西?先給出大概的解釋如下 pri 程序優先權,代表這個程序可被執行的優先順序,其值越小,優先順序就越高,越早被執行 ni 程序nice值,代表這個程序的優先值 nice 改變過優先順序的程序的占用cpu的百分比...