0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何解決Linux進(jìn)程調(diào)度優(yōu)先級(jí)數(shù)字混亂的問(wèn)題?詳細(xì)實(shí)例分析

Linux閱碼場(chǎng) ? 來(lái)源:未知 ? 作者:易水寒 ? 2018-10-03 10:24 ? 次閱讀

Linux進(jìn)程的調(diào)度優(yōu)先級(jí)數(shù)字會(huì)在好幾個(gè)地方出現(xiàn):內(nèi)核,用戶,top命令。他們各自都有自己的表示法。我們用一個(gè)實(shí)際的例子來(lái)說(shuō)明,下面在Linux寫一個(gè)最簡(jiǎn)單的程序:

編譯它運(yùn)行,把調(diào)度策略設(shè)置為SCHED_FIFO,優(yōu)先級(jí)設(shè)置為50:$ sudo chrt -f50./a.out這個(gè)時(shí)候我們?cè)趖op命令里面觀察a.out:

我們看到a.out的PR(優(yōu)先級(jí)是)-51,CPU利用率100%。但是從內(nèi)核的視角上面來(lái)看,又會(huì)用99減去用戶在chrt里面設(shè)置的優(yōu)先級(jí):

上面的MAX_RT_PRIO的值為:

所以上述進(jìn)程的優(yōu)先級(jí),在三個(gè)不同視角的值分別為:

用戶 內(nèi)核 Top
50 49 -51

咋回事

Linux的RT調(diào)度策略和普通進(jìn)程在調(diào)度算法上面有差異,RT的SCHED_FIFO和SCHED_RR采用的是一個(gè)bitmap:

每次從第0bit開(kāi)始往后面搜索第一個(gè)有進(jìn)程ready的bit,然后調(diào)度這個(gè)優(yōu)先級(jí)上面的進(jìn)程執(zhí)行,所以在內(nèi)核里面,prio數(shù)值越小,優(yōu)先級(jí)越高。但是從用戶態(tài)的API里面,則是數(shù)值越大,優(yōu)先級(jí)越高。下面的代碼,一個(gè)線程通過(guò)調(diào)用API把自己設(shè)置為SCHED_FIFO,優(yōu)先級(jí)50

這個(gè)上面的50,對(duì)應(yīng)內(nèi)核的49。如果我們把優(yōu)先級(jí)設(shè)置為51:

這個(gè)51,對(duì)應(yīng)內(nèi)核bitmap上面的48。所以,你會(huì)發(fā)現(xiàn),從用戶的視角來(lái)看,數(shù)值變大,優(yōu)先級(jí)變高。上面這2個(gè)視角,都不是top命令的視角。對(duì)于RT的進(jìn)程而言,TOP的視角里面的PR= -1 -用戶視角譬如,下面用戶視角的88,

$ sudo chrt -f 88 ./a.out

對(duì)應(yīng)內(nèi)核視角的11,對(duì)應(yīng)top視角的-89:

這實(shí)在讓人有一點(diǎn)暈??!這里還有一個(gè)特例,就是用戶視角的99(內(nèi)核bitmap視角的0),顯示為top命令的RT:

這說(shuō)明一點(diǎn),只有最高優(yōu)先級(jí)的RT進(jìn)程,才在top里面顯示為rt。

普通的呢?

普通的講nice的人相對(duì)來(lái)說(shuō)比較簡(jiǎn)單,我們更關(guān)注它的nice值,-20~19之間,nice越低,優(yōu)先級(jí)越高,權(quán)重越大,在CFS的紅黑樹(shù)左邊的機(jī)會(huì)大。

你發(fā)現(xiàn).nice為5的進(jìn)程,在top命令顯示PR是25。下面我們看nice是-5的:

它顯示的是PR=15。由此大家可以發(fā)現(xiàn)規(guī)律,對(duì)于普通的采用CFS策略的NORMAL進(jìn)程,top里面的PR=20+NICE

在一起

總結(jié)一下,4個(gè)例子

