macOS ホスト上の QEMU 7.0 を使用して GPU/PCI-e を Windows ゲストにパススルーする方法

macOS ホスト上の QEMU 7.0 を使用して GPU/PCI-e を Windows ゲストにパススルーする方法

私は、シンプルな Windows アプリケーションを介してのみマイニングに使用される強力な Nvidia GPU を搭載した PC を持っています。Hackintosh を愛用しているため、新しい SATA ドライブをインストールし、macOS Monterey 12.4 をインストールしたところ、統合 GPU (Intel UHD Graphics 630) を介してスムーズに実行されています。Nvidia は Monterey と互換性がなく、マイニング アプリの実行には Windows のみを使用しているため、QEMU を使用して、元のハード ドライブとパススルー Nvidia GPU を備えた Windows VM を作成しようと考えました。ただし、Nvidia 用の kext/ドライバーがロードされていないため、これは機能しませんでした。パススルー 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[@]}"

システム情報から、およびを使用してVendorIDProductIDWiFi アダプターで使用した任意の USB デバイスをパススルーできます。

ここに画像の説明を入力してください

argsに以下のコマンドを使用する

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

Nvidia GPU は PCIe (USB ではない) であり、kext がロードされていないためProductID識別されず、同じ引数を使用できませんusb-host

ここに画像の説明を入力してください

私の質問はPCIe GPU を Windows ゲストにパススルーする方法?

これは、標準の VGA で Windows 11 ゲストを実行している場合の最終的なセットアップの様子ですvirtio

ここに画像の説明を入力してください

答え1

これは現在不可能です。macOS には、vfioLinux で PCI(e) パススルーを動作させるために Qemu が使用する Linux カーネル ドライバーとユーザー スペース API に直接相当するものがありません。

この機能をkextとして実装することは可能だろうしかし、Apple は最近の macOS バージョンで kext を段階的に廃止しています。

関連情報