Виртуализация и работа в виртуальных машинах (ВМ) прочно входят в нашу жизнь. Кто-то таким образом тестирует программное обеспечение (ПО), кто-то реализует рабочие места, а кто-то организует работу сервисов. Неизменно во всем этом деле только то, что программным образом ресурсы ПК/ноутбука делятся на несколько частей, пропорции которых задаете Вы или человек, который его администрирует. Однако можно ли в ВМ запускать любое ПО без ограничений и может ли она быть, как и ПК, МУЛЬТИМЕДИЙНОЙ? Давайте разбираться.
1. Введение
Обычно виртуализация — эта вполне себе успешная технология, сдерживалась в применении на личном среднестатистическом ПК/ноутбуке среднестатистической конфигурацией железа. Но тут надо сказать спасибо компании AMD, которая развязала в 2016м году, в конкуренции с Intel, гонку ядер/потоков в ЦП, из-за чего за эти 6 лет ТТХ среднестатистического ПК выросли как минимум вдвое, что и позволяет сегодня использовать их для работы ресурсоемкого ПО в ВМ.
Размышление о среднестатистическом рабочем ПК
Рабочие лошадки процессоров Intel Core i3 2-7 поколений 2 ядра/4 потока, Intel Core i5 2-7 поколений 4 ядра/4 потока. С 2017го года Intel начинает увеличивать число ядер/потоков в своих процессорах доведя до актуального 13го поколения для Intel Core i3 4 ядра/8 потоков и Intel Core i5 10 ядер/16 потоков.
Примерно то же самое произошло с количеством ОЗУ, когда в 2016м году 4Гб ОЗУ для офисного ПК считалось нормальным и 8+Гб для игрового на средних настройках, то сегодня это уже 8Гб и минимум 16+Гб соответственно.
Прим. Для десктопных модификаций ЦП.
Примерно то же самое произошло с количеством ОЗУ, когда в 2016м году 4Гб ОЗУ для офисного ПК считалось нормальным и 8+Гб для игрового на средних настройках, то сегодня это уже 8Гб и минимум 16+Гб соответственно.
Прим. Для десктопных модификаций ЦП.
При этом автор не в коей мере не впадает в ересь суждений о том что производительность ВМ может быть равной, или сравнимой с производительностью хоста, на котором она крутится в гипервизоре. Это не так, хотя бы потому что виртуализация всегда подразумевает деление ресурсов. Но в то же время выделяемых ресурсов может быть необходимо и достаточно, что бы быть сопоставимым по производительности с аналогичным железом на нативном ПК тех же параметров что и ВМ, для тех целей, которые Пользователь ставит перед собой, например: для игр, для проектирования, для видеообработки или для работы с 3d моделями.
Под мультимедийной системой обычно понимают комплекс программного и аппаратного обеспечения, предназначенный для обработки, хранения и воспроизведения мультимедийного контента (звук, анимированная компьютерная графика, видеоряд). В ряде случаев при использовании гипервизоров, а также различных технологий сетевого доступа к рабочему столу операционной системы (ОС) на ПК/ВМ, пользователи массово упираются в проблемы стрима видеопотока (в тех же RDP и VNC), а так же ограниченная поддержка 3d технологий программными видеокартами в ВМ. Однако есть методы, позволяющие задействовать видеокарту ПК/ноутбука в ВМ.
2. Преимущества и недостатки, ограничения
Здесь нужно привести примеры, в данном случае при помощи гипервизора Proxmox, как это работает для ПК и ноутбуков:
Видеоролик с результатами проброса mobile GTX1660ti Max-Q в ноутбуке:
Проброс видеокарты в ноутбуке. Laptop GPU Passthrough
Прим. В этой статье рендер Хабра заменил кавычки штрихом "" на кавычки елочкой «», при следовании гайду нужно это иметь ввиду.
Прим. В этой статье рендер Хабра заменил кавычки штрихом "" на кавычки елочкой «», при следовании гайду нужно это иметь ввиду.
Видеоролик с результатами проброса GTX1070 на десктопе:
Как из домашнего ПК средствами виртуализации сохранить игровую систему
Собственно «полноценной» ВМ нам делает технология GPU-Passthrough, которая является частным случаем PCI-Passthrough.
PCI-Passthrough позволяет вам получать доступ к аппаратным устройствам и управлять ими с виртуальной машины. Когда PCI-Passthrough настроена, устройства PCI работают так, как если бы они были физически подключены к гостевой ОС.
GPU-Passthrough сопоставляет физический GPU с виртуальной машиной. Затем операционная система виртуальной машины может использовать графический процессор так же, как если бы она работала на физической машине, оснащенной аппаратным графическим процессором.
На сколько это быстро работает? Достаточно быстро, что бы производительность пробрасываемого устройства была сравнимой с нативной системой, хотя некоторые просадки могут иметь место быть, о чем пойдет речь ниже. Рабочая же схема, в большинстве случаев, это когда Вы продолжаете работать за своим ПК, но теперь изображение на монитор видеокарта выводит из гостевой ВМ, а не с хоста. В свою очередь Пользователь получает возможность параллельно запускать другие ВМ, упрошенную систему бэкапов и контрольных точек, быстрое развертывание новых ВМ на основе шаблонов или копии выбранной, что упрощает вопросы тестирования, а так же переключения и работы в нескольких ВМ, в которых установлен разный комплект ПО, таким образом что бы не отвлекало можно держать ВМ для игр и ВМ для работы (в Linux/Windows/др. ОС).
Для того что бы можно было пользоваться технологией необходимо что бы ЦП и материнская плата конкретного ПК/ноутбука поддерживали следующее:
- для Интел VT-x, VT-d
- для АМД AMD-Vi, IOMMU
несмотря на то, что все больше чипсетов и ЦП получают такой функционал из коробки, конкретный производитель может ограничивать или реализовывать на своей материнской плате с ограничениями или даже отключать технологию. Так как полноценный перечень актуального оборудования отсутствует, есть лишь этот далеко не полный список, то здесь во многом придется положиться на поиск информации и анализ технической документации. Так же будут и отличаться пункты в меню BIOS/EFI, активирующие технологию. На текущий момент подобный трюк позволяют провернуть следующие гипервизоры 1-го типа:
- большинство тех, что используют Libvirt, например: те что основаны на KVM в Linux, ESXi, Xen
- Hyper-V
- VirtualBox хоть и относится к гипервизорам 2-го типа, но в версии для Linux, за счет Libvirt'а, все же позволяет осуществлять такой проброс пусть и с ограничениями, да и к тому же не для всех версий гипервизора.
В некоторых случаях, если постараться, можно не только пробросит видеокарту (ВК) игровую/интегрированную в ВМ, но и разделить ее ресурсы между несколькими ВМ. Однако у этих методов есть свои ограничения, соответственно пока что это остается уделом энтузиастов.
3. Тесты
Здесь и далее будет говориться о настройке и работе на ноутбуке в гипервизоре Proxmox.
3.1 Пара слов о характеристиках ПК, на котором будет устанавливаться ПО
Система виртуализации — гипервизор Proxmox 7.4-16,
Гипервизор установлен на ноутбук Hasee ZX7-CT5DA (он же Clevo N957TC)
Характеристики ноутбука:
ЦП — Intel Core i7-8700
ВК — GTX 1660Ti Max-Q (mobile)
ОЗУ — 16 GB (2666MHz)
Установленные диски — 512GB Phison SSD SATA m.2/1TB Samsung EVO 970 SSD NVMe m.2/250GB Samsung EVO 850 SSD SATA 2.5"
Дисплей — 15,6 ''IPS 45% NTSC
О настройке ВМ и других допущениях
Производительность ВМ на Windows 10 Pro v.21h2 сравнивалась с производительностью нативной Windows 10 Pro v.2004 в дуалбуте. Несмотря на то что это разные редакции, да и драйверы на видеокарту то же разных версий (495 и 465 версий соответственно), потому что ОС ставились в разное время, общее в работе ПО, программы для тестов и используемый диск для хранения данных — одинаковы.
Здесь стоит отметить что в параметрах ВМ пробрасывается SSD SATA-III диск Samsung SSD 850 EVO 250Gb с параметром cache=writethrough, что увеличивает производительность, хотя и не добавляет надежности. Потоки ЦП прокинуты в систему как host, видеокарта проброшена в ВМ полностью.
Тесты на нативной системе проводились как при отключенных 4-х потоках через утилиту MSConfig, для того что бы сравнить 8 потоков ВМ против ограниченных 8 потоков нативной Windows, так и без всяких блокировок.
Здесь стоит отметить что в параметрах ВМ пробрасывается SSD SATA-III диск Samsung SSD 850 EVO 250Gb с параметром cache=writethrough, что увеличивает производительность, хотя и не добавляет надежности. Потоки ЦП прокинуты в систему как host, видеокарта проброшена в ВМ полностью.
Тесты на нативной системе проводились как при отключенных 4-х потоках через утилиту MSConfig, для того что бы сравнить 8 потоков ВМ против ограниченных 8 потоков нативной Windows, так и без всяких блокировок.
3.2 Тесты процессора
CPU-Z 1.96.1
Виртуальная машина
Хостовая система с ограничением логических потоков до 8шт.
Хостовая система без ограничения блокировки ЦП по потокам
Хостовая система с ограничением логических потоков до 8шт.
Хостовая система без ограничения блокировки ЦП по потокам
WinRAR
Виртуальная машина
Хостовая система с ограничением логических потоков до 8шт.
Хостовая система без ограничения блокировки ЦП по потокам
Хостовая система с ограничением логических потоков до 8шт.
Хостовая система без ограничения блокировки ЦП по потокам
3.3 Тест памяти
AIDA64 Cach & Memory Benchmark (v.6.33.5700)
В виртуальной среде данные теста некорректные
Хостовая система с ограничением логических потоков до 8шт.
Хостовая система без ограничения блокировки ЦП по потокам
Хостовая система с ограничением логических потоков до 8шт.
Хостовая система без ограничения блокировки ЦП по потокам
3.4 Тестирование рабочего диска
Crystal Disk Info + Crystal Disk Mark
3.5 Тесты видеокарты
GPU-Z 2.40
AIDA64 GPGPU Benchmark (v.6.33.5700)
Виртуальная машина
Хостовая система с ограничением логических потоков до 8шт.
Хостовая система без ограничения блокировки ЦП по потокам
Хостовая система с ограничением логических потоков до 8шт.
Хостовая система без ограничения блокировки ЦП по потокам
Unigine Heaven Benchmark 4.0
Виртуальная машина
Хостовая система с ограничением логических потоков до 8шт.
Хостовая система без ограничения блокировки ЦП по потокам
Виртуальная машина
Хостовая система с ограничением логических потоков до 8шт.
Хостовая система без ограничения блокировки ЦП по потокам
Тест в игре Cyberpunk 2077
3.6 Анализ и сравнение производительности
— неожиданно, 8 host потоков ЦП ВМ в Proxmox оказываются быстрее 8-ми потоков нативной Windows 10;
— тесты производительности видеокарты в ВМ и в нативной Windows 10 идентичны;
— за счет кэша операции записи/чтения дисковой подсистемы (2.5" SATA SSD Samsung EVO 850) в ВМ работают быстрее для больших блоков данных, но медленнее для случайных блоков, вносит заметную корректировку в результат графического теста Unigine Heaven Benchmark. Возможно это можно решить подкруткой параметров в Proxmox, однако такой результат все равно выше, чем у обычного SATA HDD 2,5"/3,5" на запись/чтение для тех же случайных 4кб блоков;
— графический бенчмарк Unigine Heaven Benchmark 4.0, как и Cyberpunk 2077, показали достаточно спорный результат, т.к. средний fps в ВМ оказался выше чем на нативной Windows 10, возможно из-за кэширования, но в любом случае эти значения достаточны для того что бы нормально играть/работать во многие игры/приложения на средних-высоких настройках как ВМ так и на нативной Windows 10. В случае же игр, даже ААА-проектов прошлых лет, например 2016г. Detroit: Become Human, игра на этом же железа работает без просадок на 60 фиксированных fps в разрешении FHD, то же касается FF7 — Remake и Horizon Zero Dawn. Т.е. на практике, за счет настроек или за счет менее требовательных к железу игр, обычно просто более старых, на этом ноутбуке в ВМ можно комфортно играть на средне-высоких. Я уже молчу про работу с видео, рендер сцен и занятия графикой в CAD системах, например Revit/ArchiCAD/Renga.
4. Заметки на полях. Общие замечания
— С Cyberpunk 2077 и другими приложениями есть один нюанс. Некоторые игры и античиты, Cyberpunk 2077 входит в их число, производят проверку на включенную виртуализацию в системе/работу из-под ВМ. Конкретно Cyberpunk 2077 начинает резать fps. При этом настройки качества графики, параметры игры, разрешение — не влияют на производительность. В моем случае было 19-26 кадров, у парня с reddit'а 28.
Но стоило скрыть от гостя что ОС запущена в виртуалке и внезапно все наладилось.
Вносим ручками правки в конфигурационный файл ВМ
args: -cpu 'host,-hypervisor,kvm=off'
cpu: host,hidden=1
— В некоторых случаях для пробрасываемой видеокарты в ноутбуке, обычно это связано в работе ВМ с Linux'ом, а так же повышения производительности можно/необходимо отключить режим экономия питания
Для Proxmox на Debian Linux
Открываем файл grub для правок:
в строку содержащую: GRUB_CMDLINE_LINUX_DEFAULT=«quiet...», необходимо добавить параметр pcie_aspm=off, после чего сохранить файл, дать команду:
и перезагрузиться:
Примечание:
1. Если Вы используете консоль от root'а, то команду sudo можно опустить
2. Proxmox ставится не только на Debian и его семейство, но это совсем другая история.
sudo nano /etc/default/grub
в строку содержащую: GRUB_CMDLINE_LINUX_DEFAULT=«quiet...», необходимо добавить параметр pcie_aspm=off, после чего сохранить файл, дать команду:
sudo update-grub
и перезагрузиться:
sudo reboot now
Примечание:
1. Если Вы используете консоль от root'а, то команду sudo можно опустить
2. Proxmox ставится не только на Debian и его семейство, но это совсем другая история.
— ВМ на Linux'е и GPU Passthrough. Если коротко, то тут все сложно. Если удалось завести GPU Passthrough на Windows, то все будет упираться в наличие драйвера для видеокарты (например в ВМ с Windows XP нельзя завести видеокарты от Nvidia старше 900-й линейки), а вот для Linux видеокарты Nvidia, а так же гибридные видеокарты, могут приносить проблему. В моем случае на ноутбуке работоспособность ограниченная:
- Alt Linux работает со всеми старыми и современными драйверами Nvidia.
- Debian Linux и его производные (в частности Ubuntu, Deepin) работают только с драйверами 418-450 tesla из репозиториев дистрибутивов Linux включительно. Более новые версии видео-драйверов приводят к черному экрану и невозможности загрузиться.
- Astra Linux CE 2.12.45 — на версии видеодрайвера 470 и ядре 5.10 система видит видеокарту, но определяет ее по ID, а не по имени, но работает
- Fedora Linux, RedOS — старый драйверы в репозиториях из указанного диапазона в новых версиях ОС Linux отсутствует, скачанный с сайта Nvidia не завелся.
- Ветка Arch Linux. Тут все сложно, на одной из первых версий Proxmox 7 у меня завелась Garuda Linux, но позднее ни она, ни Manjaro Linux
- При этом любые Linux'ы работают без проблем на видеодрайвере nouveau, что наводит на всякие нехорошие мысли
Скриншоты ошибок. Траффик
— Несмотря на то что в современных видеодрайверах Nvidia не блокирует для своих игровых видеокарт функционал GPU Passthrugh, иногда бывает важно все же избежать, широко известной в узких кругах, Ошибки 43 из-за драйверов.
- Первый метод основан на том, что нужно подменить переменную hv_vendor_id на какую-то нестандартную ахинею, например вписав в файл-конфиг ВМ следующее:
args: -cpu 'host,+kvm_pv_unhalt,+kvm_pv_eoi,hv_vendor_id=NV43FIX,kvm=off'
cpu: host,hidden=1 - Второй метод Был подсказан мне французом на Youtub'е под одним из моих видео приведенных мною в начале статьи:
# echo "softdep nouveau pre: vfio-pci" >> /etc/modprobe.d/nvidia.conf
# echo "softdep nvidia pre: vfio-pci" >> /etc/modprobe.d/nvidia.conf
# echo "softdep nvidia* pre: vfio-pci" >> /etc/modprobe.d/nvidia.conf
— Как поделить ресурсы видеокарты на несколько ВМ (есть ограничения)
Proxmox vGPU Gaming Tutorial - Share Your GPU With Multiple VMs!
— Помимо GPU Passthrough возможно разделение ресурсов интегрированной видеокарты (iGPU) на несколько ВМ, при этом изображение/картинка останется хосту. Т.к. для этого используется технология Intel GVT-g, то это будет работать только для ЦП от Intel с 4-го по 10-е поколение, с переходом на интегрированные графические ядра Iris эта технология перестала поддерживаться.
— GPU Passthrough означает что картинку придется снимать обычным видеокабелем с видеокарты, но что если нам нужна большая гибкость и хотелось бы поиграть на другом устройстве, используя такую виртуалку/ПК для удаленного стрима игры? Проект Looking Glass решает эту проблему.
Проект Looking Glass a11 - проброс кадров из виртуалки
— Кроме Проекта Looking Glass такую же задачу решает Steam RemotePlay
Как играть удалённо с ноутбука через интернет и Steam
— Дополнительные ссылки в продолжение темы:
habr.com/ru/company/ruvds/blog/584910
habr.com/ru/company/ruvds/blog/585986
moonlight-stream.org
5. Итоги
Столкнувшись с этой технологией и применив ее впервые в своей жизни в 2019м году, вот уже 4 года я пользуюсь ей и дома и на работе, в т.ч. и в командировках. Конечно чтобы разобраться, подобрать железо и ПО, на первых порах, это может оказаться трудозатратно, но затем… жизнь становится проще, появляется выбор: ограничить себя сегодня, чтобы ничто не отвлекало, или же сегодня загрузиться в виртуалку, где есть все. Тесты, новые ОС и их настройка, сервисы, бэкап/снапшоты и откат системы из авраловой рутины превратились в простые операции (оч.умелые ручки). Конечно я понимаю что это узкий случай, но сегодня это проще, чем было несколько лет назад. Тем более, что производительности современных ПК/ноутбуков хватает чтобы в ВМ было как комфортно поработать, так и комфортно поиграть! При условии хорошего железа, даже из 2018-2019 гг.
Всем Добра! Берегите себя и Ваших близких ;) и…
делай бэкап!