nvidia optimus 기술은 Laptop에서 내장 그래픽(주로 intel계열)과 외장 gpu를 선택적으로 사용하여 그래픽 요구사양이 높지 않은 작업을 할때는 내장 그래픽만 사용하여 배터리 전원을 절약하게 해주는 기술이다.

그런데 이 기술이 nvidia의 고유한 기술이다 보니 윈도우 같이 최적화가 잘된 OS를 제외하고 ubuntu 등 linux에서 드라이버가 제대로 선택되지 않아 그래픽 가속이 안되거나 화면 렌더링이 깨지는 현상이 발생한다. 주요 현상은 다음과 같다.

 - 터미널에 글자를 입력할때 딜레이가 생기는 경우

 - GUI가 깨지는 현상

 - GUI가 늦게 그려지는 현상

 

특히 경량화된 노트북에서 많이 발생하는데 이 문제가 발생하면 원인을 파악하기도 어렵고 드라이버를 아무리 재설치해봐도 딱히 개선되거나 하지 않는다. 

여기서는 Lenovo Yoga slim 7 에 intel i5 cpu가 탑재되고 nvidia MX350 그래픽이 설치된 노트북에 우분투 20.04가 설치된 환경으로 작성하였다.

 

먼저 ubuntu 20.04를 iso 이미지를 통해 설치를 진행한다.

처음에는 당연히 내장 그래픽만 사용하므로 큰 문제가 없다. 

하지만 nvidia 그래픽 드라이버를 설치하면서 문제가 발생하기 시작한다.

nvidia 그래픽 카드는 apt 방식으로 설치하기 위해 다음과 같이 진행한다.

ppa 등록하기

$ sudo add-apt-repository ppa:graphics-drivers/ppa

nvidia driver 470 설치

$ sudo apt install nvidia-driver-470

 

또는 시작 버튼 -> Software & Update 실행 

Additional Drivers 탭에서 nvidia-driver-470 을 선택

드라이버 설치후 재부팅 진행

터미널에 nvidia-smi를 입력하면 다음과 같은 화면이 나타난다.

하지만 이 노트북의 경우 GPU가 3D 가속만을 담당하고 VGA 가속을 지원하지 않기때문에 아래와 같이 입력하면 VGA는 여전히 Intel 그래픽이 담당하고 있다.

$ lspci | egrep -i "vga|display|3d"
00:02.0 VGA compatible controller: Intel Corporation Iris Plus Graphics G1 (Ice Lake) (rev 07)
30:00.0 3D controller: NVIDIA Corporation GP107M [GeForce MX350] (rev a1)

 

이러한 경우 우분투의 GUI환경을 담당하는 xorg 서버가 VGA 가속도 GPU가 담당하는 것으로 착각하고 intel 내장 그래픽의 그래픽 가속이 적용되지 않고 gpu에 맡겨버리는 현상이 발생하여 그래픽 관련한 여러가지 딜레이와, 답답한 문제들이 발생한다.

 

이 문제의 원인은 우분투의 PSR이라는 기능 때문이다.

다음 버그 리포트에 해당 문제에 대한 논의가 있고 해결책으로 PSR을 끄는 방법을 제시하고 있다.

https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1937072 

 

Bug #1937072 “[Lenovo Yoga Slim 7 14IIL05] PSR causes incomplete...” : Bugs : linux package : Ubuntu

In every 6/10 boot my ubuntu failed to start stuck on blank screen. Sometime touchpad stop working and unable to change my brightness after installation at first all feature are perfectly fine except screen glitch.Screen performance is laggy. ProblemType:

bugs.launchpad.net

해결 방법은 /etc/default/grub 을 에디터로 열고 GRUB_CMDLINE_LINUX_DEFAULT 항목을 찾아서 "i915.enable_psr=0" 으로 설정하는 것이다.

GRUB_CMDLINE_LINUX_DEFAULT="i915.enable_psr=0"

만약 기존에 GRUB_CMDLINE_LINUX_DEFAULT 항목이 있으면 앞에 # 를 넣어서 comment 처리한다.

이렇게 저장한 다음 다음을 수행하고 재부팅한다.

$ sudo update-grub
$ sudo reboot

재부팅 후 PSR이 disable되었는지 확인하기 위해 다음을 입력한다.

$ sudo cat /sys/module/i915/parameters/enable_psr

이 값이 "0" 이 되어야한다.

만약 이 값이 "1" 또는 "-1"이면 적용되지 않은것이다.

 

해결 방법은 부팅 중 xorg의 설정을 담당하는 /etc/X11/ 의 xorg.conf 파일을 생성하여 VGA 가속을 내장 그래픽이 수행하도록 명시하는 방법인데 /etc/X11/xorg.conf 파일을 만들고 그 안에 다음과 같은 내용을 추가한다.

Section "ServerLayout"
    Identifier "layout"
    Screen 0 "intel"
    Screen 1 "nvidia"
EndSection

Section "Device"
    Identifier "intel"
    Driver "intel"
    BusID "PCI:0@0:2:0"
    Option "AccelMethod" "sna"
    Option      "DRI"   "1"
EndSection

Section "Screen"
    Identifier "intel"
    Device "intel"
EndSection

Section "Device"
    Identifier "nvidia"
    Driver "nvidia"
    BusID "PCI:1@0:0:0"
    Option "ConstrainCursor" "off"
EndSection

Section "Screen"
    Identifier "nvidia"
    Device "nvidia"
    Option "AllowEmptyInitialConfiguration" "on"
    Option "IgnoreDisplayDevices" "CRT"
EndSection

이렇게 저장하고 재부팅하면 정상적으로 그래픽 가속이 내장 그래픽에 의해 수행됨을 확인할 수 있다.

만약 이렇게 했는데 안된다면 다음을 입력하여 xorg-intel 패키지를 설치한다.

$ sudo apt-get install xserver-xorg-video-intel

 

+ Recent posts