我有一台配备强大 Nvidia GPU 的 PC,仅通过简单的 Windows 应用程序即可进行挖矿。出于对 Hackintosh 的热爱,我安装了一个新的 SATA 驱动器并安装了 macOS Monterey 12.4,现在它可以通过集成 GPU(Intel UHD Graphics 630)顺利运行。由于 Nvidia 与 Monterey 不兼容,而且我仅使用 Windows 运行挖矿应用程序,所以我想使用 QEMU 创建一个带有原始硬盘和直通 Nvidia GPU 的 Windows VM。然而,这从未奏效,因为没有为 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 GPU 是 PCIe(不是 USB),并且没有加载 kext,因此没有ProductID
识别它,我无法使用相同的usb-host
参数。
我的问题是如何将 PCIe GPU 直通至 Windows 客户机?
这是在标准 vga 上运行的 Windows 11 客户机的最终设置的样子virtio
。
答案1
目前这是不可能的,macOS 没有与 Linux 的vfio
内核驱动程序和用户空间 API 直接等效的 API,Qemu 使用这些 API 来实现 PCI(e) 直通在 Linux 上工作。
可以将此功能作为 kext 实现,但 Apple 在最近的 macOS 版本中正在逐步淘汰 kext。