Рекурсивная виртуализация

Статья была написана 23 ноября 2010 г. Перенесена из старого блога.

Виртуализация настолько плотно вошла в нашу жизнь, что уже сейчас я не могу представить себе ее отсутствие. Конечно, не каждый использует виртуализацию в промышленных масштабах и далеко не каждый получает от этой технологии коммерческую выгоду. Зато почти все мы пользуемся виртуализацией для тестирования и отладки операционных систем и программного обеспечения в своих домашних лабораториях и на работе. Все это бес спорно замечательно, но как быть если необходимо протестировать непосредственно сервер виртуализации? Конечно, можно взять железный сервер, установить на него платформу виртуализации, на создавать ВМ и тестировать себе в доваль! В таком случае мы лешаемся удобных снапшотов и прочих вкусностей предоставляемых нам виртуализацией. Да и что же делать, если необходимо отладить живую миграцию ВМ между хотя бы двумя серверами с использованием общего сетевого хранилища? Это уже как минимум 3-и железных сервера! Такую роскаш не каждый средне-статистический админ может себе позволить! А вот рекурсивная виртуализация может, причем в приделах одного домашнего ноутбука…

Теория

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

В первые рекурсивная виртуализация была реализована одним из разработчиков SUSE Linux на процессорах AMD. Для процессоров Intel данная возможность была долгое время не доступна из-за сложной архитектуры процессоров. Сейчас это работает на процессорах обоих производителей, правда не на всех конкретных моделях! Более того считается, что на процессорах Intrl, рекурсивная виртуализация работает несколько медленнее. Я не сравнивал производительность, сказать нечего не могу.

Технические особенности

AMD Athlon(tm) II Dual-Core M300
openSUSE 11.3 x86_64 2.6.34-12-desktop
kvm-0.12.5-1.2.1.x86_64
CentOS 5.5 x86_64 — выступает в качестве гостевой системы — виртуально сервера виртуализации)

Версию Libvirt не указываю так как рекурсивная виртуализация доступно только при «голом» qemu-kvm! Libvirt пока такое не умеет или не хочет)

Практика

1. Необходимо убедиться в наличии модуля ядра kvm_amd или kvm_intel для соответствующего ЦП. И если он не загружен в ядро то загрузить его, хотя по умолчанию он всегда загружен.

#lsmod | grep kvm_amd
lsmod выводит список всех загруженных модулей, а grep просит ее вывести строку в которой присутствует название нашего модуля. После этой команды должна появиться строка в которой фигурирует имя нашего модуля. Если не появилась, значит модуль не загружен, и необходимо загрузить его в ручную.

#modprobe kvm_amd nested=1
команда modprobe подгружает в ядро указанный нами модуль. Дополнительный параметр nested=1 не обязателен, так как обычно он используется по умолчанию. Если modprobe заявит, что такого модуля нет, значит необходимо его установить используя Ваш менеджер пакетов

2. Теперь мы можем запускать нашу виртуальную машину, в моем случае это виртуальный сервер виртуализации.

#qemu-kvm -monitor stdio -m <объемПамяти> -hda <образДиска> -enable-nesting -net nic, vlsn=0, macaddr=<мак> -net user, vlan=0 -name »имяВМ» -vnc :1

Здесь используется голый qemu-kvm без libvirt. Команды являются стандартными для qemu-kvm. Особого внимания заслуживает опция -enable-nesting, именно она активирует рекурсивную виртуализацию для этой ВМ.

3. Заходим в ВМ и проверяем наличие процессора с поддержкой аппаратной виртуализации.

#cat /proc/cpuinfo | grep svm
если на экране появились какие то данные значит все ОК. Если нет значить что то сделанно не так! Для процессоров intel необходимо вместо svm указывать vmx.

Обычно все описанные действия в пункте №1 можно опустить, так как все это уже сделано автоматически по умолчанию.

Теперь можно запускать несколько серверов, сетевое хранилище и тестировать живую миграцию на своем домашнем ПК. Производительность таких серверов и виртуальных машин внутри серверов очень не валика, но удобство и бюджетность решения берут верх…

Помогла ли вам статья?

Рейтинг
( Пока оценок нет )
iVirt-it.ru
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: