SchedTune
SchedTune是一項與CPU調頻相關的效能提升技術,它實現為一個cgroup控制器。
這個控制器提供了一個名稱為schedtune.boost
的配置引數,執行時系統可以使用它來更改該組中的程序的排程方式。
每當調整這個引數的時候,它會使受影響的程序看起來比實際更重(或更輕)。如果一個組被提升了25%,那麼排程程式將期望它使用的CPU時間比它實際上要多25%,並且CPU頻率調控器將相應地對處理器提速。因此,以這種方式“提升”程序不會影響其排程優先順序,但會影響其最終執行的CPU的速度。
SchedTune擴充套件僅適用於負載較輕的系統。當系統飽和時,SchedTune應當自動禁用。
Pixel XL上/vendor/etc/init/init.rc
檔案中的相關配置如下:
# set default schedTune value for foreground/top-app (only affects EAS)
write /dev/stune/foreground/schedtune.prefer_idle 1
write /dev/stune/top-app/schedtune.boost 10
write /dev/stune/top-app/schedtune.prefer_idle 1
write /dev/stune/rt/schedtune.boost 30
write /dev/stune/rt/schedtune.prefer_idle 1
- /dev/stune/: 某些系統中用於替代
/sys/fs/cgroup/schedtune/
的路徑。
可以看到,這裡為rt
和 top-app
兩個程序組設定了處理器提速。
schedtune提供了一套使用者介面的工具,用於功耗-效能調節。schedtune是cgroup的一個子系統。所以在cgroup的mount節點下,stune分別為每個group,都提供了2個調節開關:
- schedtune.boost
boost的值用int型表示,範圍為[0, 100]。
boost預設值為0,代表CFS排程器會工作在能耗最低的狀態。這也意味著schedutil使task跑在最低的OPP。
boost值100,則表示排程器為工作在效能最高的狀態,同時OPP也處在最大。
0-100的範圍可以根據其他場景來進行適當調節。比如,最佳化互動的響應、電池電量變化等
- schedtune.prefer_idle
這是一個控制排程器節省功耗優先,還是效能優先的flag。
預設值0,會讓CFS排程器根據energy-aware wakeup策略來分配在group中的task。(功耗優先)
當值設為1,會讓CFS排程器分配task時,有最小的wakeup延遲。(效能優先)
android平臺下使用這個flag用來表示正在和使用者互動的應用。
設為1的節點:
dev/stune/foreground/schedtune.prefer_idle
dev/stune/top-app/schedtune.prefer_idle
設為0節點:
dev/stune/background/schedtune.prefer_idle
dev/stune/rt/schedtune.prefer_idle
schedtune.prefer_idle是一個標誌位,它向排程器指示使用者空間希望排程器更關注功耗或者更關注效能。當這個值設為1,表示希望排程器儘可能減少改組中程序喚醒延遲(傾向於效能)
-
boost:
- 說明:控制任務的效能增強級別,通常是一個百分比值,用於增加任務的負載。該引數決定了排程器在選擇 CPU 頻率時應考慮的額外負載,從而影響任務的執行速度和響應時間。
- 範圍:通常為
-100
到100
,其中0
表示沒有提升,負值表示減少負載,正值表示增加負載。
-
prefer_idle:
- 說明:決定任務是否更傾向於在空閒 CPU 上執行。如果設定為
1
,則排程器將嘗試將任務排程到空閒的 CPU 上,以減少任務在同一 CPU 上競爭資源的情況,從而降低延遲。 - 範圍:
0
或1
。
- 說明:決定任務是否更傾向於在空閒 CPU 上執行。如果設定為
-
prefer_high_cap:
- 說明:用於指定排程器是否優先選擇具有較高計算能力的 CPU。這對任務的執行效率有重要影響,尤其是對計算密集型任務來說。
- 範圍:
0
或1
。
-
prefer_idle_hint:
- 說明:用於提示排程器任務可能在短時間內進入空閒狀態。如果啟用,排程器可能會為這些任務選擇更合適的 CPU,以提高整體系統的能效。
- 範圍:
0
或1
。
-
spreading:
- 說明:決定任務在多個 CPU 上的分佈程度。如果啟用,排程器將嘗試將任務均勻分佈在多個 CPU 上,以防止某些 CPU 過載。
- 範圍:通常為
0
或1
。
-
sync_flag:
- 說明:用於調整同步任務的排程行為。同步任務往往要求快速響應,因此排程器會考慮給這些任務分配更多的 CPU 資源。
- 範圍:
0
或1
。
-
margin:
- 說明:控制任務的邊際效能需求。這個引數通常用於調整任務在滿足最低效能要求時所需的額外 CPU 資源,以確保任務可以在合理的時間範圍內完成。
- 範圍:具體值依賴於系統配置。
-
group:
- 說明:將任務分組,以便應用相同的
schedtune
引數設定。這對於管理一組具有相似效能需求的任務非常有用。 - 範圍:具體取值依賴於系統配置。
- 說明:將任務分組,以便應用相同的
-
idle_exit_boost:
- 說明:用於在 CPU 退出空閒狀態時對排程器進行增強,以提高響應速度。
- 範圍:通常為
0
或1
。
這些引數可以透過調節來最佳化系統的效能和功耗,尤其是在 Android 裝置中,以提供更好的使用者體驗和電池壽命。