图注:图片修改自 WinHEC Fall 2017
传统 S3 待机控制 CPU 功耗的方法很简单,断开 CPU/SoC 部分的供电即可,这时芯片里的寄存器全部清空变成了 0;但在唤醒时,需要重新初始化寄存器,这就是从 S3 恢复成 S0 时需要一点时间的原因,当然这个时间远比从 S4 恢复所需要的短得多。
但现在连这一点初始化的时间都不能要了,也就意味着需要 CPU/SoC「记住」之前寄存器的状态。因此,CPU/SoC 内部就需要有一枚专门的芯片按照下图的步骤,一步步把对应寄存器区域的状态保存在 CPU/SoC 内部的 nvram 中,再切断电源。这样就让设备实现了在 S0 响应速度的基础上,又能有 S3 的功耗控制。
所需要功耗从上到下依次变小,且只有每层的任务都完成以后才会操作下一层的目标
首先,CPU/SoC 外部的所有设备都必须进入低功率模式, 也就是 Sx 对应的 Dx 为最低的设备电源状态。接下来,将网络和无线电设备置于低功率模式,在此期间,这些设备通常会使用很少的一部分电源以维护连接,并在必要时唤醒 CPU/SoC 。
在 CPU/SoC 外部的所有设备(包括通信设备)都断电后,CPU/SoC 的芯片组和非处理器核心也将进入低功率模式,这可以进一步节约能源;在这之后,就是处理核心 CPU 和 GPU 以及位于最后的一些其他电路了。如果中间有任何一个部件拒绝进入低功耗状态,那么整个链路就会中断,重新回到 S0。英特尔将这一系列状态称之为低功耗 S0 状态(low power S0 idle),代号为 S0ix,每让一层设备进入低功耗状态则为 S0ix 中的 x 加上一,因此在 CPU 和 GPU 停止工作以前的状态也常常被称作 S0i3 休眠状态。
所以,新型待机对 PC 上的芯片组等设备有一定的要求。以管理员权限运行终端命令 powercfg /a,若结果含有 Standby(S0 low power idle),则说明你的设备为新型待机。使用新型待机的设备,不支持 S1-S3 睡眠模式:
硬件设备的省电还不够,软件也有做相应的准备。这方面,新型待机和 S3 睡眠一样,都将运行的应用挂起到 RAM。和 S3 状态不一样的是,新型待机目的是在睡眠状态下仍能完成一些任务,因此,部分活动享有新型待机下的豁免权。
微软称这些应用活动为 激活器,前面提到过新型待机状态下,网络甚至是 CPU 都可能不工作,这些激活器的作用就是将这些设备短时间唤醒,执行某些指令。这些激活器全都是 Windows 内置的系统服务,例如负责接收 UWP 应用通知的 WNS、负责处理 Windows 更新的 WU、负责管理网络连接的 NCSI……它们的存在使 Windows S0ix 待机状态时也能收到通知,并可以处理后台维护任务。
以 UWP 后台任务为例,我们在 Windows 设置中的应用 > 应用和功能 > 设置中看到一项后台应用权限,这个权限控制的就是在待机时,应用执行后台任务的能力。默认的「电源已优化」选项意思是根据 PC 连接电源的情况,决定是否执行任务。
当激活器唤醒部分硬件设备时,新版 Windows 还会限制它们能够使用的资源量,例如 UWP 后台刷新任务只允许活动 5 秒,5 秒后则会被终止,硬件设备也会再次进入低功耗状态。需要注意的是,和 S3 睡眠模式不同,这些任务并不会导致系统被唤醒至完全工作状态,除了需要唤醒的少部分设备外,其他硬件仍处于低功耗状态,所有第三方应用、服务也仍被挂起。
除了被激活器唤醒的小部分时间中,新型待机 PC 的功耗和 S3 相当。如下图所示,运行 powercfg /spr 生成的电池报表显示,在 2022 年 4 月 16 日 2 - 11 时的新型待机过程中,软件(SW)、硬件(HW)100% 处于低功耗状态,笔记本电量消耗了 3%: