Modern Standby简介

本文是根据作者对于 Modern Standby 的理解写成的,在某些概念上会和定义有冲突,希望读者特别注意如果有冲突以官方文档为准。

CPU 作为PC的大脑通常是最大的耗电大户。与之类似,人脑重量只占体重的2%,却会消耗整个身体所需能量的17%和氧气的20%。所以, CPU省电是整个PC系统降低功耗的关键。随着笔记本电脑的普及,如何降低功耗延长待机时间成为一个突出需求。在进一步介绍之前需要提及一下之前的休眠。在ACPI 规范中定义了一些 PC 省电的状态。比如下图所示的S1 S3 和S4,当处于 S0 状态时,CPU处于工作状态:

如果能让CPU 在S0 的时候尽量降低功耗,那么可以节省出很多电力。此外,人们希望省电不要影响操作体验。为此,Intel 和微软携手一起推出了 Modern Standby。据说这个概念来源自手机:对于用户来说,按下按键锁屏,屏幕黑掉之后系统会做一些动作来省电。具体的操作并不需要用户操心,相比PC用户,Legacy Sleep需要用户操作选择S1 S3 或者S4;手机用户按下按钮马上屏幕可以亮起来继续之前的使用。于是,Intel 和微软也希望能在PC上实现类似功能。比如,用户使用Windows平板电脑按下电源关闭屏幕就开始省电,再次按下就马上恢复使用,这样就能做到在不影响客户体验的情况下节省电力。

除了Modern Standby(缩写 MS,还有些人会缩写成 MSB),该技术还可以被称作:Connected Standby (缩写 CS),S0ix或者 Sleep S0。这里特别提一下用 Connected Standby称呼 Modern Standby 功能并不恰当。Modern Standby包括了2种,一种是 Connected Standby,最主要的意思是睡眠的时候仍然联网,比如:收邮件。进入CS 之后后台仍然能够收邮件,唤醒之后马上就能看到新邮件。还有一种是 Disconnected Standby,就是睡眠的时候断网。很明显,因为有联网的操作,经常让系统睡的不踏实,人们也不知道睡眠的时候 Windows 究竟在后台干嘛。甚至很多时候 Windows后台升级操作会严重影响休眠,表面看着睡下去,但是实际上 CPU 并没有睡下去依然在工作。

此外,微软和 Intel 对于 Modern Standby 理解上有差别。前者以关闭屏幕为标志,屏幕一灭就是开始睡;后者是以 SLPS0 信号拉低(Assert)为标志的。所以在测试的时候也经常发现 Software 报告的 Sleep 会高于 Hardware Sleep 的情况。

SLPS0 是存在 CPU上的实体线路,与之类似的是主板上的 Sleep S3 信号,还有Sleep S4 信号。CPU 通过SLPS0告诉外围设备:我现在睡 Modern Standby了。比如,EC看到了这个信号被拉低就知道系统进入 MS,可以做一些相应动作。

在前期的研发过程中,示波器测量SLPS0 信号是最准确的判定是否进入 MS 的方法。使用示波器,可以看到正常情况下 SLPS0 信号是每隔一段时间起来一次的。这就是CPU 起来看看是否有需要他处理的事件,如果有的话处理一下,处理完成继续睡,如果没有继续睡。还有一种特殊情况,比如 Skype 能够在MS的状态下随时接收呼叫,这个功能是网卡配合,将一些特殊的 Pattern 注册到网卡中。当系统进入 MS 后,网卡保持工作,这个工作不需要CPU参与;如果发生呼叫,远端服务器会将这个 Pattern 发送到网卡上,网卡发现匹配后唤醒CPU来进行处理。

从BIOS 的角度来说 Connected Standby 调试很困难,因为基本上所有的软件调试都要依赖CPU 来处理,CPU 睡了也没人处理。另外,CPU 进入 Connected Standby 之后 CPU并没有准确的停止位置。比如:Sleep S1 我们能在 ACPI 中拦截到;Sleep S4 我们知道CPU 是关掉了。但是对于Connected Standby 没人知道当下 CPU 的 EIP 指向何处。产用的调试方法是运行 Intel 专用调试软件 Powerhouse Mountain抓取Log,但是对于一些硬件问题这种方法无能为力;更复杂的问题需要使用 Intel 专用设备来调试。

发表评论

电子邮件地址不会被公开。 必填项已用*标注