web-dev-qa-db-ja.com

失敗したamdgpuカーネルモジュールを再起動する方法

ビデオカードがときどきクラッシュします。それはかなり迷惑ですが、私はそれと一緒に住んでいます-通常、私は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モジュールを削除する方法がわかりません。

質問:システムを再起動せずにモジュールをリロードするための合理的な方法はありますか?または私のビデオを取り戻すためのより良い方法はありますか?

7

@Chris Stryczynskiが言うように、Sudo cat /sys/kernel/debug/dri/N/amdgpu_gpu_recoverはamdgpuカーネルモジュールをリロードする正しい方法です。または、amdgpu.gpu_recovery=1カーネルパラメータを使用してシステムを起動し、クラッシュ時に自動的にリセットできます。

しかし、ディスプレイサーバー(Xorg org Wayland)がグラフィックスタックを再初期化する必要があるため、これらのオプションはそれほど使用できません。デスクトップ環境はそれを実行できません(まだ実装されていません)。

Gpu_recoveryカーネルパラメータを使用することで、表示されていない場合でも作業を保存し、再起動できます。

1
Dávid Bíró

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の数です。


これは私にはうまくいきませんでした...しかし、それでも私はそれをそれでも投稿したいと思った。

0