什么是Win10的“现代待机”?为什么它未来会越来越重要?

什么是Win10的“现代待机”?为什么它未来会越来越重要?
文章图片
SurfacePro系列的用户很早就发现一个很有趣也非常实用的功能 , 合盖后还可以接收各种通知和邮件 。 这种可以媲美手机的高级特性叫做“现代待机”(ModernStandby) , 它实际上有了十年左右的历史 , 一路走来 , 十分艰难 。 伴随着它坎坷命运的是它的名字 , 在最初 , 它叫做Instant-on , Windows8上市的时候叫做ConnectedStandby , 后改名叫做InstantGo , 在Windows10为了包容性 , 改名ModernStandby(现代待机) , 包含ConnectedStandby和DisconnectedStandby两种模式 。 对于CPU和BIOS固件工程师来说 , 它的名字叫做S0ix , 而对于设备厂商和固件来讲 , 它又和RTD3(RuntimeD3)紧密相关 。 这么多年下来 , ModernStandby的普及率还很低 , 这和它的复杂性紧密相关 。 所幸随着新一代的CPU们逐渐占领市场 , 老旧的S3睡眠模式重要要慢慢地被扫入历史的垃圾堆中 , 而更多的人可以慢慢享受到ModernStandby带来的便捷与舒适中去了 。 所谓由俭入奢易 , 由奢入俭难 , 一旦大家尝到个中滋味 , 那就回不去了 , 这也是技术发展的魅力所在 。
那么这个现代待机为什么会被发明出来?中间经历了哪些坎坷?怎么看自己的机器支持不支持它?这些问题我们今天就一起来探究一下 。 当然作为一个技术专栏 , 也会介绍一下其中的技术难点 , 这对理解这项技术为什么迟迟不能推广紧密相关 。
缘起
【什么是Win10的“现代待机”?为什么它未来会越来越重要?】PC机在出现的前十几年 , 关注的主要是提高性能 , 而不是节省电力 。 在笔记本这种便携式设备出现后 , 才开始考虑如何省电 , 以延长电池的供电时间 , 这样各种省电状态被发明了出来 , ACPI标准囊获了这些发明 , 其中包括系统级的S1、S3、S4;CPU级的C0/C1/C2/C3;设备级别的D0/D1/D3等等 。
什么是Win10的“现代待机”?为什么它未来会越来越重要?
文章图片
一切工作的很好:笔记本暂时不用 , 合上盖子 , 进入S3状态;想要用的时候 , 打开盖子 , 在一秒钟以后 , 进入操作系统 。 动作如行云流水 , 比关机重开机体验好太多 。 这下各方都满意了 , 也变成了约定俗成的标准操作方法 , 没有任何人有疑问 , 直到智能手机出现在地平线上 。
苹果的iPhone教育了市场 , 让大家看到 , 手机还可以这么用 , 这么好用!记得那时我拜访Apple总部 , 相熟的工程师从兜里拿出一个手机向我炫耀 , 说公司每个发了一个 。 我微微一笑 , 没说什么 。 心里想:“苹果刚做手机 , 能做好吗?有黑莓好吗?我口袋里的摩托罗拉表示不服!”朋友看我不以为然 , 立刻表演了起来 , 左划划 , 右划划 。 我表示这些是奇技淫巧 , 好麻烦!谁知道没过几年 , 大家都开始用起来智能手机 , 高通和MTK等等芯片厂商大赚特赚 , 这里按下不表 。
另一头 , Wintel两兄弟坐不住了 , 也要向智能手机进发 。 WindowsCE+IntelCPU是否可以扫平他们呢?现在我们当然知道结果 , 可当时的人们并非没有信心 , 当时人们认为有一个明显的优势:可以把Wintel巨量的用户无缝导入WindowsPhone市场 。 CPU的性能当然没有问题 , 但一个摆在眼前的难题是功耗 。 为此阉割了指令集和流水线 , 定制出Atom系列CPU , 但问题并没有完全解决 。
iPhone几乎没有任何人会关闭电话 , 按下电源键也只是关闭屏幕而已 , 重要的短信和推送的消息都会收到并提醒 , 人们想用手机时按一下键 , 屏幕立刻亮了起来 , 无需等待 。 如果谁指望胃口被养叼了的用户能够忍受某新手机 , 按下电源键就完全变木头 , 想用的时候要一秒钟以后才有反应 , 那一定是疯了 。 S3睡眠不能满足客户 , 但仅仅关闭屏幕 , 让CPU进入C2或者C3 , 功耗又比ARM阵营高的多 , 此路也不通 。 看过我介绍CState文章的同学们应该知道 , 最深的CState只是让CPU内核部分进入了功耗几乎为0的状态 , 而CPU的uncore/SA/NorthComplex部分则继续工作(近期的UFS改善了这点) , 更糟的是PCH(SouthComplex)和主板上其他的芯片也无怨无悔的全力工作并贡献自己的功耗 。
ARM阵营的大部分手机待机功耗只有数毫瓦 , 而Wintel新样机的待机功耗高达到数百毫瓦 。 如何填补其中的巨大黑洞 , 成为了微软和英特尔工程师必须解决的问题 。
解决方案
为了匹敌ARM阵营的特性 , Wintel一起提出了InstantOn/Off(ConnectedStandby)的技术 。 顾名思义 , 这项技术要求按下电源键立刻屏幕点亮、系统可用 , 同时要求系统在待机状态(Standby)模式下 , 网络通信等必要设备必须能够唤醒设备 , 以保持通信通知等畅通 。 系统0秒启动和保持可用 , 要求必须是S0的开机状态 , 同时又要求待机功耗在数毫瓦 , 大致是S3的功耗 , 这种奇怪的组合就是所谓S0ix(最深的是S0i3)的由来了 。
为了达成这个目标 , 从硬件到软件做了极大的改动 , 付出了非常多的努力 。 我们都知道 , 只是把ClockGating住 , 可以降低功耗 , 但要达成0功耗 , 必须关闭电力输入 , 就是要PowerGating 。 而关闭电力 , 就意味着芯片里面的状态机全部复位了 , 粗浅的理解就是寄存器等全部清0了 , 要恢复可用 , 必须重新初始化寄存器 , 这就是S3回来的时候 , BIOS在那个1秒钟主要干的事情 。 而现在又要求不能有这个1秒钟 , 所以寄存器内容或者说状态机状态就不能丢失 , 怎么做到呢?
只有靠芯片自己记住自己的状态了 。 芯片内部电源管理模块会按照步骤 , 一步步关闭芯片内部区域(S0->S0i1->S0i2->S0i3),并把寄存器/状态保存在内部的nvram中 , 并切断这些区域的供电 , 让其功耗接近0;在恢复的时候 , 则反着来 , 一步步恢复寄存器 。 相当于做了个快照 , 一会再恢复回来 。 由于这个过程是硬件完成的 , 速度很快 。
对芯片外部的设备来说 , 不需要通知的设备要进入D3cold状态 , 功耗为0 。 这一般由BIOS报告ACPI , 操作GPIO来关闭设备的Powerrail 。 对于需要唤醒的设备 , 必须支持一种叫做RuntimeD3(RTD3)的状态 , 把信息offload到该设备处理 , 并在必须时才唤醒CPU和其他处于低功耗的设备 。
对整个系统来说 , 是从外到内部一步步进入S0i3的状态中去的:
什么是Win10的“现代待机”?为什么它未来会越来越重要?
文章图片
先是CPU/SOC外部设备进入D3cold , 接下来通讯设备进入RTD3 , 下来是芯片组和uncore , 然后是Core和GPU , 最后是扫尾的电路 。 一步一步 , 中间如果谁拒绝进入低功耗状态 , 整个链路就会中断 , 回到普通的运行模式 。
软件也需要调优 , 不能有任何软件拒绝系统进入deepestidleruntimeplatformstate(DRIPS) 。 Window会通过一系列步骤才能达到最后的低功耗状态 , 详见参考资料1
别看这么多步骤 , 效果还是非常让人满意的 , 最终达成了和手机相同的用户体验 。 细心的同学可能看出来了 , 如果要让这个过程顺利完成 , 仅仅因为Windows和IntelCPU支持是不够的 , 必须主板 , 外围器件和BIOS都支持并很好的调优过 , 才能顺利达成 , 是个系统工程 。
尾声
我们都知道WindowsPhone并没有一统江湖 , 反而寂寂无声了 。 但ConnectedStandby这种好技术和它带来的用户体验却不能放弃 。 Windows10把它拔高成ModernStandby , 并支持两种mode:
什么是Win10的“现代待机”?为什么它未来会越来越重要?
文章图片
ConnectedStandby是待机后Wifi、network等还有效 , DisconnectedStandby是这些也进入D3cold了 。 它们和老式的S3的区别是都支持InstantOn , 也就是即开即用 。
怎么看自己的电脑是不是支持ModernStandby呢?打开Command窗口或者PowerShell:
什么是Win10的“现代待机”?为什么它未来会越来越重要?
文章图片
红框就是所谓的现代待机 。 显然我的机器并不支持它 。
最后是一些其他的信息:
1.虽然现在只有部分笔记本支持ConnectedStandby , 但未来台式机也会支持它 。 并且过一段时间S3甚至都会被淘汰 。
2.S3和ConnectedStandby是互斥的 。


    推荐阅读