Estou executando o Proxmox mais recente (6.3-3 no momento, totalmente atualizado) e tentando passar a GPU integrada em minha CPU Core i7 4770 para uma VM do Windows 10. Já habilitei o iommu no sistema e também disse ao grub para não permitir que o sistema reivindique o dispositivo adicionando intel_iommu=on video=efifb:off
às opções do kernel do grub. Eu verifiquei que o IOMMU está realmente disponível verificando 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
Também adicionei o iGPU (e o dispositivo de áudio associado) à lista negra para evitar que o sistema operacional host o reivindique:
# 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
Por fim, configurei uma nova VM do Windows 10 em meu host junto com o chipset q35 e o BIOS uEFI (OVMF), pois essa é aparentemente a maneira mais "compatível" de passar pelo hardware. Também tenho uma tela externa conectada à porta HDMI do meu host Proxmox. Entendo que quando a VM for inicializada, devo ver essa tela ganhar vida. O arquivo de configuração qemu da VM está abaixo:
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
Depois de fazer isso, posso inicializar a VM. Assim que inicializo a VM, a tela entra em modo de espera indicando nenhum sinal. No entanto, posso fazer RDP no sistema e vejo que o Intel HD Graphics 4600 está visível no gerenciador de dispositivos. Então instalei os drivers mais recentes do site da Intel. Infelizmente, o dispositivo não inicia e mostra um ponto de exclamação próximo a ele. O status do dispositivo mostra
Windows has stopped this device because it has reported problems. (Code 43)
Infelizmente, o code 43
erro significa apenas que algo está errado, não é muito específico sobre o que está causando isso.
Só por curiosidade, criei uma VM Ubuntu 20.04 com UEFI Bios e passei minha GPU para ela e ela funciona perfeitamente (posso ver o desktop etc. no monitor que está conectado à placa-mãe).
Não tenho muita certeza do que tentar a partir deste ponto - qualquer assistência sobre onde continuar corrigindo isso seria útil.
EDITAR: Desisti disso depois de lutar por um tempo. Parece ser um problema no Windows 10 que causa isso. Eu configurei uma VM Ubuntu 20.04 Desktop (com chipset q35) e passei meu iGPU para ela - funciona imediatamente (posso ver o desktop Ubuntu aparecendo no monitor conectado à placa-mãe via HDMI).