
APU에서 GPU Passthrough?
AMD의 APU(내장 그래픽이 포함된 CPU)를 사용하는 환경에서 Proxmox를 통해 GPU Passthrough를 구현하는 것이 매우 까다로운 문제로 여겨져 왔습니다.
대부분의 APU 사용자들은 VM환경에서의 GPU Passthrough를 시도하였지만, 대게 실패하는 경우가 대부분이었고,
설령 성공하더라도 서버를 재부팅하면 설정이 풀린다거나 그전까진 재실행이 안되는 일회성에 그치는 한계가 있었습니다.
그렇기에 VM이 아닌 LXC에서만 Passthrough를 통해 jellyfin 내 트랜스코딩(Transcoding) 정도까지만 사용하는 정도였습니다.
하지만 드디어 VM에서도 이 문제를 해결할 수 있는 방법을 확인하게 되었고, 직접 테스트를 통해 가능성을 입증했습니다.
다른 사람들이 성공했다는 방식을 보고 따라 해본 결과 성공하지 못했고, 그런 분들의 글과 해외 커뮤니티의 글을 참고하여 여러 번 반복하고 바꾸며 시도하는 과정에서 성공하게 되었습니다.
이번 게시글에서는 제가 이런 경험한 과정을 바탕으로 설정 방법을 자세히 공유하고자 합니다.
이제 AMD APU 사용자들도 Proxmox 환경에서 안정적으로 GPU Passthrough를 활용할 수 있는 길이 열린 만큼, 아래 설정법을 참고해 보시기 바랍니다.
Passthrough란?
Passthrough(패스스루)는 가상화 환경에서 호스트 시스템(실제 서버/PC)의 하드웨어를 가상 머신(VM)에서 직접 사용할 수 있도록 하는 기술입니다.
✅ GPU Passthrough → 가상 머신이 물리적 GPU를 직접 사용 (예: Jellyfin 하드웨어 가속)
✅ USB Passthrough → USB 장치를 VM에서 직접 인식 (예: 키보드, 마우스, USB 저장장치)
✅ PCIe Passthrough → 특정 PCIe 장치를 VM에서 직접 사용 (예: 네트워크 카드, 캡처 카드)
상세 설명 고마워 ChatGpt
환경
- ASRock Deskmini X300 ( BIOS - 2.10 )/ AMD 5600G
- Proxmox 8.3.3 / VM - Windows 11 Pro
설정
1) BIOS 설정
- VT 활성화: BIOS에서 "SVM Mode" 를 "Enable"로 설정
- IOMMU 활성화: "IOMMU" 설정을 "AUTO" 를 "Enable"로 설정
- BIOS 설정 후 저장하고 재부팅
2) PVE 시스템 설정
(1) GRUB 부팅 파라미터 수정
Proxmox - 데이터센터 - pve - Shell 에서 파일을 수정합니다.
파일 수정 : /etc/default/grub

nano /etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT를 아래와 같이 수정합니다.
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt video=efifb:off,vesafb:off initcall_blacklist=sysfb_init pcie_acs_override=downstream,multifunction"
필수 항목
iommu=pt : IOMMU를 패스스루 모드로 설정
pcie_acs_override=downstream,multifunction : IOMMU 그룹 분리 패치
grub를 저장합니다.
update-grub
(2) 드라이버 블랙리스트 추가
blacklist amdgpu
blacklist snd_hda_intel
blacklist snd_hda_codec_hdmi

(3) VFIO 모듈 추가
파일 수정: /etc/modules
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

(4) 내장 GPU ID 확인 및 VFIO 바인딩
우선 GPU 장치 ID를 확인해야 합니다.
아래는 GPU 장치 ID 확인하는 명령어 입니다.
lspci -D -nnk | grep VGA
- 출력 예: 0000:03:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Cezanne [Radeon Vega Series / Radeon Vega Mobile Series] [1002:1638] (rev c9)
- 여기서 0000:03:00.0은 IOMMU 그룹, 1002:1638은 공급업체ID:장치 ID입니다.

#장치아이디 입력
options vfio-pci ids=1002:1638
options vfio-pci disable_idle_d3=1
D3 상태 : 저전력 모드로 전환되는 상태

업데이트 및 재부팅
update-initramfs -u -k all
reboot

3) VBIOS 추출
VBIOS를 추출해 파일을 매핑을 시켜줘야 합니다.
(1) 바이오스 버전 확인
dmidecode -t bios
BIOS Information
Vendor: American Megatrends International, LLC.
Version: P1.80F
Release Date: 05/09/2023
Address: 0xF0000
Runtime Size: 64 kB
ROM Size: 16 MB
Characteristics:
PCI is supported
BIOS is upgradeable
BIOS shadowing is allowed
Boot from CD is supported
Selectable boot is supported
BIOS ROM is socketed
EDD is supported
Japanese floppy for NEC 9800 1.2 MB is supported (int 13h)
Japanese floppy for Toshiba 1.2 MB is supported (int 13h)
5.25"/360 kB floppy services are supported (int 13h)
5.25"/1.2 MB floppy services are supported (int 13h)
3.5"/720 kB floppy services are supported (int 13h)
3.5"/2.88 MB floppy services are supported (int 13h)
Print screen service is supported (int 5h)
8042 keyboard services are supported (int 9h)
Serial services are supported (int 14h)
Printer services are supported (int 17h)
CGA/mono video services are supported (int 10h)
USB legacy is supported
BIOS boot specification is supported
Targeted content distribution is supported
UEFI is supported
BIOS Revision: 5.17
1.80F 인걸 확인했습니다.
공식홈페이지를 접속해 보니 어느새 2.10까지 나와있는 걸 확인하여, 바이오스를 해당 버전으로 업데이트 진행하였습니다.
바이오스 업데이트 진행 방법은 아래 X600 BIOS 설정 포스트를 참고하여 진행하시기 바랍니다.
X600도 X300과 바이오스 업데이트 방식은 동일합니다.
https://god-logger.tistory.com/184
ASRock Desk mini X600 바이오스 업데이트부터 설정까지 ( 내돈내산 )
데스크 미니 ?데스크 미니(DeskMini)는 ASRock이 선보인 소형 PC 플랫폼으로, Mini-STX(147mm x 140mm) 메인보드를 기반으로 컴팩트한 데스크톱을 구성합니다. ASRock에서 출시한 인기있는 미니PC 베어본 입니
god-logger.tistory.com
(2) 메인보드 BIOS 다운로드
ASRock DeskMini X300 Series
AMD AM4 소켓 CPU, - Cezanne, Renoir, Picasso, Raven Ridge, 최대 65W, - 최대 높이 46mm 이하의 CPU 쿨러 지원<br />X300으로 오버클러킹 옵션 지원<br />고속 DDR4-3200MHz 메모리<br />듀얼 Ultra M.2 (NVMe), - M2_1 M.2 (2280) – P
www.asrock.com
(3) UBU 툴 다운로드
- UBU(Uefi Bios Updater) 툴을 다운로드하여 BIOS에서 VBIOS를 추출합니다.
- 개발자 Sonix 의 경우 개별 홈페이지가 없어, 그의 저장소 (mega) 링크로 공유합니다.
https://mega.nz/folder/lLg2GLrA#SnZZd0WjHkULFHg7FESm8g
File folder on MEGA
mega.nz
아쉽게도 UBU 툴은 윈도우에서만 진행이 가능합니다. BAT파일..
(4) VBIOS 추출 후 Proxmox 서버로 이동
(2) 번에서 다운로드한 BIOS 압축파일을 압축 해제한 후, UBU 폴더 안에 넣어준 후 UBU.bat 파일을 실행합니다.

프로그램이 BIOS를 전체적으로 확인 후, Video OnBoard 부분이 2번이므로 2번을 초이스 합니다.

X - Extracted를 선택해 추출을 시도합니다.

아래와 같이 파일이 복사되었다는 메시지와 함께 Extracted 폴더가 하나 생기고 그 안에 GOP와 VBIOS 폴더가 들어있습니다.

이후 vbios_1638.dat 파일을 찾아 이를 proxmox 서버 내부 /usr/share/kvm 폴더에 업로드합니다.
다시 정리해 보면 아래와 같습니다.
- BIOS 파일을 UBU 폴더로 이동
- UBU 폴더에서 UBU.bat 실행
- 메뉴에서 순서대로:
- 2 (Video OnBoard) → X (Extracted) → 파일 복사 대기
- Extracted\VBIOS\017.010.000.030.000000 폴더에서 vbios_1638.dat 파일을 Proxmox 서버 내 /usr/share/kvm 으로 이동
5600G의 경우 세잔이므로 017.010.000.030.000000 폴더에서 vbios_1638.dat
8600G의 경우 피닉스이므로 022.012.000.027.000001 폴더에서 vbios_15BF.dat (단일파일로 나와서 아마 이 파일로 추측) (아직 테스트 안 해본 상태)
#폴더명은 미세하게 다를 수 있음
(5) AMDGopDriver.rom 파일 생성 후 Proxmox 폴더로 이동
https://github.com/tianocore/edk2-BaseTools-win32
GitHub - tianocore/edk2-BaseTools-win32: git-svn mirror of https://svn.code.sf.net/p/edk2-toolbinaries/code/trunk/Win32
git-svn mirror of https://svn.code.sf.net/p/edk2-toolbinaries/code/trunk/Win32 - tianocore/edk2-BaseTools-win32
github.com
프로그램을 다운로드한 후, 동일 폴더에 AMDGopDriver.efi 파일을 넣고, 아래 명령어를 통해 rom 파일을 생성합니다.
# 사용 예제 , 터미널에서 해당 명령어 입력
EfiRom.exe -f VendorId -i DeviceId -e AMDGopDriver.efi -o AMDGopDriver.rom
그런데 저희는 Vendor사 ID는 알아도 현재 DeviceID를 모릅니다.
Proxmox - pve - shell에서 아래의 명령어를 실행합니다.
lspci -nn | grep -e 'AMD/ATI'
root@pve:~# lspci -nn | grep -e 'AMD/ATI'
03:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Cezanne [Radeon Vega Series / Radeon Vega Mobile Series] [1002:1638] (rev c9)
03:00.1 Audio device [0403]: Advanced Micro Devices, Inc. [AMD/ATI] Renoir Radeon High Definition Audio Controller [1002:1637]
보이는 목록 중 Renoir Radeon High Definition Audio Controller [ 1002:1637 ]라고 뜨는 게 있습니다.
여기서 1002는 공급업체 ID이고 1637은 장치 ID인데, 아까 1636은 내장그래픽 쪽을 가리키는 장치였는데, 1637은 오디오를 나타내는 부분인걸 확인할 수 있습니다.
이번엔 그래픽이 아닌 오디오 쪽으로 매핑해야 합니다.
이제 DeviceID (장치 ID)를 알았으니 명령어를 완성시킨 후 실행해 봅시다.

EfiRom.exe -f 1002 -i 1637 -e AMDGopDriver.efi -o AMDGopDriver.rom
성공했습니다. 이제 변환된 AMDGopDriver.rom 파일도 PVE의 /usr/share/kvm 폴더에 이동시킵니다.
4) VM 설정
VM은 기본적으로 아래와 같이 세팅합니다.
여기서 PCI만 빼고 초기에 세팅을 미리 해둡니다.
제 경우는 아래와 같습니다.

꼭 위와 같을 필요는 없습니다. Windows 11이기에 BIOS는 SeaBIOS로는 불가하고 OVMF로만 설치가 가능함을 확인했습니다.
가능하면 Processors는 host로 지정해 줍니다.
이후 VM을 켠 후 윈도우11을 설치까지 진행합니다.
윈도우 설치와 함께 RDP 또는 원격제어할 수 있는 방안을 마련해 둡니다.
제 경우 VNC 보다는 최근에 포스팅한 rustdesk를 사용했습니다.
관련 내용은 아래 포스팅을 참고해 주세요
rustdesk란? https://god-logger.tistory.com/185
RustDesk: 강력한 오픈소스 원격 제어 도구의 모든 것
RustDesk란 무엇인가?RustDesk는 오픈소스 원격 데스크톱 소프트웨어로, 사용자가 다른 컴퓨터를 원격으로 제어할 수 있게 해줍니다.2021년에 처음 공개된 이 도구는 Rust 프로그래밍 언어로 작성되어
god-logger.tistory.com
rustdesk 릴레이 서버 구축기 - https://god-logger.tistory.com/186
RustDesk 릴레이 서버 구축 - 도커와 우분투로 나만의 원격 제어 환경 만들기
글을 읽기 전 RustDesk에 대해 알고 싶으신 분은 아래 링크를 통해 확인 가능합니다.https://god-logger.tistory.com/185 RustDesk: 강력한 오픈소스 원격 제어 도구의 모든 것RustDesk란 무엇인가?RustDesk는 오픈
god-logger.tistory.com
원격 제어 방안이 완료되었다면 아래와 같이 수정해 봅니다.
우선 VM 하드웨어 메뉴의 상단 [추가] 버튼을 통해 PCI 디바이스를 두 개 등록합니다.
하나는 dat파일, 하나는 rom파일을 등록하기 위함입니다.
제 경우 0000:03:00.0 은 그래픽, 0000:03:00.1은 그래픽오디오로 확인되었습니다.

우선 0000:03:00.0 (그래픽)을 등록합니다. (혹시 그래픽이 다르게 뜬다면 다른 걸 잡아주시면 됩니다.)
이때 꼭 메인 GPU와 Rom-Bar, PCI-Express를 체크해야 합니다.

마찬가지로 0000:03:00.1 도 진행해 줍니다. (혹시 오디오가 다르게 뜬다면 다른 걸 잡아주시면 됩니다.)
오디오는 다른 점이 메인 GPU를 제외한 나머지 ROM-Bar, PCI-Express만 체크합니다.

pve - Shell을 켠 후, 아래와 같이 파일을 편집해 줍니다.
편집 구간은 총 3곳입니다.
파일 수정: /etc/pve/qemu-server/{설정하고자 하는 VM 번호}.conf
# 추가 설정
cpu : ,hidden=1
hostpci0 : ,romfile=vbios_1638.dat,x-vga=1
hostpci1 : ,romfile=AMDGopDriver.rom


사진을 확인하여 [편집 후] 스크린샷 처럼 편집합니다.
PCI 디바이스가 0000:03:00.0 이 아닌 0000:03:00 으로만 표시된다면 꼭 0000:03:00.0 으로 수정해줍니다.
0000:03:00.1 Audio Controller 를 선택해 주고, ROM-Bar, PCI-Express까지 체크합니다.
이후에 pve-shell를 통해 nano /etc/pve/qemu-server/{설정하고자 하는 VM 번호}.conf 를 수정해 줍니다.
이로써 VM 세팅은 끝났습니다.
제 경우 VGA를 None으로 해주었는데, 우선 VirtIO-GPU로 잡아서 proxmox No Vnc를 통해 웹에서 확인도 가능합니다.
아래는 완성된 설정 예시입니다.

5) 확인


원격제어 주의
만약 RDP 만 사용한다면 상관없지만, rustdesk 또는 moonlight + sunshine 을 이용하는 경우, 물리적으로 hdmi 포트에 더미 hdmi를 꽂아주어야 합니다.
더미Hdmi를 꽂지 않는다면, 검은 화면 또는 하얀화면만 표현되는 걸 확인했습니다.
Reset 버그 ( Update 2025.03.01 )
VM 재시작시 정상 부팅이 안됩니다.
이는 APU reset bug로 유명합니다.
이를 해결하기 위해 아래와 같이 설정해봅니다.
우선 CMOS 설정부터 아래와 같이 설정합니다.
CMOS 설정
- 보안 -> Secure booting -> 안전부팅 -> Disabled
- 고급 -> PCI Configuration -> SR-IOV Support -> Enabled
- 고급 -> PCI Configuration -> Above 4G Decoding -> Enabled
- 고급 -> PCI Configuration -> Re-Size BAR Support -> 자동
pve - Shell 에서 아래 명령어들을 통해 설정을 진행합니다.
# 현 커널 확인
uname -r
# 커널 버전을 아래 명령어 {버전} 부분에 넣어 실행
apt install pve-headers-{버전}
예) apt install pve-headers-6.8.12-4-pve
# 빌드 도구 다운
apt install git dkms build-essential
# 빌드 수행
git clone https://github.com/gnif/vendor-reset.git
cd vendor-reset
dkms build vendor-reset/0.1.1 -k {버전}
예) dkms build vendor-reset/0.1.1 -k 6.8.12-4-pve
dkms install vendor-reset/0.1.1 -k {버전}
예) dkms install vendor-reset/0.1.1 -k 6.8.12-4-pve
# dkms 설치 유무 확인
dkms status
파일 수정 : /etc/modules
vendor-reset 추가
...
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
vendor-reset
# 설정 적용
update-initramfs -u
# 커널 모듈의 의존성 업데이트
depmod -a
# 모듈 수동 로드
modprobe vendor_reset
# 위 수동실행을 통해 잘 되는지 확인
모든 설정 완료 후 정상적으로 로드되는지 확인하기 위해 재부팅을 시도합니다.
# 모듈을 로드하기 위해 재부팅
reboot
절전 버그 ( Update 2025.03.01 )
절전모드로 넘어갈 경우 GPU 사용률이 100% ( == CPU 사용률)이 되는 현상이 있습니다.
꼭 SUSPEND 모드로 넘어가지 않도록 해주셔야 합니다.
다양한 방법이 있을 것 같긴 하지만, GPU에 전력을 계속적으로 어차피 사용하는 옵션을 하느니 그냥 비활성화 처리하고 필요하다면 Proxmox 에서 VM 자체를 일시정지하여 사용하는게 더 나을 듯 합니다.
마무리
X300을 홈서버로 사용하면서 전반적으로 만족해 왔지만, 한 가지 아쉬운 점이 있다면 APU에서의 그래픽 Passthrough 설정의 어려움이었습니다.
조금 손이 많이가는건 어쩔 수 없지만 그래도 드디어 그 아쉬움을 조금이나마 해소할 수 있게 되었네요.
사실 그래픽 자원이 필요한 곳은 현재로선 Jellyfin 정도뿐이어서 LXC로도 충분했지만, 나중에는 또 어떤 용도로 필요할지 모르긴 합니다.
기존엔 불가능했지만 가령 moonlight + sunshine 의 부드러움을 느끼는 좋은 기회가 생기기도 된거니까요.
그래서 이 문제가 해결된 것이 더 의미 있게 느껴집니다.
이전부터 X300의 iGPU, AMD 통합그래픽 CPU인 APU 에서는 GPU Passthrough 설정이 어렵다고 알려져 있었고, 성공률도 매우 낮다고 알려져 왔기에 그동안 홈 서버 환경에서 조차 역시 서버는 '인텔인가'라는 생각을 또다시 가졌었던게 사실입니다만, 이번 설정을 성공하면 그런 고정관념을 조금은 접게 되었습니다. ( 아주 조금요 ) ( 리셋 버그와 절전 버그 등으로 이건 뭐.. )
여러 번 시도하고 실패를 거듭한 끝에 마침내 성공했지만, 오히려 허탈한 기분도 드네요.
커뮤니티에서 성공 사례를 참고하며 똑같이 따라 했는데도 되지 않아 답답했었습니다. 한데 막상 성공하고 나니, 기존 사례들에 적힌 글들은 대부분 세세한 부분까지 설명하지 않아서 어려움을 겪었던 것임을 알게 되었습니다.
대표적인 예가 AMDGopDriver.rom 파일 설정을 들 수 있겠네요.
분명 지금도 저처럼 시행착오를 겪고 있는 분들이 있을 겁니다.
그런 분들을 위해 최대한 자세한 설명과 함께 이 과정을 정리해 보았습니다.
APU Passthrough를 도전하는 분들에게 조금이라도 도움이 되었으면 좋겠네요.
글이 유익했다면 댓글과 하트, 그리고 여유가 된다면 광고 한 번 눌러주시면 감사하겠습니다.
'운영체제 및 서버 > Proxmox' 카테고리의 다른 글
Proxmox LXC GPU Passthrough & Jellyfin 설치 (0) | 2024.11.24 |
---|---|
시놀로지 서베일런스 스테이션 대안 CCTV 오픈소스 shinobi 시노비 [1/2] (0) | 2024.11.15 |
Proxmox 8.1 업데이트를 위한 기본 Repositories 변경 (0) | 2024.04.17 |
Proxmox LXC에 NFS Server 구축 (0) | 2023.11.17 |

APU에서 GPU Passthrough?
AMD의 APU(내장 그래픽이 포함된 CPU)를 사용하는 환경에서 Proxmox를 통해 GPU Passthrough를 구현하는 것이 매우 까다로운 문제로 여겨져 왔습니다.
대부분의 APU 사용자들은 VM환경에서의 GPU Passthrough를 시도하였지만, 대게 실패하는 경우가 대부분이었고,
설령 성공하더라도 서버를 재부팅하면 설정이 풀린다거나 그전까진 재실행이 안되는 일회성에 그치는 한계가 있었습니다.
그렇기에 VM이 아닌 LXC에서만 Passthrough를 통해 jellyfin 내 트랜스코딩(Transcoding) 정도까지만 사용하는 정도였습니다.
하지만 드디어 VM에서도 이 문제를 해결할 수 있는 방법을 확인하게 되었고, 직접 테스트를 통해 가능성을 입증했습니다.
다른 사람들이 성공했다는 방식을 보고 따라 해본 결과 성공하지 못했고, 그런 분들의 글과 해외 커뮤니티의 글을 참고하여 여러 번 반복하고 바꾸며 시도하는 과정에서 성공하게 되었습니다.
이번 게시글에서는 제가 이런 경험한 과정을 바탕으로 설정 방법을 자세히 공유하고자 합니다.
이제 AMD APU 사용자들도 Proxmox 환경에서 안정적으로 GPU Passthrough를 활용할 수 있는 길이 열린 만큼, 아래 설정법을 참고해 보시기 바랍니다.
Passthrough란?
Passthrough(패스스루)는 가상화 환경에서 호스트 시스템(실제 서버/PC)의 하드웨어를 가상 머신(VM)에서 직접 사용할 수 있도록 하는 기술입니다.
✅ GPU Passthrough → 가상 머신이 물리적 GPU를 직접 사용 (예: Jellyfin 하드웨어 가속)
✅ USB Passthrough → USB 장치를 VM에서 직접 인식 (예: 키보드, 마우스, USB 저장장치)
✅ PCIe Passthrough → 특정 PCIe 장치를 VM에서 직접 사용 (예: 네트워크 카드, 캡처 카드)
상세 설명 고마워 ChatGpt
환경
- ASRock Deskmini X300 ( BIOS - 2.10 )/ AMD 5600G
- Proxmox 8.3.3 / VM - Windows 11 Pro
설정
1) BIOS 설정
- VT 활성화: BIOS에서 "SVM Mode" 를 "Enable"로 설정
- IOMMU 활성화: "IOMMU" 설정을 "AUTO" 를 "Enable"로 설정
- BIOS 설정 후 저장하고 재부팅
2) PVE 시스템 설정
(1) GRUB 부팅 파라미터 수정
Proxmox - 데이터센터 - pve - Shell 에서 파일을 수정합니다.
파일 수정 : /etc/default/grub

nano /etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT를 아래와 같이 수정합니다.
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt video=efifb:off,vesafb:off initcall_blacklist=sysfb_init pcie_acs_override=downstream,multifunction"
필수 항목
iommu=pt : IOMMU를 패스스루 모드로 설정
pcie_acs_override=downstream,multifunction : IOMMU 그룹 분리 패치
grub를 저장합니다.
update-grub
(2) 드라이버 블랙리스트 추가
blacklist amdgpu
blacklist snd_hda_intel
blacklist snd_hda_codec_hdmi

(3) VFIO 모듈 추가
파일 수정: /etc/modules
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

(4) 내장 GPU ID 확인 및 VFIO 바인딩
우선 GPU 장치 ID를 확인해야 합니다.
아래는 GPU 장치 ID 확인하는 명령어 입니다.
lspci -D -nnk | grep VGA
- 출력 예: 0000:03:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Cezanne [Radeon Vega Series / Radeon Vega Mobile Series] [1002:1638] (rev c9)
- 여기서 0000:03:00.0은 IOMMU 그룹, 1002:1638은 공급업체ID:장치 ID입니다.

#장치아이디 입력
options vfio-pci ids=1002:1638
options vfio-pci disable_idle_d3=1
D3 상태 : 저전력 모드로 전환되는 상태

업데이트 및 재부팅
update-initramfs -u -k all
reboot

3) VBIOS 추출
VBIOS를 추출해 파일을 매핑을 시켜줘야 합니다.
(1) 바이오스 버전 확인
dmidecode -t bios
BIOS Information
Vendor: American Megatrends International, LLC.
Version: P1.80F
Release Date: 05/09/2023
Address: 0xF0000
Runtime Size: 64 kB
ROM Size: 16 MB
Characteristics:
PCI is supported
BIOS is upgradeable
BIOS shadowing is allowed
Boot from CD is supported
Selectable boot is supported
BIOS ROM is socketed
EDD is supported
Japanese floppy for NEC 9800 1.2 MB is supported (int 13h)
Japanese floppy for Toshiba 1.2 MB is supported (int 13h)
5.25"/360 kB floppy services are supported (int 13h)
5.25"/1.2 MB floppy services are supported (int 13h)
3.5"/720 kB floppy services are supported (int 13h)
3.5"/2.88 MB floppy services are supported (int 13h)
Print screen service is supported (int 5h)
8042 keyboard services are supported (int 9h)
Serial services are supported (int 14h)
Printer services are supported (int 17h)
CGA/mono video services are supported (int 10h)
USB legacy is supported
BIOS boot specification is supported
Targeted content distribution is supported
UEFI is supported
BIOS Revision: 5.17
1.80F 인걸 확인했습니다.
공식홈페이지를 접속해 보니 어느새 2.10까지 나와있는 걸 확인하여, 바이오스를 해당 버전으로 업데이트 진행하였습니다.
바이오스 업데이트 진행 방법은 아래 X600 BIOS 설정 포스트를 참고하여 진행하시기 바랍니다.
X600도 X300과 바이오스 업데이트 방식은 동일합니다.
https://god-logger.tistory.com/184
ASRock Desk mini X600 바이오스 업데이트부터 설정까지 ( 내돈내산 )
데스크 미니 ?데스크 미니(DeskMini)는 ASRock이 선보인 소형 PC 플랫폼으로, Mini-STX(147mm x 140mm) 메인보드를 기반으로 컴팩트한 데스크톱을 구성합니다. ASRock에서 출시한 인기있는 미니PC 베어본 입니
god-logger.tistory.com
(2) 메인보드 BIOS 다운로드
ASRock DeskMini X300 Series
AMD AM4 소켓 CPU, - Cezanne, Renoir, Picasso, Raven Ridge, 최대 65W, - 최대 높이 46mm 이하의 CPU 쿨러 지원<br />X300으로 오버클러킹 옵션 지원<br />고속 DDR4-3200MHz 메모리<br />듀얼 Ultra M.2 (NVMe), - M2_1 M.2 (2280) – P
www.asrock.com
(3) UBU 툴 다운로드
- UBU(Uefi Bios Updater) 툴을 다운로드하여 BIOS에서 VBIOS를 추출합니다.
- 개발자 Sonix 의 경우 개별 홈페이지가 없어, 그의 저장소 (mega) 링크로 공유합니다.
https://mega.nz/folder/lLg2GLrA#SnZZd0WjHkULFHg7FESm8g
File folder on MEGA
mega.nz
아쉽게도 UBU 툴은 윈도우에서만 진행이 가능합니다. BAT파일..
(4) VBIOS 추출 후 Proxmox 서버로 이동
(2) 번에서 다운로드한 BIOS 압축파일을 압축 해제한 후, UBU 폴더 안에 넣어준 후 UBU.bat 파일을 실행합니다.

프로그램이 BIOS를 전체적으로 확인 후, Video OnBoard 부분이 2번이므로 2번을 초이스 합니다.

X - Extracted를 선택해 추출을 시도합니다.

아래와 같이 파일이 복사되었다는 메시지와 함께 Extracted 폴더가 하나 생기고 그 안에 GOP와 VBIOS 폴더가 들어있습니다.

이후 vbios_1638.dat 파일을 찾아 이를 proxmox 서버 내부 /usr/share/kvm 폴더에 업로드합니다.
다시 정리해 보면 아래와 같습니다.
- BIOS 파일을 UBU 폴더로 이동
- UBU 폴더에서 UBU.bat 실행
- 메뉴에서 순서대로:
- 2 (Video OnBoard) → X (Extracted) → 파일 복사 대기
- Extracted\VBIOS\017.010.000.030.000000 폴더에서 vbios_1638.dat 파일을 Proxmox 서버 내 /usr/share/kvm 으로 이동
5600G의 경우 세잔이므로 017.010.000.030.000000 폴더에서 vbios_1638.dat
8600G의 경우 피닉스이므로 022.012.000.027.000001 폴더에서 vbios_15BF.dat (단일파일로 나와서 아마 이 파일로 추측) (아직 테스트 안 해본 상태)
#폴더명은 미세하게 다를 수 있음
(5) AMDGopDriver.rom 파일 생성 후 Proxmox 폴더로 이동
https://github.com/tianocore/edk2-BaseTools-win32
GitHub - tianocore/edk2-BaseTools-win32: git-svn mirror of https://svn.code.sf.net/p/edk2-toolbinaries/code/trunk/Win32
git-svn mirror of https://svn.code.sf.net/p/edk2-toolbinaries/code/trunk/Win32 - tianocore/edk2-BaseTools-win32
github.com
프로그램을 다운로드한 후, 동일 폴더에 AMDGopDriver.efi 파일을 넣고, 아래 명령어를 통해 rom 파일을 생성합니다.
# 사용 예제 , 터미널에서 해당 명령어 입력
EfiRom.exe -f VendorId -i DeviceId -e AMDGopDriver.efi -o AMDGopDriver.rom
그런데 저희는 Vendor사 ID는 알아도 현재 DeviceID를 모릅니다.
Proxmox - pve - shell에서 아래의 명령어를 실행합니다.
lspci -nn | grep -e 'AMD/ATI'
root@pve:~# lspci -nn | grep -e 'AMD/ATI'
03:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Cezanne [Radeon Vega Series / Radeon Vega Mobile Series] [1002:1638] (rev c9)
03:00.1 Audio device [0403]: Advanced Micro Devices, Inc. [AMD/ATI] Renoir Radeon High Definition Audio Controller [1002:1637]
보이는 목록 중 Renoir Radeon High Definition Audio Controller [ 1002:1637 ]라고 뜨는 게 있습니다.
여기서 1002는 공급업체 ID이고 1637은 장치 ID인데, 아까 1636은 내장그래픽 쪽을 가리키는 장치였는데, 1637은 오디오를 나타내는 부분인걸 확인할 수 있습니다.
이번엔 그래픽이 아닌 오디오 쪽으로 매핑해야 합니다.
이제 DeviceID (장치 ID)를 알았으니 명령어를 완성시킨 후 실행해 봅시다.

