学习文档出处:
万字整理 | 深入理解Linux电源管理:万字整理 | 深入理解Linux电源管理-CSDN博客
电源管理
因为设备需要用电,而且设备中的各个硬件所需要的电压是不一样的。故计算机需要对硬件的电源状态管理。但是电能并不是免费的,尤其是手机的电池容量是有限的,就需要节约电量,于是乎电源的省电管理就出来了。但是我们是为了愉快地设备,而不是为了一味省电。故为了平衡性能、用户体验和省电,内核就开发出了电源质量管理,让我们更好地使用设备。下图是电源管理的架构图
1.电源状态管理
电源状态 | 描述 |
睡眠/Sleep Suspend To RAM | 一般称STR,睡眠时,内存不断电,信息储存在内存中,可普通外设唤醒 |
休眠/Hibernate Suspend to disk | 一般称STD,休眠时,内存断电,信息在swap中,只能电源键唤醒 |
关机 | 重启相当于关机再开机,主要init进程进行关闭各个服务进程deamon、发送SIGTERM、SIGKILL、将内存数据同步到磁盘和内核关机 |
重启 | |
自动睡眠/auto sleep | 也称投机睡眠,内核默认情况总是尝试去睡眠,除非wakelock阻止。即睡眠是常态,运行不是常态 |
1.1 睡眠和休眠的共同点
睡眠和休眠的整体过程是相似的,都是暂停系统的运行、保存系统信息、关闭全部或大部分硬件的供电,这样设备不在使用的情况下可以最小功耗运行;当被唤醒时的过程正好相反,先恢复供电,然后恢复系统的运行,再恢复之前保存的信息,这样设备从电源键或其他外设唤醒时,就可以快速切换到进入运行状态了。
2.电源质量管理
2.1 省电管理
我们不使用电脑时可以进行睡眠、休眠甚至关机来进行省电,但是我们使用电脑时也可以有很多办法来省电。这些省电方法又可以分为两类,使用省电和闲暇省电。
2.1.1 CPU频率
Cpu频率架构分为:CPUFreq Govenor决策者、CPUFreq Core中间人和CPUFreq Driver执行者,三者关系是:CPUFreq决策者只能有且仅有一个,负责什么时候调频和调多少,将相应控制指令下发给中间人,中间人负责协调,继续将控制指令下发给CPUFreq执行者,执行者主要与硬件打交道完成相应频率控制。
CPUFreq决策者有6种,每次有且生效其中一个
CPUFreq Govenor决策者 | 描述 |
powersave | 一直把CPU的频率设置为最大值 |
performance | 一直把CPU的频率设置为最小值 |
ondemand | 按需调整,默认运行在较低频率,系统负载增大时就运行在高频率 |
conservative | 总是把频率往policy的最大值和最小值之间调整 |
userspace | 按照用户空间设置的值进行调节频率 |
schedutil | 根据CPU使用率动态调整频率 |
2.1.2 闲暇省电
闲暇省电 | 描述 |
CPU休闲(CPUIdle) | 指的是当某个CPU上没有进程可调度的时候可以暂时局部关掉这个CPU的电源,从而达到省电的目的,当再有进程需要执行的时候再恢复电源。 |
CPU热插拔(CPU Hotplug) | 指的是我们可以把某个CPU热移除,然后系统就不会再往这个CPU上派任务了,这个CPU就可以放心地完全关闭电源了,当把这个CPU再热插入之后,就对这个CPU恢复供电,这个CPU就可以正常执行任务了。 |
CPU隔离(Core Isolate) | CPU隔离指的是我们把某个CPU隔离开来,系统不再把它作为进程调度的目标,这样这个CPU就可以长久地进入Idle状态了,达到省电的目的。CPU隔离能达到一种介于CPUIdle和CPU热插拔之间的效果 |
动态PM(Runtime PM) | 设备的动态电源管理,例如手机的夜间睡眠断网功能,待机关闭相机设备 |
2.2 电源管理质量 PM Qos
QoS是Quality Of Service(服务质量)平衡省电和性能的关系。
2.2.1 系统级约束-CPU 延迟
CPU延迟是CPU Idle之后从低功耗状态恢复到运行的时间,CPU idle之后可以处于不同的低功耗状态,状态越深越省电,但是恢复的延迟越大。
2.2.2 系统级约束-CPU 降频
CPU频率代表的是CPU运行时的性能,频率越高,性能越强,功耗也越大。故一般进行场景按需降频。