Linux進程的調(diào)度優(yōu)先級數(shù)字會在好幾個地方出現(xiàn):內(nèi)核,用戶,top命令。他們各自都有自己的表示法。我們用一個實際的例子來說明,下面在Linux寫一個最簡單的程序:
編譯它運行,把調(diào)度策略設置為SCHED_FIFO,優(yōu)先級設置為50:$ sudo chrt -f50./a.out這個時候我們在top命令里面觀察a.out:
我們看到a.out的PR(優(yōu)先級是)-51,CPU利用率100%。但是從內(nèi)核的視角上面來看,又會用99減去用戶在chrt里面設置的優(yōu)先級:
上面的MAX_RT_PRIO的值為:
所以上述進程的優(yōu)先級,在三個不同視角的值分別為:
用戶 | 內(nèi)核 | Top |
50 | 49 | -51 |
咋回事
Linux的RT調(diào)度策略和普通進程在調(diào)度算法上面有差異,RT的SCHED_FIFO和SCHED_RR采用的是一個bitmap:
每次從第0bit開始往后面搜索第一個有進程ready的bit,然后調(diào)度這個優(yōu)先級上面的進程執(zhí)行,所以在內(nèi)核里面,prio數(shù)值越小,優(yōu)先級越高。但是從用戶態(tài)的API里面,則是數(shù)值越大,優(yōu)先級越高。下面的代碼,一個線程通過調(diào)用API把自己設置為SCHED_FIFO,優(yōu)先級50
這個上面的50,對應內(nèi)核的49。如果我們把優(yōu)先級設置為51:
這個51,對應內(nèi)核bitmap上面的48。所以,你會發(fā)現(xiàn),從用戶的視角來看,數(shù)值變大,優(yōu)先級變高。上面這2個視角,都不是top命令的視角。對于RT的進程而言,TOP的視角里面的PR= -1 -用戶視角譬如,下面用戶視角的88,
$ sudo chrt -f 88 ./a.out
對應內(nèi)核視角的11,對應top視角的-89:
這實在讓人有一點暈!!這里還有一個特例,就是用戶視角的99(內(nèi)核bitmap視角的0),顯示為top命令的RT:
這說明一點,只有最高優(yōu)先級的RT進程,才在top里面顯示為rt。
普通的呢?
普通的講nice的人相對來說比較簡單,我們更關(guān)注它的nice值,-20~19之間,nice越低,優(yōu)先級越高,權(quán)重越大,在CFS的紅黑樹左邊的機會大。
你發(fā)現(xiàn).nice為5的進程,在top命令顯示PR是25。下面我們看nice是-5的:
它顯示的是PR=15。由此大家可以發(fā)現(xiàn)規(guī)律,對于普通的采用CFS策略的NORMAL進程,top里面的PR=20+NICE
在一起
總結(jié)一下,4個例子
用戶 | 內(nèi)核 | Top |
RT 50 | 49 (99-50) | -51 (-1-50) |
RT 99 | 0 | rt |
NICE 5 | 25 | |
NICE -5 | 15 |
由此發(fā)現(xiàn),在top里面,RT策略的PR都顯示為負數(shù);最高優(yōu)先級的RT,顯示為rt。top命令里面也是,數(shù)字越小,優(yōu)先級越高。
-
內(nèi)核
+關(guān)注
關(guān)注
3文章
1382瀏覽量
40430 -
Linux
+關(guān)注
關(guān)注
87文章
11345瀏覽量
210406 -
編譯
+關(guān)注
關(guān)注
0文章
661瀏覽量
33046
原文標題:宋寶華: 關(guān)于Linux進程優(yōu)先級數(shù)字混亂的徹底澄清
文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
嵌入式技術(shù)中如何定義進程優(yōu)先級
![嵌入式技術(shù)中如何定義<b class='flag-5'>進程</b><b class='flag-5'>優(yōu)先級</b>](https://file.elecfans.com/web1/M00/C6/DC/o4YBAF9katKATxQDAADhZRWa0Nk128.png)
基于優(yōu)先級搶占系統(tǒng)的QNX調(diào)度算法
Linux進程優(yōu)先級和環(huán)境變量詳解
Linux內(nèi)核進程管理與調(diào)度:策略優(yōu)化與實踐分析
![<b class='flag-5'>Linux</b>內(nèi)核<b class='flag-5'>進程</b>管理與<b class='flag-5'>調(diào)度</b>:策略優(yōu)化與實踐<b class='flag-5'>分析</b>](https://file1.elecfans.com/web2/M00/82/8B/wKgaomRYU8uARetaAAAaY9wHsB8889.jpg)
干貨分享:基于嵌入式Linux中進程調(diào)度實現(xiàn)方法
鴻蒙內(nèi)核源碼分析(調(diào)度隊列篇):進程和Task的就緒隊列對調(diào)度的作用
Linux 2.6進程調(diào)度
嵌入式系統(tǒng)優(yōu)先級反轉(zhuǎn)問題的分析
![嵌入式系統(tǒng)<b class='flag-5'>優(yōu)先級</b>反轉(zhuǎn)問題的<b class='flag-5'>分析</b>](https://file1.elecfans.com//web2/M00/A4/2A/wKgZomUMMvOALHcTAABElMtCtgs035.jpg)
Linux進程調(diào)度的原理解析
Linux 進程調(diào)度淺析
嵌入式Linux實時進程調(diào)度算法改進
linux進程調(diào)度淺析
鴻蒙內(nèi)核源碼:32級優(yōu)先級的進程和線程調(diào)度
uC/OS-II學習筆記——優(yōu)先級反轉(zhuǎn)與優(yōu)先級繼承機制
![uC/OS-II學習筆記——<b class='flag-5'>優(yōu)先級</b>反轉(zhuǎn)與<b class='flag-5'>優(yōu)先級</b>繼承機制](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
深入Linux進程管理:提升效率與穩(wěn)定性的關(guān)鍵方法
![深入<b class='flag-5'>Linux</b><b class='flag-5'>進程</b>管理:提升效率與穩(wěn)定性的關(guān)鍵方法](https://file1.elecfans.com/web2/M00/0C/2C/wKgZomc_9lyAIU4mAAAQY3FCwIs816.png)
評論