網絡問題

      什么是Win10的“現代待機”?為什么它未來會越來越重要?

      2020-04-29
      0
      Surface Pro系列的用戶很早就發現一個很有趣也非常實用的功能,合蓋后還可以接收各種通知和郵件。這種可以媲美手機的高級特性叫做“現代待機”(Modern Standby),它實際上有了十年左右的歷史,一路走來,十分艱難。伴隨著它坎坷命運的是它的名字,在最初,它叫做Instant-on,Windows 8上市的時候叫做Connected Standby,后改名叫做InstantGo,在Windows 10為了包容性,改名Modern Standby(現代待機),包含Connected Standby和Disconnected Standby兩種模式。對于CPU和BIOS固件工程師來說,它的名字叫做S0ix,而對于設備廠商和固件來講,它又和RTD3(Runtime D3)緊密相關。這么多年下來,Modern Standby的普及率還很低,這和它的復雜性緊密相關。所幸隨著新一代的CPU們逐漸占領市場,老舊的S3睡眠模式重要要慢慢地被掃入歷史的垃圾堆中,而更多的人可以慢慢享受到Modern Standby帶來的便捷與舒適中去了。所謂由儉入奢易,由奢入儉難,一旦大家嘗到個中滋味,那就回不去了,這也是技術發展的魅力所在。

      那么這個現代待機為什么會被發明出來?中間經歷了哪些坎坷?怎么看自己的機器支持不支持它?這些問題我們今天就一起來探究一下。當然作為一個技術專欄,也會介紹一下其中的技術難點,這對理解這項技術為什么遲遲不能推廣緊密相關。

      緣起

      PC機在出現的前十幾年,關注的主要是提高性能,而不是節省電力。在筆記本這種便攜式設備出現后,才開始考慮如何省電,以延長電池的供電時間,這樣各種省電狀態被發明了出來,ACPI標準囊獲了這些發明,其中包括系統級的S1、S3、S4;CPU級的C0/C1/C2/C3;設備級別的D0/D1/D3等等。


      一切工作的很好:筆記本暫時不用,合上蓋子,進入S3狀態;想要用的時候,打開蓋子,在一秒鐘以后,進入操作系統。動作如行云流水,比關機重開機體驗好太多。這下各方都滿意了,也變成了約定俗成的標準操作方法,沒有任何人有疑問,直到智能手機出現在地平線上。

      蘋果的iPhone教育了市場,讓大家看到,手機還可以這么用,這么好用!記得那時我拜訪Apple總部,相熟的工程師從兜里拿出一個手機向我炫耀,說公司每個發了一個。我微微一笑,沒說什么。心里想:“蘋果剛做手機,能做好嗎?有黑莓好嗎?我口袋里的摩托羅拉表示不服!”朋友看我不以為然,立刻表演了起來,左劃劃,右劃劃。我表示這些是奇技淫巧,好麻煩!誰知道沒過幾年,大家都開始用起來智能手機,高通和MTK等等芯片廠商大賺特賺,這里按下不表。

      另一頭,Wintel兩兄弟坐不住了,也要向智能手機進發。Windows CE + Intel CPU是否可以掃平他們呢?現在我們當然知道結果,可當時的人們并非沒有信心,當時人們認為有一個明顯的優勢:可以把Wintel巨量的用戶無縫導入Windows Phone市場。CPU的性能當然沒有問題,但一個擺在眼前的難題是功耗。為此閹割了指令集和流水線,定制出Atom系列CPU,但問題并沒有完全解決。

      iPhone幾乎沒有任何人會關閉電話,按下電源鍵也只是關閉屏幕而已,重要的短信和推送的消息都會收到并提醒,人們想用手機時按一下鍵,屏幕立刻亮了起來,無需等待。如果誰指望胃口被養叼了的用戶能夠忍受某新手機,按下電源鍵就完全變木頭,想用的時候要一秒鐘以后才有反應,那一定是瘋了。S3睡眠不能滿足客戶,但僅僅關閉屏幕,讓CPU進入C2或者C3,功耗又比ARM陣營高的多,此路也不通。看過我介紹C State文章的同學們應該知道:

      老狼:CPU省電的秘密(二):CStates
      ?
      zhuanlan.zhihu.com
      圖標
      最深的C State只是讓CPU內核部分進入了功耗幾乎為 0的狀態,而CPU的uncore/SA/NorthComplex部分則繼續工作(近期的UFS改善了這點),更糟的是PCH(SouthComplex)和主板上其他的芯片也無怨無悔的全力工作并貢獻自己的功耗。

      ARM陣營的大部分手機待機功耗只有數毫瓦,而Wintel新樣機的待機功耗高達到數百毫瓦。如何填補其中的巨大黑洞,成為了微軟和英特爾工程師必須解決的問題。

      解決方案

      為了匹敵ARM陣營的特性,Wintel一起提出了Instant On/Off(ConnectedStandby)的技術。顧名思義,這項技術要求按下電源鍵立刻屏幕點亮、系統可用,同時要求系統在待機狀態(Standby)模式下,網絡通信等必要設備必須能夠喚醒設備,以保持通信通知等暢通。系統0秒啟動和保持可用,要求必須是S0的開機狀態,同時又要求待機功耗在數毫瓦,大致是S3的功耗,這種奇怪的組合就是所謂S0ix(最深的是S0i3)的由來了。

      為了達成這個目標,從硬件到軟件做了極大的改動,付出了非常多的努力。我們都知道,只是把Clock Gating住,可以降低功耗,但要達成0功耗,必須關閉電力輸入,就是要Power Gating。而關閉電力,就意味著芯片里面的狀態機全部復位了,粗淺的理解就是寄存器等全部清0了,要恢復可用,必須重新初始化寄存器,這就是S3回來的時候,BIOS在那個1秒鐘主要干的事情。而現在又要求不能有這個1秒鐘,所以寄存器內容或者說狀態機狀態就不能丟失,怎么做到呢?

      只有靠芯片自己記住自己的狀態了。芯片內部電源管理模塊會按照步驟,一步步關閉芯片內部區域(S0->S0i1->S0i2->S0i3),并把寄存器/狀態保存在內部的nvram中,并切斷這些區域的供電,讓其功耗接近0;在恢復的時候,則反著來,一步步恢復寄存器。相當于做了個快照,一會再恢復回來。由于這個過程是硬件完成的,速度很快。

      對芯片外部的設備來說,不需要通知的設備要進入D3cold狀態,功耗為0。這一般由BIOS報告ACPI,操作GPIO來關閉設備的Power rail。對于需要喚醒的設備,必須支持一種叫做Runtime D3(RTD3)的狀態,把信息offload到該設備處理,并在必須時才喚醒CPU和其他處于低功耗的設備。

      對整個系統來說,是從外到內部一步步進入S0i3的狀態中去的:


      先是CPU/SOC外部設備進入D3cold,接下來通訊設備進入RTD3,下來是芯片組和uncore,然后是Core和GPU,最后是掃尾的電路。一步一步,中間如果誰拒絕進入低功耗狀態,整個鏈路就會中斷,回到普通的運行模式。

      軟件也需要調優,不能有任何軟件拒絕系統進入deepest idle runtime platform state (DRIPS)。Window會通過一系列步驟才能達到最后的低功耗狀態,詳見參考資料1[1]

      別看這么多步驟,效果還是非常讓人滿意的,最終達成了和手機相同的用戶體驗。細心的同學可能看出來了,如果要讓這個過程順利完成,僅僅因為Windows和Intel CPU支持是不夠的,必須主板,外圍器件和BIOS都支持并很好的調優過,才能順利達成,是個系統工程。

      尾聲

      我們都知道Windows Phone并沒有一統江湖,反而寂寂無聲了。但Connected Standby這種好技術和它帶來的用戶體驗卻不能放棄。Windows 10把它拔高成Modern Standby,并支持兩種mode:


      Connected Standby是待機后Wifi、network等還有效,Disconnected Standby是這些也進入D3cold了。它們和老式的S3的區別是都支持Instant On,也就是即開即用。

      怎么看自己的電腦是不是支持Modern Standby呢?打開Command窗口或者PowerShell:


      紅框就是所謂的現代待機。顯然我的機器并不支持它。

      最后是一些其他的信息:

      1.雖然現在只有部分筆記本支持Connected Standby,但未來臺式機也會支持它。并且過一段時間S3甚至都會被淘汰。

      2. S3和Connected Standby是互斥的。
      部分文章來源與網絡,若有侵權請聯系站長刪除!

      推薦產品