— 이강우 2025/11/26 11:07
Plexmediaserver를 가상머신(VM)으로 운영시 하드웨어 트랜스코딩을 위해 GPU Passthrough를 이용할때 Plex가 정상적으로 GPU를 이용하지 않고 CPU를 이용해 트랜스코딩하는 경우가 있다. 이런경우 해결방법을 아래에 설명한다.
GPU Passthrough방법은 다른 문서를 참고하고 이 문서는 이미 GPU Passthrough를 정상적으로 완료했다는 가정하게 설명한다.
먼저 Plex 서버에서 아래와 같이 PCI 장치를 조회해보면
root@plex:~# lspci -nnD 0000:00:01.0 VGA compatible controller [0300]: Red Hat, Inc. Virtio 1.0 GPU [1af4:1050] (rev 01) .. 생략 .. 0000:08:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Cezanne [Radeon Vega Series / Radeon Vega Mobile Series] [1002:1638] (rev c8)
위의 예는 KVM 가상화의 경우이고 Proxmox같은 가상화에서 마찬가지인데 기본적으로 아래와 같이 2개의 VGA장치가 보이게 된다.
보통 이런경우 plex의 대시보드 트랜스코드 메뉴에서 보면
위와같이 GPU Passthrough 된 장치를 선택하기만 하면 해당 장치로 트랜스코딩이 되어야 정상이다.
위에 Unknown이라고 되어있는 장치가 바로 내장VGA 인것이다.
정상적으로 HW트랜스코딩이 되면 대시보드에서
위 그림과 같이 트랜스코드 (hw) 라고 나온다. 만약 뒤에 (hw)라는 표시가 없다면 그것은 GPU를 이용하지 않고 CPU를 이용하여 트랜스코딩을 하고 있다는 것이고 그럴경우 대시보드에서 CPU 사용률이 엄청 높게 나오게 될것이다.
아무튼 트랜스코더설정에서 하드웨어 트랜스코딩 장치를 정상적으로 GPU로 선택하였다면 plex서비스를 재기동해주도록 한다.
재기동하지 않으면 적용되지 않는다.
만약 패스스루된 GPU를 트랜스코딩 장치로 선택했음에도 재기동이후에도 GPU를 사용하지 않고 CPU로 트랜스코딩이 이루어진다면 강제적으로 GPU를 이용하도록 설정을 변경해야 한다.
plexmediaserver에 강제적으로 사용할 장치를 지정해주는 방법은 아래와 같다.
보통 GPU장치는 /dev/dri/renderDXXX 와 같이 보이게 되는데 일반적으로 renderD128은 기본 VGA장치를 말한다.
그렇다면 패스스루된 GPU는 renderD129번으로 나올것이다. 이 장치를 사용하도록 설정하면 된다.
root@plex:~# systemctl edit plexmediaserver.service
위 명령어를 사용하여 서비스시작 스크립트 내용을 수정한다.
### Editing /etc/systemd/system/plexmediaserver.service.d/override.conf ### Anything between here and the comment below will become the contents of the drop-in file [Service] Environment="LIBVA_DRIVER_NAME=radeonsi" Environment="CreateRenderAccelerationDevice=/dev/dri/renderD129" ### Edits below this comment will be discarded <-- !!!! 반드시 작성할때 이줄보다 위쪽에 넣어야 한다. ### /usr/lib/systemd/system/plexmediaserver.service # # DO NOT EDIT THIS FILE DIRECTLY!
위와같이 적용하고 plex 를 재시작해주면 적용된다.