MODERN STANDBY簡介

本文是根據作者對於 Modern Standby 的理解寫成的,在某些概念上會和定義有衝突,希望讀者特別注意如果有衝突以官方文檔為準。

CPU 作為PC的大腦通常是最大的耗電大戶。與之類似,人腦重量只佔體重的2%,卻會消耗整個身體所需能量的17%和氧氣的20%。所以, CPU省電是整個PC系統降低功耗的關鍵。隨著筆記本電腦的普及,如何降低功耗延長待機時間成為一個突出需求。在進一步介紹之前需要提及一下之前的休眠。在ACPI 規範中定義了一些 PC 省電的狀態。比如下圖所示的S1 S3 和S4,當處於 S0 狀態時,CPU處於工作狀態:


MODERN STANDBY簡介


如果能讓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 專用設備來調試。


分享到:


相關文章: