# Linux 核心專題: 探討電源管理休眠/回復流程(題目與構想取材自 jserve 2025 Linux kernel 課程期末專題) > 執行人: Yu-Sheng Tzou ## 任務簡述 Linux 在行動裝置上的電源管理以系統 suspend (懸置) / Resume (回復/再續) 為主要操作機制,目的在於在暫停大部分硬體與作業時保持程式的狀態,同時將耗電降至最低。以筆記型電腦為例,播放影片時若需要暫時離開,可關閉顯示器、停用大部分 CPU 運作,並進入 S3(Suspend-to-RAM)或 S4(Suspend-to-Disk)狀態;回復時只需還原記憶體內容與中斷向量,便能迅速回到先前的執行點,縮短回復時間且不丟失程式的狀態。 在上述流程中,核心依序執行 `suspend_enter`(同步檔案系統並暫停行程)、`prepare`(初始化省電模式), `suspend`, `suspend_late`(最後硬體關閉)與 `suspend_noirq`(關閉所有中斷);隨後藉由 `resume_noirq`, `resume_early`, `resume`, `complete` 與 `exit`(脫離行程)逆向還原。這些階段涵蓋 DRAM 與 Flash 的電源域切換、CPU C-state、動態電壓與頻率調整(DVFS)以及裝置 D-state(如 D0–D3)的管理。 2024 年,Google 工程師 Saravana Kannan 在 LPC 演講 [Optimizing suspend/resume](https://lpc.events/event/18/contributions/1845/attachments/1479/3129/LPC%202024%20-%20Optimizing%20suspend_resume.pdf) 中指出,多數時間消耗集中在 `suspend_enter` 階段的同步檔案系統操作,所有 dirty page 必須寫回儲存裝置,且過程不可中斷,常因 I/O 排隊而延宕數十秒;另有情況是 freeze processes 後所有 CPU 進入 idle,卻無法順利進入下一階段。此外,Linux 支援非同步懸置/回復機制,試圖平行化處理,但實際上常因同步鎖或電源域相依性增加反而延長總時間;即使選擇非同步機制,`prepare` 與 `complete` 階段仍需依序執行,缺乏足夠的平行化空間;各裝置的 `suspend_late` 階段更必須待所有相關硬體共同完成,才能進行 `suspend_noirq`,即便它們之間並無直接相依。 要深入分析這些瓶頸,可運用 Perfetto 等追蹤工具擷取系統行為的追蹤紀錄,再搭配 [pm-graph](https://github.com/intel/pm-graph) 繪製電源域與行程凍結時序,觀察 I/O 活動、CPU C-state 切換與中斷響應;亦可參考 LKML 上針對非同步暫停流程的程式碼變更討論,評估其對 prepare/complete 階段的影響,並思考是否能在裝置驅動或電源管理子系統中,藉由更細緻的鎖分段或階段重疊機制,縮短整體 Suspend/Resume 時間。 :::danger :warning: 務必依循[資訊科技詞彙翻譯](https://hackmd.io/@sysprog/it-vocabulary)及[詞彙對照表](https://hackmd.io/@l10n-tw/glossaries)規範的用語。了解詞源、語境,謹慎選擇用詞,是必要的態度。 ::: ## 彙整 Linux 電源管理相關素材 > 參考資料(Linux 基金會舉辦研討會): > * [Linux Power Management Features, Their Relationships and Interactions](https://youtu.be/_jb6U40ZCZk) > * [Optimizing suspend/resume](https://youtu.be/8Iuyp1fp8QI) > * [The Case for an SoC Power Management Driver](https://youtu.be/FLeXBSjPHt8) > * [CPU Power Saving Methods for Real-time Workloads](https://youtu.be/9_IOJDOE-Ac) > > 參考資料(Linux.conf.au 研討會): > * [Advances in CPU Frequency Management](https://www.youtube.com/watch?v=55Zlt5efcJQ&t=20s) > * [The future of power management in Linux](https://www.youtube.com/watch?v=SMKTgXIPCLA) > > 參考資料 > - [Linux 核心設計: Power Management(1): System Sleep model](https://hackmd.io/@RinHizakura/r17lOaDqp) > - [Linux 核心設計: Power Management(2): Runtime Power Management model](https://hackmd.io/@RinHizakura/SkziZRa9a) > - [Linux 核心設計: Power Management(3): 測試工具](https://hackmd.io/@RinHizakura/rkhIzLcjT) > - [Linux 核心設計: CPUIdle(1): 子系統架構](https://hackmd.io/@RinHizakura/SyPwWWZkC) ## TODO: 針對 x86-64 和 Arm64 處理器進行實驗和解讀 > 選用內建 Intel Core i7-10700 處理器的個人電腦和 Raspberry Pi 4B 進行實驗,善用 [Perfetto](https://perfetto.dev/) 工具予以視覺化並探討其中是否存在可改進之處。 ## TODO: 評估 LKML 相關改進並參與討論 > 在上述裝置中,評估 [PM: sleep: Improvements of async suspend and resume of devices](https://lore.kernel.org/lkml/10629535.nUPlyArG6x@rjwysocki.net/T/) 及相關 patchset (注意版本) 對於電源管理的效益,在 Linux v6.12+ 驗證,並針對稍早整理的演講素材,嘗試提出改進方案。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up