Поддержка NVIDIA GRID в VMware ESXi

Alexander Bazhenov
5 min readOct 21, 2016

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

При использовании хоста VMware ESXi функционирование NVIDIA GRID возможно в двух режимах:

  • Virtual Shared Graphics Acceleration (vSGA) — это технология виртуализации GPU, позволяющая запускать теоретически неограниченное количество виртуальных машин использующих ресурсы одной графической карты. Обладает множеством ограничений по функционалу виртуальных карт, однако может обеспечить максимальную “плотность” виртуальных машин на одну видеокарту. Список видеокарт, поддерживающих данную технологию можно получить в VMware Compability Guide.
  • Virtual Graphics Processing Unit (vGPU) — технология виртуализации GPU, где каждая виртуальная машина получает свой vGPU, практически без потери производительности. Очевидным недостатком данной технологии является ограниченное количество графических юнитов на плате: например, для NVDIA GRID K1 доступно 4 юнита.

Но для функционирования этих режимов на хосте VMware ESXi нужно предварительно установить драйвер.

Подготовка хоста ESXi.

В первую очередь необходимо скачать драйвер с сайта NVDIA. Здесь есть vib-пакеты, как для добавления драйвера в установочный образ ESXi (offline bundle), так и для последующей установки драйвера на хост ESXi. Для того, чтобы разместить vib-пакет на хранилище хоста ESXi можно использовать vSphere Client, или передать его по SSH c помощью WinSCP. Далее, подключившись к хосту ESXi, переводим его в Maintance Mode (из vSphere Client, или напрямую из консоли) и выполняем установку пакета командой в следующем формате:

# esxcli software vib install -v "/path_to_vib/nvidia_vib"

Например:

# esxcli software vib install -v "/vmfs/
volumes/22fcd6a6-7adb3420-7d2c-0cc47a257022/NVIDIA-kepler-VMware_ESXi_6.0_Host_Driver_352.54-1OEM.600.
0.0.2494585.vib"

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

Далее необходимо запустить Xorg:

Host > Configuration > Software > Security Profile > Services > Properties

Нажать “Start” и выбрать “Start and stop with host”.

Запустить Xorg можно так же через SSH:

/etc/init.d/xorg start

Для того, чтобы удалить или обновить драйвер на хосте ESXi необходимо сначала остановить Xorg:

# /etc/init.d/xorg stop

и удалить NVIDIA VMkernel драйвер командой:

# vmkload_mod -u nvidia

Теперь необходимо идентифицировать VIB-пакет:

# esxcli software vib list | grep NVIDIA

и удалить его командой:

# esxcli software vib remove -n nameofNVIDIAVIB

Для обновления vib-пакета можно использовать команду:

# esxcli software vib update -v "/path_to_vib/nvidia_vib"

Virtual Shared Graphics Acceleration (vSGA).

После того, как установлен драйвер и запущен Xorg, всем виртуальным машинам хоста будет доступен графический адаптер, определяемый в системе, как VMware SVGA 3D. (для некоторых гостевых систем, таких как Windows, может так же потребоваться установка WMware Tools).

Теперь можно перейти в свойства виртуальной машины, увеличить объем используемой видеопамяти и включить поддержку 3D-опций (Enable 3D Support).

Обратите внимание, что использование 3D-опций для Windows 2008/2012 Server отключено по умолчанию. Для их активации необходимо:

  1. Поменять тип ОС на Windows 7/8 (в Options > General Options)
  2. Добавить в конец файла VMX (файла-конфигурации виртуальной машины) строку:
mks.enable3d = "TRUE"

и перезагрузить виртуальную машину командой:

# vim-cmd vmsvc/reload <VMID>

Более подробную информацию можно получить здесь.

Virtual Graphics Processing Unit (vGPU).

Режим vGPU представляет из себя “проброс” (passthrough) графических юнитов видеокарты в гостевые системы. Например, для NVDIDA GRID K1 возможен “проброс” четырех агрегированных устройств vGPU и, следовательно, можно использовать видеокарту на четырех виртуальных машинах.

Для активации “проброса” устройства м выбора агрегирования устройства откройте:

Advanced Settings > Configuration > DirectPath I/O Configuration

Выберите нужное количество vGPU для “проброса” через хост ESXi, нажмите ОК и перезагрузите хост ESXi.

Теперь после перезагрузки в свойствах виртуальной машины можно добавить PCI Device, где в открывшемся списке появятся проброшенные на хост vGPU. Остается скачать и установить соответствующий вашей гостевой системе драйвер. Например, драйвер для OS Windows 7/8/10/2008/2012 можно скачать здесь, а после его установки система распознает устройство, как NVDIDIA GRID K1/K2.

vSGA vs. vGPU.

Разумеется, доступность тех, или иных функций API видеокарты их работоспособность в софте будет еще зависеть и от используемой технологии для публикации приложений и рабочих столов: наиболее высокую графическую производительность на сегодняшний день дают Citrix XenDesktop и VMware Horizon.

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

GPU-Z для vSGA выдает неутешительную картину, отзываясь о большинстве параметров как “Unknown”, тогда как по результатам Everest видно, что даже поддержка OpenGL осуществляется не полностью:

Соответствие OpenGL:
OpenGL 1.1 - 2.1: Да (100%)
OpenGL 3.0: Нет (42%)
OpenGL 3.1: Нет (33%)
OpenGL 3.2: Нет (50%)

Подробный отчет — здесь.

vSGA — вполне разумное решение, где требуется максимально возможное количество одновременно работающих пользователей, использующих даже довольно так и продвинутое офисное программное обеспечение. Конечно, немалая часть ресурсов будет расходоваться на трансляцию обращений к API из виртуальных машин к графическому адаптеру, но зато позволяет предоставить доступ к графическому адаптеру для максимально возможного количества виртуальных машин — их количество будет в основном ограниченно объемом памяти графического адаптера.

Если требуется более расширенный режим, то стоит задуматься о переходе к vGPU. Здесь показания GPU-Z уже выглядят намного солидней (поддерживаются следующие API: DirextX, OpenCL, Direct Compute и CUDA), EVEREST говорит о 100% совместимости со всеми версиями OpenGL и, так же, уже стоит обратить внимание на результаты GPU Shark. Таких графических возможностей уже должно быть достаточно для использования дизайнерских программ. В остальном, работоспособность функционала различных API и производительность подлежит тестированию в конкретном программном обеспечении.

--

--