EfiRom.exe -f 1002 -i 1637 -e AMDGopDriver.efi -o AMDGopDriver.rom
성공했습니다. 이제 변환된 AMDGopDriver.rom 파일도 PVE의 /usr/share/kvm 폴더에 이동시킵니다.
4) VM 설정
VM은 기본적으로 아래와 같이 세팅합니다.
여기서 PCI만 빼고 초기에 세팅을 미리 해둡니다.
제 경우는 아래와 같습니다.

꼭 위와 같을 필요는 없습니다. Windows 11이기에 BIOS는 SeaBIOS로는 불가하고 OVMF로만 설치가 가능함을 확인했습니다.
가능하면 Processors는 host로 지정해 줍니다.
이후 VM을 켠 후 윈도우11을 설치까지 진행합니다.
윈도우 설치와 함께 RDP 또는 원격제어할 수 있는 방안을 마련해 둡니다.
제 경우 VNC 보다는 최근에 포스팅한 rustdesk를 사용했습니다.
관련 내용은 아래 포스팅을 참고해 주세요
rustdesk란? https://god-logger.tistory.com/185
RustDesk: 강력한 오픈소스 원격 제어 도구의 모든 것
RustDesk란 무엇인가?RustDesk는 오픈소스 원격 데스크톱 소프트웨어로, 사용자가 다른 컴퓨터를 원격으로 제어할 수 있게 해줍니다.2021년에 처음 공개된 이 도구는 Rust 프로그래밍 언어로 작성되어
god-logger.tistory.com
rustdesk 릴레이 서버 구축기 - https://god-logger.tistory.com/186
RustDesk 릴레이 서버 구축 - 도커와 우분투로 나만의 원격 제어 환경 만들기
글을 읽기 전 RustDesk에 대해 알고 싶으신 분은 아래 링크를 통해 확인 가능합니다.https://god-logger.tistory.com/185 RustDesk: 강력한 오픈소스 원격 제어 도구의 모든 것RustDesk란 무엇인가?RustDesk는 오픈
god-logger.tistory.com
원격 제어 방안이 완료되었다면 아래와 같이 수정해 봅니다.
우선 VM 하드웨어 메뉴의 상단 [추가] 버튼을 통해 PCI 디바이스를 두 개 등록합니다.
하나는 dat파일, 하나는 rom파일을 등록하기 위함입니다.
제 경우 0000:03:00.0 은 그래픽, 0000:03:00.1은 그래픽오디오로 확인되었습니다.

우선 0000:03:00.0 (그래픽)을 등록합니다. (혹시 그래픽이 다르게 뜬다면 다른 걸 잡아주시면 됩니다.)
이때 꼭 메인 GPU와 Rom-Bar, PCI-Express를 체크해야 합니다.

마찬가지로 0000:03:00.1 도 진행해 줍니다. (혹시 오디오가 다르게 뜬다면 다른 걸 잡아주시면 됩니다.)
오디오는 다른 점이 메인 GPU를 제외한 나머지 ROM-Bar, PCI-Express만 체크합니다.

pve - Shell을 켠 후, 아래와 같이 파일을 편집해 줍니다.
편집 구간은 총 3곳입니다.
파일 수정: /etc/pve/qemu-server/{설정하고자 하는 VM 번호}.conf
# 추가 설정
cpu : ,hidden=1
hostpci0 : ,romfile=vbios_1638.dat,x-vga=1
hostpci1 : ,romfile=AMDGopDriver.rom


사진을 확인하여 [편집 후] 스크린샷 처럼 편집합니다.
PCI 디바이스가 0000:03:00.0 이 아닌 0000:03:00 으로만 표시된다면 꼭 0000:03:00.0 으로 수정해줍니다.
0000:03:00.1 Audio Controller 를 선택해 주고, ROM-Bar, PCI-Express까지 체크합니다.
이후에 pve-shell를 통해 nano /etc/pve/qemu-server/{설정하고자 하는 VM 번호}.conf 를 수정해 줍니다.
이로써 VM 세팅은 끝났습니다.
제 경우 VGA를 None으로 해주었는데, 우선 VirtIO-GPU로 잡아서 proxmox No Vnc를 통해 웹에서 확인도 가능합니다.
아래는 완성된 설정 예시입니다.

5) 확인


원격제어 주의
만약 RDP 만 사용한다면 상관없지만, rustdesk 또는 moonlight + sunshine 을 이용하는 경우, 물리적으로 hdmi 포트에 더미 hdmi를 꽂아주어야 합니다.
더미Hdmi를 꽂지 않는다면, 검은 화면 또는 하얀화면만 표현되는 걸 확인했습니다.
Reset 버그 ( Update 2025.03.01 )
VM 재시작시 정상 부팅이 안됩니다.
이는 APU reset bug로 유명합니다.
이를 해결하기 위해 아래와 같이 설정해봅니다.
우선 CMOS 설정부터 아래와 같이 설정합니다.
CMOS 설정
- 보안 -> Secure booting -> 안전부팅 -> Disabled
- 고급 -> PCI Configuration -> SR-IOV Support -> Enabled
- 고급 -> PCI Configuration -> Above 4G Decoding -> Enabled
- 고급 -> PCI Configuration -> Re-Size BAR Support -> 자동
pve - Shell 에서 아래 명령어들을 통해 설정을 진행합니다.
# 현 커널 확인
uname -r
# 커널 버전을 아래 명령어 {버전} 부분에 넣어 실행
apt install pve-headers-{버전}
예) apt install pve-headers-6.8.12-4-pve
# 빌드 도구 다운
apt install git dkms build-essential
# 빌드 수행
git clone https://github.com/gnif/vendor-reset.git
cd vendor-reset
dkms build vendor-reset/0.1.1 -k {버전}
예) dkms build vendor-reset/0.1.1 -k 6.8.12-4-pve
dkms install vendor-reset/0.1.1 -k {버전}
예) dkms install vendor-reset/0.1.1 -k 6.8.12-4-pve
# dkms 설치 유무 확인
dkms status
파일 수정 : /etc/modules
vendor-reset 추가
...
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
vendor-reset
# 설정 적용
update-initramfs -u
# 커널 모듈의 의존성 업데이트
depmod -a
# 모듈 수동 로드
modprobe vendor_reset
# 위 수동실행을 통해 잘 되는지 확인
모든 설정 완료 후 정상적으로 로드되는지 확인하기 위해 재부팅을 시도합니다.
# 모듈을 로드하기 위해 재부팅
reboot
절전 버그 ( Update 2025.03.01 )
절전모드로 넘어갈 경우 GPU 사용률이 100% ( == CPU 사용률)이 되는 현상이 있습니다.
꼭 SUSPEND 모드로 넘어가지 않도록 해주셔야 합니다.
다양한 방법이 있을 것 같긴 하지만, GPU에 전력을 계속적으로 어차피 사용하는 옵션을 하느니 그냥 비활성화 처리하고 필요하다면 Proxmox 에서 VM 자체를 일시정지하여 사용하는게 더 나을 듯 합니다.
마무리
X300을 홈서버로 사용하면서 전반적으로 만족해 왔지만, 한 가지 아쉬운 점이 있다면 APU에서의 그래픽 Passthrough 설정의 어려움이었습니다.
조금 손이 많이가는건 어쩔 수 없지만 그래도 드디어 그 아쉬움을 조금이나마 해소할 수 있게 되었네요.
사실 그래픽 자원이 필요한 곳은 현재로선 Jellyfin 정도뿐이어서 LXC로도 충분했지만, 나중에는 또 어떤 용도로 필요할지 모르긴 합니다.
기존엔 불가능했지만 가령 moonlight + sunshine 의 부드러움을 느끼는 좋은 기회가 생기기도 된거니까요.
그래서 이 문제가 해결된 것이 더 의미 있게 느껴집니다.
이전부터 X300의 iGPU, AMD 통합그래픽 CPU인 APU 에서는 GPU Passthrough 설정이 어렵다고 알려져 있었고, 성공률도 매우 낮다고 알려져 왔기에 그동안 홈 서버 환경에서 조차 역시 서버는 '인텔인가'라는 생각을 또다시 가졌었던게 사실입니다만, 이번 설정을 성공하면 그런 고정관념을 조금은 접게 되었습니다. ( 아주 조금요 ) ( 리셋 버그와 절전 버그 등으로 이건 뭐.. )
여러 번 시도하고 실패를 거듭한 끝에 마침내 성공했지만, 오히려 허탈한 기분도 드네요.
커뮤니티에서 성공 사례를 참고하며 똑같이 따라 했는데도 되지 않아 답답했었습니다. 한데 막상 성공하고 나니, 기존 사례들에 적힌 글들은 대부분 세세한 부분까지 설명하지 않아서 어려움을 겪었던 것임을 알게 되었습니다.
대표적인 예가 AMDGopDriver.rom 파일 설정을 들 수 있겠네요.
분명 지금도 저처럼 시행착오를 겪고 있는 분들이 있을 겁니다.
그런 분들을 위해 최대한 자세한 설명과 함께 이 과정을 정리해 보았습니다.
APU Passthrough를 도전하는 분들에게 조금이라도 도움이 되었으면 좋겠네요.
글이 유익했다면 댓글과 하트, 그리고 여유가 된다면 광고 한 번 눌러주시면 감사하겠습니다.
'운영체제 및 서버 > Proxmox' 카테고리의 다른 글
Proxmox LXC GPU Passthrough & Jellyfin 설치 (0) | 2024.11.24 |
---|---|
시놀로지 서베일런스 스테이션 대안 CCTV 오픈소스 shinobi 시노비 [1/2] (0) | 2024.11.15 |
Proxmox 8.1 업데이트를 위한 기본 Repositories 변경 (0) | 2024.04.17 |
Proxmox LXC에 NFS Server 구축 (0) | 2023.11.17 |