Nvidia Optimus란 기술은 노트북과 같은 모바일 기기에서 배터리를 효율적으로 쓰기 위해 만들어진 기술입니다.
인터넷같이 가벼운 작업은 성능낮은 내장 그래픽으로 돌리고 게임같은 그래픽카드 팍팍 돌리는 프로그램에서는 자사의 Nvidia그래픽카드를 이용해 돌리는 기술입니다.
이렇게 하면 필요할때만 고성능을 요하게 되고 꽤나 이상적인 노트북 환경이 됩니다만...
현실은 그리 녹록치 않았습니다.
윈도우에서도 옵티머스 기술로 인해 버벅임이 심해졌다는 평이 잦고 MS, 인텔, Nvidia 어느누구 하나 손발이 맞지 않는 모습이 보이면서 진짜 고성능을 요하는 사람은 옵티머스가 적용되지 않은 노트북을 찾습니다.
문제는...리눅스에서도 만만치 않은 문제를 일으킨다는 겁니다. 불행인지 다행인지 근 10년이 넘는 기간이 지나면서 많이 해결되어 왔지만 리눅스에서의 옵티머스는 그냥 기본옵션이 Performance모드 즉, 윈도에서 고성능전용 모드가 기본값입니다. 얘네도 실제 옵티머스 동작이 그렇게 썩 좋지 않다는 것을 알고 있는 겁니다.
그리고 이 옵티머스 동작이 바로 리누즈 토발즈 형님이 Nvidia에게 뻑유!!를 날리게 된 결정적인 이유였습니다.
https://www.phoronix.com/scan.php?page=news_item&px=MTEyMTc
정확히 말하면 누군가가 리눅스에서 옵티머스가 고통스럽다고 질문했고 이에 대한 토발즈의 답변이 바로 이거였습니다.
그런데 또 생각해보면 Nvidia만한 안정적인 드라이버를 만드는 곳도 드물다는걸 생각해보면...
어쨌건 이런 상황을 보던 캐노니컬도 눈뜨고 보고 있지만은 않았고 Prime이라는 기술을 만들어냅니다. (둘이 합치면 옵티머스 프라임 - 트랜스포머에 나오는 그 로봇이지요.) 일반 커뮤니티에서는 VirtualGL기술을 사용한 Bumblebee (네, 마찬가지로 트랜스포머에 나오는 범블비 맞습니다.)라는 것으로 대체 했습니다.
지금은 Bumblebee는 사실상 도태된 상황이고 Nvidia드라이버를 설치하면 PRIME을 기본적으로 사용하는데 기본 모드가 Performance 모드입니다. 사실상 옵티머스 동작이 아닙니다. 그냥 모든 순간 Nvidia카드 가속입니다.
nvidia-config을 실행해서 PRIME Profile을 보면 3가지 모드가 있는데 Intel은 비싼 노트북 사서 돌릴 사람은 아무도 없을 것 같고 Nvidia On-Demand와 Nvidia(Performance Mode) 둘중 하나가 가장 이상적인 환경인 것이지요.
그중 가장 이상적인 환경은 Nvidia On-Demand입니다만... Vulkan이나 OpenGL환경이 들어가면 자연스럽게 Nvidia카드로 가속을 하는 모드입니다.
그런데...
윈도우때도 그렇지만 이게 자연스럽게 안 넘어갑니다.
윈도우도 https://coolenjoy.net/bbs/37/143437?sca=%EA%B7%B8%EB%9E%98%ED%94%BD%EC%B9%B4%EB%93%9C&page=5
이런일이 비일비재 하는데 리눅스라고 정상적일리가...
노트북을 위해 On-Demand모드로 만들고 Blender를 실행해보니..
Xorg만 가속이 되고 Blender는 내장으로 돌아가는 모습이 보입니다.
Nvidia카드 사용량을 보는건 nvidia-smi를 실행해보면 알 수 있습니다.
Blender쯤 되면 알아서 넘어가야하는거 아닌가 싶은데 nvidia-config에도 무언가 프로파일 설정을 해서 넘기는게 있겠거니 했는데..
뭔가 되게 복잡합니다.procname을 적고 그에 따라 프로파일을 맞춰서 돌아가게 한다는건 좋은 생각인데 그래픽카드 쓰는 프로그램이 어디 한둘이어야죠. 그냥 메뉴에 붙은 바로가기를 수정해서 스크립트로 처리하면 안 될까 싶더군요. 예전에 Bumblebee때는 opti-run이라는 것으로 처리했었는데 이런 것처럼 말이죠.
https://askubuntu.com/questions/1237658/nvidia-on-demand-run-specific-applications-on-dgpu
있네요...
export 명령을 사용해서 PRIME설정을 그때만 바꾸는 방식입니다. 전역 설정이 아니라 그 세션에서만 돌아가니까 바로가기 명령에 저걸 새겨넣기만 해도 충분합니다.
다만 명령줄이 조금 깁니다.
그래서...
스크립트를 하나 만들었습니다. nvidia-run 이라는 스크립트인데 위 첨부파일을 다운로드 받아 압축을 풀어서 나온 스크립트를 /bin 혹은 /usr/bin에 넣어두고 NVidia On-Demand 상태에서 고성능이 필요할때마다 opti-run때처럼
nvidia-run 사용할 프로그램
이런식으로 사용하면 됩니다.
예를 들면..
스팀을 Nvidia 카드 없이 그냥 실행하면
이렇게 nvidia-smi에 아무것도 안 뜨지만
nvidia-run steam 이라고 실행하면
이렇게 뜹니다. 즉, Nvidia카드를 쓰는 것이지요.
이렇게 고성능이 필요한 프로그램이 있다면 메뉴편집기를 사용해서
이렇게 명령부분 앞에 nvidia-run 을 적는 것으로 고성능모드를 쓰게 됩니다. PlayonLinux나 Steam 같이 게임같이 고성능을 요구할 경우에는 nvidia-run을 붙여주면 끝이 납니다. (딱 opti-run 사용방법 그대로라고 생각하면 됩니다.)
어차피 명령줄로 실행하는 경우는 GUI에선 드무니까 이런식으로 쓸 수 있다면 엄청 편리하겠지요! 귀찮기는 하지만 이게 진짜 Optimus 기능이 아닐까 싶습니다.
P.S 사실 이렇게 쓰게된 계기가 가상머신에서 GPU가속쪽에 문제가 생겨서 보니 옵티머스 문제였고 가상머신에서 옵티머스를 끄니까 아주 잘 돌아가더군요. 그렇다고 아주 끄니 3D가 너무 느리고요. 중간인 On-Demand를 켜고 이런식으로 쓰니까 시스템이 상당히 안정적이게 되어서 그냥 이렇게 쓰기로 했습니다.
'우분투 분투기' 카테고리의 다른 글
리눅스에서 실행시 삽질이 필요한 스팀 게임 (0) | 2022.06.27 |
---|---|
안드로이드 앱플레이어가 리눅스에는 없나요? (4) | 2021.11.13 |
VirtualBox CPU교체후에 저장된 시스템 불러오기 실패 (0) | 2021.10.27 |
Wine으로 설치한 프로그램에서 한글이 입력이 두번 된다면 (0) | 2021.09.08 |
VRoid Studio를 우분투에서 구동하기 (0) | 2020.09.21 |