가상머신에는 대표적으로 virtualbox가 있고
저도 아주 좋아하는 프로그램이지만
언젠가는 vga passthrough를 이용해서
리눅스는 리눅스대로, 윈도우는 윈도우대로 전부 사용하고자 하는 욕심이 있기 때문에
vga passthrough를 지원하지 않는 virtualbox를 포기하고
qemu를 이용해서 가상머신을 구성하고자 합니다.
qemu에서 가상머신을 설치하는 방법은 워낙 많이 알려져 있으니
그대로 하시면 됩니다.
중요한건 인텔 GVT-g입니다.
제 노트북은 예전 노트북이라 성능이 좋지 않지만
그래도 vga passthrough를 연습하기에는 좋은것 같습니다.
인텔 그래픽, 그중에서도 스카이레이크 이상급은 GVT-g라는 가상 그래픽을 이용한 vga passthrough를 지원하네요.
우선 커널 설정부터 변경하겠습니다.
sudo vi /etc/mkinitcpio.conf
위 스샷과 같이 모듈을 추가합니다.
그리고 커널을 재구성합니다.
sudo mkinitcpio -p linux
그리고 부트로더에 파라미터를 추가합니다.
위 스샷과 같이 추가합니다. 블록으로 잡아놨습니다.
이제 재부팅합니다.
이제 그래픽카드의 pci 번호를 알아냅니다.
lspci | grep VGA
가장 왼쪽의 00:02.0 와 같은 숫자가 우리가 원하던 번호입니다.
ls /sys/devices/pci0000:00/0000:위에서 찾은 번호/mdev_supported_types
(ex. ls /sys/devices/pci0000:00/0000:00:02.0/mdev_supported_types)
를 통해 해당 인텔 그래픽이 지원하는 형태를 확인할 수 있습니다.
정확한 내용은 해당 폴더의 description을 열어보면 확인할 수 있습니다.
저는 i195-GVTg_V5_4를 선택합니다.
다음 사이트에서 랜덤하게 UUID를 생성합니다.
https://www.uuidgenerator.net/
저는 a47e3f01-e89d-4151-9973-a73fabacf7a9가 나왔습니다.
다음 코드를 실행해 봅시다.
sudo /bin/sh -c "echo 위에서 만든 UUID > /sys/devices/pci0000:00/0000:위에서 찾은 PCI/mdev_supported_types/위에서 선택한 그래픽/create"
그리고 enable해줍시다.
sudo systemctl enable gvtvgpu
이제 미리 만들어둔 가상머신을 실행합니다.
자신의 인텔 그래픽에 맞는 드라이버를 설치합니다.
저는 hd520라서 https://downloadcenter.intel.com/product/88355/Intel-HD-Graphics-520 에서 받았습니다.
zip형태로 받은 다음
장치관리자에서 드라이버 업데이트로 폴더 지정 후 설치했습니다.
이제 가상머신을 종료합니다.
그리고 가상머신 설정을 변경합니다.(저는 libvirt를 사용하기 때문에 libvirt기준으로 적습니다.)
sudo virsh edit 가상머신이름
(ex. sudo virsh edit win10)
먼저 위 스샷과 같이 첫줄을 변경하고(원래는 kvm만 있을겁니다.)
기존의 graphic, video 블록을 제거하고
위 스샷과 같이 추가합니다.
그리고 hostdev블록을 다음과 같이 추가하는데
uuid부분은 위에서 만든 uuid로 변경해야 합니다.
끝으로 devices블록 다음줄에 qemu:commandline블록을 위 스샷과 같이 추가해줍니다.
이제 가상머신을 실행하면
다음과 같이 hd520그래픽으로 가상머신이 실행됩니다.
(해당 스샷은 일부러 해상도를 낮춘 상태입니다.)
이렇게 열심히 했는데
성능이 더 나은지는 솔직히 잘 모르겠습니다.
제 노트북 성능이 충분하지 않아서 그럴수도 있겠네요.
vga passthrough를 연습하는 것에 의의를 두겠습니다.
참고: https://wiki.archlinux.org/index.php/Intel_GVT-g
https://www.reddit.com/r/VFIO/comments/8h352p/guide_running_windows_via_qemukvm_and_intel_gvtg/