VFIO: paso de igpu en Intel 4770 a una máquina virtual qemu (Proxmox)

VFIO: paso de igpu en Intel 4770 a una máquina virtual qemu (Proxmox)

Estoy ejecutando la última versión de Proxmox (6.3-3 en este momento, completamente actualizada) e intento pasar la GPU integrada en mi CPU Core i7 4770 a una máquina virtual con Windows 10. Ya habilité iommu en el sistema y también le dije a grub que no permitiera que el sistema reclame el dispositivo agregando intel_iommu=on video=efifb:offa las opciones del kernel de grub. He verificado que IOMMU está realmente disponible marcando dmesg

# 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

También agregué la iGPU (y el dispositivo de audio asociado) a la lista negra para evitar que el sistema operativo host lo reclame:

# 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

Finalmente, configuré una nueva máquina virtual con Windows 10 en mi host junto con el chipset q35 y el BIOS uEFI (OVMF), ya que aparentemente esta es la forma más "compatible" de pasar a través del hardware. También tengo una pantalla externa conectada al puerto HDMI de mi host Proxmox. Entiendo que cuando la máquina virtual se inicie, debería ver esta pantalla cobrar vida. El archivo de configuración qemu de la VM se encuentra a continuación:

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

Una vez que haya hecho eso, puedo iniciar la VM. Tan pronto como inicio la máquina virtual, la pantalla pasa al modo de espera indicando que no hay señal. Sin embargo, puedo ingresar RDP al sistema y veo que Intel HD Graphics 4600 está visible en el administrador de dispositivos. Entonces instalé los controladores más recientes del sitio web de Intel. Desafortunadamente, el dispositivo no se inicia y muestra un signo de exclamación al lado. El estado del dispositivo muestra

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

Desafortunadamente, el code 43error solo significa que algo anda mal, no es muy específico sobre la causa.

Solo por curiosidad, creé una máquina virtual Ubuntu 20.04 con UEFI Bios, le pasé mi GPU y funciona perfectamente (puedo ver el escritorio, etc. en el monitor que está conectado a la placa base).

No estoy muy seguro de qué intentar a partir de este momento; cualquier ayuda sobre dónde continuar solucionando este problema sería útil.

EDITAR: He renunciado a esto después de luchar con ello por un tiempo. Parece ser un problema dentro de Windows 10 el que causa esto. Configuré una máquina virtual de escritorio Ubuntu 20.04 (con chipset q35) y le pasé mi iGPU; funciona de inmediato (puedo ver el escritorio de Ubuntu apareciendo en el monitor conectado a la placa base a través de HDMI).

información relacionada