VFIO - Intel 4770에서 qemu 가상 머신(Proxmox)으로의 igpu 패스스루

VFIO - Intel 4770에서 qemu 가상 머신(Proxmox)으로의 igpu 패스스루

최신 Proxmox(현재 6.3-3, 완전히 업데이트됨)를 실행 중이며 Core i7 4770 CPU의 온보드 GPU를 Windows 10 VM으로 패스스루하려고 합니다. 나는 이미 시스템에서 iommu를 활성화했으며 intel_iommu=on video=efifb:offgrub 커널 옵션을 추가하여 시스템이 장치를 요구하지 못하도록 grub에 지시했습니다. dmesg를 확인하여 IOMMU가 실제로 사용 가능한지 확인했습니다.

# dmesg | grep -e DMAR -e IOMMU -e AMD-Vi
[    0.007556] ACPI: DMAR 0x00000000D88C33C8 0000B8 (v01 INTEL  HSW      00000001 INTL 00000001)
[    0.083595] DMAR: IOMMU enabled
[    0.180445] DMAR: Host address width 39
[    0.180446] DMAR: DRHD base: 0x000000fed90000 flags: 0x0
[    0.180449] DMAR: dmar0: reg_base_addr fed90000 ver 1:0 cap c0000020660462 ecap f0101a
[    0.180449] DMAR: DRHD base: 0x000000fed91000 flags: 0x1
[    0.180451] DMAR: dmar1: reg_base_addr fed91000 ver 1:0 cap d2008020660462 ecap f010da
[    0.180452] DMAR: RMRR base: 0x000000d8842000 end: 0x000000d884efff
[    0.180452] DMAR: RMRR base: 0x000000db000000 end: 0x000000df1fffff
[    0.180454] DMAR-IR: IOAPIC id 8 under DRHD base  0xfed91000 IOMMU 1
[    0.180454] DMAR-IR: HPET id 0 under DRHD base 0xfed91000
[    0.180455] DMAR-IR: Queued invalidation will be enabled to support x2apic and Intr-remapping.
[    0.180831] DMAR-IR: Enabled IRQ remapping in x2apic mode
[    0.874497] DMAR: No ATSR found
[    0.874527] DMAR: dmar0: Using Queued invalidation
[    0.874531] DMAR: dmar1: Using Queued invalidation
[    1.026818] DMAR: Intel(R) Virtualization Technology for Directed I/O

또한 호스트 OS가 이를 요청하는 것을 방지하기 위해 iGPU(및 관련 오디오 장치)를 블랙리스트에 추가했습니다.

# cat /etc/modprobe.d/blacklist.conf
blacklist snd_hda_intel
blacklist snd_hda_codec_hdmi
blacklist i915

# cat /etc/modprobe.d/vfio.conf
options vfio-pci ids=8086:0412 disable_vga=1

마지막으로 q35 칩셋 및 uEFI(OVMF) BIOS와 함께 호스트에 새로운 Windows 10 VM을 설정했습니다. 이것이 하드웨어를 통과하는 가장 "호환 가능한" 방법인 것 같습니다. 또한 Proxmox 호스트의 HDMI 포트에 외부 화면이 연결되어 있습니다. VM이 부팅되면 이 화면이 표시되어야 한다는 것을 이해합니다. VM의 qemu 구성 파일은 다음과 같습니다.

agent: 1
balloon: 0
bios: ovmf
boot: order=virtio0;ide2;net0
cores: 4
efidisk0: local-1tb-nvme-thinpool:vm-118-disk-1,size=4M
hostpci0: 00:02,pcie=1,x-vga=1
ide2: none,media=cdrom
machine: q35
memory: 4096
name: VFIOtest
net0: virtio=52:D7:02:CA:B6:2E,bridge=vmbr0,firewall=1
numa: 0
ostype: win10
scsihw: virtio-scsi-pci
smbios1: uuid=cd9d41e9-d8c2-465e-94dc-798aa8e517e2
sockets: 1
virtio0: local-1tb-nvme-thinpool:vm-118-disk-0,backup=0,discard=on,size=60G
vmgenid: 2cb8ce5e-5dda-4870-9cf3-774bb025057f

이 작업을 완료하면 VM을 부팅할 수 있습니다. VM을 부팅하자마자 화면이 신호가 없음을 나타내는 대기 모드로 전환됩니다. 그러나 그런 다음 시스템에 RDP를 할 수 있고 Intel HD Graphics 4600이 장치 관리자에 표시되는 것을 볼 수 있습니다. 그래서 인텔 홈페이지에서 최신 드라이버를 설치했습니다. 안타깝게도 장치가 시작되지 않고 옆에 느낌표가 표시됩니다. 장치 상태가 표시됩니다.

Windows has stopped this device because it has reported problems. (Code 43)

불행하게도 이 code 43오류는 단지 뭔가 잘못되었음을 의미할 뿐이며, 원인이 무엇인지는 구체적이지 않습니다.

호기심에 UEFI Bios를 사용하여 Ubuntu 20.04 VM을 만들고 GPU를 통과시켰더니 완벽하게 작동했습니다(마더보드에 연결된 모니터에서 데스크톱 등을 볼 수 있습니다).

이 시점부터 무엇을 시도해야 할지 잘 모르겠습니다. 이 문제를 계속 해결해야 할 부분에 대한 도움이 있으면 도움이 될 것입니다.

편집하다: 한동안 씨름하다가 포기했어요. 이 문제를 일으키는 Windows 10 내 문제인 것 같습니다. Ubuntu 20.04 데스크탑 VM(q35 칩셋 포함)을 설정하고 iGPU를 통과했습니다. 즉시 작동합니다(HDMI를 통해 마더보드에 연결된 모니터에 Ubuntu 데스크탑이 나타나는 것을 볼 수 있습니다).

관련 정보