Комментарии 35
Может быть кому-то пригодится (заодно и себе заметочка будет). Как-то раз настраивал проброс двух PCIe WLAN адаптеров внутрь VM с установленной x86 OpenWRT. Один старенький 2.4 GHz Atheros из-за какого-то бага внутри себя не хотел пробрасываться. Решилось правкой конфига ВМ в двух местах, после чего всё заработало. Алиас ua-hostdev обязателен (другие запрещены к использованию).
<hostdev mode='subsystem' type='pci' managed='yes'>
<source>
<address domain='0x0000' bus='0x05' slot='0x00' function='0x0'/>
</source>
<alias name='ua-hostdev0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</hostdev>
<qemu:commandline>
<qemu:arg value='-set'/>
<qemu:arg value='device.ua-hostdev0.x-msix-relocation=bar2'/>
</qemu:commandline>
цифры были бы очень уместны.
я очень давно делал проброс со стареньким феномом fx6100 и amd gpu radeon 5xxx (linux, kvm), и получил в играх до 30% падения производительности, хотелось бы понять, сколько современные amd ryzen в таком режиме потребуют ресурсов.
на работе у меня много лет была проброшена видюха в вм с виндой (ради пары софтин), причём видеокарты регулярно менялись
по вашему вопросу: я делал некоторое кол-во тестов увы цифры я не сохранил, но синтетитика показывала совсем незначительную разницу между проброшенной в вм видеокартой и ей же но с системой на хосте (ЕМНИП меньше 10 процентов), а в реальных нагрузках (solid works, blender, и пара игр) разницы не было заметно глазу
так же многим может пригодится вот такая информация: для амд/радеон и невидия quadro вышеописаный рецепт работает, а для невидия geforce прийдётся залезть руками в xml конфиг виртуалки и сделать небольшой обман (драйвера невидии не позволяют работать потребительским видеокартам в виртуальных средах) чтобы ос и дрова невидии не знали что это виртуалка а не реальное железо
пункт 6.2 в моей записной книжке
хотя я уже больше года как освободился от этого ярма на шее (больше винда не нужна ни для работы ни для дома) насколько я знаю один мой коллега продолжает так работать и всё ок.
Раньше(полтора года назад) был прикол, что с подменой всяких там CPUID и прочих для обмана драйвера падала производительность CPU, потому что вырубались всякий фишки виртуализации. Лечилось просто патчингом драйвера и подписью self-signed сертификатом(предварительно врубив dev-mode). А сейчас с этим нормально уже?
евидия quadro вышеописаный рецепт работает, а для невидия geforce прийдётся залезть
Но в апреле была же новость, что жифорсы теперь можно habr.com/ru/news/t/550678
Года 3 как переехал в виртуалку, недавно настроил еще и ноутбук под это дело, но я пользуюсь ProxMox'ом.
Какие тесты Вас интересуют, завтра могу что-нибудь простое прогнать на своем железе, простое потому что ноут еще не до конца настроен, сравнивать могу железо под Виндой
а какой юзкейс использования виртуалки, если в наличии есть хостовая система?
на десктопе это игровая/рабочая виртуалки с настроенным софтом + виртуалка с файлохранилищем, локальными вебсервисами и настроенным бэкапом данных + резерв под тесты различных систем на "посмотреть и поковыряться". На ноутбуке мне критично защитить информацию, главным образом не от внешних атак, а от людей с кем работаю в коммандировке (заказчик, технадзор и просто неравнодушные люди), здесь главное что бы ушлые ручки за 10-30мин в вагончике не докопались до файлов. Виртуалка на хосте с Линуксом идеальное решение.
Ryzen 1600 + 1050Ti/1066/1070 — полет нормальный.
Глупый вопрос, а звуковуха пробрасывается подобными методами в виртуалку? Естествеено не свежая а старая.
с интегрированной есть ряд вопросов, потому что если она в одной iommu группе с другим оборудованием, то могут быть проблемы, pci-e и usb обычно без проблем, но с usb проблемой будет микрофон, что бы уйти от наводок нужно пробрасывать контроллер, для звука достаточно пробросить usb-порт
если речь о звуке видеокарты с передачей его по hdmi/dp то проблем вообще никаких
pci старая.
Если звуковая карта PCI-E, то проблем возникнуть не должно, а вот если PCI, без Express...
после активации в файле grub опции iommu дайте две команды
lspci
и find /sys/kernel/iommu_groups/ -type l
если в iommu_groups ваше устройство будет и будет изолировано от других устройств, то проблем с пробросом быть не должно. Обычно достаточно пробросить через настройку файла-конфигурации ВМ, загонять параметры как в случае с ВК в grub, не надо. По крайней мере так работает ProxMox... я пробросил на втором PCI-Express x16 Raid-контроллер SATA/SAS LSI 9211-8i, а вот с ВК пришлось повозится.
Мои статьи на эту тему (для ноутбука и для ПК):
https://habr.com/ru/post/575654/
https://habr.com/ru/post/437598/
Видеоролик с результатами проброса mobile GTX1660ti Max-Q в ноутбуке: https://www.youtube.com/watch?v=6pzdkXqI4sU
Видеоролик с результатами проброса GTX1070 на десктопе: https://www.youtube.com/watch?v=wjlmWHJiEug
Есть ли шансы пробросить такой недослот в ВМ, желательно из Windows?
Есть ли шансы пробросить такой недослот в ВМ, желательно из Windows?
на самом деле пробрасывается не устройство, пробрасывается сам порт - пустой или с оборудованием.
На мой взгляд удобнее пробрасывать в ProxMox (надстройка над KVM+Debian Linux), я с Арч веткой не работал как и с чистым KVM+QEMU. Через WEB-интерфейс, на хост можно накатить GUI по вкусу.
https://pve.proxmox.com/wiki/Pci_passthrough
Если у вас на хосте в нативной системе в DOS/Windows порт работает корректно, то при пробросе, при условии, что порт пробросить возможно, см. мой предыдущий пост, иногда бывает что нельзя, все должно завестись и в госте.
Якобы Hyper-V умеет в проброс GPU, но я не пробовал. Я бросил эту затею на стадии Remote-FX.
Еще момент, для проброса PCI-E порта мать и ЦП должны поддерживать IOMMU + VT-d/AMD-Vi, для пробросы ВК требуется дополнительно поддержка VT-x для моделей на Интеле
Ещё Oracle VirtualBox умеет, но для Windows хоста так и не сделали, хотя собирались.
ИМХО, KVM будет быстрее VB, да и возможностей/документации больше, как и куда посмотреть и подсмотреть. Ну да хозяин-барин. Под Винду если завезут такую штуку да еще и в пару кликов, то одназначно будет киллер фича.
насколько я помню, в версии 6,1 проброс выпилили.
Не умеет. Потому и выпилили. Я пробовал VirtualBox 6.0 на Ubuntu 18 (поскольку VirtualBox 6.0 на Ubuntu 20.04 поставить не получилось), проброс RX560 не получился. Собственно как на сайте VirtualBox и написано, что потому и выпилили, т.к. не смогли доделать этот функционал.
Поправлю — VT-x является базовой виртуализацией, оно есть во всех процессорах Intel за последние много лет (кроме, может, Atom). А вот VT-d уже может отсутствовать.
От себя добавлю, я хотел сделать возможность безпроблемного запуска win софта требующего opengl. особенностью было то, что виртуалку включил, поработал, что бы хост не перезагружать в win.
Проблемой стало то, что моя rx550 всё время, что не работает гость не крутила вентиляторами вообще. И почему то грелась. Обнаружил почти сразу, по запаху паленого текстолита. Выжила, тк обдувалась корпусным.
Так что на всякий случай проверьте свой вариант, мало ли что.
Чтобы такой проброс сделать, на физической машине достаточно 1-ой видеокарты? Или только если их больше, чем одна?
можно и с одной извернутся... но после пуска виртуальной машины на хосте пропадет картинка.
Обычно на интеграшку вешают хост, а дискретку пробрасывают в ВМ, либо на момент установки и настройки ставится вторая ВК и после настройки удаляется. Так тупо удобнее.
Помнится, я пытался извращаться с ребиндом девайса из вм назад в хост, но результат был не стабилен, и в итоге я забил. Но это было семь лет назад, может всё поменялось уже. В частности, появилась такая штука как VirGL, выглядела она вкусно, но я тогда уже перестал играться в pci passthrough в частности и попытки в линукс-гейминг в целом.
Есть еще вариант со встроенной интеловской видяхой Intel GVT-g.
И еще - снимки состояния включенной машины при проброшенной видяхе не работают. Для Intel GVT-g это тоже справедливо. Но можно отправить машину в гибернацию, а уже после сделать снимок гибернизированной машины.
А вообще - немного поигрался с VmWare - там 3х мерное ускорение позволяет играть в игры (правда пробовал только старые). При этом задействуется хостовая видяха. Производительность процентов так на 30 меньше, чем натив. Если машин завпущено несколько, она судя по Furmarkу "разделяется" между ними.
Без проблем всё пробрасывается с одной видеокартой, 5 лет почти сидел на такой системе.
Не знаю как сейчас, но раньше достаточно было выгрузить родной драйвер GPU, отдетачить нулевую vtconsole
и разбиндить efi-framebuffer
. При этом монитор изчезает, отлаживать можно через ssh. Потом, для каждого пробрасываемого устройства, разбиндить его драйвер и сразу же забиндить vfio-pci
модуль на этот vid:did.
Чтобы вернуться в хост, нужно повторить всё в обратном порядке. Раньше даже автодетект работал, не нужно было запоминать прошлый драйвер. Была одна лишь проблема: USB-контроллеры были у меня дванольные, а третьих не было, либо были какие-то драфтовые, без реализованного hci reset
, который при возврате в хост происходит. Из-за этого какое-то устройство могло остаться в потустороннем мире до перезагрузки. Решалось перетыкиванием девайсов в те контроллеры, которые умели reset
. Сейчас, подозреваю, везде уже xhci
, с его возвратом из забвения в реальность проблем вроде как нет.
И, кстати, не нужно ничего хардкодить ни в ядро, ни патчить, всё без проблем динамически делается, в отличие от сказанного в статье. Достаточно разобраться в проблеме, а не нагрести с форумов копипаста, как сделал автор и запилить очередную говностатью.
По поводу производительности. Имелась в те времена карточка GTX1070. По тестам на ФПС при максимальном тюнинге всех возможных параметров были потери порядка 2-3%. Основная проблема была в инпут-лаге. Если задротить в компетишн шутеры, заметна была "аквариумность". Есть вероятность, что в соврмеренных процах поменьше VM-exit'ов происходит на каждый чих, поэтому лаг может быть чуть предсказуемее.
Статья так себе, если честно. Основной смысл работы в такой системе как раз в файн-тюнинге.
Например, выделить память гостю можно через Huge Pages, чтоб поменьше дёргать страничный транслятор. Отключить merging страниц на худой случай, если huge pages против религии.
Вынести IO в отдельный тред, и запинить афинити чтобы, хоть и редкими, но локами, не снижать latency.
Отстроить маппинг очередей virtio-scsi, нативный TRIM, выключить промежуточные кеши. А ещё лучше заморочиться с vhost.
И ещё несколько десятков оптимизаций, которые уменьшат суммарный оверхед до пары процентов.
Для удобства выделения диска отлично подходит LVM thin provisioning: динамический ресайз, снапшоты и т. п. Хотя перформанс просаживал в несколько раз, когда юзал.
Хотел бы внести свои замечания и дополнения, не сочтите за грубость:
Правильные группы IOMMU изкоробки иметь приятно, но не обязательно, ведь есть патч ядра, который решает данную проблему.
Для античитов и драйверов нвидии в kvm есть скрытый режим. Благо нвидиа уже одумалась и разрешила ставить последние драйвера без танцев с бубном, но лично в моем случае производительность лучше именно в таком режиме.
Особо мощный ЦПУ не нужен, нужен современный, с хорошими возможностями виртуализации и количеством ядер больше 4х, если собираетесь играть. В моем случае ноутбук dell, i7 8750h, видеокарта внешняя GTX 1660, под VM выделено 12 Гб ОЗУ статически, 5 ядер процессора (10 потоков) с пиннингом, играю в киберпанк, ведьмак 3, производительность практически идентична реальному железу, фпс +- одинаковый.
Вывод звука через пульс аудио работает замечательно, но с usb микрофонами и звуковыми картами, подключенными в виртуальную машину, в играх могут быть проблемы. Полностью от проблем со звуком избавляет PCI usb контроллер, проброшенный в vm. Но в случае ноутбука с этим могут быть сложности, имейте в виду. Я столкнулся с проблемами в войс чате в Овервотч, игра временами подвисала, мой голос превращался в кашу, отключение войс чата полностью решало проблему. Для себя решил пока из виртуальной машины в играх микрофон не использовать.
У меня две виртуальных машины с проброшенными видеокартами одновременно крутятся под UnRaid (там та же технология, KVM/QEMU, VFIO) - я не очень замечаю разницы в именно по FPS. Может быть, там не 80 кадров, а 70 - это и некритично, и незаметно. А вот сами системы на поворотах подтормаживают - заметно, когда, например, Хром открываешь. Хотя их образы лежат SSD...
неважно где лежат образы, если речь про ISO образы систем
вероятно они работают на vdisk-файлах, что дает пенальти 30-50%, даже если этот SSD параллельно не используется кем-то другим (докером например)
хотите быстрый IO - пробрасывайте SSD в монопольное использование windows-виртуалки
Тестирование проброса GPU на AMD Ryzen 7 5700G APU