使用 qemu 的 GPU 直通 - 无视频输出 (AMD 7970)

使用 qemu 的 GPU 直通 - 无视频输出 (AMD 7970)

我正在尝试在 Arch 上设置 GPU 直通。我跟着通过 OVMF wiki 的 PCI 直通以及一些其他在线资源。我根据需要替换了一些步骤,例如我使用 systemd-boot 而不是 GRUB。

一切似乎都正确并且正常工作,除了当我启动 qemu 脚本时屏幕上没有输出。 VM 开始按预期使用设置的内存量,但没有视频输出。

lspci -vnn
01:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Tahiti XT [Radeon HD 7970/8970 OEM / R9 280X] [1002:6798] (prog-if 00 [VGA controller])
    Subsystem: Gigabyte Technology Co., Ltd Device [1458:254d]
    Flags: fast devsel, IRQ 16
    Memory at e0000000 (64-bit, prefetchable) [size=256M]
    Memory at f7b00000 (64-bit, non-prefetchable) [size=256K]
    I/O ports at e000 [size=256]
    Expansion ROM at f7b40000 [disabled] [size=128K]
    Capabilities: <access denied>
    Kernel driver in use: vfio-pci
    Kernel modules: radeon

01:00.1 Audio device [0403]: Advanced Micro Devices, Inc. [AMD/ATI] Tahiti XT HDMI Audio [Radeon HD 7970 Series] [1002:aaa0]
    Subsystem: Gigabyte Technology Co., Ltd Device [1458:aaa0]
    Flags: fast devsel, IRQ 17
    Memory at f7b60000 (64-bit, non-prefetchable) [disabled] [size=16K]
    Capabilities: <access denied>
    Kernel driver in use: vfio-pci
    Kernel modules: snd_hda_intel

00:01.0 PCI bridge [0604]: Intel Corporation Xeon E3-1200 v2/3rd Gen Core processor PCI Express Root Port [8086:0151] (rev 09) (prog-if 00 [Normal decode])
    Flags: bus master, fast devsel, latency 0, IRQ 26
    Bus: primary=00, secondary=01, subordinate=01, sec-latency=0
    I/O behind bridge: 0000e000-0000efff
    Memory behind bridge: f7b00000-f7bfffff
    Prefetchable memory behind bridge: 00000000e0000000-00000000efffffff
    Capabilities: <access denied>
    Kernel driver in use: pcieport
    Kernel modules: shpchp

VGA 和 HDMI 音频设备均由 vfio-pci 声明。

lspci -nnk

01:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Tahiti XT [Radeon HD 7970/8970 OEM / R9 280X] [1002:6798]
    Subsystem: Gigabyte Technology Co., Ltd Device [1458:254d]
    Kernel driver in use: vfio-pci
    Kernel modules: radeon
01:00.1 Audio device [0403]: Advanced Micro Devices, Inc. [AMD/ATI] Tahiti XT HDMI Audio [Radeon HD 7970 Series] [1002:aaa0]
    Subsystem: Gigabyte Technology Co., Ltd Device [1458:aaa0]
    Kernel driver in use: vfio-pci
    Kernel modules: snd_hda_intel

Qemu启动脚本:

#!/bin/bash

cp /usr/share/edk2.git/ovmf-x64/OVMF_VARS-pure-efi.fd /tmp/my_vars.fd
qemu-system-x86_64 \
-enable-kvm \
-m 2048 \
-cpu host,kvm=off \
-vga none \
-device vfio-pci,host=01:00.0,multifunction=on \
-device vfio-pci,host=01:00.1 \
-drive if=pflash,format=raw,readonly,file=/usr/share/edk2.git/ovmf-x64/OVMF_CODE-pure-efi.fd \
-drive if=pflash,format=raw,file=/tmp/my_vars.fd

脚本中的所有文件都存在。执行时,qemu 控制台在主机上打开,但监视器上没有输出。 GPU 似乎可用于虚拟机,因为当我在 qemu 控制台中运行“info pci”命令时,我可以看到 vga 和音频 ID。如果重要的话,Libvirtd 正在运行。 VT-d 和 IOMMU 已启用。

我还安装了 linux-vfio-lts 并将 GPU 固件更新到最新版本(任一固件都支持 UEFI),没有任何变化。有报道称人们让它与 7970 一起工作,所以它应该可以工作,但我完全不知道下一步要尝试什么。有任何想法吗?

答案1

最终,这似乎是一个软件配置问题,尽管我无法查明确切原因。

Radeon HD7970 和 RX 480 现在在我的设置下几乎可以完美运行。

如果有人遇到类似问题,我还写了一份指南:Arch Linux 上的 GPU 直通与 QEMU

相关内容