Виртуализация с использованием XenServer и проброс оборудования...

Sep 17, 2014 12:16

С понятием виртуализации я столкнулся уже довольно давно. Некоторое время на моем десктопе стоял продукт от компании vmware, но на тот момент еще не вышел их бесплатный Player и я как-то перешел на VirtualBox от компании Oracle (правда тогда еще этот продукт не принадлежал Oracle). В общем довольно удобно иметь возможность на своей рабочей системе попробовать какую-нить новую ОС в виртуальной машине или развернуть сомнительный софт не подвергая риску систему на десктопе. Применений много, пост не об этом. Есть неудобство в этом типе виртуализации, т.к. гипервизор системы запущен на моем десктопе, то в случае установки каких-нить драйверов или нового софта есть риск краха гипервизора вместе с работающими ВМ. И тут либо выделять под виртуализацию отдельную машину, либо посмотреть в сторону baremetal гипервизоров. Схема работы выглядит так: на голое железо ставится гипервизор, на нем поднимается ВМ с моей десктоп-системой (в данный момент это Windows7) и весь остальной набор востребованных ВМ (к примеру pfsence для файервола, freenas для файлового хранилища, какая-нить ubuntu для серфинга по сомнительным сайтам и т.д.). Все вроде бы и не плохо, но есть один минус - на моей виртуальной декстоп-системе непоиграть, виртуализация видео - слабовата. Да и как подключиться к ВМ? Нужно иметь еще один компьютер чтобы через удаленный доступ попасть на рабочий стол - паршиво все. Все отлично решается с помощью технологии проброса аппаратуры в гостевую виртуальную систему, так называемый passthru. Т.е. виртуальная система может получить в свое монопольное использование некое оборудование и использовать его практически без потерь производительности. Поиск в интернете в общем-то дает результат как это сделать, но от терии к практике - у меня ушло много сил и времени. Для начала выбор гипервизора. Мой взгляд упал на два - XenServer от компании Citrix и ESXi от компании VMWare. У обоих производителей есть бесплатная версия, что меня вполне устраивало. Были ограничений по функционалу, но мне хватало. Для управления каждым гипервизором существует свой клиент. Во первых важен состав железа, оно должно поддерживать технологию аппаратной виртуализации.

Вот что я собрал:
Проц - Intel Core I7-4770 3.4 Ghz (имею слабость к процессорам компании intel и конечно процессор поддерживает vt-i)
Мать - Gigabyte Q87M-D2H (важен был чипсет - Q87 поддерживает vt-d, это очень важно)
RAM - 16 Gb (здесь в общем-то без разницы)
Видео - Radeon HD 5450 SILENT ( в общем-то ниочем, но она у меня валялась без дела и как показало в дальнейшем, именно Radeon)
Доп. сетевая карта - на базе чипсета RTL8169 (PCI)
Sata-контроллер - JMicron JMB363 (PCI-E)

Попытки поставить ESXi сходу не дали результата, гипервизор не определял мои сетевые карты, а без них дальнейшая установка не возможно. Существуют методики по интеграции драйверов в ISO-образ дистрибутива ESXi. В результате мне удалось таки определить RTL8169 и поставить гипервизор (можно еще купить дорогую карточку с чипсетом intel, нужно искать совместимые). Проброс оборудования был возможен, но в гостевой системе устройство (видео) никак не запускалось, поиск давал разные движения бубном и позы шамана, но у меня не срослось. Всего этого барахла полно в интернете, здесь не привожу.

Установка XenServer дала результат и он был положительным. В итоге мне удалось пробросить в гостевую систему видеоадаптер, встроенный сетевой адаптер, два встроенных usb-контроллера, звук и sata-контроллер.
Вот скрины диспетчера устройство из win7




вот вывод списка устройств самого гипервизора
lspci
00:00.0 Host bridge: Intel Corporation 4th Gen Core Processor DRAM Controller (rev 06)
00:01.0 PCI bridge: Intel Corporation Xeon E3-1200 v3/4th Gen Core Processor PCI Express x16 Controller (rev 06)
00:02.0 VGA compatible controller: Intel Corporation Xeon E3-1200 v3/4th Gen Core Processor Integrated Graphics Controller (rev 06)
00:03.0 Audio device: Intel Corporation Xeon E3-1200 v3/4th Gen Core Processor HD Audio Controller (rev 06)
00:14.0 USB controller: Intel Corporation 8 Series/C220 Series Chipset Family USB xHCI (rev 04)
00:16.0 Communication controller: Intel Corporation 8 Series/C220 Series Chipset Family MEI Controller #1 (rev 04)
00:16.3 Serial controller: Intel Corporation 8 Series/C220 Series Chipset Family KT Controller (rev 04)
00:19.0 Ethernet controller: Intel Corporation Ethernet Connection I217-LM (rev 04)
00:1a.0 USB controller: Intel Corporation 8 Series/C220 Series Chipset Family USB EHCI #2 (rev 04)
00:1b.0 Audio device: Intel Corporation 8 Series/C220 Series Chipset High Definition Audio Controller (rev 04)
00:1c.0 PCI bridge: Intel Corporation 8 Series/C220 Series Chipset Family PCI Express Root Port #1 (rev d4)
00:1c.1 PCI bridge: Intel Corporation 82801 PCI Bridge (rev d4)
00:1c.4 PCI bridge: Intel Corporation 8 Series/C220 Series Chipset Family PCI Express Root Port #5 (rev d4)
00:1d.0 USB controller: Intel Corporation 8 Series/C220 Series Chipset Family USB EHCI #1 (rev 04)
00:1f.0 ISA bridge: Intel Corporation Q87 Express LPC Controller (rev 04)
00:1f.2 SATA controller: Intel Corporation 8 Series/C220 Series Chipset Family 6-port SATA Controller 1 [AHCI mode] (rev 04)
00:1f.3 SMBus: Intel Corporation 8 Series/C220 Series Chipset Family SMBus Controller (rev 04)
01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Park [Mobility Radeon HD 5430]
01:00.1 Audio device: Advanced Micro Devices, Inc. [AMD/ATI] Cedar HDMI Audio [Radeon HD 5400/6300 Series]
03:00.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev 41)
04:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8169 PCI Gigabit Ethernet Controller (rev 10)
05:00.0 SATA controller: JMicron Technology Corp. JMB363 SATA/IDE Controller (rev 03)
05:00.1 IDE interface: JMicron Technology Corp. JMB363 SATA/IDE Controller (rev 03)

вот так выполняется проброс

xe vm-param-set other-config:pci=0/0000:01:00.0,0/0000:01:00.1,0/0000:00:1a.0,0/0000:00:1d.0,0/0000:00:1b.0,0/0000:00:03.0,0/0000:00:19.0,0/0000:05:00.1,0/0000:05:00.0 uuid=7c044907-44a8-e45e-887b-c39d2ad00178

Итого имеем системник, встроенный монитор которого дает картинку с консоли XenServer, ps/2 - клавиатура позволяет управлять этой консолью. Монитор с PCI-E видеоадаптера показывает рабочий стол ВМ, клавиатура и мышь подключены к ВМ через проброшенный USB-контроллер, звук есть, DVD-ROM тоже реальный через проброшенный sata-контроллер. Вроде бы и виртуальная машина, но выглядит как вполне себе настоящая. Ничего не мешает поставить вторую видео-карту и пробросить вместе с вторым usb-контроллером в другую ВМ для второго пользователя на единственный системный блок. Плюс N-количество обычных ВМ. Проброс дает минусы - ВМ не может мигрировать между хостами гипервизора, в случае если будет их несколько. Такую ВМ нельзя поставить на паузу или ввести в сон. Для управления как я уже писал существует клиентский софт - XenCenter, к сожалению для бесплатной версии гипервизора он урезан, так что многие манипуляции приходится делать из консоли гипервизора.



Сам клиент запущен из под виртуальной машины, так что если ВМ выключится по каким-то причинам, гипервизором управлять можно будет только извне. Если создать пулл и ввести ВМ в него, то можно настроить автостарт ВМ при включении гипервизора. Есть и скрипты для автоматического выключения всех ВМ, при выключении хоста гипервизора. Пока у меня это в разработке, хочу запилить это все вместе с мониторингом ИБП на предмет выключения электричества.

Сам гипервизор построен на базе Xen, сейчас этот продукт входит в состав ядра линукса. Управляющий домен Dom0 - линукс на базе CentOS, на момент публикации поста это 32-битная система, но скоро ожидается 64-битный домен. Сразу после установки этот линукс доступен по ssh или просто из консоли. Все управление виртуализацией сводится к одной емкой команде "xe". Нет проблем в установке доп. софта: yum install --enablerepo=base mc. Очень много ссылок в гугле на предмет установки гипервизора на программный raid1. Я не стал мешать мух с котлетами и поставил сам гипервизор на 160Gb винт, а на двух других по 1Tb поднял зеркало.

]# mdadm --detail /dev/md1
/dev/md1:
Version : 0.90
Creation Time : Wed Jul 16 11:40:00 2014
Raid Level : raid1
Array Size : 976762496 (931.51 GiB 1000.20 GB)
Used Dev Size : 976762496 (931.51 GiB 1000.20 GB)
Raid Devices : 2
Total Devices : 2
Preferred Minor : 1
Persistence : Superblock is persistent

Update Time : Wed Sep 17 11:46:16 2014
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0

UUID : 572fa99e:8d35c88c:d6f7cbf2:2df1c093
Events : 0.8374

Number Major Minor RaidDevice State
0 8 32 0 active sync /dev/sdc
1 8 16 1 active sync /dev/sdb

Вообще очень досадно что этот гипервизор не имеет стандартной возможности установки на флэшку (ESXi как раз такую фичу имеет). Сам XenServer занимает два раздела по 4Gb, причем второй используется только при обновлении, т.е. я полагаю что он влезет на 8G флэшку. Есть и инструкция умельцев на эту тему, но я пока не пробовал. Raid1 это хорошо, но я еще поставил smartctl для мониторинга за физ. состоянием жесткого диска, теперь пробую настроить оповещение по почте с помощью ssmtp.

Это кратко по гипервизору, возвращаясь же к пробросу железа хочу заметить: все удачно сраслось с win7. Видео начинает работать только после того как установлен драйвер. Т.е. мы видим загрузка ОС в коносли xencenter, затем картинка замирает и оживает монитор уже самой ВМ. Если баловаться с драйверами, то можно потерять картинку. Драйвер ставил последний. Пробовал видео пробросить на win8, работает. НО происходит замирание где-то на 2 минуты в процессе загрузки. Пробовал разные версии драйверов, на бете даже идет картинка в консоль. т.е. как будто два монитора у ВМ. Были проблемы с sata-контроллерами, дешевыми китайскими поделками. Пока я не перепрошил его последней прошивкой он давал минутную задержку при загрузке - искал девайсы. В устройствах так и осталось не работающий raid-контроллер, если попробовать поставить дрова - будет еще хуже. А так-то мне рейд от него не нужен, достаточно того, что работает ide DVD-привод. На win8 почему-то иногда при загрузке ВМ отпадал звук, приходилось перезагружаться. Была очень большая проблема на начальном этапе разбора ситуации. После проброса видео начинала дико тормозить сетевая карта, по логам видно что не могли поделить 19 прерывание два устройства. В результате гугленья нашел лекарство - в /boot/extlinux.conf в строку загрузки ядра нужно добавить параметр "noirqdebug" и все в шоколаде.

По-поводу производительности - делал тесты, в целом по процу и памяти замеры показали падение около 15%, но нужно тестировать еще. По жесткому диску сказать сложней, но считается что это самое узкое место в общей производительности.

p.s. я не затрагивал здесь вопросы того как ставить и разворачивать систему, статей на эту тематику полно в интернете. Я лишь делился опытом того, как мне удалось реализовать это самому, описать общие проблемы и пути их решения. Виртуализация с каждым днем становится все популярней, думаю тема уместна.
Previous post Next post
Up