Мы много писали про функции ускорения 3D-графики в решении для виртуализации настольных ПК VMware View (например, тут и тут). Это режимы vSGA и vDGA, поддержка которых появилась еще в версии VMware View 5.2, но полноценно была добавлена только в версии VMware View 5.3. Ниже мы расскажем о некоторых аспектах использования этих режимов, опираясь на полезнейший документ "Graphics Acceleration in VMware
Horizon View Virtual Desktops", где помимо теории даны и практические советы по настройке инфраструктуры для работы виртуальных машин в режимах vSGA и vDGA.
Итак, начнем с определений:
Soft 3D - рендеринг 3D-картинки без использования адаптера на основе программных техник с использованием памяти сервера.
vDGA - выделение отдельного графического адаптера (GPU) одной виртуальной машине.
vSGA - использование общего графического адаптера несколькими виртуальными машинами.
Сразу отметим, что забота о поддержке режимов vDGA и vSGA лежит на плечах вендоров графических адаптеров. Пока этим в достаточной степени прославилась только компания NVIDIA.
Ниже рассмотрим картинку, на которой представлены варианты использования графических режимов для различных типов задач, которые предполагаются для работников, использующих виртуальные ПК:
Условно тут можно выделить 4 типа пользователей, касательно графически интенсивных нагрузок:
Task Worker - обычный сотрудник (например, программист или менеджер по продажам), который не использует специальных графических программ и тяжелых нагрузок. Для него вполне подойдет софтверный рендер
Knowledge Worker - этот человек имеет в своем распоряжении некоторое программное обеспечение, трубующее работы с графической подсистемой (например, иногда запускает Adobe Photoshop или смотрит видеоролики). Некоторым (в зависимости от частоты использования этих средств) вполне подойдет софтверный рендер, но кому-то будет нужная машина с поддержкой аппаратного рендеринга (но, скорее всего, в режиме vSGA).
Desktop Power User - этот человек уже интенсивно работает с графическими пакетами, возможно, на нескольких мониторах. При этом используются графические библиотеки OpenGL или DirectX (но не самых последних версий).
Workstation User - этот пользователь профессионально использует виртуальный десктоп для графически-интенсивных нагрузок (например, CAD-приложения или приложения для обработки и кодирования видео). Отличительная черта таких пользователей - профессиональное использование основного инструмента, требовательного к графике.
Соответственно, на диаграмме видно, когда и какой режим работы с графикой нужно использовать, в зависимости от категории пользователей. Практически это выглядит следующим образом: например, обычные офисные приложения вполне будут работать в режиме vSGA:
А вот некоторые пользователи тяжелых графических программ (например, Adobe Premiere) будут чувствовать себя комфортно только в режиме vDGA:
Режим vSGA
Идем дальше. Режим vSGA - это самый простой и эффективный способ использовать аппаратное ускорение для 3D-графики в виртуальных машинах. Он ограничивает системного администратора только объемом видеопамяти, которой, однако, у адаптера тоже не бесконечно много. На март этого года для режима vSGA поддерживаются следующие адаптеры:
Nvidia GRID K1
NvidiaGRID K2
Nvidia Quadro 4000
Nvidia Quadro 5000
Nvidia Quadro 6000
Nvidia Tesla M2070Q
В режиме vSGA есть три варианта использования:
Automatic - аппаратное ускорение будет использовано только в случае доступного и подходящего GPU на хосте, где эта ВМ запущена. Если такого нет - то используется софтверный рендер. Когда машина переместится на подходящий хост - включится режим vSGA.
Software only - всегда используется софтверный рендер (даже если есть свободные ресурсы GPU). Эта конфигурация работает на любом хосте.
Hardware only - обязательное использование аппаратного ускорения. В этом случае проверяются условия при старте или миграции виртуальной машины на другой хост. Если они не выполняются - этого не происходит.
Disabled - 3D-рендеринг не используется вовсе.
В плане драйвера гостевой ОС используется стандартный драйвер VMware SVGA 3D graphics. Но на сам ESXi нужно поставить специальные VIB-пакеты, которые будут обеспечивать работу виртуальных машин в режиме vSGA. Например, драйвер для ESXi 5.1 находится тут, а для ESXi 5.5 - тут.
Режим vDGA
Этот режим предназначен для случая, когда отдельный GPU нужно целиком и полностью отдать виртуальной машине. Этот режим основан на технологии VMware vSphere DirectPath I/O (то есть, прямой проброс устройств). Соответственно, здесь важно количество GPU на хосте VMware ESXi, которое и определяет максимальное количество запущенных виртуальных машин с поддержкой vDGA. Ну а максимальное число таких GPU на сервере определяется числом слотов PCIe x16 (нужно множить на число GPU у одного адаптера).
Например, на сервере Dell R720 может быть две карты NVIDIA GRID K2, каждая из которых имеет 2 GPU. Таким образом, максимальное количество виртуальных машин с поддержкой vDGA может быть четыре штуки.
В случае с vDGA используется драйвер от вендора, который и занимается работой с нижележащим оборудованием и видеокартой. На данный момент режим vDGA поддерживается для следующих графических адаптеров:
Nvidia GRID K1
Nvidia GRID K2
Nvidia Quadro K2000
Nvidia Quadro K4000
Nvidia Quadro K5000
Nvidia Quadro K6000
Nvidia Quadro 1000M
Nvidia Quadro 2000
Nvidia Quadro 3000M
Nvidia Quadro 4000
Nvidia Quadro 5000
Nvidia Quadro 6000
Nvidia Tesla M2070Q
Кстати, при использовании таких адаптеров нужно учитывать электропитание серверов, так как, например, NVIDIA Quadro 6000 GPU использует до 200 Ватт мощности.
Если объединить специфику режимов софтверного рендера, vSGA и vDGA получится вот такая табличка:
Тут надо отметить, что как для vSGA, так и для vDGA режимов поддерживаются только гостевые ОС Windows 7 (для vSGA - x86 и x64, для vDGA - только x64).
Текущее выделение графических адаптеров и режим их работы можно проверить следующей командой на сервере VMware ESXi:
# gpuvm
Вывод будет примерно таким:
# gpuvm
Xserver unix:0, GPU maximum memory 2076672KB
pid 118561, VM “Test-VM-001”, reserved 131072KB of GPU memory
pid 664081, VM “Test-VM-002”, reserved 261120KB of GPU memory
GPU memory left 1684480KB