что такое вложенная виртуализация

Запуск Hyper-V в виртуальной машине со вложенной виртуализацией

Вложенная виртуализация — это компонент, который позволяет запускать Hyper-V в виртуальной машине (ВМ) Hyper-V. Это полезно для запуска эмулятора телефона Visual Studio на виртуальной машине и для тестирования конфигураций, для которых обычно требуется несколько узлов.

что такое вложенная виртуализация. Смотреть фото что такое вложенная виртуализация. Смотреть картинку что такое вложенная виртуализация. Картинка про что такое вложенная виртуализация. Фото что такое вложенная виртуализация

Предварительные условия

Настройка вложенной виртуализации

Отключение вложенной виртуализации

Вы можете отключить вложенную виртуализацию в остановленной виртуальной машине следующей командой PowerShell:

Изменение размера динамической памяти и памяти для среды выполнения

При запуске Hyper-V в виртуальной машине в ней должна быть отключена настройка памяти. Это означает, что даже если динамическая память включена, ее объем не будет изменяться. Для виртуальных машин без динамической памяти все попытки изменить объем памяти включенной машины завершатся сбоем.

Обратите внимание, что само включение вложенной виртуализации не повлияет на изменение размера динамической памяти или памяти для среды выполнения. Несовместимость происходит, только если Hyper-V выполняется в виртуальной машине.

Параметры сетей

Существуют два параметра для сетей со вложенными виртуальными машинами:

Спуфинг MAC-адресов

Чтобы сетевые пакеты перенаправлялись через два виртуальных коммутатора, необходимо включить спуфинг MAC-адресов на первом уровне (L1) виртуального коммутатора. Это можно сделать с помощью следующей команды PowerShell.

Преобразование сетевых адресов (NAT)

Второй параметр связан с преобразованием сетевых адресов (NAT). Этот подход рекомендуется для случаев, когда спуфинг MAC-адресов невозможен, например в общедоступной облачной среде.

Сначала необходимо создать виртуальный коммутатор NAT в виртуальной машине узла («средняя» виртуальная машина). Обратите внимание, что IP-адреса приведены только в качестве примера и будут разниться в зависимости от сред:

Далее назначьте IP-адрес для сетевого адаптера:

Каждая вложенная виртуальная машина должна иметь назначенный IP-адрес и шлюз. Обратите внимание, что IP-адрес шлюза должен указывать на адаптер NAT из предыдущего действия. Можно также назначить DNS-сервер:

Принцип работы вложенной виртуализации

Современные процессоры поддерживают аппаратные функции, которые делают виртуализацию быстрее и надежнее. Hyper-V использует эти расширения процессора (например, Intel VT-x и AMD-V) для выполнения виртуальных машин. Как правило, после запуска Hyper-V другое программное обеспечение блокируется с помощью этих возможностей процессора. Это предотвращает запуск Hyper-V на гостевых виртуальных машинах.

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

На схеме ниже показана роль Hyper-V без вложения. Низкоуровневая оболочка Hyper-V полностью контролирует возможности аппаратной виртуализации (оранжевая стрелка) и скрывает их от операционной системы.

что такое вложенная виртуализация. Смотреть фото что такое вложенная виртуализация. Смотреть картинку что такое вложенная виртуализация. Картинка про что такое вложенная виртуализация. Фото что такое вложенная виртуализация

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

что такое вложенная виртуализация. Смотреть фото что такое вложенная виртуализация. Смотреть картинку что такое вложенная виртуализация. Картинка про что такое вложенная виртуализация. Фото что такое вложенная виртуализация

Сторонние приложения виртуализации

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

Источник

Настройка вложенной виртуальной машины в качестве узла

Поддержка этой версии Virtual Machine Manager (VMM) прекращена. Рекомендуем перейти на VMM 2019.

