![macOS ホスト上の QEMU 7.0 を使用して GPU/PCI-e を Windows ゲストにパススルーする方法](https://rvso.com/image/1671489/macOS%20%E3%83%9B%E3%82%B9%E3%83%88%E4%B8%8A%E3%81%AE%20QEMU%207.0%20%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%20GPU%2FPCI-e%20%E3%82%92%20Windows%20%E3%82%B2%E3%82%B9%E3%83%88%E3%81%AB%E3%83%91%E3%82%B9%E3%82%B9%E3%83%AB%E3%83%BC%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95.png)
私は、シンプルな 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[@]}"
システム情報から、およびを使用してVendorID
、ProductID
WiFi アダプターで使用した任意の 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 には、vfio
Linux で PCI(e) パススルーを動作させるために Qemu が使用する Linux カーネル ドライバーとユーザー スペース API に直接相当するものがありません。
この機能をkextとして実装することは可能だろうしかし、Apple は最近の macOS バージョンで kext を段階的に廃止しています。