2011-11-07 264 views
2

我想修改動態改變進程優先級的linux內核代碼。Ubuntu中的動態進程調度

我有Ubuntu 10.10和我下載的Linux 2.6.37。我發現在2.6.37版本中沒有動態改變進程優先級的概念。 [在CentOS中,有一個recalc_task_prio()函數可動態改變進程優先級]。

我想知道是否有人知道任何其他支持動態改變進程優先級的功能的ubuntu內核版本(基於懲罰進程優先級,如果任務是CPU綁定和消耗大量的CPU)?

我主要指的這個鏈接 - 提前http://www.ibm.com/developerworks/linux/library/l-scheduler/

感謝,

回答

3

在Linux的v2.6.23新CFS調度整合是很少依賴HZ和更多的執行時間納秒。

所有進程都存儲在一個red-black tree中,這使得它能夠找到最左邊的(因此也是最值得的)任務來執行。定期(task_tick())系統會檢查另一個進程是否「更值得」,並搶先執行正在運行的任務。 (當然,任務可以自己產生(yield_task()),並且新運行的任務可以搶佔正在運行的任務(check_preempt_curr())。將進程花費的運行時間計入其中,並將其重新插入樹中O(log (N))找到它在RB樹中的新位置

因此,在IO上等待的任務佔用很少時間,並且不會在樹中移動很遠 - 這對應於優先級提振。不上IO事件睡覺任務將使用相對更多的CPU時間,他們是由一個高優先級任務搶佔之前。

有關詳細信息,請務必閱讀Documentation/scheduler/文檔和kernel/sched* impleme ntation文件。

如果這是我的家庭作業項目來擺弄調度器(以前在以前很常見),我會認真考慮添加一個新的實時調度類,如SCHED_FIFOSCHED_RR(取決於哪一個更接近調度程序設計正在討論中),並以這種方式處理任務的優先級。對於一個介紹性的操作系統課程來說,這可能有點陡峭 - 一個較舊的Linux或較舊的BSD內核可能更容易操作。

+0

謝謝sarnoid ...它可以幫助....所以你的意思是2.6.23之後的任何東西都有更復雜的調度器來玩。我會盡量堅持使用舊版本。 – Student