tft每日頭條

 > 科技

 > win10合上蓋子無法正常睡眠

win10合上蓋子無法正常睡眠

科技 更新时间:2024-12-23 04:21:27

明明什麼都沒做,合蓋睡眠的 Windows 筆電卻熱得燙人。

2020 年 1 月,NotebookCheck 将戴爾 XPS、華碩 ZenBook 等 Windows 筆記本電腦從 Windows「睡眠模式」喚醒後,發現 筆記本表面最高溫度竟然達到 50℃,整機功耗更是高達 27 W。Windows 睡眠模式設計的目标就是安靜、低功耗,但現在有如此異狀,NotebookCheck 認為「取代了 S3 睡眠模式的微軟新型待機是導緻(這樣結果的)罪魁禍首」。

win10合上蓋子無法正常睡眠(為什麼什麼都沒做)1

那麼,S3 睡眠模式代表着什麼?它為何被新型待機(Modern Standby)取代?發熱的合蓋筆電和新型待機又有什麼關聯?

ACPI 與系統、設備電源狀态

我們既想讓硬件在幹活時,卯足了勁幹活;又想在無人操作時,降低功耗節約能源;而且對于筆記本或是平闆電腦來說,在不接入外部電源時電池電力總是有限的,因此我們需要電源管理。我們日常接觸到電腦的關機、開機也好,睡眠、休眠也罷,從宏觀上看,都屬于電腦的電源管理的範疇。

顯然,這種系統性工程需要由操作系統、硬件制造商、OEM 等角色共同參與,一個大家共同遵守的規範性文件也自然必不可少。

90 年代中期,英特爾、微軟、東芝等共同制定了幫助操作系統發現、配置計算機硬件和執行電源管理的規範——ACPI。該标準為系統、硬件組件等定義了不同的電源級别,其中,Sx 定義了系統整體的電源狀态,而 Dx 則定義了主闆上硬件設備的電源狀态,文章開頭提到的 S3 就隸屬于 Sx 狀态。

在 ACPI 規範 中,系統整體的電源狀态(即 Sx 狀态)從 S0 到 S5 共分六級。但在現實生活中,常見的系統電源狀态隻有如下四種:

  • S0:完全開啟,CPU 等設備正常運作。也就是開機、從睡眠模式喚醒計算機本質上是系統電源狀态切換為 S0 的過程;
  • S3:睡眠狀态,亦稱挂起到内存。此時,内存仍需供電,但處理器不處理指令,斷電會丢失内存中的數據;S1 和 S2 則為 S0、S3 的中間狀态;
  • S4:休眠狀态,系統狀态以及内存中的所有信息都被保存到磁盤,所以也被叫做挂起到磁盤,此時幾乎所有設備斷開電源;
  • S5:完全關閉。除電源按鈕外所有設備斷電,需要經過完整引導才能進入系統。

六個狀态按數字從小到大,用電設備越來越少,功耗也依次降低,不過,将系統恢複到工作狀态 S0 所需時間也逐漸增加:

win10合上蓋子無法正常睡眠(為什麼什麼都沒做)2

許多條件會觸發系統在 Sx 狀态中的轉換,比如說長時間無人操作後,系統會由 S0 變為 S3;睡眠狀态的系統如果接收到了鍵盤鼠标的輸入,則會切換到 S0……當然,作為普通用戶的我們并不需要操心如何完成這些轉換,我們隻需要知道 Windows 中的負責此任務的組件是電源管理器,電源管理器最重要的兩個任務是告知軟件即将要被挂起到内存或者磁盤輔助切換各種硬件設備的電源狀态

如果隻是系統和軟件被挂起,但我們的顯示器、藍牙、背光燈等設備仍處于開啟狀态,這時系統也很難說是省電的。因而,ACPI 也為 硬件設備 規定了不同的電源狀态,以 D(Device)開頭:

  • D0:類似于 S0,此時設備完全開啟,正常工作;
  • D3: 此時設備處于關閉狀态,不能工作。D3 下有兩個子狀态:D3hot 狀态中,設備仍然連接着主電源,微量耗電,總線控制器能檢測到設備;而 D3cold 則是完全斷電,無法檢測到設備;
  • D1-D2:這是 D0、D3 的中間狀态,設備的部分功能正常,相對于 D0 而言,功耗更低。不像 D0 和 D3,設備的制造商可以不定義這兩個狀态。

以低功耗藍牙設備為例,不同電源狀态下的功耗、恢複到正常狀态的延遲和 Sx 狀态類似,參考數據如下表所示:

win10合上蓋子無法正常睡眠(為什麼什麼都沒做)3

表注:數據來自 微軟文檔 和 維基百科

