
其实Linux 电源管理非常复杂,牵扯到很多方面,比如系统级的待机、频率电压变换、系统空闲时的处理以及每个设备驱动对于系统待机的支持和每个设备的运行时电源管理,可以说和系统中的每个设备驱动也都息息相关。
在Linux内核上有如下的框架支持:
1. CPU 在运行时根据系统负载进行动态电压和频率变换的CPUFreq ;
2. CPU 在系统空闲时根据空闲的情况进行低功耗模式的CPUIdle ;
3. 多核系统下CPU 的热插拔支持 ;
4. 系统和设备对于延迟的特别需求而提出申请的PMQoS,它会作用于CPUIdle 的具体策略 ;
5. 设备驱动针对系统Suspend to RAM/Disk 的一系列入口函数
6. SoC 进入suspend 状态、SDRAM 自刷新的入口
7. 设备的runtime(运行时)动态电源管理,根据使用情况动态开关设备
8. 底层的时钟、稳压器、频率/电压表(OPP 模块完成)支撑
Linux电源管理中主要使用的技术包括:
1、CPUFreq : 即DVFS(Dynamic voltage and frequency scaling),即动态电压频率调整。在系统运行时根据系统负载动态调节;
2、DEVFreq:CPUFreq只针对CPU做动态电压频率调节,而devfreq可以对设备,如DRAM,GPU等做动态电压频率调节;
3、CPUIdle:CPU在系统空闲时根据空闲的情况进行低功耗模式,比如C0--C3四个状态对应不同的低功耗策略;
4、CPUHotplug:多核系统下CPU的热插拔支持;
5、PM QOS:主要作用于cpuidle的具体策略,是针对系统和设备对于延迟的特别需求而提出的;
6、SUSPEND:主要有suspend to ram和suspend to disk两种,suspend to ram主要是挂起各设备,并使dram进入自刷新,而suspend to disk就干脆把dram也关掉,直接把状态保存到disk;
7、RUNTIME PM:设备的runtime(运行时)动态电源管理,根据使用情况动态开关设备;
8、Regulator:用于调节CPU等模块的电压和电流值;
9、OPP:可以使SOCs或者Devices正常工作的电压和频率组合。内核提供这一个Layer,是为了在众多的电压和频率组合中,筛选出一些相对固定的组合,从而使事情变得更为简单一些;
10、Thermal:温控管理。
电源管理相关源码在内核树中主要分布于:
kernel/power/ *
drivers/power/
drivers/base/power/*
drivers/cpuidle/*
drivers/cpufreq/*
drivers/devfreq/*
include/linux/power_supply.h
include/linux/cpuidle.h
include/linux/cpufreq.h
include/linux/cpu_pm.h
include/linux/device.h
include/linux/pm.h
include/linux/pm domain.h
include/linux/pm runtime.h
include/linux/pm wakeup.h
include/linux/suspend.h
手机内核版本是指 *** 作系统的核心,它负责管理系统的进程,内存,设备驱动程序,文件和网络系统,决定着系统的性能和稳定性。
内核以独占的方式执行最底层任务,保证系统正常运行。协调多个并发进程,管理进程使用的内存,使它们相互之间不产生冲突,满足进程访问磁盘的请求等等。
扩展资料
手机的调制解调器使用的驱动版本号,调节解调器主要目的负责着手机的通信功能(打电话,发短信,数据交换等)!内核版本手机的硬件(如主板,GPS,摄像头,WiFi,蓝牙等)驱动集合体的版本号!
相应软件内核历次修改或增加相应功能版本编号,而内核主要指 *** 作系统,或者相应软件核心功能框架部分实现该软件所有功能基础。
DVFS全称Dynamic Voltage and Frequency Scaling,即动态电压频率调整。这项技术可以根据芯片运行的应用程序的计算需求,动态调整电压和频率,从而达到节能的目的。
DVFS技术是一项需要软硬件结合的技术,硬件方面比如Intel的SpeedStep技术以及由此衍生的EIST技术,ARM的IEM和AVS技术等。软件方面对于Linux而言主要就是CPUfreq技术,下面我们着重分析一下这项技术。在开始之前,稍微讲一点硬件知识。
CMOS电路中分为动态功耗和静态功耗,公式为 power=Σ(CV²αf + VI)。 C 代表负载电容的容值,V 是工作电压,α 是当前频率下的翻转率,f为工作频率,I代表静态电流。公式中加号前面部分代表动态功耗,后半部分代表静态功耗。要想降低动态功耗的话,需要从C/α/V/f几个参数入手,而对于软件而言,通常可以调节的只有V和f。
好,基于上面的背景,对于Cpufreq技术其实也就是软件根据系统的负载,动态的去调整电压和频率来平衡性能和功耗。
总体而言,Cpufreq包含两部分内容,一是策略部分,该部分与具体CPU无关;而是driver部分,与具体平台实现策略有关系。这种设计的优点是实现了策略和实现机制的分离。首先看策略部分,目前Linux上通用的策略有五种,如下表所示:
对于安卓系统而言,还增加了一种interactive策略针对延时敏感的UI任务,当有UI任务时,改策略会采取更加激进的方式调节CPU频率。
对于用户空间而言,一般可通过/sys/devices/system/cpu/cpu[x]/cpufreq/xxx来查看CPU的调度策略或者进行设置。
主要有以下接口暴露给用户:
当切换不同调度策略时,还会出现一些新的接口。但通用接口如上表所示。
对于dirver而言,如果需要监控CPUfrq系统的变化,那么存在两种类型的通知,一种是CPUfreq的策略变化,另一种是CPU频率的变化。
策略变化总共有三种类型的通知:
CPUFREQ_ADJUST-只要有需要,所有的被通知者可以在此时修改policy的限制信息,比如温控系统可能会修改在大允许运行的频率。
CPUFREQ_INCOMPATIBLE-只是为了避免硬件错误的情况下,可以在该通知中修改policy的限制信息。
CPUFREQ_NOTIFY-真正切换policy前,该通知会发往所有的被通知者。
CPU频率变化会发出两种类型的通知:
CPUFREQ_PRECHANGE-调整前的通知
CPUFREQ_POSTCHANGE-完成调整后的通知
另外,系统休眠/唤醒如果CPU频率发生变化,还会发出CPUFREQ_SUSPENDCHANGE和CPUFREQ_RESUMECHANGE这两个通知。
需要注意的是,除了CPU之外,其他设备也可能存在DVFS的调整需求,可以关注devfreq,对应到driver/devfreq驱动目录。
内核在编译阶段就可以选择支持的governor以及默认governor。在menuconfig中可配置CONFIG_CPU_FREQ,CONFIG_CPU_FREQ_GOV_PERFORMANCE, CONFIG_CPU_FREQ_GOV_POWERSAVE, CONFIG_CPU_FREQ_GOV_USERSPACE, CONFIG_CPU_FREQ_GOV_ONDEMAND, CONFIG_CPU_FREQ_GOV_CONSERVATIVE
等来选择是否开启CPUfreq,以及选择哪种governor。
Linux 3.1之后内核将cpupower-utils集成进内核tools/power/cpupower目录,改工具集的cpufreq-bench工具可以用来分析不同策略对CPU性能的影响。该工具的原理是模拟系统运行的状态来对比其他策略相比于performance高频模式完成任务的时间比例。以ondemand策略为例,命令使用方式如下:
cpufreq-bench -l 50000 -s 100000 -x 50000 -y 100000 -g ondemand -r 5 -n 5 -v
一般达到目标90%左右的比例视为理想比例。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)