![Как пробросить GPU/PCI-e с QEMU 7.0 на хосте macOS в гостевую систему Windows](https://rvso.com/image/1671489/%D0%9A%D0%B0%D0%BA%20%D0%BF%D1%80%D0%BE%D0%B1%D1%80%D0%BE%D1%81%D0%B8%D1%82%D1%8C%20GPU%2FPCI-e%20%D1%81%20QEMU%207.0%20%D0%BD%D0%B0%20%D1%85%D0%BE%D1%81%D1%82%D0%B5%20macOS%20%D0%B2%20%D0%B3%D0%BE%D1%81%D1%82%D0%B5%D0%B2%D1%83%D1%8E%20%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%83%20Windows.png)
У меня есть ПК с мощным графическим процессором Nvidia, который используется для майнинга только через простое приложение Windows. Для моей любви к Hackintosh я установил новый диск SATA и установил macOS Monterey 12.4, и теперь он работает гладко через интегрированный графический процессор (Intel UHD Graphics 630). Поскольку Nvidia несовместима с Monterey, и поскольку я использую Windows только для запуска приложения для майнинга, я подумал использовать QEMU для создания виртуальной машины Windows с оригинальным жестким диском и сквозным графическим процессором Nvidia. Однако это так и не сработало, так как для Nvidia не загружены kexts/драйверы. Я не знаю команду для сквозного устройства PCIe.
Вот как boot-windows.sh
выглядит файл:
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[@]}"
Из раздела «Информация о системе» я могу использовать VendorID
и ProductID
для подключения любого USB-устройства, которое я использовал с адаптером WiFi.
используя команду ниже в аргументах
-device usb-host,vendorid=0x2357,productid=0x0109
Поскольку графический процессор Nvidia представляет собой PCIe (не USB) и поскольку на нем не загружены kexts, то для него нет ProductID
идентификации, я не могу использовать тот же usb-host
аргумент.
Мой вопрос:как пробросить PCIe GPU в гостевую систему Windows?
Вот как выглядит окончательная настройка гостевой ОС Windows 11, работающей на virtio
стандартном VGA.
решение1
В настоящее время это невозможно, поскольку в macOS нет прямого эквивалента vfio
драйвера ядра Linux и API пользовательского пространства, которые Qemu использует для обеспечения работы сквозной передачи PCI(e) в Linux.
Эту функциональность можно было бы реализовать как kext, но Apple постепенно отказывается от kext в последних версиях macOS.