Не так давно, начав более плотно изучать тему удаленной работы VDI со всевозможными CAD программами, мне захотелось собрать свой домашний стенд для проверки работы технологий ускорения графики - VMware vDGA/vSGA, Microsoft RemoteFX и Citrix HDX 3DPro.
Небольшое отступление: важно понимать, что аппаратная модификация бюджетной видеокарты не добавит ядер, не увеличит частоту и объем памяти, и, соответственно, не позволит добиться уровня производительности оригинала, но позволит обойти ограничения на уровне драйвера и биоса видеокарты, не позволяющих включить аппаратное ускорение.
Для экспериментов была выбрана видеокарта Asus GT640-1GD3-L.
Во-первых, GT 640 и GRID K1 основаны на одном и том же ядре - Kepler GK107 (в K1 используется 4-е таких ядра), во-вторых, для превращения в GRID K1 достаточно перепаять несколько резисторов, в-третьих, GT 640 - самый бюджетный из вариантов, и, в случае неудачи, эту видеокарту будет не так жалко, как какой-нибудь GTX 680.
Для определения PCI Device ID устройства используются следующие резисторы (показаны на рисунке под номерами 1, 2, 3, 4).
Для того, чтобы сменить ID нужно перепаять резисторы в соответствии с таблицей.
Поскольку у меня руки для таких дел растут где-то из области тазобедренной части, то я попросил квалифицированных знакомых, сделали все идеально.
После модификация я получил свой GRID K1 (с одним ядром и гагабайтом памяти).
В VMware View можно использовать на выбор один из двух режимов ускорения графики - vSGA или vDGA. Прочитать про их отличия можно в этой статье или в документе Virtual Machine Graphics Acceleration Deployment Guide.
Для работы vDGA требуется, чтобы процессор и материнская плата сервера поддерживали режим виртуализации периферийных устройств (Intel VT-d).
Кроме того, для ВМ, к которой подключается видеокарта, требуется зарезервировать всю выделенную оперативную память.
Если вы используете ESXi 5.5 U2 или более ранние версии, и для ВМ выделено больше 2ГБ памяти, то в дополнительных настройках (файле .vmx) также нужно прописать параметр:
pciHole.start = 2048
Более подробная информация приведена в KB https://kb.vmware.com/kb/2142307
После проброса видеокарты, в гостевую ОС нужно установить драйвер для NVIDIA GRID K1 (доступны на сайте).
При подключении к ВМ я столкнулся с проблемой, что вместо GRID K1 используется виртуальный видеоадаптер VMware SVGA. Обойти это можно, если после подключения к ВМ, запустить диспетчер устройств (Device Manager) и отключить (Disable) адаптер VMware SVGA 3D. Подробности в этой теме.
Я записал небольшой ролик, показывающий аппаратное ускорение графики с помощью vDGA.
К сожалению, у меня нет под рукой камеры, которая может снимать с нормальным качеством и FPS, поэтому пришлось использовать запись с клиента с помощью Camtasia Studio. Заметил, что в видео наблюдается проседание FPS в роликах с 3D, в реальности все выглядит плавнее.
Для включения режима требуется установить специальный VIB пакет с драйверами на сам гипервизор ESXi. После этого появится возможность включать аппаратное ускорении 3D графики для ВМ.
Данный режим позволяет выделить одной ВМ от 96 до 512 МБ памяти, половина из которых - это память видеоадаптера, вторая половина - оперативная память сервера. Для мониторинга работы vSGA используются две консольные утилиты nvidia-smi и gpuvm, которые позволяют отслеживать объем занятой/свободной памяти.
Управлять настройками виртуального видеоадаптера можно из веб-консоли vSphere Web Client или из консоли Horizon View Administator.
Ролик, демонстрирующий возможности vSGA.
К сожалению, vSGA поддерживает графические библиотеки не выше DirectX 9 и OpenGL 2.1, что сильно ограничиваетсписок игр, в которые можно поиграть набор приложений, с которыми можно работать. Кроме того наблюдаются небольшие артефакты при проигрывании flash видео в полноэкранном режиме (хотя возможно это из-за того, что используется не полноценная GRID K1).
Модернизация видеокарты
Покупать для этого "полноценную" видеокарту за несколько тысяч $ было непозволительной роскошью, и даже б.у. видеокарты на eBay больно били по бюджету. Поэтому было решено попробовать "прошить" какую-нибудь настольную видеокарту, Just for Fun. Беглый поиск быстро привел меня к нужной теме на форуме EEVblog.Небольшое отступление: важно понимать, что аппаратная модификация бюджетной видеокарты не добавит ядер, не увеличит частоту и объем памяти, и, соответственно, не позволит добиться уровня производительности оригинала, но позволит обойти ограничения на уровне драйвера и биоса видеокарты, не позволяющих включить аппаратное ускорение.
Для экспериментов была выбрана видеокарта Asus GT640-1GD3-L.
Во-первых, GT 640 и GRID K1 основаны на одном и том же ядре - Kepler GK107 (в K1 используется 4-е таких ядра), во-вторых, для превращения в GRID K1 достаточно перепаять несколько резисторов, в-третьих, GT 640 - самый бюджетный из вариантов, и, в случае неудачи, эту видеокарту будет не так жалко, как какой-нибудь GTX 680.
Для определения PCI Device ID устройства используются следующие резисторы (показаны на рисунке под номерами 1, 2, 3, 4).
Для того, чтобы сменить ID нужно перепаять резисторы в соответствии с таблицей.
Поскольку у меня руки для таких дел растут где-то из области тазобедренной части, то я попросил квалифицированных знакомых, сделали все идеально.
После модификация я получил свой GRID K1 (с одним ядром и гагабайтом памяти).
В VMware View можно использовать на выбор один из двух режимов ускорения графики - vSGA или vDGA. Прочитать про их отличия можно в этой статье или в документе Virtual Machine Graphics Acceleration Deployment Guide.
vDGA
Для начала я решил попробовать пробросить видеокарту целиком внутрь ВМ (vDGA). Данный режим, хоть и не поддерживает GRID K1 на текущий момент, но должен работать с любыми видеокартами, даже с AMD Radeon.Для работы vDGA требуется, чтобы процессор и материнская плата сервера поддерживали режим виртуализации периферийных устройств (Intel VT-d).
Кроме того, для ВМ, к которой подключается видеокарта, требуется зарезервировать всю выделенную оперативную память.
Если вы используете ESXi 5.5 U2 или более ранние версии, и для ВМ выделено больше 2ГБ памяти, то в дополнительных настройках (файле .vmx) также нужно прописать параметр:
pciHole.start = 2048
Более подробная информация приведена в KB https://kb.vmware.com/kb/2142307
После проброса видеокарты, в гостевую ОС нужно установить драйвер для NVIDIA GRID K1 (доступны на сайте).
При подключении к ВМ я столкнулся с проблемой, что вместо GRID K1 используется виртуальный видеоадаптер VMware SVGA. Обойти это можно, если после подключения к ВМ, запустить диспетчер устройств (Device Manager) и отключить (Disable) адаптер VMware SVGA 3D. Подробности в этой теме.
Я записал небольшой ролик, показывающий аппаратное ускорение графики с помощью vDGA.
К сожалению, у меня нет под рукой камеры, которая может снимать с нормальным качеством и FPS, поэтому пришлось использовать запись с клиента с помощью Camtasia Studio. Заметил, что в видео наблюдается проседание FPS в роликах с 3D, в реальности все выглядит плавнее.
vSGA
Режим vSGA выглядит интереснее, потому что позволяет "расшаривать" одну видеокарту между несколькими ВМ.Для включения режима требуется установить специальный VIB пакет с драйверами на сам гипервизор ESXi. После этого появится возможность включать аппаратное ускорении 3D графики для ВМ.
Данный режим позволяет выделить одной ВМ от 96 до 512 МБ памяти, половина из которых - это память видеоадаптера, вторая половина - оперативная память сервера. Для мониторинга работы vSGA используются две консольные утилиты nvidia-smi и gpuvm, которые позволяют отслеживать объем занятой/свободной памяти.
Управлять настройками виртуального видеоадаптера можно из веб-консоли vSphere Web Client или из консоли Horizon View Administator.
Ролик, демонстрирующий возможности vSGA.
К сожалению, vSGA поддерживает графические библиотеки не выше DirectX 9 и OpenGL 2.1, что сильно ограничивает