Однажды в студеную зимнюю пору… Решил я заняться покраской заборов. И перейти на темную сторону, чтобы под покровом вечной космической ночи фармить в Еве (EVE Online) и однажды захватить мир. Естественно, мои верные электронные слуги должны трудиться 24/7/365 (им сон не нужен) и мой комп, ревущий как турбина Боинга 747, для этого подходил мало. Окинув взглядом свое скромное жилище (все поработители мира начинали с малого), я обратил внимание на сервак, скромно стоящий в углу. Это было подлинное чудо в двухюнитовом корпусе китайского ноунейма. Все вентиляторы в нем были вырваны и заменены на радиаторы, а вместо сердца — каменный топор третий пень. Сервак был тих и абсолютно бесполезен для данной задачи.

Поболтавшись по форумам потомственных ботоводов в третьем поколении, я понял как вернуть утраченные счастье и веру в человечество. Надо закинуть ботов на виртуалки, благо на гипервизоре, размещенном на сервере, уже стоял ESXI 5.5. Есть один маленький нюанс. Виртуалке нужна поддержка 3D и достаточная производительность, мы ведь тут с вами в игрушки играем, а не в ворде по клавиатуре тыц-тыц. Серьезные люди, ага. А потому встает задача — прокинуть в виртуалку физическую видеокарту. А там и до всеобщего счастья рукой подать.

Стенания писаки


Это, на самом деле, очень странная статья. Начиная с того, что пишу о чем «мне Мойша напел» и, заканчивая тем, что выходит не техническая статья, как я это люблю, а, скорее, Франкенштейн по мотивам. Последнего, к тому же, периодически несет то в аналитику, то в мелкую возню с техническими деталями. Плюс статья немного затерялась во времени. Так что осторожнее, далее по тексту можно наткнуться на скелет мамонта. Но делать нечего, расчехляем ланцет. Палач, мотор!

Стеклянные бусы


На Хабре уже было несколько статей по пробросу видеокарты в виртуальную машину — раз, два. Оттуда были получены примерные ориентиры и советы, куда смотреть в случае чего. Материнку из статей найти не удалось, но это меня не смутило. Требовался процессор с поддержкой Intel Virtualization Technology for Directed I/O (VT-d) / AMD I/O Virtualization (AMD-Vi) и материнская плата с поддержкой виртуализации на мосту. К сожалению, для десктопных материнских плат такие подробности чаще всего не пишут и узнать о них можно путем долгого и упорного исследования характеристики мостов. Бывают случаи, когда мост поддерживает всё, что нужно, но производитель посчитал лишним добавлять такой функционал в UEFI ради экономии денег. Была куплена материнская плата Asus M5A99X EVO R2.0 с тремя PCI-E слотами и три видеокарты к ней. Одна — NVidia GeForce 210 и две — Radeon HD6450. После вдумчивого курения манов было выяснено, что nVidia без поддержки UEFI не может переинициализироваться в виртуальной системе и превращается в тыкву до перезагрузки. Но, тем не менее, я смог завести 2 карты из 3, и на тот момент это был успех. NVidia я оставил на случай, если надо будет вручную поправить гипервизор. С ATI тоже не все было гладко. Карты не хотели инициализироваться без подключенного монитора. В итоге, был сделан ход конем — просто снял с ATI карт VGA шлейф, разобрал разъём, разрезал шлейф от LTP порта, припаял к нужным ногам через шлейф сопротивления для эмуляции монитора, вставил патченный шлейф в разъём и всё. Порт до сих так и работает, обмотанный синей изолентой. Схема распайки:


Шлейф использовался для VGA, потому что карты под низкие корпуса и третий разъём (VGA) там съёмный. У меня как раз 2U и полноразмерные карты мне не встанут. Сейчас подумываю сменить корпус и вкатать туда GeForce GTX480. Тем более, что до нашего колхоза дошли хорошие новости — на новых ядрах ATI больше не нужны сопротивления. Карта инициализируется и без них. А nVidia, по слухам, начала вкатывать UEFI-режим в обычные видеокарты, и топовые карточки пробрасываются в виртуалку. Дабы прибавить себе боли, я поменял гипервизор на Proxmox и прокинул видеокарты ATI уже там по такой инструкции. Стоит отметить, что из веб-интерфейса Proxmox-пробросом управлять нельзя. Все надо делать через SSH.

