問題
サスペンド時のフリーズのため、ウェイクアップしないトラブル。ウェイクアップトラブルではありません。
OS:Ubuntu 24.04
Silicon Power製SSD P34A60で発生
対策
NVMeのAPST (Autonomous Power State Transition)の遅延時間の変更
問題の原因
- 同期の問題:
- サスペンド(スリープやハイバネート)時には、システムの各デバイスが適切に低電力状態に移行し、復帰時には再び正常に動作する必要があります。
nvme_core.default_ps_max_latency_us
の値を大きくすると、NVMeデバイスが低電力状態に遷移するまでの時間が長くなり、この間にシステム全体のサスペンドプロセスが同期できなくなる可能性があります。
- 電源管理の不整合:
- 他のデバイスやシステムの電源管理設定とNVMeデバイスの遅延時間設定が一致しない場合、サスペンド時にフリーズすることがあります。これは、各デバイスが適切に低電力状態に移行するまでのタイミングがずれるためです。
対策の詳細
遅延時間の変更をするため、デフォルトの100000μsから15000μsへ変更。
下記ファイルのGRUB_CMDLINE_LINUX_DEFAULTの項目に以下を追加します。
注)0に設定するとAPSTが無効となり、APSTに関わるトラブルは完全に回避できますが、消費電力・製品寿命との兼合いから0にはしない方がいいでしょう。
nvme_core.default_ps_max_latency_us=15000
/etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nvme_core.default_ps_max_latency_us=15000"
設定を反映させて再起動
$ sudo update-grub
$ sudo reboot
Solid state drive/NVMe - ArchWiki
OS起因のサスペンドバグ:Ubuntu 24.04
https://askubuntu.com/questions/1513210/suspend-bug-for-ubuntu-24-04lts
GRUB_CMDLINE_LINUX="intel_iommu=off"
または
GRUB_CMDLINE_LINUX_DEFAULT="text quiet init_on_alloc=0 intel_iommu=off"
$ sudo nano /etc/default/grub
# 以下のように編集(他のオプションがあればそのまま維持)
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash iommu=soft"
$ sudo update-grub
$ sudo reboot
dmesgやjournalctlでスタック時のログを確認
$ sudo dmesg | grep -i nvme
$ sudo journalctl -b -1 | grep -i suspend
kernelパラメータでAPST機能そのものを無効化
nvme_core.default_ps_max_latency_us=0 nvme.noacpi=1
nvme.noacpi=1
: ACPI経由のパワー制御を無効
BIOSのASPMの見直し
PCIe ASPM (Active State Power Management) → Disabled
またはL1 only
ASPM(Active State Power Management)とは?
PCIe デバイスとリンクのアイドル時の電力消費を抑えるための機構で、主に以下の2つのモードがあります:
モード | 説明 |
---|---|
L0s | 非常に短い遅延で復帰できる軽いスリープ状態。消費電力は中程度に減少。 |
L1 | より深いスリープ状態で、電力削減効果は大きいが復帰に時間がかかる。 |
特性 | L0s | L1 |
---|---|---|
スリープの深さ | 浅い(短時間の省電力) | 深い(長時間の省電力) |
復帰速度 | 非常に高速(サブマイクロ秒) | 遅い(数マイクロ秒~ミリ秒) |
安定性傾向 | 不安定になることがある | 比較的安定している |