Мой реквизит:
- Asus ROG STRIX X299-E
- Intel i7-7820X
- Nvidia GTX1060
- 2x16Gb Corsair (в преспективе -- 8x16Gb для прочих виртуалок)
- Raid5 3/2 из минимальных трёх хардов ~2Tb с lvm поверх /dev/md0, для упрощённого роста места.
Минимальные требования к реквизиту:
- От процессора -- подержка VT-d у Intel или Vi у AMD, для проброса IOMMU-групп
- От матери -- адекватные IOMMU-группы, например чтобы с видеокартой не надо было пробрасывать все USB-контроллеры, но это в теории можн обойти никогда-не-станущими-мейнлайном патчами на ACS override
Начинаем.
Ставим базовую систему.
Включаем в автозагрузку модули vfio vfio_iommu_type1 vfio_pci
и vfio_virqfd
Добавляем в init-строку ядра intel_iommu=on
или amd_iommu=on
В случае первого GPU так же имеет смысл добавить video=efifb:off
Блеклистим модули, которые могут использовать пробрасывамые девайсы, обычно это какие-нибудь nouveau
и snd-hda
Параметризуем модуль vfio-pci
опцией ids=10de:1c03,10de:10f1
с vendorId:productId PCI-девайсов из всех IOMMU-групп, девайсы которых хотим пробрасывать.
Список девйсов по IOMMU-группам вместе с их vendorId:productId можно получить чем-то типа
find /sys/kernel/iommu_groups/*/devices -mindepth 1 | sort -t / -k 6 | awk -F / '{cmd = "lspci -nns " $7; cmd | getline out; close(cmd); print "Group",$5 ":", out;}'
Ставим qemu
, libvirt
, ovmf
, firewalld
и dhcp
(который сервер)
Говорим libvirt где лежат nvram'ы ovmf и даём ультимативный доступ к системе (опционально, но упростит взаимодействие с kvm и создание темплейтов nvram'ов):
/etc/libvirt/qemu.conf:
...
user=root
group=root
nvram = [
"/usr/share/ovmf/x64/OVMF_CODE.fd:/usr/share/ovmf/x64/OVMF_VARS.fd"
]
...
systemctl enable libvirtd libvirt-guests firewalld dhcpd4
Описываем домен, пользуясь документацией:
https://libvirt.org/formatdomain.html
моим результатом было: https://gist.github.com/iamtakingiteasy/7d4bc7a580deef0eab357e9d19d68d03
Определяем:
virsh define win10-cirnos.xml
Стартуем:
virsh start win10-cirnos
ставим гостя, настраивем.
Можно игорять.
Справочная документация:
https://wiki.archlinux.org/index.php/PCI_passthrough_via_OVMF
https://wiki.debian.org/VGAPassthrough
https://www.kernel.org/doc/Documentation/vfio.txt