Вложенная виртуализация — это функция Windows Server 2016 и более поздних версий, которая позволяет запускать Hyper-V внутри виртуальной машины Hyper-V. Другими словами, теперь вы можете виртуализировать сам узел Hyper-V. Вложенную виртуализацию можно включить по внештатному каналу, используя PowerShell и конфигурацию узла Hyper-V.

Эта функция позволит вам снизить расходы на инфраструктуру при разработке и тестировании решений, так как вам не придется использовать дополнительное оборудование.

System Center — Virtual Machine Manager (VMM) 1801 и более поздних версий позволяет включать и отключать вложенную функцию виртуализации с помощью консоли VMM. В VMM можно настроить вложенную виртуальную машину в качестве узла и выполнять на этой виртуальной машине функции узла. Например, динамическая оптимизация VMM будет рассматривать вложенный узел для размещения виртуальных машин.

Включите на виртуальной машине вложенную виртуализацию, а затем настройте ее в качестве узла.

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

Перед началом работы

Выполните указанные ниже предварительные требования.

Выполните указанные ниже предварительные требования.

Включение виртуализации сетей

Администраторы и полномочные администраторы могут настроить вложенную виртуализацию с помощью VMM. Затем выполните следующие действия:

Включение вложенной виртуализации для существующей виртуальной машины

Найдите виртуальную машину, которая соответствует описанным выше предварительным условиям.

Убедитесь, что виртуальная машина находится в остановленном состоянии.

что такое вложенная виртуализация. Смотреть фото что такое вложенная виртуализация. Смотреть картинку что такое вложенная виртуализация. Картинка про что такое вложенная виртуализация. Фото что такое вложенная виртуализация

Откройте свойства выбранной виртуальной машины. что такое вложенная виртуализация. Смотреть фото что такое вложенная виртуализация. Смотреть картинку что такое вложенная виртуализация. Картинка про что такое вложенная виртуализация. Фото что такое вложенная виртуализация

В разделе Общие установите флажок Включить вложенную виртуализацию. что такое вложенная виртуализация. Смотреть фото что такое вложенная виртуализация. Смотреть картинку что такое вложенная виртуализация. Картинка про что такое вложенная виртуализация. Фото что такое вложенная виртуализация

Настройка вложенной виртуальной машины в качестве узла

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

Правила брандмауэра для входящих соединений

Правила брандмауэра для исходящих соединений

Убедитесь, что виртуальная машина находится в состоянии Выполнение. Запустите виртуальную машину, если она не работает.

что такое вложенная виртуализация. Смотреть фото что такое вложенная виртуализация. Смотреть картинку что такое вложенная виртуализация. Картинка про что такое вложенная виртуализация. Фото что такое вложенная виртуализация

Щелкните правой кнопкой мыши виртуальную машину и выберите Настроить как узел. Откроется мастер добавления ресурсов.

что такое вложенная виртуализация. Смотреть фото что такое вложенная виртуализация. Смотреть картинку что такое вложенная виртуализация. Картинка про что такое вложенная виртуализация. Фото что такое вложенная виртуализация

что такое вложенная виртуализация. Смотреть фото что такое вложенная виртуализация. Смотреть картинку что такое вложенная виртуализация. Картинка про что такое вложенная виртуализация. Фото что такое вложенная виртуализация

Выполните инструкции мастера, выберите все нужные параметры и завершите работу мастера.

Отключение вложенной виртуализации

Выберите узел или виртуальную машину, для которых включена вложенная виртуализация.

Убедитесь, что виртуальная машина находится в остановленном состоянии. Остановите виртуальную машину, если она выполняется.

Откройте свойства виртуальной машины.

В разделе Общие снимите флажок Включить вложенную виртуализацию.

Прежде чем отключить вложенную виртуализацию, ознакомьтесь с примечанием в нижней части страницы мастера.

Вложенная виртуализация в 2019 UR1

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

Включение вложенной виртуализации с помощью шаблонов виртуальных машин

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

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

Чтобы включить вложенную виртуализацию, в пункте Мастер создания шаблонов виртуальных машин выберите Выбор источника а затем выберите Enable Nested Virtualization (Включение вложенной виртуализации) на правой панели мастера.

что такое вложенная виртуализация. Смотреть фото что такое вложенная виртуализация. Смотреть картинку что такое вложенная виртуализация. Картинка про что такое вложенная виртуализация. Фото что такое вложенная виртуализация

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

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

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

Чтобы включить вложенную виртуализацию, в пункте Create Virtual Machines wizard (Мастер создания виртуальных машин) выберите Выбор источника а затем выберите Enable Nested Virtualization (Включение вложенной виртуализации) на правой панели мастера.

что такое вложенная виртуализация. Смотреть фото что такое вложенная виртуализация. Смотреть картинку что такое вложенная виртуализация. Картинка про что такое вложенная виртуализация. Фото что такое вложенная виртуализация

Включение вложенной виртуализации с помощью шаблонов служб

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

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

Чтобы включить вложенную виртуализацию, в Single Tier Properties (Свойства одного уровня) выберите Общие а затем выберите Enable Nested Virtualization (Включение вложенной виртуализации) на правой панели мастера.

Источник

Вложенная виртуализация

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

Эта возможность доступна только для гостевых секций. Его необходимо включить для каждой виртуальной машины. вложенная виртуализация не поддерживается в Windows корневом разделе.

Для определения различных уровней вложенной виртуализации используется следующая терминология:

ТерминОпределение
Гипервизор на уровне 0Гипервизор Hyper-V, работающий на физическом оборудовании.
Корень L1Windows корневая операционная система.
Гостевая виртуальная машинаВиртуальная машина Hyper-V без вложенной низкоуровневой оболочки.
Гипервизор L1Вложенная низкоуровневая оболочка, выполняемая на виртуальной машине Hyper-V.
Корень L2корневая Windows операционная система, выполняемая в контексте виртуальной машины Hyper-V.
Гостевая виртуальная машинаВложенная виртуальная машина, работающая в контексте виртуальной машины Hyper-V.

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

Поддержкой VMCS (Intel)

На платформах Intel программное обеспечение виртуализации использует структуры данных управления виртуальными машинами (ВМКСС) для настройки поведения процессора, связанного с виртуализацией. ВМКСС необходимо сделать активным с помощью инструкции ВМПТРЛД и изменить с помощью инструкций ВМРЕАД и VMWRITE. Эти инструкции часто являются узким местом для вложенной виртуализации, так как они должны быть эмулироваться.

Гипервизор предоставляет функцию «поддержкой VMCS», которую можно использовать для управления поведением процессора, связанным с виртуализацией, с помощью структуры данных в физической памяти гостевого компьютера. Эту структуру данных можно изменить с помощью обычных инструкций по доступу к памяти, поэтому гипервизору L1 не нужно выполнять инструкции ВМРЕАД или VMWRITE или ВМПТРЛД.

Гипервизор L1 может использовать поддержкой ВМКСС, записывая 1 в соответствующее поле на странице помощника по виртуальному процессору. Другое поле на странице помощи по вице-президенту управляет активной в данный момент поддержкой VMCS. Каждый поддержкой VMCS имеет ровно одну страницу (4 КБ) в размере и должен быть изначально обнулен. Чтобы сделать поддержкой VMCS активным или текущим, не нужно выполнять инструкцию ВМПТРЛД.

После того как низкоуровневая оболочка L1 выполнит запись виртуальной машины с помощью поддержкой VMCS, VMCS считается активной на процессоре. Поддержкой VMCS может быть активен только на одном процессоре одновременно. Гипервизор L1 может выполнить инструкцию ВМКЛЕАР, чтобы перевести поддержкой VMCS из активного в неактивное состояние. Любые инструкции ВМРЕАД или VMWRITE, когда активен поддержкой VMCS, не поддерживаются и могут привести к непредвиденному поведению.

