Linux行程的排程優先順序數字會在好幾個地方出現:核心,使用者,top命令。他們各自都有自己的表示法。
我們用一個實際的例子來說明,下麵在Linux寫一個最簡單的程式:
編譯它執行,把排程策略設定為SCHED_FIFO,優先順序設定為50:
$ sudo chrt -f 50 ./a.out
我們看到a.out的PR(優先順序是)-51,CPU利用率100%。
但是從內核的視角上面來看,又會用99減去使用者在chrt裡面設定的優先順序:
所以上述行程的優先順序,在三個不同視角的值分別為:
Linux的RT排程策略和普通行程在排程演演算法上面有差異,RT的SCHED_FIFO和SCHED_RR採用的是一個bitmap:
每次從第0bit開始往後面搜尋第一個有行程ready的bit,然後排程這個優先順序上面的行程執行,所以在核心裡面,prio數值越小,優先順序越高。
但是從使用者態的API裡面,則是數值越大,優先順序越高。下麵的程式碼,一個執行緒透過呼叫API把自己設定為SCHED_FIFO,優先順序50
所以,你會發現,從使用者的視角來看,數值變大,優先順序變高。
上面這2個視角,都不是top命令的視角。對於RT的行程而言,TOP的視角裡面的
$ sudo chrt -f 88 ./a.out
這裡還有一個特例,就是使用者視角的99(核心bitmap視角的0),顯示為top命令的RT:
這說明一點,只有最高優先順序的RT行程,才在top裡面顯示為rt。
普通的講nice的人相對來說比較簡單,我們更關註它的nice值,-20~19之間,nice越低,優先順序越高,權重越大,在CFS的紅黑樹左邊的機會大。
你發現.nice為5的行程,在top命令顯示PR是25。
由此大家可以發現規律,對於普通的採用CFS策略的NORMAL行程,top裡面的
使用者
|
核心
|
Top
|
RT 50
|
49 (99-50)
|
-51 (-1-50)
|
RT 99
|
0
|
rt
|
NICE 5
|
|
25
|
NICE -5
|
|
15
|
由此發現,在top裡面,RT策略的PR都顯示為負數;最高優先順序的RT,顯示為rt。top命令裡面也是,數字越小,優先順序越高。
長按二維碼向我轉賬
受蘋果公司新規定影響,微信 iOS 版的贊賞功能被關閉,可透過二維碼轉賬支援公眾號。
微信掃一掃
使用小程式