CPU調度——EAS調度器


Linux內核的CFS調度器和SMP負載均衡的缺點:

1.主要是為了服務器性能優先場景而考慮的,它們希望把任務都平均分配到系統所有可用的CPU上,最大限度地提高系統的吞吐量,這是主要為服務器設計的,沒有考慮到系統的耗電問題,顯然這不適合手機或者消費電子,對功耗敏感的設備中。
2.主要針對SMP系統,對於非SMP系統支持不足,比如說arm.big.little架構。
3.沒有充分利用各個核的功耗,性能,頻率差異來達到性能和功耗的最優平衡。

最早,針對arm big.litthle,高通提出了HMP調度器,直接在大小cluster上全部切換。

與此同時,ARM和Linaro提出了EAS調度器,希望對現有的以性能優先的調度策略、調度器、CPUidle和CPUFreq模塊的相對獨立的現狀做出改變,讓它們可以緊密工作在一起,從而進一步優化功耗和效率,這個改變叫作Energy Aware Scheduling,簡稱EAS。EAS調度器的設計目標是在保證系統性能的前提下盡可能地降低功能。

目前,高通的產品線,也全面采用EAS調度器。

EAS如何運作?

EAS引入了使用能量模型,EAS試圖統一內核的三個不同核心部分,它們之前都相互獨立,能量模型有助於統一它們,皆可能節省功耗提高性能。

1.Linux調度程序(CFS):調度程序統一3個模塊個部分,因為將它們一起計算可以使它們盡可能高效。
2.Linux cpuidle :CPUIdle嘗試決定CPU何時進入空閑模式
3.Linux cpufreq :CPUFreq嘗試決定何時加速或降低CPU。

不僅如此,EAS還將進程/程序/應用分為四個cgroup,即 top-app, system-background, foreground, and background,將要處理的任務放入其中一個類別中,然后為該類別提供CPU power,並將工作委派給不同的CPU核心。

top-app是完成的最高優先級,其次是forground,background和system-background gorup. backgound group與system-background group具有相同的優先級,但system-background group通常也可以訪問更多的核心。實際上,Energy Aware Scheduling正在將Linux內核的核心部分整合到一個進程中。

喚醒設備時,EAS將選擇處於最淺空閑狀態的核心,從而最大限度地減少喚醒設備所需的能量。這有助於降低使用設備所需的功率,因為​​如果不需要,它不會喚醒big cluster

負載跟蹤也是EAS的一個非常重要的部分,有兩種選擇。“Per-Entity Load Tracking”(PELT)通常用於負載跟蹤,然后使用該信息來確定頻率以及如何在CPU中委派任務。也可以使用“Window-Assisted Load Tracking”(WALT

許多ROM將使用WALT或PELT發布兩個版本的內核,因此由用戶決定。WALT更突發,CPU頻率高峰,而PELT試圖保持更一致。負載跟蹤器實際上不會影響CPU頻率,它只是告訴系統CPU使用率是多少。較高的CPU使用率需要較高的頻率,因此PELT的一致特性是它會導致CPU頻率緩慢上升或下降。

PELT確實傾向於偏向更高的CPU負載報告,因此它可以以更高的電池成本提供更高的性能。然而,現在沒有人能夠真正說出哪種負載跟蹤系統更好,因為兩種負載跟蹤方法都在不斷修補和改進。

無論哪種方式,很明顯,無論使用何種負載跟蹤方法,效率都會提高。除了處理處理器上的任務,還要分析任務並估算運行任務所需的能量。

這個聰明的任務放置意味着任務以更有效的方式完成,同時也使系統整體更快。EAS旨在以最小的功耗來獲得最流暢的UI。這是其他外部組件(如schedtune)發揮作用的地方。

Schedtune在每個cgroup中由兩個可調參數定義,以確保更好地控制要完成的任務。它不僅可以控制多個CPU上任務的分散,還可以控制感知負載,以確保更快地完成對時間敏感的任務。這樣,用戶所使用的前台應用程序和服務將不會減慢並導致不必要的性能問題。

 

參考:https://zhuanlan.zhihu.com/p/60030839

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM