Вложенная виртуализация Hyper-V — первый шаг

Дата публикации: 12.04.2016

Цель сегодняшней статьи — рассказать о реализации вложенной виртуализации на платформе Hyper-V. Не секрет, что Hyper-V не поддерживал вложенную виртуализацию в отличие от других производителей. С выходом сборки Windows Server 2016 Technical Preview 4 (TP4), которая предназначена для желающих попробовать новый функционал, ситуация изменилась. Демонстрации вложенной виртуализации можно увидеть в записи доклада «Один доклад, один ноутбук, один датацентр» мероприятия Microsoft TechDay 2015.

Все демонстрации были проведены на HP Blade Gen 8, с базовым процессором Intel Xeon E5 2670 и объёмом оперативной памяти 32 GB.

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

Архитектура


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



На нулевом уровне здесь физический хост, а на первом уровне — тонкий слой программного обеспечения, называемый гипервизором. Также на первом уровне находится раздел с корневой операционной системой и разделы для виртуальных машин. Проиллюстрируем с использованием утилиты CoreInfo от Марка Руссиновича поведение параметров процессора, связанных с виртуализацией. В таблице приведены первые несколько строк работы утилиты CoreInfo.



Из рисунка видно, что необходимо пробрасывать флаг, связанный с виртуализацией, в гостевую ОС. То есть, в общем случае, мы должны сообщить гипервизору на первом уровне, что необходимо включить поддержку виртуализации в разделяемом процессоре для виртуальной машины. Для этого необходимо запустить скрипт, который изменяет некоторые свойства виртуальной машины. Одно из основных свойств, которое изменяет скрипт, это поведение процессора виртуальной машины. // Set-VMProcessor -VMName $vmName -ExposeVirtualizationExtensions $true //. Про остальные параметры поговорим чуть позже. Проиллюстрируем поведение параметров процессора, связанных с виртуализацией, на виртуальной машине. В таблице выведены первые несколько строк работы утилиты CoreInfo.



Из таблицы видно, что виртуальная машина «понимает», что работает из-под гипервизора. Но до запуска скрипта флаг, связанный с виртуализацией, не передаётся. Далее отработал скрипт, который изменил свойства нашей виртуальной машины и ее процессора и флаг, связанный с виртуализацией, появился. Далее мы включили роль Hyper-V, после этого возник тонкий слой виртуализации и наша операционная система переместилась в свой корневой раздел, флаг виртуализации исчез. Также обратим внимание на значение Microprocessor signature, которое в нашем случае стало FFFFFFFF, что указывает на виртуализацию процессора. Далее мы создали виртуальную машину внутри виртуальной машины и для чистоты эксперимента запустили утилиту CoreInfo.



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



Настройки и ограничения


Теперь поговорим о некоторых ограничения данной технологии в TP4 для включенной вложенной виртуализации на первом уровне виртуальной машины:

  1. Поддержка реализована пока только для процессоров Intel с поддержкой EPT (SLAT).
  2. Динамическая память должна быть отключена.
  3. Изменение размера памяти приводит к ошибкам.
  4. Снимки на работающей виртуальной машине не допустимы.
  5. Live migration приводит к ошибкам.
  6. Сохранение, восстановление может привести к ошибкам.
  7. Необходимо включить MAC spoofing в свойствах сетевого адаптера.


Пошаговая инструкция выглядит так:

  • Устанавливаем сборку на физический хост, с включенными параметрами виртуализации.
  • Создаём виртуальную машину, в которой будем включать виртуализацию. Желательно выделить этой машине не менее 4GB оперативной памяти, иначе нужно подправить скрипт. Виртуальная машина должна быть выключена!
  • Запускаем скрипт на физическом хосте, указывая имя ранее созданной виртуальной машины. Ссылка на скрипт находится в конце статьи.
  • Включаем роль Hyper-V в виртуальной машине.
  • Создаем новую виртуальную машину, используя Hyper-V manager в ранее созданной виртуальной машине.


В итоге имеем решение, которое позволит делать многие вещи на одном физическом хосте. Например, кластер, собранный из Hyper-V хостов, что уменьшит количество используемого оборудования как дома, так и в учебных классах.


Автор статьи: Михаил Комаров, MVP — Cloud and Datacenter Management

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