Структура HV_VMX_ENLIGHTENED_VMCS определяет макет поддержкой VMCS. Все поля, не являющиеся искусственными, сопоставляются с VMCS кодировкой Intel.

Очистить поля

Гипервизор на уровне 0 может кэшировать части поддержкой VMCS. Поля поддержкой VMCS Clean определяют, какие части поддержкой VMCS перегружаются из памяти гостя во вложенной записи виртуальной машины. Гипервизор уровня «L1» должен очищать соответствующие поля VMCS Clean при каждом изменении поддержкой VMCS, в противном случае гипервизор уровня 0 может использовать устаревшую версию.

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

Обнаружение компонентов

Поддержка интерфейса поддержкой VMCS сообщается с маркером CPUID конечного 0x40000004.

Структура поддержкой VMCS имеет версию для учета будущих изменений. Каждая структура VMCS поддержкой содержит поле Version, о котором сообщает гипервизор на уровне 0.

Сейчас поддерживается только одна версия VMCS.

Поля енлигхенед ВМКБ (AMD)

AMD зарезервирует пространство в ВМКБ для использования гипервизора, а также соответствующий чистый бит. Зарезервированные байты находятся в разделе управления (offset 0x3E0-3FF) ВМКБ. Бит чистого бита равен 31 (бит очистки должен стать недействительным каждый раз, когда гипервизор изменяет область «просветлений» ВМКБ).

Hyper-V использует зарезервированную область ВМКБ для настройки просветлений. Структура HV_SVM_ENLIGHTENED_VMCB_FIELDS документирует формат.

Точечный рисунок поддержкой MSR

Низкоуровневая оболочка на уровне 0 эмулирует элементы управления «MSR-Bitmap» на платформах Intel и AMD, которые позволяют программному обеспечению виртуализации управлять тем, какие обращения к MSR создают.

Гипервизор L1 может совместно работать с гипервизором на уровне 0 для повышения эффективности доступа к MSR. Он может включить точечные рисунки поддержкой MSR, установив соответствующее поле в полях поддержкой VMCS/ВМКБ в значение 1. Если этот параметр включен, гипервизор на уровне 0 не отслеживает изменения в точечных рисунках MSR. Вместо этого гипервизор L1 должен сделать соответствующее поле очистки недействительным после внесения изменений в один из битовых рисунков MSR.

Поддержка точечного рисунка поддержкой MSR указана в маркере CPUID конечного 0x4000000A.

Совместимость с динамическая миграция

Hyper-V может выполнять динамическую миграцию дочернего раздела с одного узла на другой. Динамическая миграция обычно прозрачна для дочернего раздела. Однако в случае вложенной виртуализации гипервизору L1 может потребоваться учитывать миграцию.

Уведомление динамическая миграция

Гипервизор L1 может запрашивать уведомления при миграции секции. Эта возможность перечислена в CPUID как привилегия «Акцессринлигхтенментконтролс». Гипервизор на уровне 0 предоставляет искусственный MSR (HV_X64_MSR_REENLIGHTENMENT_CONTROL), который может использоваться гипервизором L1 для настройки вектора прерываний и целевого процессора. Гипервизор на уровне 0 внедряет прерывание с указанным вектором после каждой миграции.

Указанный вектор должен соответствовать фиксированному прерыванию APIC. Таржетвп указывает индекс виртуального процессора.

Эмуляция TSC

Гипервизор на уровне 0 при необходимости эмулирует все доступ TSC после миграции до тех пор, пока гипервизор L1 не сможет повторно вычислить значение Тскскале. Гипервизор L1 может использовать эмуляцию TSC путем записи в HV_X64_MSR_TSC_EMULATION_CONTROL MSR. Если вы выбрали, гипервизор на уровне 0 эмулирует доступ к таймеру TSC после миграции.

