- PVSM.RU - https://www.pvsm.ru -

Проброс видеокарты с помощью VFIO может быть знаком немногим, но по факту является очень удобным способом решить ряд насущных задач и упростить рабочий процесс в целом. В этом проекте мы настроим нужную конфигурацию из под Fedora 34 и поочередно пробросим две разные видеокарты в VM, попутно оценив полученную производительность.
Прежде чем перейти ко всем подробностям, хочу вкратце описать, с чем вообще мы будем иметь дело, так как эти темы могут оказаться для вас незнакомыми. Технология VFIO является достаточно нишевой, и о ней мало кто знает.
Какой вообще смысл заморачиваться и реализовывать подобное?
При этом нужно помнить, что используемое вами аппаратное обеспечение играет здесь важную роль, поскольку является основой работоспособности всего решения. Вот некоторые из требований, которые необходимо учесть:
Так что, если вы много играете в соревновательные игры, то лучше прояснить этот момент заранее.
Надеюсь, что данное введение помогло вам понять, что к чему. Теперь же окунемся в сам процесс.
Мы будем тестировать эту конфигурацию на оборудовании, о котором я уже писал [7]. Особенность данной конфигурации в том, что мы используем AMD Ryzen 7 5700 APU на материнской плате mITX и один выделенный GPU. Это дает нам большие возможности в малых масштабах.
Да, существуют конфигурации, в которых можно реализовать VFIO с помощью одного GPU и пробросить его между основной ОС и VM, но такой конфиг будет сложновато использовать.
В качестве ОС у меня стоит Fedora 34. Для того чтобы все наладить, я воспользовался несколькими ресурсами:
Начальное тестирование я решил произвести с Nvidia GT710. Она медленная, плохо работает под Linux с опен-сорсными драйверами Nouveau, но зато оказалась под рукой. Еще я недавно услышал, что Nvidia все-таки повернулись лицом к клиентам, позволив использовать видеокарты GeForce в VM Windows 10 без костылей [10].
Сам процесс тестирования относительно прост. Единственные сложности, с какими я столкнулся – это проблемы PEBCAK [11]. Возможно, причина была в том, что тестированием я занимался уже после работы. Основная проблема – это небольшие опечатки в конфигурации dracut или ошибки в ID устройств, добавляемых в параметры загрузки ядра. Когда я это выяснил и исправил, процесс пошел как по маслу.
Все руководство я здесь переписывать не стану – если вас заинтересуют дополнительные детали, прошу обратиться к приведенным выше ресурсам. К тому же эти ресурсы наверняка будут оперативнее обновляться в случае каких-либо нововведений или появления дополнительных возможностей.
Что касается самого процесса, то в общих чертах нужно проделать следующее:
auto, так что обязательно переключите на enabled.sudo dnf install @virtualization.amd_iommu=on rd.driver.pre=vfio-pci.
/etc/sysconfig/grub.grub2-mkconfig -o /etc/grub2-efi.cfglspci -nnk. ID будут выглядеть как 1002:aaf0.vfio-pci, чтобы избежать перехвата драйвером видеокарты управления ей. В противном случае пробросить видеокарту в VM не удастся.
vfio-pci.ids=1002:67df,1002:aaf0.initramfs загружает необходимые драйверы vfio на ранней стадии загрузки.
/etc/dracut.conf.d/10-vfio.conf с содержимым add_drivers+=" vfio_pci vfio vfio_iommu_type1 vfio_virqfd ".initramfs: dracut -f.virt-manager, выберите VM, которой хотите пробросить видеокарту, и добавьте два устройства PCIe: видеокарту и связанное с ней аудиоустройство.
virt-manager путем выбора чипсета Q35 и установки прошивки на OVMF_CODE.df.Display Spice.
Если вы это видите, значит, проброс выполнен успешно. Поздравляю!
Начальное тестирование с Nvidia GT710 прошло успешно. Под «успешно» я подразумеваю, что видеокарта вывела изображение без автоматической установки своих драйверов.

Печально известный код ошибки Nvidia: 43
Чтобы исправить эту проблему, я скачал последние официальные драйверы Nvidia, чего оказалось достаточно – ошибка 43 исчезла.

Если ваша видеокарта исправно отображается в Device Manager, то все в порядке.
Однако веселья поубавилось, когда стало очевидно, что моя видеокарта слаба. Очень слаба. Несмотря на это, я решил продемонстрировать ее вычислительную удаль, скачав демку Art of Rally [12].
Примечание: игра просто улетная, обязательно попробуйте!
И демка запустилась! Не идеально, но все же запустилась.

Не передается: ужасная частота кадров.
Удовлетворенный результатами, я решил пойти до конца и заменить эту карту на AMD RX570, которую «одолжил» у недавно собранного ПК [13].
Переставив видеокарту, я поменял ID устройств на новые значения и продолжил приключение с VFIO. На этот раз Windows автоматически установила драйверы видео, и все заработало сходу. Хотя это меня удивило, так как в моем опыте всегда что-то да идет не так. Всегда.
Я установил последние драйверы с сайта AMD и продолжил тестирование.
Furmark? Работает ожидаемым образом.

VM слева, показатели быстродействия VM справа, куча кабелей повсюду
GTA IV? Лагает не по-детски, но работает.

Слева: GTA IV напрямую с GPU. Справа: стриминг GTA IV через Parsec
В этой ситуации VM получила 4 ядра CPU, и я не делал ни привязки потоков к процессору, ни каких-либо оптимизаций, так что результат получился неплохой.
Так как я собрал этот конфиг на своей текущей рабочей/серверной машине, ситуация с хранилищем оказалась витиеватой. Другая VM, которая выполняет все службы, имеет полный доступ к двум дискам по 12Тб, а сетевое хранилище мне настраивать не хотелось. Единственными свободными точками у меня были:
Позже я решил расширить разделы под хранение игр до 375Гб, для чего потребовалось избавиться от дополнительного резервного пространства. Такая настройка вполне неплоха, но я теряю некоторые выгоды от виртуализации Windows.
Относительно передачи этого хранилища VM у меня было два варианта:
virtio: необходимо вручную загрузить и установить драйверы для распознания этих дисков Windows, хотя быстродействие должно оказаться выше, чем в случае с SATA.
Я начал с SATA и провел сравнение с virtio при помощи CrystalDiskMark.

Слева: SATA. Справа: virtio
Virtio несколько вырвался вперед в этих сравнениях, но меня бы наверняка устроила и производительность SATA.
Одна из основных причин, по которым я настраиваю подобные сборки – это сам процесс воплощения технической идеи. Звучит странно, но иногда меня больше радует сам факт успешного завершения технической части и реализация чего-то нового, чем реальное дальнейшее использование этого.
Ранее я получил смешенный результат проброса видеокарты на ноутбуке ThinkPad T430 с eGPU [14], умудрившись запустить на виртуальной машине GTA V, хотя в другой тестовой сессии возникли проблемы, вызванные, как оказалось, дефектом CPU (множество ошибок PCIe).
В дальнейшем я планирую продолжить подобные эксперименты. Хочу задействовать эту VM в качестве игровой, чтобы стримить с нее игры через Parsec [15]на любое устройство. Один из вариантов – это использовать Nvidia Shield TV [16] в качестве маломощного блока, способного выполнять стриминг. В качестве альтернативы можно сделать сборку на базе миниатюрного ПК Dell/Lenovo/HP, который имеет достаточно мощи для работы с 4K дисплеем, потребляя при этом не так много энергии. Подробнее об этом в будущих постах.
Что касается хранилища, то я планирую его скорый апгрейд. Либо поменяю только диски, либо обновлю всю сборку, так как ATX-платы поддерживают больше SATA подключений и карт расширений. Если еще вписать все это в корпус типа Masterbox Q500L [17], снарядив его хорошим БП, то даже тогда получится все еще относительно небольшая конфигурация.
Автор: Дмитрий Брайт
Источник [18]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/igry/369069
Ссылки в тексте:
[1] Проброс GPU: https://wiki.archlinux.org/title/PCI_passthrough_via_OVMF
[2] VFIO: https://www.kernel.org/doc/Documentation/vfio.txt
[3] IOMMU: https://en.wikipedia.org/wiki/Input%E2%80%93output_memory_management_unit
[4] virt-manager: https://virt-manager.org/
[5] Level1Techs: https://www.youtube.com/user/teksyndicate
[6] Вот неплохой скрипт: https://wiki.archlinux.org/title/PCI_passthrough_via_OVMF#Ensuring_that_the_groups_are_valid
[7] я уже писал: https://ounapuu.ee/posts/2021/08/07/amd-ryzen-7-5700-first-impressions
[8] Руководство начинающего: https://forum.level1techs.com/t/the-vfio-and-gpu-passthrough-beginners-resource/129897
[9] Руководство по Fedora: https://forum.level1techs.com/t/fedora-33-ultimiate-vfio-guide-for-2020-2021-wip/163814
[10] позволив использовать видеокарты GeForce в VM Windows 10 без костылей: https://www.nvidia.com/en-us/geforce/news/outriders-game-ready-driver/
[11] PEBCAK: https://en.wiktionary.org/wiki/PEBCAK
[12] демку Art of Rally: https://funselektor.itch.io/art-of-rally
[13] недавно собранного ПК: https://ounapuu.ee/posts/2021/08/21/turning-leftover-parts-into-a-decent-gaming-pc/
[14] проброса видеокарты на ноутбуке ThinkPad T430 с eGPU: https://www.reddit.com/r/linuxmasterrace/comments/7ry4jr/gta_v_on_arch_linux_how_i_managed_to_get_gpu/
[15] Parsec : https://parsec.app/
[16] Nvidia Shield TV: https://www.nvidia.com/en-us/shield/shield-tv/
[17] Masterbox Q500L: https://www.coolermaster.com/catalog/cases/mid-tower/masterbox-q500l/
[18] Источник: https://habr.com/ru/post/583784/?utm_source=habrahabr&utm_medium=rss&utm_campaign=583784
Нажмите здесь для печати.