Анатомия гипервизора Linux

Введение в KVM и Lguest

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

M. Тим Джонс, инженер-консультант, Emulex Corp.

М. Тим ДжонсМ. Тим Джонс - архитектор встроенного ПО и, кроме того, автор книг Artificial Intelligence: A Systems Approach, GNU/Linux Application Programming (выдержавшей на данный момент второе издание), AI Application Programming (второе издание) и BSD Sockets Programming from a Multilanguage Perspective. Он имеет обширный опыт разработки ПО в самых разных предметных областях - от ядер специальных ОС для геосинхронных космических аппаратов до архитектур встраиваемых систем и сетевых протоколов. Тим - инженер-консультант Emulex Corp., Лонгмонт, Колорадо.



14.12.2010

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

Виртуализация и гипервизоры

Для начала немного о важности виртуализации и о том, какую роль играют гипервизоры (более подробную информацию по обоим пунктам см. в разделе Ресурсы).

В контексте этой работы виртуализация— это скрытие нижележащего аппаратного обеспечения таким образом, что его могут прозрачно и совместно использовать много операционных систем. Такая архитектура наиболее известна как виртуализация платформы. В обычной многослойной архитектуре слой, предоставляющий виртуализацию платформы, называется гипервизором (иногда «монитором виртуальных машин», virtual machine monitor, VMM). Каждый экземпляр гостевой операционной системы называется виртуальной машиной (virtual machine, VM), потому что аппаратное обеспечение виртуализировано так, что кажется выделенным только для неё. Простая иллюстрация такой многослойной архитектуры продемонстрирована на рисунке 1.

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

Виртуализация платформы дает множество преимуществ. Вот интересные результаты одного из исследований, проведённых Агентством по охране окружающей среды США (EPA). Исследуя эффективность расходования электроэнергии серверами и компьютерными центрами, агентство обнаружило, что в действительности используется только около 5% возможностей сервера. Остальную часть времени сервер бездействует. При виртуализации платформ на одном сервере можно повысить коэффициент его использования, а уменьшение общего количества серверов дает дополнительные преимущества. С уменьшением количества серверов падают требования к площадям, потреблению электроэнергии, охлаждению (уменьшаются затраты на электроэнергию) и затратам на обслуживание. Меньшее количество аппаратного обеспечения также означает повышенную надёжность. В целом виртуализация платформы даёт не только технические, но и финансовые и энергетические выгоды.

Как можно видеть на рисунке 1, гипервизор является слоем программного обеспечения, который предоставляет виртуализацию нижележащей машины (в некоторых случаях поддерживается и процессор). Не все решения виртуализации одинаковы. В разделе Ресурсы приведены ссылки на более подробные описания различных способов виртуализации. Если продолжать тему процессов, операционная система виртуализирует доступ процессов к нижележащим ресурсам. Гипервизор делает то же самое, но вместо процессов он выполняет эту задачу для гостевых операционных систем в целом.

Классификация гипервизоров

Гипервизоры можно поделить на два типа. Гипервизоры первого типа — это те, которые выполняются непосредственно на аппаратной платформе. Гипервизоры второго типа выполняются в контексте другой операционной системы (которая в свою очередь выполняется на аппаратной платформе). Пример гипервизора первого типа KVM, Kernel-based Virtual Machine (сама KVM является гипервизором, основанным на операционной системе). Примеры гипервизоров второго типа — QEMU и WINE.


Составные части гипервизора

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

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

Рисунок 2. Минимальное отображение ресурсов в условном гипервизоре
Минимальное отображение ресурсов в условном гипервизоре

Затем упрощённая архитектура гипервизора реализует «клей», позволяющий гостевой ОС выполняться совместно с ведущей. Эта функциональность требует нескольких специфичных элементов, показанных на рисунке 3. Во-первых, обычно имеется слой гипервызова, позволяющий гостевым ОС обращаться к основной операционной системе, подобно тому как системные вызовы связывают приложения пользователя с функциями ядра. Ввод/вывод может быть виртуализован в ядре либо осуществляться с помощью кода гостевой операционной системы. Прерывания могут обрабатываться гипервизором, работающим с реальными прерываниями, либо перенаправляться как прерывания от виртуальных устройств к гостевой системе. Гипервизор также должен обрабатывать ловушки и исключения, которые случаются в гостевой ОС. (Действительно, сбой в гостевой ОС должен остановить только её, но не гипервизор или другие гостевые системы.) Элементом ядра гипервизора является механизм отображения страниц, который отображает аппаратное обеспечение на страницы для конкретной операционной системы (гостевой или гипервизора). И, наконец, необходим высокоуровневый планировщик для передачи управления между гипервизором и гостевыми ОС (и обратно).

Рисунок3. Упрощённая схема гипервизора на базе Linux
Упрощённая схема гипервизора на базе Linux

Гипервизоры, основанные на Linux

