DRAMが搭載されていない安物の SSD (DRAM-less) にシステムをインストールするとレイテンシーが大きいため、しばしばスリープから復帰したとき問題が起きることがあります。
特に筆者の環境の場合は休止状態から復帰すると書き込みエラー、ブラウザがクラッシュしたりパッケージの更新ができなくなるといった症状が発生しました。
DRAM-less SSD かどうか調べる
以下のコマンドでメモリコントローラーにDRAMが搭載されているのか調べます。
$ lspci | grep SSD
実行結果
01:00.0 Non-Volatile memory controller: MAXIO Technology (Hangzhou) Ltd. NVMe SSD Controller MAP1202 (DRAM-less) (rev 01)
このSSDは SPD SP300-512GNV3 というモデルです。
ランダム書き込みがとんでもなく遅かったので嫌な予感はしたのですが、見事に DRAM非搭載モデルを買わされてしまいました。
スリープ・復帰の際にクラッシュする原因を突き止める
念の為、グラフィックボードが悪さをしていないか調べます。
$ dmesg | grep -i amdgpu
GPU関係はスリープから正常に復帰していました。しかし以下のように I/O エラーを示すエラー分が見つかり、やはり SSD が不安定だったことが判明しました。
[ 725.897659] nvme nvme0: Ignoring bogus Namespace Identifiers:
SSD の認識が数ミリ秒遅れてしまうとよく出る警告です。システムが SSD を見失ってファイルシステムを保護するために Read-only(読み取り専用)に切り替えてしまうため、クラッシュが起こります。
NVMe の電力管理を緩める
SSD の復帰が不安定な場合、カーネルパラメータに以下を追加すると劇的に安定することがあります。
ブートオプションに以下の一文を追記します。 SSD の深いスリープを制限し、応答速度を上げる設定です。
また以下のようなエラーの対処にも有効です。
Error occured: nvme0: failed to set apst feature (2)
GRUB の場合
ブートローダーをGRUBに設定している場合は以下の文字列をコマンドの末尾に追加します。
- 設定ファイルを開く
$ sudoedit /etc/default/grub GRUB_CMDLINE_LINUX_DEFAULTの項目に以下のパラメーターを追記nvme_core.default_ps_max_latency_us=0- GRUBの設定ファイルを生成
$ sudo grub-mkconifg -o /boot/grub/grub.cfg - 再起動
Limine の場合
- 設定ファイルを開く
$sudoedit /boot/limine.conf
※パスが違う場合はfind /boot -name "limine.conf"で探してみてください。 cmdline行に以下のようにパラメータを追記します。Arch Linux
protocol: linux path: boot():/vmlinuz-linux # ↓ この行の末尾に追記
cmdline: root=UUID=... rw nvme_core.default_ps_max_latency_us=0
module_path: boot():/initramfs-linux.img- 再起動
Limine の場合、GRUB と違って mkconfig のような再生成コマンドは不要です。 ファイルを書き換えるだけで、次回の起動から反映されます。
設定が反映されたか確認する
再起動後、正しくパラメータがカーネルに伝わっているか確認しましょう。
$ cat /proc/cmdline
出力の中に「nvme_core.default_ps_max_latency_us=0」 が含まれていれば成功です。
終 わ り


コメント