Установка и настройка гипервизора Xen (монитора виртуальных машин) с пробросом видеокарты в гостевую ОС (Windows)

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

Статья разделена на 3 раздела:
1. Аппаратные требования.
2. Установка и настройка Xen.
3. Проброс в гостевую ОС Видеокарты и других PCI устройств.

Итак для того чтобы установить Xen и пробросить видеокарту в гостевую ОС необходимо соблюдение нескольких аппаратных требований
1. Наличие достаточно современного процессора и материнской платы поддерживающих технологию аппаратной виртуализации для Intel VT-x VT-d для AMD AMD-V IOMUU а также 2-х видео карточек
одна из которых может быть встроенной в процессор или материнскую плату (но работать независимо от дискретной) и второй обязательно Radeon не ниже 4550 ну или nvidia quadro если нет проблем с деньгами :-) (об удачных пробросах бюджетных карточек от nvidia мне информация не попадалась)
И монитора с двумя независимыми входами или двух различных мониторов подключенных к своим видео карточкам соответственно.

Кстати владельцам процессоров Intel последних поколений с буквой "K" о пробросе придется забыть поскольку технология VT-d в них отключена но технология VT-x работает и если вас не сильно волнует наличие крутой видяхи в гостевой ОС или другой "железяки" то для организации параллельной работы нескольких ОС их вполне хватает.

Вот моя аппаратная платформа
CPU - Intel Core i7-3770 графика Intel® HD Graphics 4000
Мать - P8B75-V
Озу - 8 Гб
Видеокарта Radeon HD 4850 (вторая)
Монитор Acer AL2216W с двумя видео входами DSUB и DVI подключенный к двум видеокартам по разным каналам (на свой страх и риск так как на счет гальванической развязки входов нет никакой информации)

2. Устанавливаем Xen.
Если раньше установка этого ПО сопровождалось скачиванием исходников компиляцией и шаманством с файлами конфигураций что отпугивало 90% потенциальных пользователей то теперь начиная с версии Ubuntu 12.04 гипервизор Xen устанавливается прямо из репозитория ubuntu.
sudo apt-get install xen-hypervisor-4.2-amd64 xen-utils-4.2 xenwatch xen-tools xen-utils-common xenstore-utils (для 13.04 для более ранних версий систем 12.04 12.10 может оказаться xen-hypervisor-4.1-amd64 )
поставим так же графический инструмент управления ВМ virt-manager
sudo apt-get install virtinst virt-viewer virt-manager
Перезагружаем OC c выбором в GRUB ядра Xen проверяем что гипервизор установился нормально
# xm info

и домен Dom0 запущен
sudo xm list
Далее для virt-manager в файл ~/.bashrc
sudo kate ~/.bashrc
добавим
export VIRSH_DEFAULT_CONNECT_URI="xen:///"
сконфигурируем наш xend (демон виртуальной машины)
sudo kate /etc/xen/xend-config.sxp
параметр
(xend-unix-server yes)
должен быть раскомментирован.
Я сижу за роутером и потому удалив NetworkManager для Xen создал мост (bridge) прописав в /etc/network/interfaces
Так же не лишним в группу libvirtd будет добавить вашего пользователя
запускаем
virt-manager
или K-> Система -> Менеджер виртуальных машин
должны получить вот такое окошко
Нажав на кнопку "Создание новой виртуальной машины" можем приступить к установке и настройке виртуальной ОС
Если при создании новой ВМ virt-manager ругается ошибками идем по ссылке и лечим как написано в конце статьи все должно заработать
Создадим файл конфигурации виртуальной ОС
mkdir ~/xen_vm
cd ~/xen_vm
kate ./vm.cfg

заполняем
создадим файл диска ВМ размером = 20 Гб
cd ~/xen_vm
dd if=/dev/zero of=hdd bs=1024k seek=20000 count=0

Установить шindows.
Для соединения (пока что) с "экраном" гостевой ОС используем, например VNC или krdc. Дефолтный адрес:порт 127.0.0.1:5900.

3. Пробрасываем VGA и PCI устройства в гостевую ОС (DomU)
Grep-аем видеокарту Radeon
sudo lspci|grep Radeon

Изолируем pci девайсы от dom0. Прописывайем значения в /etc/default/grub
GRUB_CMDLINE_LINUX="xen-pciback.permissive xen-pciback.hide=(01:00.0)(01:00.1) dom0_mem=2048M"
далее sudo update-grub2
перезагружаемся и проверяем доступность устройств для гостевой ОС
sudo xm pci-list-assignable-devices
если не прокатило
идём в /etc/init.d/
создаём файл ati.hide.pciback
заполняем
#!/bin/bash

modprobe xen-pciback

echo 0000:01:00.0 > /sys/bus/pci/devices/0000:01:00.0/driver/unbind
echo 0000:01:00.0 > /sys/bus/pci/drivers/pciback/new_slot
echo 0000:01:00.0 > /sys/bus/pci/drivers/pciback/bind

echo 0000:01:00.1 > /sys/bus/pci/devices/0000:01:00.1/driver/unbind
echo 0000:01:00.1 > /sys/bus/pci/drivers/pciback/new_slot
echo 0000:01:00.1 > /sys/bus/pci/drivers/pciback/bind

прописываем скрипт в автозагрузку
update-rc.d ati.hide.pciback defaults 95 05
перезагружаемся и снова проверяем доступность устройств
sudo xm pci-list-assignable-devices
Если устройства стали доступны DomU в файле vm.cfg раскоментируем 2 последних строчки
gfx_passthru = 0
pci=['01:00.0','01:00.1']

и попробуем создать ВМ
sudo xm create ~/xen_vm/vm.cfg
если всё прошло успешно и гостевая ОС запустилась
останется зайти в систему и установить драйверы на карту Radeon причем устанавливать нужно только сами драйверы Каталист Контрол Центр (CCC) ставить нельзя иначе получите "BSOD"
P.S. Обещанные в начали статьи ссылки
Установка Xen
Oписание параметров файлов виртуальных машин Xen
Xen. Или как приучить шindows быть второй на компе.
Проброс видеокарты в виртуальную машину
Xen_PCI_Passthrough
Паравиртуальные драйверы для Windows