Впервые виртуальная машина появилась в 1961 году в виде экстракодов в супервизоре суперкомпьютера Atlas, который был разработан английской компанией Ferranti. В середине 60-х годов она была реализована в проект IBM M44/44X Project и машине IBM 7044. Не прошло и пятидесяти лет, как идея виртуальной машины оказалась активно воспринята ИТ-индустрией. Это очень отрадно: возможно, со временем будут вытащены на свет и другие великолепные идеи, задвинутые на архивные полки в процессе гонки за производительностью.

Во всех русскоязычных словарях слово «виртуальный» единообразно трактуется как «несуществующий, но возможный». Что же до области компьютерных технологий, этому значению не противоречат только словосочетания «виртуальные миры» да «виртуальная реальность»: их действительно нет в природе. Однако в иных случаях подобная трактовка слова выглядит абсурдом. Например, в Большом советском энциклопедическом словаре, изданном двадцать лет назад, «виртуальная память» названа «кажущейся памятью»; но такая память никому не кажется и не мерещится, а функционирует в полном согласии с законами физики.

С подобной нелепостью можно было мириться прежде; теперь же, когда виртуализация становится одним из самых широко употребляемых слов компьютерного лексикона, наступила пора уточнить его оригинальное значение. Первое значение virtual — «пребывание в формально непризнанном состоянии», оказывается, может быть «виртуальным правителем» или «виртуальным диктатором», то есть диктатор есть, но он не легитимен. Второе — быть чем-то, что не имеет убедительных доказательств физического своего существования, например «виртуальный фотон». Третье значение более знакомо, так действительно называют определенный тип компьютерной памяти. Точнее раскрыть смысл слова virtual помогают синонимы из того же словаря Мириам-Вебстер. Среди них: implicit («подразумеваемый, не выраженный явно»), constructive («подразумеваемый, выведенный путем умозаключения») и practical («возможный, осуществимый и даже, как ни странно, реальный»). Близкими по смыслу являются также слова basic («составляющий основу, сущность»), essential («существенный, внутренне присущий») и fundamental («основной, коренной, базисный, главный, существенный»). Антонимом virtual названо всего одно слово actual («фактический, реальный, действующий, в противоположность потенциальному»), а вовсе не real, как то можно было бы предположить. Значение «несуществующий» не названо ни разу.

Напрашивается очевидный вывод: в ряде случаев английское слово virtual нельзя было бы переводить русским словом «виртуальный».

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

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

Начиная с процессора Intel 386, и в персональных компьютерах появились виртуальная память и кэш, что позволило реализовать мультипрограммирование в операционных системах. Действительно, виртуализация памяти не только расширяет доступное адресное пространство, но к тому же является одним из основных механизмов, поддерживающих мультипрограммный режим работы. Она позволяет разделять адресное пространство между одновременно выполняемыми задачами или, наоборот, обеспечивать доступ к одним и тем же физическим адресам из разных программ. В качестве примера совместного использования одних и тех же физических адресов можно привести реализацию оболочки shell в ОС Unix и устройство первой архитектуры UNIBUS в PDP-11, где регистрам тех или иных устройств выделялись фиксированные адреса.

Наиболее часто используемый механизм виртуализации, широко известный со времен PDP-11, — это страничная адресация памяти, которая предполагает, что адрес состоит из двух частей: физического, присваиваемого странице в процессе загрузки в память, и адреса внутри страницы, присваиваемого в процессе компиляции программы. Обычно при компиляции или ассемблировании переменным присваиваются адреса в пределах страницы, называемые смещениями, буквально равные смещениям относительно начала страницы; тогда после загрузки физический адрес складывается из смещения и начального физического адреса страницы. За перевод логических адресов в физические адреса отвечает особое устройство memory management unit (MMU), а также операционная система. Они могут произвольным образом размещать страницы в пределах памяти, при необходимости делать свопинг, обеспечивая постраничный обмен между диском и памятью.

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

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

