---
# System prepended metadata

title: 'Linux 核心專題: 探討電源管理休眠／回復流程（題目與構想取材自 jserve 2025 Linux kernel 課程期末專題）'

---

# 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+ 驗證，並針對稍早整理的演講素材，嘗試提出改進方案。