Проброс видеокарты NVIDIA в VMware ESXi 6.0

diz решил поделиться своим опытом проброса видеокарты NVDIA GTX в ESXi 6.0.

Добрый день, дорогие друзья!

Говорят, что с 2015-ого года работодатели стали сразу выгонять с собеседования ИТ-шников, если вдруг выясняется, что у них нет личного сервера с развернутым частным облаком.

Чтобы не выбиваться из тренда, я собрал дома небольшой двухпроцессорный сервер на базе материнской платы SUPERMICRO X9DRI-F и пары Xeon E5-2670. Т.к. несколько лет своей жизни я посвятил, в т.ч. администрированию инфраструктуры VMWare, то в качестве гипервизора виртуализации был выбран именно ESXi.

Частное облако-домашняя лаба — это, конечно, замечательно и здорово, однако, для комфортной повседневной работы и StarCraft2 желательно иметь доступ к дискретной видеокарте.

Тому, как задружить “бытовую” nVidia GTX и ESXi 6 и посвящается данная статья — краткий проводник-путеводитель по граблям.

Первое, что вам захочется сделать после установки дискретной видеокарты в сервер — переключить приоритет инициализации видеокарты в BIOS в пользу внешней, чтобы видеть POST прямо на экране подключенного к ней монитора. Этого делать не стоит, т.к. в таком случае вы потеряете возможность использовать iKVM материнской платы.

Итак, приступаем к пробросу видеокарты в виртуальную машину с MS Windows 10. Увидев web-интерфейс ESXi 6 я искренне обрадовался тому, что завязал с системным администрированием четыре года назад. Откладываем этот замечательный интерфейс в сторону, т.к. проброс видеокарты через него вы настроить не сможете, при старте виртуальная машина будет ругаться на несоответствие идентификатора устройства PCIe (PCIe passthrough device id invalid) и переключаемся на старый добрый и толстый клиент:

Жмем “Edit..”: nvidia_edit    И ставим галочки только напротив видеокарты и связанного HD AUDIO. Яочень рекомендую сперва добиться ее работоспособности, а уже потом пробрасывать мышку-клаву и звук.  nvidia_ptЗатем переходим к добавлению PCIe устройства в виртуальную машину:nvidia_pci

 В мире розовых пони, где nVidia не жлобы, а VMWare тестируют свои продукты перед релизом, на этом все бы и закончилось. В нашем реальном мире грабли только начинаются. Сперва выясняется, что мы выдали виртуальной машине >2 Гб памяти и теперь она не может поделить адресное пространство с видеокартой. SUPERMICRO протягивает свой FAQ помощи http://www.supermicro.com/support/faqs/results.cfm?id=34 Цитирую:

“We need to make sure GPU BARs are memory mapped above 4GB and to enable EFI firmware add the following 3 lines to configuration (.vmx) file of VM: «pciPassthru.use64bitMMIO = «TRUE» «, «firmware = «efi» » and «vmci.msix = FALSE «.”

VMX файл можно отредактировать руками, а можно в настройках виртуальной машины:  nvidia_vmx

Еще раз обращу внимание, что тип firmware виртуальной машины должен быть “EFI”, кстати, его можно поменять только через web gui, если будете пытаться менять его через толстый клиент, то он перескочит обратно на “BIOS”.

Далее наша виртуальная машина должна успешно запуститься, а драйвер видеокарты порадовать нас такой ошибкой:nvidia_error Суть проблемы: nVidia хочет чтобы все покупали видеокарты серий TESLA и QUADRO и выступает против того, чтобы пользователи занимались виртуализацией видеокарт “бытовых” серий. Драйвер детектит запуск в виртуальной машине и не дает видеокарте стартовать. Обходится при помощи того же трюка, который используется в nested виртуализации — прописыванием строчки hypervisor.cpuid.v0 = “FALSE” в vmx файле виртуальной машины.

 Почти все. Теперь при включении виртуальной машины у нас всего-навсего наглухо виснет гипервизор, даже не выкидывая PSOD. Просто все замирает без каких-либо записей в логах. Можно притвориться умным и сказать, что эту проблему мне помогло решить чтение главы “Problems with Device Assignment Dependencies” документа “Configuration Examples and Troubleshooting for VMDirectPath”, доступного по ссылке http://www.vmware.com/content/dam/digitalmarketing/vmware/en/pdf/techpaper/vsp-4-vmdirectpath-host-technical-note.pdf, но нет. Форумы в интернете забиты вопросами по этим симптомам с криками о том, что при переходе с версии 5.0 к более старшим VMWare сломала passthrough видеокарт (это относится как к nVidia, так и к ATI) и только один человек c ником mvrk нашел решение: необходимо отредактировать файл по пути /etc/vmware/passthru.map хоста виртуализации и исправить для нашей видеокарты режим проброса с bridge на link:

# NVIDIA
10de  ffff  link   false

