본문 바로가기
서버/리눅스 서버

Proxmox J5005 GPU 패쓰쓰루

by 도정진 ㅋㅋ잠자 2021. 3. 25.
728x90

안녕하세요? 이번에는 GPU를 PASSTHROUGH 해보겠습니다.

저는 HA 용도로 사용하고 있는 서버를 PROXMOX 를 설치해서 시작했습니다. HA를 그대로 가상화 하기 위함도 있었고 자원이 남는걸 활용하려고 했기 때문입니다.

 

원격 데스크탑 용도로 사용할 예정이며, GPU가 있어야 PARSEC 이 되기 때문에 GPU를 꼭 VM에 넣어주어야 합니다.

 

이 세팅은 Headless 로 진행되며, 모니터는 없는 상태에서 진행됩니다. 잘못하면 부팅이 안될 수 있음으로 꼭 복구할 수 있는 위치에서 따라하시길 바랍니다.

0. 이전 PVE 관련 글

Proxmox 설치 후기 (간단편) (djjproject.com)

Proxmox 설치 후 LVM 용량 조절하기 (djjproject.com)

Proxmox apt-get / uuid 하드 마운트 설정 (djjproject.com)

1.  참고글

[SOLVED] - Proxmox 6.0 Gemini Lake and IGD (graphics) passthrough for Windows 10 | Proxmox Support Forum

Pci passthrough - Proxmox VE

2. 시스템 설정하기

iommu 활성화

root@debian:~# vi /etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"

root@debian:~# update-grub
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.4.73-1-pve
Found initrd image: /boot/initrd.img-5.4.73-1-pve
Found memtest86+ image: /boot/memtest86+.bin
Found memtest86+ multiboot image: /boot/memtest86+_multiboot.bin
Adding boot menu entry for EFI firmware configuration
done
root@debian:~# 

vfio 모듈 활성화

root@debian:~# vi /etc/modules

vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

i915 드라이버 비활성화

root@debian:~# cat /etc/modprobe.d/pve-blacklist.conf 

blacklist snd_hda_intel
blacklist snd_hda_codec_hdmi
blacklist i915

vfio 설정 및 kvm 설정 추가

root@debian:~# lspci -nn | grep VGA
00:02.0 VGA compatible controller [0300]: Intel Corporation UHD Graphics 605 [8086:3184] (rev 03)

root@debian:~# vi /etc/modprobe.d/vfio.conf

options vfio-pci ids=8086:3184 disable_vga=1

root@debian:~# vi /etc/modprobe.d/kvm.conf

options kvm ignore_msrs=1

재부팅을 해주고 하기 설정들을 확인합니다.

root@debian:~# reboot

root@debian:~# dmesg | grep remapping
[    0.173675] DMAR-IR: Queued invalidation will be enabled to support x2apic and Intr-remapping.
[    0.175623] DMAR-IR: Enabled IRQ remapping in x2apic mode

root@debian:~# find /sys/kernel/iommu_groups/ -type l
/sys/kernel/iommu_groups/7/devices/0000:00:13.2
/sys/kernel/iommu_groups/5/devices/0000:00:12.0
/sys/kernel/iommu_groups/3/devices/0000:00:0e.0
/sys/kernel/iommu_groups/11/devices/0000:01:00.0
/sys/kernel/iommu_groups/1/devices/0000:00:02.0
/sys/kernel/iommu_groups/8/devices/0000:00:15.0
/sys/kernel/iommu_groups/6/devices/0000:00:13.0
/sys/kernel/iommu_groups/4/devices/0000:00:0f.0
/sys/kernel/iommu_groups/12/devices/0000:02:00.0
/sys/kernel/iommu_groups/2/devices/0000:00:0c.0
/sys/kernel/iommu_groups/10/devices/0000:00:1f.0
/sys/kernel/iommu_groups/10/devices/0000:00:1f.1
/sys/kernel/iommu_groups/0/devices/0000:00:00.0
/sys/kernel/iommu_groups/9/devices/0000:00:1c.0

3. Win10 VM 설치

하기와 같이 가상 머신 생성 후, Win10 을 설치합니다.

필요파일

Win10 ISO : Windows 10 다운로드 (microsoft.com)

virtio-driver : virtio-win-pkg-scripts/README.md at master · virtio-win/virtio-win-pkg-scripts · GitHub

 

하기로 이동하여 파일 2개를 업로드 합니다.

 

다음으로 VM을 생성합니다.

VM을 생성하고 VM 설정으로 이동하여 virtio ISO 파일을 추가로 넣어줍니다.

정상적으로 부팅이 됩니다. 그대로 설치를 진행해줍니다.

중간에 설치 디스크를 못찾으면 하기와 같이 진행하시길 바랍니다.

설치를 virtio scsi 로 하지 않았기 때문에 드라이브는 잘 잡힐 것이나 다른것으로 하셔서 잡히지 않는다면, 하기글 4번 섹션을 참고 하세요.

blog.djjproject.com/714

 

 

어우.. 램이 많이 줄었네요..

4. GPU 패쓰쓰루 준비

계정에 비밀번호를 생성하고 원격 데스크톱을 활성화 합니다.

그리고 아이피도 확인합니다.

 

화면을 보지 않기 때문에 원격 데스크톱이 꼭 되어야 합니다.

5. GPU 패쓰쓰루 진행

vm을 먼저 종료합니다.

그리고 PCI 디바이스를 추가합니다.

하기 리스트에서 정확하게 알 수 없어서 콘솔에서 다시 확인합니다.

 

확인해보니 00:02.0 이 내장그래픽 hd605 로 나오네요.

다음으로 콘솔에서 하기 VM 설정을 수정하고 VGA 롬파일을 추가해 줍니다.

root@debian:~# find /sys/devices -name rom
/sys/devices/pci0000:00/0000:00:02.0/rom

root@debian:~# cd /sys/devices/pci0000\:00/0000\:00\:02.0/

root@debian:/sys/devices/pci0000:00/0000:00:02.0# cat rom > /usr/share/kvm/hd605.rom
cat: rom: Input/output error

root@debian:/sys/devices/pci0000:00/0000:00:02.0# echo 0 > rom

[ 5669.330841] vfio-pci 0000:00:02.0: Invalid PCI ROM header signature: expecting 0xaa55, got 0xe32b
[ 5719.493781] vfio-pci 0000:00:02.0: Invalid PCI ROM header signature: expecting 0xaa55, got 0xe32b
[ 5753.902510] vfio-pci 0000:00:02.0: Invalid PCI ROM header signature: expecting 0xaa55, got 0xe32b
[ 5817.220186] vfio-pci 0000:00:02.0: Invalid PCI ROM header signature: expecting 0xaa55, got 0xe32b

 

흠 덤프가 안되네요. 흠...

찾아보니 GPU가 동작중이지 않을 때에는 덤프가 안된다는 이야기가 있어서 VM을 구동시킨 다음에 덤프를 떠보았습니다.

--> 그래도 안되네요. 일단 없이 시도해 봅니다.

일단 다른분이 올려주신 바이오스를 사용하기로 했습니다.

download.djjproject.com/intel_uhd_605_vbios.zip

 

/usr/share/kvm 에 넣어주고 vm.conf 를 수정합니다.

root@debian:/usr/share/kvm# unzip intel_uhd_605_vbios.zip 
root@debian:/usr/share/kvm# rm intel_uhd_605_vbios.zip 
root@debian:/usr/share/kvm# mv intel_uhd_605_vbios.rom uhd605.rom

root@debian:/usr/share/kvm# vi /etc/pve/qemu-server/100.conf 

args: -device vfio-pci,host=00:02.0,addr=0x02,x-igd-gms=1,romfile=uhd605.rom
vga: none

6. 다시 정리 1 - 호스트 설정

5번 섹션에서 세팅하고 성공을 하지 못했습니다.

하기와 같이 다시 정리합니다.

# CMD 라인 수정
root@debian:~# vi /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on video=efifb:off iommu=pt pcie_acs_override=downstream"

root@debian:~# update-grub

# 인텔 내장 GPU 모듈 unload
root@debian:~# vi /etc/modprobe.d/pve-blacklist.conf
blacklist snd_hda_intel
blacklist snd_hda_codec_hdmi
blacklist i915

# vfio 모듈 활성화
root@debian:~# vi /etc/modules
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

# kvm 모듈 옵션 추가
root@debian:~# vi /etc/modprobe.d/kvm.conf
options kvm ignore_msrs=1

# vfio 모듈 설정 추가
root@debian:~# lspci -nn | grep VGA
00:02.0 VGA compatible controller [0300]: Intel Corporation UHD Graphics 605 [8086:3184] (rev 03)

