背景Linux會把進程分為普通進程和實時進程,普通進程采用CFS之類調度算法,而實時進程則是采用SCHED_FIFO或SCHED_RR。無論優先級高低,實時進程都會優先于SCHED_NORMAL中的所有進程先執行,因為后者里面都是普通的非實時進程。
具體可以參看Linux閱碼場早期文章: 宋寶華:關于Linux進程優先級數字混亂的徹底澄清
內核線程的優先級Linux內核會將大量(并且在不斷增加中)工作放置在內核線程中,這些線程是在內核地址空間中運行的特殊進程。大多數內核線程運行在SCHED_NORMAL類中,必須與普通用戶空間進程爭奪CPU時間。但是有一些內核線程它的開發者們認為它們非常特殊,應該比用戶空間進程要有更高優先級。因此也會把這些內核線程放到SCHED_FIFO中去。
那么問題來了,某個內核線程的實時優先級到底該設為多少呢?
要回答這個問題,不僅需要判斷這個線程相對于所有其他實時線程是否更加重要,還要跟用戶態的實時進程比較誰更重要。這是一個很難回答的問題,更何況在不同的系統和工作模式下這個答案很有可能還會各不相同。所以一般來說,內核開發人員也就是看心情直接隨便選一個實時優先級。
現在的一些內核實時線程如下:
最近大神Peter Zijlstra又看到有內核開發者隨便給內核線程設置優先級,終于看不下去了, 指責這種把內核線程放入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”
所以他發了一個系列[PATCH 00/23] sched: Remove FIFO priorities from modules 把設置內核線程優先級的接口干脆都給刪了,省得再有人瞎搞。
這個系列Patch(點擊閱讀原文可直達)主要做了下面幾件事情:
刪除了原有的sched_setschedule() / sched_setattr() 接口
增加了
sched_set_fifo(p)
sched_set_fifo_low(p)
sched_set_normal(p, nice)
其中調用sched_set_fifo()會將指定進程放到SCHED_FIFO類中,其優先級為50——這只是min和max之間的一半位置。
對于需求不那么迫切的線程,sched_set_fifo_low()將優先級設置為最低值(1)。
而調用sched_set_normal()會將線程返回給定好的值SCHED_NORMAL類。
通過只留下這三個接口可以避免開發者們再不停地去隨機選取內核線程優先級,因為這樣本來毫無意義,當然如果需要的話系統管理員還是可以按需調整不同進/線程的優先級。
到目前為止,這個系列Patch已經有不少得到Reviewed-by,相信如果合入后,內核線程混亂的優先級狀況會得到持續改善。
責任編輯:pj
-
內核
+關注
關注
3文章
1378瀏覽量
40345 -
Linux
+關注
關注
87文章
11329瀏覽量
209972
發布評論請先 登錄
相關推薦
用RC低通濾波的話,轉折頻率是可以滿足,但是RC濾波器中,充電時間常數RC能滿足△-∑型ADC的采樣時間要求嗎?
FIFO Generator的Xilinx官方手冊
![<b class='flag-5'>FIFO</b> Generator的Xilinx官方手冊](https://file1.elecfans.com/web1/M00/F4/CF/wKgaoWcyw0uAFsglAAAmkjNjX48160.png)
特斯拉計劃明年上半年推出經濟型電動汽車
為什么電瓶車上樓充電引起的電氣火災還是一直發生?
![為什么電瓶車上樓充電引起的電氣火災還是一直發生?](https://file1.elecfans.com//web2/M00/06/C4/wKgZombqj-yAcU3dAADMMNCIPFM800.png)
如何解決電動車電瓶上樓充電起火問題
![如何解決電動車電瓶上樓充電起火問題](https://file1.elecfans.com//web2/M00/07/AB/wKgaombqfIuAQOIOAADMMNCIPFM424.png)
“快、準、穩”——阿普奇AK5在機械手領域的應用解決方案
![“快、準、穩”——阿普奇AK5在機械手領域的應用解決方案](https://file1.elecfans.com//web2/M00/01/7E/wKgZoma1vA-AR3FxAACqpfz-u5I608.jpg)
一加聯合寧德新能源推出冰川電池,專為高性能手機打造
![一加聯合寧德新能源推出冰川電池,專為高性能手機打造](https://file1.elecfans.com//web2/M00/F1/59/wKgZomZ00rSAbPmgAAJhfJjh7RQ81.jpeg)
NTP網絡時間服務器解決安防時間同步問題
![NTP網絡時間服務器解決安防時間同步問題](https://file1.elecfans.com/web2/M00/A6/33/wKgaomUSmM6AAKXHAAFmcT9Nwyc385.png)
同步FIFO和異步FIFO區別介紹
![同步<b class='flag-5'>FIFO</b>和異步<b class='flag-5'>FIFO</b>區別介紹](https://file1.elecfans.com/web2/M00/EB/91/wKgZomZetI6ACXETAAAiwkYcoTM829.png)
馬斯克稱特斯拉的FSD系統不需要激光雷達
![馬斯克稱特斯拉的FSD系統不需要激光雷達](https://file1.elecfans.com/web2/M00/E6/62/wKgaomZDQQeAOWqTAAAVXR4K4Ws754.png)
linux內核的設計流派
![linux<b class='flag-5'>內核</b>的設計流派](https://file1.elecfans.com/web2/M00/C3/2F/wKgaomXhSaaAEZt7AAAW9LbbjO4891.jpg)
評論