Вот теперь можно переходить к пробросу мышки и клавиатуры. Тут тоже не обошлось без “особенностей”: когда я пробросил оба USB контроллера материнской платы в vm, драйвер видеокарты снова стал падать с 43й ошибкой. Решилось пробросом только одного контроллера, к портам которого я подключил оба устройства.

 Спасибо за внимание и всего хорошего!

 P.S. Как здорово, что я больше не админ.

Запись опубликована в рубрике 6.0, Hardware, VMware, vSphere, Советы, Статьи. Добавьте в закладки постоянную ссылку.

20 комментариев: Проброс видеокарты NVIDIA в VMware ESXi 6.0

  1. artem говорит:

    классно, и как работает в итоге? производительность сильно пострадала? были какие то тесты?

  2. diz говорит:

    Могу прогнать тесты, если есть интерес и если есть с чем сравнить. StarCraft2 LotV идет на максимальных настройках в разрешении 1440×900 (больше не поддерживает мой монитор), показывая 70-100 fps, но это игра с относительно низкими системными требованиями.

  3. A.Vakhitov говорит:

    Я оценивал производительность по игре Deus Ex 3 — в Hyper-V SharedVGA через WiFi было FPS 10-20 (игра ощутимо подтормаживала при каждом движении).

  4. diz говорит:

    Тут у нас прямой проброс видео, снижение производительности, по идее, должно быть небольшое.

  5. Dim-soft говорит:

    Отличная статья, я в свое время остановился на падении ESXI 😉
    но подглядел, что можно vmware обмануть с помощью паяльника
    например https://geektimes.ru/post/173545/

  6. Дмитрий говорит:

    К теме с паяльником есть целая ветка на одном форуме.
    http://www.eevblog.com/forum/chat/hacking-nvidia-cards-into-their-professional-counterparts/?PHPSESSID=b032509aafb8eb447da909cb114b6efb

  7. Alex говорит:

    Здравствуйте! сделал все по описанию, но карточка у меня GeForce GT610 от Асуса…
    но карточка все равно не работает и показывает ошибку 43 …

  8. diz говорит:

    Добрый день!

    Загрузите vmx файл и скриншоты настроек проброса видеокарты куда-нть.

  9. Zerg говорит:

    Добрый день!
    Вчера пробросил аудио, звук есть но со скрипом и шумом, уши вянут.
    Есть ли у вас на этот счет решение?
    Материнка Asus H97M-Plus

  10. diz говорит:

    К сожалению, кроме как обновить драйвера, а затем открыть документ, ссылку на который я приводил в статье и тупо перебирать параметры о которых там идет речь, посоветовать ни чего не могу.

  11. Alexandr говорит:

    Добрый день!
    Подскажите пожалуйста как можно получить доступ к файлу по адресу
    /etc/vmware/passthru.map ?

  12. diz говорит:

    1. Включить SSH доступ через клиент ESXi
    2. Подключиться по SSH
    3. Отредактировать файл при помощи текстового редактора VI

  13. Роман говорит:

    Доброго вечера. А можно ли прокинуть видеокарту на сразу 4 виртуалки, чтобы они ее юзали и дать каждой виртуалке свой видеовыход?

  14. Mr.Aloof говорит:

    Нет.

  15. Василий говорит:

    А подскажите, если удается ли задействовать одну обычную видеокарту сразу в нескольких виртуальных машинах?

  16. A.Vakhitov говорит:

    Добрый день, Василий.
    Нет, не удастся.

  17. Николай говорит:

    На крайние 2 вопроса все говорят «нет» и «не удастся», но это не свосем верно.
    Обычный vmware драйвер поддерживает DirectX 10 и OpenGL ES 2.0, используа аппаратные ресурсы установленной видеокарты. Что позволяет нормально играть во что-то не особо требовательные. Это работает сразу и не требует проброса видеокарт и прочих танцев с бубном.

  18. Mr.Aloof говорит:

    1. На вопрос «предоставить каждой виртуалке свой видеовыход видеокарты» — ответ однозначно нет. Либо всю видеокарту одной виртуалке, либо вообще никакого видеовыхода.

    2. Обычный драйвер не будет использовать аппартные ресурсы видеокарты. То о чем вы пишете «сразу и не требует проброса видеокарт и прочих танцев с бубном.» — это будет обычный софтварный рендеринг. Средствами процессора, не видеокарты.
    Для того чтобы использовать ресурсы видеокарты (это называется vSGA) вы дложны установить на esxi драйвер видеокарты и запустить xorg.
    Официально вы можете это сделать ТОЛЬКО для видеокарт Nvidia Grid, а не любой «обычной видеокарты». Для этого скачать и установить пакет vib с драйвером и запустить сервис xorg.

    Есть варианты заставить работать vSGA с более широким набором видеокарт, но мы же обсуждаем «без танцев с бубном» не так ли?

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *