Технология виртуальных машин Новодворский Е.Н. ПИЯФ РАН Виртуальная машина Виртуальная машина — программная или аппаратная среда, исполняющая некоторый код (например, машинный код реального процессора), или спецификация системы (например: «виртуальная машина языка программирования Си»). На виртуальную машину, также как и на реальный компьютер, можно устанавливать операционную систему, есть BIOS, оперативная память, жёсткий диск (выделенное место на жёстком диске реального компьютера), могут эмулироваться периферийные устройства. На одном компьютере может функционировать несколько виртуальных машин. Виртуальная машина Виртуальные машины могут использоваться: • Для защиты информации и ограничения возможностей процессов • Для исследования производительности ПО или новой компьютерной архитектуры. • Для эмуляции различных архитектур (например, эмулятор игровой приставки). • С целью оптимизации использования ресурсов мощных компьютеров (например: IBM eServer). • Для моделирования систем с клиент-серверной архитектурой на одной ЭВМ (эмуляция компьютерной сети с помощью нескольких виртуальных машин). • Для упрощения управления кластерами — виртуальные машины могут мигрировать с одной физической машины на другую во время работы. Виртуальная машина Идея виртуальной машины (Virtual Machine, VM) состоит в независимой работе множества копий операционной системы ( …Linux) на одном компьютере. VM можно запускать отдельно или вместе на одной машине. Цель заключается в максимальном использовании вычислительного потенциала аппаратного обеспечения. Множество клиентов имеют множество распределенных серверов, выполняющих разные задачи. Объединение серверов на базе виртуальных машин приводит к сокращению затрат на управление серверами. Технология VM позволяет распределять функции между машинами, разделив решения о приобретении программного обеспечения и операционных систем, с одной стороны, и аппаратных средств, с другой. Такая технология не привязана к платформе, давая возможность решать ряд задач на одной машине. Как работает виртуализация В основе реализации виртуализации лежит машина, которую надо виртуализировать. Эта машина может поддерживать или не поддерживать виртуализацию. Если нет - требуется поддержка на уровне, называемом гипервизор. Гипервизор (или VMM) служит как некая абстракция между аппаратной платформой и операционной системой. В некоторых случаях гипервизор является операционной системой; в этом случае он называется базовой операционной системой. Уровневая модель виртуализации Над гипервизором находятся гостевые операционные системы, также называемые виртуальными машинами (VM). Эти виртуальные машины представляют собой изолированные операционные системы, которые рассматривают базовую аппаратуру как принадлежащую им. На самом деле эту иллюзию создает у них гипервизор. Почему важна виртуализация? Есть множество причин использования виртуализации. Большинство из них сводится к тому, что назывют серверной консолидацией. Т.е. если можно виртуализировать множество недостаточно использованных систем на отдельном сервере, то удастся сэкономить на мощности, месте, охлаждении и администрировании из-за наличия меньшего количества серверов. Поскольку бывает трудно определить нагрузку на сервер, процедура виртуализации поддерживает так называемую живую миграцию (live migration). Живая миграция позволяет операционной системе, которая перемещается на новый сервер, и ее приложениям сбалансировать нагрузку на доступном оборудовании. Виртуализация также важна для разработчиков. Ядро Linux занимает единственное адресное пространство, что означает, что отказ ядра или любого драйвера приводит к аварии всей операционной системы. Виртуализация означает, что можно управлять несколькими операционными системами, и если одна из них терпит крах из-за ошибки, то гипервизор и другие операционные системы продолжают работать. Это может сделать отладку ядра подобной отладке пользовательских приложений. Типы виртуализации Три самых общих метода виртуализации. Их относительные преимущества и недостатки. Эмуляция оборудования В этом методе VM аппаратных средств создается на хост-системе, чтобы эмулировать интересующее оборудование. Одно из наиболее интересных использований эмуляции оборудования – это совместное развитие встроенного программного обеспечения и аппаратных средств.Не дожидаясь момента, когда реальные аппаратные средства будут в наличии, разработчики встроенного программного обеспечения могут использовать целевое виртуальное оборудование VM, чтобы прояснить многие аспекты фактического кода путем моделирования. Эмуляция аппаратных средств имеет свои преимущества. Например, используя эмуляцию аппаратных средств, можно управлять неизмененной операционной системой, предназначенной для PowerPC® на системе с ARM процессором. Можно даже управлять многочисленными виртуальными машинами, каждая из которых будет моделировать другой процессор. Эмуляция оборудования использует VM, чтобы моделировать необходимые аппаратные средства Главная проблема при эмуляции аппаратных средств состоит в том, что процесс может стать очень медленным. Поскольку каждая команда должна моделироваться на основных аппаратных средствах, замедление в 100 раз является обычным. Для высокоточных эмуляций, которые включают точность цикла, моделируемые каналы центрального процессора и политику кэширования, фактическая скорость может быть в 1000 раз меньше. Полная виртуализация Эта модель использует виртуальную машину, которая осуществляет связь между гостевой операционной системой и родными аппаратными средствами. "Посредничать" здесь является ключевым словом, поскольку VMM осуществляет посредничество между гостевой операционной системой и собственно оборудованием. Внутри гипервизора должна быть установлена и настроена определенная защита, потому что основные аппаратные средства не принадлежат операционной системе, а разделяются гипервизором. При полной виртуализации существует прослойка между виртуализируемой операционной системой и аппаратурой как способ осуществления арбитража доступа. Эта прослойка называется гипервизор или монитор виртуальной машины (VMM). Полная виртуализация использует гипервизор, чтобы разделять основные аппаратные средства Полная виртуализация работает быстрее, чем эмуляция оборудования, но производительность меньше, чем у просто оборудования из-за посредничества гипервизора. Наибольшее преимущество полной виртуализации состоит в том, что в операционную систему не вносится изменений. Единственное ограничение состоит в том, что операционная система должна поддерживать основные аппаратные средства (например, PowerPC). Паравиртуализация Как альтернатива полной виртуализации была разработана технология паравиртуализации, которая изменяла гостевую ОС таким образом, чтобы исключить появление «плохих» инструкций. Вместо этих инструкций выполняются так называемые гипер-вызовы (hypercalls) на обработку гипервизором. Модификации подвергается только ядро ОС, но не библиотеки и приложения уровня пользователя. Гостевая ОС общается с гипервизором на более высоком уровне. Гипервизор предоставляет гостевой ОС специальный API, с которым она и взаимодействует вместо того, чтобы обращаться напрямую к таким ресурсам, как таблица страниц памяти. Гипервизор работает в более согласованном режиме потому, что каждая гостевая операционная система осведомлена о том, что она работает виртуально, поэтому каждая из них работает совместно с гипервизором, для того чтобы виртуализировать базовую аппаратуру. Паравиртуализация разделяет процесс с гостевой операционной системой Паравиртуализация Примером свободно распространяемой реализации технологии паравиртуализации может служить Xen. Прежде чем операционная система сможет работать в качестве виртуального сервера в гипервизоре Xen, в нее необходимо внести определенные изменения на уровне ядра. Благодаря этому Xen прекрасно работает с BSD, Linux, Solaris и другими свободно распространяемыми операционными системами, но не подходит для виртуализации таких операционных систем, как Windows, которые менять нельзя. Преимуществом паравиртуализации является более высокая производительность. Паравиртуализованные серверы, работающие вместе с гипервизором, обеспечивают почти такую же скорость, как невиртуализованные серверы. Такое увеличение производительности стало достаточно весомым аргументом для того, чтобы и Microsoft, и VMware начали разрабатывать в дополнение к своим решениям технологии паравиртуализации. Виртуализация уровня операционной системы Это — встроенная поддержка виртуальных серверов на уровне операционной системы. Этот подход использован в Solaris Containers, а Virtuozzo/OpenVZ делает нечто похожее для ОС Linux. При виртуализации на уровне операционной системы не существует отдельного слоя гипервизора. Вместо этого сама хостовая операционная система отвечает за разделение аппаратных ресурсов между несколькими виртуальными серверами и поддержку их независимости друг от друга. В этом случае все виртуальные серверы должны работать в одной и той же операционной системе (хотя каждый экземпляр имеет свои собственные приложения и регистрационные записи пользователей). То, что виртуализация на уровне операционной системы теряет в гибкости, она восполняет за счет производительности, которая близка к производительности невиртуализованных серверов. Кроме того, архитектурой, которая использует одну стандартную ОС для всех виртуальных серверов, намного проще управлять, чем более гетерогенной средой. Виртуализация уровня операционной системы изолирует серверы Виртуализация уровня операционной системы требует внесения изменений в ядро операционной системы, но при этом преимуществом является родная производительность. Виртуализация – резюме 1 Тип виртуализации Преимущества Недостатки Виртуализация операционной системы Максимальная проиводительность и простота Слабая изоляция между ВМ Ограничен выбор операционных систем Паравиртуализация Высокая производительность. Полная изоляция между ВМ Необходима модификация гостевой ОС. Сложность администрирования Полная виртуализация оборудования Просто устанавливать и использовать. Полная изоляция между ВМ Относительно низкая производительность Проекты виртуализации для Linux Bochs и QEMU -- эмуляторы персональных компьютеров, позволяющие операционной системе, такой как Windows или Linux, работать в пространстве пользователя операционной системы Linux. VMware -- популярное коммерческое решение для полной виртуализации, позволяет виртуализировать немодифицированную операционную систему. z/VM -- новейшая операционная система VM для 64-битовой z/архитектуры. z/VM обеспечивает полную виртуализацию вместе с оборудованием и поддержку широкого спектра операционных систем, в том числе и Linux. Xen -- решение для паравиртуализации с открытым исходным кодом, которое требует внесения изменений в гостевую операционную систему, но за счет сотрудничества с гипервизором позволяет достичь производительности, близкой к родной. User-mode Linux -- другое решение для паравиртуализации, которое также обладает открытым исходным кодом. Каждая гостевая операционная система выполняется как процесс в операционной системе хоста. coLinux (Cooperative Linux) -- решение для виртуализации, которое позволяет двум операционным системам сообща разделять доступ к основному оборудованию. Linux-Vserver -- виртуализация уровня операционной системы для систем GNU/Linux, обеспечивающая надежную изоляцию независимых гостевых серверов. OpenVZ -- решение для виртуализации уровня операционной системы, которое поддерживает контрольные точки и перенос работающей системы на другой сервер. Linux KVM -- первая технология виртуализации, которая встроена в основное ядро Linux. При помощи отдельного загружаемого модуля ядро Linux на виртуализируемом оборудовании имеет возможность работать как гипервизор и поддерживать неизмененную гостевую ОС Linux или Windows. Bochs (эмуляция) x86-компьютерный переносимый имитатор, работает на разнообразных платформах, включая x86, PowerPC, Alpha, SPARC и MIPS. Bochs моделирует не только процессор, а весь компьютер, включая периферийные устройства типа клавиатуры, мыши, графическое и видео оборудование, карты сетевого интерфейса (NIC) и так далее. Bochs может быть сконфигурирован как старинный Intel® 386 или его преемники, такие как 486, Pentium, Pentium Pro или 64-битовый. Bochs даже эмулирует дополнительные графические функции, такие как MMX или 3DNow. Используя эмулятор Bochs, можно управлять любым дистрибутивом Linux на Linux, Microsoft® Windows® 95/98/nt/2000 (и многообразием приложений) на Linux и даже операционной системой Berkeley Software Distribution (BSD), FreeBSD, OpenBSD и так далее. QEMU (эмуляция) Похож на Bochs, но имеются и некоторые отличия. QEMU поддерживает два режима работы. режим Полной Эмуляции Системы. Этот режим похож на работу Bochs, где эмулируется персональный компьютер (PC) целиком, вместе с процессором и периферией. Этим способом имитируется множество различных Архитектур процессоров, таких как x86, x86_64, ARM, SPARC, PowerPC и MIPS с разумной скоростью, используя динамический перевод. Этим способом можно эмулировать операционные системы Windows (включая XP) и Linux на Linux, Solaris и FreeBSD. Поддерживается также и множество других комбинаций операционных систем. режим пользовательской эмуляции - осуществим только на Linux. Можно запускать бинарники для разных архитектур. Это позволяет, например, выполнить бинарник для архитектуры MIPS на Linux, запущенном на x86. Другие архитектуры, поддерживаемые при таком режиме, включают ARM, SPARC и PowerPC, хотя большинство еще только разрабатывается. VMware (полная виртуализация) Коммерческое решение для полной виртуализации. Гипервизор находится между гостевой операционной системой и непосредственно оборудованием как слой абстрагирования. Этот слой позволяет любой операционной системе работать на аппаратных средствах, не имея информации о какой-либо другой гостевой операционной системе. VMware также виртуализирует в гипервизоре доступные устройства ввода/вывода и соответствующие драйверы для высокоэффективных устройств. Вся виртуализированная среда сохраняется как файл, и это означает, что полная система (включая гостевую операционную систему, VM и виртуальное оборудование) может быть легко и быстро перенесена на другой сервер для распределения загрузки. z/VM (полная виртуализация) IBM System z™ -- новый брэнд, но еще в 1965 System/360 поддерживала виртуализацию с использованием виртуальных машин. System z сохраняет обратную совместимость со старой Линейкой System/360. z/VM® -- гипервизор операционный системы для System z. В нем -- Программа Контроля (Control Program -- CP), которая обеспечивает виртуализацию физических ресурсов для гостевой операционной системы, включая Linux. Это позволяет множеству процессоров и другим ресурсам виртуализироваться для множества гостевых операционных систем. Виртуализация на уровне операционной системы с использованием z/VM Z/VM может также эмулировать гостевую локальную сеть (LAN) виртуально для гостевых операционных систем, которые хотят общаться друг с другом. Это полностью эмулировано в гипервизоре, поэтому абсолютно безопасно. 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 хоста . Это позволяет многочисленным ядрам Linux (с их собственными пространствами пользователя) работать в контексте одного ядра Linux. Хостинг Linux в UmL В ядре Linux 2.6 UmL находится в основном дереве ядра, но должен быть доступен и перекомпилирован для использования. Эти изменения обеспечивают, кроме всего прочего, устройство виртуализации. Это позволяет гостевым операционным системам разделять доступные физические устройства, такие как блочные устройства (гибкий диск, CD-ROM и файловую систему), консоли, устройства NIC, звуковые аппаратные средства и другие. Так как гостевые ядра запускаются в пространстве приложений, они должны быть специально скомпилированы для такого использования (тем не менее, это могут быть разные версии ядра). Это приводит к так называемому ядру хоста (которое располагается на аппаратных средствах) и гостевому ядру (которое живет в пространстве пользователя ядра хоста). Эти ядра даже могут быть вложенными, позволяя гостевому ядру работать на другом гостевом ядре, которое, в свою очередь, работает на ядре хоста. Linux-VServer (виртуализация уровня операционной системы) Linux-VServer - решение для виртуализации уровня операционной системы. Linux VServer виртуализирует ядро Linux так, чтобы многочисленные окружения пространства пользователя, иначе известные как Virtual Private Servers (VPS), работали независимо друг от друга. Linux-VServer достигает изоляции пользовательских пространств посредством ряда модификаций ядра Linux. Чтобы изолировать индивидуальные пространства пользователя друг от друга, введено понятие контекст - контейнер для процессов данного VPS, такой, что инструменты типа ps знают только о процессах VPS. При начальной загрузке ядро определяет контекст по умолчанию. Также существует контекст для администрирования (чтобы видеть все исполняемые процессы). Чтобы осуществить этот способ виртуализации, изменены ядро и внутренние структуры данных. Linux-VServer также использует chroot, чтобы изолировать корневой каталог для каждого VPS. Сhroot позволяет определить новую корневую директорию, но требуются дополнительные функциональные возможности (названные Chroot Barrier), чтобы VPS не мог выходить из изолированного корневого каталога в родительский каталог. Имея изолированный корневой каталог, каждый VPS имеет свой собственный список пользователей и пароль root’а. Linux-VServer поддерживается как 2.4, так и 2.6 ядрами Linux, а также работает на ряде платформ, включая x86, x86-64, SPARC, MIPS, ARM и PowerPC. OpenVZ (виртуализация уровня операционной системы) OpenVZ похож на Linux-VServer, но имеет некоторые отличия. OpenVZ -- модифицированное ядро, которое поддерживает изолированные пространства пользователя, VPS, с рядом пользовательских инструментов для управления. Например, можно легко создать новый 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 (виртуализация уровня операционной системы) Для управления процессами OpenVZ имеет двухуровневый планировщик центрального процессора. Сначала планировщик определяет, какой из VPS должен получить доступ к центральному процессору. После этого планировщик второго уровня выбирает процесс, следуя стандартным приоритетам Linux. OpenVZ также включает beancounters, который состоит из большого количества параметров, определяющих распределение ресурсов для данного VPS. Это обеспечивает уровень контроля над VPS -- сколько доступно памяти, сколько доступно средств межпроцессного взаимодействия (IPC) и т. д. Особенность OpenVZ - введение контрольных точек (Checkpoint) и перемещению VPS с одного физического сервера на другой. Checkpointing означает, что состояние действующего VPS заморожено и сохранено в файле. Этот файл можно перенести на новый сервер и восстановить, чтобы вернуть VPS в рабочее состояние. OpenVZ поддерживает множество архитектур, включая x86, x86-64 и PowerPC. Поддержка оборудования для полной виртуализации и паравиртуализации В 2005 году Intel разработала аппаратную поддержку виртуализации в своих новых процессорах. Intel VT-x (кодовое название Vanderpool), поддерживается практически всеми (за исключением младших моделей) новыми процессорами Intel семейства Intel Core 2 Duo и процессорами семейства Intel Core 2 Quad. Позднее и AMD реализовала аппаратную поддержку виртуализации в своих процессорах – AMD Pacific. С помощью аппаратной виртуализации возможно получение изолированных гостевых систем, управляемых гипервизором напрямую. Аппаратная поддержка виртуализации теоретически должна повысить производительность виртуальных машин, поскольку в этом случае исключены потери производительности на обслуживание хостовой системы. Эти новые технологии могут использоваться множеством методов виртуализации, включая Xen, VMware, User-mode Linux и других. Поддержка оборудования для полной виртуализации и паравиртуализации Технологии Intel VT-x и AMD Pacific реализованы по-разному, хотя и приводят к единому результату. Фактически в обоих случаях речь идет не о переделке микроархитектуры процессора, а о программных «заплатках», позволяющих скрыть некоторые недостатки архитектуры x86. Обоих случаях аппаратная поддержка виртуализации подразумевает некоторый дополнительный набор инструкций, облегчающих выполнение на операций аппаратном уровне. Это инструкции процессора для предоставления прямого доступа к ресурсам процессора из гостевых систем, то есть инструкции, которые позволяют выполнять привилегированные команды, генерируемые гостевой ОС. Аппаратная поддержка виртуализации на уровне процессора не означает, что теперь можно обойтись без гипервизора. Intel VT Полное название технологии аппаратной поддержки виртуализации для процессоров Intel Virtualization Technology for x86 (VT-x). Одновременно была реализована аппаратная поддержка виртуализации для процессоров семейства Itanium (технология Intel VT-i). В Intel VT-x предусматривается специальный режим работы процессора, называемый режимом выполнения виртуальной машины Virtual Machine eXecution Mode (VMX), для которого используется дополнительный набор инструкций процессора. Intel VT В режиме VMX предусмотрено два типа выполнения программного кода: VMX-root и VMX-non-root. VMX-root выполняется на процессоре практически так же, как и вне режима VMX, за исключением того, что в данном режиме предусмотрены дополнительные наборы инструкций процессора, а также некоторые ограничения на значения, загружаемые в управляющие регистры процессора. Гипервизор, который функционирует в привилегированном режиме (на нулевом уровне), всегда выполняет свой код как VMX-root. VMX-non-root предусмотрен для гостевой операционной системы. Для программного кода VMX-non-root взаимодействие гостевой операционной системы с процессором происходит посредством гипервизора. То есть вместо того, чтобы исполнять некоторые инструкции, в коде VMX-non-root будут осуществляться выход из виртуальной машины и передача управления гипервизору. VMX-режим для кода VMX-non-root не требует каких-либо модификаций гостевой ОС. Intel VT Переключения от VMX-root- к VMX-non-root-коду называются входом в виртуальную машину (VM entry), а обратные переключения выходом из виртуальной машины (VM exit). Сама виртуальная машина описывается структурой VMCS (Virtual Machine Control Structure), представляющая собой небольшой участок оперативной памяти, где хранятся данные, необходимые для запуска гостевой операционной системы, а также данные, требуемые для безопасного выхода из режима работы гостевой ОС, и некоторые настройки, относящиеся к управлению этой виртуальной машиной Всего для режима VMX определено десять новых инструкций: VMXON - команда запуска режима VMX. VMXOFF - выход из него. VMWRITE - команда записи данных в структуру VMCS. VMREAD - чтение данных из VMCS. VMPTRLD - команда выбора виртуальной машины (фактически это указатель на VMCS). VMPTRST - позволяет сохранять указатель на текущую виртуальную машину. VMLAUNCH - служит для запуска выбранной виртуальной машины. VMRESUME - для выхода из нее. VMCLEAR - используется для инициализации пустой структуры VMCS и для перевода выбранной виртуальной машины в «остановленное» состояние. VMCALL - позволяет прервать исполнение кода работающей виртуальной машины. AMD Pacific ТехнологиииAMD и Intel VT несовместимы друг с другом, то есть если софт для виртуализации поддерживает технологию Intel VT, то это не значит, что он будет поддерживать и технологию AMD Pacific. В AMD Pacific также используется гипервизор, который является системным кодом, запускаемым из нулевого уровня и выполняется на более низком уровне, чем само ядро операционной системы. Гипервизор в AMD Pacific выполняет роль ядра некоторой основной операционной системы и только он работает с физическим оборудованием. Все остальные операционные системы являются, с точки зрения гипервизора, гостевыми. То есть в AMD Pacific нет никакого различия между хостовой ОС и гостевыми ОС, как в технологии Intel VT. Все операционные системы считаются гостевыми и для каждой из них гипервизор создает свою виртуальную машину. AMD Pacific Аппаратная поддержка виртуализации в технологии AMD Pacific осуществляется за счет применения - нового режима процессора Guest Mode, - нового набора дополнительных инструкций процессора, - нового режима работы памяти. Гипервизор, используя новые инструкции процессора, * запускает режим процессора Guest Mode, * описывает виртуальные машины с помощью управляющих структур данных - VMCB (Virtual Machine Control Block) - 4-килобайтная страница памяти, где: - отображается состояние регистров гостевого процессора, - определяются события и инструкции, при появлении которых должны генерироваться прерывания и происходить выход из виртуальной машины с передачей управления гипервизору. - описываются значения некоторых контрольных битов. * запускает созданные виртуальные машины и перехватывает, в случае необходимости, предопределенные события. AMD Pacific Всего в технологии AMD Pacific определено пять новых инструкций процессора: VMRUN, VMMCALL VMLOAD VMSAVE SKINIT Команда VMRUN применяется для запуска выбранной виртуальной машины. В качестве единственного аргумента этой команды задается физический адрес VMCВ. Поскольку в структуре VMCВ предопределены события, при которых происходит переключение между виртуальной машиной и гипервизором, эти переключения осуществляются автоматически, что существенно повышает быстродействие системы. В то же время для реализации выхода из виртуальной машины вручную предусмотрена инструкция VMMCALL. VMLOAD и VMSAVE дополняют VMRUN — они используются при переключении с одной виртуальной машины на другую и позволяют сохранять или загружать структуру VMCS, но не всю, а только самое необходимое (сохранение или загрузка состояния процессора). Инструкция SKINIT позволяет начать загрузку процессора в «безопасном режиме», на аппаратном уровне гарантировав соответствие загрузчика указанной в модуле TPM цифровой подписи. AMD Pacific В AMD Pacific имеется новый режим работы памяти, при котором реализуется аппаратная поддержка виртуализации. «Физическая» виртуальная память, видимая гостевыми ОС — это виртуальная память второго уровня. Гипервизор поддерживает «теневые» копии таблиц трансляции адресов виртуальной памяти для каждой виртуальной машины. Гипервизор осуществляет соответствующее отображение в своей теневой таблице, которое указывает на реальный физический адрес. Основная идея аппаратной поддержки виртуализации управления памятью - снять с гипервизора часть нагрузки по поддержке shadow-копий. Аппаратная поддержка виртуализации блока управления памятью реализована в обеих технологиях, но в AMD Pacific она выглядит более логично и обладает более широкими возможностями в сравнении с Intel VT. Linux KVM (Kernel Virtual Machine) Одной из последних новостей в мире Linux стало включение KVM в ядро Linux (2.6.20). KVM -- решение для полной виртуализации, которое является уникальным в том, что превращает ядро Linux в гипервизор, используя модуль ядра. Этот модуль позволяет другой гостевой операционной системе работать в пространстве пользователя ОС Linux хоста. Модуль KVM в ядре показывает виртуализированные аппаратные средства как символьное устройство /dev/kvm. Гостевая операционная система взаимодействует с модулем KVM, используя модифицированный QEMUпроцесс для эмуляции оборудования персонального компьютера. Виртуализация с использованием Kernel Virtual Machine (KVM) Модуль KVM вводит в ядро новый способ исполнения. Обычное ядро поддерживает режим ядра и режим пользователя, а KVM представляет новый гостевой режим для выполнения команд, не связанных с операциями ввода/вывода (I/O), а нормальный пользовательский режим осуществляет ввод/вывод для гостевой ОС. Введение KVM является интересным развитием Linux, поскольку представляет первую технологию виртуализации, включенной в основную ветку ядра Linux. Впервые это было осуществлено в версии 2.6.20, но как модуль может использоваться и в версии 2.6.19. Если его использовать на оборудовании, поддерживающем виртуализацию, то можно запускать гостевые операционные системы Linux (32-х и 64-х бит) и Windows (32-бит). Linux KVM (Kernel Virtual Machine) Когда KVM инсталлирован, можно запустить операционную систему в пространстве пользователей. Каждая гостевая операционная система представляет собой отдельный процесс базовой операционной системы (или гипервизора). В основе схемы виртуализации с KVM лежит аппаратная платформа, которая способна к виртуализации (в настоящее время это Intel VT или AMD-SVM процессор). На «голой» аппаратуре работает гипервизор (ядро Linux с модулем KVM). Этот гипервизор выглядит точно также как стандартное ядро Linux, на котором можно запускать другие приложения. Но это ядро может также поддерживать гостевые операционные системы, загруженные с помощью утилиты kvm. В конечном счете гостевая операционная система может поддерживать те же самые приложения, что и базовая операционная система. Компоненты виртуализации с KVM Память виртуализируется с помощью kvm, система ввода/вывода виртуализируется с помощью слегка модифицированного процесса QEMU (копия которого выполняется с каждым процессом гостевой операционной системы). Linux KVM (Kernel Virtual Machine) KVM оказалась первой внутри ядра, и легко предположить, что вскоре она будет делать успехи в виртуализации серверов. В последнее время другие методы конкурируют за проникновение в ядро (такие как UML и Xen), но поскольку KVM требует так мало изменений и смогла трансформировать стандартное ядро в гипервизор, совершенно понятно, почему выбор был сделан в ее пользу. Другое преимущество KVM состоит в том, что поскольку она сама является частью ядра, она может воспользоваться преимуществами от развития и оптимизации ядра. Это свидетельствует о перспективности этого подхода по сравнению с другими независимыми реализациями гипервизора. Два основных недостатка KVM состоят в том, что она требует - новейших способных к виртуализации процессоров и - запуска процесса QEMU в пользовательском пространстве для обеспечения виртуализации ввода/вывода. Но так или иначе KVM уже в ядре, что является огромным скачком вперед по сравнению с существующими решениями Паравиртуальный монитор XEN Xen обеспечивает: - Производительность виртуальных машин близкую к производительности при непосредственном исполнении на железе; - Возможность живой миграции работающих виртуальных машин между хостами; - Поддержку до 32 виртуальных процессоров на одну гостевую машину с возможностью горячего добавления (hotplug) процессоров; - Поддержку платформ x86/32, x86/32 с PAE, x86/64, IA64, а также частичную поддержку платформ ARM и PPC; - Поддержка аппаратной виртуализации для запуска немодифицированных операционных систем (включая Microsoft Windows); - Отличную поддержку оборудования (поддерживаются практически все драйверы устройств Linux). Паравиртуальный монитор XEN Имеем, например, два кластера, состоящих из следующих элементов (компьютеров): пользовательский интерфейс (UI) позволяет конечному пользователю взаимодействовать с ресурсами Грид, через него пользователь запускает свои задания и получает результаты их выполнения. вычислительная установка (CE) представляет собой грид-интерфейс к локальным вычислительным ресурсам, позволяющим принимать задания, распределять их на выполнение на вычислительные (рабочие) узлы в локальном кластере и возвращать результаты. рабочие узлы (WN) - это компьютеры, на которых непосредственно осуществляются вычисления (для этого на рабочих узлах устанавливается пользовательское ПО). Рабочие узлы располагаются в локальной сети за шлюзом, управляются системой пакетной обработки и доступны в гриде только через СЕ. элементы хранения (SE) предоставляют единообразный интерфейс доступа к устройствам хранения. Данная компонента управляет и большими дисковыми массивами, и системами массовой памяти. Интерфейс SE делает прозрачным доступ к данным как пользователей, так и приложений. элемент мониторинга (MON) - на этом узле запускаются специальные приложения, позволяющие контролировать внутренние ресурсы сайта, и передавать состояние ресурсов во внешние службы мониторинга ресурсов. Паравиртуальный монитор XEN Xen способен поддерживать одновременную работу большого числа виртуальных машин с независимыми операционными системами на одной физической машине (рабочей станции), не затрачивая значительных вычислительных ресурсов. Достигается это за счет применения технологии паравиртуализации (т.е. без использования аппаратных архитектурных расширений виртуализации). NB: в качестве синонима VMM используют термин гипервизор (hypervisor). Гипервизор полностью эмулирует компьютер, но его основное отличие состоит в способности поддерживать выполнение более чем одной операционной системы. На VMM выполняются гостевые операционные системы виртуальных машин, непосредственно поддерживающие работу приложений. Собственная операционная система гипервизора называется «хостовой» (базовой). Паравиртуальный монитор XEN Представляя собой открытую платформу виртуализации для различных архитектур, Xen может быть развернут на хостах с множеством различных Unix-систем. При этом поддерживаются гостевые ОС - Linux-, Windows- и BSD-системы. В этой платформе используются как технологии паравиртуализации для запуска операционных систем, так и технологии аппаратной виртуализации (VT-x и AMD-V) для поддержки немодифицированных версий ОС в виртуальных машинах. Процессоры, поддерживающие аппаратную виртуализацию, имеют дополнительные инструкции для управления виртуальными машинами, а также два режима работы: root-mode и nonroot-mode (привилегированный и непривилегированный). Гипервизор Xen работает в режиме root-mode, напрямую общаясь с аппаратным обеспечением, и управляет гостевыми системами. Платформа Xen поддерживает до 64 процессоров в физической системе. Паравиртуальный монитор XEN Гипервизор Xen перекладывает большинство задач по поддержке аппаратных компонентов на гостевую операционную систему, работающую в виртуальной машине. Сам Xen содержит только код, необходимый для обнаружения и запуска остальных процессоров системы, настройки обработки прерываний и нумерации PCI шины (PCI bus enumeration). Драйверы устройств работают внутри привилегированной операционной системы, а не в самом Xen. Такой подход обеспечивает совместимость с большинством устройств, поддерживаемых Linux. Сборка XenLinux по умолчанию содержит поддержку серверного сетевого и дискового оборудования, но при необходимости можно добавить поддержку других устройств, переконфигурировав Linux-ядро стандартным способом. Для инсталляции модифицированных операционных систем, подготовленных к использованию в паравиртуальной машине Xen, никаких дополнительных требований к аппаратному обеспечению компьютера, на котором будут выполняться виртуальные машины, не предъявляется. Функционирование операционных систем в неизменном виде возможно при использовании процессоров с поддержкой виртуализации. Паравиртуальный монитор XEN Дистрибутив Xen включает три главных компонента: - собственно Xen, - модифицированную систему Linux для работы в гостевом домене Xen, - утилиты для управления Xen-системой. Существует несколько вариантов инсталляции дистрибутива Xen 3.0: - из файлов, в виде откомпилированных пакетов в самом дистрибутиве операционной системы; - из архива бинарных файлов; - из исходных файлов. Архивы с бинарными и исходными файлами Xen находятся в свободном доступе (http://www.xensource.com/downloads/). Паравиртуальный монитор XEN Установка из пакетов дистрибутива операционной системы – наиболее простой способ, не требующий никаких дополнительных знаний и навыков, кроме базовых навыков владения той ОС, на которую происходит установка Xen. Для этого устанавливаются RPM-пакеты (Redhat Package Manager ) с откомпилированным для этой системы ядром, в которое включена поддержка Xen. Пакет сам добавляет все необходимые изменения в систему и модифицирует загрузчик GRUB, добавляя в стартовое меню такой вариант загрузки, в котором автоматически запускается Xen (демон xend). При загрузке этого варианта запускается базовая операционная система, и появляется возможность создания и запуска других операционных систем. При этом, если не стоит задача поставить отличную от поддерживающих Xen операционных систем (RedHat, Novell SUSE, Debian, Fedora Core, Sun Solaris), то для создания такой системы можно воспользоваться встроенными средствами управления гостевыми доменами (например, модуль YAST в дистрибутиве SuSE Linux 10). Паравиртуальный монитор XEN Создание гостевого домена Под «доменом» понимается отдельно работающая на компьютере операционная система. Домен может быть управляющим (dom0) или гостевым (domU). dom0 имеет больше привилегий, чем другие виртуальные машины, работающие под его управлением, и служит для конфигурирования аппаратного обеспечения. В дополнение к своим обычным функциям dom0 управляет созданием новых доменов, поддерживает работу гостевых систем и физических устройств. В dom0 работает «демон» xend - специальная служба, являющаяся центральным пунктом управления всеми ресурсами в гипервизоре Xen. domU - это операционная система, работающая внутри отведенного ей конфигурационным файлом пространства. Каждая гостевая операционная система, установленная впоследствии, требует своего места на жестком диске для создания своей файловой системы, которая будет корневой (root filesystem) для домена domU. Паравиртуальный монитор XEN Пример создания тома с именем vm и размером 20 GB в группе томов xnevg: # lvcreate -L 20g -n vm xnevg создание тома с именем vm и размером 20 GB. # mkfs -t reiserfs /dev/xnevg/vm создаёт файловую систему типа reiser. # mkdir /mount/vm создает директорию - точку монтирования гостевой ОС. # mount -t reiserfs /dev/xnevg/vm /mount/vm монтирует созданную файловую систему . Паравиртуальный монитор XEN Когда файловая система создана, то на неё можно размещать гостевую ОС несколькими способами Инсталляция средствами базовой операционной системы Этот способ является основным для Xen и выполняется с помощью встроенных утилит системы. Паравиртуальный монитор XEN Использование готового образа При создании каждого следующего домена можно взять образ существующего домена за основу и скопировать его в отдел диска, выделенный под новый гостевой домен. Другой вариант - скачать файл с готовым образом гостевого домена из Интернета, где доступно огромное количество образов дисковых разделов, готовых для использования в качестве основных дисковых разделов в пользовательских доменах Xen. В этом случае подготовка дискового раздела сводится к простому cкачиванию файла из сети. После того как образ получен, нужно создать конфигурационный файл домена, в котором следует указать этот образ в качестве дискового раздела. Затем запустить получившийся домен. Как правило, в комплекте с образом уже есть готовый к использованию конфигурационный файл домена. Можно использовать его, но только перед этим проверить и при необходимости изменить пути в именах файлов, в настройках ядра, и параметры домена - память, сетевые интерфейсы и т.д. Этот способ может использоваться как для экспериментов, так и для создания полноценных гостевых доменов. Готовые образы поддаются доработке и расширению. Паравиртуальный монитор XEN Использование диска реальной машины - компьютер с единственной операционной системой. Существующую реальную машину можно запускать в виртуализированной среде Xen: - скопировать образ дискового раздела реальной машины в файл или дисковый раздел Xen-системы или переставить диск из реальной машины в машину с установленной Xenсистемой. После этого следует создать конфигурационный файл домена, в котором указать соответствующие дисковые разделы. При загрузке нового домена нужно использовать не старое ядро системы, а ядро, специально подготовленное для Xen. Поэтому при замене ядра необходимо скопировать модули нового ядра на диск гостевой системы. После завершения создания гостевой операционной системы можно приступить к созданию ее файла конфигурации и запуска. Паравиртуальный монитор XEN Создание файла конфигурации гостевого домена В Xen есть несколько базовых шаблонов: /etc/xen/xmexample1 является простым шаблоном, служащим для описания одной единственной VM. /etc/xen/xmexample2 предназначен для многократного использования на нескольких виртуальных машинах. Для запуска следует скопировать один из этих файлов под новым именем в директорию, в которой будут находиться все конфигурационные файлы. Параметрами, используемыми для загрузки и конфигурации гостевой системы, являются: kernel - путь до ядра, откомпилированного для использования с Xen. name – имя создаваемого виртуального домена. memory - размер выделяемой домену памяти в мегабайтах. root описание реального физического устройства на котором находятся файлы. disk -первым значением задается местонахождение корневого раздела гостевого домена и параметр, являющийся ссылкой на физическое устройство (жесткий диск), Вторым значением является указатель на файл подкачки. dhcp – параметр, определяющий динамическое выделение IP адреса от сервера DHCP. vif – значение задает параметры виртуального сетевого интерфейса. Количество гостевых доменов ограничивается производительностью физической машины, на которую установлен Xen, в основном оперативной памятью и дисковым пространством. Паравиртуальный монитор XEN Загрузка домена Для загрузки домена можно использовать как встроенных менеджеров управления доменов, так и утилиты xm, которая реализует множество команд для управления доменом. Запуск нового домена делается командой xm с опцией create (создает внутри физической машины новый гостевой домен в соответствии с параметрами, заданными в файле конфигурации). Пример: # xm create -c /etc/xen/vm/vm1 где /etc/xen/vm путь к конфигурационному файлу vm1. -c указывает утилите xm необходимость подключиться к консоли домена после его создания, так как рекомендуется отслеживать процесс загрузки домена. В итоге на экране должно появиться приглашение на вход в систему. Localhost login: После входа в систему необходимо настроить сеть. Это можно сделать как стандартными способами, используемыми в Linux системах, например, с помощью утилиты netconfig, которая позволяет задать значение сетевых параметров (например, задать статический IP адрес, адрес шлюза, маску и т.п.). Паравиртуальный монитор XEN или измененив следующие системные файлы: /etc/sysconfig/network задается имя хоста, адрес шлюза и имя домена. NETWORKING=yes HOSTNAME= pps-mon4.keldysh.ru GATEWAY=212.193.97.65 DOMAINNAME=keldysh.ru /etc/resolv.conf search …. .ru nameserver … nameserver … задаются параметры DNS серверов. /etc/sysconfig/network-scripts/ifcfg-eth0 задаются IP адрес, маска сети и адрес шлюза. DEVICE=eth0 ONBOOT=yes BOOTPROTO=static IPADDR=… NETMASK=255.255.255…. GATEWAY=… Паравиртуальный монитор XEN Наблюдение за состоянием виртуальных доменов из управляющего домена dom0 возможно с помощью команды xm list, показывающей информацию о запущенных гостевых доменах (имя домена, выделенный ему объём оперативной памяти, состояние домена (ready/blocked), время работы) # xm list Name Domain-0 vm1 vm3 ID Mem(MiB) VCPUs State Time(s) 0 980 2r 1714.7 1 512 1b 8580.2 2 512 1b 221.9 С помощью других параметров команды xm можно - останавливать, - перегружать виртуальные домены, - управлять количеством памяти, отданной системой каждому из доменов, - останавливать работу домена в любой момент времени и продолжать её из этой точки, - отслеживать загрузку каждого домена. Паравиртуальный монитор XEN Xen - сокращает количество физических серверов, необходимых для работы кластера. - упрощает восстановление их при сбоях системы как из-за отказа оборудования, так и в результате каких-то программных коллизий - позволяет более гибко использовать доступное дисковое пространство. Но: - при сбое в работе управляющего домена следуют отказы всех виртуальных серверов, находящихся под его управлением. - при интенсивном использовании серверов уменьшается срок службы физических дисков, следовательно, управляющий домен следует размещать на отдельном физическом диске. - для использования в качестве гостевых ОС необходимо применять модифицированные версии ОС. Этот недостаток постепенно упраздняется выходом новых версий ОС, где поддержка Xen входит в базовый состав ОС и не требует дополнительных усилий для запуска в качестве гостевого домена. Виртуализация – резюме 2 декомпозиция: компьютерные ресурсы рассматриваются как единый однородный пул, распределяемый между виртуальными машинами; множество приложений и операционных систем могут сосуществовать на одной физической компьютерной системе; изоляция: ВМ полностью изолированы друг от друга. Аварийный отказ одной из них не оказывает никакого влияния на остальные; данные не могут передаваться между ВМ и приложениями, за исключением случая использования общих сетевых соединений со стандартной конфигурацией; инкапсуляция: полная среда виртуальной машины сохраняется в виде одного или нескольких файлов – его (их) просто резервировать, перемещать и копировать; совместимость гарантируется посредством представления виртуальной аппаратуры приложениям и ОС как стандартной. Виртуализация Scientific Linux 5.0 Виртуализация Scientific Linux 5.0 включает - технологию виртуализации для i686 и x86-64 на основе Xen, программную инфраструктуру, необходимую для управления окружением виртуализации. Реализация виртуализации в Scientific Linux 5.0 основана на использовании гипервизора, который позволяет добиться виртуализации с минимальными затратами за счет паравиртуализации. Виртуализация в Scientific Linux 5.0 обеспечивает возможность выполнения немодифицированных операционных систем в полностью виртуализованном режиме на процессорах Intel с AMD AMD-V и с Intel Virtualization Technology. Виртуализация в Scientific Linux 5.0 также включает: Libvirt, библиотеку, обеспечивающую стабильный портативный API для управления виртуальными машинами. Virtual Machine Manager, графическую утилиту для наблюдения и управления виртуальными машинами. Поддержку инсталлятором виртуальных машин. Виртуализация Scientific Linux 5.0 --- проблемы Ошибка при инсталляции виртуализированного гостя: инсталляция паравиртуального гостя на систему с настроенным по умолчанию ethernet-соединением eth1 выдает ошибку No Driver Found error. Чтобы обойти эту проблему установите в качестве ethernet-соединения по умолчанию eth0. Виртуализированная паравиртуальная гостевая инсталляция рушится: попытка установить паравиртуального гостя на системе с настроенным SELinux терпит неудачу. Чтобы обойти эту проблему, прежде чем инсталлировать паравиртуального гостя, нужно отключить SELinux. Ошибка загрузки виртуализированного гостя: при установке полностью виртуализированного гостя, сконфигурированного с vcpus=2, для его загрузки может потребоваться слишком много времени. Чтобы обойти эту проблему, нужно запретить ACPI в процессе загрузки в виртуализированном ядре гостевой системы, установив в grub параметры ядра acpi=strict или acpi=static. X Display Server рушится с виртуализированным ядром: при загрузке в виртуализированное ядро X-сервер рушится при запуске. Чтобы обойти эту проблему, нужно отредактировать /etc/X11/xorg.conf, добавив в раздел ServerLayout следующую строку: Option "Int10Backend" "<mode>" Заменить <mode> на vm86 (по умолчанию при загрузке в обычное ядро Linux) или x86emu (при загрузке в виртуализированное ядро). Это позволит выбрать метод выполнения int10 в ходе исполнения.