pci passthrough

pci passthrough


ВАЖНО: в виртуалку стоит отдавать только вторую видеокарту, основную не стоит
ВАЖНО: мобильные полувидюхи (гибридные и максовые) не подходят, это вообще не видеокарты целиком а видеочипы без половины обвязки

1) для начала определим pci id и IOMMU group для видеокарты
#!/bin/bash
shopt -s nullglob
for d in /sys/kernel/iommu_groups/*/devices/*; do
n=${d#*/iommu_groups/*}; n=${n%%/*}
printf 'IOMMU Group %s ' "$n"
/sbin/lspci -nns "${d##*/}"
done;

Внимание: для видеокарты устройства два, видео и аудио, запомнить нужно оба

для примера здесь и далее pci id будут 1002:6739 и 1002:aa88

2) создаём конфиг vfio модуля (говорим какие pci устройства не будут работать с родными дровами чтобы они не мешали прокинуть эти устройства в систему), файл /etc/modprobe.d/vfio.conf
options vfio-pci ids=1002:6739,1002:aa88


3) генерируем новый initrd
sudo dracut -f


4) ребутаемся
sudo systemctl reboot


5) проверяем с каким драйвером наше pci устройство
sudo lspci -vvvv
inxi -Gxxx

первая команда универсальная, вторая годится только для видеокарт, в обоих случаях ищем нужное устройство и смотрим чтобы драйвер значился как vfio-pci
ну и не помешает проверить что модуль vfio вообще загружен и работает
lsmod | grep vfio


6) создаём виртуальную машину
тут есть несколько ключевых пунктов:

6.1) она должна быть efi а не легаси (пакет qemu-ovmf)

6.2) если в роли гостя винда то добавляем в xml конфиг виртуалки такие строки:
    <hyperv>
<relaxed state='on'/>
<vapic state='on'/>
<spinlocks state='on' retries='8191'/>
</hyperv>
<kvm>
<hidden state='on'/>
</kvm>

внурь features
Это нужно в основном для видюх nvidia серии geforce чтобы скрыть от их драйвера что они трудятся в виртуальной среде (это вроде как и не запрещено и не разрешено, и работать драйвер внутри виртуалки отказывается) но лучше купить nvidia quadro а ещё лучше amd

6.3) и убираем возможность усыплять виртуалку (всё равно pci устройство не даст этого сделать в лучшем случае или будет крах в худшем)
  <pm>
<suspend-to-mem enabled='no'/>
<suspend-to-disk enabled='no'/>
</pm>


6.4) нет единого мнения добавлять устройства pci сразу или после установки системы

6.5) с некоторыми видеодрайверами можно отображать картинку на виртуальную видюху и с реальную с одного экрана, а в некоторых нет.

Содержание