ビデオカードがときどきクラッシュします。それはかなり迷惑ですが、私はそれと一緒に住んでいます-通常、私はSudo systemctl restart lightdm.service
、または必要に応じてシステム全体を再起動します。
この特定のインスタンスでは、systemctl
呼び出しがハングし、マシン上で長時間実行されているジョブがあるため、再起動したくないになります。
クラッシュはdmesg
としてログインされます
[944520.212254] Call Trace:
[944520.212256] [<ffffffff818384d5>] schedule+0x35/0x80
[944520.212257] [<ffffffff8183b625>] schedule_timeout+0x1b5/0x270
[944520.212280] [<ffffffffc0235244>] ? dce_v6_0_program_watermarks+0x514/0x720 [amdgpu]
[944520.212282] [<ffffffffc0196d2c>] kcl_fence_default_wait+0x1cc/0x260 [amdkcl]
[944520.212287] [<ffffffff815b4f50>] ? fence_free+0x20/0x20
明らかにamdgpu
モジュールがクラッシュしました。再起動したいので試しました
Sudo modprobe -r amdgpu
modprobe: FATAL: Module amdgpu is in use.
そして、誰がamdgpu
を使用しているかを調べようとすると、
lsmod | grep amdgpu
amdgpu 2129920 7
amdttm 102400 1 amdgpu
amdkcl 32768 1 amdgpu
i2c_algo_bit 16384 1 amdgpu
drm_kms_helper 155648 1 amdgpu
drm 364544 10 drm_kms_helper,amdgpu,amdkcl,amdttm
基本的に、モジュールを使用する7つの「もの」があり、それらを見つけてamdgpu
モジュールを削除する方法がわかりません。
質問:システムを再起動せずにモジュールをリロードするための合理的な方法はありますか?または私のビデオを取り戻すためのより良い方法はありますか?
@Chris Stryczynskiが言うように、Sudo cat /sys/kernel/debug/dri/N/amdgpu_gpu_recover
はamdgpuカーネルモジュールをリロードする正しい方法です。または、amdgpu.gpu_recovery=1
カーネルパラメータを使用してシステムを起動し、クラッシュ時に自動的にリセットできます。
しかし、ディスプレイサーバー(Xorg org Wayland)がグラフィックスタックを再初期化する必要があるため、これらのオプションはそれほど使用できません。デスクトップ環境はそれを実行できません(まだ実装されていません)。
Gpu_recoveryカーネルパラメータを使用することで、表示されていない場合でも作業を保存し、再起動できます。
https://github.com/RadeonOpenCompute/ROCK-Kernel-Driver/issues/11#issuecomment-450696825
これらのリセットを自動的に試行したくない場合、またはロックアップが検出されない場合は、gpu_recoveryパラメーターを設定していなくても、debugfsメカニズムを使用して手動でGPUリセットを実行できるはずです。これを行うには、(rootとして)/ sys/kernel/debug/dri/N/amdgpu_gpu_recoverを読み取ります。この場合のNは、DRIサブシステムでリセットするGPUの数です。
これは私にはうまくいきませんでした...しかし、それでも私はそれをそれでも投稿したいと思った。