本文作为一个提纲挈领的介绍性文档,后面会以此展开,逐渐丰富。
关于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之二:核心(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
开发工具介绍
《PyVISA介绍》
《Linux Power Management Debug》
…