В бою


В результате я водил разное количество ботов на графических видеокартах от ATI. Запускал через TeamViewer/VNC, и они сами работали в фоне до вечера. Конечно FPS проседал, но боту, который, по сути, просто смотрел нужные части экрана, анализировал картинку и в зависимости от результата кликал либо в одно либо в другое поле, было всё равно. Самый большой мой космический флот включал 1 командира подразделения и 6 космических шахтёров. Всё это работало 24/7 практически бесшумно на 2 видеокартах общей стоимостью около 5000 рублей. В результате, примерно год я не платил за игру вообще, обменивая заработанное на игровое время и даже оставался в небольшом плюсе. Конечно, были платежи за свет, но даже с учётом этого выходила неплохая экономия, учитывая что подписка на месяц на 7 моих ботов стоила около 3600 рублей. Да и света видеокарты от ATI почти не ели. Выходило около 1000 в месяц на весь гипервизор. А там ещё крутилось много всего полезного. Отдельно стоит отметить выявленные недостатки, которые мешают нормальному использованию виртуалки для игры.

  • PCoIP плохо прячет мышку, так что играть некомфортно.
  • Большой I/O Wait на дисках. Он, конечно, определяется не только игровой виртуалкой, но осадочек остается.
  • Потеря мощности от слоя виртуализации, зависящая от видеокарты. По ощущениям, чем мощнее карта, тем выше потери.

Автор, ты о чем?


Со временем, по разным причинам идея себя изжила, руда стала стоить как пыль под ногами, и я прикрыл лавочку. Но творческая мысль пошла дальше. Зачем мне мощный компьютер/ноутбук? Можно же поднять на сервере высокопроизводительную виртуалку, прокинуть туда физическую видеокарту, купить себе ноутбук, не греющийся, как атомный котел и которым можно разрубить тот самый троллейбус из буханки хлеба. Потом поднять на нем линукс и спокойно играть в любые игры с любыми требованиями, лишь бы железо на серваке выдержало. Если игра чувствительна ко времени отклика, то к нашим услугам локальная сеть. А всякие редакторы, офисы и прочее доступны вообще из любой дыры на планете, где есть хоть сколько-нибудь широкополосный интернет. Но, как оказалось, не я один такой умелый и находчивый, и вообще таких сервисов вагон и маленькая тележка, но… Они все давали доступ только к играм, выбор самих игр был предельно мал, картинкой можно было стирать промасленную робу (мыло, оно и есть мыло). Конечно, у таких сервисов были и плюсы — например, можно поиграть с компа в консольные новинки, но доступа к рабочему столу почти никто не предоставлял. На просторах интернета был найден единственный сервис подобного рода — onPlay. Но он размещался в Америке, обладал слабой картинкой и был на грани смерти. Поэтому, собственно, и продавал доступ к рабочему столу вместо подписки на игры. Кстати, пару лет назад он умер. Помянем. XD

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

  • PCoIP (официальный сайт / хабр / демонстрация). Довольно известная штука. Для встраивания непосредственно в виртуалку минусы такие: сильно нагружает процессор, дороговата — подписка на год 8000 рублей, работает именно, как удаленное управление, софтовая реализация представляет собой адскую надстройку над операционной системой, требует достаточно широкого канала (около 30 мбит/с на пользователя). Если съехать на ESXi, то работает в гипервизоре из коробки, но только с расово верной видеокартой (официально одобренными nVidia и vmWare GRIDv1, GRIDv2 и математическими картами) + дополнительными пакетами от vmWare. Если перепаять топовый geForce и притвориться GRID1 или GRID2, тоже включится. Правда, лишние обработчики данных для сжатия видео от этого у GeForceне появятся, в отличие от GRID. И почти наверняка результат будет средненький. Учитывая это, а также то, что я — водитель пингвинусов, от этой идеи отказался. Хотя время от времени о программной версии подумываю, как о запасной. В качестве бонуса для больших дядек: идеальный проброс USB-устройств как на аппаратной реализации, встроенной в мониторы, так и на программной. Спокойно работают даже USB токены. Всё же энтерпрайз решение, за деньги.
  • GamingAnywhere (официальный сайт). Несколько студентов бросили вызов облачным игровым сервисам со своей opensource-поделкой. На первый взгляд неплохо. Можно даже настроить кодирование видео и аудио, в зависимости от требований и мощности железа. По факту, как обычно — набор костылей и подпорок над открытыми видеокнвертерами. Если без остановки доводить их ПО до нормального состояния, скажем, год, можно получить неплохой сервис. В целом невероятно сыро. Я не осилил даже скомпилировать клиент под линукс. XD
  • nVidia GameSteam (официальный сайт). Вот он, венец творения nVidia. Именно за такие сервисы мы переплачиваем на 1/4 nVidia по сравнению с аналогичными чипами ATI. Вообще у nVidia есть собственное игровое облако. Технически, там даже можно зарегистрироваться и уже играть на калькуляторах в топ-игрушки. Но опять же, к десктопу не пускают, какая игра появится в облаке в следующем месяце, выбираешь не ты. И это печалит прогрессивное сообщество. GameSteam реализует такое вот частное облако на GeForce. Есть неофициальный клиент почти на все платформы и, если в качестве игры прописать процесс рабочего стола, то спокойно можно «играть» в рабочий стол. Из энтерпрайз-минусов: никакого USB, но это явно мой выбор. Осталось решить проблему с пробросом geForce в виртуалку. Именно это решение у меня сейчас в реализации.