В этой статье рассматриваются два основанных на Linux решения гипервизоров. Первый гипервизор, KVM, стал первым модулем гипервизора, вошедшим в ядро Linux. Он реализует полную виртуализацию. Другой, Lguest, — это экспериментальный гипервизор, предоставляющий паравиртуализацию посредством неожиданно небольших изменений.

KVM

KVM — это резидентная инфраструктура виртуализации ядра, работающая в Linux на платформе x86. KVM был первым гипервизором, ставшим частью ванильной ветви ядра Linux (2.6.20). Он был разработан Ави Кивити (Avi Kivity) в стартапе Qumranet, теперь принадлежащем Red Hat.

Этот гипервизор предоставляет виртуализацию платформы x86, в разработке находится портирование на платформы PowerPC® и IA64. Также в KVM недавно была добавлена поддержка симметричной многопроцессорной обработки (SMP) для хозяйской и гостевых систем, и поддерживается функциональность уровня предприятия, такая как live migration (позволяющая перемещать гостевые системы между физическими серверами).

KVM реализован как модуль ядра, позволяющий Linux становиться гипервизором просто путём загрузки этого модуля. KVM предоставляет полную виртуализацию на аппаратных платформах, имеющих поддержку инструкций гипервизора (таких как Intel® Virtualization Technology [Intel VT] или AMD Virtualization [AMD-V]). KVM также поддерживает паравиртуализированные гостевые системы, включая Linux и Windows®.

Эта технология реализована в виде двух компонент. Первая — это загружаемый модуль KVM, который, взаимодействуя с ядром Linux, предоставляет управление виртуализированным аппаратным обеспечением, реализуя его возможности посредством файловой системы /proc (см. рис. 4). Второй компонент предоставляет эмуляцию платформы ПК, что достигается при помощи модифицированной версии QEMU. QEMU выполняется как пользовательский процесс, прибегая к помощи ядра для обеспечения запросов гостевой операционной системы.

Рисунок 4. Высокоуровневый вид гипервизора KVM
Высокоуровневый вид гипервизора KVM

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

Каждая гостевая операционная система отображается при помощи устройства /dev/kvm и имеет своё собственное виртуальное адресное пространство, которое отображается в физическое адресное пространство домашней ОС. Как уже упоминалось ранее, для предоставления полной виртуализации KVM использует поддержку нижележащего аппаратного обеспечения. Запросы ввода/вывода отображаются ядром на процесс, выполняемый QEMU на ведущей ОС (гипервизоре).

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

Lguest (ранее — lhype)

Гипервизор Lguest, созданный Расти Расселом (Rusty Russell), австралийским разработчиком из IBM, использует совершенно другой подход к виртуализации. Вместо полной поддержки виртуализации, позволяющей запускать любую операционную систему, Lguest предлагает легковесную паравиртуализацию для гостевых систем Linux x86, специально приспособленных для этого (так называемая виртуализация Linux-на-Linux). Это означает, что гостевая ОС знает, что она выполняется на виртуальной машине, что позволяет улучшить производительность. Впрочем, Lguest имеет приемлемую производительность без привлечения QEMU для обеспечения платформенной виртуализации (как это имеет место в случае KVM). Применяемый в Lguest подход также упрощает общие требования к коду, так как необходим лишь тонкий слой как в гостевой, так и в ведущей ОС. Рассмотрим эти изменения и сделаем обзор высокоуровневой архитектуры среды Lguest.

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

Рисунок 5. Представление подхода Lguest к паравиртуализации x86
Представление подхода Lguest к паравиртуализации x86

Со стороны ядра всё реализовано в виде загружаемого модуля с названием lg.ko. Этот модуль содержит интерфейс гостевой ОС к ядру ведущей системы. Первым элементом является переключатель, обеспечивающий способ, которым гостевые системы переключают контекст для выполнения. Код файловой системы /proc (для /dev/lguest) также реализован в этом модуле и предоставляет интерфейсы из пространства пользователя к ядру и драйверам? включая гипервызовы. Есть код, обеспечивающий отображение страниц с использованием теневых таблиц переадресации страниц и управление сегментами x86.

И, наконец, поддиректория Documentation в исходных текстах ядра содержит утилиту запуска (lguest) для запуска нового экземпляра гостевой системы. Этот файл выполняет двойную задачу: он является одновременно утилитой и частью документации.

Lguest находится в основной ветке ядра с версии 2.6.23 (октябрь 2007 г.). Разработка и поддержка осуществлялась Расти Расселом. Исходный текст содержит около 5000 строк кода, включая утилиты пространства пользователя. Хотя (как говорят) он довольно прост, Lguest предоставляет истинную паравиртуализацию. Однако такая простота порождает свои ограничения. Например, Lguest виртуализирует только системы, в которые встроена его поддержка и в настоящее время только для архитектуры x86. Однако даже с такими ограничениями Lguest предоставляет интересный подход к виртуализации, доступный любому, кто захочет изучить написанный Расти код.