# gpu 가 8086:3184 입니다.
root@debian:~# vi /etc/modprobe.d/vfio.conf
options vfio-pci ids=8086:3184 disable_vga=1

# 재부팅
root@debian:~# reboot

7. 다시 정리 2 - 가상머신 설정

웹 UI에서 설정하나 pve 설정파일을 직접 건드리나 동일 합니다.

일단은 PCI 패쓰쓰루 설정을 웹 UI에서 처리하지 않고, args 를 통해 vfio 를 통해서 사용할 수 있도록 설정합니다.

 

 GPU는 vfio-pci 를 통해 연동하고, 사운드는 lspci 를 해보시면 주소가 00:0e.0 으로 나옵니다. 그 장치는 WebUI 에서 추가를 해 주어도 동작에 문제가 없어서 하기에 hostpci0 로 추가를 해주었습니다.

# VM 넘버를 수정합니다.
# 저는 100번이라 100.conf 파일을 수정합니다.
root@debian:~# vi /etc/pve/qemu-server/100.conf
args: -device vfio-pci,host=00:02.0,addr=0x18	# PCI 장치 패쓰쓰루 vfio
balloon: 0
boot: order=ide0;ide2;net0
cores: 4
cpu: kvm64
hostpci0: 00:0e.0	# parsec 사용 시, 사운드 카드가 있어야 함으로 인텔 사운드 카드 넣음
ide0: local:100/vm-100-disk-0.qcow2,size=128G
ide2: media:iso/Win10_20H1.iso,media=cdrom
machine: q35
memory: 4096
name: Win10
net0: virtio=E6:BD:1D:A7:93:61,bridge=vmbr0,firewall=1
numa: 0
ostype: win10
sata1: media:iso/virtio-win-0.1.185.iso,media=cdrom,size=402812K
scsihw: virtio-scsi-pci
smbios1: uuid=5879e789-2fe4-4b23-9a87-f4b440856cc9
sockets: 1
vga: none	# 가상 VGA 는 필요 없음으로 제외 해줍니다.
vmgenid: a28db923-a8d4-4ead-8326-1b19a083eef0

root@debian:~# lspci -nn
00:00.0 Host bridge [0600]: Intel Corporation Device [8086:31f0] (rev 03)
00:02.0 VGA compatible controller [0300]: Intel Corporation UHD Graphics 605 [8086:3184] (rev 03)
00:0c.0 Network controller [0280]: Intel Corporation Device [8086:31dc] (rev 03)
00:0e.0 Audio device [0403]: Intel Corporation Device [8086:3198] (rev 03)
00:0f.0 Communication controller [0780]: Intel Corporation Celeron/Pentium Silver Processor Trusted Execution Engine Interface [8086:319a] (rev 03)
00:12.0 SATA controller [0106]: Intel Corporation Device [8086:31e3] (rev 03)
00:13.0 PCI bridge [0604]: Intel Corporation Device [8086:31d8] (rev f3)
00:13.2 PCI bridge [0604]: Intel Corporation Device [8086:31da] (rev f3)
00:15.0 USB controller [0c03]: Intel Corporation Device [8086:31a8] (rev 03)
00:1c.0 SD Host controller [0805]: Intel Corporation Celeron/Pentium Silver Processor SDA Standard Compliant SD Host Controller [8086:31cc] (rev 03)
00:1f.0 ISA bridge [0601]: Intel Corporation Device [8086:31e8] (rev 03)
00:1f.1 SMBus [0c05]: Intel Corporation Celeron/Pentium Silver Processor Gaussian Mixture Model [8086:31d4] (rev 03)
01:00.0 Unassigned class [ff00]: Realtek Semiconductor Co., Ltd. RTS5229 PCI Express Card Reader [10ec:5229] (rev 01)
02:00.0 Ethernet controller [0200]: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [10ec:8168] (rev 15)

8. GPU 드라이버 설치

저도 성공을 못하고 있다가, GPU 드라이버를 6911 버전으로 설치하고 문제가 해결되었습니다.

실제로 다른 버전을 설치하면 무언가 오류로 인하여 에러43이 걸립니다.

일단은 드라이버가 잡히기 전에는 원격 데스크톱을 통해 연결하여 설치를 진행하시길 바랍니다.

 

드라이버 파일은 하기 링크에서 받으시고 cab 파일을 압축 푸신 다음 하기와 같이 설치 하시길 바랍니다.