Следующим шагом в развитии идеи виртуализации стала концепция «виртуальной машины». Она появилась в 1965 году, когда исследователи в корпорации IBM предприняли экспериментальную попытку разделить компьютер на отдельные небольшие части. Это направление исследований привело к созданию многопользовательской операционной среды на машинах IBM System 370 и System 390 и операционной системы VM/ESA, совместно называемых генеалогической линией IBM VM (Virtual Machine). Предельно упрощенно в трактовке IBM виртуальная машина есть не что иное, как реальная машина, с ограниченным доступом к памяти. Реализация VM и сегодня обеспечивает одно из важнейших преимуществ мэйнфремов — деление на разделы. В процессе исполнения приложения VM перехватывает виртуальные команды и отображает их в реальные физические команды; при этом каждая виртуальная команда отображается в одну соответствующую физическую команду. Мозгом архитектуры IBM Virtual Machine является операционная система VM Operating System. Главным достоинством концепции виртуальной машины в представлении IBM является то, что каждый пользователь может выполнять свои программы, хранить данные и даже приводить свою виртуальную машину к краху, не влияя на работу остальных. Таким образом, модель IBM VM не только позволяет распределять ресурсы, но и служит механизмом их защиты.

Одной из наиболее успешных альтернативных реализаций виртуальной машины стала операционная система Unix. В ОС Unix используются независимые процессы, которые тоже можно рассматривать как виртуальные машины. Unix Virtual Machine обладает характеристиками, которые позволяют эмулировать модель IBM Virtual Machine, используя аналогичные оболочки (shell). Эти оболочки можно рассматривать как независимые виртуальные машины, обеспечивающие распределенный доступ к общим ресурсам. Операционная система Unix обеспечивает единообразный доступ пользователям к сервисам, предоставляемым библиотеками. Она строится по многоуровневому принципу, где каждый нижний уровень предоставляет сервисы верхнему.

Сегодня представление о виртуальной машине чаще всего ассоциируется с Java. Однако в Java Virtual Machine (JVM) под виртуальностью понимается совсем не то, о чем говорилось до сих пор. Это всего лишь моделируемая машина; она не имеет ничего общего ни с IBM VM, ни с Unix, ни о каком разбиении на разделы здесь речи не идет. Стоящая перед JVM цель заключается в том, чтобы позволить эмулировать выполнение программного обеспечения на произвольной машине. Эта идея не является радикально новой, однако с появлением Java она приобрела более конкретное звучание. JVM — это некий абстрактный компьютер, реализуемый поверх операционной системы. Для того, чтобы он мог работать, Java-программы компилируются для выполнения не в обычной системе, а в JVM. Для этого у JVM есть собственная система команд, называемая байт-кодами. JVM позволяет ему использовать функции, встроенные в эту машину, а не в реальную операционную систему.

Из этого небольшого исторического экскурса можно сделать вывод о том, что потребность в виртуализации обычно возникает в тех условиях, когда есть необходимость обеспечить надежный и универсальный доступ к разделяемым ресурсам. Это один из самых эффективных механизмов безопасного распределения ресурсов. Нет ничего удивительно в том, что и о виртуализации систем хранения активно заговорили с появлением сетей хранения (storage area network, SAN).

Эти разные виртуализации

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

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

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

  • Виртуализация серверов. С технической точки зрения возможны два типа виртуализации серверов — вертикальная и горизонтальная. Первый тип ближе к традиционной мэйнфреймовской модели; он предполагает сегментирование ресурсов мощных серверов на разделы, поставку вычислительных услуг по требованию, а также динамическое управление ресурсами и нагрузкой. Второй основывается на противоположном по смыслу подходе — на кластеризации мелких серверов. Вертикальную виртуализацию можно реализовать аппаратными средствами; в таком случае разделы можно назвать физическими, и программными на логические разделы. Физические разделы — атрибуты серверов корпоративного класса. Логическое деление (Virtual Partitions, vPars) на разделы поддерживается такими операционными системами, как Solaris, AIX и HP-UX, работающих на RISC-процессорах или на Itanium. На платформе Windows для логического деления на разделы используются продукты ESX Server и GSX Server (VMware) и Virtual Server (Connectix). Горизонтальная виртуализация в основном сводится к созданию больших серверных ферм.
  • Виртуализация сетей. Виртуализация сетей строится на использовании интеллектуальных маршрутизаторов, коммутаторов и другого сетевого оборудования, предназначенного для создания виртуальных локальных сетей (VLAN). В основном виртуализация достигается путем деления реального физического диапазона пропускания на несколько независимых и безопасных друг для друга каналов. Виртуализация сети позволяет целому ряду устройств быть фиксировано подключенными к единой физической цепи, однако определение логической топологии этой сети путем сборки ее логически независимых сегментов может осуществляться динамически. Средствами виртуализации сетевые ресурсы превращаются в единый управляемый пул. Подобный унифицированный подход к созданию сетевых конфигураций упрощает процесс развертывания, повышает безопасность и эффективность контроля. У пользователей появляется возможность реализовывать требуемые сетевые политики и обеспечивать каждому из виртуальных сегментов требуемое качество обслуживания.
  • Виртуализация систем хранения. Объединение в один пул различных систем хранения повышает практически все эксплуатационные характеристики системы в целом, в том числе более высокую готовность, лучшее использование дискового пространства, возможность централизованного управления. В зависимости от используемых технологий в этот пул могут включаться либо только сетевые ресурсы NAS (attached storage) и SAN, либо еще и диски, непосредственно подключенные к серверам (direct attached storage, DAS). Виртуализация систем хранения — это своего рода дополнительный уровень абстракции между физическими устройствами и логическими томами, который прячет в себе лишние инфраструктурные детали. Существует множество технических решений для практического воплощения виртуализации систем хранения, различающихся местом расположения механизма виртуализации. Он может находиться непосредственно в устройстве (array-based storage virtualization), в таком случае виртуализованные устройства доступны любому серверу, подключенному к сети хранения, в сети (network-based storage virtualization) или в серверах (server-based storage virtualization).
  • Виртуализация приложений. Еще не сложилось строгого определения того, что есть виртуализованное приложение. Однако обычно, говоря так, подразумевают возможность распределенного выполнения одного приложения на одном или нескольких компьютерах, в синхронном или асинхронном режиме. В качестве примера можно привести выполнение приложения в среде grid. Одним из редких примеров законченных решений для виртуализации приложений является программный продукт UpScale, выпущенный небольшой компанией Ejasent (недавно она была куплена компанией Veritas Software). Инструментарий UpScale позволяет перемещать приложения с одного сервера на другой, не прерывая работу приложения. Для выполнения подобных действий UpScale изготавливает «моментальный снимок» состояния приложения и передает его в другой сервер. Veritas, как компания специализирующаяся на управлении системами хранения, намерена дополнить этими возможностями свою стратегию в области utility computing. В качестве еще одного примера виртуализации приложений можно привести технологию SystemGuard компании SoftGrid. Эта технология позволяет выполнять на клиентах приложения, хранящиеся на серверах. В ее основе лежит пакетирование приложений: при передаче приложение, как пакет данных в сети, несет с собой свою собственную конфигурационную «обвязку».
  • Виртуализация центров обработки данных. Пока ответ на вопрос «что такое виртуализация центров обработки данных», далек от ясности. Можно сказать, что в какой-то мере «виртуальным» является HP Utility Data Center (UDC). Однако наиболее интересные по замыслу работы в данной области ведутся в нескольких небольших компаниях, которых объединяет желание построить виртуализирующий коммутатор на входе центра обработки данных. Лидирует среди них компания Inkra Networks со своим продуктом Virtual Service Switch. Близкие по смыслу решения предлагают компании Ranch Networks, Nauticus Networks и ArrayNetworks.

IA-32 и виртуализация

Как известно, серверная «популяция» делится на две неравные части. Элиту составляют Unix-серверы, а Intel-серверы формируют большинство (их, по данным Gartner, в год производится более 3 млн). И, как в жизни, элите доступно многое, в том числе и виртуализация, а массе — почти ничего. В условиях, когда серверы на платформе IA-32 начинают использовать в ответственных приложениях, когда их консолидируют в крупные серверные фермы, требования к таким серверам заметно изменились. Виртуализация этих серверов позволит наделить их теми преимуществами, которыми пока обладали мэйнфреймы и мидфреймы.

  • Виртуальные машины могут консолидировать нагрузку недогруженных серверов на меньшем числе машин, что оборачивается сокращением стоимости аппаратуры, администрирования и, что особенно критично в настоящее время, уменьшением потребности в площади, энергии и других параметрах окружающей среды.
  • Упрощается миграция программного обеспечения, системы приобретают большую мобильность. К тому же появляется возможность для выполнения устаревших приложений, которые не могут работать на новом оборудовании.
  • Виртуализированные машины более безопасны с точки зрения изоляции приложений, поэтому они являются более надежной платформой.
  • Виртуальная машина может работать в условиях более жестких ограничений на операционную среду, что может быть критично в случаях, когда необходимо обеспечить требуемое качество обслуживания (quality of service, QoS) для всей совокупности приложений.
  • Использование виртуальных машин позволяет условно использовать то оборудование, которое на данный момент в системе отсутствует, например, целях моделирования.
  • Виртуальные машины дают возможность одновременно использовать разные версии операционных систем, что иногда невозможно на реальном оборудовании.
  • Улучшаются условия для отладки и мониторинга. Так, на виртуальной машине легче отлаживать программное обеспечение, способное нарушить работу реальной машины.

К 2007 году более 40% компаний, входящих в Fortune 1000, будут использовать те или иные средства для виртуализации. В 2008 году те, кто этими технологиями не воспользуется, будет нести на 25% большие издержки при использовании Intel-серверов и на 15% большие — при использовании RISC-серверов.

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

Виртуализация архитектуры IA-32 осложняется тем, что она изначально плохо приспособлена для этого. Ее еще называют not virtualization friendly — утверждается, что как минимум 17 команд из системы команд процессора Pentium являются невиртуализируемыми. При выполнении привилегированных команд в непривилегированном режиме вырабатывается сообщение о нарушении общих правил защиты (General Protection Exception). Такие «чувствительные» команды должны особым образом обрабатываться монитором виртуальной машины. Сложность решения этой задачи (а может быть, и какие-то другие причины) привела к тому, что созданием виртуальных машин на базе IA-32 занимается считанное количество компаний в мире; наиболее известна VMware, заметно уступала ей Connectix. Из российских компаний следует отметить «Параллели» с ее продуктом twoOStwo.

Microsoft и EMC — новая ось противостояния

До 2003 года реально виртуализацией платформы IA-32 занимались всего две небольшие компании — VMware и Connectix. Их место в бизнесе не было слишком заметным, хотя количество инсталляций виртуальных серверов и рабочих станций VMware исчислялось сотнями тысяч. Компания Connectix с ее инструментарием Virtual PC заметно уступала VMware, а компания Ejasent, которая насчитывала чуть более двух десятков сотрудников и недавно была куплена Veritas, — тем более. Не удивляет то внимание компьютерной и деловой прессы, которое вызвали приобретения VMware, Connectix и Ejasent. Шум явно не соответствовал объемам сделок; значит, дело не в сиюминутной перекройке рынка, а в долговременных тенденциях, которые проявят себя через годы. Можно с полной определенностью сказать, что в результате состоявшихся сделок намечается еще одна ось противостояния, на этот раз — между корпорациями Microsoft и EMC. Полем противоборства станет программное обеспечение виртуализации для серверов на платформе IA-32. Известно, что в 2003 году Microsoft предпринимала неудачную попытку купить VMware, но, в конечном итоге, компания досталась EMC, и это весьма перспективная покупка. Тогда Microsoft не оставалось ничего другого, как купить Connectix вместе с ее технологией Virtual PC. После сделки с EMC компания VMware формально сохранила относительно технологическую самостоятельность, ну а Connectix прекратила свое существование.

EMC руководствуется одним из правил, преподаваемых в школах бизнеса, —«единственный гарантированный способ выиграть — изменить правила игры», и вот теперь все ждут объявления новых правил. Можно попробовать сделать предположение, какими они будут. Сети вообще и сети хранения, в частности, обеспечили универсальность доступа к данным и их мобильность. Все разговоры о распределенных системах, о конфигурациях наподобие grid и т.д. исходили из аксиоматического предположения, что, в противоположность данным, приложения статичны. Практически все модели сервисов базировались на этом предположении. Но кто сказал, что такой подход единственно верен? А что если сделать мобильными приложения, причем не простые Java-апплеты, а вполне серьезные программные системы? Для придания приложениям мобильности гиганту EMC и потребовалась маленькая VMware.

Раньше виртуальные машины VMware служили, прежде всего, для изоляции приложений по разделам. Виртуальные машины использовались в основном затем, чтобы обеспечить приложениям такую же степень защищенности, как на мэйнфреймах [1]. Положение компании и ее привлекательность для покупателей заметно изменились с появлением VMotion, программного инструментария, обеспечивающего качественно новую гибкость. В своем нынешнем виде VMotion позволяет системному администратору перемещать приложения, работающие на виртуальной машине VMware ESX, с одного физического процессора на другой, причем не только в пределах одного сервера, а в пределах всего центра обработки данных. Мобильность приложений в пределах центра обработки данных открывает возможность для сохранения их работоспособности в процессе перестройки центра, увеличивает возможности балансирования нагрузки, например, позволяет перемещать приложения на более производительные процессоры при повышении нагрузки и наоборот. Можно сказать, что это еще один шаг на пути к виртуализации центров обработки, ведь виртуальная машина не меняется, но меняется лишь ее местоположение. Однако виртуализация означает больше: благодаря использованию VMware Control Center можно внедрить новую версию виртуальной машины, распространить ее по всему предприятию, а затем перейти на работу на ней, не прерывая работы приложений.

Возвратимся к EMC. Компания уловила нынешнюю тенденцию масштабирования вниз (scale down), которая отражает стремление потребителей ИТ меньше вкладывать в инфраструктуру и больше — в автоматизацию управления ею. А дальше происходит удивительное. Компания, которая прежде не была связана с серверным бизнесом, теперь оказывается в центре событий, связанных с Intel-серверами. Ее новое правило, которое может поколебать основы этого сегмента рынка можно сформулировать так: «Эра, когда приложение передавали на сервер, заканчивается, наступает другая, когда процессорная мощность предоставляется приложению». Если дать волю фантазии, то открывается заманчивая перспектива, заставляющая переосмыслить многое, в том числе, и концепцию grid.

Инициативу Dynamic Systems Initiative можно назвать глобальным ответом корпорации Microsoft на вызов, брошенный EMC. Инициатива была объявлена в марте 2004 года. Импульс к ее созданию в документах Microsoft объясняется изменением представлений о том, что такое «распределенная система». После ряда эволюционных изменений стало понятно, что природа распределенных систем в наибольшей степени ассоциируется с взаимосвязью аппаратного и программного обеспечения. Сложность систем поглощает основные средства на информационные технологии: до 70-80% средств уходит не на покупку нового, а на поддержание старого. Ведущие производители, в том числе и Microsoft, осознали, что это тупик и надо что-то делать. Основные изменения должны коснуться следующих моментов:

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

Dynamic Systems Initiative является попыткой реализовать эти принципы. Возможно, самой интересной ее частью станет System Definition Model (SDM), которая представляет собой своего рода язык (или мета-модель) для создания моделей распределенных систем. В этой мета-модели распределенная система трактуется как набор аппаратных и программных ресурсов, исполняемых на одном или большем числе компьютеров. Совершенно очевидно, что реализовать подобную модель невозможно без виртуализации ресурсов.

По плану, в середине текущего года должен появиться новый программный продукт, Microsoft Virtual Server (MVS) 2004; его бета-тестирование уже началось. Данный продукт, созданный по технологии Connectix, должен составить конкуренцию GSX Server от VMware на арене Windows. Его нельзя в полной мере назвать гостевой операционной системой; скорее, этот виртуальный сервер представляет собой приложение, работающее под управлением Windows Server 2003, которое позволяет на одном процессоре поддерживать одновременно несколько операционных систем, в том числе, Windows Server 2003, Windows 2000 Server, Windows NT, а также Linux, Unix и OS/2. В будущем Microsoft намеревается использовать MVS как составную часть развивающейся платформы Dynamic Systems Initiative, где он будет работать совместно с Automated Deployment Services. Одна из первых целей, которую ставит перед собой в данном случае Microsoft, заключается в том, что, оставив одну виртуальную конфигурацию, удастся снизить расходы на поддержку Windows NT 4.0; со временем поддержка традиционных инсталляций NT 4.0 будет прекращена.

То, что намереваются делать Microsoft и EMC, логически проще аналогичных инициатив Sun Microsystems, Hewlett-Packard и IBM, в решениях которых прозрачнее просматривается роль виртуальной машины. Однако и эти примеры могут убедить в том, что виртуализация грозит изменить многие казавшиеся вечными представления.

Литература
  1. Леонид Черняк, Мэйнфрейм для бедных? Открытые Системы, 2002, № 2.