Журнал LinuxFormat - перейти на главную

LXF84:Виртуализация

Материал из Linuxformat
Версия от 11:16, 30 января 2009; Crazy Rebel (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск
Виртуализация

Содержание

Прорыв в виртуальность

Аппаратная виртуализация позволяет запускать различные операционные системы на Linux одновременно, с высокой скоростью и бесплатно. Говорят об этом все; Пол Хадсон покажет вам, как сделать это.

Linux — это выбор: вы можете выбрать рабочий стол, выбрать браузер и даже выбрать логотип, который будет появляться при загрузке. Но основной выбор, без сомнения, самый сложный: какой дистрибутив лучше всех? Если вы похожи на нас, то, вероятно, скачете между дистрибутивами так же быстро, как Майк успевает выкладывать их на диск Linux Format; но настает время в вашей жизни, когда вам надоест делать переформатирование и вы начнете искать более разумный способ экспериментировать с новыми ОС. Этот способ – виртуализация: запустите множество ОС на одном компьютере и переключайтесь между ними с той же легкостью, как между программами.

Идея виртуализации не нова: VMware существует с 1999 года, и мы опубликовали две большие статьи про Xen за последние два года (LXF67 и LXF77). Теперь, впрочем, производители процессоров создали виртуализацию на кристалле (on-chip). Работа ОС в виртуальной машине (ВМ) будет явно медленнее, чем на чистом компьютере, так что если вы сможете заставить процессор выполнять эту работу, весь процесс ускорится – по крайней мере, теоретически. Конкурирующие решения от Intel (VT или Virtualisation Tethnology, технология виртуализации) и AMD (SVM, илиSecure Virtual Machines, безопасные виртуальные машины) начали поставляться с их процессорами, и наконец-то предприятия, любители новшеств и экспериментаторы среди вас могут попробовать виртуализацию, поскольку для этого она и предназначалась.

Прорыв

Аппаратная виртуализация может, наконец, решить простую, но неприятную проблему: процессоры x86 не умеют выполнять виртуализацию хорошо. От выпуска 386-го до последнего, основанного на Core 2, чипа Intel изменилось немногое – набор базовых инструкций тот же, то есть код, скомпилированный для 386, также будет работать на новейшем оборудовании от Intel и AMD. На самом деле новые функции, например, MMX, SSE, двойные ядра и 64-битная обработка, просто были «прикручены» к существующей архитектуре x86, чтобы не обесценивать вложения пользователей и предприятий.

Но это также означает, что сохранились старые недостатки. До VT и SVM все чипы x86 использовали четыре уровня (кольца) привилегий для исполнения. На уровне 0 работали наиболее привилегированные процессы (обычно ОС), а на уровне 3 – наименее привилегированные (обычно приложения пользователя). Это способствовало безопасному разделению привилегий на аппаратном уровне: только приложения уровня 0 (нулевого кольца) могут напрямую управлять оборудованием, что теоретически не позволяет приложению выполнить что-то фатальное для машины. Но на практике приложениям часто нужен доступ к оборудованию, так что они нуждаются в вызовах ОС и запрашивают ресурсы, например, побольше памяти или отрисовку трехмерной графики.

Традиционная виртуализация работает путем запуска гостевой ОС поверх вашей основной ОС, в более высоком, менее привилегированном кольце. Когда гостевая ОС пытается выполнить привилегированную инструкцию, ее должен перехватить монитор виртуальной машины (VMM) и подменить ее, чтобы гостевая ОС не обнаружила, что работает не на чистом оборудовании. Эта техника – известная как двоичная трансляция – сложна и сопряжена с проблемами, в частности, самомодифицирующегося и самопроверяющегося кода. Кроме того, это довольно медленно, поскольку предполагается, что VMM постоянно наблюдает за инструкциями, проносящимися мимо, пока не сможет выстроить кэш.

Xen решил эту проблему, применив паравиртуализацию, когда исходный код гостевой ОС модифицируется так, чтобы она осознавала себя в виртуальной машине. Если гостевой ОС требуются дополнительные привилегии, VMM не будет выполнять никакой двоичной трансляции, поскольку гостевая ОС для обслуживания своих потребностей просто вызовет Xen. Это делает работу виртуализации намного быстрее, а хост- и гостевая системы связаны гораздо более тесно.

Аппаратная виртуализация устраняет эту проблему раз и навсегда, за счет создания нового набора уровней привилегий, которые размещаются позади традиционных уровней. Новые уровни (известные как VMX Root) становятся реальными привилегированными уровнями, в то время как старые уровни (известные как VMX Nonroot) виртуализируются чипом и используются там, где работают гостевые ОС. Когда гостевая ОС спрашивает «на каком уровне я нахожусь?», чип может честно ответить «уровень 0», потому что он действительно работает на уровне 0 – только это нулевое кольцо виртуальное. Таким образом, все гостевые системы могут работать, не прибегая к двоичной трансляции, поскольку они не замечают разницы между уровнем 0 реальной машины и уровнем 0 внутри VMX Nonroot.

Поскольку это передовая технология, аппаратная виртуализация поддерживается не всеми чипами. В случае с Intel все новые чипы, основанные на Core 2, поддерживают аппаратную виртуализацию VT. Некоторые чипы постарше также работают, но подавляющее большинство чипов Pentium 4 не совместимы с VT. Что касается AMD, то только новейшие чипы, основанные на AM2, поддерживают технологию Secure Virtual Machines. Линейка Opteron должна обновиться вконце этого года, но сейчас SVM поддерживают только новые Athlon64 и Turion 64.

Интересно заметить, что хотя VT и SVM решают одну и ту же проблему, они работают совершенно по-разному: чипы AMD64 имеютинтегрированный контроллер памяти, а Intel держит его на северном мосту. На практике это означает, что чипы Intel должны виртуализовать контроллер памяти программно, тогда как AMD может делатьэто аппаратно, обеспечивая еще больший потенциал для повышенияскорости виртуализации.

Да, Xen все еще нужен

Размещение поддержки виртуализации на процессоре не отменяет потребности в программном обеспечении типа VMware или Xen, потому что все, что находится за пределами процессора (и контроллера памяти, в случае с AMD), по-прежнему нужно виртуализовать. Видеокарта, звуковая карта, жесткие диски и т.д. нуждаются в программной обработке, и здесь системы виртуализации все еще при деле. Наряду с VMware и Xen вы можете также использовать Qemu и Parallels Workstation, но хотя вся четверка предоставляет полную эмуляцию оборудования, кроме процессора, Qemu не имеет никакой поддержки технологий виртуализации Intel и AMD, и его производительность страдает.

Зачем виртуализировать?

  • Для домашних пользователей: Сыты по горло переустановкой дистрибутивов? Запустите один маленький дистрибутив как Domain-0, затем виртуализуйте поверх него любые другие дистрибутивы.
  • Для программистов: Нужно протестировать вашу программу на различных дистрибутивах, операционных системах и настройках? Легко: создайте столько виртуальных машин, сколько у вас платформ, затем разработайте набор тестов для запуска по ночам.
  • Для администраторов серверов: Застряли на 25%-ной загрузке сервера? Используйте виртуальную инфраструктуру для снижения времени простоя, увеличения гибкости и моментального предоставления ресурсов для всех ваших задач.

Xen против VMware

Наиболее явное отличие между Xen и VMware в том, что Xen устанавливает себя как основную ОС компьютера и загружается, когда включается компьютер. Когда ОС Xen запустится, она создаст свою первую виртуальную машину с операционной системой, известную как Domain-0. Она имеет особые привилегии доступа к оборудованию и имеет полное управление над любыми гостевыми системами, вызываемыми после нее.

В VMware ваша первоначальная ОС остается неизменной – VMware запускается как приложение поверх исходной ОС, переключая ее в режим хоста. Новые виртуальные машины создаются поверх хост-ОС как гостевые, и запускаются внутри приложения VMware.

Какая из этих двух идей лучше – вопрос спорный; но мы склоняемся в сторону подхода Xen, поскольку если в хост-ОС на VMware обнаружатся проблемы (или она рухнет), все виртуальные машины «завалятся» вместе с ней.

Между прочим, профессиональная версия VMwareVMware ESX Server – работает во многом подобно Xen, так что, возможно, люди VMware тоже считают это лучшим подходом!

Попробуйте сами

Это будет серьезной технологией 2007 года – испытайте ее сегодня и приплюсуйте к своему счетчику крутизны солидную добавку.

Есть чип, поддерживающий VT/SVM? Отлично! Вы в нескольких минутах от запуска Windows в Linux при помощи аппаратной виртуализации. Это можно сделать двумя способами: через Vmware — тогда виртуализация получится мгновенно, но это закрытая программа, не позволяющая модифицировать аппаратную часть во время работы; или через Xen, который полностью открыт, поставляется включенным в ряд основных дистрибутивов, но потребует некоторых усилий, чтобы заставить его работать. Хотя мы пытались заставить Parallels Workstation работать с VT, это почти всегда заканчивалось зависанием — приглашаем вас попробовать самим, и если вы заставите его работать, сообщите нам.

Нашими тестовыми машинами с Xen были двухпроцессорный Intel Xeon 5160 (итого четыре ядра), с 8 ГБ памяти, и AMD Athlon 64 X2 5000+ с 1 ГБ памяти. На момент написания статьи новый чип Xeon 5160 на базе Woodcrest/Core 2 был старшим серверным чипом от Intel, а машина AMD ориентировалась на домашних пользователей – все результаты тестирования, которые здесь напечатаны, лучше использовать для сравнения одной машины, работающей под «чистой» ОС, с той же машиной под управлением виртуализованной ОС, а не сравнивать Intel и AMD.

Наша тестовая платформа

Мы установили SUSE 10.1 на обе машины, используя 32-разрядные хосты и 32-разрядные гостевые ОС. SUSE 10.1 – превосходный выбор для испытания Xen, поскольку она поставляется с пакетами ядра Xen, устанавливаемыми через Yast. Также здесь есть специальный графический интерфейс для установки и настройки виртуальных машин, но на момент написания статьи он не работал – так что мы делали все вручную.

Шаг за шагом: запускаем VT- или SVM-виртуализацию с помощью Xen

Шаг 1

  • Установите пакеты Xen

Из Yast, поищите «kernel-xen», и вы увидите два пакета: kernel-xen и kernel-xenp-ae (см. ниже «Обратите внимание»). Вам также понадобятся cloop-kmp-xen, xen, xen-libs, xen-tools и xen-tools-ioemu, и любые дополнительные драйверы, какие пожелаете.

Шаг 2

  • Перезагрузитесь

Перезагрузите свой компьютер и выберите Xen – SUSE LINUX 10.1, когда появится загрузочное меню Grub. Пролетит кое-какой текст, и ваш компьютер загрузится как обычно. Не беспокойтесь, если исчезнет графическая заставка вашей SUSE: это не является дурным знаком.

Шаг 3

  • Проверьте установку

Поздравляем – вы загрузились в Xen! Вы можете проверить это, открыв консоль и запустив команду uname -a. Ваша версия ядра должна теперь походить на 2.6.16.13-4-xen.


Шаг 4

  • Настройте работу с ОЗУ

Запустите xm list для получения информации о Domain-0. Вы можете использовать xm mem-set Domain-0 500, чтобы назначить ему 500 М памяти. Можете также использовать xm vcpu-set Domain-0 1, чтобы задать ему один процессор. Изменения вступят в силу немедленно, так что вы сразу увидите, если памяти не хватает!

Шаг 5

  • Откройте файл конфигурации

Из командной строки скопируйте /etc/xen/examples/xmexample.hvm в /etc/xen/winxp.hvm, затем откройте winxp.hvm в своем любимом редакторе от имени root. Мы должны сконфигурировать его, чтобы запустить Windows.

Шаг 6

  • Настройте XP

Установите «memory» в значение в МБ для этой ВМ, а «name» – в уникальное значение, хотя бы «WinXP». Отредактируйте строку «disk» так, чтобы он указывал на winxp.img. Установите «cdrom» в значение /dev/cdrom, «boot» в d, «sdl» в 1, «vnc» в 0 и «vncviewer» в 0. Удалите любые символы # из начала этих строк.

Шаг 7

  • Создайте виртуальный жесткий диск

Отведите вашей системе XP пространство на диске, переключившись в каталог /etc/xen/images и выполнив команду dd if=/dev/zero of=winxp.img bs=1k seek=4096k count=1. Она создаст виртуальный диск размером 4 ГБ, который можно будет смонтировать как loopback-устройство внутри Xen.

Шаг 8

  • Финал: Windows на Linux!

Теперь выполните команду xm create winxp.hvm из каталога /etc/xen, и – если все будет нормально – появится окно с запущенным инсталлятором Windows. Будьте осторожны: этот шаг самый рискованный из всех; рекомендуем сперва выполнить команду sync и убедиться, что буфер вашей файловой системы очищен [также подразумевается, что установочный диск Windows XP вставлен в CD-ROM, – прим. ред.].

Персональные инструменты
купить
подписаться
Яндекс.Метрика