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
