Velmi krátký návod jak zprovoznit grafickou kartu skrze VGA Passthrough.
Instalace balíčků
Celý proces zahájíme instalací potřebných balíčků
apt update && apt upgrade
apt install libvirt-daemon-system libvirt-clients qemu-kvm qemu-utils virt-manager ovmf
Je potřeba najít informace o PCI zařízeních, které bude využívat pouze virtuální počítač. V mém případě jde o grafickou kartu AMD Radeon RX570, HDMI výstup grafické karty, řadič M.2 disku a USB 3.0 kořen.
$ lspci -vnn
...
05:00.0 Non-Volatile memory controller [0108]: Samsung Electronics Co Ltd NVMe SSD Controller SM981/PM981/PM983 [144d:a808] (prog-if 02 [NVM Express])
Subsystem: Samsung Electronics Co Ltd NVMe SSD Controller SM981/PM981/PM983 [144d:a801]
Flags: bus master, fast devsel, latency 0, IRQ 39, NUMA node 0, IOMMU group 23
Memory at fc800000 (64-bit, non-prefetchable) [size=16K]
Capabilities: <access denied>
Kernel driver in use: vfio-pci
Kernel modules: nvme
…
0f:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Ellesmere [Radeon RX 470/480/570/570X/580/580X/590] [1002:67df] (rev ef) (prog-if 00 [VGA controller])
Subsystem: Micro-Star International Co., Ltd. [MSI] Radeon RX 570 Armor 8G OC [1462:341b]
Flags: bus master, fast devsel, latency 0, IRQ 67, IOMMU group 27
Memory at d0000000 (64-bit, prefetchable) [size=256M]
Memory at e0000000 (64-bit, prefetchable) [size=2M]
I/O ports at f000 [size=256]
Memory at fcc00000 (32-bit, non-prefetchable) [size=256K]
Expansion ROM at 000c0000 [disabled] [size=128K]
Capabilities: <access denied>
Kernel driver in use: vfio-pci
Kernel modules: amdgpu
0f:00.1 Audio device [0403]: Advanced Micro Devices, Inc. [AMD/ATI] Ellesmere HDMI Audio [Radeon RX 470/480 / 570/580/590] [1002:aaf0]
Subsystem: Micro-Star International Co., Ltd. [MSI] Ellesmere HDMI Audio [Radeon RX 470/480 / 570/580/590] [1462:aaf0]
Flags: bus master, fast devsel, latency 0, IRQ 75, IOMMU group 29
Memory at fcd60000 (64-bit, non-prefetchable) [size=16K]
Capabilities: <access denied>
Kernel driver in use: vfio-pci
Kernel modules: snd_hda_intel
...
11:00.3 USB controller [0c03]: Advanced Micro Devices, Inc. [AMD] Matisse USB 3.0 Host Controller [1022:149c] (prog-if 30 [XHCI])
Subsystem: ASRock Incorporation Matisse USB 3.0 Host Controller [1849:ffff]
Flags: bus master, fast devsel, latency 0, IRQ 65, IOMMU group 31
Memory at fc900000 (64-bit, non-prefetchable) [size=1M]
Capabilities: <access denied>
Kernel driver in use: vfio-pci
Kernel modules: xhci_pci
Důležité informace jsou číslo PCI (tedy 0000:0e:00 a 0000:e0:01) a jejich ID [1002:67df] a [1002:aaf0] a další, které použijeme v následujících příkazech.
Editujeme soubor local.conf a doplníme potřebné údaje. Alias a především hodnotu options vfio-pci ids
…
softdep amdgpu pre: vfio-pci
softdep snd_hda_intel pre: vfio-pci
options vfio-pci ids=1002:67df,1002:aaf0,1022:149c,1022:1487
options kvm ignore_msrs=1
options vfio-pci disable_vga=1
Dále soubor blacklist.conf uvedeme drivery, které nechceme načíst při spuštění systému
...
blacklist amdgpu
blacklist snd_hda_intel
Odebereme PCI zařízení z Linuxu. V tento okamžik nebude v použitelný mimo virtuálního klienta. Je možnost nastavit hardware i tak, že je používán oběma systémy, ale na mém počítači běží Windows klient po celou dobu, takže tuto variantu nepoužívám.
echo '0000:0f:00.0' | sudo tee /sys/bus/pci/devices/0000:0f:00.0/driver/unbind
echo '0000:0f:00.1' | sudo tee /sys/bus/pci/devices/0000:0f:00.1/driver/unbind
A přidáme do jádra potřebné moduly do souboru modules. Tím zajistíme, že se přiřadí při každém spuštění počítače pod ovladač vfio
sudo modprobe vfio
sudo modprobe vfio_pci
echo 1002 67df | sudo tee /sys/bus/pci/drivers/vfio-pci/new_id
echo 1002 aaf0 | sudo tee /sys/bus/pci/drivers/vfio-pci/new_id
Veškeré nastavení je potřeba uložit do zaváděcího oddílu initramfs disku ve všech používaných jádrech
update-initramfs -u -k all
Dále je potřeba upravit příkazy kernelu v grubu. Příkaz video=efifb:off je nutné použít pro správné fungování grafické karty AMD RX580.
...
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt video=efifb:off vfio_pci.ids=1002:67df,1002:aaf0,1022:149c,1022:1487"
...
Posledním krokem je aktualizace grubu a uložení změn.
update-grub
AMD NAVI ResetBug patch
Karty od AMD trpí drobnou chybkou v kernelu, která způsobí zamrznutí karty a její odpojení. Je nutné použít patch. Nejprve aktualizujeme systém a instalujeme potřebné balíčky.
Nestává se to často. Obvykle po uspání či hibernaci hostitele.
apt update && apt dist-upgrade
apt install pve-headers git dkms build-essential
Nyní stáhneme projekt z GitHubu a nainstalujeme
git clone https://github.com/gnif/vendor-reset.git
cd vendor-reset
dkms install .
Instalace patche po spuštění a konečný reboot systému
echo "vendor-reset" >> /etc/modules
update-initramfs -u
shutdown -r now