安装驱动程序后,QEMU Radeon GPU 直通出现错误代码 43

安装驱动程序后,QEMU Radeon GPU 直通出现错误代码 43

我正在尝试做一个GPU 直通我确实得到了一些结果,在安装驱动程序之前它可以工作,但之后它只显示引导加载,然后变成黑屏。使用 VNC 我设法得到了这个图像:

我正在运行它:

qemu-system-x86_64 \
    -name 'Win10' \
    -machine type=q35,accel=kvm,kernel_irqchip=on,vmport=off \
    -m 32G \
    -mem-path /run/hugepages/kvm \
    -cpu host,kvm=off,+kvm_pv_unhalt,+kvm_pv_eoi,topoext,amd-stibp=off,hv_relaxed,hv-vapic,hv-spinlocks=8191,hv_vpindex,hv-runtime,hv_time,hv-synic,hv-stimer,hv-vendor-id=123456789ab,hv-reset,hv-frequencies \
    -smp 16,sockets=1,cores=8,threads=2 \
    -nodefaults \
    -bios /usr/share/ovmf/OVMF.fd \
    -smbios 'type=1,uuid=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' \
    -netdev user,id=n0,hostfwd=tcp::5900-:5900 \
    -device e1000,netdev=n0 \
    -object input-linux,id=kbd0,evdev=/dev/input/by-id/usb-SONiX_USB_DEVICE-event-kbd,grab_all=on,repeat=on \
    -object input-linux,id=mouse0,evdev=/dev/input/by-id/usb-Razer_Razer_DeathAdder_Essential-event-mouse \
    -device virtio-mouse-pci \
    -device virtio-keyboard-pci \
    -monitor telnet::5555,server,nowait \
    -nographic \
    -vga none \
    -display none \
    -device vfio-pci,host=2d:00.0,multifunction=on,x-vga=on,x-pci-sub-vendor-id=0x1458,x-pci-sub-device-id=0x232c \
    -device vfio-pci,host=2d:00.1 \
    -rtc base=localtime,clock=host,driftfix=slew \
    -object iothread,id=io0 \
    -drive 'if=none,id=disk0,format=qcow2,aio=threads,cache=writeback,l2-cache-size=64M,cache-clean-interval=900,file=win.qcow2' \
    -device virtio-blk-pci,drive=disk0,iothread=io0 \
    -drive "media=cdrom,file=$HOME/virtio.iso" \
    -boot c
  • kernel_irqchip=on被建议这里这里
  • vmport=off被建议这里
  • kvm=off并被hv-vendor-id=建议这里这里
  • +kvm_pv_unhalt并被+kvm_pv_eoi建议这里
  • topoext被建议这里
  • amd-stibp=off被建议这里
  • hv_relaxed,,,,,,,,,,并被建议hv-vapichv-spinlocks​​​​​​hv_vpindexhv-runtimehv_timehv-synichv-stimerhv-resethv-frequencies这里这里这里
  • x-pci-sub-vendor-id并被x-pci-sub-device-id建议这里
  • 我还尝试romfile=按照建议使用 GPU-Z 在设备中提取 rom这里这里这里

我还将我的内核命令附加了amd_iommu=on iommu=pt pcie_acs_override=downstream,multifunction nofb video=vesafb:off,efifb:off"。这是建议这里这里这里

在运行虚拟机之前,我运行以下脚本:

sysctl vm.nr_hugepages=16384 vm.min_free_kbytes=112640 kernel.shmmax=34359738368

sync
echo 3 > /proc/sys/vm/drop_caches
echo 1 > /proc/sys/vm/compact_memory

echo 0 > /sys/module/kvm/parameters/report_ignored_msrs
echo 1 > /sys/module/kvm/parameters/ignore_msrs
echo 1 > /sys/module/vfio_iommu_type1/parameters/allow_unsafe_interrupts


systemctl stop lightdm
systemctl isolate multi-user

while systemctl is-active --quiet lightdm; do
    sleep 1
done

echo 0 > /sys/class/vtconsole/vtcon1/bind

echo efi-framebuffer.0 > /sys/bus/platform/drivers/efi-framebuffer/unbind || :
echo 1 > /sys/bus/platform/drivers/efi-framebuffer/unbind || :

echo '0000:2d:00.1' > '/sys/bus/pci/devices/0000:2d:00.1/driver/unbind' || :

echo 'vfio-pci' > '/sys/bus/pci/devices/0000:2d:00.0/driver_override'
echo 'vfio-pci' > '/sys/bus/pci/devices/0000:2d:00.1/driver_override'
echo '1002 ab28' > /sys/bus/pci/drivers/vfio-pci/new_id
echo '1002 73bf' > /sys/bus/pci/drivers/vfio-pci/new_id
  • 大部分建议这里
  • vm.nr_hugepages被建议这里
  • drop_caches并被compact_memory建议这里
  • ignore_msrs并被report_ignored_msrs建议这里这里
  • allow_unsafe_interrupts被建议这里这里

正如您所看到的,我遵循了几个建议,即使对于那些与代码 43 无关的建议,我也不知道该如何解决......

电脑规格

  • 操作系统:Ubuntu 20.04.4 内核 5.15.0-41-generic
  • 处理器:AMD Ryzen 9 5900X
  • 显卡:AMD Radeon RX 6900 XT
  • 主板:MSI B550 Gaming Carbon WiFi
  • QEMU:4.2.1(我也尝试过7.0.0)

答案1

我可以通过在 BIOS 中禁用可调整大小的 BAR 来解决我的 RX 6900 XT 的问题。

答案2

尝试使用下面的 grub 命令

amd_iommu=on iommu=pt nofb nomodeset video=vesafb:off,efifb:off vga=normal i915.modeset=0

或者

amd_iommu=on iommu=pt nofb nomodeset video=efifb:off vga=normal i915.modeset=0

相关内容