天天看點

S3待機 S4休眠

https://hceng.cn/2018/01/18/Linux%E7%94%B5%E6%BA%90%E7%AE%A1%E7%90%86/

1.1系統睡眠模型Suspend

On (on)                  S0 - Working

Standby (standby)            S1 - CPU and RAM are powered but not executed

Suspend to RAM (mem)          S3 - RAM is powered and the running content is saved to RAM

Suspend to Disk, Hibernation (disk)    S4 - All content is saved to Disk and power down

S3 aka STR(suspend to ram),挂起到記憶體,簡稱待機。計算機将目前的運作狀态等資料存放在記憶體,關閉硬碟、外設等裝置,進入等待狀态。此時記憶體仍然需要電力維持其資料,但整機耗電很少。恢複時計算機從記憶體讀出資料,回到挂起前的狀态,恢複速度較快。對DDR的耗電情況進行優化是S3性能的關鍵,大多數手持裝置都是用S3待機。

S4 aka STD(suspend to disk),挂起到硬碟,簡稱休眠。把運作狀态等資料存放在硬碟上某個檔案或者某個特定的區域,關閉硬碟、外設等裝置,進入關機狀态。此時計算機完全關閉,不耗電。恢複時計算機從休眠檔案/分區中讀出資料,回到休眠前的狀态,恢複速度較慢。

系統休眠模型給我的感覺是以整機角度進行省電。

S3類似電腦的睡眠,在教長時間不使用電腦後,電腦黑屏,再次敲擊鍵盤迅速顯示桌面,原來的工作内容仍不變。

S4類似電腦的休眠,在長時間不使用電腦後,電腦黑屏,再次敲擊鍵盤無反應,按下電源鍵,開機,原來的工作内容仍不變。

對于嵌入式裝置,更多的是使用S3,将資料暫時放在記憶體裡,以實作快速恢複,就像手機的電源鍵按下黑屏,再次按下迅速亮屏。

在Linux中,通過

cat /sys/power/state

可以得知目前裝置支援的節能模式,一般情況有如下選項:

  • freeze:不涉及具體的Hardware或Driver,隻是當機所有的程序,包括使用者空間程序及核心線程,能節省的能量較少,使用場景不多;
  • standby:前面的S1狀态,CPU處于淺睡眠模式,主要針對CPU功耗;
  • mem:前面的S3狀态,Suspend to RAM;
  • disk:前面的S4狀态,Suspend to Disk;

需要設定以上模式,隻需

echo mem > /sys/power/state

即可。

系統睡眠狀态

在這篇文章中,我們将在Windows中看到不同的系統睡眠狀态。 MSDN很好地解釋了這一點。

系統電源狀态S0 - 這是工作狀态,Windows PC處于喚醒狀态。這不是睡眠狀态。

系統電源狀态S1 - 在此睡眠狀态下,CPU停止并且您的計算機處于待機模式。如果支援下一個S3狀态,則此S2是大多數硬體上的預設狀态。處理器時鐘關閉,總線時鐘停止。在這種狀态下,功耗可以在5-30瓦之間。

系統電源狀态S2 - 此狀态與S1類似,不同之處在于CPU上下文和系統緩存的内容因處理器斷電而丢失。

系統電源狀态S3 - 在此狀态下,資料或上下文将儲存到RAM,并且硬碟驅動器,風扇等将關閉。功耗通常小于5瓦。 Windows 10/8中的S3(睡眠)或S4(休眠)狀态支援LAN喚醒。

系統電源狀态S4 - 在此狀态下,資料或上下文将儲存到磁盤。它也被稱為 過冬 狀态,對筆記本電腦很有用。您的PC将RAM的内容儲存到硬碟。硬體關閉所有裝置。但是,作業系統上下文儲存在系統在進入S4狀态之前寫入磁盤的休眠檔案中。重新開機後,加載程式讀取此檔案并跳轉到系統之前的休眠前位置。功耗再次低于5瓦。

ACPI簡介

要了解第一個問題,得先從ACPI(進階配置與電源接口)說起,ACPI是一種規範(包含軟體與硬體),用來供作業系統應用程式管理所有電源接口。

ACPI将計算機系統的狀态劃分為四個全局狀态(G0-G3),共7個狀态,其中G0對應S0;G1将低功耗狀态細分為四個狀态,對應S1-S4;G2、G3代表關機狀态分别對應S5、S6。

ACPI State Description
S0 正常工作狀态
S1 CPU與RAM供電正常,但CPU不執行指令
S2 比S1更深的一個睡眠層次,這種模式通常不采用
S3 挂起到記憶體
S4 挂起到硬碟
S5 Soft Off,CPU、外設等斷電,但電源依舊會為部分極低耗裝置供電
S6 Mechanical Off,全部斷電

這裡隻需要對ACPI的七個狀态有個大緻了解即可,下一節會有具體的例子來說明各個狀态。

Linux系統電源狀态

在Linux作業系統中,将電源劃分為如下幾個狀态:

ACPI State Linux State Description
S0 On(on) Working
S1 Standby(standby) CPU and RAM are powered but not executed
S2 ------ ------
S3 Suspend to RAM(mem) CPU is Off,RAM is powered and the running content is saved to RAM
S4 Suspend to Disk(disk) All content is saved to Disk and power down
S5 Shutdown Shutdown the system

On:正常工作狀态

STR(Suspend to RAM):

挂起到記憶體,俗稱待機、睡眠(Sleep),進入該狀态,系統的主要工作如下:

1、将系統目前的運作狀态等資料儲存在記憶體中,此時仍需要向RAM供電,以保證後續快速恢複至工作狀态

2、當機使用者态的程序和核心态的任務(進入核心态的程序或核心自己的task)

3、關閉外圍裝置,如顯示屏、滑鼠等,中斷喚醒外設不會關閉,如電源鍵

4、CPU停止工作

Standby也屬于睡眠的一種方式,屬于淺睡眠。該模式下CPU并未斷電,依舊可以接收處理某些特定事件,視具體裝置而定,恢複至正常工作狀态的速度也比STR更快,但也更為耗電。舉個例子來說,以該方式進入睡眠時,後續通過點選鍵盤也能将系統喚醒。而以mem進入的睡眠為深度睡眠,隻能通過中斷喚醒裝置喚醒系統,如電源鍵(此時按電源鍵,不會經過正常的開機流程的BIOS、BOOTLOAD等),此時按鍵盤是無法喚醒系統的。

STD(Suspend to Disk):

挂起到硬碟,俗稱休眠(Hibernation)将系統目前的運作狀态等資料儲存到硬碟上,并自動關機。下次開機時便從硬碟上讀取之前儲存的資料,恢複到休眠關機之前的狀态。

譬如在休眠關機時,桌面打開了一個應用,那麼下一次開機啟動時,該應用也處于打開狀态。而正常的關機-開機流程,該應用是不會打開的。

Linux核心代碼聲明如下,位于kernel/power/suspend.c

S3待機 S4休眠