download.djjproject.com/pve/244fca2c-3c97-4f6e-88fd-0468ca5396a5_1a7a45901f6ae974f108f2350b8790049101bf75.cab

cab 파일을 압축 푼 경로를 선택하면 드라이버 설치가 가능합니다.

9. 작동 확인

일단은 드라이버가 정상적으로 동작중임을 장치관리자에서 확인하셨으면 작업 관리자에서도 잘 나올 것입니다.

 

다만 아쉬운 점이, GPU 공유 메모리로만 잡히는 것 같아서, 전용 GPU 메모리가 안잡히는 문제가 있습니다.

이런 문제 때문에 GPU를 패쓰쓰루 하고 나서는 HEVC 4K 디코딩이 안되는 것으로 보이네요.

 

저는 화면을 보고 있지는 않지만, 화면이 있으신 분들은 HDMI 포트로 윈도우 화면이 나올 것입니다. 필요하면 USB를 VM으로 넣어서 실제로는 리눅스 호스트의 머신이지만 가상머신으로 윈도우가 깔려 있는 효과를 내실 수도 있습니다.

(현재 HomeAssistant 만 돌고 있지 않았다면 한번 해봤을 것 같은데 ... ㅎㅎ)

 

XenServer 에서는 쉽게 내장 그래픽 패쓰쓰루가 가능했는데 PVE 에서는 굉장히 하기 힘드네요. 아마도 ESXI 의 경우에도 삽질이 많이 필요할 것으로 예상이 됩니다.

10. 이걸 도대체 어디에?

저는 현재 HA 서버로 데비안10 / PVE 커널을 사용하고 있습니다. 데비안10에서 docker 를 통해 HA를 쓰고 몇가지 더 쓰고 있으며, 메인 홈페이지나 파일 서비스도 모두 네이티브로 작동 중에 있습니다.

 

그런데 이렇게 쓰다 보니 GPU를 쓰는 곳이 없고 메모리가 항상 5GB 가 남아 있어서.. N3700 노트북이 너무 느린 나머지 PARSEC을 써서 간간히 웹서핑이나 작업 용도로 쓰면 좋지 않을까? 하는 데에서 아이디어가 출발하였습니다.

 

N3700 노트북에는 너무 저사양이라 Win10 을 깔면 너무 느려져서, 크롬OS를 설치해두고 쓰고 있습니다.

blog.djjproject.com/661

 

간간히 윈도우를 써야할 일이 있는데 그 때 사용할 목적으로 만들었으며, 일반 원격 데스크톱으로만 작업도 가능하지만, 실제로는 화면 움직임이 느릿 느릿한 부분이 있어서 안쓰는 GPU를 넣어주어서 게임 스트리밍 (PARSEC) 을 이용해 콘솔을 사용하는 것입니다. 매우 부드럽게 작동을 합니다.

 

본래 4K 영상을 재생하더라도 제 PC 를 PARSEC으로 N3700 노트북에서 연결하면 거의 모니터를 앞에 갖다 놓은 정도로 스트리밍이 됩니다. 문라이트 같은 서비스, 게임 스트리밍 서비스다 보니 반응 속도가 빠른것은 사실입니다.

 

그런데 이 서비스를 사용하려면 GPU가 있어야 하기 때문에 내장 GPU를 가상머신에 넣어준 것입니다.

(인텔 퀵싱크 / AMD VCE / NVDIA NVENC 가 지원되는 GPU가 있어야 작동됨)

 

반응 속도는 하기를 보시면 될 것 같습니다.

아쉽게도 J5005 내장 그래픽이 VM에 들어가면서 성능이 약간 줄어 들기 때문에 유튜브 영상 60FPS 가 밀리면서 나오는 증상은 있습니다만, 일반적으로 문서작업이나 웹 서핑에는 문제가 없습니다.

 

그리고 이전에 있던 한영키 입력 문제와 뒤어쓰기가 누르지도 않았는데 입력되는 문제가 해결되어 리모트 블로깅을 하는 데에도 크게 문제가 없네요. 카카오톡이나 이런걸 하려다 보면 한영키를 바꾸면 스페이스바가 2번 눌리는 증상이 있었는데 PARSEC 이 업데이트 되면서 해결이 된 것 같습니다.

11. 총괄 영상

설치 방법과 부가 설명, 그리고 J5005 시스템에서의 원격 느낌에 대해서 간단한 영상을 찍어보았습니다.

 

 

감사합니다.

 

728x90

댓글0