Пользователь
0,0
рейтинг
18 сентября 2012 в 01:41

Администрирование → Проброс видеокарты в гостевую ОС из гипервизора Xen из песочницы

Предыстория


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

Аппаратная часть


  • Материнская плата Gigabyte GA-Q67M-D2H-B3
  • Прошивка BIOS — F5
  • Setup: CPU->Intel Virtualization Technology=ON
  • Setup: Chipset->North Bridge->VT-d=ON
  • Setup: Sata mode = ACHI
  • Процессор Intel Core i5 2500 3.3 GHz
  • Память 16 GB
  • SSD: OCZ Vertex 3 120gb
  • Intel GMA встроенная в мат. плату, используется гипервизором
  • ATI Radeon HD7770 в первом слоте PCIe, отдается гостевой ОС 1
  • ATI Radeon HD7770 во втором слоте PCIe, отдается гостевой ОС 2
  • Сетевой адаптер Intel, встроенный в мат плату
  • Второй ПК в той же локальной сети с ОС Windows для установки XenCenter и управления сервером

Начало


Изначально для эксперимента была выбрана платформа виртуализации XPC 1.5 beta (Xen Cloud Platform), в основе которой лежит гипервизор Xen. Эта платформа полностью бесплатна, кроме того, установка и запуск в работу занимает считанные минуты. В ходе работы выяснилось, что на виртуалке под XCP невозможно запустить Skype, он сразу же завершается с ошибкой. Проблема описана здесь и здесь. Для ее исправления требуется добавить одну строчку в исходники и пересобрать Xen, на котором основан XPC. Поэтому я перешел на бесплатную редакцию Citrix Xen Server 6.0.2 в котором данная проблема уже исправлена.

Еще одна опасность подстерегала при установке драйверов видеокарты. Дело в том, что Catalyst Control Center вызывает BSOD на гостевой системе (проверено как на XCP, так и на Xen Server). Поэтому придется ставить драйвер через диспетчер задач, родной инсталлятор тоже может вызвать BSOD при проверке видеокарты.

В итоге гостевая система получила в свое распоряжения полноценную HD7770 и прошла все тесты. После полной настройки гостевой ОС я создал связанную копию (это позволило изрядно сэкономить место на SSD) и пробросил туда вторую видеокарту.
К сожалению, отдельные USB порты XCP и Xen Server пробрасывать не умеют, поэтому я пробросил один контроллер USB в одну машину (все задние порты), второй в другую (все порты выведенные на корпус). Встроенные контроллеры USB висят на PCI и поэтому пробрасываются так же как и видеокарта.

Справедливости ради стоит отметить, что проброс отдельных USB есть в Xen, но управлять им на мой взгляд сложнее (нужен определенный опыт работы в линуксе)

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

Оценка производительности системы (виртуальная машина с проброшеной видеокартой)

image

Производительность диска CrystalDiskMark (виртуальная машина с проброшеной видеокартой)

image

Альтернативные варианты



Hyper-V 3.0 — гипервизор от MS

Есть бесплатный вариант с ограниченным функционалом. Он нам не подходит, так как пока не имеет поддержки проброса устройств (passthrough). У него однако есть очень заманчивая технология RemoteFX, которая позволяет получать 3d ускорение через RDP сеанс. Насколько я понял, некоторые современные игры работают с ним, некоторые нет. Кроме того, скорее всего, будут определенные затраты на эмуляцию, что снизит производительность. Эту интересную технологию я обязательно попробую и напишу отдельную статью.

ESXi — гипервизор от фирмы VMware

Пожалуй самый популярный и мощный. Во время тестирования он был фаворитом, т.к. почти во всем, на мой взгляд, превосходит XenServer. Во первых позволяет при создании виртуальных машин указывать тонкие настройки железа, что несомненно полезно при подготовке образов для заливки на реальное железо. XenServer же напротив, имеет лишь заранее подготовленные шаблоны и все делает на свое усмотрение. Во вторых имеет сразу три вида балансировки памяти, а так же позволяет “отдать” гостевой машине строго определенное количество процессорного времени. Есть бесплатная редакция с ограничением памяти в 32 ГиБ. Проброс (passthrough) PCI устройств здесь делается проще всего: отмечаем галочками нужные устройства и добавляем их в гостевую машину. Однако, успешно пробрасываются только некоторые видеокарты. Успех не зависит от производителя, пробрасываются как AMD, так и nVidia, но только некоторые. Мне не повезло, Radeon 7770 не удалось передать виртуальной машине. Во время установки драйверов получаем BSOD.
Во время проброса я столкнулся с очень интересным багом, который может поставить в тупик. Дело в том, что если гостевой машине выделено больше 2 гб памяти, то после проброса видеокарты машина не стартует! Решение проблемы я нашел здесь.
У этого гипервизора есть еще одна проблема: Нельзя просто взять и поставить его на обычное железо. Только на сертифицированное! На начальном этапе установке он не нашел подходящей сетевой карты и отказался продолжать. Довольно странно, т.к. встроенный в мою мат. плату сетевой адаптер — это Intel 82579, не самый плохой вариант, согласитесь. Далее я нашел в закромах D-link DGE 528T, но и эту плату он не поддерживает. Немножко погуглив, нашел следующее решение. Пропатчив образ, нам все же удалось установить ESXi 5.1.

Xen — гипервизор распространяющийся под лицензией GPL

На его основе сделано много коммерческих продуктов, например, очень популярный сейчас Citrix XenServer, или мало кому известный Oracle VM. Я вижу три варианта использования этого гипервизора:
  1. Использовать собственно Xen (самый долгий способ). В этом случае нам потребуется установить какой-нибудь дистрибутив линукса, затем установить на него Xen и настроить. При этом настройка и запуск виртуальных машин и самого гипервизора будет производиться с помощью создания и правки конфигурационных файлов. Все управление через командную строку.
  2. Использовать открытый XCP (Xen Cloud Platform). В этом случая мы получаем возможность управлять гипервизором, а так же гостевыми ОС при помощи сторонних приложений (удобно и быстро). Самое лучшее сочетание: XCP + Citrix XenCenter (бесплатная программа для управления Citrix XenServer). XCP 1.5 beta — это почти точная копия коммерческого Citrix XenServer 6.0, при этом функционал бесплатного XCP равен enterprise версии XenServer!
  3. Использовать коммерческий Citrix XenServer. Есть бесплатная редакция с ограниченным функционалом: отключена балансировка памяти, проброс видеокарты средствами XenCenter (через командную строку карта все равно пробрасывается). XenServer создан на основе XCP и мало чем от него отличается, однако Citrix выпускает частые патчи для XenServer, что является ключевым фактором влияющим на выбор.


KVM

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

Установка и настройка XenServer (или XCP) и проброс видеокарты


Я объединил два разных продукта, т.к один фактически является клоном другого, расхождений в настройке мало (я буду их отмечать).

  1. Качаем с официального сайта XCP и XenServer (жмем try it Free сверху). Даже если вы планируете использовать XPC, я рекомендую скачать также XenServer, т.к. на установочном диске в папке client_install находится XenCenter, который будет не лишним.
  2. Устанавливаем гипервизор на железо. Установка снабжена мастером и не вызовет трудностей. Однако именно в момент установки стоит выбрать HDD для хранения виртуальных машин, если планируется использовать локальные диски, а не iSCSI. После установки это может вызвать трудности, т.к. делается только из командной строки.
  3. Устанавливаем на любой ПК в той же локальной сети Citrix XenCenter из образа Citrix XenServer (его мы скачали на первом шаге). Запускаем XenCenter и подключаемся к нашему серверу.
  4. (Только для XPC !!!) Для полноценной работы XenCenter c XCP 1.5 beta требуется в консоли гипервизора выполнить следующие команды:
    	cd /opt/xensource/bin
    	/etc/init.d/xapi stop
    	cp -vp xapi xapi.original
    	sed -i 's/1\.4\.90/6.0.99/g' xapi
    	/etc/init.d/xapi start
    	

    После этого в XenCenter появятся вкладки, позволяющие включать балансировку памяти, а так же выполнять проброс видеокарты в гостевые машины.
  5. Создаем новую виртуальную машину, выбрав нужный нам шаблон — Windows 7 (64-bit)
  6. Переходим во вкладку Console появившейся в XenCenter виртуальной машины и производим установку Windows 7 x64.
  7. Устанавливаем паравиртуальные драйвера, cмонтировав образ xs-tools.iso во вкладке Console.
  8. Задаем пароль для пользователя (нужен для подключения через терминал) и включаем терминальный доступ (Панель Управления -> Система -> Настройка удаленного доступа). Это нужно для доступа к гостевой ОС после проброса видеокарты, т.к. изображение перестанет выводиться в консоль.
  9. Переходим в консоль гипервизора. набираем
    	lspci
    	

    и видим список pci устройств с идентификаторами. Запоминаем коды нужных нам устройств. Например, видеокарта в первом pci-e слоте бедет иметь идентификатор 01:00.0, а встроенная в нее звуковая карта 01:00.1.
  10. Набираем
    	xe vm-list
    	

    и видим список виртуальных машин. Запоминаем uuid идентификаторы нужных нам машин. Например, d103a91d-5c38-844f-14d5-64b3c495eb08.
  11. Для проброса видеокарты набираем
    	xe vm-param-set other-config:pci=0/0000:01:00.0,0/0000:01:00.1 uuid=d103a91d-5c38-844f-14d5-64b3c495eb08
    	

    заменяя значения в примере на свои собственные. Через запятую пречисляем все pci устройства, который хотим пробросить.
  12. Внимание баг! Проброс устройств нормально не работает, если для гостевой машины включена балансировка памяти.
    Балансировка позволяет изменять количество памяти “на лету”. Например, есть две машины с максимально заданным пределом памяти 8 ГиБ. Допустим, в распоряжении гипервизора всего 8 ГиБ свободной памяти. Тогда, если включена одна машина, гипервизор выделяет ей все 8 ГиБ свободной памяти, но стоит запустить вторую, как гипервизор изменит количество памяти для первой машины (налету, не останавливая ее). Таким образом каждая получит по 4 ГиБ и израсходует всю свободную память.
    Суть бага заключается в том, что если количество свободной памяти гипервизора меньше максимального количества памяти для виртуальной машины, то при запуске этой машины от нее отвалится часть проброшеных PCI устройств.
  13. Запускаем гостевую ОС и видим что появились новые устройства. Качаем последний Catalyst, распаковываем в папку не устанавливая, затем переходим в диспетчер устройств и оттуда обновляем драйвер видеокарты, указав нужную папку.
    Дело в том, что Catalyst Control Center вызывает BSOD, даже если его получится установить, видеокарта будет работать не стабильно — переодически будут выскакивать артефакты изображения.
  14. После перезагрузки консоль виртуальной машины в XenCenter застынет на этапе загрузки Windows. Значит видеокарта проброшена, можно подключать монитор к ее разъему!


Ссылки (коротко)


Общие сведения: Wiki (Wiki)
Xen: Проброс видеокарты в Xen, из-под Ubuntu (Хабр)
Проброс видеокарты в виртуальную машину (Хабр)
Xen: XenVGAPassthrough (legacy) (Wiki.xen.org)
Xen: Xen VGA Passthrough (new)(Wiki.xen.org)
ХenServer и XCP: XenServer 5.6 Multi-GPU Passthrough for XenDesktop HDX 3D Pro Graphics (support.citrix.com)
ХenServer и XCP: PCI passthrough for paravirtualized guests on Citrix XenServer without an IOMMU (ogris.de/howtos)
XCP: Исправление бага с XenCenter для XCP(gossamer-threads.com)

Напоследок добавлю, что во время написания данной статьи из-под одной машины моя девушка сидела рядом, играя в Skyrim на другой без всяких лагов и тормозов на высоких (частично ультра) настройках графики. Под столом стоит один системник, который экономит место и деньги, на столе два монитора.
Савёлов Евгений @gluko
карма
12,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Администрирование

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

  • +4
    Все хорошо, но нужна фотка девушки)
    • +8
      Первых три комментария к технической статье — про девушку.
      Озабоченные хабраюзеры, жениться вам всем надо
      • 0
        Странно, что ещё не появилось комментария «Дайте девушке инвайт!!!».
      • –1
        Не вижу ни чего такого.

        Например, я по образованию — специалист по информационной безопасности. Девушка моя с моей же кафедры и в компьютерах тоже разбирается. И, да, я ее пересадил с Ubuntu на windows 7 (хотя сам — бывший гентушник с 7 лет стажем генты).
        Инвайт ей не нужен (я предлагал, когда он был), т.к. хабр она не читает — пришлось отдать ее подруге, тоже с нашей кафедры, и тоже спецу по ИБ. Вот так вот.

        Да и хобби у нас даже одно и то же — 3д графика (я уже давно, она — только учится). А вот в игры она не играет и относится к ним резко отрицательно. А я — люблю.
  • 0
    моя девушка предложила попробовать вставить

    Дядюшка Фрейд переворачивается там :)
  • +1
    моя девушка предложила попробовать вставить в мой системник вторую видеокарту

    Думаю большинство открыло статью благодаря этой фразе
    • 0
      Плюсанул статью благодаря этой фразе :)
    • –3
      Забавно, после публикации комментария мне кто-то минусанул карму. Я не кармадрочер, просто теперь я не могу голосовать, а причина по-моему достаточно безобидная, не думал что зацеплю этим кого-то.
  • +2
    А есть способ поменяться видеокартами между гостевыми устройствами. допустим сижу под убунтой с основной видеокартой. Но когда хочу поиграть, запускаю гостевую винду, перебрасываю туда видеокарту, а убунта переходит на дополнительную, слабую видюху.
    • 0
      Мне бы тоже бы понравилось, если была бы реализация этой идеи.
    • 0
      теоретический возможно, у меня на ноуте Ubuntu 12 c ATI+IntelHD, в последних дровах от ати можно переключать активную видяху, тока треба рестарт окошек установка дров
      • 0
        Вообще странно, что надо рестартовать Иксы. Неужели механизм переключения нельзя было скоординировать с композитором? Всё равно вывод окошек именно на нём, зачем всё-то перезапускать?..
        • 0
          К сожалению реалии таковы, что можно сказать спасибо хотя бы и за это, раньше и этот механизм не работал или работал у везунчиков.
          • 0
            Вопрос — а как работает Bumblebee? Нельзя ли аналогично сделать?
            • 0
              Не иследовал сей вопрос настолько подробно, мне на ноутбуке было достаточно добавить переключение…
              Support for AMD hybrid technology
              • 0
                Вот. Последний коммент оттуда: «For you it means that there may be a way to switch between cards later.»
  • 0
    тут должно быть упоминание про «мсье»
  • 0
    Вопрос не к автору, а вообще в принципе. Задаю, т.к. тема схожая.

    Я бы хотел узнать про такой вариант — реализуемо ли.

    Мы с девушкой занимаемся 3д графикой как хобби, есть мощный рендер-нод (core i7-920, 24гб), есть два нетбука и два хороших монитора.
    Сейчас запускаю весь тяжелый 3д софт на мощном компе и работаю с ним через радмин, используя нетбук как тонкий клиент. Полет нормальный.

    Хотелось бы организовать то же самое, но для двух независимых пользователей на одной машине. Желательно без виртуализации. Вин сервер такое умеет?
    Т.е. банально что-то типа rdp, но передающих и 3д графику как картинку (то, что отрисовано видеокартой на мощном компе) — слышал, что rdp если передает 3д, то оно отрисовывается видеокартой клиента, а это неприемлемо. Радмин справляется с этим отлично, но он только под одного клиента.

    Как вы себе представляете решение?
    • +2
      Без виртуализации никак и с одной видюхой только с помощью RemoteFX.
    • +2
      можно поробовать remoteFX и без виртуализации на терминальном сервере
      technet.microsoft.com/en-us/library/ff817595(WS.10).aspx
    • 0
      Не совсем то что вам нужно, но можно выкрутиться.

      У меня дома уже пару лет установлен продукт АСТЕР от www.ibik.ru/ 2 рабочих места (2 монитора, 2 клавиатуры и 2 мышки, заявлена поддержка до 12 рабочих мест!), две независимые видеокарты (работало и с одной). с недавних пор добавлена дополнительная звуковая карта (подключены наушники с гарнитурой), можно гибко настраивать какое устройство к какому рабочему месту принадлежит (не только клавиатуры и видео, но и звуковые карты и даже сетевые карты/ip-адреса, этот момент не изучал), доступ к оборудованию в принципе есть с обоих мест (я не изучал вопрос и ограничения, но bitcoin miner запускался на одном рабочем месте как то получал доступ ко второй видеокарте). Поддерживается WinXP, так и Windows 7 x64 (и рекомендуется, если нужны будут игры).

      Форум у них заспамлен и давно не обновлялся, но когда у меня возникла проблема, отреагировали на почту в течении суток, а в течении недели сделали сертификат для windows и выпустили обновление, не требующее переводить windows 7 x64 в тестовый режим. Правда в моем случае второе рабочее место используется для запуска игры Aion, которая в последний год совсем ужасна в смысле оптимизации, и ставит раком не самый слабый компьютер, даже с независимыми видеокартами.

      В случае с вашей задачей, на каждом рабочем месте можно запустить standalone vnc server (ultravnc) настроив разные порты, а уже на тонких клиентах спокойно подключаться и работать.
  • 0
    Хороший опыт, но довольно таки странный, думаю наигравшись с этим вы вернетесь к классическому распределению ресурсов отдав видеокарту девушке обратно)))
  • 0
    Так а как вы получили 2 компьютера? Открываете обе виртуалки на полный экран на разных мониторах и прокидываете по мышке и клавиатуре?
    Жаль, что нет ничего для передачи 3D по чему-нибудь типа RDP. RemoteFX работают только с виндой :( А то хочется сидя на маке играть в виндовые игры с соседнего компа
    • 0
      Все проще. Когда осуществлен проброс видеокарты в ВМ, вывод на ее порты осуществляется из ВМ, просто вставляем кабель монитора и вуаля!
  • 0
    KVM не гипервизор. KVM — Kernel Virtual Machine
  • 0
    Сам именно такой вариант и хотел опробовать… но как начитался что не все материнки\процессоры\видеокарты совместимы я просто забил.

    К автору вопрос: Интеграшку пробовали пробросить? а dom0 оставить безголовой?
    • 0
      а к консоли как целляться ежели что?
      • 0
        А как люди цепляются к VPS?
    • 0
      Вам потребуется любая (насколько я знаю любая, но 100% гарантии все же дать не могу) видеокарта от AMD и поддержка VT-d для процессора и мат. платы.
      Формально в виртуальную машину пробрасывается любая видеокарта, но в случае с Nvidia для нормальной работы карты требуется магия, которая описана здесь.
      Пробросить встроенную видеокарту у меня с ходу не вышло, но обещаю, что попробую еще разок.

      Пишите, если будут вопросы!
      • 0
        Спасибо, специально для этих целей тоже приобрел i5 2500 (без К) и амд'шную видяху… Наверное лень не дала довести дело до конца )
        За статью огромное спасибо… В закладах… если вдруг соберусь с мыслями )
  • 0
    Ещё авто запуск добавить и будет вообще песня :)

    xe pool-list
    xe pool-param-set uuid=UUID other-config:auto_poweron=true
    
    xe vm-list
    xe vm-param-set uuid=UUID other-config:auto_poweron=true
    


    UUID заменить на вывод предыдущей команды.
  • 0
    Кстати, со скайпом траблы пофиксили в XCP 1.6.

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