Linux проброс видеокарты в виртуальную машину

Пробрасываем видеокарту в виртуальную машину, делаем игровую систему.

Бывает такой момент, что без Windows никак не обойтись, и даже wine не помогает, и тут к нам на помощь приходят виртуальный машины. Под Linux их хватает, VirtualBox, VMWare, XEN(гипервизор, но все же), qemu с kvm. Иногда нам необходима полноценная 3D графика, на виртуалке, и тут нам поможет проброс(passthrough) видеокарты в виртуалку.
Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

В интернете полно статей, что да как делать, но интернет у нас большой и от еще одной статейки он не лопнет.
Для начала нам необходимо, что бы в компьютере было 2 видеокарты, например встроенная и дискретная. У меня основная видеокарта Geforce GXT 550ti, а прокидывал я GTX 650ti и Ati HD4850 и все успешно работало.
Существует 2 вида проброса, использовать OVMF, данный проект позволяет использовать UEFI в виртуалке, но и видеокарта должна быть не простая, а аж с двумя биосами, это можно выяснить следующим образом [ http://vfio.blogspot.ru/2014/08/does-my-graphics-card-rom-support-efi.html ].
Скачиваем, компилируем
Получаем BIOS видекарты
0000:01:00.0 — надо изменить на код вашего девайса.

Я поэкспериментировал с ядрами, ни к чему интересному и хорошему это не привело, писали [https://bbs.archlinux.org/viewtopic.php?id=203240] что в ядре 4.2.2-1 поломали проброс, но как оказалось все прекрасно работает.
Но если же у вас все же есть желание, то устанавливайте из AUR’a:
1. [ https://aur.archlinux.org/packages/linux-vfio/ ] — на данный момент типа багнутое ядро, где сломан проброс, но используются полезные патчи для видюх интел и еще что-то там
2. [ https://aur.archlinux.org/packages/linux-vfio-lts/ ] — рабочее ядро, с теми же патчами, что и выше.
Как пользоваться makepkg, разберетесь сами.

3. После окончания установки, настало время прокинуть видеокарту.
Раскоментируем строку в конфиге
и запустим виртуалку.

Если все прошло хорошо, должно определиться новое устройство, скачиваем и устанавливаем драйвера для видеокарты, я не ставил никакого лишнего софта, только драйвера, пишут что Catalyst control center да и nvidia experience загоняет в синий экран, не проверял.

Выклаываю полный скрипт запуска виртуалки
Так же рекомендую отключить запрос на восстановление системы при загрузке после сбоев
В данную тему я нырнул лишь ради интереса и возможности поиграть в ММО Black Desert, отлично кстати работает.
Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

UPD 11.10.2016
Сегодня вновь столкнулся с пробросом видеокарты, но теперь мне нужен был еще и звук по hdmi, немного погуглив нашел решение http://vfio.blogspot.ru/2014/09/vfio-interrupts-and-how-to-coax-windows.html?m=1
Что бы нормально работал звук через HDMI проброшенный видюхи нужно включить Message Signaled Interrupts(MSI).
Для этого в реестре Windows необходимо внести правки, а именно в разделе HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\ найти вашу видеокарту, там будет два устройства видео и звук, далее в Device Parameters\Interrupt Management создать(если его нет) раздел MessageSignaledInterruptProperties и в нем DWORD параметр MSISupported со значением 1, он включит MSI. После перезагрузки звук должен прекрасно заработать.

UPD 01.06.2019
Обновил компьютер до Ryzen и столкнулся с проблемой
Подробности здесь AMD Ryzen и проблемы с пробросом видеокарты в QEMU KVM

UPD 15.09.2019
После очередного обновления начались неприятности, qemu падал в core-dump при попытке издать малейший звук, решилась эта проблема добавлением строки
1000 — id вашего юзера, все переменные QEMU_AUDIO можно убрать.

Если будет писать что нет доступа

Можно скопировать пользовательские cookie в root
На 15.09 проблема с Ryzen еще присутствует, приходится патчить ядро.

Источник

Проброс видеокарты в виртуальную машину

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

На некоторое время поставил в тупик вопрос: как этой системой рулить? В смысле, должна же быть какая-нибудь консоль управления, желательно под винды? Поковырявшись полдня с условно-штатным OpenXenManager я пришел к мысли, что то ли лыжи не едут, то ли эта кроссплатформенная тулза на винде не живет. Один или два раза она сконнектилась с сервером, но померла где-то в процессе работы, остальные разы глухо висла при коннекте, сливая неудежимый поток исключений в консоль Питона.
К счастью, более широкий взгляд в окружающий интернет открыл мне, что Citrix XenCenter прекрасно может рулить opensource-ным Xen-ом, а сам вполне бесплатен. Правда, при коннекте кричит, что через N дней у вашего сервера истечет Evaluation period, но знающие люди пишут, что это он просто не в курсе насчет opensource редакции сервера, а на самом деле все будет работать.
XenCenter позволяет создавать-включать-гасить виртуалки, а проброс устройств надо настраивать из sysadmin-friendly интерфейса командной строки.

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

Против ожиданий, проблем тут не случилось. Сделал все по мануалу, и хватило его одного. Вот народ жалуется, что по Xen-у документации мало. Так другой раз и хорошо, что мало, если этого хватает. Сколько я по vSphere прочел, и все без толку… Впрочем, не хочу говорить дурных слов про vSphere. Под ней зато так железо настроилось, что Xen пролетел прямо со свистом.
Итак, с помощью XenCenter я организовал виртуалку о двух ядрах и 4 ГБ памяти, накатил туда седьмую 64-битную винду и пошел пробрасывать.

pciback 0000:01:00.1: secondary bus reset failed for device — all functions need to be co-assigned — err: 6
pciback 0000:01:00.1: FLR functionality not supported; attempts to use secondary bus reset unsuccessful;
pciback 0000:01:00.1: FLR not performed for device

Похоже, что передача карты на горячую нам не светит. Ладно. Дадим гипервизору свой VGA адаптер, благо видеокарт мне теперь хватает. Переставляем Radeon 3450 во второй слот, в первый ставим валяющийся рядом 3470. К каждой карте прицепляем по монитору. Включаем хост, запускаем виртуалку. Винда просит перезагрузки после изменения конфигурации. Ребут. Логинимся…

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

В консоли XenCenter заставка зависает, и я не сразу соображаю, что правый монитор светится синим

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину
Оно все-таки произошло.
Итого, на Xen срослось за 3 дня (после того, как 3 месяца упражнялся на VMware).

Я залогинился. Картинка на мониторе самая обыкновенная, без особенностей. Разрешение 1920х1200 держит. Не тупит (хотя тестов не гонял). Видео с YouTube проигрывается нормально.

На этой радостной ноте завершу свой правдивый отчет, а сам займусь пробросом клавиатуры, мыши и прочей периферии.

Update:
Пробросил клавиатуру и мышь, пишу из виртуалки под Win7. Здесь ничего, жить можно.
Индекс производительности 3.5
Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину
Я даже еще не отключил Aero и прочие визуальные эффекты, вредные нашему делу, но работает шустро.

Проброс USB сделал грубо и цинично:
xe vm-param-set other-config:pci=0/0000:02:00.0,0/0000:02:00.1,0/0000:00:1a.0,0/0000:00:1d.0 uuid=d103a91d-5c38-844f-14d5-64b3c495eb08
То есть пожертвовал виртуалке USB контроллеры. С другой стороны, Xen пока без них обойдется.

Что еще? Поставил XenCenter, Xen нормально администрится (кто бы сомневался). Внешний USB-диск, естественно, тоже нормально прицепляется. Теперь надо понять, как пробрасывать CD-ROM.

К сожалению, ничего не вышло у меня с USB Passthrough, равно как и со справедливо упомянутым в комментариях Xen VGA Passthrough (Scraelos), потому как нет под XCP файла «/etc/xen/ cfgfile». Как прописать необходимые настройки с помощью xe — я не разобрался. Если знатоки Xen помогут, буду очень признателен.

Update 06.02.2012:
dom0 на IGD пересаживаться отказался в категорической форме. Кроме того, повторил попытку пробросить primary VGA adapter — без толку. Вернулся к прежней конфигурации адаптеров.
Уперся в проблему с пробросом CD(DVD)-Writer. CD-ROM пробрасывается штатно, но только RO, а мне надо RW. По этому поводу нашел 2 рекомендации: воткнуть и пробросить отдельный SATA контроллер и использовать USB CD/DVD-Writer (благо USB пробрасывается). К сожалению, даже эти (имхо, костыльные) решения у меня на данный момент не заработали. Контроллер пробрасываться отказался. Попытка подключить штатный SATA CD/DVD привод через переходник USB-SATA ни к чему хорошему не привела. Продолжаю опыты.

Источник

qemu-kvm, libvirt и проброс видеокарты Nvidia.

В статье рассмотрена виртуализация Win10 посредством qemukvm совместно с libvirt и virt-manager, а так же проброс видеокарты Nvidia.

Выбор ОС и видеокарты обусловлен огромной проблемностью виртуализации, которую можно практически полностью нивелировать правильной настройкой, что создаёт интересный профессиональный вызов. К этому имеется некоторая востребованность для ряда специализированного проприетарного ПО, которое хоть и выходит из оборота, заменяясь на свободные (или не очень) нативные аналоги, но всё ещё эксплуатируется по остаточному принципу в узкоспециализированных нишах.

Несколько слов об Nvidia. Видеокарты данного вендора являются наихудшим вариантом для проброса из-за злонамеренного препятствования, которое подразумевает негласный запрет на проброс «непрофессиональных» моделей видеокарт. Проблема особенно характерна для Win10, в которой проброс без настройки приводит к неработоспособности системы.

В статье описано решение характерной для сочетания Win10 и Nvidia «Ошибки 43» (код 43) и VIDEO_TDR_FAILURE с драйвером nvlddmkm.sys, приводящей к «синему экрану смерти» (BSOD) из-за проблем с MSI (Message Signaled Interrupts). Не смотря на это, GTX 1060 возможно пробросить и она не имеет проблемы со сбросом GPU (reset bug) после выключения виртуальной машины. Проблема со сбросом выражается в том, что после завершения работы виртуальной машины реинициализация видеокарты не произойдёт и она останется в режиме выключения. Чтобы хост-компьютер смог взаимодействовать с таким «подвисшим» устройством, потребуется перезагрузка хоста, что, как правило, очень неудобно.

Примеры в статье отталкиваются от следующего набора оборудования и пакетов:

Базовые требования и рекомендации.

Содержание.

Предварительная настройка.

Установка qemu-kvm, libvirt, virt-manager и сопутствующих пакетов.

Примечание: Набор пакетов характерен именно для Ubuntu 20.04 и деривативов.

qemu-kvm — средство виртуализации qemu с гипервизором kvm.

libvirt-daemon, libvirt-daemon-system и libvirt-daemon-driver-qemu — это основные пакеты, которые подтянут прочие необходимые. В них входит несколько демонов (сервисов) libvirt и утилит для управления виртуальными машинами.

virt-manager — графическая оболочка libvirt для управления виртуальными машинами и редактирования их конфигурации.

gir1.2-spiceclientgtk-3.0 — пакет для поддержки управления виртуальной машиной по протоколу SPICE. Поддерживает шифрование, общий буфер обмена, проброс USB и многое другое. Документация: https://www.linux-kvm.org/page/SPICE

ovmf — Open Virtual Machine Firmware — прошивка с поддержкой эмуляции EFI. Альтернатива seabios. Оптимальный выбор для ОС с поддержкой EFI (все актуальные Linux-дистрибутивы, Win8.1, Win10).

Место хранения прошивок /usr/share/qemu/

qemu-utils — набор утилит. Необязательный пакет для установки.

После установки пакетов требуется перезагрузка.

Базовая настройка libvirt.

После установки пакетов и перезагрузки требуется осуществить подготовку libvirt к использованию.

Пользователь и группа libvirt.

Убедиться, что пользователь был добавлен в группу libvirt:

Это позволит пользователю запускать виртуальные машины без привилегий суперпользователя и получить доступ к расширенным сетевым опциям.

Если пользователь не в группе — добавить вручную. Команда на добавление активного пользователя в дополнительную группу libvirt без удаления из предыдущих групп:

$USER — активный пользователь.

После добавление нужно перезапустить сессию, чтобы изменения вступили в силу.

Запуск демона libvirtd.

Запуск libvirtd вручную.

Можно добавить сервис в автозагрузку.

Вместе с libvirtd будет запущен virtlogd для ведения журнала событий.

Место хранения журнала событий виртуальных машин: /var/log/libvirt/qemu/

Загрузка модулей ядра.

В данном примере будет рассмотрен вариант передачи параметров для ядра посредством Grub. Для этого потребуется внести изменения /etc/default/grub.

Модули для загрузки и параметры для ядра должны быть перечислены в строке GRUB_CMDLINE_LINUX_DEFAULT=

Итоговый набор параметров для процессоров Intel и видеокарты GTX 1060 будет выглядеть так:

Далее подробно и по порядку.

Модуль kvm.

Основное предназначение — ускорение виртуализации.

Проверить поддержку kvm-ускорения можно утилитой kvm-ok:

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

Если модуль kvm не активирован, будет показано предупреждение:

Если ускорение не поддерживается:

Проверить загружен ли модуль:

Если вывод пустой, необходимо загрузить модуль.

Модуль kvm_intel зависит от модуля intel_iommu, загрузка которого описана ниже. То есть, чтобы загрузить модуль kvm_intel достаточно загрузить intel_iommu, но можно загрузить и вручную.

Утилита modprobe позволяет загрузить модуль, но только для текущей сессии:

Модули IOMMU.

Настройка IOMMU является важным этапом для проброса видеокарты.

В настройках материнской платы (UEFI) нужно сделать следующее:

Загрузка с помощью Grub. В файле /etc/default/grub в строку GRUB_CMDLINE_LINUX_DEFAULT добавить intel_iommu=on iommu=pt.

intel_iommu=on — включить поддержку транслятора виртуальных адресов в физические. Материнская плата должна иметь блок управления памятью ввода/вывода (IOMMU). По идее, этот блок есть во всех современных не супер бюджетных материнских платах.

iommu=pt — включает режим проброса. Это снижает нагрузку IOMMU для устройств принадлежащих хосту.

После необходимо обновить конфигурацию Grub, чтобы изменения вступили в силу после перезагруки:

Удостовериться, что IOMMU используется:

i — игнорировать различие регистра.

E — расширенное регулярное выражение.

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

Если вывод пустой, то IOMMU выключено или отсутствует аппаратная поддержка в материнской плате.

Группы IOMMU и видеокарта.

Это наименьший связанный набор физических устройств, которые могут быть переданы виртуальной машине. В данном случае в целях проброса искомым набором является группа, содержащая устройства видеокарты.

Проверка наличия групп устройств IOMMU:

Должен быть подобный вывод (у всех будет разный):

Если пусто, значит IOMMU не включено.

Видеокарта разделена на два устройства: видео и аудио (звук через HDMI). Нужно проверить в какую IOMMU-группу входит видео и аудио видеокарты. Сначала потребуется узнать их ID. Для Nvidia:

Для GTX 1060 вывод будет такой:

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

Искомые ID имеют следующий вид:

Теперь, зная ID устройств видеокарты, можно провести проверку принадлежности устройств к конкретной группе IOMMU:

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

Это означает, что устройства видеокарты находятся в группе 27, то есть всё в порядке.

Модули vfio.

Рассмотрим следующий необходимый набор модулей:

vfio-pci.ids — обеспечивает мягкий захват видеокарты драйвером vfio на этапе загрузки хост-системы. Это ключевой модуль, обеспечивающий успех проброса.

vfio_iommu_type1.allow_unsafe_interrupts=1 — уменьшает задержки (latency) прерываний. Позволит включить в Win-госте MSISupported для решения проблемы VIDEO_TDR_FAILURE nvlddmkm.sys.

vfio_virqfd=1 — драйвер для поддержки irqfd — механизма передачи прерываний между хостом и гостем.

Завершение подготовки проброса видеокарты GTX 1060.

Вернёмся к модулю vfio-pci.ids.

Видеокарта состоит из двух устройств: видео и аудио. В целях проброса модулю vfio-pci.ids необходимо передать vendor id и device id устройств видеокарты.

Вывести ID устройств видеокарты:

Вывод для GTX 1060:

Искомые vendor id и device id имеют такой вид:

Итоговый результат для GTX 1060 выглядит так:

После перезагрузки vfio захватит видеокарту, что сделает её доступной для проброса.

Проверить успешность захвата по ID видеоустройства:

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

В строке Kernel driver in use должно быть vfio-pci. Это означает, что видеокарта была успешно захвачена драйвером vfio_pci.

На этом непосредственная настройка хоста окончена.

Создание и настройка виртуальной машины.

Процесс будет осуществлён с помощью Virt-manager.

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

Если при запуске Virt-manager выводится ошибка «Не удалось подключиться к libvirtd», то стоит удостовериться в следующем:

Если есть какие-то другие проблемы, то их можно отследить через вывод в системном журнале:

Создание виртуальной машины с помощью Virt-manager.

Создание подключения.

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

Необходимо создать подключение к гипервизору QEMU/KVM.

Предварительная настройка создания виртуальной машины.

В данном примере для установки Win10 в качестве гостевой ОС используется базовая конфигурация. Далее будет проделана дополнительная настройка виртуальной машины, чтобы осуществить проброс видеокарты, успешно установить драйвер и обойти нелепые искусственные ограничения Nvidia («ошибка 43» и BSOD из-за отключенного MSI).

Официальный установочный образ Win10 в формате ISO:

Образ будет использоваться для установки с использованием эмуляции CD-ROM.

Шаг 0.

Файл / Создать виртуальную машину

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

Шаг 1.

В методе установки выбрать «Локальный ISO или CDROM»:

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

Шаг 2.

Выбрать ранее загруженный установочный образ:

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

В этом же шаге выбрать тип устанавливаемой ОС. Это важно для подтягивания мета-информации, в зависимости от которой предоставляются те или иные настройки в Virt-manager и libvirt. Для отображения полного списка отметить «Include end of life operating systems»:

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

Шаг 3.

Указать количество ОЗУ и потоков для виртуальной машины.

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

В данном примере для гостевой ОС будет выделено 16384 Мб из 32768 Мб ОЗУ и 8 из 12 потоков процессора.

Не смотря на то, что с настройками по умолчанию виртуальная машина использует выделенные ресурсы не изолированно, то есть хост не теряет возможность их использовать, очень желательно оставить достаточное количество ресурсов для функционирования ОС хоста, чтобы избежать эффекта конкуренции за ресурсы, который может привести к возникновению заиканий.

Шаг 4.

Необходимо указать образ виртуального накопителя, в который будет установлена гостевая (виртуализируемая) ОС.

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

В libvirt используются специальные хранилища данных, что делает задачу несколько нетривиальной. Ознакомиться можно здесь: https://libvirt.org/storage.html

В примере создаётся хранилище данных с названием pool и типом «Каталог в файловой системе»; в строке Target Path указывается путь до каталога в файловой системе хоста, в котором по итогу расположится хранилище данных.

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

При выборе места для хранилища стоит учитывать достаточное количество свободного места на физическом накопителе. Для Win10 желательно от 60 Гб.

Хранилище создано. Теперь необходимо создать сам образ виртуального накопителя, в который будет установлена Win10.

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

Формат: raw. Оптимален для Windows-гостей.

Объём: 60 Гб

Созданный виртуальный накопитель появится в списке томов. Останется выбрать его.

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

На этом четвёртый шаг заканчивается.

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

Шаг 5.

Отметить пункт «Проверить конфигурацию перед установкой»:

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

Это позволит перейти к непосредственной настройке виртуальной машины.

Подробная настройка виртуальной машины.

Обзор.

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

Выбрать набор микросхем q35. Он лучше поддерживает проброс.

Выбрать прошивку (firmware) ovmfOVMF_CODE.fd.

Информация об ОС.

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

Убедиться, что выбрано Windows 10, так как это подтягивает мета-информацию, которая влияет на доступные настройки Virt-manager и libvirt.

Процессоры.

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

В этой вкладке указывается число потоков, конфигурация (модель процессора) и топология процессора. В данном примере копируется конфигурация хоста с разделением на 8 потоков: 4 ядра умножаются на 2 потока, что имитирует гиперпоточность.

Память.

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

Для гостя выделяется 16384 Мб ОЗУ. Всего в системе 32 Гб.

Параметры загрузки.

Переставить SATA CDROM 1, к которому примонтирован установочный образ, на первое место, тем самым повысив приоритет загрузки:

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

Иначе процесс установки не сможет начаться. Можно будет лишь наблюдать интерфейс UEFI Interactive Shell, в котором придётся указать путь до загрузочной области вручную:

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

SATA Диск 1.

Ранее созданный виртуальный накопитель подключается через эмуляцию шины SATA:

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

В параметрах производительности переключить «Режим кэширования» на «none», а «Режим ввода-вывода» на «native». Это улучшит отзывчивость и позволит избежать потери данных при принудительном выключении виртуальной машины.

Можно подключать несколько виртуальных и даже физических накопителей. Последнее несколько нетривиально и имеет ряд ограничений.

SATA CDROM 1.

Эмуляция CD-ROM устройства, подключенного по шине SATA. В него примонтирован установочный образ.

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

После установки гостевой ОС устройство SATA CDROM 1 можно удалить.

NIC (Настройки сети).

Если используется обычная конфигурация сети, то можно оставить как есть.

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

Планшет.

Подобные устройства правильнее пробрасывать в виртуальную машину. Поэтому эмулируемое устройство лучше удалить.

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

Дисплей VNC.

Заменить VNC на «Сервер SPICE» и убрать прослушивание (Listen type), так как виртуализация будет локальной:

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

Этот протокол более предпочтителен, когда требуется передача звука от гостя к хосту. Так же у него нет проблемы с «залипанием» курсора по краям экрана.

Консоль.

Для Windows-гостей это не требуется, поэтому лучше удалить.

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

Видео QXL.

Это виртуальный графический адаптер, поддерживающий 2D ускорение. Будет выводить графику, пока не задействована проброшенная физическая видеокарта.

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

Controller USB 0.

Оставить по умолчанию.

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

Теперь всё готово для установки ОС, останется нажать кнопку «Начать установку».

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

После подтверждения будет запущена виртуальная машина с процессом установки:

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

Курсор из окна виртуальной машины освобождается комбинацией Ctrl + Alt.

С установкой Win10 предлагаю разобраться самостоятельно. Основная сложность в том, что каждое крупное обновление появляются всё новые и новые преграды для отказа от навязываемой учётной записи MS и прочего «ненужно». На момент 2021 года только для отказа от некоторой(!) части телеметрии предлагается снять более десятка галочек, которые, как в головоломке, надёжно спрятаны в графическом интерфейсе и разнесены на несколько окон. Стоит отметить, что без применения спецсредств отключить основную массу телеметрии невозможно.

После установки и завершения работы виртуальной машины можно удалить SATA CDROM 1:

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

Нюансы Windows.

Проброс видеокарты Nvidia.

Базовый проброс видеокарты.

Осуществялется через Virt-manager.

Перед началом настройки необходимо завершить работу виртуальной машины.

Открыть настройки виртуальной машины и найти кнопку «Добавить оборудование». В списке выбрать видеоустройство видеокарты и аудиоустройство.

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

Для GTX 1060 результат выглядит так:

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

Установка драйвера Nvidia.

Подготовка гостя.

После зачистки Win10 и установки нормального браузера предстоит продолжить подготовку проброса для того, чтобы обойти препоны драйвера Nvidia.

Вручную загрузить драйвера для видеокарты с официального сайта: https://www.nvidia.ru/Download/

Для установки потребуется перейти в безопасный режим, иначе установка будет прервана BSOD («синим экраном смерти») и не завершится корректно. После такого сбоя потребуется удалять то, что успело установиться, специальной утилитой (DDU или подобной).

Переход в безопасный режим можно осуществить следующим образом:

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

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

Теперь можно установить драйвер, не опасаясь BSOD.

Для этого запустить ранее загруженный установочный файл.

В установочнике отметить «Выборочную установку», чтобы установить только драйвер без дополнительного софта:

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

Ни в коем случае не устанавливать предлагаемый GeForce Experience. Это очень проблемный софт, который становится ещё проблемнее на виртуальной машине.

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

Перезагрузиться, всё ещё оставаясь в безопасном режиме.

Теперь предстоит настроить MSI (Message Signaled Interrupts). Без этого в обычном режиме запуска будет происходить зацикленный BSOD с ошибкой VIDEO_TDR_FAILURE в драйвере nvlddmkm.sys.

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

Включение MSI для видеокарты Nvidia.

Оптимально включить вручную через реестр, создав специальный параметр.

Сначала необходимо узнать ID видеокарты, по которому её можно найти в реестре.

META + R и в появившейся строке ввести devmgmt.msc, а затем подтвердить.

Это откроет окно «Диспетчера устройств»:

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

Развернуть свиток «Видеоадаптеры», нажать на видеокарте ПКМ и выбрать «Свойства».

В «Свойствах» перейти во вкладку «Сведения». В списке найти «ИД оборудования». Первым в списке будет искомый ID видеокарты. Для GTX 1060: VEN_10DE&DEV_1C03&SUBSYS_1C0310DE&REV_A1

Теперь можно редактировать реестр. Это осуществляется стандартной утилитой regedit.

META + R и в появившейся строке ввести regedit. Откроется окно редактора реестра:

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

Необходимо проследовать в самые дебри:

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

И вот здесь должен быть раздел с тем самым ID видеокарты. В данном примере это VEN_10DE&DEV_1C03&SUBSYS_1C0310DE&REV_A1

Развернуть раздел с ID видеокарты, нажать ПКМ на разделе Device Parameters и создать раздел Interrupt Management:

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

Нажать ПКМ на разделе Interrupt Management и создать раздел с именем MessageSignaledInterruptProperties:

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

Нажать ПКМ на созданном разделе и создать параметр DWORD (32 бита) с именем MSISupported:

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

Сделать двойной клик по параметру MSISupported и в появившемся окне присвоить значение равное 1 в шестнадцатеричной системе счисления:

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

Готово. Теперь можно закрыть редактор реестра.

Примечание: MSI может сбрасываться после обновления Win и драйвера для видеокарты. Поэтому придётся проделывать процедуру снова, но будет достаточно добавить параметр MSISupported, остальное должно остаться.

В msconfig включить обычный запуск:

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

Казалось бы, проделан такой большой путь и теперь уж точно всё должно работать, но не тут-то было. Nvidia так просто не сдаётся. Видеокарта всё ещё не будет работать из-за «ошибки 43»: «Система Windows остановила это устройство, так как оно сообщило что Nvidia в край обнаглела о возникновении неполадок».

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

Эта проблема решается маскировкой факта виртуализации для гостя.

Маскировка виртуализации для решения «ошибки 43».

Маскировка осуществляется в настройках виртуальной машины. Необходимо, чтобы гость был выключен.

Конфигурация виртуальной машины хранится в специальном файле в формате xml. Их можно редактировать с помощью утилиты virsh, но в данной статье ограничимся Virt-manager.

Редактирование конфига можно осуществить непосредственно через Virt-manager во вкладке XML (Edit libvrit XML). Пример настроенной конфигурации:

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

Маскировка разнесена на три блока:

hyperv.

В этот блок нужно добавить следующую строку:

Целиком будет выглядеть так:

Строка vendor_id доступна для чтения из гостевой ОС. Драйвер Nvidia проверяет её наличие. Если она отсутствует, то это является одиним из поводов показать «ошибку 43».

Cтроке value может быть присвоен любой набор из 12 символов. В «классическом» варианте можно указать следующее: FckYouNVIDIA

По умолчанию блок kvm отсутствует. Его необходимо самостоятельно добавить в блок features.

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

Строка отвечает за опцию маскировки использования гипервизора kvm от обнаружения гостем. Драйвер Nvidia проверяет этот момент и при обнаружении признаков использования kvm покажет «ошибку 43».

cpu и host-passthrough.

Основной задачей является пробросить информацию о процессоре хоста, предоставить гостю возможность напрямую использовать процессорный кэш и отключить оптимизации гипервизора, которые явно указывают на то, что гостевая ОС запущена на виртуальной машине. Этот факт будет легко обнаружен драйвером Nvidia, что вновь приведёт к «ошибке 43».

По умолчанию этот блок будет выглядеть схожим образом:

Гостевой ОС будет предоставлено только название процессора без проброса детаельной информации и кэша. Это необходимо исправить.

Конечный результат будет выглядеть так:

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

Режим проброса указывается следующей строкой:

Далее указывается топология ядер процессора. В данном случае это 8 потоков (4 ядра умножаются на 2 потока, что имитирует гиперпоточность):

Проброс процессорного кэша:

Это значительно улучшает производительность гостевой ОС.

Опция invtsc улучшает обработку прерываний для Win-гостя, что позитивно сказывается на производительности:

Она не критична для маскировки, но очень желательна для улучшения работоспособности.

Отключение оптимизаций гипервизора:

Гостевая ОС не будет видеть, что запущена на виртуальной машине. Драйвер Nvidia тоже не сможет определить факт виртуализации, что наконец избавит от «ошибки 43».

Заключительная часть.

Наконец всё готово и видеокарта сможет свободно работать в гостевой ОС!

Ключевым признаком работы проброшенной видеокарты будет «зависание» картинки в окне просмотра Virt-manager. Если используется один монитор, то потребуется переключить видеорежим, чтобы увидеть графику гостевой ОС.

Рабочий стол будет отображаться в полноэкранном режиме:

Linux проброс видеокарты в виртуальную машину. Смотреть фото Linux проброс видеокарты в виртуальную машину. Смотреть картинку Linux проброс видеокарты в виртуальную машину. Картинка про Linux проброс видеокарты в виртуальную машину. Фото Linux проброс видеокарты в виртуальную машину

Останется испытать производительность.

Рекомендую следующие программы для тестирования производительности:

Набор незамысловат, но позволяет ясно увидеть уровень производительности. Забегая вперёд скажу, что производительность будет заметно меньше, чем при нативном запуске, но это можно исправить, сократив накладные расходы до минимума.

Проблема с отсутствием звука в виртуальной машине.

Как правило, при использовании протокола SPICE со звуком проблем нет, но бывают исключения.

Звук может отсутствовать из-за блокировки apparmor. Проверка наличия предупреждений о блокировке:

Если блокировка отсутствует, то вывод будет пустой.

При наличии предупреждений, самым простым способом является отключение защиты через конфигурационный файл /etc/libvirt/qemu.conf. Защита будет отключена только для виртуальных машин, запускаемых с использованием libvirt.

За использование защиты отвечает следующая строка:

Для отключения необходимо добавить строку со значением «none»:

Для применения изменений перезапустить libvirtd:

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *