실패한 amdgpu 커널 모듈을 다시 시작하는 방법

실패한 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.

질문: 시스템을 다시 시작하지 않고 모듈을 다시 로드할 수 있는 합리적인 방법이 있습니까? 아니면 내 동영상을 다시 가져올 수 있는 더 좋은 방법이 있나요?

답변1

@Chris Stryczynski가 말했듯 sudo cat /sys/kernel/debug/dri/N/amdgpu_gpu_recover이 이것이 amdgpu 커널 모듈을 다시 로드하는 올바른 방법이거나 amdgpu.gpu_recovery=1커널 매개변수로 시스템을 부팅하여 충돌 시 자동으로 재설정할 수 있습니다.

그러나 디스플레이 서버(Xorg 또는 Wayland)는 그래픽 스택을 다시 초기화해야 하는데 데스크탑 환경에서는 이를 수행할 수 없기 때문에 이러한 옵션은 덜 유용합니다. (아직 구현되지 않았습니다.)

gpu_recovery 커널 매개변수를 사용하면 작업을 저장한 다음 표시되지 않더라도 재부팅할 수 있습니다.

답변2

https://github.com/RadeonOpenCompute/ROCK-Kernel-Driver/issues/11#issuecomment-450696825

이러한 재설정이 자동으로 시도되는 것을 원하지 않거나 잠금이 감지되지 않으면 gpu_recovery 매개변수를 설정하지 않은 경우에도 debugfs 메커니즘을 사용하여 수동 GPU 재설정을 수행할 수 있어야 합니다. 이렇게 하려면 (루트로) /sys/kernel/debug/dri/N/amdgpu_gpu_recover를 읽으십시오. 이 예에서 N은 DRI 하위 시스템에서 재설정하려는 GPU의 번호입니다.


이것은 나에게 효과가 없었습니다...하지만 어쨌든 게시해야겠다고 생각했습니다.

관련 정보