完全公平調度(CFS)
CFS根據每個進程相對于所有可運行線程總權重的權重為每個進程分配一個“時間片”。
CFS 的目標是近似“無限小”的調度持續時間,稱為目標延遲。 較小的目標延遲可以提高交互性并接近完美的多任務處理,但其代價是更高的切換開銷和可能更低的總體吞吐量。
假設目標延遲設置為 20 毫秒,并且有兩個具有相同優先級的可運行任務,則每個任務將運行 10 毫秒,然后被另一個任務搶占。 這種時間片的平等分配確保了任務之間的公平性,無論其各自的優先級如何。
如果有四個相同優先級的任務,則每個任務的時間片將減少到5毫秒。 如果有 20 個相同優先級的任務,每個任務的時間片為 1 毫秒。
通過根據可運行任務的數量動態調整時間片,CFS 旨在為多任務環境提供公平且響應迅速的調度。
最小時間片
但是隨著可運行任務的數量接近無窮大,分配給每個任務的處理器時間及其分配的時間片的比例接近零。 這可能會導致過多的切換成本,為了緩解此問題,完全公平調度程序 (CFS) 施加了稱為最小粒度的最小時間片。 默認情況下,此最小粒度設置為 1 毫秒。
因此,即使可運行任務的數量變得非常大,每個任務的最小時間片仍然為1毫秒。 這確保了頻繁上下文切換所產生的切換成本受到限制。
需要注意的是,當進程數量增長到計算比例比最小粒度還小時,CFS的公平性就會受到影響。 雖然可以對公平排隊算法進行修改來解決具有大量進程的場景中的公平問題,但 CFS 的設計目的是在這種情況下進行權衡。 面對大量進程時,CFS 優先考慮低延遲、交互性和響應性,而不是完美的公平性。 在只有少量可運行進程的常見情況下,CFS 保持了完美的公平性。