qemu-kvm Guest VM(윈도우 10)에서 nvidia GPU path through 사용하기.

qemu-kvm Guest VM(윈도우 10)에서 nvidia GPU path through 사용하기.

* 작업환경
Host OS: ubuntu 18.04 (EFI boot)
Guest OS: windows 10
Hypervisor : qemu-kvm

M/B: ASUS WS X299 SAGE
GPU: Gforce RTX2080 TI 4개
MEM: 128GB
CPU: Intel(R) Core(TM) i9-10900X CPU @ 3.70GHz

1. 커널의 iommu 지원 설정

/etc/default/grub 파일에서 아래 내용을 수정 또는 추가한다.

# vi /etc/default/grub
...
GRUB_CMDLINE_LINUX="xhci-hcd.quirks=262144 kvm-intel.nested=1 intel_iommu=on modprobe.blacklist=nouveau"
...

커널에 적용하고 재부팅한다.

# grub-mkconfig -o /boot/efi/EFI/ubuntu/grub.cfg

2. Guest VM에서 uefi 바이오스를 지원하도록 ovmf 패키지를 설치한다.

# apt install ovmf

3. 윈도우를 설치한다. 간편하게 virt-manager를 사용한다.

ovmf 패키지를 설치하지 않았다면, 그림처럼 UEFI를 찾을 수 없다고 나온다.

ovmf 패키지를 설치하면 아래 그림처럼 UEFI 바이오스를 선택 할 수 있다.

4. 설치된 Guest 윈도우에 nvidia 드라이버를 설치해도 제대로 작동하지 않는다.

살펴보면 코드43(code 43) 메시지가 보인다.

이 현상의 원인은 nvidia 그래픽 드라이버는 가상머신에서 동작하지 않기 때문이라 한다. 때문에, guest 설정을 몇 가지 해 주어야 한다.

게스트 win10의 원래 설정은 아래와 같다.

# virsh edit win10

...
  <features>
    <acpi/>
    <apic/>
    <hyperv>
      <relaxed state='on'/>
      <vapic state='on'/>
      <spinlocks state='on' retries='8191'/>
    </hyperv>
    <vmport state='off'/>
  </features>
...

이제, 아래럼 수정해준다.

  <features>
    <acpi/>
    <apic/>
    <hyperv>
      <relaxed state='on'/>
      <vapic state='on'/>
      <spinlocks state='on' retries='8191'/>
      <vendor_id state='on' value='1234567890ab' />
    </hyperv>
    <kvm>
      <hidden state='on' />
    </kvm>
    <vmport state='off'/>
    <ioapic driver='kvm' />
  </features>

이제 guest os를 실행하면, 그림 처럼 GPU가 잘 작동한다.

5. 하지만 설치된 GPU 4개 중 하나는 제대로 작동하지 않는다.
– Host OS 가 사용하고 있어서 안되는 것일까?

dmesg에 관련 로그는 아래와 같다.

[20782.590073] caller pci_map_rom+0x5d/0xf0 mapping multiple BARs
[20782.590075] vfio-pci 0000:68:00.0: Invalid PCI ROM header signature: expecting 0xaa55, got 0xffff
[20782.590120] resource sanity check: requesting [mem 0x000c0000-0x000dffff], which spans more than PCI Bus 0000:00 [mem 0x000c4000-0x000c7fff window]
[20782.590121] caller pci_map_rom+0x5d/0xf0 mapping multiple BARs
[20782.590122] vfio-pci 0000:68:00.0: Invalid PCI ROM header signature: expecting 0xaa55, got 0xffff
[20783.903024] virbr0: port 2(vnet0) entered forwarding state
[20783.903041] virbr0: topology change detected, propagating

>>> 기타사항
참고 문서를 보면 vfio 관련 이슈가 있는듯 하지만, 여기서는 특별히 vfio 관련 설정은 하지 않았다.

>>> 참고문서
https://mathiashueber.com/fighting-error-43-nvidia-gpu-virtual-machine/
https://www.heiko-sieger.info/running-windows-10-on-linux-using-kvm-with-vga-passthrough/

답글 남기기

Your email address will not be published.