So leiten Sie GPU/PCI-e mit QEMU 7.0 auf einem macOS-Host an einen Windows-Gast weiter

So leiten Sie GPU/PCI-e mit QEMU 7.0 auf einem macOS-Host an einen Windows-Gast weiter

Ich habe einen PC mit einer leistungsstarken Nvidia-GPU, die nur über eine einfache Windows-Anwendung zum Mining verwendet wird. Aus Liebe zu Hackintosh habe ich ein neues SATA-Laufwerk eingebaut und macOS Monterey 12.4 installiert. Jetzt läuft es problemlos über die integrierte GPU (Intel UHD Graphics 630). Da Nvidia nicht mit Monterey kompatibel ist und ich Windows nur zum Ausführen der Mining-App verwende, dachte ich daran, mit QEMU eine Windows-VM mit der Originalfestplatte und der Passthrough-Nvidia-GPU zu erstellen. Das hat jedoch nie funktioniert, da keine Kexts/Treiber für Nvidia geladen sind. Ich kenne den Befehl für das Passthrough-PCIe-Gerät nicht.

So boot-windows.shsieht die Datei aus:

DISK="/dev/disk1"
OVMFDIR="usr/share/edk2/ovmf" #for enabling secure EFI boot
diskutil umountDisk "$DISK" #to make sure it's forcibly unmounted
MY_OPTIONS="+ssse3,+sse4.2,+popcnt,+avx,+aes,+xsave,+xsaveopt,check"
ALLOCATED_RAM="8G" #GB

args=(
  -m "$ALLOCATED_RAM"
  -vga virtio
  -display cocoa
  -usb
  -device usb-tablet
  -smp 4,cores=4,sockets=2
  -drive if=ide,index=2,file="$DISK",format=raw
  -machine type=q35
  -accel hvf
  #-drive file=/Volumes/OSes/win/21H1.iso,media=cdrom,index=0
  #-drive file=virtio-win-0.1.208.iso,media=cdrom
  -nic user,model=virtio
  -rtc base=localtime,clock=host
  -cpu Nehalem,hv_relaxed,hv_spinlocks=0x1fff,hv_vapic,hv_time 
  -device intel-hda
  -drive if=pflash,format=raw,readonly=on,file="$OVMFDIR"/OVMF_CODE.fd
  -drive if=pflash,format=raw,readonly=on,file="$OVMFDIR"/OVMF_VARS.fd
  -boot c
)

qemu-system-x86_64 "${args[@]}"

In den Systeminformationen kann ich VendorIDund ProductIDzum Weiterleiten an jedes USB-Gerät verwenden, das ich mit dem WLAN-Adapter verwendet habe.

Bildbeschreibung hier eingeben

Verwenden Sie den folgenden Befehl in den Argumenten

-device usb-host,vendorid=0x2357,productid=0x0109

Da es sich bei der Nvidia-GPU um eine PCIe-GPU (keine USB-GPU) handelt und keine Kexts geladen sind und es daher keine ProductIDIdentifizierung dafür gibt, kann ich nicht dasselbe usb-hostArgument verwenden.

Bildbeschreibung hier eingeben

Meine Frage istSo leiten Sie die PCIe-GPU an den Windows-Gast weiter?

So sieht das endgültige Setup mit dem Windows 11-Gast aus, der auf dem virtioStandard-VGA läuft.

Bildbeschreibung hier eingeben

Antwort1

Dies ist derzeit nicht möglich, da macOS kein direktes Äquivalent zum Kernel-Treiber und zur User Space-API von Linux hat vfio, die Qemu nutzt, damit PCI(e)-Passthrough unter Linux funktioniert.

Es wäre möglich, diese Funktionalität als Kext zu implementieren, aber Apple schafft Kexts in neueren macOS-Versionen nach und nach ab.

verwandte Informationen