追蹤 suspend 階段
要優化系統的 suspend 和 resume 流程,首先要弄清楚:當我下命令讓電腦休眠時,Linux 內部到底呼叫了哪些函式?了解這整條流程,才能知道從哪裡開始優化。
我首先觀察最簡單的 suspend 模式 — freeze (Suspend-to-Idle)。當我執行下列指令後:
echo "freeze" | sudo tee /sys/power/state
系統會開始進行 freeze 流程,首先系統會呼叫 linux/kernel/power/main.c 當中的 state_store() 這個函式,這個函式主要的效果是 根據使用者輸入的字串(如 echo mem > /sys/power/state),決定要讓系統進入哪種 suspend 模式,或是執行休眠(hibernate),並呼叫相對應的核心 API。
static ssize_t state_store(struct kobject *kobj, struct kobj_attribute *attr,
const char *buf, size_t n)