суббота, 31 августа 2013 г.

"Вольтмод" для VMware View

Не так давно, начав более плотно изучать тему удаленной работы VDI со всевозможными CAD программами, мне захотелось собрать свой домашний стенд для проверки работы технологий ускорения графики - VMware vDGA/vSGA, Microsoft RemoteFX и Citrix HDX 3DPro.

Модернизация видеокарты

Покупать для этого "полноценную" видеокарту за несколько тысяч $ было непозволительной роскошью, и даже б.у. видеокарты на 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, что сильно ограничивает список игр, в которые можно поиграть набор приложений, с которыми можно работать. Кроме того наблюдаются небольшие артефакты при проигрывании flash видео в полноэкранном режиме (хотя возможно это из-за того, что используется не полноценная GRID K1).

14 комментариев:

  1. Очень заинтересовала ваша статья. Я сделал похожий мод для gtx650 и хотел потестировать карту в режиме vSGA, но, сколько я не пытался, не смог запустить xorg. Что я только не пробовал, разные версии esxi, разные материнские платы... Можно ли с вами как-то связаться и спросить совета?

    ОтветитьУдалить
    Ответы
    1. Этот комментарий был удален автором.

      Удалить
    2. Этот комментарий был удален автором.

      Удалить
    3. В общем мне удалось повторить данный эксперимент.
      Оставлю тут свое маленькое и скромное IMHO.
      К1 ничем не отличается по производительности в режиме vSGA от софт режима, просто появляется возможность запускать софт чувствительный к наличию поддержки технологий(DirectX, OpenGL 2.1, и т.д.).

      Удалить
  2. Подскажите по резисторам там точно 40кОм . Просто таких не существует может 39кОм подойдет вместо 40 ? Кто вам паял ?

    ОтветитьУдалить
    Ответы
    1. 40 кОм указано в посте на форуме, откуда я брал информацию о переделке. В моем случае подошли резисторы на 39 кОм.

      Удалить
  3. Жаль что поздно наткнулся на Ваш пост.

    Если тестовый стенд ещё рабочий хочу Вас попросить следующее - сделать скриншоты где будет видно результаты 3DMark, при работе видеокарты локально и через vDGA.

    Кстати интересно - ведь Nvidia GRID K1 и Quadro K600 так же имеют одинаковые чипы, просто в GRID их 4. Нельзя ли с помощью перепайки резисторов сделать из 640 Quadro K600? Я понимаю что надо "копать" форум по ссылке, но может Вы уже сталкивались с подобным?

    ОтветитьУдалить
    Ответы
    1. К сожалению, уже разобрал. Субъективно - разница в производительности между физической рабочей станцией и vDGA была. До этого тестировал на обычной физической станции с PCoIP Host Adapter - разница по сравнению с обычным локальным десктопом была только в небольших подлагиваниях звука и при подключении всякой USB периферии.

      Удалить
    2. Этот комментарий был удален автором.

      Удалить
  4. Спасибо за пост. Попробовал повторить и получил два Grid K1 из двух точно таких же адаптеров.
    Винда определяет корректно, GPU-Z, панель nVidia показывает. Вск корректно, бенчмарки работают.
    Подключаю к ESXi 5.5, ставлю успешно драйвера через esxcli software vib install. Xorg не стартуют, в логах xorg: Failed to initialize the NVIDIA GPU at PCI:1:0:0
    Пробовал на 4 разных материнках, две разные инсталляции Esxi: 5.1u1 и 5.5. Обе видяхи на всех платформах показывают одну и ту же ошибку. Драйвер (Esxi 5.5) NVIDIA-VMware_ESXi_5.5_Host_Driver 319.65-1OEM.550.0.0.1331820

    ОтветитьУдалить
    Ответы
    1. У меня тоже не завелось на тестовом стенде, на разных версиях драйвера - разные ошибки давало. Поставил мать из серии Intel S5520, сразу завелась.

      Удалить
  5. Hey Andrey, thanks! I was in the market for finding a ESXi 5.5 compatible video card and was on the trigger to buy a $300 Quadro 4000, but I ended up modifying the GT640 for $70USD. Thanks for the descriptive article.

    ОтветитьУдалить
  6. а есть данные откуда были взяты резисторы и их номиналы? Досталась плата немного другого дизайна, там разметка резисторов другая. Понять бы, куда ведут эти резисторы, на ноги PCI, на ноги EEprom или куда? Может принципиальная схема есть?

    ОтветитьУдалить
    Ответы
    1. Резисторы и номиналы подсмотрел на форуме EEVblog. Ссылка есть в начале статьи.

      Удалить