Linux下Power Management開發總結
本文作為一個提綱挈領的介紹性文檔,後面會以此展開,逐漸豐富。
關於Linux省電:
保持CPU處於工作狀態時:
1. 設備使能RPM,不使用的設備動態關閉。
2. cpufreq動態調節CPU/GPU的頻率電壓,以達到降低功耗的目的。
3. cpuidle讓CPU進入idle狀態,或者深睡。
4. cpu hotplug對不使用的CPU進行動態熱插拔。
CPU進入睡眠狀態:
1. suspend,如果整個系統無事可幹進入suspend,包括兩種suspend idle和suspend to ram。
2. resume,中斷進行喚醒。
開發流程
針對一個PM feature進行開發,設計模型是第一步。模型設計好之後,還要保留參數接口,可以基於這些參數針對特殊個體進行優化。
建立一個可以快速叠代、準確可靠、可量化的驗證環境尤其重要。一方面可以驗證設計的模型是否有效、正確;另一方面還可以調整找到最適合的參數。
針對嵌入式設備來說,最主要的是達到性能和功耗的平衡:在滿足性能要求的前提下,盡量降低功耗。
這就涉及到如何去量化性能(Performance)和功耗(Power)。
量化功耗比較簡單,可以通過Power Monitor在測量點獲得數據(測量點的確定很重要!);
量化性能就比較復雜了,針對不同的功能模塊,需要不同的性能分析工具。
另外,針對不同的模塊,可能需要產生特定的workload。
最後,可讀性強的統計信息或者可視化圖表也更有利於得出分析結果。
以LISA為例,可以使用workload rt-app產生特定調度側率,運行時間,運行在特定CPU上的線程,保證運行環境一致。
通過devlib可以獲得測試過程中的Power Monitor數據。
然後通過IPython腳本在瀏覽器中生成可視化圖表和統計信息。
開發流程
1.設計模型:根據需求在已有框架中設計新的模型(Thermal中的IPA),或者設計一個全新的功耗模型(如EAS)。目前階段主要是跟蹤追隨現有功耗模型。
2.內核實現:基於之前功耗模型,在內核中代碼實現。
3.驗證環境:建立驗證模型的環境,一方面要有量化Performance的工具,另一方面還需要量化Power的工具。
4.模型正確與否?:通過驗證環境可以查看模型是否符合預期,如果不符合就重新進行設計。
5.調整模型:根據第4步驗證結果,重新調整模型缺陷。
6.優化算法:驗證算法是否高效,是否更有效的提升Performance,降低Power。
Android/Linux內核Power Management介紹
Thermal Framework
《Android/Linux Thermal框架分析及其Governor對比》
《Android/Linux Thermal Governor之IPA分析與使用》
cpufreq Framework
《Linux動態頻率調節系統CPUFreq之一:概述》
《Linux動態頻率調節系統CPUFreq之二:核心(core)架構與API》
cpuidle Framework
Suspend分析與優化
《Suspend to RAM和Suspend to Idle分析,以及在HiKey上性能對比》
《cpu_ops、suspend_ops、arm_idle_driver以及machine_restart/machine_power_off到底層PSCI Firmware分析》
WowoTech整理文檔
Linux電源管理(1)_整體架構
http://www.wowotech.net/pm_subsystem/pm_architecture.html
Linux電源管理(2)_Generic PM之基本概念和軟件架構
http://www.wowotech.net/pm_subsystem/generic_pm_architecture.html
Linux電源管理(3)_Generic PM之Reboot過程
http://www.wowotech.net/pm_subsystem/reboot.html
Linux電源管理(4)_Power Management Interface
http://www.wowotech.net/pm_subsystem/pm_interface.html
Linux電源管理(5)_Hibernate和Sleep功能介紹
http://www.wowotech.net/pm_subsystem/std_str_func.html
Linux電源管理(6)_Generic PM之Suspend功能
http://www.wowotech.net/pm_subsystem/suspend_and_resume.html
Linux電源管理(7)_Wakeup events framework
http://www.wowotech.net/pm_subsystem/wakeup_events_framework.html
Linux電源管理(8)_Wakeup count功能
http://www.wowotech.net/pm_subsystem/wakeup_count.html
Linux電源管理(9)_wakelocks
http://www.wowotech.net/pm_subsystem/wakelocks.html
Linux電源管理(10)_autosleep
http://www.wowotech.net/pm_subsystem/autosleep.html
Linux電源管理(11)_Runtime PM之功能描述
http://www.wowotech.net/pm_subsystem/rpm_overview.html
Linux電源管理(12)_Hibernate功能
http://www.wowotech.net/pm_subsystem/hibernation.html
Linux電源管理(13)_Driver的電源管理
http://www.wowotech.net/pm_subsystem/driver_pm.html
Linux電源管理(14)_從設備驅動的角度看電源管理
http://www.wowotech.net/pm_subsystem/device_driver_pm.html
Linux電源管理(15)_PM OPP Interface
http://www.wowotech.net/pm_subsystem/pm_opp.html
Linux common clock framework(1)_概述
http://www.wowotech.net/pm_subsystem/clk_overview.html
Linux common clock framework(2)_clock provider
http://www.wowotech.net/pm_subsystem/clock_provider.html
Linux common clock framework(3)_實現邏輯分析
http://www.wowotech.net/pm_subsystem/clock_framework_core.html
Linux PM domain framework(1)_概述和使用流程
http://www.wowotech.net/pm_subsystem/pm_domain_overview.html
Linux cpuidle framework(1)_概述和軟件架構
http://www.wowotech.net/pm_subsystem/cpuidle_overview.html
Linux cpuidle framework(2)_cpuidle core
http://www.wowotech.net/pm_subsystem/cpuidle_core.html
Linux cpuidle framework(3)_ARM64 generic CPU idle driver
http://www.wowotech.net/pm_subsystem/cpuidle_arm64.html
Linux cpuidle framework(4)_menu governor
http://www.wowotech.net/pm_subsystem/cpuidle_menu_governor.html
Linux PM QoS framework(1)_概述和軟件架構
http://www.wowotech.net/pm_subsystem/pm_qos_overview.html
Linux PM QoS framework(2)_PM QoS class
http://www.wowotech.net/pm_subsystem/pm_qos_class.html
Linux PM QoS framework(3)_per-device PM QoS
http://www.wowotech.net/pm_subsystem/per_device_pm_qos.html
Linux power supply class(1)_軟件架構及API匯整
http://www.wowotech.net/pm_subsystem/psy_class_overview.html
Linux Regulator Framework(1)_概述
http://www.wowotech.net/pm_subsystem/regulator_framework_overview.html
Linux Regulator Framework(2)_regulator driver
http://www.wowotech.net/pm_subsystem/regulator_driver.html
Linux CPU core的電源管理(1)_概述
http://www.wowotech.net/pm_subsystem/cpu_core_pm_overview.html
Linux CPU core的電源管理(2)_cpu topology
http://www.wowotech.net/pm_subsystem/cpu_topology.html
Linux CPU core的電源管理(3)_cpu ops
http://www.wowotech.net/pm_subsystem/cpu_ops.html
Linux CPU core的電源管理(5)_cpu control及cpu hotplug
http://www.wowotech.net/pm_subsystem/cpu_hotplug.html
linux cpufreq framework(1)_概述
http://www.wowotech.net/pm_subsystem/cpufreq_overview.html
Linux cpufreq framework(2)_cpufreq driver
http://www.wowotech.net/pm_subsystem/cpufreq_driver.html
linux cpufreq framework(3)_cpufreq core
http://www.wowotech.net/pm_subsystem/cpufreq_core.html
linux cpufreq framework(4)_cpufreq governor
http://www.wowotech.net/pm_subsystem/cpufreq_governor.html
linux cpufreq framework(5)_ARM big Little driver
http://www.wowotech.net/pm_subsystem/arm_big_little_driver.html
Linux進程凍結技術
http://www.wowotech.net/pm_subsystem/237.html
Common Clock Framework系統結構
http://www.wowotech.net/pm_subsystem/ccf-arch.html
Android Power HAL
開發工具介紹
《Workload Automation分析及其使用》
《LISA介紹及其使用方法》
《PyVISA介紹》
《用於科學計算的Python庫》
《Linux Power Management Debug》
…
Linux下Power Management開發總結