Гипервизор L1 может выполнять запросы, если в настоящее время выполняется Эмуляция доступа TSC с помощью HV_X64_MSR_TSC_EMULATION_STATUS MSR. Например, гипервизор L1 может подписываться на Динамическая миграция уведомлений и запрашивать состояние TSC после получения прерывания миграции. Можно также отключить эмуляцию TSC (после обновления значения Тскскале) с помощью этого MSR.

Виртуальный TLB

Виртуальный TLB, предоставляемый гипервизором, может быть расширен для кэширования переводов из L2 Гпас в Гпас. Как и в случае с TLB на логическом процессоре, виртуальный TLB является несвязанным кэшем, и эта несогласованность видна гостям. Гипервизор предоставляет операции для управления TLB.

Прямая виртуальная очистка

Гипервизор предоставляет вызовы (хвкаллфлушвиртуаладдрессспаце, хвкаллфлушвиртуаладдрессспацеекс, хвкаллфлушвиртуаладдресслисти HvCallFlushVirtualAddressListEx), которые позволяют операционным системам более эффективно управлять виртуальным TLB. Гипервизор L1 может разрешить гостевым машинам использовать эти вызовы и делегировать ответственность за их обработку в гипервизоре на уровне 0. Для этого необходимо использовать страницу помощи по секциям (и виртуальную VMCS на платформах Intel).

При использовании виртуальный TLB помечает все кэшированные сопоставления идентификатором вложенного контекста (VMCS или ВМКБ), создавшего их. В ответ на вызов прямой виртуальной операции Flush от гостя уровня «гость», гипервизор на уровне 0 делает недействительными все кэшированные сопоставления, созданные вложенными контекстами, где

Поддержка прямых виртуальных сбросов указывается в 0x4000000A конечных записей CPUID.

Конфигурация

Прямая обработка гипервызовов виртуальной очистки включается следующим образом.

Прежде чем включать его, гипервизор L1 должен настроить следующие дополнительные поля поддержкой VMCS/ВМКБ:

Гипервизор L1 также должен предоставлять своим гостям следующие возможности через CPUID.

Страница «помощь секций»

Страница помощи по секционированию представляет собой область памяти с согласованным размером страницы, выделяемую гипервизору L1, и ноль перед использованием прямых вызовов для прямого сброса. Его GPA-запись необходимо записать в соответствующее поле в поддержкой VMCS/ВМКБ.

Искусственный VM-Exit

Если Тлблокккаунт страницы помощника по секционированию не равен нулю, гипервизор на уровне 0 доставляет VM-Exit с искусственной причиной выхода на гипервизор L1 после обработки прямого виртуального вызова Flush.

Преобразование адреса второго уровня

Если для гостевого раздела включена вложенная виртуализация, то блок управления памятью (ММУ), предоставляемый секцией, включает поддержку преобразования адресов второго уровня. Преобразование адресов второго уровня — это возможность, которая может использоваться гипервизором L1 для виртуализации физической памяти. При использовании некоторые адреса, которые будут считаться физическими адресами гостя (Гпас), обрабатываются как физические гостевые адреса уровня «гость» (L2 Гпас) и преобразуются в Гпас путем прохода по набору структур подкачки.

Гипервизор L1 может решить, как и где использовать адресные пространства второго уровня. Адресное пространство второго уровня определяется гостевым идентификатором 64-разрядного идентификатора. На платформах Intel это значение совпадает с указателем EPT. На платформах AMD значение равно полю nCR3 ВМКБ.

Совместимость

Функция преобразования адресов второго уровня, предоставляемая гипервизором, обычно совместима с поддержкой VMX или SVM для преобразования адресов. Однако существуют следующие отличия, наблюдаемые в гостевой системе:

Очистки TLB второго уровня поддержкой

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

Гипервизор поддерживает следующие вызовы для аннулирования Тлбс:

ГипервызоваОписание:
HvCallFlushGuestPhysicalAddressSpaceаннулирует кэшированные GPA-приложения уровня «кэш 2» в сопоставлениях GPA в пределах адресного пространства второго уровня.
HvCallFlushGuestPhysicalAddressListаннулирует кэшированные GPA-приложения ГВА/L2 в сопоставлениях GPA в пределах области адресов второго уровня.

На платформах AMD все записи TLB имеют архитектурный тег с асид (идентификатором адресного пространства). Недействительность асид приводит к тому, что все целые TLB, связанные с асид, станут недействительными. Вложенная низкоуровневая оболочка может при необходимости отказаться от «поддержкой TLB», установив Енлигхтнеднпттлб в значение «1» в HV_SVM_ENLIGHTENED_VMCB_FIELDS. Если вложенная низкоуровневая оболочка переводится в просвещение, недействительность асид просто очищает TLB целиком на основе преобразования адресов первого уровня (т. е. виртуального адресного пространства). Чтобы очистить записи TLB, полученные из таблицы вложенной страницы (НПТ) и заставить гипервизор на уровне объектов перестраивать теневые таблицы страниц, необходимо использовать вызов Хвкаллфлушгуестфисикаладдрессспаце или Хвкаллфлушгуестфисикаладдресслист.

Вложенные исключения виртуализации

На платформах Intel. Низкоуровневая оболочка L1 может использовать для объединения исключений виртуализации в классе Exception с ошибкой страницы. Гипервизор уровня 0 объявляет о поддержке этой енлигхтмент в функции виртуализации, вложенной в гипервизор, на конечном языке.

Эту просвещение можно включить, задав для Виртуализатионексцептион значение «1» в HV_NESTED_ENLIGHTENMENTS_CONTROL структуре данных на странице помощи виртуального процессора.

Вложенная программа MSRs для виртуализации

Регистр индекса вложенного президента

Низкоуровневая оболочка L1 предоставляет MSR, который сообщает о базовом индексе президента текущего процессора.

Адрес MSRИмя регистраОписание:
0x40001002HV_X64_MSR_NESTED_VP_INDEXВ вложенном корневом разделе сообщает о базовом индексе президента текущего процессора.

Вложенные Синик MSRs

В вложенном корневом разделе в следующей версии MSRs разрешается доступ к соответствующей Синик MSRS основной низкоуровневой оболочки.

Чтобы найти индекс базового процессора, вызывающие объекты должны сначала использовать HV_X64_MSR_NESTED_VP_INDEX.

Источник

Вложенная виртуализация Hyper-V в Windows Server 2016

что такое вложенная виртуализация. Смотреть фото что такое вложенная виртуализация. Смотреть картинку что такое вложенная виртуализация. Картинка про что такое вложенная виртуализация. Фото что такое вложенная виртуализацияНи для кого не секрет, что в Windows Server 2016 появилась вложенная виртуализация Hyper-V. Несмотря на то, что на момент написания статьи доступна лишь версия Technical Preview 5, уже в ней можно очень близко познакомиться с новым функционалом, о котором я и постараюсь коротко рассказать в этой статье.

Хочу отметить, что все сказанное относится к предрелизной версии и может сильно отличаться от официального релиза.

Если вам интересна тематика Windows Server, рекомендую обратиться к тегу Windows Server на моем блоге.

Вложенная виртуализация Hyper-V

Функция вложенной виртуализации в гипервизорах разных производителей доступна достаточно давно. Например у VMWare поддержка 64х-битных вложенных виртуальных машин была реализована в версии ESXi 5.1 и это было аж в 2011 году, не говоря о поддержке 32х-битных вложенных ОС, доступных ещё ранее. Другие вендоры также не отставали. Тем не менее, у Microsoft мы не могли увидеть такого функционала до сегодняшнего дня. Почему? Официального ответа мне найти не удалось, но можно говорить как об общей позиции (неприоритетная на то время задача), так и о чисто логических рассуждениях — в 2008 году с выходом Windows Server 2008 и последующей 2008 R2 говорить о вложенной виртуализации было не совсем актуально, ведь гипервизор был ещё во многом сыроват по многим направлениям (например max. vCPU упиралось в 4 шт.), а ситуация с конкурентами была такова, что Microsoft по сути вынужден был активно их догонять.

