显然什么都没做,合盖睡眠 Windows 笔电却热得烫人。
2020 年 1 月,NotebookCheck 将戴尔 XPS、华硕 ZenBook 等 Windows 笔记本电脑从 Windows「睡眠模式」醒来后,发现 笔记本表面的最高温度实际上达到了 50℃,整机功耗更是高达 27 W。Windows 睡眠模式设计的目标是安静、低功耗,但现在有这样的异常,NotebookCheck 认为「取代了 S3 微软睡眠模式的新型待机是罪魁祸首」。
那么,S3 睡眠模式代表什么?为什么它被新型待机?(Modern Standby)取代?发热合盖笔电和新型待机有什么关系?
ACPI 系统、设备电源状态我们不仅希望硬件在工作中努力工作,还希望在无人操作时降低功耗和节能;对于笔记本电脑或平板电脑,电池电源总是有限的,所以我们需要电源管理。从宏观上看,我们每天接触电脑的关机、启动、睡眠和休眠都属于电脑电源管理的范畴。
显然,该系统工程需要操作系统、硬件制造商OEM 当角色共同参与时,一份大家共同遵守的规范性文件也是必不可少的。
90 20世纪中期,英特尔、微软、东芝共同制定了帮助操作系统发现、配置计算机硬件和执行电源管理的规范——ACPI。该标准定义了系统、硬件组件等不同的电源级别,Sx 并定义了系统的整体电源状态, Dx 文章开头提到的主板硬件设备的电源状态 S3 就隶属于 Sx 状态。
在 ACPI 规范 在中间,系统的整体电源状态(即 Sx 状态)从 S0 到 S5 共分六级。但在现实生活中,只有四种常见的系统电源状态:
S0:完全打开,CPU 等设备正常运行。也就是说,从睡眠模式唤醒计算机质上是系统电源状态切换 S0 的过程;S三、睡眠状态,又称挂起内存。此时,内存仍需供电,但如果处理器不处理指令,断电将丢失内存中的数据;S1 和 S2 则为 S0、S3 中间状态;S4.休眠状态、系统状态和内存中的所有信息都保存在磁盘中,因此也称为挂在磁盘上。此时,几乎所有设备都断开电源;S5.完全关闭。除电源按钮外,所有设备都需要完全引导才能断电进入系统。六种状态从小到大,电气设备越来越少,功耗依次降低,但系统恢复到工作状态 S0 所需时间也逐渐增加:
许多条件会触发系统 Sx 例如,在长时间无人操作后,系统将由状态转换 S0 变为 S3.如果睡眠系统接收键盘鼠标的输入,则会切换到 S0……当然,作为普通用户,我们不需要担心如何完成这些转换,我们只需要知道 Windows 负责这项任务的组件是电源管理器,电源管理器最重要的两项任务是通知软件即将挂起内存或磁盘和各种硬件设备的电源状态辅助切换。
如果只有系统和软件悬挂,但我们的显示器、蓝牙、背光等设备仍在打开,那么系统很难说是节能的。
如果只有系统和软件被挂起,但我们的显示器、蓝牙、背光等设备仍在打开,那么系统很难说是省电的。ACPI 也为 硬件设备 为了规定不同的电源状态 D(Device)开头:
D0:类似于 S此时设备完全开启,工作正常;D3: 此时设备关闭,无法工作。D3 下两个子状态:D3hot 在状态下,设备仍连接主电源,微耗电,总线控制器可检测到设备; D3cold 设备完全断电,无法检测;D1-D2:这是 D0、D3 与中间状态相比,设备的部分功能正常 D0 功耗较低。不像 D0 和 D3.设备制造商可以不定义这两种状态。以低功耗蓝牙设备为例,不同电源状态下的功耗、恢复正常状态的延迟和 Sx 状态相似,参考资料如下表所示:表注:数据来源 微软文档 和 维基百科
设备的电源状态由相应的驱动程序控制,驱动程序可以相对独立地控制设备状态。例如,我们在日常使用中(S0)摄像头不需要打开,此时摄像头会调整为 D3 状态。然而,当电源管理器决定切换系统状态时,它们必须接受调度。系统电源状态与设备电源状态有预设映射关系,我们可以 Windows 设备管理器 > 设备 > 属性 > 详细信息 > 看电源数据:如上图所示,我的显示器支持 D0 和 D3 系统中有两种状态 S0 的情况下,最低可以达到 D0 也就是说,状态可以处于 D0 - D3 任何状态;在系统中 S3 然后,
最低可以处于 D3 状态,即必须关闭。大多数硬件设备制造商认为没有必要 S3 在模式下保持正常功能,几乎所有设备都设置为 S3 对应 D3。在 Windows 7 及之前,以及目前的部分 PC 进入睡眠模式本质上是系统的电源状态 S0 切换为 S3.根据映射关系切换相应的设备状态 Dx 这通常也被称为状态传统待机或是
S3 待机。
打开终端,输入管理员的权限 powercfg /a,如果得的结果中显示支持 Standby(S3)说明你的设备是传统待机的:因此,采用传统待机模式的一台 PC 上,进入睡眠模式的步骤大致如下:
电源管理器决定切换系统的状态 S3.告知应用程序在规定的时间内完成最终操作,然后将其悬挂到内存中;通知硬件设备配合系统状态切换,所有设备从 D0 切换到 D3 状态。到目前为止,我们已经解决了这个问题 S3 睡眠模式有哪些问题,那么微软为什么要抛弃它,选择所谓的新待机呢?到目前为止,我们已经解决了这个问题 S3 睡眠模式有哪些问题,那么微软为什么要抛弃它,选择所谓的新待机呢?新需求与 Sx 状态的变体虽然 ACPI 制定了电源管理规范,但随着时间的推移,人们开始探索新的需求 Sx 在状态的基础上写文章。例如,Linux、Windows 它将支持一种叫做混合睡眠的方式(hybird sleep)的状态。在这种情况下,机器的状态将被保存到磁盘和磁盘中 RAM,是 S3 和 S4 状态混合;状态混合;Mac 这一特点也被宣传过。Arch Linux Wiki 解释设置这种状态的目的:
如果电池没有耗尽,系统可以从 RAM 恢复。如果电池耗尽,系统可以从磁盘中恢复,这比从 RAM 恢复缓慢,但至少机器的状态没有丢失。
在 S3 睡眠时,系统状态保存到 RAM 中,前面提到的 RAM 一旦断电,保存的内容就会消失;要进入系统,必须重新引导, S4 用于保存系统状态的磁盘没有这样的问题。所以将两者结合的混合睡眠,既解决了数据安全问题,也可以在没耗尽电量之前尽可能缩短唤醒的时间。此外,更著名的例子是 Windows 中的「快速启动」功能。很多人可能不知道它是开放的「快速启动」此功能后,Windows 关机功能不再是真正的关机计算机在您点击关机按钮后不会进入 S5 状态,但进入 S4 休眠状态。但是休眠功能不是保存系统的全部状态吗?为什么 Windows 关机后输入密码,重新打开应用?的确,传统的 S4 休眠将保存系统的所有状态,包括登录用户和打开的应用程序。重启后,指导程序将直接将磁盘中的状态加载到内存中,从而节省重新加载核心和初始化硬件的努力。Windows 10 在开始菜单中,默认情况下隐藏休眠选项,可以通过 电源选项 > 更改电源按钮的功能 > 关机设置 重新打开。
但微软的考虑是,S4 休眠生成的文件比较大,Windows 上面是可以使用总内存的 我们可以用40% PowerShell 在 C 盘根目录看到这个休眠文件:
如图所示,这份休眠文件大约有 10 GB,这对一些磁盘容量较小的设备来说是一个很大的负担。另外,如果设备不使用固态硬盘,可以想象这么大的文件加载时间也很慢。另外,如果设备不使用固态硬盘,可以想象这么大的文件加载时间也很慢。因此,打开「快速启动」以后,Windows 关机功能确实是休眠,但在休眠前,Windows 退出所有应用程序,取消用户会话,生成休眠文件;此时,休眠文件只占内存的大小 20% 了,「快速启动」体验自然会变得更好。上述两个例子表明,制造商不必拘泥于 ACPI 如果有新的需求,解决需求是第一位的。那么,传统 S3 睡眠中有哪些无法解决的需求?微软在其 硬件开发文件 这样回答:
包括:
即使在关闭时,客户也要求他们的计算机随时使用。……在插电或者使用电池时,客户都希望减少 PC 使用的电量
S3 睡眠可能节能,但离随时可用差很多。例如,我们想要电脑 IM 软件和手机一样,可以及时收到消息,但是 S3 状态处理器不能工作,更不用说接收信息了;例如,我们也希望计算机能像手机一样按下指纹解锁,系统需要先花费 5 秒从 S3 切换到 S0.识别指纹解锁;另一个例子是我们想用它 Windows 下面的语音助手,若系统在 S3 睡眠状态态下,收音机和网络设备都处于睡眠状态 D3 关闭状态,语音助手无法响应,保持整个系统 S0,使整机功耗无法控制。读者可能会想:这不就是智能手机上即开即用的体验吗?看到这一点,读者可能会想:这不是智能手机上的即时使用体验吗?事实上,新的待机机是为了带来智能手机的即时体验 Windows 上。新型待机
早在 Windows 8 时代,微软意识到了 S3 当时微软期望睡眠模式不足。 PC 它还可以在睡眠模式下正常连接网络,因此微软推出了一种新的睡眠模式,并将其命名为连接待机(Connected Standby),即确保系统和设备处于 S0 在响应速度的基础上,又能有 S3 功耗控制。而在 Windows 10 中重新更名为新型待机。
图片注:图片自我修改 WinHEC Fall 2017传统 S3 待机控制 CPU 功耗的方法很简单,断开 CPU/SoC 部分电源可以,此时芯片中的所有寄存器都被清空成 0;但是唤醒时,需要重新初始化寄存器,这是从 S3 恢复成 S0 需要一点时间,当然,这个时间远比从 S4 恢复要短得多。
但是现在连这个初始化的时间都不能要了,也就是说需要 CPU/SoC「记住」之前寄存器的状态。
但是现在连这个初始化的时间都不能要了,也就是说需要 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 休眠状态。
}所