Технологии виртуализации вчера, сегодня, завтра

       

Виртуализация сегодня и завтра: Intel VT и AMD «Pacifica»


Корпорация Intel пошла достаточно прямолинейным путём, попросту выпустив «минимально необходимую» заплатку к x86. Полное название «заплатки» - Intel Virtualization Techology for x86 (VT-x); одновременно была выпущена аналогичная виртуализационная «технология» для процессоров Intel Itanium (VT-i). Впрочем, рассматривать последнюю технологию мы не будем, поскольку по сути своей она практически полностью аналогична VT-x. Напомним, что ранее данная технология была известна под кодовыми именами Vanderpool (для персональных компьютеров) и Silvervale (для серверов).

Что же сделала Intel? Довольно нетривиальную, хотя и напрашивающуюся вещь. Разработчик архитектуры IA-32 попросту ввела в своих процессорах специальный «режим выполнения виртуальной машины» (Virtual Machine eXecution mode, VMX), предназначенный специально для виртуализационного ПО (Virtual Machine Manager, VMM), и определила для этого режима несколько ключевых «виртуализационных» инструкций, таких как, к примеру, «создать виртуальный компьютер» и «запустить виртуальный компьютер». Собственно этот самый «виртуальный компьютер» в VT-x описывается специальной структурой под названием VMCS (Virtual Machine Control Structure) и по сути своей является небольшим участком физической оперативной памяти, хранящим минимально необходимые данные для запуска гостевой операционной системы, а также данные, необходимые для безопасного выхода из режима работы гостевой ОС, и некоторые настройки, относящиеся к управлению этой виртуальной машиной.

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

Запущенная виртуальная машина работает на обычных аппаратных ресурсах компьютера (указанных VMM в описании виртуальной машины) и для запущенного на ней программного обеспечения практически ничем не отличается от обычной «физической» машины.
Но в отличие от «обычного» режима, в эту виртуальную машину можно вставлять сколь угодно много «закладок», которые будут прерывать её исполнение, передавая управление обратно к VMM, который будет вручную имитировать то или иное событие, или выполнение той или иной инструкции. Какие именно события будут перебрасываться для «ручной обработки» VMM, определяется только самим программистом, но их в любом случае даже больше, чем необходимо для реализации сколь угодно сложной виртуальной машины, вплоть до точной имитации совершенно другого процессора. К примеру, проблемная в обычном случае операция чтения-записи регистра CR3 в VT-x попросту приведёт к тому, что процессор на секундочку приостановит гостевую ОС, вызовет VMM, который программно сымитирует результат её выполнения (не выполняя настоящую инструкцию MOV to/from CR3 с аппаратным регистром, а подменив её чтением-записью обычного кусочка оперативной памяти), после чего возобновит выполнение гостевой ОС, которая «подвоха» даже не ощутит.

При желании можно даже вручную «подкручивать» счётчик тактов процессора и показания системного таймера, чтобы у гостевой ОС не возникло ненужных сомнений, по поводу того, с чего это вдруг некоторые инструкции на данном «процессоре» выполняются так долго. Можно даже попробовать один-в-один сымитировать AMD Athlon XP на Intel Pentium 4 - так, что программное обеспечение «гостевой» операционной системы не будет и догадываться о подмене. Правда, если быть совсем точным, то поскольку Pentium 4 не поддерживает набор инструкций AMD 3Dnow!, а технология VT-x не позволяет перехватывать ошибки типа «неизвестная инструкция» (Invalid Opcode), то сымитировать поддержку 3Dnow! на P4 невозможно. Но 3Dnow! всё равно сегодня практически не используется, а во всём остальном (скажем, во всём том, что рапортует о процессоре стандартная инструкция CPUID), имитируемый компьютер будет вести себя точно как AMD Athlon XP, так что подавляющее большинство ПО на «уловку» поддастся.



Вот и вся технология виртуализации VT-x - мы просто переводим наш процессор в такой режим, когда он перехватывает некоторые (определенные нами) события и передаёт их в специальную программу - менеджер виртуальной машины. И никакой сложной бинарной трансляции!

Всего в VT-x десять новых инструкций:



  • VMXON и VMXOFF включают и выключают режим VMX.
  • VMWRITE позволяет программисту записывать данные в структуру VMCS, описывающую виртуальную машину; VMREAD - аналогично читать данные из VMCS. Собственно формат структуры VMCS официально неизвестен, и каким образом и что там, вообще говоря, сохраняется - одна Intel знает. Заметим, также, что сама структура VMCS относительно невелика по размерам (единицы килобайт) и не хранит в себе, к примеру, данных о виртуальной памяти, образующей физическую память «виртуального компьютера», - эти данные менеджер VMM поддерживает (загружает и сохраняет) для виртуальных машин самостоятельно.
  • VMPTRLD позволяет выбрать текущую виртуальную машину (указатель на VMCS). VMPTRST, аналогично, сохранить указатель на текущую виртуальную машину.
  • VMLAUNCH позволяет запустить выбранную виртуальную машину (описывающуюся ранее установленным указателем на корректную текущую VMCS).
  • Исполнение кода работающей виртуальной машины прерывает либо наступление указанного в VMCS события (внешнего прерывания, попытки выполнить ту или иную инструкцию), либо выполнение инструкции VMCALL (если она разрешена в настройках VMCS).
  • VMRESUME позволяет продолжить прерванное событием выполнение кода на виртуальной машине.
  • VMCLEAR используется для инициализации пустой структуры VMCS и для перевода выбранной виртуальной машины в «остановленное» состояние (с сохранением данных VMCS).


Доступ к инструкциям VT-x по умолчанию заблокирован; для их включения требуется «включить» бит 4 в четвёртом контрольном регистре процессора (CR4.VMXE=1) и «включить» биты 0 и 2 в MSR-регистре 3Ah. На виртуальной машине, эмулируемой с помощью VT-x, можно замаскировать поддержку VT-x, сообщаемую инструкцией CPUID, и принудительно заблокировать любую возможность использования в виртуальной машине инструкций данного семейства.


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

Технология Intel VT уже вышла на рынок - в продаже есть как настольные, так и серверные процессоры, официально ее поддерживающие. Перечень процессоров Intel с поддержкой VT постоянно пополняется, и вы без труда сможете найти его на сайте Intel вместе с популярным описанием самой технологии. Корпорация для популяризации этого своего решения любит устраивать живые демонстрации возможностей технологии виртуализации, когда сперва «типичный профессионал» сидит рядом с четырьмя системными блоками (выкрашенными для наглядности в разный цвет), один из которых считает профессиональную задачу, на другой выполняется офисная работа, третий «крутит» небольшой сервер, четвертый занимается обслуживанием и антивирусной проверкой (все - под разными ОС). И каждую из этих систем можно независимо «подвесить», «заразить» или перезагрузить, в то время как остальные продолжают свою деятельность. И кульминацией этой демонстрации становится момент, когда открываются крышки этих системных блоков, а под ними - пусто. Рядом же стоит обычный «неприметный» системный блок (для наглядности выкрашенный в эти же 4 цвета - в полосочку), который один и выполняет всю описанную выше работу - под управлением Intel VT с аппаратной поддержкой и несколькими одновременно работающими ОС. На неискушенных пользователей такая демонстрация оказывает большое впечатление.



Технология Intel VT в действии



Вместо нескольких системных блоков с различными ОС работает один

Другой, более «бытовой» демонстраций Intel VT обычно выступает домашний мультимедийный компьютер, который одновременно обслуживает несколько независимых пользователей: например, папа работает с почтой, мама смотрит фильм, а дитё - да, играет или слушает музыку.


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

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


Содержание раздела