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

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

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

為什么說內(nèi)核線程放入SCHED_FIFO的做法毫無意義?

lhl545545 ? 來源:Linuxer ? 作者:Linuxer ? 2020-06-09 15:21 ? 次閱讀

背景Linux會(huì)把進(jìn)程分為普通進(jìn)程和實(shí)時(shí)進(jìn)程,普通進(jìn)程采用CFS之類調(diào)度算法,而實(shí)時(shí)進(jìn)程則是采用SCHED_FIFO或SCHED_RR。無論優(yōu)先級(jí)高低,實(shí)時(shí)進(jìn)程都會(huì)優(yōu)先于SCHED_NORMAL中的所有進(jìn)程先執(zhí)行,因?yàn)楹笳呃锩娑际瞧胀ǖ姆菍?shí)時(shí)進(jìn)程。

具體可以參看Linux閱碼場早期文章: 宋寶華:關(guān)于Linux進(jìn)程優(yōu)先級(jí)數(shù)字混亂的徹底澄清

內(nèi)核線程的優(yōu)先級(jí)Linux內(nèi)核會(huì)將大量(并且在不斷增加中)工作放置在內(nèi)核線程中,這些線程是在內(nèi)核地址空間中運(yùn)行的特殊進(jìn)程。大多數(shù)內(nèi)核線程運(yùn)行在SCHED_NORMAL類中,必須與普通用戶空間進(jìn)程爭奪CPU時(shí)間。但是有一些內(nèi)核線程它的開發(fā)者們認(rèn)為它們非常特殊,應(yīng)該比用戶空間進(jìn)程要有更高優(yōu)先級(jí)。因此也會(huì)把這些內(nèi)核線程放到SCHED_FIFO中去。

那么問題來了,某個(gè)內(nèi)核線程的實(shí)時(shí)優(yōu)先級(jí)到底該設(shè)為多少呢?

要回答這個(gè)問題,不僅需要判斷這個(gè)線程相對(duì)于所有其他實(shí)時(shí)線程是否更加重要,還要跟用戶態(tài)的實(shí)時(shí)進(jìn)程比較誰更重要。這是一個(gè)很難回答的問題,更何況在不同的系統(tǒng)和工作模式下這個(gè)答案很有可能還會(huì)各不相同。所以一般來說,內(nèi)核開發(fā)人員也就是看心情直接隨便選一個(gè)實(shí)時(shí)優(yōu)先級(jí)。

現(xiàn)在的一些內(nèi)核實(shí)時(shí)線程如下:

最近大神Peter Zijlstra又看到有內(nèi)核開發(fā)者隨便給內(nèi)核線程設(shè)置優(yōu)先級(jí),終于看不下去了, 指責(zé)這種把內(nèi)核線程放入SCHED_FIFO的做法毫無意義:

“the kernel has no clue what actual priority it should use for various things, so it is useless (or worse, counter productive) to even try”

所以他發(fā)了一個(gè)系列[PATCH 00/23] sched: Remove FIFO priorities from modules 把設(shè)置內(nèi)核線程優(yōu)先級(jí)的接口干脆都給刪了,省得再有人瞎搞。

這個(gè)系列Patch(點(diǎn)擊閱讀原文可直達(dá))主要做了下面幾件事情:

刪除了原有的sched_setschedule() / sched_setattr() 接口

增加了

sched_set_fifo(p)

sched_set_fifo_low(p)

sched_set_normal(p, nice)

其中調(diào)用sched_set_fifo()會(huì)將指定進(jìn)程放到SCHED_FIFO類中,其優(yōu)先級(jí)為50——這只是min和max之間的一半位置。

對(duì)于需求不那么迫切的線程,sched_set_fifo_low()將優(yōu)先級(jí)設(shè)置為最低值(1)。

而調(diào)用sched_set_normal()會(huì)將線程返回給定好的值SCHED_NORMAL類。

通過只留下這三個(gè)接口可以避免開發(fā)者們?cè)俨煌5厝ルS機(jī)選取內(nèi)核線程優(yōu)先級(jí),因?yàn)檫@樣本來毫無意義,當(dāng)然如果需要的話系統(tǒng)管理員還是可以按需調(diào)整不同進(jìn)/線程的優(yōu)先級(jí)。

