Перевод. Оригинал в блоге Xen
От переводчика: на данный момент стабильная версия гипервизора Xen поддерживает два режима виртуализации. В паравиртуальном режиме (PV) оборудование не эмулируется, и гостевая ОС должна быть специальным образом модифицирована, чтобы работать в таком окружении. Начиная с версии 3.0, ядро Linux поддерживает запуск в паравиртуальном режиме без перекомпиляции. Преимущество режима PV в том, что он не требует поддержки аппаратной виртуализации со стороны CPU, а также не тратит вычсилительне ресурсы (иногда весьма значительные) для эмуляции оборудования на шине PCI.
Режим аппаратной виртуализации (HVM) появился в Xen, начиная с версии 3.0 гипервизора, и требует поддержки со стороны оборудования. В этом режиме для эмуляции виртуальных устройств используется QEMU, который весьма неповоротлив даже с паравиртуальными драйверами. Однако со временем поддержка аппаратной виртуализации в оборудовании получила настолько широкое рапространение, что используется даже в CPU ноутбуков. Поэтому у разработчиков возникло желание использовать быстрое переключение контекста исполнения между гипервизором и гостевой ОС и в паравиртуальном режиме, используя возможности оборудования. Так появился новый режим — аппаратная паравиртуализация, который будет доступен в Xen, начиная с версии 4.4.
Ядро Linux 3.14 будет поддерживать новый режим, разработанный Мукешем Разором (Mukesh Rathor)
из корпорации Oracle. Режим аппаратной паравиртуализации (PVH) позволяет гостевой ОС использовать аппаратные возможности платформы, но при этом не требует эмуляции оборудования с помощью QEMU. Это впечатляющий шаг в эволюции паравиртуального режима.
История и тонкости реализации режима PVH детально описаны в статье The Paravirtualization Spectrum, Part 2: From poles to a spectrum.
Если же говорить кратко, то сейчас гостевая ОС в Xen может работать в режиме аппаратной виртуализации (HVM) или же паравиртуализации (PV). В режиме PV ядро гостевой ОС позволяет гипервизору программировать таблицы страниц памяти, сегменты и т.д. Если процессор поддерживает расширения EPT/NPT, то затраты на управление памятью в режиме HVM (когда памятью управляет гостевая ОС) намного меньше, чем когда это делает гипервизор в режиме PV. Итак, в новом режиме гипервизор не управляет памятью и системными вызовами внутри гостевой ОС — все это происходит внутри контейнера виртуальной машины.
Такой «гибридный» режим паравиртуализации получил название «аппаратная паравиртуализация» (PVH).
Преимущества такого подхода состоят в сокращении объема кода, большей производительности при выполнении системных вызовов (отстутсвует переключение контекста между гостевой ОС и гипервизором), меньших задержках при выполнении различных операций, словом — в более быстром отклике гостевой ОС.
Код, реализующий режим PVH, будет доступен в Xen, начиная с версии 4.4 (уже вышел 3-й релиз-кандидат этой версии). Если сравнивать новый режим с режимом паравиртуализации, но практически никаких отличий нет, за исключением того, что гостевая ОС запускается в режиме HVM (но без PCI-устройств) и работает намного быстрее. Мы еще работаем над тонкостями ABI в новом режиме, поэтому ABI пока нестабилен.
Это значит, что в следующая версия Xen, возможно, даже не будет работать с текущей версией Linux ABI (а может и будет). Новый режим в высшей степени экспериментален и нестабилен. Мы намерены довести его до уровня практического применения, и всеми силами стремимся к этой цели.
Нам очень поможет, если пользователи будут пытаться использовать новый режим, так что мы сможем отслеживать ошибки и проблемы, которые мы не могли представить на этапе разработки.
Как использовать аппаратную паравиртуализацию?
- Скачайте последнюю версию Xen и соберите ее. Подробности можно узнать по ссылкам wiki.xen.org/wiki/Compiling_Xen_From_Source и wiki.xen.org/wiki/Xen_4.4_RC3_test_instructions
- Скачайте последюю версию ядра Linux. Подробности по ссылке wiki.xenproject.org/wiki/Mainline_Linux_Kernel_Configs#Configuring_the_Kernel
cd $HOME
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
cd linux - Соберите ядро с опцией CONFIG_XEN_PVH=y
- Конфигурация на основе настроек ядра вашего дистрибутива
cp /boot/config-`uname -r `$HOME/linux/.config
make menuconfig
затем выберите в меню Processor type and features —> Linux guest support —> Support for running as a PVH guest (NEW) - Если вы предпочитаете редактировать файл .config, то следует указать в нем:
CONFIG_HYPERVISOR_GUEST=y
CONFIG_PARAVIRT=y
CONFIG_PARAVIRT_GUEST=y
CONFIG_PARAVIRT_SPINLOCKS=y
CONFIG_XEN=y
CONFIG_XEN_PVH=y
Также следует включить блочные и сетевые устройства, консоль и т.д.
- Конфигурация на основе настроек ядра вашего дистрибутива
- Скомпилируйте и установите ядро
make modules_install && install
Также следует создать загрузочный образ (initrd), скопировать его и ядро в каталог /boot и настроить загрузчик. - Запустите гостевую ОС с параметром pvh=1, например:
extra=«console=hvc0 debug kgdboc=hvc0 nokgdbroundup initcall_debug debug»
kernel="/boot/vmlinuz-3.13+"
ramdisk="/boot/initramfs-3.13+.cpio.gz"
memory=1024
vcpus=4
name=«pvh»
vif = [ 'mac=00:0F:4B:00:00:68' ]
vfb = [ 'vnc=1, vnclisten=0.0.0.0,vncunused=1']
disk=['phy:/dev/sdb1,xvda,w']
pvh=1
on_reboot=«preserve»
on_crash=«preserve»
on_poweroff=«preserve - Используйте утилиту xl, утилита xm не поддерживает новый режим.
Гостевая ОС загрузится, как паравиртуальная, но утилита xen-detect будет показывать, что она запущена в режиме аппаратной виртуализации.
Не тестировались следующие возможности:
- Миграция виртуальных машины
- 32-битные ОС в режиме гостя (даже не пробуйте их в режиме PVH)
- Проброс PCI-устройств
- Работа в режиме гипервизора (dom0) — патчи для этого пока не приняты в основную ветвь кода Xen. Если вы желаете попробовать, можете использовать ветвь от Мукеша Разора:
cd $HOME/xen
git pull git://oss.oracle.com/git/mrathor/xen.git dom0pvh-v7
В этом случае следует при загрузке передавать Xen параметр dom0pvh=1. Гостевые ОС в этом режиме пока не поддерживаются.
Не работают следующие функции:
- Фильтрация вывода команды идентификации процессора (CPUID). Сейчас результат команды передается гостю без изменений.
- Аппаратная виртуализация на платформе AMD
- Запуск 32-х битных гостевых ОС
Если вы обнаружили ошибку, пожалуйста, вышлите нам на e-mail xen-devel@lists.xenproject.org следующую информацию:
- xl dmesg
- xl list
- xenctx -s $HOME/linux/System.map -f -a -C [domain id]
- Вывод консоли гостевой ОС
- Все остальное, что покажется вам важным
Пожалуйста, сохраняйте ваши образы ядра (vmlinuz). Они могут понадобиться нам в дальнейшем, но слишком велики, чтобы высылать их через e-mail.
Автор: lovecraft