2013-02-17 127 views

回答

12

有幾個調度程序可用。這個答案假設默認調度程序:CFS(Linux)和ULE(FreeBSD)。

CFS的簡稱完全公平調度程序。最顯着的區別在於CFS不基於運行隊列進行流程選擇。相反,它使用一個O(log N)複雜度的紅黑樹,這個樹花費CPU時間索引。

另一個值得注意的細節是CFS使用納秒計時。從Kernel Trap

CFS使用納秒粒度會計和不依賴於任何 的jiffies或其他HZ細節。因此,CFS調度程序沒有 'timeslices'的概念,並且沒有任何啓發式。只有一個 中央可調:

/proc/sys/kernel/sched_granularity_ns 

可用於調整調度從「桌面」(低 延遲),以「服務器」(好配料)工作負載。它默認爲適用於桌面工作負載的 設置。 SCHED_BATCH也由 CFS調度程序模塊處理。

ULE是傳統BSD調度程序的後繼者。它在SMP系統和單處理器系統上提供了大大改進的性能。它遵循比較傳統的設計,運行隊列和時間片。它力求公平,但可以通過指導來支持交互式流程。

這是一個link對ULE的作者在研究CFS來源時的一些發現。他們還在評論中討論了CFS調度程序中算法的複雜性(已經引起了很多爭議)。

這兩個調度程序都適合桌面使用。通過設置kern.sched.interact,ULE支持交互式進程。沒有它,CFS和ULE應該同樣公平。

ULE登陸大約3000行代碼,而CFS正在接近這個數字的兩倍。