Архитектура

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

что такое вложенная виртуализация. Смотреть фото что такое вложенная виртуализация. Смотреть картинку что такое вложенная виртуализация. Картинка про что такое вложенная виртуализация. Фото что такое вложенная виртуализация

Раньше попытка развернуть роль Hyper-V внутри виртуальной машины непременно заканчивалась ошибкой:

что такое вложенная виртуализация. Смотреть фото что такое вложенная виртуализация. Смотреть картинку что такое вложенная виртуализация. Картинка про что такое вложенная виртуализация. Фото что такое вложенная виртуализация

Так происходило потому, что гипервизор намеренно маскировал от гостевых ОС наборы аппаратных инструкций (Virtualization Extensions), отвечающих за виртуализацию 2 — Intel VT-x и AMD-V (все мы помним, что Hyper-V — это система именно аппаратной виртуализации и без поддержки функционала со стороны «железа» работать не будет).

Теперь же архитектура изменилась таким образом, что появилась возможность передачи наборов аппаратных инструкций в гостевые ОС (по умолчанию этот функционал отключен):

что такое вложенная виртуализация. Смотреть фото что такое вложенная виртуализация. Смотреть картинку что такое вложенная виртуализация. Картинка про что такое вложенная виртуализация. Фото что такое вложенная виртуализация

Все это открывает возможности для вложенной виртуализации, которая при этом не ограничена вторым уровнем (Level 2 на рис. вверху).

Но как и у любой свежей технологии (в данном случае свежей именно для Microsoft), у неё есть некоторые ограничения, о которых ниже.

Ограничения

Условно можно разделить на аппаратные и программные.

Аппаратные

Аппаратные ограничения упираются в обязательную поддержку процессором Intel технологий VT-x 3 и EPT. Если наличие VT-x было стандартным требованиям и для ранних версий Hyper-V, то необходимость в EPT появилась только сейчас и только для вложенной виртуализации 4 :

что такое вложенная виртуализация. Смотреть фото что такое вложенная виртуализация. Смотреть картинку что такое вложенная виртуализация. Картинка про что такое вложенная виртуализация. Фото что такое вложенная виртуализация

И я ничего не забыл, не написав про процессоры AMD. Дело в том, что в Windows Server 2016 TP5 вложенная виртуализация на процессорах AMD пока что не поддерживается.

Программные

Программных ограничений значительно больше:

Для вложенных виртуальных машин не поддерживается:

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

Есть и обходной вариант — использовать NAT (это тоже новый функционал, о котором расскажу ниже).

Применение

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

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

Мне стало интересно проверить на реальной среде падение производительности ЦП внутри виртуальных машин разной степени вложенности. Для этого я использовал Hot CPU Tester Pro. Хоть и тестирование получилось исключительно субъективное, но оно как минимум намекает на существенное падение отдачи CPU:

что такое вложенная виртуализация. Смотреть фото что такое вложенная виртуализация. Смотреть картинку что такое вложенная виртуализация. Картинка про что такое вложенная виртуализация. Фото что такое вложенная виртуализация

Моего терпения хватило только для развертывания экземпляра третьей вложенности.

Настройка

Для возможности использовать вложенную виртуализацию, необходимо выполнить ряд настроек на хостовой ОС. Приступаем.

Обновление версии VM

Если по каким-либо причинам ваша виртуальная машина имеет версию конфигурации ниже 7.1 (например она смигрировала на ваш Hyper-V с предыдущих версий Technical Preview), то обязательно обновляем конфигурацию вручную, нажав правой кнопкой по VM и выбрав Обновить версию конфигурации:

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *