LoginSignup
0
0

More than 1 year has passed since last update.

Linux環境下でnvidiaのGPUで運用すると, サスペンドからの復帰に失敗するケースへの対応

Last updated at Posted at 2023-03-27

限られた御仁へのTIPSかもですが, Linux環境でnvidiaのグラボを使っていて, かつサスペンド/ハイバネートを利用する運用をしていると, サスペンドからの復帰時にブラックスクリーンになって再開できないことがあります.

そうなってしまった場合, gdmを再起動することで復旧してきました.

sudo systemctl restart gdm

サスペンド復帰後に, OpenCLまたはCUDAを使うアプリケーションがちゃんと動かなくなることもあり, その場合はnvidia関連のカーネルモジュールを読み込み直したりしてました.

sudo bash -c "modprobe -r nvidia_uvm && modprobe nvidia_uvm"

次の設定を行うことでこの問題を回避できるようになりました.

次のカーネルモジュール向けのパラメータを追加.

/etc/modprobe.d/nvidia.conf
options nvidia NVreg_PreserveVideoMemoryAllocations=1 NVreg_TemporaryFilePath=/var/tmp

サービス nvidia-suspendとnvidia-hibernateを有効化 (archlinuxの場合は, nvidia-utils パッケージに含まれる).

sudo systemctl enable nvidia-hibernate.service && $ sudo systemctl enable nvidia-suspend.service

デフォルトでは、システムのサスペンドと復帰時に NVIDIA の Linux ドライバーは必須のビデオメモリの割り当てのみを保存し復元します。NVIDIA 曰く ([7]、nvidia-utils パッケージの /usr/share/doc/nvidia/html/powermanagement.html): 結果として生じるビデオメモリの内容の消失は、ユーザスペースの NVIDIA ドライバーや一部のアプリケーションによって部分的に補われます。しかし、電源管理サイクルの終了時にレンダリングの破損やアプリケーションのクラッシュなどの機能不全が発生する可能性があります。

デフォルトでは、ビデオメモリの内容は (tmpfs である) /tmp に保存されます。NVIDIA は、最高のパフォーマンスを得るために他のファイルシステムを使うことを推奨しています。また、/tmp のサイズがメモリの容量に対して不十分である場合も、他のファイルシステムを使う必要があります: NVreg_TemporaryFilePath オプションで別の場所を指定してください (例えば、NVreg_TemporaryFilePath=/var/tmp)。

サスペンド時のVRAMのデータを退避することに失敗していた, ということが原因だったのかと思います (ログからそれを読み取れず, 長らく謎だったのですが).

なお, ArchLinux環境下の話で, 標準パッケージの nvidia のインストールで起きていた問題です.
ディストリビューションによっては, このあたりをちゃんとチューニングした設定が入っているかも?

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0