背景Linux會把進程分為普通進程和實時進程,普通進程采用CFS之類調(diào)度算法,而實時進程則是采用SCHED_FIFO或SCHED_RR。無論優(yōu)先級高低,實時進程都會優(yōu)先于SCHED_NORMAL中的所有進程先執(zhí)行,因為后者里面都是普通的非實時進程。
具體可以參看Linux閱碼場早期文章: 宋寶華:關(guān)于Linux進程優(yōu)先級數(shù)字混亂的徹底澄清
內(nèi)核線程的優(yōu)先級Linux內(nèi)核會將大量(并且在不斷增加中)工作放置在內(nèi)核線程中,這些線程是在內(nèi)核地址空間中運行的特殊進程。大多數(shù)內(nèi)核線程運行在SCHED_NORMAL類中,必須與普通用戶空間進程爭奪CPU時間。但是有一些內(nèi)核線程它的開發(fā)者們認為它們非常特殊,應該比用戶空間進程要有更高優(yōu)先級。因此也會把這些內(nèi)核線程放到SCHED_FIFO中去。
那么問題來了,某個內(nèi)核線程的實時優(yōu)先級到底該設(shè)為多少呢?
要回答這個問題,不僅需要判斷這個線程相對于所有其他實時線程是否更加重要,還要跟用戶態(tài)的實時進程比較誰更重要。這是一個很難回答的問題,更何況在不同的系統(tǒng)和工作模式下這個答案很有可能還會各不相同。所以一般來說,內(nèi)核開發(fā)人員也就是看心情直接隨便選一個實時優(yōu)先級。
現(xiàn)在的一些內(nèi)核實時線程如下:
最近大神Peter Zijlstra又看到有內(nèi)核開發(fā)者隨便給內(nèi)核線程設(shè)置優(yōu)先級,終于看不下去了, 指責這種把內(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ā)了一個系列[PATCH 00/23] sched: Remove FIFO priorities from modules 把設(shè)置內(nèi)核線程優(yōu)先級的接口干脆都給刪了,省得再有人瞎搞。
這個系列Patch(點擊閱讀原文可直達)主要做了下面幾件事情:
刪除了原有的sched_setschedule() / sched_setattr() 接口
增加了
sched_set_fifo(p)
sched_set_fifo_low(p)
sched_set_normal(p, nice)
其中調(diào)用sched_set_fifo()會將指定進程放到SCHED_FIFO類中,其優(yōu)先級為50——這只是min和max之間的一半位置。
對于需求不那么迫切的線程,sched_set_fifo_low()將優(yōu)先級設(shè)置為最低值(1)。
而調(diào)用sched_set_normal()會將線程返回給定好的值SCHED_NORMAL類。
通過只留下這三個接口可以避免開發(fā)者們再不停地去隨機選取內(nèi)核線程優(yōu)先級,因為這樣本來毫無意義,當然如果需要的話系統(tǒng)管理員還是可以按需調(diào)整不同進/線程的優(yōu)先級。
到目前為止,這個系列Patch已經(jīng)有不少得到Reviewed-by,相信如果合入后,內(nèi)核線程混亂的優(yōu)先級狀況會得到持續(xù)改善。
責任編輯:pj
-
內(nèi)核
+關(guān)注
關(guān)注
4文章
1427瀏覽量
42223 -
Linux
+關(guān)注
關(guān)注
88文章
11576瀏覽量
216642
發(fā)布評論請先 登錄
創(chuàng)龍 瑞芯微 RK3588 國產(chǎn)2.4GHz八核 工業(yè)開發(fā)板—IgH?EtherCAT主站開發(fā)案例(下)

創(chuàng)龍 瑞芯微 RK3588 國產(chǎn)2.4GHz八核 工業(yè)開發(fā)板—IgH?EtherCAT主站開發(fā)案例(上)

rtth studio中nano 如何創(chuàng)建動態(tài)線程?
線程超時函數(shù)中 assert 失敗是什么原因?qū)е碌?
rtt studio中nano 如何創(chuàng)建動態(tài)線程?
分辨率 vs 噪聲 —— ADC的挑戰(zhàn)

大牛多年研發(fā)電源問題匯總(受益匪淺)
智多晶FIFO_Generator IP介紹

求助,關(guān)于CAN接收問題求解
AXI接口FIFO簡介

用RC低通濾波的話,轉(zhuǎn)折頻率是可以滿足,但是RC濾波器中,充電時間常數(shù)RC能滿足△-∑型ADC的采樣時間要求嗎?
FIFO Generator的Xilinx官方手冊

FIFO的深度應該怎么計算

特斯拉計劃明年上半年推出經(jīng)濟型電動汽車
Efinity FIFO IP仿真問題 -v1

評論