用戶 內(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都顯示為負(fù)數(shù);最高優(yōu)先級(jí)的RT,顯示為rt。top命令里面也是,數(shù)字越小,優(yōu)先級(jí)越高。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 內(nèi)核
    +關(guān)注

    關(guān)注

    3

    文章

    1372

    瀏覽量

    40293
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11304

    瀏覽量

    209542
  • 編譯
    +關(guān)注

    關(guān)注

    0

    文章

    657

    瀏覽量

    32873

原文標(biāo)題:宋寶華: 關(guān)于Linux進(jìn)程優(yōu)先級(jí)數(shù)字混亂的徹底澄清

文章出處:【微信號(hào):LinuxDev,微信公眾號(hào):Linux閱碼場(chǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    嵌入式技術(shù)中如何定義進(jìn)程優(yōu)先級(jí)

    靜態(tài)優(yōu)先級(jí)是所有相關(guān)優(yōu)先級(jí)的計(jì)算的起點(diǎn),要么繼承自父進(jìn)程,要么用戶空間自行設(shè)定。一旦修改了靜態(tài)優(yōu)先級(jí),那么normal priority和動(dòng)態(tài)優(yōu)先級(jí)
    發(fā)表于 09-18 16:08 ?1560次閱讀
    嵌入式技術(shù)中如何定義<b class='flag-5'>進(jìn)程</b><b class='flag-5'>優(yōu)先級(jí)</b>

    基于優(yōu)先級(jí)搶占系統(tǒng)的QNX調(diào)度算法

    調(diào)度算法,是基于優(yōu)先級(jí)的。QNX的線程優(yōu)先級(jí),是一個(gè)0-255的數(shù)字,數(shù)字越大優(yōu)先級(jí)越高。所以,
    發(fā)表于 10-31 09:17 ?731次閱讀

    Linux進(jìn)程優(yōu)先級(jí)和環(huán)境變量詳解

    cpu 資源分配的先后順序,就是指進(jìn)程優(yōu)先權(quán)(priority) .優(yōu)先權(quán)高的進(jìn)程優(yōu)先執(zhí)行權(quán)利。配置
    發(fā)表于 03-28 10:54 ?847次閱讀

    Linux內(nèi)核進(jìn)程管理與調(diào)度:策略優(yōu)化與實(shí)踐分析

    今天給大家上點(diǎn)硬貨,關(guān)于Linux進(jìn)程管理和調(diào)度是學(xué)習(xí)和理解Linux的必學(xué)知識(shí)。為協(xié)調(diào)多個(gè)進(jìn)程 "同時(shí)" 運(yùn)行,現(xiàn)代操作系統(tǒng)通常使用
    發(fā)表于 05-08 09:42 ?1133次閱讀
    <b class='flag-5'>Linux</b>內(nèi)核<b class='flag-5'>進(jìn)程</b>管理與<b class='flag-5'>調(diào)度</b>:策略優(yōu)化與實(shí)踐<b class='flag-5'>分析</b>

    干貨分享:基于嵌入式Linux進(jìn)程調(diào)度實(shí)現(xiàn)方法

    可運(yùn)行隊(duì)列中。Linux進(jìn)程調(diào)度采用了動(dòng)態(tài)優(yōu)先級(jí) 和權(quán)值調(diào)控的方法,既可實(shí)現(xiàn)上述三種調(diào)度策略,又能保證實(shí)時(shí)
    發(fā)表于 12-10 14:17

    鴻蒙內(nèi)核源碼分析(調(diào)度隊(duì)列篇):進(jìn)程和Task的就緒隊(duì)列對(duì)調(diào)度的作用

    OsTaskPriQueueTop查最高優(yōu)先級(jí)任務(wù)OsDequeEmptySchedMap進(jìn)程出列[td]OsGetTopTask獲取被調(diào)度選擇的task鴻蒙內(nèi)核進(jìn)程和線程各有32個(gè)就
    發(fā)表于 11-23 11:09

    Linux 2.6進(jìn)程調(diào)度

    分析了與Linux 2.6 進(jìn)程調(diào)度密切相關(guān)的一些重要數(shù)據(jù)結(jié)構(gòu),詳細(xì)描述了進(jìn)程
    發(fā)表于 06-13 10:13 ?11次下載

    嵌入式系統(tǒng)優(yōu)先級(jí)反轉(zhuǎn)問(wèn)題的分析

    摘要: 本文介紹了嵌入式系統(tǒng)任務(wù)調(diào)度優(yōu)先級(jí)反轉(zhuǎn)的一個(gè)實(shí)例。通過(guò)實(shí)例的討論對(duì)嵌入式系統(tǒng)優(yōu)先級(jí)反轉(zhuǎn)有一個(gè)更深入的了解,有助于在編程
    發(fā)表于 03-11 12:18 ?948次閱讀
    嵌入式系統(tǒng)<b class='flag-5'>優(yōu)先級(jí)</b>反轉(zhuǎn)問(wèn)題的<b class='flag-5'>分析</b>

    Linux進(jìn)程調(diào)度的原理解析

    、counter、rt_priority。這四項(xiàng)是選擇進(jìn)程的依據(jù)。 其中,policy是進(jìn)程調(diào)度策略,用來(lái)區(qū)分實(shí)時(shí)進(jìn)程和普通進(jìn)程,實(shí)時(shí)
    發(fā)表于 11-02 11:01 ?1次下載

    Linux 進(jìn)程調(diào)度淺析

    優(yōu)先級(jí),如果有多個(gè)進(jìn)程同時(shí)處于可執(zhí)行狀態(tài),那么誰(shuí)優(yōu)先級(jí)高誰(shuí)就去執(zhí)行,沒(méi)有什么好糾結(jié)的了。那么,進(jìn)程優(yōu)先級(jí)該如何確定呢?有兩種方式:由用戶
    發(fā)表于 04-02 14:40 ?346次閱讀

    嵌入式Linux實(shí)時(shí)進(jìn)程調(diào)度算法改進(jìn)

    系統(tǒng)調(diào)度算法應(yīng)綜合考慮進(jìn)程的價(jià)值和截止兩個(gè)概念,以保證實(shí)時(shí)進(jìn)程在截止期內(nèi)盡可能多地完成,在這里提出新的調(diào)度算法,改進(jìn)Linux的實(shí)時(shí)性。即:
    發(fā)表于 04-02 14:43 ?426次閱讀

    linux進(jìn)程調(diào)度淺析

    。(下面會(huì)說(shuō)到)linux內(nèi)核將進(jìn)程分成兩個(gè)級(jí)別:普通進(jìn)程和實(shí)時(shí)進(jìn)程。實(shí)時(shí)進(jìn)程優(yōu)先級(jí)都高于普通
    發(fā)表于 04-02 14:45 ?346次閱讀

    鴻蒙內(nèi)核源碼:32級(jí)優(yōu)先級(jí)進(jìn)程和線程調(diào)度

    先看四個(gè)宏定義,進(jìn)程和線程(線程就是任務(wù))最高和最低優(yōu)先級(jí)定義,[0,31]區(qū)間,即32級(jí),優(yōu)先級(jí)用于調(diào)度,CPU根據(jù)這個(gè)來(lái)決定先運(yùn)行哪個(gè)進(jìn)程
    的頭像 發(fā)表于 04-24 11:18 ?2063次閱讀

    uC/OS-II學(xué)習(xí)筆記——優(yōu)先級(jí)反轉(zhuǎn)與優(yōu)先級(jí)繼承機(jī)制

    優(yōu)先級(jí)反轉(zhuǎn),是指某同步資源被較低優(yōu)先級(jí)進(jìn)程/線程所擁有,較高優(yōu)先級(jí)進(jìn)程/線程競(jìng)爭(zhēng)該同步資源未獲得該資源,而使得較高
    發(fā)表于 02-09 10:33 ?2次下載
    uC/OS-II學(xué)習(xí)筆記——<b class='flag-5'>優(yōu)先級(jí)</b>反轉(zhuǎn)與<b class='flag-5'>優(yōu)先級(jí)</b>繼承機(jī)制

    深入Linux進(jìn)程管理:提升效率與穩(wěn)定性的關(guān)鍵方法

    3.1Linux進(jìn)程調(diào)度與多任務(wù) 3.2進(jìn)程優(yōu)先級(jí) 3.3相對(duì)優(yōu)先級(jí) 3.4nice級(jí)別與權(quán)限
    的頭像 發(fā)表于 11-22 11:05 ?238次閱讀
    深入<b class='flag-5'>Linux</b><b class='flag-5'>進(jìn)程</b>管理:提升效率與穩(wěn)定性的關(guān)鍵方法