Статьи

Проброс відеокарти в гостьову ОС з гипервизора Xen

  1. апаратна частина Материнська плата Gigabyte GA-Q67M-D2H-B3 Прошивка BIOS - F5 Setup: CPU->...
  2. Оцінка продуктивності системи (віртуальна машина з проброшеной відкритий)
  3. Продуктивність диска CrystalDiskMark (віртуальна машина з проброшеной відкритий)
  4. альтернативні варіанти
  5. Hyper-V 3.0 - гипервизор від MS
  6. ESXi - гипервизор від фірми VMware
  7. Xen - гипервизор поширюється під ліцензією GPL
  8. KVM
  9. Установка і настройка XenServer (або XCP) і кидок відеокарти
  10. Посилання (коротко)

апаратна частина

  • Материнська плата 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, але керувати ним на мій погляд складніше (потрібен певний досвід роботи в Лінуксі)
Все це дозволило повноцінно використовувати один системний блок для роботи та ігор двом людям і паралельно запускати на ньому ж додаткові віртуальні машини, якщо потрібно. Падіння продуктивності відеокарт або процесора помічена не було. Перебоїв у роботі, зависань, будь-яких проблем, крім описаних вище, не виявлено!

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


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

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


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

альтернативні варіанти

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 )

Новости