ИГОРЬ ШТОМПЕЛЬ, инженер, системный администратор. Сфера профессиональных интересов – GNU/Linux, функциональное программирование
Продукты для виртуализации
Возможности свободного программного обеспечения
С каждым годом расширяется применение виртуализации вычислительных процессов. Появляются новые технологии. А на что способно свободное программное обеспечение в данной области?
Ключевые термины и типы виртуализации
Итак, виртуализация – это абстракция каких-либо ресурсов в вычислительных целях (например, запуск одной операционной системы из-под другой). С данным определением тесно связаны такие понятия, как хост, гостевая операционная система, гипервизор.
Хост – операционная система, в которой осуществляется виртуализация, а гостевая операционная система – это та, которая виртуализируется. Например, на компьютере установлены операционная система gNewSense GNU/Linux и программное обеспечение Virtualbox OSE (об этой версии подробнее далее), в котором запущен Trisquel GNU/Linux. Так вот, gNewSense в данном случае – хост, Trisquel – гостевая операционная система.
Гипервизор – это программное обеспечение, которое позволяет гостевой операционной системе взаимодействовать с физическими (не эмулируемыми, которые использует хост) аппаратными средствами.
В разных источниках выделяются разные типы виртуализации. Например, в Википедии: виртуализация серверов, аппаратная виртуализация, виртуализация уровня ОС и паравиртуализация, виртуализация ресурсов и виртуализация приложений. А Тим Джонс, инженер-консультант Emulex (http://www.emulex.com), в своей статье «Виртуальный Linux» выделил следующие типы – эмуляция оборудования, полная виртуализация, паравиртуализация и виртуализация уровня операционной системы [1].
Рассмотрим, что представляют собой выделенные типы. Итак, эмуляция оборудования – это процесс представления программой виртуализации того или иного программного обеспечения как аппаратного составляющего для гостевой операционной системы. Таким образом, с помощью программы виртуализации, предоставляется возможность работы с виртуальным (эмулирующим работу оригинального) оборудованием.
Например как частный случай выбор объема оперативной памяти на этапе создания гостевой системы. Среди свободных программ подобного типа можно выделить Bochs (http://bochs.sourceforge.net), QEMU (http://www.qemu.org) и FAUmachine (http://www3.informatik.uni-erlangen.de/Research/FAUmachine).
Полная виртуализация отличается от эмуляции оборудования тем, что между гостевой операционной системой и аппаратной частью появляется «посредник». Этот «посредник» – гипервизор, который обеспечивает взаимодействие последних. В мире свободных программ данной функциональностью обладает VirtualBox OSE (http://www.virtualbox.org/wiki/Editions).
Паравиртуализация имеет сходство с полной виртуализацией. При данном подходе гипервизор ответственен за разделение доступа к основным аппаратным средствам. Гостевой операционной системе через гипервизор доступен специализированный API. Последний позволяет «гостю» взаимодействовать с аппаратным обеспечением. Поскольку код, необходимый для осуществления виртуализации, добавлен в ядро Linux (библиотеки и приложения user-space не модифицируются), то отпадает необходимость в дополнительной перекомпиляции. Последнее может иметь место, например, при использовании метода полной виртуализации. Примером свободного программного обеспечения для реализации данного метода может служить Xen (http://www.cl.cam.ac.uk/research/srg/netos/xen).
Эмулятор Bochs
Основателем проекта, как и одним из разработчиков, до сих пор (помимо него изменения в проект вносили несколько сотен человек) является Кевин Лоутон (Kevin Lawton, http://www.linkedin.com/in/kevinlawton). Сегодня у проекта шесть мейнтейнеров.
В основе названия программы лежит игра слов – фонетически оно произноситься так же, как английское слово «box» (технические специалисты любят называть свои машины – «box» (например, «Linux box»), вот и получается, что Bochs эмулирует «box» внутри «box»). Кстати, это отражает и логотип проекта.
Программа (лицензия GNU LGPL) представляет собой эмулятор аппаратного обеспечения архитектуры IA-32 (x86), написанный на языке программирования C++. Bochs доступен для таких операционных систем, как GNU/Linux, BSD-системы, Windows 95/98/NT/2000/XP/Vista и DOS. Среди поддерживаемых платформ – x86 (эмуляция процессоров – 386, 486, Pentium/PentiumII/PentiumIII/Pentium4, x86-64 с поддержкой инструкций MMX, SSEx и 3DNow!), Alpha, Sun и MIPS. В программе возможна работа со следующими гостевыми системами: GNU/Linux, BSD-системы, Windows и DOS (см. рис. 1).
Рисунок 1. Настройка Bochs
Bochs поддерживает эмуляцию CD-ROM для операционных систем Linux, Windows, BeOS и большинства BSD-систем. В программе доступна эмуляция Sound Blaster 16 (SB16) – MPU401 (MIDI-процессор) с поддержкой режимов UART (Universal Asynchronous Receiver/Transmitter, Универсальный асинхронный приемопередатчик – перевод данных в/из последовательной в/из параллельную форму). Эмулятор также обладает поддержкой сетевых карт NE2000.
QEMU
Рассмотрим еще один эмулятор аппаратного обеспечения. Проект QEMU был зарегистрирован на http://savannah.nongnu.org 9 апреля 2003 года. Официальный сайт, посвященный QEMU – http://www.qemu.org, был запущен в 2005 году. Сегодня активных участников проекта насчитается 11 человек, а права на торговую марку принадлежат активному разработчику с первых дней проекта Фабрису Беллару (Fabrice Bellard, http://bellard.org) – ведущему разработчику Ffmpeg (создал библиотеку libavcodec). Любопытно, что именно он является автором формулы Беллара, которая позволяет наиболее быстро вычислить единичный разряд числа Пи в двоичном представлении (http://bellard.org/pi).
QEMU в качестве хост-платформ поддерживает x86, x86_64 и PowerPC, а в тестовом режиме – Sparc32 и ARM [2]. Имеет два режима работы. Первый – это «пользовательская эмуляция» (User emulation), при которой возможен запуск бинарных файлов для различных платформ. Второй – это «полная эмуляция» (System emulation), при которой эмулируются платформа полностью (похоже на Bochs) и соответственно операционные системы. Например, на рис. 2 показан запуск gNewSense GNU/Linux 2.3 Deltah с использованием одной из графических оболочек (о них чуть позже), созданных для данного эмулятора, – QtEmu и QEMU.
Рисунок 2. Запуск gNewSense с использованием QEMU
В качестве гостевых платформ для «пользовательской эмуляции» доступны x86, ARM, SPARC, MIPS, m68k (Coldfire) и CRIS. Кроме того, x86_64, PowerPC, PowerPC64, SH-4 и MicroBlaze поддерживаются в тестовом режиме, а поддержка SPARC64 и Alpha находится в стадии разработки. Например, QEMU позволяет запустить на x86 бинарный файл для ARM в Linux (т.е. ПО, включая и операционные системы, разработанное для одной платформы в другой) путем реализованной в нем технологии динамического транслятора (подробнее можно прочитать в статье Беллара, описывающей его внутреннее устройство, – http://www.usenix.org/publications/library/proceedings/usenix05/tech/freenix/full_papers/bellard/bellard.pdf). Помимо динамического транслятора для усовершенствования эмуляции в QEMU был реализован специальный акселератор. Последний позволяет выполнить эмулируемый код на процессоре хоста, что значительно повышает эффективность и скорость эмуляции.
Что касается «полной эмуляции», то доступны x86, x86_64, ARM, SPARC, MIPS, MIPS64, m68k (Coldfire); PowerPC, CRIS и MicroBlaze в тестовом режиме; SPARC64, PowerPC64, SH-4 и Alpha – в стадии разработки. При работе с данным эмулятором гостевыми системами могут являться GNU/Linux, FreeBSD, Mac OS X, Windows, BeOS.
Тонкая конфигурация QEMU производится из консоли. Но в то же время для работы с эмулятором доступны различные графические интерфейсы: QtEmu, Qemulator, Qemu Launcher.
FAUmachine
С проектом QEMU связан проект FAUmachine, который создан в Университете Эрланген-Нюрнберг имени Фридриха-Александра на отделении компьютерных наук технического факультета. Официальная страница проекта доступна по адресу http://www3.informatik.uni-erlangen.de/Research/FAUmachine.
FAUmachine – это виртуальная машина, которая запускается как обыкновенный пользовательский процесс (в пространстве пользователя) и работает без привилегий суперпользователя. Процессор FAUmachine основан на эмуляторе QEMU, что, как было отмечено выше, и связывает эти два проекта. Начиная с релиза 20090922, добавлен дополнительный процессор, который использует KVM-модуль ядра Linux для выполнения кода гостевых систем на процессоре хоста вместо эмуляции.
FAUmachine поддерживает эмуляцию следующих аппаратных компонентов: процессоров x86 и x86_64; контроллеров IDE и SCSI; сетевых адаптеров NE2000 и Intel eepro100; звуковой карты SB16; общего VGA-адаптера и графического адаптера Cirrus GD5446; 24 и 48 контактных PCI-карт ввода-вывода. А из периферии – сетевых концентраторов и маршрутизаторов; модемов.
Кроме того, виртуальная машина, как показано на рис. 3, обладает возможностью делать скриншоты эмулируемых систем и снимать видео их работы. В рамках проекта разработан экспериментальный интерпретатор и компилятор языка VHDL – fauhdlc, доступный по адресу – http://www3.informatik.uni-erlangen.de/Research/fauhdlc. Например, с помощью этого языка, по словам разработчиков, можно создавать скрипты, автоматизирующие инсталляцию дистрибутивов Linux и других операционных систем с использованием дисковода компакт-дисков или файлов-образов.
Рисунок 3. Интерфейс FAUmachine наделен кнопками Screenshot и Record
VirtualBox OSE (Open Source Edition)
Об этом программном продукте в мартовском номере «СА» за 2007 год была размещена статья Валентина Синицына «VirtualBox – виртуализация под GPL». Сейчас отметим изменения, которые претерпел продукт за это время.
Список функций, доступных только в закрытой версии VirtualBox, сократился и включает в себя следующее: сервер удаленного доступа к гостевой машине (Remote Display Protocol Server), поддержка USB (в том числе возможность предоставить доступ удаленным машинам к локальным USB-устройствам – USB over RDP). Основная проблема в том, что эти функции востребованы как в корпоративной среде, так и домашними пользователями (последним, конечно же, интересна в первую очередь поддержка USB, которая значительно облегчает вывод данных из виртуальной машины).
Таким образом, в VirtualBox OSE появилась возможность работать с разделяемыми папками (Shared Folders – но при попытке установки для их использования «Дополнений гостевой ОС» программа предлагает произвести загрузку дополнительного файла в формате .iso, лицензионное соглашение для которого мне обнаружить не удалось как на сайте www.virtualbox.org, так в самом файле-образе) и инициатором iSCSI. Последний необходим, чтобы иметь возможность клиентского доступа к интерфейсу SCSI. Разработчики по-прежнему заверяют, что данный список функций будет меняться с течением времени и некоторые станут доступны в свободной версии программы [3].
Гипервизор Xen
Xen – это гипервизор для реализации паравиртуализации. Его разработка была начата исследовательской группой из компьютерной лаборатории (http://www.cl.cam.ac.uk) Кембриджского университета (http://www.cam.ac.uk) как часть проекта Xenoservers (http://www.cl.cam.ac.uk/research/srg/netos/xeno/index.html), финансируемого британским правительством в лице EPSRC (http://www.epsrc.ac.uk/default.htm). Релиз 1.0 был выпущен в октябре 2003 года. В настоящее время над проектом также работают в RedHat, IBM, HP, XenSource, Intel, AMD, Novell.
Основные сферы его применения следующие. Запуск нескольких изолированных (большой плюс в случае сбоя одного из них) друг от друга виртуальных серверов на одном физическом хосте; достижение аппаратной независимости (перенос операционных систем и приложений при переходе на новое оборудование); тестирование различных версий операционных систем, в том числе и параллельно; тестирование и отладка ядра операционной системы (не требуется отдельная машина); достижение большей гибкости кластерных вычислений (например, лучший контроль и изоляция за счет «живой миграции» машин для балансировки нагрузки кластера); необходимость в широкой аппаратной поддержке таких операционных систем, как GNU/Linux.
Что касается аппаратной поддержки, то Xen работает на архитектуре x86 (процессоры P6 и новее – Pentium Pro, Celeron, Pentium II, Pentium III, Pentium IV, Xeon, Athlon и Duron от AMD). Полный список поддерживаемых процессоров доступен по адресу http://wiki.xensource.com/xenwiki/HVM_Compatible_Processors. Имеется возможность работы с многопроцессорными машинами. Кроме того, есть поддержка Hyper-Threading (SMT) и портов на IA64 и PowerPC.
32-битный гипервизор Xen по умолчанию предоставляет возможность работы с Intel's Physical Addressing Extensions (PAE), который обеспечивает адресацию оперативной памяти до 64 Гб (архитектура x86). Без использования PAE адресация гораздо меньше – 4 Гб. Адресация оперативной памяти до 1 Тб доступна для платформ – Intel EM64T и AMD Opteron.
Xen поддерживает работу с таким операционными системами, как GNU/Linux, NetBSD, FreeBSD, Solaris. Если используется процессор без поддержки аппаратной виртуализации, то потребуется модификация ее ядра для использования Xen. При использовании процессоров с поддержкой технологий Intel VT (Intel(R) Virtualization Technology) или AMD SVM (Secure Virtual Machine) изменение ядра гостевой операционной системы не требуется.
KVM или Linux в роли гипервизора
Впервые KVM (Kernel-based Virtual Machine) была включена в ядро Linux версии 2.6.20. KVM – это технология, которая позволяет превратить ядро Linux в гипервизор путем инсталляции модуля ядра kvm.ko. Последний имеет специальные файлы поддержки процессора (kvm-intel.ko – для Intel и kvm-amd.ko – для AMD), другими он использует расширения HVM (Hardware Virtual Machine) процессоров (Intel VT и AMD SVM).
Основная особенность виртуальной машины ядра заключается в том, что она, превращая ядро в гипервизор, обеспечивая высокую скорость виртуализации, позволяет запускать другие операционные системы (например, другие ядра Linux), которые будут иметь изолированное аппаратное обеспечение (сетевую карту, графический адаптер и другое) [4]. Список поддерживаемых гостевых операционных систем обширен. Ознакомиться с ним можно по адресу: http://www.linux-kvm.org/page/Guest_Support_Status. Он включает дистрибутивы GNU/Linux, операционные системы семейства BSD, UNIX (Darwin, MINIX, GNU/Hurd), Solaris/OpenSolaris, Windows и ряд других.
KVM тесно связана с QEMU. QEMU осуществляет операции ввода-вывода с «гостем». Так, все запросы на ввод-вывод со стороны последнего перехватываются и направляются в пространство пользователя для эмулирования процессом QEMU (последний в свою очередь незначительно для этого модифицирован) [5].
***
В статье было рассмотрено свободное программное обеспечение, используемое для виртуализации. Из отмеченных типов последней, наиболее проблемной областью, применительно как к корпоративным требованиям, так и требованиям домашних пользователей, является полная виртуализация и VirtualBox OSE. Кроме того, QEMU способствовал развитию ряда из рассмотренных проектов, а технология KVM стоит особняком и предоставляет более гибкие возможности для осуществления виртуализации.
Стоит отметить, что данная статья не претендует на полноту охвата всех доступных сегодня продуктов для реализации виртуализации – внимание было сконцентрировано только на свободных решениях.
- http://www.ibm.com/developerworks/ru/library/l-linuxvirt/index.html.
- http://www.qemu.org/status.html.
- http://www.virtualbox.org/wiki/Editions.
- http://www.linux-kvm.org/page/Main_Page.
- http://www.ibm.com/developerworks/ru/library/l-linux-kvm.