設備的電源狀态由對應的驅動程序控制,驅動程序可以相對獨立地控制設備狀态。例如,我們在日常使用(S0)時,攝像頭無需開啟,那麼此時的攝像頭就會被調整為 D3 狀态。但是,當電源管理器決定要切換系統狀态時,它們必須接受調度,系統電源狀态和設備電源狀态有預設的映射關系,我們可以在 Windows 設備管理器 > 設備 > 屬性 > 詳細信息 > 電源數據看到:

win10合上蓋子無法正常睡眠(為什麼什麼都沒做)4

如上圖所示,我的顯示器支持 D0 和 D3 兩種狀态,在系統為 S0 的情況下,最低可以達到 D0 狀态,也就是說,可以處于 D0 - D3 任意一種狀态;而在系統為 S3 的情況下,則最低可以處于 D3 狀态,也就是必須關閉。硬件設備的制造商大多認為不需要在 S3 模式下保持功能正常,幾乎所有設備被設定為 S3 對應 D3。

在 Windows 7 及之前,以及目前的部分 PC 中,進入睡眠模式實質上就是系統電源狀态由 S0 切換為 S3,設備狀态再根據映射關系,切換對應的 Dx 狀态,這常常也被稱為傳統待機或是 S3 待機

以管理員權限打開終端,輸入 powercfg /a,如果得到的結果中顯示支持 Standby(S3),則說明你的設備為傳統待機:

win10合上蓋子無法正常睡眠(為什麼什麼都沒做)5

因此,在一台采用了傳統待機模式的 PC 上,進入睡眠模式的步驟大緻如下:

  1. 電源管理器決定切換系統狀态為 S3;
  2. 告知應用在規定時間内完成最後的操作,之後将它們挂起到内存;
  3. 通知硬件設備配合系統狀态切換,設備悉數從 D0 切換到 D3 狀态。

至此,我們已經解決了 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 開始菜單中,休眠選項默認是隐藏的,可以通過 電源選項 > 更改電源按鈕的功能 > 關機設置 重新打開。

win10合上蓋子無法正常睡眠(為什麼什麼都沒做)6

但微軟的考量是,S4 休眠生成的文件比較大,Windows 上為可以使用總内存的 40%,我們能用 PowerShell 在 C 盤根目錄看到這個休眠文件:

win10合上蓋子無法正常睡眠(為什麼什麼都沒做)7

如圖所示,這個休眠文件大約有 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 中重新更名為新型待機。

win10合上蓋子無法正常睡眠(為什麼什麼都沒做)8

圖注:圖片修改自 WinHEC Fall 2017

傳統 S3 待機控制 CPU 功耗的方法很簡單,斷開 CPU/SoC 部分的供電即可,這時芯片裡的寄存器全部清空變成了 0;但在喚醒時,需要重新初始化寄存器,這就是從 S3 恢複成 S0 時需要一點時間的原因,當然這個時間遠比從 S4 恢複所需要的短得多。

但現在連這一點初始化的時間都不能要了,也就意味着需要 CPU/SoC「記住」之前寄存器的狀态。因此,CPU/SoC 内部就需要有一枚專門的芯片按照下圖的步驟,一步步把對應寄存器區域的狀态保存在 CPU/SoC 内部的 nvram 中,再切斷電源。這樣就讓設備實現了在 S0 響應速度的基礎上,又能有 S3 的功耗控制。

win10合上蓋子無法正常睡眠(為什麼什麼都沒做)9

所需要功耗從上到下依次變小,且隻有每層的任務都完成以後才會操作下一層的目标

首先,CPU/SoC 外部的所有設備都必須進入低功率模式, 也就是 Sx 對應的 Dx 為最低的設備電源狀态。接下來,将網絡和無線電設備置于低功率模式,在此期間,這些設備通常會使用很少的一部分電源以維護連接,并在必要時喚醒 CPU/SoC 。

在 CPU/SoC 外部的所有設備(包括通信設備)都斷電後,CPU/SoC 的芯片組和非處理器核心也将進入低功率模式,這可以進一步節約能源;在這之後,就是處理核心 CPU 和 GPU 以及位于最後的一些其他電路了。如果中間有任何一個部件拒絕進入低功耗狀态,那麼整個鍊路就會中斷,重新回到 S0。英特爾将這一系列狀态稱之為低功耗 S0 狀态(low power S0 idle),代号為 S0ix,每讓一層設備進入低功耗狀态則為 S0ix 中的 x 加上一,因此在 CPU 和 GPU 停止工作以前的狀态也常常被稱作 S0i3 休眠狀态。

所以,新型待機對 PC 上的芯片組等設備有一定的要求。以管理員權限運行終端命令 powercfg /a,若結果含有 Standby(S0 low power idle),則說明你的設備為新型待機。使用新型待機的設備,不支持 S1-S3 睡眠模式:

win10合上蓋子無法正常睡眠(為什麼什麼都沒做)10

硬件設備的省電還不夠,軟件也有做相應的準備。這方面,新型待機和 S3 睡眠一樣,都将運行的應用挂起到 RAM。和 S3 狀态不一樣的是,新型待機目的是在睡眠狀态下仍能完成一些任務,因此,部分活動享有新型待機下的豁免權。

微軟稱這些應用活動為 激活器,前面提到過新型待機狀态下,網絡甚至是 CPU 都可能不工作,這些激活器的作用就是将這些設備短時間喚醒,執行某些指令。這些激活器全都是 Windows 内置的系統服務,例如負責接收 UWP 應用通知的 WNS、負責處理 Windows 更新的 WU、負責管理網絡連接的 NCSI……它們的存在使 Windows S0ix 待機狀态時也能收到通知,并可以處理後台維護任務。

以 UWP 後台任務為例,我們在 Windows 設置中的應用 > 應用和功能 > 設置中看到一項後台應用權限,這個權限控制的就是在待機時,應用執行後台任務的能力。默認的「電源已優化」選項意思是根據 PC 連接電源的情況,決定是否執行任務。

win10合上蓋子無法正常睡眠(為什麼什麼都沒做)11

當激活器喚醒部分硬件設備時,新版 Windows 還會限制它們能夠使用的資源量,例如 UWP 後台刷新任務隻允許活動 5 秒,5 秒後則會被終止,硬件設備也會再次進入低功耗狀态。需要注意的是,和 S3 睡眠模式不同,這些任務并不會導緻系統被喚醒至完全工作狀态,除了需要喚醒的少部分設備外,其他硬件仍處于低功耗狀态,所有第三方應用、服務也仍被挂起。

除了被激活器喚醒的小部分時間中,新型待機 PC 的功耗和 S3 相當。如下圖所示,運行 powercfg /spr 生成的電池報表顯示,在 2022 年 4 月 16 日 2 - 11 時的新型待機過程中,軟件(SW)、硬件(HW)100% 處于低功耗狀态,筆記本電量消耗了 3%:

win10合上蓋子無法正常睡眠(為什麼什麼都沒做)12

上面的報表還顯示,在進入睡眠模式前,有一個關閉屏幕(Screen Off)階段。這種設計很符合直覺,按下睡眠按鈕後,PC 直接關閉屏幕,将應用挂起到 RAM、切換硬件設備狀态都在用戶無感知的息屏期間完成,這也是誤觸了睡眠功能後,立刻喚醒 PC 花費時間比正常情況稍長的原因。從關閉屏幕到睡眠的間隔對應着設置面闆中的相關選項,一般建議将兩個時間統一:

win10合上蓋子無法正常睡眠(為什麼什麼都沒做)13

當然新型待機模式和傳統待機一樣,點擊電源按鈕,或者操作鍵盤鼠标,PC 就會切換為 S0 完全開啟狀态。因為系統本身就處于 S0,部分設備也不需要經曆 D3 到 D0 的高延遲狀态切換,所以新型待機的喚醒可以達到 1 秒以内,微軟稱之為「instant on」。Intel Evo™ 認證 主打的「即時喚醒」也正是得益于新型待機。

當然為了進一步增強 S0ix 的省電效果,新型待機還有一個機制叫做 自适應休眠:當新型待機期間耗電量超過 5%,系統會直接進入最深一級的 S0i5 狀态,這個狀态理論上功耗為 0 瓦。有這個機制的存在,有時候将筆記本合蓋後,你會發現第二天再打開時就無法用鍵鼠喚醒了。如下表所示,由于某些軟件活動,我的筆記本待機耗電達到了 5%(264),接着,PC 就直接進入了休眠模式(265),電量停止消耗。

win10合上蓋子無法正常睡眠(為什麼什麼都沒做)14

綜上所述,在一台采用新型待機的 PC 中,進入睡眠模式步驟如下:

  • 電源管理器決定進入 S0 低功耗模式;
  • 屏幕關閉;
  • 告知運行中的桌面應用和 UWP 在規定時間内完成最後的操作,之後将它們挂起到内存;
  • 通知硬件設備進入相應的低功耗模式;
  • 有通知或後台任務任務的需要時,激活器喚醒部分設備,執行操作;
  • 完成任務或者超過喚醒時限時,再次讓設備進入低功耗模式。

我們的第二個問題也就迎刃而解了。讓我們回到文章開頭,新型待機又是怎麼制造出了高達 50℃ 的合蓋筆記本呢?

對新型待機的批評

事實上,新型待機推行以來,批評的聲音此起彼伏,文章開頭的新聞隻是其中一例。這些批評一部分确實和新型待機有關,也有一部分則應當歸咎于誤操作。

雖然微軟在宣傳中将新型待機功耗和 S3 并稱,但毫無疑問的是,由于傳統待機狀态下沒有任何後台活動,設備也大都處于關閉狀态,耗電量極小。

但新型待機狀态下,一些設備可能并不會進入低功耗狀态,甚至是拒絕進入低功耗狀态;此外新型待機也有喚醒 SoC 處理指令的機制,所以,新型待機的耗電量必然不會比 S3 更好,但并沒有到不能接受的程度,從前面的報表中可以看出,9 個小時的待機時間耗電量為 3%。

因此,一個非常普遍的觀點是新型待機相較于傳統待機耗電量更大,甚至有 Surface 用戶稱 睡眠模式下短時間内電量驟降 20%。的确,既要即時啟動又要不耗電的黑魔法是不存在的,但 20% 實屬誇張,如果機器電池狀況良好,那麼唯一可能的解釋是 PC 根本沒有進入睡眠模式。

那麼,為什麼 PC 會無法進入睡眠模式呢?答案很有可能是 Windows 的電源請求機制。

試想,我們正在觀看一部 2 個小時的電影,PC 依舊死闆地遵照設置,3 分鐘無操作直接息屏睡眠,這樣的體驗實在很差。正是為了解決這些情況,應用可以發送電源請求,系統掃描到電源請求後不會發送切換狀态的指令。電源請求可以使用 powercfg /requests 看到:

win10合上蓋子無法正常睡眠(為什麼什麼都沒做)15

音視頻應用之外,其他應用也有可能發送電源請求,它們會阻止閑置的 PC 睡眠,電量消耗自然會高。不過,當我們明确要求 PC 睡眠時,這些應用也會被停止,隻需要将合蓋/電源按鈕的功能設置為睡眠,然後執行這些操作即可。

除了對耗電量的批評,還有人認為 新型待機隻是假睡,因為他們發現,書包裡的 PC 風扇仍在工作。本質上,這是不信任其激活和喚醒機制。

根據前面對新型待機原理的講解,我們知道,和 S3 狀态一樣,除了豁免的少數應用活動,待機狀态下傳統應用、第三方系統服務都被挂起到内存,它們沒有辦法喚醒機器。最有可能将機器喚醒至 S0 完全開啟狀态的并非軟件,而是外設。例如,如果 PC 外接了鼠标,并且在不關閉鼠标的情況下直接合蓋放進背包,那麼,鼠标隻要受擠壓輕微移動,PC 就會退出睡眠狀态。這種情況并非新型待機獨有,唯一的解決方案是裝包之前,拔出或者關閉外設的電源。

還有一種情況,前面提到過,Windows 是可以在待機狀态下執行更新操作的。根據 微軟的設計,如果連接了網絡,那麼 Windows 可以在待機狀态後台下載已有的更新,如果還連接了電源,那麼 Windows 也能安裝更新甚至重啟設備。如果更新下載任務繁重,風扇确實可能會工作,由于此時為合蓋狀态,散熱條件差,很可能造成熱量堆積。要是廠商将待機模式下的風扇設計為完全不工作,那麼此時可能會更熱。

由網絡連接引發的問題可以通過禁用新型待機的連接解決。部分設備上的設置面闆提供了「允許待機時使用 Wifi」之類的選項,如果沒有提供的話,則可以直接修改注冊表:在 HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Power 新建名為 EnforceDisconnectedStandby 的 DWORD,值為 1。這樣,就可以禁止待機時網絡下載。其代價是我們無法在待機狀态下收取郵件等需要聯網的通知。

不過,文章開頭的案例大概率并非由以上原因導緻。NotebookCheck 并沒有給出完整的測試數據和步驟,但能确定的是,根據該文章發布兩天後的注釋,文章中的測試機并沒有安裝最新驅動。而戴爾則早在文章發布 5 個月前釋出了針對現代待機的修複補丁,Elevenforum 也有因驅動引發待機異常問題的讨論。理論上,新型待機工作需要硬件設備的緊密配合,如果驅動出錯,那麼待機溫度異常也是有可能的。

總而言之,如果新型待機異常,可以通過管理員權限運行 powercfg /spr 獲得待機的時間、軟硬件活動、喚醒事件等信息,再從以下方向排查:

  • 驅動程序是否為最新;
  • 是否有應用阻止 PC 睡眠;
  • 是否連接了會喚醒 PC 的外設;
  • 是否在待機過程中進行了大量網絡活動,如系統更新?

不管用戶願意與否,新型待機都會在更多的設備上應用。就我個人而言,用極少量的待機耗電,換取無需關機、随時可用的 PC 使用體驗,這筆交易不算虧。然而,由于 PC 上缺少統一推送渠道,UWP 多年來普及緩慢,新型待機離智能手機一樣的使用體驗還有很長一段路要走。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved