Разворачиваем виртуалку с Windows с пробросом виртуальной видеокарты с помощью QEMU и Intel GVT-g | Hi-Tech | Селдон Новости

В этой статье подробно рассмотрен вопрос настройки сетей под виртуальной машиной VirtualBox. Типы NAT, сетевой мост, виртуальный адаптер хоста, внутренняя сеть. Автор статьи детально описал процесс подключения web-сервера WordPress и настройки его взаимодействия с Интернет.

Как из домашнего ПК средствами виртуализации сохранить игровую систему +27

Системное администрирование, Виртуализация, Компьютерное железо, Тестирование игр, Настройка Linux madrobots.png
AliExpress RU&CIS

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

wi7tvn0aup6u0ez6skuwiavudmy.jpeg

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

GPU PASSTHROUGH

.

Шаг 1: настраиваем ядро

Проверьте, что у вас свежая версия ядра. Похоже, что опции для GVT-g были включены и до версии 4.8, но тогда они точно работали хуже, поэтому я рекомендую использовать последнее доступное ядро. Если вы достаточно оригинальны, чтобы собирать своё ядро, включите эти опции. Также отключите удаление неиспользуемых ksyms, поскольку эта опция вызывает баг.

Теперь нужно поправить аргументы командной строки ядра. Важные опции таковы:

i915.enable_gvt=1 kvm.ignore_msrs=1 intel_iommu=on i915.enable_guc=0

Убедитесь, что вы не переопределили enable_guc=0 чем-то, что включит загрузку GuC, поскольку это приведёт к удручающему крашу драйвера i915. Когда загрузитесь, зайдите в своё рабочее окружение и проверьте наличие директории /sys/bus/pci/devices/0000:00:02.0/mdev_supported_types/. Если её не существует, GVT-g не работает. Проверьте логи и/или поплачьте в подушку.

Как вариант решения проблемы можно добавить эти модули в initramfs и удалить оттуда i915.

Для более подробного логирования, можно задать переменной drm.debug какое-нибудь значение, например, установка её в значение 0x02 включит сообщения от драйверов.

Инструкция по увеличению виртуальной памяти в VirtualBox более 256 Мб

Чтобы обработать большой поток данных, вам требуется производительное устройство, либо увеличение видеопамяти за счет дополнений. Что касается конкретно этой ситуации, то вам потребуется проделать следующее:

  1. Прежде всего, пользователю потребуется запустить терминал, для внесения некоторых изменений в настройки.
  2. Здесь требуется применить такую команду, как «VBoxManage modifyvm “Name of VM” –vram 256».
  3. Вы должны понимать, что предварительно вам потребуется завершить работу виртуальной машины. Иначе изменения не будут приняты.
  4. Следует принимать во внимание тот факт, что для аппаратного ускорения, используется физический показатель ОЗУ.
  5. Также нельзя забывать о том, что аппаратные настройки виртуальной машины впоследствии никак не будут влиять на изменения.
  6. Также вы можете воспользоваться текстовым редактором, и поменять значение записи «Vram» на «<Display VRAMSize=”256″ monitorCount=”1″ accelerate3D=”true” accelerate2DVideo=”false”/>».
  7. Если вы вносите такие изменения в систему, вам также обязательно требуется сохранение резервной копии для восстановления.
  8. Для работы с такими документами подходит практически любой текстовый редактор, в том числе «Sublime Text».

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

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

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

Предварительная настройка гипервизора ESXi 6.5

  1. Для начала необходимо включить доступ по SSH в веб-интерфейсе ESXi: кликаем правой кнопкой мыши по пункту Host в навигаторе слева, выбираем Services → Enable Secure Shell (SSH).
  2. Заходим под своим логином/паролем по SSH и меняем режим проброса nVidia устройств [1] с bridge на link:
    # vi /etc/vmware/passthru.map
    находим там следующее значение и меняем на link:
    # NVIDIA
    10de ffff bridge false
  3. Делаем проброс устройства в хост: заходим в веб-интерфейсе ESXi в Manage → Hardware → PCI Devices и выбираем видеокарту, жмём сверху «Toggle passthrough».
  4. Выполняем перезагрузку (reboot) хоста vSphere ESXi.

Виды сетевых адаптеров VirtualBox

Существует несколько способов как настроить сеть в virtualbox, и каждый из них подходит для лучше для решения одной задачи и меньше для другой. Рассмотрим основные:

  • NAT – этот способ используется по умолчанию. Для каждой машины создается отдельная внутренняя локальная сеть, в которой машина получает ip 10.10.0.1. Машина может связаться с интернетом, используя технологию NAT, и вы можете обратиться к машине, используя проброс портов VirtualBox, но если у вас будет две виртуальные машины, то вы уже не сможете между ними так взаимодействовать. И если из основной системы к гостевой можно обратиться, то к основной ни гостевой уже никак не получится;
  • Виртуальный адаптер хоста – создается виртуальный сетевой адаптер, к которому можно подключить несколько виртуальных машин, тем самым объединив их в локальную сеть. Доступа к интернету нет, но зато машины находятся в одной сети и каждая имеет свой ip адрес, теперь они могут взаимодействовать между собой. Основная система тоже доступна по ip 192.168.56.1. Машины доступны не только между собой, но и из основной системы;
  • Сетевой мост – при таком подключении виртуальная машина становится полноценным членом локальной сети, к которой подключена основная система. Машина использует сетевой интерфейс чтобы получить адрес у роутера и становится доступна для других устройств, как и основной компьютер по своему ip адресу.
  • Внутренняя сеть – почти то же самое, что и виртуальный адаптер хоста, только без возможности доступа к виртуальной сети из основной системы, доступа к интернету нет.
  • Универсальный драйвер – позволяет использовать драйвер из расширений VirtualBox для связи между машинами, расположенными на разных физических хостах.

Теперь рассмотрим каждый вариант настройки более подробно.

Зачем это нужно?

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

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

Принятые термины

  1. Хостовая машина, HOST – наш сервер или десктопная машина, “реальная”, на которой и работает гипервизор с виртуальными машинами.
  2. Гостевая машина, VM – собственно, сама виртуальная машина, которых, к слову, может быть несколько. Создавал как-то конфигурацию с одновременно работающими 6-ю гостевыми машинами. Ну вот нужно было )
  3. Мост, Bridge – механизм объединения двух сетевых интерфейсов. Условно, как патчкорд, соединяющий два порта. Может быть программным.
  4. NAT – механизм трансляции сетевых адресов, когда на хосте работает специальная служба, которая занимается самой трансляцией – отображением виртуального (частного) адреса или группы адресов в один реальный и обратно.
  5. Сегмент – некое подобие VLAN, чисто на программном уровне, объединение различных виртуальных интерфейсов в один домен коллизий.

Шаг 2: создаём виртуального друга

Внутри mdev_supported_types можно найти целый набор директорий. Этот набор определяется количеством вашей графической памяти, каждая поддиректория соответствует некоторому типу виртуального GPU. Файл description в ней содержит информацию о памяти и разрешениях, поддерживаемых данным виртульным GPU. Если создание виртуального GPU с большой памятью с помощью вывода UUID в файл /create вам выдаёт непонятную ошибку, то у вас есть несколько опций. Сперва стоит зайти в BIOS и добавить видеопамяти, если возможно. Если это не работает, можно остановить ваш DM, переключиться на фреймбуфер, создать нужный vGPU оттуда, а затем вернуться в x11. К сожалению, такой способ приводит ко многим багам и не даёт добиться 60 FPS на моём ноутбуке. Альтернативный вариант состоит в том, чтобы создать vGPU поменьше, и использовать специальную программу для увеличения разрешения (CRU). Таким способом мне удалось добиться 60 FPS и багов и зависаний встретилось гораздо меньше.

Создать vGPU можно такой командой:

$ echo ${vGPU_UUID} | sudo tee /sys/bus/pci/devices/0000:00:02.0/mdev_supported_types/${vGPU_TYPE}/create

А удалить — такой:

$ echo 1 | sudo tee /sys/bus/mdev/devices/${vGPU_UUID}/remove

Примечание переводчика:
Сгенерировать UUID для vGPU можно с помощью команды uuidgen без аргументов. Переменная ${vGPU_TYPE} обозначает один из типов, перечисленных в директории mdev_supported_types. Также стоит заметить, что vGPU при каждой перезагрузке надо создавать заново, они не сохраняются между запусками ОС.

“Подводные камни”

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

Требования к железу

Нам потребуется:

— процессор и материнская плата с поддержкой VT-x, VT-d от

Интел

или AMD-Vi, IOMMU от АМД. Не поленитесь и уточните поддерживает ли именно Ваш экземпляр данные требования.

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

Z270

и

Z390

игнорировать оранжевую зону или оставлять работать в стоке.

  • 2 видеокарты, одну игровую (в сети за меньшее количество проблем при пробросах в виртуальную машину хвалят красных, но лично у меня все получилось с видеокартой от зеленых), вторую для хоста. В моем случае это интегрированная в процессор.
  • 1-2 монитора и кабели к ним, для того чтобы
  • пара комплектов клавиатура + мышь, чтобы было удобно работать и настраивать системы
  • второй ПК или планшет подключенный к локальной сети, что бы сделать настройки через вебформу.

Настройка VirtualBox.

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

Для этого открываем настройки VirtualBox

000_setting_virtualbox-300x172.png

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

001_virtual_adpater-300x203.png

Дальше настраиваем адаптер, прописываем ip адрес, я прописал статический. 10.0.2.2

002_ip_virtual_adapter-300x174.png

Также можно настроить и DHCP сервер.

Жмем «Ок». Теперь переходим к настройке виртуальной машины.

Резюмируя всё вышенаписанное

Для меня был удивительным тот факт, что установка CUDA Toolkit и nVidia drivers в убунту — это такой геморрой. Я 3 дня фулл-тайм занимался тем, что тестировал различные ответы со стековерфолу и форума разработчиков nvdia. Очень спасали меня, конечно, снепшоты в ESXi, чтобы не устанавливать Ubuntu каждый раз с нуля. Но по итогу всё равно я несколько раз её переставлял, особенно когда в середине пути вскрылся косяк с efi.

Если бы в тот момент я нашел такую же пошаговую инструкцию, где всё описано от и до — то это спасло бы кучу моих нервов и времени. Именно поэтому я записывал каждый сделанный шаг и в итоге решил написать это пошаговое руководство по пробросу видеокарты в ESXi. Да, конечно, лучше было бы описать всё на английском (in english), т.к. больше всего вопросов и ответов именно на этом языке, но как смог — так и сделал. Надеюсь, что зарубежные братья, кто столкнется с этим вопросом смогут воспользоваться google translate, чтобы не мучаться и сделать всё так, как я описал выше.

Мне будет очень приятно, если вы поделитесь этой публикацией где-то на форуме (в момент, когда кто-то столкнется с такой же проблемой) или в каком-то чате, где у кого-нибудь возникнет этот же вопрос. Я потратил целый день, чтобы написать статью и разложить всё по полочкам, т.к. у меня всё было скомкано просто в текстовом файле в виде команд и ссылок откуда я взял эту информацию.

Спасибо за внимание и да прибудет сила Deep Learning вместе с GPU!

Полезные ссылки

Официальный гайд по настройке GVT-g

Руководство пользователя по Dma-bufСтатья по настройке Intel GVT-g на NixOS WikiСтатья на Arch Wiki про libvirtНастройка сети в KVM на беспроводном интерфейсеСайт, посвящённый Intel GVT-g

P. S.: Спасибо aNNiMON за помощь в вычитке текста перевода и исправлении ошибок.

Настройка гостевой Ubuntu

Открываем терминал и вводим команду ifconfig.

04_ifconfig-300x227.png

И так, интерфейс enp0s3 служит для выхода в интернет, а enp0s8 для связи гостевой системы с хостом. Ок, давайте пропишем enp0s8 статический IP. Например, 10.0.1.10.

Открываем sudo gedit /etc/network/interfaces

Сохраняем и перезапускаем сеть, командой:

Ждем и проверяем, запустим пинг на 8.8.8.8

05_check_internet-300x227.png

Отлично все работает. Теперь проверим доступ с хоста к гостевой системе. Запускаем пинг на 10.0.1.10

06_ping_guest-300x137.png

Источники

  1. http://vmind.ru/2016/08/08/probros-videokarty-nvidia-v-vmware-esxi-6-0/
  2. https://kb.vmware.com/s/article/2142307
  3. https://askubuntu.com/a/951892
  4. https://developer.download.nvidia.com/compute/cuda/9.1/Prod/docs/sidebar/CUDA_Installation_Guide_Linux.pdf
  5. http://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#install-libraries
  6. https://devtalk.nvidia.com/default/topic/993862/cuda-8-0-missing-required-libraries-on-ubuntu-16-04/
  7. https://www.linkedin.com/pulse/installing-nvidia-cuda-80-ubuntu-1604-linux-gpu-new-victor
  8. https://askubuntu.com/a/537608
  9. https://github.com/BVLC/caffe/wiki/Caffe-on-EC2-Ubuntu-14.04-Cuda-7
  10. https://devtalk.nvidia.com/default/topic/1028566/cuda-setup-and-installation/cuda-9-1-install-fail-with-ubuntu-16-04-kernel-version-4-13-0-26/post/5232909/#5232909
  11. https://devtalk.nvidia.com/default/topic/1028566/cuda-setup-and-installation/cuda-9-1-install-fail-with-ubuntu-16-04-kernel-version-4-13-0-26/post/5232909/#5232909
  12. https://serverfault.com/questions/837369/esxi-6-5-server-no-vsphere-sched-mem-min-error-related-to-pci-passthrough
  13. https://devtalk.nvidia.com/default/topic/878117/cuda-setup-and-installation/-solved-titan-x-for-cuda-7-5-login-loop-error-ubuntu-14-04-/
  14. https://askubuntu.com/a/884574
  15. https://kislayabhi.github.io/Installing_CUDA_with_Ubuntu/
  16. https://kb.vmware.com/s/article/2073803
  17. https://askubuntu.com/questions/803648/16-04-on-esxi-6-screen-resolution
  18. https://devtalk.nvidia.com/default/topic/769851/multi-nvidia-gpus-and-xorg-conf-how-to-account-for-pci-bus-busid-change-/

Присвоение имен

Так как я не слишком “дружу” с числами и IP-адресами, то для себя я всегда использую имена для гостевых систем вместо присвоения им IP-адресов. Для этого я редактирую файл /etc/hosts на машине-хосте и добавляю туда ссылки. Таким образом, я могу просматривать запущенные гостевые системы по их именам.

В файл /etc/hosts я добавляю строку:

Если я добавляю еще несколько гостевых систем с сеть, то мне достаточно отредактировать этот файл и дописать нужное количество строк. Благодаря такому приему я легко могу обратиться к любой из этих систем.

Рейтинг
( 1 оценка, среднее 5 из 5 )
Загрузка ...