본문 바로가기

컴퓨터

[Arch Linux] NVIDIA 절전모드 해제 후 그래픽 깨짐 해결

Arch Linux (아치 리눅스)에서 절전 모드 한 뒤에 키보드나 마우스를 눌러 풀게 되면 화면이 무지개 빛이 되면서 그래픽이 왕창 깨져 재부팅 전까지는 사용이 불가능한 현상이 있었다.

dmesg 확인 결과 NVIDIA 모듈 쪽에서 Graphics Exception 이라는 내용으로 오류를 뿜어대고 있었고, 원인을 검색해보았다.

https://wiki.archlinux.org/title/NVIDIA/Tips_and_tricks#Preserve_video_memory_after_suspend

https://download.nvidia.com/XFree86/Linux-x86_64/460.32.03/README/powermanagement.html

 

Chapter 21. Configuring Power Management Support

The NVIDIA Linux driver includes support for the suspend (suspend-to-RAM) and hibernate (suspend-to-disk) system power management operations, such as ACPI S3 and S4 on the x86_64 platform. When the system suspends or hibernates, the NVIDIA kernel drivers p

download.nvidia.com

 

NVIDIA/Tips and tricks - ArchWiki

Fixing terminal resolution Transitioning from nouveau may cause your startup terminal to display at a lower resolution. For GRUB, see GRUB/Tips and tricks#Setting the framebuffer resolution for details. [1] [2] For systemd-boot, set console-mode in esp/EFI

wiki.archlinux.org

NVIDIA 모듈은 절전모드 진입 시 그래픽카드 메모리(VRAM)의 내용을 /tmp에 일시적으로 저장하게 되는데, VRAM의 전체 내용을 저장하는 게 아니라, 일부분(핵심적인 부분)만 저장하기 때문에 나중에 절전모드를 해제했을 때 일부 프로그램을 제외하고 복원하게 되는데, 이때 렌더링이 깨지는 오류가 발생할 수 있다고 한다.

위에 나와있는 해결 방법은, 절전 모드 시 일부분만 아닌 VRAM 전체 내용을 디스크에 저장할 수 있도록 설정하는 것이다.

vim /etc/modprobe.d/nvidia-power-management.conf

해당 파일을 수정하여 nvidia 커널 모듈 로드 시 VRAM 전체 저장하도록 하고, 저장 위치를 지정하는 옵션을 넣어준다.

options nvidia NVreg_PreserveVideoMemoryAllocations=1 NVreg_TemporaryFilePath=/tmp-nvidia

VRAM 을 전체 저장하도록 설정하고 /tmp-nvidia 에 그 내용들을 전체 저장한다. 라는 옵션을 넣는다.

/tmp-nvidia는 굳이 지정하지 않아도 될 수 있지만, VRAM 용량에 따라서 전체 저장하면 용량에 따라 /tmp 의 용량이 부족할 수 있어, 이것을 디스크 용량이 널널한 특정 지점에(보통 root 파티션) 저장하도록 지정하는 것이다.

/tmp 는 tmpfs 라는 타입으로 별도로 마운트 되는데, 이게 내 PC 기준에서는 3.2G 밖에 되지 않고, 그래픽카드는 8GB 의 VRAM 을 가지고 있으므로, 전체 저장이 불가능하다. 그래서 나는 /tmp-nvidia 라는 곳에 저장하도록 지정하였다.

그리고 저장 후 나간다. 이때 그냥 재부팅 하고나면 NVIDIA 모듈로 인해 재부팅이 되지 않는데, 아래의 서비스들을 enable (활성화) 시켜줘야 한다.

systemctl enable nvidia-suspend
systemctl enable nvidia-hibernate

원래 /proc/driver/nvidia/suspend/proc/driver/nvidia/hibernate 에 직접 suspend 나 hibernate 을 주입해줘야하는데, nvidia-utils 패키지에서 기본 제공하는 위의 서비스들을 통해 절전 모드 진입 시 자동으로 주입하도록 도와준다.

이후 재부팅 하고 나면 정상적으로 절전 모드 설정/해제가 가능하다.