架构:
ARM 低功耗详细架构在上一篇
ACPI定义的计算机电源的几种管理状态
• G状态(Global System State)
• S状态(Sleep state)
• C状态(CPU power state)
• P状态(CPU Performance state)
• D状态(Device state)
• T状态(CPU Throttling state)
状态跳转
G 状态(Global System State)
G0~G3表示4个全局电源状态。其中,G0是运行状态,对应系统S0状态,CPU 可以处于 C0~C3等状态;G1是睡眠状态,CPU、设备等都停止工作;G2是软关机状态,通过OS关机命令进入;G3是机械关机 (硬关机),断开所有电源。
- G0:工作状态(working)
相当于计算机处于正常开机的状态,该状态下系统实时响应外部事件,用于程序可以正常执行,设备也可以动态分配自己的状态; - G1:休眠状态(sleeping)
该状态类似于电脑待机或者休眠,处于低功耗状态,计算机此时不会去执行用户的程序,看起来就像关机,此时显示屏是关闭的,但是只要有唤醒操作还是可以很快的恢复到工作状态; - G2:(soft off)
除了用户程序不再执行,操作系统的程序也不再执行,如果要唤醒的话需要较长时间恢复到工作状态,类似于电脑关机; - G3:(mechanical off)
简单的讲就是拔电源线,如果是PC的话可能感觉和G2状态差不多,但是如果是服务器,G3唤醒时间比G2长很多。
S状态(Sleep state)
系统的休眠状态
S0~S4表示5个系统功耗状态。其中,S0是工作状态;S1也叫Standby状态,这时 CPU 停止运行,设备处于挂起状态;S2是比 S1更深的休眠状态,在通常的计算机系统一般没有实现;S3是内存休眠状态,这时CPU和设备都断电,内存保持供电,处于自刷新模式,只需消耗极少的能量 (由于计算机系统的状态都保存在内存中,可以很快地让用户回到睡眠之前的状态,在笔记本便携式电脑、智能手机、平板电脑中S3是用的非常多的一种省电模式);S4是硬盘休眠状态 (Hibernate),这时系统的全部状态保存到永久性存储介质(比如硬盘)中,CPU、内存以及各种外设均可以断电
- S0:正常工作状态
系统所有设备都处于开启状态; - S1:休眠模式(Power on Suspend)
POS(Power on Suspend),在这个状态下CPU通过CPU的时钟控制器关闭(但是CPU的寄存器和cache好像还是维持的),其他设备也是正常处于开启状态,这个状态相当于降低CPU的功耗; - S2:休眠模式
也是一种休眠模式,类似于S1,不过这个状态下CPU完全关闭(包括寄存器和cache),总线时钟也被down掉,其余设备还是照常保持; - S3:STR(Suspend to RAM)
挂起到内存。这个状态除了内存其他设备都断电,内存会低速刷新; - S4:STD(Suspend to Disk)
挂起到硬盘。系统主电源关闭,S4之前的内存信息写入硬盘,所有部件停止工作,系统主电源关闭,只有硬盘还带电并且可以被唤醒; - S5:完全下电
电源都关闭了,即关机(shut down)。
从上面看的话S的级数越高(代表睡眠程度越深),越往后的状态消耗的电量越少,也就是越省电。S0~S4状态其实就是G1状态的细分。S5状态其实和G2状态一样。
S和G状态都属于ACPI系统电源管理
C状态(CPU power state 处理器电源管理)
OS在空闲状态时,OSPM通过ACPI使CPU进入不同的电源状态(C-state)
表示CPU的供电状态,用于降低CPU功耗的,其实就是G0下的状态:
- C0:此时CPU还是正常执行各种指令,相当于满状态运行,唤醒时间为0;
- C1:这个状态已经需要唤醒时间了,不过很小(idle),一般软件在执行过程中对该影响基本可以忽略不计,这个状态CPU的功耗已经大大降低了;
- C2:唤醒时间比C1更长,功耗比C1更低;
- C3:唤醒时间比C2更长,功耗比C2更低,这个状态下CPU依旧会保持缓存信息,但是不会对信息进行监听,需要软件自身负责保证缓存内容的一致性。
(后面好像还定义了更多的C(C4、C5、C6)状态,总体就是CPU功耗更低,响应更慢,工作方式更简单)
P状态(CPU Performance state 设备和处理器性能管理)
当系统处于活动状态时,OSPM通过ACPI可以将设备和CPU设置成不同的性能状态,以达到性能和功耗的平衡(P-sate)
该状态也称为EIST(Enhanced Intel Speed Step Technology),通过控制CPU的电压和频率来变更CPU的性能,进而改变功耗。为C0状态下降低CPU功耗的一种方式。
D状态(Device state 设备电源管理)
外围设备状态。定义主板设备的电源状态(D-state)
- D0:设备正常工作;
- D1:可以减小部分功耗,由设备本身决定,有些设备没有D1状态;
- D2:设备关闭部分功能,节约更多的功耗,同样由设备本身决定,有些设备没有D2状态;
- D3:设备电源被完全关闭,重新想让设备工作的话除了说要给设备供电,还要重新做初始化操作。
T状态(CPU Throttling state节流状态)
T状态则是通过调节CPU时钟的开启关闭来降低功耗。
一种节能状态,也是在C0状态下降低CPU功耗的一种方式,与P状态不同,T状态是通过调整单位时间内CPU Clock On的占空比(CPU Clock On /(Clock On + Clock Off))的方式 ,改变系统的功耗和温度。
Linux ACPI 接口
处理器控制接口 (CPUfreq)
内核中的cpufreq子系统通过sysfs文件系统向上层应用提供了用户接口,对于系统中的每一个CPU而言,其cpufreq的sysfs用户接口位于:/sys/devices/system/cpu/cpuX/cpufreq/目录下
休眠控制接口(S状态)
Linux内核下对 ACPI 各种睡眠状态也提供了相关的支持,并通过sysfs文件系统向上层应用提供了用户接口,这些用户接口位于/sys/power/目录下,用户可以在该目录下找到名为“state”的文件,该文件中记录着当前主机软硬件系统支持的睡眠状态,包括 standby、mem 和 disk 等,分别对应于 ACPI 标准中的 S1、S3 和 S4 状态。
散热控制接口(IPA)
ACPI允许操作系统电源管理(OSPM, Operating System directed [configuration and] Power Management)管理系统的冷却策略。基于 OSPM 对于运行时环境的控制,可以根据 CPU 和系统热量负载来制定冷却决策,同时提供系统过热时的保护性措施。ACPI定义了可供 OSPM 控制主板温度的热能对象,并且 ACPI 的热设计围绕着称为“热量区域”(thermal domain)的范围进行。大致上来说,整个主机是一个大的热量区域,但是设备生产商(OEM, Original Equipment Manufacturer)可以根据需要将系统划分为多个热量区域。
Linux对于散热的控制接口在/sys/class/thermal 目录下