到目前為止,這個(gè)系列Patch已經(jīng)有不少得到Reviewed-by,相信如果合入后,內(nèi)核線程混亂的優(yōu)先級(jí)狀況會(huì)得到持續(xù)改善。
責(zé)任編輯:pj

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

    關(guān)注

    3

    文章

    1336

    瀏覽量

    40085
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11124

    瀏覽量

    207927
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    為什么電瓶車上樓充電引起的電氣火災(zāi)還是一直發(fā)生?

    01引言 近日又發(fā)生電瓶車火災(zāi),然后主管部門,物業(yè),等等又是各種發(fā)文,不要如何如何,幾乎毫無意義,還是要從根本上解決問題,才能高效排除隱患。不單純本次的原因,縱觀這么多次火災(zāi),主要是電動(dòng)車或電動(dòng)車
    的頭像 發(fā)表于 09-18 16:32 ?129次閱讀
    為什么電瓶車上樓充電引起的電氣火災(zāi)還是一直發(fā)生?

    如何解決電動(dòng)車電瓶上樓充電起火問題

    易允恒 安科瑞電氣股份有限公司 201801 01引言 近日又發(fā)生電瓶車火災(zāi),然后主管部門,物業(yè),等等又是各種發(fā)文,不要如何如何,幾乎毫無意義,還是要從根本上解決問題,才能高效排除隱患。不單純本次
    的頭像 發(fā)表于 09-18 15:09 ?97次閱讀
    如何解決電動(dòng)車電瓶上樓充電起火問題

    使用FX3同步fifo兩地址線能夠配置成四線程模式嗎?

    使用FX3同步fifo兩地址線能夠配置成四線程模式嗎,也就是兩個(gè)端點(diǎn)輸出,兩個(gè)端點(diǎn)輸入,麻煩大佬回復(fù)一下?。?/div>
    發(fā)表于 07-02 07:45

    NTP網(wǎng)絡(luò)時(shí)間服務(wù)器解決安防時(shí)間同步問題

    安防視頻監(jiān)控中,如果監(jiān)控錄像設(shè)備顯示時(shí)間不準(zhǔn)確,或者不同設(shè)備間時(shí)間混亂,系統(tǒng)時(shí)間無法準(zhǔn)確調(diào)整,亦或自動(dòng)校對(duì)時(shí)間不準(zhǔn),那保存下來的視頻資料會(huì)因此失去參考價(jià)值,而變得毫無意義。 根據(jù)現(xiàn)場施工總結(jié)和客戶
    的頭像 發(fā)表于 06-06 15:38 ?261次閱讀
    NTP網(wǎng)絡(luò)時(shí)間服務(wù)器解決安防時(shí)間同步問題

    工業(yè)機(jī)器人伺服電機(jī)測試方案

    機(jī)械行業(yè)的熱門話題之一。隨著時(shí)代的發(fā)展,工業(yè)機(jī)器人將繼續(xù)向更智能、更精細(xì)的方向發(fā)展,逐漸取代人類完成繁重、重復(fù)或毫無意義的流程性作業(yè),推動(dòng)工業(yè)制造的進(jìn)步和發(fā)展。根
    的頭像 發(fā)表于 03-28 08:32 ?494次閱讀
    工業(yè)機(jī)器人伺服電機(jī)測試方案

    TLF35584寄存器VMONSTAT出現(xiàn)異常行為的原因?

    (跟蹤器)正常也毫無意義換句話說,當(dāng) QVR 無法運(yùn)行時(shí),QT1 和 QT2 能正常工作是沒有意義的。 這就是我在 VMONSTAT 上看到的內(nèi)容: 另外一個(gè)問題是,VMONSTAT
    發(fā)表于 01-22 06:16

    數(shù)字時(shí)代:關(guān)于數(shù)據(jù)可視化的定義/優(yōu)勢及示例

    毫無意義和難以管理。這就是數(shù)據(jù)可視化發(fā)揮關(guān)鍵作用的地方。 數(shù)據(jù)可視化的定義 “數(shù)據(jù)可視化”的定義是廣泛的。但大多數(shù)定義側(cè)重于數(shù)據(jù)與計(jì)算機(jī)技術(shù)之間的聯(lián)系,以便將數(shù)據(jù)轉(zhuǎn)換為視覺形式。不管如何,數(shù)據(jù)的可視化表示是這些定
    的頭像 發(fā)表于 12-12 18:04 ?673次閱讀
    數(shù)字時(shí)代:關(guān)于數(shù)據(jù)可視化的定義/優(yōu)勢及示例

    內(nèi)核hotplug回調(diào)線程喚醒

    hotplug回調(diào)線程喚醒 內(nèi)核使用以下流程喚醒特定cpu的hotplug線程,用于執(zhí)行實(shí)際的cpu啟動(dòng)流程: 由于cpu啟動(dòng)時(shí)需要與一系列模塊交互以執(zhí)行相應(yīng)的準(zhǔn)備工作,為此內(nèi)核為其定
    的頭像 發(fā)表于 12-05 15:55 ?347次閱讀
    <b class='flag-5'>內(nèi)核</b>hotplug回調(diào)<b class='flag-5'>線程</b>喚醒

    如何查看一個(gè)線程的ID

    1.什么是線程? linux內(nèi)核中是沒有線程這個(gè)概念的,而是輕量級(jí)進(jìn)程的概念:LWP。一般我們所說的線程概念是C庫當(dāng)中的概念。 1.1線程
    的頭像 發(fā)表于 11-13 14:38 ?972次閱讀
    如何查看一個(gè)<b class='flag-5'>線程</b>的ID

    Linux線程線程與異步編程、協(xié)程與異步介紹

    線程之間的切換不需要陷入內(nèi)核,但部分操作系統(tǒng)中用戶態(tài)線程的切換需要內(nèi)核態(tài)線程的輔助。 協(xié)程是編程語言(或者 lib)提供的特性(協(xié)程之間的切
    的頭像 發(fā)表于 11-11 11:35 ?809次閱讀
    Linux<b class='flag-5'>線程</b>、<b class='flag-5'>線程</b>與異步編程、協(xié)程與異步介紹

    同步FIFO和異步FIFO的區(qū)別 同步FIFO和異步FIFO各在什么情況下應(yīng)用

    同步FIFO和異步FIFO的區(qū)別 同步FIFO和異步FIFO各在什么情況下應(yīng)用? 1. 同步FIFO和異步
    的頭像 發(fā)表于 10-18 15:23 ?1466次閱讀

    OS_OPT_POST_NO_SCHED的意思是什么?

    教程里使用了OS_OPT_POST_NO_SCHED發(fā)送完消息后才調(diào)度,如果不使用的話意思是發(fā)送過程中就調(diào)度?感覺很奇怪,那OSQPost函數(shù)后面的代碼還能執(zhí)行嗎?
    發(fā)表于 10-18 08:09

    AQS如何解決線程同步與通信問題

    我們?cè)诘谝黄姓f到AQS使用的是管程模型,而管程模型是使用條件變量來解決同步通信問題的。條件變量會(huì)有兩個(gè)方法,喚醒和等待。當(dāng)條件滿足時(shí),我們會(huì)通過喚醒方法將條件隊(duì)列中的線程放入第二篇所說的同步隊(duì)列中
    的頭像 發(fā)表于 10-13 11:23 ?430次閱讀

    線程池的兩個(gè)思考

    今天還是一下線程池的兩個(gè)思考。 池子 我們常用的線程池, JDK的ThreadPoolExecutor. CompletableFutures 默認(rèn)使用了
    的頭像 發(fā)表于 09-30 11:21 ?2938次閱讀
    <b class='flag-5'>線程</b>池的兩個(gè)思考

    LogiCORE IP AXI4-Stream FIFO內(nèi)核解決方案

    LogiCORE IP AXI4-Stream FIFO內(nèi)核允許以內(nèi)存映射方式訪問一個(gè)AXI4-Stream接口。該內(nèi)核可用于與AXI4-Stream IP接口,類似于LogiCORE IP AXI以太網(wǎng)
    的頭像 發(fā)表于 09-25 10:55 ?1115次閱讀
    LogiCORE IP AXI4-Stream <b class='flag-5'>FIFO</b><b class='flag-5'>內(nèi)核</b>解決方案