Преимущества гипервизоров, основанных на Linux

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

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

Другое заслуживающее внимания преимущество использования Linux в качестве платформы заключается в получении всех выгод от использования этой платформы в дополнение к возможностям гипервизора. Таким образом, кроме выполнения множества гостевых ОС на Linux-гипервизоре, можно также запускать обычные приложения на этом уровне. В итоге вместо непроверенной новой платформы с новыми программными интерфейсами (API) имеется стандартная платформа Linux для разработки приложений (если необходимы приложения для наблюдения и для управления гипервизором). Наряду с гостевыми ОС доступны стандартные протоколы (TCP/IP) и другие полезные приложения (веб-серверы). Вспомним рисунок 4 из описания KVM: в дополнение к гостевым ОС имеется QEMU, модифицированный для использования с KVM. Это обычный процесс, и он иллюстрирует возможности Linux, используемого в качестве гипервизора. KVM применяет QEMU для виртуализации платформы, и с Linux в качестве гипервизора он одновременно реализует идею выполнения гостевых ОС согласованно с остальными приложениями Linux.


Заключение

Развитие гипервизоров сделало очевидным одно: гипервизоры являются новым полем боя. Тридцать лет назад операционная система была основным средством управления и управляла небольшим количеством игроков. Сегодня это поле битвы сдвинулось в сторону гипервизоров, и Linux безусловно занимает здесь важное место.

Однако Linux в качестве гипервизора небезупречен; в основном его критикуют за слишком большой объём. Точно такие аргументы приводились несколько лет назад по поводу встраиваемых устройств. Сегодня Linux является мощной силой в области встраиваемых ОС, и никто не смог пока его остановить. Однако нельзя сказать, что эта критика совершенно беспочвенна. Возможно, некоторые изменения в архитектуре способны сделать эту прекрасную, повсеместно распространённую систему ещё более гибкой.

Ресурсы

Научиться

  • Оригинал статьи Anatomy of a Linux hypervisor (EN).
  • EPA Report on Server and Data Center Energy Efficiency: отличный обзор того, на что тратится электроэнергия в компьютерных центрах. Из этого обзора становится очевидным, что виртуализация играет большую роль в улучшении эффективности расхода электроэнергии компьютерными центрами путём объединения серверов.(EN)
  • Kernel-based Virtualization Machine— одно из решений для гипервизоров, основанных на Linux. На сайте проекта можно узнать больше о KVM. Также там имеется интересный технический документ с описанием идей, лежащих в основе этой технологии. KVM продолжает развиваться, и посетители сайта могут узнать о прошедших и запланированных событиях на последнем Форуме KVM 2008. Также там есть список поддерживаемых гостевых ОС и страница с описанием прогресса в обеспечении их поддержки .(EN)
  • Виртуализация многолика. Эта работа посвящена исследованиям двух решений, охватывающих область полной виртуализации и паравиртуализации. О других возможных вариантах можно узнать из работы "Virtual Linux" (developerWorks, декабрь 2006 г.). Углубиться в подробности о KVM и QEMU можно в статьях "Discover the Linux Kernel Virtual Machine" (developerWorks, апрель 2007 г.) и "System emulation with QEMU" (developerWorks, сентябрь 2007 г.)
  • В этой работе упоминались некоторые другие интересные темы, относящиеся к Linux, такие как загружаемые модули ядра и файловая система /proc. В работах "Anatomy of Linux loadable kernel modules" (developerWorks, июль 2008 г.) и "Access the Linux kernel using the /proc filesystem" (developerWorks, март 2006 г.) можно узнать об этом подробнее.(EN)
  • Lguest (простой гипервизор для платформы x68) демонстрирует способ построения несложного гипервизора для платформы x86 при помощи ядра Linux с минимальным количеством изменений. Сайт проекта предоставляет самые последние подробности и документацию для изучения.
  • В данной работе рассматривается высокоуровневая теория, на которой строятся основанные на Linux гипервизоры, а на странице Enterprise Linux Tips можно узнать об инсталляции и использовании Lguest.(EN)
  • В разделе Linux на сайте developerWorks можно найти дополнительные ресурсы для Linux-разработчиков, а также просмотреть наши наиболее популярные статьи и учебные материалы. (EN)
  • Технические мероприятия и Web-трансляции developerWorks: будьте в курсе новостей. (EN)

Получить продукты и технологии

  • Ознакомительные версии ПО IBM: используйте в вашем следующем проекте программное обеспечение, которое можно загрузить непосредственно с сайта developerWorks.

Обсудить

  • Примите участие в деятельности сообщества Мое сообщество на developerWorks; с помощью своего персонального профиля и собственной домашней страницы вы можете настроить developerWorks в соответствии со своими интересами и взаимодействовать с другими пользователями developerWorks.(EN)

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Linux, Rational
ArticleID=600951
ArticleTitle=Анатомия гипервизора Linux
publish-date=12142010