1. 程式人生 > >Linux下Power Management開發總結

Linux下Power Management開發總結

提升 padding pro 進程 框架 eight 概述 lock str

本文作為一個提綱挈領的介紹性文檔,後面會以此展開,逐漸豐富。

關於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開發總結