ArchでGPUパススルーを設定しようとしています。フォローするOVMF WikiによるPCIパススルーそして他の様々なオンラインリソース。必要に応じていくつかの手順を置き換えました。たとえば、GRUBの代わりにsystemd-bootを使用しました。
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コンソールが開きますが、モニターには出力がありません。 qemuコンソールで "info pci"コマンドを実行するとvgaとオーディオIDが表示されるため、仮想マシンでGPUを使用できるようです。それが重要な場合は、Libvirtdが実行されています。 VT-dとIOMMUが有効になっています。
また、linux-vfio-ltsをインストールし、GPUファームウェアを最新バージョンにアップデートしました(どのファームウェアでもUEFIをサポートしています)。変更はありません。 7970で動作するようにする人についての報告があるので、それはうまくいくはずですが、次に何をしようとするのかわかりません。どんなアイデアがありますか?
答え1
最終的にこれはソフトウェア構成の問題のようですが、正確な原因を正確に知ることはできません。
Radeon HD7970とRX 480は私の設定でほぼ完全に動作します。
同様の問題がある人がいる場合に備えてガイドも作成しました。Arch LinuxのGPUパススルーとQEMU