Расширяем горизонты


А теперь пойдем в своих измышлениях еще дальше и поставим вопрос шире. А что, если 1 мощный компьютер и несколько сотрудников одновременно? Сама идея данного метода не нова. Многие компании делают софт разной стоимости, так или иначе реализующий данную возможность. Хотя на самом деле правильно подобранное железо и немного времени IT-шника позволят решить с помощью виртуализации такую задачу абсолютно бесплатно. Например, выкинуть в окно все компы, предварительно вынув из них видеокарты и выброситься вслед за ними, купить 1 мощный компьютер с поддержкой PassThrought и несколькими дешёвыми видеокартами. Для экономии, давайте, возьмём ProxMox (KVM) в качестве гипервизора. Создадим количество виртуальных машин, равное числу видеокарт. Подключим к каждой виртуальной машине по видеокарте, а так же клавиатуре и мыши из USB-разъёмов. Включим их. Рабочие места готовы. Распределение процессорных ресурсов позволяет пользователям работать одновременно на одном компьютере за разными мониторами, с разными операционными системами, клавиатурами и мышами. В случае использования USB аудио-гарнитур, к виртуальной машине подключается и звук. Такие машины гораздо легче бекапить, в случае поломки компьютера ее можно просто мигрировать за любой свободный, и пользователь сможет продолжать работать, как ни в чём не бывало. Или даже переместить все хранилища пользовательских виртуалок на отдельный iSCSI диск и вообще абстрагироваться от аппаратной части при работе с компьютерами пользователей. Легким небрежным движением администраторской руки качаем диск C пользователя, ставим на него необходимое ПО, настраиваем и заливаем обратно. Или клонируем диск из шаблона и новое рабочее место готово, осталось только имя машины сменить. Таким образом могут работать и пользователи с высокими требованиями к видео системе — достаточно поставить в физическую машину видеокарту, удовлетворяющую требованиям пользователя. В данном методе, конечно, есть и ложка дёгтя. В случае поломки одной физической машины теряются рабочие места сразу нескольких сотрудников. Так же такие машины лучше не выключать, потому что включить их можно только через веб-панель гипервизора.

Облака, белогривые лошадки


А что, если перенести компьютеры поближе к IT-шникам, например, в датацентр, а в офисе оставить только мониторы? Это вполне возможно. Есть несколько решений для реализации подобной задумки. В частности, VMware Horizon, Xen Desktop или Microsoft RDP. Они позволяют запускать отдельные приложения или целые операционные системы в вашем браузере, а их обслуживание становиться проще в силу того, что IT-отделу нужно будет обслуживать всего несколько заготовок рабочих машин, а не весь пользовательский машинный парк. Все эти сервера позволяют использовать графическое ускорение на основе промышленных 3D ускорителей nVidia. В офисе же можно поставить тонкие клиенты или мониторы с поддержкой протокола PCoIP. Это значит, что в вашей конторе могут в принципе отсутствовать системные блоки. Только роутер и мониторы с клавиатурами. Также Teradici выпускает платы для превращения обычной рабочей станции в удалённый сервер PCoIP или просто для ускорения обработки протокола при установке в сервер XEN или VMware. Еще вместо аппаратной платы можно воспользоваться программным комплексом.

Просветление


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

Комментарии (6)


  1. dklm
    28.08.2017 17:01

    Не совсем понятно зачем вам виртуализация, разве что чисто для эксперимента )).
    Я в еву не играл но пробовал с ПК стримить штатными средствами Steam на ноут игру, но такой стриминг нагружал ноут не меньше чем сама игра, и в итоге это был просто интересный эксперимент )))

    Для эмуляции монитора лучше использовать hdmi to vga адаптеры, учимся у майнеров )))

    Для экономии, давайте, возьмём ProxMox (KVM) в качестве гипервизора.

    Нет смысла так экономить, ESXi сам по себе не платный продукт, это за VC и за интеграцию ESXi с VC берут деньги.

    Как мне кажется для вашего сценария больше подходит Hyper-V =), можно запускать 3Д(directX) контент в гостевой ОС через RDP/RemoteFX(Смотреть список совместимых гостевых ОС)
    У ESXi список совместимого оборудования заметно меньше чем у Hyper-V.

    Также, субъективно Nvidia лучше подходит для работы под Windows Server.
    C Nvidia Quadro через RDP можно работать с OpenGL контентом…

    П.С.
    Ссылки на тему 3D и VM
    habrahabr.ru/company/it-grad/blog/204768
    habrahabr.ru/company/etegro/blog/225787
    habrahabr.ru/post/257425
    habrahabr.ru/company/stss/blog/269087


    1. Nikobraz
      29.08.2017 05:30

      Совсем дохлый ноут?
      Я как-то стримил тоже средствами Steam HotS и Dota2 с ноута i3-2350M на неттоп с Celeron J1800, даже лаг был приемлемый.


      1. dklm
        29.08.2017 08:47

        Простейший ноут с встроеной графикой интел, 2ва ядра ддр3 память, не помню какой проц. Стримил Stellaris, картинка была нормальная и по качеству и по количеству кадров, просто ноут все равно прогревался, проще на нем было запускать…


    1. dklm
      29.08.2017 09:20

      Нашел у себя результаты экспериментов с CAD turbine demo на NVIDIA Quadro NVS 300. Через rdp набрало 297 балов, а при работе через монитор 397 балов. NVS 300 очень слабая карты и тут говорить про несколько сессий не приходится )))

      Кому как а мне тема 3Д через rdp интересна, может ктото использует CAD через «RDP» в продакшене — очень интересно узнать результаты ))))…


  1. rPman
    28.08.2017 21:58
    +1

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

    Для windows прекрасно работало приложение aster от ibik, я покупал и использовал такую схему — две видеокарты, по одной на пользователя, игры прекрасно шли. Судя по их сайту windows 10 тоже поддерживается. Помню у них были 'проблемы' с лицензиями от microsoft, спор доходил до такого что по лицензии нам запрещено играть в одну игру в режиме хот сит, когда за одной клавиатурой сидят два человека.

    Недавно проверял на своей машине (amd fx 6100 3.3ghz и ati r9 200 aka hd78xx), перебрасывал видеокарту в kvm в ubuntu, основная проблема — нет красивого способа пробросить ps/2 клавиатуру и заметное замедление игр именно с точки зрения скорости процессора, 20%-30%.


  1. Dr_Wut
    29.08.2017 16:21
    +1

    VDI. Штука, которую сделал автор называется VDI. И там очень много чего придумано для решения проблем описанных в статье. Правда о экономии там речи не идет от слова совсем :/