Windows suspend and hibernate transition

Suspend and hibernate transition 分為 suspend/hibernate phase。Suspend phase 有 SuspendApps/SuspendServices/QueryDevices/SuspendDevices/HiberfileWrite 等 subphase。



SuspendApps subphase


在這裡 Windows 會送一個包含 PBT_APMSUSPEND event type 的 WM_POWERBROADCAST message 給所有 apps。它告訴 apps 系統準備要 suspend,apps 有 2 秒的時間處理這個訊息。app 在這個時間內沒有完成的工作會在 resume 之後才會完成。


通常 app 對這個訊息不需要做太多事(收到訊息後處理時間極短)。但是如果 app 太忙而導致無法處理這個訊息的話,那麼它就會等到 2 秒的 timeout。由於訊息的發送是一個一個送的,因此某個 busy app delay 了 2 秒,將會導致整個 suspend process 受影響。


SuspendServices subphase


這部份就是一個一個對 service 做 suspend,不過只有被允許收到 power notification 的 service 才會收到 suspend message。不收 power notification 的 service 有可能是因為它們在 suspend 時不需要完成什麼工作。


而這階段對 performance 的影響與 SuspendApps subphase 差不多。


QueryDevices and SuspendDevices subphases


首先 power manager 會送 IRP_MN_QUERY_POWER 來確認裝置支援 sleep and hibernate。每個收到此 IRP 的 driver 要再對 device stack 下的所有 driver 送相同的 IRP。當所有的裝置都完成查詢後,即進入 SuspendDevices subpbase,這時 power manager 送 IRP_MN_SET_POWER 來要求 low power state。Driver 必需要儲存 device context 並且準備進入 sleep or hibernate。


Driver 可以延遲 QueryDevices or SuspendDevices subphase 的時間。


ResumeDevices subphase




這裡 power manager 送 IRP_MN_SET_POWER request for S0 給所有裝置,當所有裝置都返回 S0 時,這個階段便結束。如果 driver 沒有實作 fast resume 的話,會讓 resume 的時間變長。用 WDF 寫的 driver 自動就有實作 fast resume,但是 WDM 寫的 driver 沒有。


ResumeServices and ResumeApps subphase


當 ResumeDevices 結束後會馬上進入這個階段,此時 kernel power manager 會呼叫 user subsystem 來對所有 apps 送出 WM_POWERBROADCAST 訊息。至於 service 則是呼叫在 user mode PnP manager 中的一個 private interface,透過它來呼叫 service 中的 event handler。


這兩個階段比較有 performance 問題,因為當 resume 時,許多 timer/scheduler 就會作動,而使得 apps/services 開始可以收到不同的 notification,因此會影響到 resume activity。


PostResume subphase


這個階段是一個概念性的階段,它 follow resume transition,就跟 PostBoot subphase 在 boot transition 中的角色一樣,它的目的是使系統儘可能進入 idle state。


Summary


* 使用 WPT 來量測
* 使用 WDF 寫 driver
* 確認所有 driver 實作了 fast resume 並且減少 CPU resource 使用
* 沒有必要的收 power notification 的 service 就不要讓它收
* 避免在處理 suspend notification 的程序中延遲
* 改進 BIOS INT13 的效能


留言

熱門文章