Наши партнеры

UnixForum






Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Виртуальный Linux

Обзор методов виртуализации, архитектур и реализаций

M. Tim Jones (mtj@mtjones.com), Consultant Engineer, Emulex, 29 Dec.2006. ( Источник)
Перевод на русский язык В.А.Костромин (http://rus-linux.net), 17 января 2007 г.

Под "виртуализацией" разные люди понимают разные вещи. В настоящее время этим термином чаще всего обозначают виртуализацию серверов, то есть размещение (хостинг) нескольких независимых операционных систем на одном физическом компьютере (хосте). В настоящей статье рассматриваются основные идеи, скрывающиеся за термином "виртуализация", а затем обсуждаются некоторые из возможных путей или способов реализации этих идей. Мы здесь рассмотрим также и другие технологии виртуализации, такие как виртуализация операционной системы в Linux.

   Оглавление
   История виртуализации
Типы виртуализации
Зачем нужна
виртуализация?
Проекты виртуализации
для Linux
Аппартатная поддержка
полной виртуализации
и паравиртуализации
Виртуальная машина
ядра Linux (KVM)
Выводы
Ресурсы
Об авторе

Виртуализировать означает сделать так, чтобы одна вещь представлялась как другая (или казалась другой вещью). Виртуализация компьютера означает, что он представляется как много компьютеров или как совершенно другой компьютер.

Виртуализация также может означать, что некоторая совокупность компьютеров представляется как единый компьютер. Обычно это явление называют агрегацией серверов или распределенными вычислениями (grid computing).

Давайте начнем с возникновения виртуализации.

История виртуализации

Виртуализация - это далеко не новое явление: фактически ей уже более четырех десятков лет. Самые первые применения виртуализации имели место в компьютерах IBM® 7044, в системе разделения времени (the Compatible Time Sharing System - CTSS), разработанной в Массачусетском технологическом институте для IBM 704 и в проекте Atlas Манчестерского университете (один из первых в мире суперкомпьютеров), в котором впервые были применены выделение страниц по требованию и вызовы супервизора (which pioneered demand paging and supervisor calls).

Виртуализация аппаратуры

IBM осознала важность виртуализации в 1960-х годах во время разработки компьютера System/360(TM) Model 67. Этот компьютер виртуализировал все аппаратные интерфейсы посредством монитора виртуальных машин VMM (the Virtual Machine Monitor). В начале компьютерной эры операционные системы называли супервизорами (supervisor). После реализации возможности запускать одну операционную систему в другой операционной системе появился (в 1970-х) термин "гипервизор" (hypervisor).

Монитор виртуальных машин VMM работал непосредственно с аппаратным обеспечением и позволял запускать множество виртуальных машин (VM). В каждой виртуальной машине могла быть запущена своя операционная система - в те дни это называлось CMS или Conversational Monitor System. Виртуальные машины совершенствовались и сегодня мы находим их работающими на мэйнфремах серии System z9(TM). Они обеспечивают обратную совместимость, даже с линейкой System/360.

Виртуализация процессора

Еще одним из ранних вариантов виртуализации были P-коды (или псевдо-коды), в этом случае осуществлялась симуляция процессора. P-коды - это машинный язык, который исполнялся в виртуальной машине, а не на реальном процессоре. P-коды появились в начале 1970-х в разработанной в Калифорнийском университете Сан-Диего (UCSD) Pascal-системе, которая компилировала Pascal-программу в P-коды, а затем выполняла ее в виртуальной машине, реализующей P-коды. Это делало программы на P-кодах в высшей степени переносимыми и позволяло запускать их на любых компьютерах, для которых существовали виртуальные машины, реализующие P-коды.

Витруальная машина Java (Java Virtual Machine - JVM)
Язык Java TM в своей виртуальной машине использует модель, разработанную для P-кодов. Это позволило достичь широкой распространенности Java-программ, причем для самых разных архитектур, просто путем портирования JVM.

Та же самая концепция была использована в 1960-х годах при создании языка Basic Combined Programming Language (BCPL), предшественника языка C. В нем компилятор преобразовывал BCPL-код в промежуточный код, который назывался O-код. На втором этапе O-код компилировался в машинные коды компьютера, на котором он должен был исполняться. Та же модель используется в современных компиляторах для языков программирования, что позволяет обеспечить возможность легкого портирования компилятора на новые аппаратные архитектуры (за счет разделения внешнего и внутреннего интерфейсов промежуточным языком).

Виртуализация набора команд

Более поздний вариант виртуализации - виртуализация набора команд (инструкций) или бинарная трансляция. В этой модели виртуальный набор команд транслируется в набор команд реального аппаратного обеспечения, причем в большинстве случаев это осуществляется динамически. Трансляция сегмента кода происходит тогда, когда код должен исполняться. Если происходит переход, извлекается из памяти нужный новый кусок кода и транслируется. Это сильно напоминает кэширование, при котором блок инструкций перед исполнением перемещается из памяти в быстрый кэш.

Недавний пример использования той же модели имел место в процессоре Crusoe, разработанном компанией Transmeta. В этой архитектуре применяется бинарная трансляция, зарегистрированная под торговой маркой Code Morphing. Еще одним примером может служить сканирование кодов во время исполнения (runtime code scanning), используемое при полной виртуализации для поиска и перенаправления привелигированных команд (для обработки результатов в некоторых наборах инструкций процессора).

Виртуализация и игры
Заметка о виртуализации была бы неполной, если не упомянуть "эмулятор многих аркадных машин" (Multiple-Arcade Machine Emulator - MAME). MAME, как и следует из его названия, является эмулятором одновременно многих аркадных игр, разработанных в прошлом. В нем виртуализируются не только процессоры, использовавшихся для запуска этих игр, но вся машина в целом, включая звуковые и графические устройства и устройства управления. MAME - это великолепное приложение, но интересно также поразмышлять над его исходниками, чтобы понять сферу его применения.

Типы виртуализации

Когда заходит речь о виртуализации, необходимо сказать, что существует не единственный способ достичь нужного эффекта. Фактически имеется несколько вариантов достижения одного и того же результата путем использования разных уровней абстракции. В этом разделе мы рассмотрим три наиболее общих метода виртуализации в Linux и оценим их относительные преимущества и недостатки. Отметим, что иногда для обозначения одного и того же метода виртуализации используются различные термины. Мы будем использовать наиболее употребительные, указывая на возможность употребления других вариантов.

Эмуляция аппаратуры

Вероятно самым сложным способом виртуализации является эмуляция аппаратуры. В этом методе в хост-системе создается виртуальная машина, которая моделирует какую-то другую аппаратную архитектуру, как это показано на рисунке 1.

Эмуляция аппаратуры использует виртуальную машину для моделирования 
требуемого аппаратного обеспечения.
Рисунок 1. Эмуляция аппаратуры использует виртуальную машину для моделирования требуемого аппаратного обеспечения

 
Эмуляция и разработка
Одно из наиболее интересных применений эмуляция аппаратуры находит в процессе совместной разработки аппаратуры и встроенного (прошитого) в аппаратуру программного обеспечения. Вместо того, чтобы дожидаться, пока будет доступно реальное оборудование, разработчики прошиваемого ПО используют виртуальные машины, моделирующие разрабатываемое оборудование, для того, чтобы проверить в процессе моделирования различные аспекты поведения своих программ.
Вы, вероятно, догадываетесь, что основная проблема при этом способе виртуализации состоит в том, что он мучительно медленный. Дело в том, что каждая команда должна быть смоделирована применительно к реальному аппаратному обеспечению, а при этом 100-кратное замедление не является чем-то необычным. При полном моделировании, которое подразумевает точное исполнение циклов, моделирование конвейеров ЦПУ и поведения кэша, реальная скорость выполнения быть и в 1000 раз меньше, чем на реальной моделируемой аппаратуре.

Но эмуляция аппаратуры имеет и свои преимущества. Например, в этом случае вы имеете возможность без внесения каких-либо изменений запустить операционную систему, разработанную для PowerPC® на хосте, работающем на процессоре ARM. Вы даже можете запустить несколько виртуальных машин, моделирующих различные процессоры.

Полная виртуализация

Полная виртуализация, которую также называют естественной (native virtualization), - это другой интересный метод виртуализации. Эта модель использует виртуальную машину, которая выступает как посредник между гостевой операционной системой и реальным оборудованием (см. Рисунок 2). Слово "посредник" в данном случае играет ключевую роль, поскольку VMM располагается между гостевой ОС и реальным оборудованием. Некоторые инструкции защищенного режима должны перехватываться и обрабатываться внутри гипервизора, поскольку аппаратура не доступна непосредственно из операционных систем, доступ к ней предоставляется через гипервизор.

Полная виртуализация использует программу-гипервизор 
для разделения доступа к нижележащему оборудованию.
Рисунок 2. Полная виртуализация использует программу-гипервизор для разделения доступа к нижележащему оборудованию
 
Гипервизоры для старой аппаратуры
Некоторые виды старого аппаратного обеспечения, такие как x86, создают проблемы при полной виртуализации. Например, некоторые команды из числа тех, которые должны обрабатываться в VMM, не перехватываются. Следовательно, гипервизоры должны постоянно отслеживать и перехватывать коды привелигированных команд для того, чтобы справиться с этой проблемой.

Полная виртуализация работает быстрее, чем эмуляция аппаратуры, но производительность все же ниже, чем на реальной аппаратуре, из-за посредничества гипервизора. Самое большое преимущество полной виртуализации состоит в том, что гостевая операционная система может быть запущена без какой-либо модификации. Единственное ограничение состоит в том, что она должна поддерживать реальное физическое оборудование (например, PowerPC).

Паравиртуализация

Паравиртуализация - это другой популярный метод, который имеет некоторое сходство с полной виртуализацией. Этот метод тоже использует гипервизор для разделяемого доступа к оборудованию, но интегрирует код виртуализации в саму операционную систему (см. Рисунок 3). Этот подход позволяет избежать любой перекомпиляции или перехвата команд, поскольку операционная система сама участвует в процессе виртуализации.

Паравиртуализация разделяет процесс с гостевой операционной 
системой.
Рисунок 3. Паравиртуализация разделяет процесс с гостевой операционной системой

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

Виртуализация уровня операционной системы

Последний из рассматриваемых нами здесь вариантов, виртуализация уровня операционной системы, использует технику, отличающуюся тех способов, которые были рассмотрены ранее. В этом варианте виртуализируются серверы, запускаемые в операционной системе. В этом случае операционная система одна и просто изолируются один от другого сервера, работающие под ее управлением (см. Рисунок 4).

При виртуализации уровня операционной системы изолируются сервера.
Рисунок 4. При виртуализации уровня операционной системы изолируются сервера

Виртуализация уровня операционной системы требует внесения изменений в ядро операционной системы, но зато позволяет достичь исходной ее производительности.


Вернуться к началу

Зачем нужна виртуализация?

Перед тем, как рассмотреть некоторые из реализаций виртуализации, доступных в Linux-системах, давайте скажем несколько слов о преимуществах виртуализации.

С точки зрения бизнеса имеется множество причин для использования виртуализации. Большинство получаемых преимуществ вытекает из того, что принято называть консолидацией серверов. Проще говоря, если вы можете перевести несколько не полностью используемых систем на один сервер, вы получаете существенную экономию пространства, потребления энергии, охлаждения и упрощаете администрирование в силу того, что требуется поддерживать меньшее количество серверов. Поскольку трудно определить степень использования сервера, технология виртуализации поддерживает возможность так называемой "живой миграции" (live migration). Живая миграция позволяет операционной системе и ее приложениям быть перемещенными на новый сервер для балансировки нагрузки на имеющееся оборудование.

Виртуализация важна также для разработчиков. Ядро Linux работает в общем адресном пространстве, что означает, что сбой в работе ядра или любого драйвера приводит к краху всей операционной системы. Виртуализация означает, что вы запускаете множество операционных систем, и, если одна из них рушится из-за какой-то ошибки, гипервизор и другие операционные системы продолжают работать. Это может сделать отладку ядра подобной отладке пользовательских приложений.


Вернуться к началу


Проекты виртуализации для Linux

В таблице 1 приведен список нескольких проектов виртуализации для Linux, причем в основном перечисляются проекты с открытым исходным кодом.

Таблица 1. Проекты виртуализации для Linux-систем
ПроектТипЛицензия
BochsЭмуляцияLGPL
QEMUЭмуляцияLGPL/GPL
VMwareПолная виртуализацияProprietary
z/VMПолная виртуализацияProprietary
XenПаравиртуализацияGPL
UMLПаравиртуализацияGPL
Linux-VServerВиртуализация уровня ОСGPL
OpenVZВиртуализация уровня ОСGPL

Информацию о других решениях вы сможете найти по ссылкам в разделе Ресурсы.

Bochs (эмуляция)

 
Виртуализация уровня библиотек
Хотя здесь и не обсуждается, однако существует еще один метод виртуализации - виртуализация уровня библиотек, когда эмулируется только часть операционной системы, а именно, библиотеки. В качестве примера можно привести Wine (эмуляция в Linux части Win32 API) и LxRun (эмуляция в Linux части API для Solaris).

Bochs - это программа-имитатор, моделирующая компьютер архитектуры x86, которая портируема и может запускаться на многих аппаратных платформах, включая x86, PowerPC, Alpha, SPARC и MIPS. Особенность, которая делает Bochs особо интересным проектом, заключается в том, что он(а) моделирует не только процессор, но и периферийное оборудование, такое как клавиатура, мышь, видео-оборудование, сетевые карты и так далее.

Bochs можно сконфигурировать для моделирования старого Intel® 386, или его последователей, таких как 486, Pentium, Pentium Pro или 64-битных вариантов. Он(а) может эмулировать даже необязательные наборы графических инструкций вроде MMX и 3DNow.

Используя Bochs, вы можете запустить под Linux любой из дистрибутивов Linux, Microsoft® Windows® 95/98/NT/2000 (и множество приложений), и даже операционные системы семейства Berkeley Software Distribution (BSD) - FreeBSD, OpenBSD и так далее.

QEMU (эмуляция)

QEMU - это другой эмулятор, подобный Bochs, но имеющий несколько малосущественных отличий. QEMU поддерживает два режима эмуляции. Первый - режим полной эмуляции системы (Full System Emulation). Этот режим подобен Bochs в том, что в этом случае моделируется весь персональный компьютер (PC) с процессором и периферией. Имеется возможность, используя динамическую трансляцию, смоделировать различные процессорные архитектуры, такие как x86, x86_64, ARM, SPARC, PowerPC и MIPS, причем с достаточно приемлемыми скоростями работы. В этом режиме, используя в качестве базовой ОС Linux, Solaris или FreeBSD, вы можете сэмулировать операционные системы семейства Windows (включая XP) и Linux. Поддерживается множество других комбинаций операционных систем (дополнительную информацию ищите в секции Ресурсы).

QEMU включает также другой режим, который называется пользовательским режимом эмуляции (User Mode Emulation). В этом режиме, который работает только в том случае, когда базовой ОС является Linux, могут быть запущены приложения (бинарные файлы), созданные для других архитектур. Например, можно запустить на исполнение в ОС Linux, работающей на x86, бинарный файл, скомпилированный для архитектуры MIPS. В настоящее время в этом режиме поддерживаются архитектуры ARM, SPARC и PowerPC, а поддержка еще нескольких находится в процессе разработки.

VMware (полная виртуализация)

VMware - это коммерческое решение по методу полной виртуализации. Гирервизор располагается между гостевой операционной системой и физическим оборудованием как дополнительный уровень абстракции. Этот уровень абстракции позволяет любой операционной системе работать с оборудованием, не обращая внимания на присутствие любой другой гостевой операционной системы.

VMware виртуализирует также имеющиеся устройства ввода-вывода и добавляет к гипервизору драйверы высоко-производительных устройств.

Вся виртуализируемая система (включая гостевую ОС, виртуальную машину и виртуальное оборудование) хранится в виде файла, в силу чего легко и быстро можно перенести ее на другой хост, например, для балансировки нагрузки.

z/VM (полная виртуализация)

Хотя система z от IBM (IBM System zTM) появилась относительно недавно, фактически она является наследницей предыдущих разработок, история которых восходит к 1960-м годам. Компьютеры линейки System/360 поддерживали виртуализацию на основе виртуальных машин уже в 1965. Интересно, что System z сохраняет обратную совместимость с линейкой System/360.

z/VM ® - это гипервизор операционной системы для System z. Его ядром является программа управления (Control Program - CP), которая обеспечивает виртуализацию физических ресурсов для гостевых операционных систем, в качестве которой может выступать, например, Linux (смотри Рисунок 5). При этом имеется возможность виртуализировать многопроцессорные системы и другие виды ресурсов для различных гостевых операционных систем.

Виртуализация уровня ОС с использованием z/VM.
Рисунок 5. Виртуализация уровня ОС с использованием z/VM

Система z/VM может также виртуально моделировать работу гостевой локальной вычислительной сети (ЛВС) для тех гостевых операционных систем, которые хотят взаимодействовать друг с другом. ЛВС моделируется полностью в гипервизоре, что обеспечивает высокий уровень безопасности.

Xen (паравиртуализация)

Xen - это свободное решение с открытыми кодами от компании XenSource, реализующее паравиртуализацию уровня операционной системы. Вспомним, что в случае паравиртуализации и гипервизор, и операционная система участвуют в процессе виртуализации, что требует внесения изменений в ОС, но зато обеспечивает почти естественную производительность.

Поскольку Xen требует внесения изменений в гостевую операционную систему, виртуализированы в Xen могут быть только ОС, соответствующим образом доработанные. С точки зрения Linux, которая придерживается принципа открытых кодов, это вполне приемлемый компромисс, поскольку результатом буде более высокое быстродействие, чем в случае полной виртуализации. Но с точки зрения обеспечения широты поддержки (имеется в виду поддержка операционных систем, не придерживающихся принципа открытых кодов), это очевидный недостаток.

Windows может быть запущена в Xen, но только на системах, в которых запущена Intel Vanderpool или AMD Pacifica. Другие операционные системы, поддерживающие Xen - это Minix, Plan 9, NetBSD, FreeBSD и OpenSolaris.

User-mode Linux (паравиртуализация)

User-mode Linux (UML) позволяет запускать в пользовательском пространстве одной операционной системы Linux другой экземпляр ОС Linux. Каждая гостевая Linux-система существует внутри процесса, запущенного на базовой операционной системе Linux (смотри Рисунок 6). Это обеспечивает возможность одновременного исполнения нескольких ядер Linux (с их собственными пользовательскими пространствами) в контексте одного (базового) ядра Linux.

Linux, запущенный в User-mode Linux
Рисунок 6. Linux, запущенный в User-mode Linux

Для ядер Linux версии 2.6 UML включено в основную ветку ядра, но для того, им воспользоваться, необходимо задействовать его и перекомпилировать ядро. При этом, кроме всего прочего, обеспечивается виртуализация устройств. Это позволяет гостевой операционной системе получать доступ к имеющимся физическим устройствам, таким как блочные устройства (флоппи, CD-ROM и файловые системы, например), к консоли, сетевым устройствам, звуковому оборудованию и так далее.

Отметим, что поскольку ядра гостевых ОС запускаются в пользовательском пространстве, они тоже должны быть скомпилированы специальным образом (хотя они могут относиться к другой версии ядра). Получаем две разных версии ядра - базовое ядро (которое работает непосредственно с физическим оборудованием) и гостевое ядро (которое запущено в пользовательском пространстве базового ядра). Можно даже получить многоуровневое вложение, когда в гостевом ядре запускается другое гостевое ядро.

Linux-VServer (виртуализация уровня операционной системы)

Linux-VServer - это решение, обеспечивающее виртуализацию уровня операционной системы. Linux-VServer изменяет ядро Linux таким образом, что образуется множество пользовательских пространств, называемых виртуальными частными серверами (Virtual Private Servers - VPS), исполняющимися независимо один от другого. Linux-VServer обеспечивает изоляцию этих пользовательских пространств за счет модификации ядра Linux.

Для того, чтобы изолировать индивидуальные пользовательские пространства одно от другого, вводится понятие контекста. Контекст - это контейнер для процессов заданной VPS, так что утилиты типа ps позволяют получать данные только о процессах данной VPS. При начальной загрузке ядро создает контекст по умолчанию. Существует также отдельный контекст для административных задач (чтобы видеть все исполняющиеся процессы). Как вы можете догадаться, ядро и внутренние структуры данных модифицируются для поддержки этого способа виртуализации.

В Linux-VServer используется также особая форма утилиты chroot, обеспечивающая изоляцию корневой директории для каждого VPS. Вспомним, что chroot позволяет определить новый корневой каталог, но в данном случае необходим дополнительный функционал (его называют Chroot-Barrier), чтобы VPS не мог выйти за пределы назначенного ему корневого каталога (в родительский каталог этого корневого). Кроме изолированного корневого каталога каждый VPS имеет собственный список пользователей и отдельный пароль суперпользователя root.

Linux-VServer поддерживается для ядер Linux версий 2.4 и 2.6 и может работать на платформах x86, x86-64, SPARC, MIPS, ARM и PowerPC.

OpenVZ (виртуализация уровня операционной системы)

OpenVZ - это другой вариант виртуализации уровня операционной системы, похожий на Linux-VServer, но имеющий несколько интересных отличий. OpenVZ - это приспособленное для виртуализации (модифицированное) ядро, которое поддерживает изолированные пользовательские пространства, VPS, а также имеет набор пользовательских утилит для управления. Например, вы можете легко создавать новые VPS прямо из командной строки:

Листинг 1. Создание VPS из командной строки

$ vzctl create 42 --ostemplate fedora-core-4
Creating VPS private area
VPS private area was created
$ vzctl start 42
Starting VPS ...
VPS is mounted

Вы можете также получить список всех существующих в данный момент VPS, используя команду vzlist, которая работает примерно таким же образом, как стандартная Linux-команда ps.

Для управления процессами в OpenVZ включен двухуровневый планировщик задач (диспетчер) ЦПУ. Этот диспетчер, во-первых, определяет, какой VPS должен получить доступ к ЦПУ. Когда это сделано, планировщик второго уровня запускает процесс на выполнение, устанавливая для него стандартные для Linux приоритеты.

OpenVZ содержит также компонент, который называется beancounters (прим.переводчика : в буквальном переводе это что-то вреде "счетчика бобов"). Beancounter представляет собой набор параметров, определяющих выделение ресурсов для заданного VPS. Этот набор определяет, сколько памяти предоставляется VPS, какие средства межпроцессорного взаимодействия (IPC) доступны объектам, и так далее, задавая тем самым определенный уровень контроля над VPS.

Уникальной особенностью OpenVZ является возможность задавать контрольные точки (to checkpoint) и переносить VPS с одного физического сервера на другой. Задание контрольной точки (Checkpointing) означает что состояние выполняющегося VPS "замораживается" и сохраняется в файле. Этот файл может быть перемещен на новый сервер, где этот VPS может быть восстановлен и запущен в работу с той же точки.

OpenVZ поддерживает различные типы аппаратных архитектур, включая x86, x86-64 и PowerPC.


Вернуться к началу

Аппаратная поддержка полной виртуализации и паравиртуализации

Напомню, что с точки зрения виртуализации архитектура IA-32 (x86) создает несколько проблем. Некоторые инструкции привелигированного режима не могут быть перехвачены. Другие возвращают различные результаты в зависимости от того, в каком режиме они выполняются. Например, команда STR в x86 показывает состояние безопасности, но возвращаемое значение зависит от того, каков уровень привилегий у запустившего ее процесса. Архитектура x86 поддерживает 4 кольца безопасности, причем на уровне 0 (наивысшие привилегии) обычно запускается сама операционная система, на уровнях 1 и 2 запускаются сервисы операционной системы, а уровень 3 (наименьшие привилегии) выделен для приложений. Очевидно, что это вызывает проблемы, когда запуск виртуальных операционных систем производится на разных уровнях. Производители оборудования уже осознали, что это является является недостатком (и не единственным) и разработали несколько новых проектов, которые поддерживают и ускоряют виртуализацию.

Фирма Intel разработала новую технологию виртуализации, которая будет поддерживать гипервизоры как для архитектуры x86 (VT-x), так и для Itanium® (VT-i). VT-x поддерживает две новых формы операций, одна - для VMM (root), а вторая - для гостевых операционных систем (non-root). Первая форма (root form) выполняется с полными привилегиями, а вторая лишена части привилегий (даже в кольце 0). Эта архитектура, кроме того, позволяет гибко определять инструкции, которые приводят к выходу VM (гостевой ОС) в VMM и сохранению состояния процессора. Добавлены и еще некоторые возможности; прочитать об этом вы можете в источниках, приведенных в разделе Ресурсы.

Фирма AMD тоже разработала аппаратно-поддерживаемую технологию виртуализации под названием Pacifica. Среди других особенностей Pacifica поддерживает блок управления для гостевой операционной системы, который сохраняется при выполнении специальных команд (maintains a control block for guest operating systems that are saved on execution of special instructions). По команде VMRUN виртуальная машина (и запущенная в ней операционная система) запускается и работает до тех пор, пока VMM снова не перехватит управление (что тоже настраивается). Возможность конфигурирования позволяет VMM определять уровень привилегий для каждой из гостевых систем. Кроме того, Pacifica контролирует преобразование адресов в таблицах блоков управления памятью (memory management unit - MMU) базовой и гостевой систем.

Эти новые технологии могут быть использованы в различных реализациях виртуализации, обсуждавшихся выше, включая Xen, VMware, User-mode Linux и других.


Вернуться к началу

Виртуальная машина ядра Linux (Linux Kernel Virtual Machine - KVM)

Одним из недавних новшеств в Linux является включение KVM в ядро Linux (версии 2.6.20). KVM - это реализация варианта полной виртуализации, превращающая ядро Linux в гипервизор за счет подключения соответствующего модуля ядра. Этот модуль позволяет запускать другие гостевые операционные системы в пользовательском пространстве базового ядра Linux (смотри Рисунок 7). Модуль KVM в ядре экспортирует (предоставляет) виртуализированное оборудование посредством символьного устройства /dev/kvm. Гостевая операционная система взаимодействует с модулем KVM через модифицированный процесс QEMU для эмуляции аппаратного обеспечения.

Виртуализация посредством виртуальной машины ядра (Kernel Virtual Machine).
Рисунок 7. Виртуализация посредством Kernel Virtual Machine (KVM)

Модуль KVM добавляет к ядру новый режим исполнения. Если раньше ядра поддерживали режим ядра и режим пользователя, KVM вводит режим гостя. Гостевой режим используется для выполнения всех инструкций, не связанных с вводом-выводом, а операции ввода-вывода для гостевых систем исполняются в обычном пользовательском режиме.

Включение KVM в ядро является очень интересным явлением в эволюции Linux, поскольку является первой технологией виртуализации, включенной в основную ветку ядра. Оно появилось в версии 2.6.20, но может быть в виде модуля включено и в ядрах версии 2.6.19. Его использование на аппаратном обеспечении, поддерживающем виртуализацию, позволяет запускать гостевые операционные системы Linux (в 32-х и 64-х битовом вариантах) и Windows (32-битовую). Если хотите больше узнать о KVM, смотрите раздел Ресурсы.


Вернуться к началу

Выводы

Виртуализация - это великолепное новшество, если термин "новшество" вообще можно применять к явлению, история которого насчитывает более четырех десятилетий. В исторической перспективе она встречается в разных контекстах, но в настоящее время в основном используется для виртуализации серверов и операционных систем. Подобно Linux, виртуализация предоставляет множество возможностей для повышения производительности, переносимости и приспособляемости компьютерных систем. Это означает, что вы можете выбрать подход, который наиболее соответствует вашим потребностям и используемому вами набору приложений.

Ресурсы

Обучение
  • Страничка New to IBM Systems будет вам полезна, если вы еще не знакомы с системами от IBM. На этой страничке вы найдете описания систем i, p, x, z и других.

  • Grid computing от IBM базируется на наборе открытых стандартов и протоколов для виртуализации распределенных компьютерных компьютерных сетей с целью создания единой мощной вычислительной системы.

  • Страница developerWorks Linux zone содержит различные ресурсы для разработчиков Linux.

  • Страница новостей developerWorks technical events and webcasts.

Где найти продукты и технологии
  • Bochs и QEMU - эмуляторы ПК, которые позволяют запускать такие операционные системы как Windows или Linux в пользовательском пространстве базовой Linux-системы.

  • VMware - популярное коммерческое решение методом полной виртуализации, которое позволяет запускать в виртуальном компьютере немодифицированные операционные системы.

  • z/VM - новая операционная система виртуальных машин для 64-битовой z/архитектуры. z/VM обеспечивает полную виртуализацию оборудования и поддержку широкого спектра операционных систем, включая Linux.

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

  • User-mode Linux - другое решение с открытыми исходными кодами на основе метода паравиртуализации. Каждая гостевая ОС исполняется как процесс в базовой операционной системе.

  • coLinux или Cooperative Linux - реализация виртуализации, которая позволяет двум операционным системам совместно использовать аппаратное обеспечение.

  • Linux-Vserver виртуализация уровня ОС для GNU/Linux-систем, обеспечивающая надежную изоляцию независимых гостевых серверов.

  • OpenVZ - виртуализация уровня ОС, поддерживающая "замораживание состояния" и перенос системы с одного сервера на другой.

  • Linux KVM - первая технология виртуализации, которая интегрирована в основную ветку ядра Linux. На оборудовании, поддерживающем виртуализацию, путем подключения загружаемого модуля ядро Linux превращается в гипервизор, способный осуществлять запуск немодифицированных гостевых ОС Linux и Windows.

  • Order the SEK for Linux - комплект из двух DVD, содержащий пробные версии последних разработок ПО для Linux от IBM: DB2®, Lotus®, Rational®, Tivoli® и WebSphere®.

  • С сайта IBM trial software вы можете непосредственно скачать пробные версии ПО, чтобы проводить собственные разработки ПО для Linux.

Об авторе

M. Tim Jones

M. Tim Jones - проектировщик программного обеспечения для встраиваемых систем и автор книг GNU/Linux Application Programming, AI Application Programming и BSD Sockets Programming from a Multilanguage Perspective. В прошлом он участвовал в создании ядер для встроенных операционных систем геостационарных космических аппаратов и занимался разработкой сетевых протоколов. Сейчас он инженер-консультант фирмы Emulex Corp. в Лонгмонте, штат Колорадо (Longmont, Colorado).

Обсудить статью на UnixForum

Обсуждение статьи на форуме LOR

Другие статьи о виртуализации в Linux ищите в каталоге ссылок "Виртуальная энциклопедия "Linux по-русски"