Глубины виртуализации Windows (часть 1) — где на самом деле работает ваш Windows? Гипервизор и разделы

· · Windows, Виртуализация, Hyper-V, Гипервизор, SLAT, VMBus

Откройте сведения о системе (msinfo32) в Windows 11 — и часто увидите «Работает» в поле «Безопасность на основе виртуализации», даже на машине, где вы никогда не создавали ВМ.

Что это значит — следующий факт. На этом ПК сам хостовый Windows уже работает поверх гипервизора. «Виртуализация» больше не технология только для тех, кто создаёт ВМ в диспетчере Hyper-V. В Windows 11 безопасность на основе виртуализации (VBS) включена по умолчанию на конфигурациях, которые удовлетворяют условиям — например, чистая установка на совместимом оборудовании1, — а и WSL2, и Windows Sandbox построены на том же гипервизоре Windows. Под Windows, которым вы пользуетесь каждый день, уже есть ещё один слой программного обеспечения.

Эта серия, «Глубины виртуализации Windows», прослеживает, что происходит в этом слое, начиная с основ.

«Глубины виртуализации Windows» — все 3 части

  1. Часть 1 (эта статья): гипервизор и разделы
    Прослеживаем, где оказывается хостовый Windows, когда включают Hyper-V.
  2. Часть 2: память, которую не видит даже ядро — VBS, HVCI и Credential Guard
    Прослеживаем, куда Windows кладёт секреты, которые не может прочитать ни администратор, ни ядро.
  3. Часть 3: виртуальные машины, которые загружаются за секунды — WSL2, Windows Sandbox и контейнеры
    Прослеживаем по тому, как разделяются память и образы, почему WSL2 и Sandbox легки, хотя полная ВМ тяжела.

Вопрос, на который отвечает часть 1, ровно один.

Когда включают Hyper-V, где оказывается хостовый Windows?

Целевые читатели — разработчики и эксплуатационщики, которые пользуются Hyper-V, WSL2 или Windows Sandbox и хотят понять с механизма, что работает внизу. Предпосылки — x64 Windows 10/11 или актуальный Windows Server (разбор колец, VT-x/AMD-V и EPT/RVI в этой статье предполагает x64; у Arm64 другой механизм, например уровни исключений). Нужный фон — примерно различие режима ядра и пользовательского режима; опыт операций с ВМ или знания по разработке гипервизоров не нужны. Сложность — средняя. Разбираем понятие расширений виртуализации ЦП, но в детали набора инструкций не заходим.

1. Сначала вывод

Когда люди слышат Hyper-V, они могут представить «программу для запуска ВМ, которая сидит поверх Windows». Фактическая структура — наоборот.

С момента, когда включают Hyper-V и перезагружаются, физическими ЦП и памятью управляет гипервизор, а хостовый Windows работает поверх него как первый привилегированный раздел — «корневой раздел».

Гипервизор — тонкий программный слой, который сидит между оборудованием и ОС, создаёт изолированные среды выполнения, называемые «разделами», и посредничает в доступе к оборудованию.2 Тот, в который попадает хостовый Windows, — корневой раздел; те, в которые попадают ВМ, — дочерние разделы. Корневой раздел обрабатывают особо (у него прямой доступ к физическим устройствам и он держит стек управления), но в том смысле, что он не управляет физическими ЦП напрямую, он стоит в той же позиции, что и дочерний раздел.

Общая структура после включения Hyper-VГипервизор сидит прямо на физическом оборудовании, а над ним — корневой раздел, который держит хостовый Windows, и дочерние разделы, которые держат ВМФизическое оборудованиеГипервизорКорневой раздел (хостовый Windows)Дочерние разделы (ВМ)Держит стек управления виртуализацией и драйверы устройств

Рис. 1: Hyper-V — не «ПО для ВМ поверх Windows», а слой, который уходит под Windows, и сама хостовая ОС работает внутри корневого раздела.

Можно подумать: «Если после включения ничего не чувствуется, неужели такая крупная инверсия действительно произошла?» Произошла. Именно поэтому эту структуру обычно не замечают. В этой статье мы разбираем эту одну схему по трём осям: ЦП, память и ввод-вывод устройств.

2. Со стороны ЦП — ещё одна привилегия ниже колец

2.1. Краткое повторение защиты кольцами

У x64-ЦП есть уровни привилегий (кольца), и Windows выполняет режим ядра в кольце 0, а пользовательский режим — в кольце 3. Приложения не могут трогать оборудование напрямую, потому что привилегированные инструкции из кольца 3 выполнить нельзя.

Так как же безопасно разместить несколько ядер ОС, каждое из которых работает в кольце 0, на одном физическом ЦП? Каждое ядро написано из допущения «я управляю ЦП». Дать кольцо 0 всем — они столкнутся; отказать — они не заработают.

Проблема нескольких ядер ОС, требующих кольцо 0И хостовое, и гостевое ядро написаны из допущения полной власти в кольце 0, поэтому одной традиционной лестницы колец недостаточно, чтобы безопасно разместить их на одном физическом ЦПХостовое ядро (исходит из кольца 0)Требует управление физ. ЦПГостевое ядро (исходит из кольца 0)Традиционные кольца не мирят этоНужен посредник выше кольца 0

Рис. 2: Лестница колец строилась из допущения одной ОС, поэтому размещение нескольких ядер требует ещё одной привилегии над ней.

2.2. Расширения виртуализации — режим, зарезервированный для гипервизора

То, что решает эту проблему, — расширения виртуализации ЦП (Intel VT-x/AMD-V). Hyper-V требует процессор с этой возможностью.2 Расширения виртуализации добавляют на оси, отдельной от традиционных колец, «режим выполнения для гипервизора» и «режим выполнения для гостей». Это привилегия ещё сильнее кольца 0, иногда прозванная «кольцо −1».

  • Гостевое ядро продолжает работать в кольце 0, как прежде. Переписывать его не нужно.
  • Однако это кольцо 0 — «кольцо 0 внутри гостевого режима», и оно не управляет физическим ЦП в целом.
  • Когда гость натыкается на конкретную операцию, которой нужно вмешательство гипервизора (инструкция, настроенная как перехват, или исключение, или нарушение), ЦП автоматически передаёт управление гипервизору (VM Exit). Когда гипервизор заканчивает обработку, он возвращается к гостю (VM Entry). Обычные обращения к памяти проходят без VM Exit, пока перевод SLAT успешен.

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

Поток выполнения гостя и VM ExitГостевое ядро и приложения работают в кольце 0 и кольце 3 в гостевом режиме; обычные обращения к памяти проходят через перевод SLAT, а настроенные перехваты и исключения вызывают VM Exit, который передаёт управление гипервизору, затем тот возвращается к гостю через VM EntryНетДаВыполнение в гостевом режиме (включая ядро кольца 0)Нужно вмешательство? (настроенные перехваты/исключения)Продолжить выполнение как естьVM Exit (ЦП передаёт управление)Гипервизор обрабатываетВернуться к гостю через VM Entry

Рис. 3: Гостевая ОС продолжает работать в кольце 0 без переписывания, и ЦП вызывает гипервизор только когда нужно.

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

2.3. Тип 1 и тип 2 — разница в том, где он сидит

Гипервизоры широко делят на тип 1 (bare-metal), который работает прямо на оборудовании, и тип 2 (hosted), который работает поверх хостовой ОС. Hyper-V — тип 1.3 VirtualBox и VMware Workstation (когда запускают автономно) относят к типу 2.

Услышав «тип 1», люди склонны представить «конфигурацию только для сервера без хостовой ОС», но Hyper-V другой. Хостовый Windows не исчезает — он «переезжает» в корневой раздел. Когда включают Hyper-V и перезагружаются, гипервизор стартует первым во время загрузки, а хостовый Windows затем поднимается как корневой раздел поверх него.

Разница между гипервизорами типа 1 и типа 2В типе 2 хостовая ОС сидит на оборудовании, а гипервизор и ВМ — на хостовой ОС, тогда как в типе 1 Hyper-V гипервизор сидит прямо на оборудовании, а сама хостовая ОС уходит в корневой раздел над нимТип 1 (Hyper-V)Тип 2 (hosted)ГипервизорОборудованиеКорневой раздел (хостовая ОС)ВМХостовая ОСОборудованиеГипервизорВМ

Рис. 4: В типе 2 гипервизор сидит на хостовой ОС, тогда как в типе 1 Hyper-V порядок обратный и сама хостовая ОС сидит на слое на одну ступень ниже.

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

Порядок загрузки после включения Hyper-VПосле включения питания гипервизор стартует первым во время загрузки, хостовый Windows затем поднимается как корневой раздел поверх него, а ВМ, VBS и подобное стартуют после этогоВключение и старт загрузкиГипервизор стартует первымХостовый Windows стартует как корневой разделВМ, VBS, WSL2 и так далее стартуют поверх этогоОщущения пользователя не меняются

Рис. 5: Обращение порядка уже закончено до появления экрана входа, и хостовая ОС поднимается на гипервизоре с самого начала.

3. Разделы — единица изоляции

3.1. Роли, которые есть только у корневого раздела

Раздел — логическая единица изоляции, которую даёт гипервизор.2 Однако не все разделы равны. Есть вещи, которые есть только у корневого раздела.

  • Прямой доступ к физическим устройствам. Драйверы устройств для дисков, сетевых адаптеров, GPU и подобного живут в Windows внутри корневого раздела, а не в гипервизоре. У Hyper-V на Windows Server есть конфигурация, которая назначает конкретное устройство PCIe напрямую дочернему разделу (Discrete Device Assignment); в этом случае корень отпускает это устройство (на клиентском Windows этого нет).4
  • Стек управления виртуализацией. VMMS (Virtual Machine Management Service), который управляет созданием, запуском и остановкой ВМ, и рабочий процесс на каждую ВМ (vmwp.exe) работают в пользовательском режиме в корневом разделе.5 Это часть функций управления ВМ Hyper-V, поэтому на хосте, где гипервизор работает только ради VBS или WSL2, их может не быть.
  • Право создавать дочерние разделы. Корневой раздел создаёт дочерние разделы через API гипервызовов (интерфейс вызова в гипервизор).2

У этой конструкции есть причина. Если положить каждый драйвер устройства в сам гипервизор, гипервизор станет огромным, а число ошибок и точек входа атаки вырастет. Гипервизор ограничивается минимальной работой посредничества по ЦП и памяти и оставляет заботу об устройствах Windows в корневом разделе. Это разделение ролей и держит Hyper-V тонким.

Разделение ролей корневого и дочерних разделовКорневой раздел держит стек управления виртуализацией и драйверы физических устройств и создаёт дочерние разделы через гипервызовы; дочерний раздел обычно видит только виртуальные устройства, а при Discrete Device Assignment на Windows Server обращается к назначенному устройству напрямуюКорневой разделСоздать и управлять через гипервызовыДочерний разделГостевая ОСВ обычной конфигурации видны только вирт. устройстваVMMS и рабочие процессыДрайверы физ. устройствГипервизор (ограничивается посредничеством ЦП и памяти)

Рис. 6: То, что драйверы устройств и стек управления лежат на стороне корневого раздела, и держит сам гипервизор тонким.

3.2. Мир, каким его видит дочерний раздел

Гостевая ОС в дочернем разделе в обычной конфигурации виртуальных устройств не видит физическое оборудование напрямую (единственное исключение — устройство, назначенное через Discrete Device Assignment на Windows Server, как в предыдущем разделе). Что она видит — виртуальные процессоры, пространство памяти, которое кажется её собственным, и виртуальные устройства. Запросы к виртуальным устройствам пересылаются в корневой раздел через VMBus или гипервизор.2 Распределение процессорного времени и перевод памяти через SLAT, с другой стороны, гипервизор обрабатывает напрямую, не заходя в корень. То, чем корень посредничает, — ввод-вывод устройств, а не каждый физический ресурс.

Мир, каким его видит дочерний разделЧто видит гостевая ОС — виртуальные процессоры, пространство памяти, частное для раздела, и виртуальные устройства; запросы к виртуальным устройствам пересылаются в корневой раздел через VMBus и подобное, время ЦП и перевод памяти обрабатывает гипервизор напрямую, а в конфигурации Discrete Device Assignment на Windows Server только назначенные устройства доступны напрямуюГостевая ОСВирт. процессорыПамять / устройства?Частное пространствоВирт. устройстваПереслано в кореньЧерез VMBusФиз. ЦП / ОЗУ / устр.Не видно напрямуюDDA: назначенныеWindows Server

Рис. 7: В обычной конфигурации виртуальных устройств всё, что видит гость, — виртуальное окно, и путь к физическому идёт через посредника; исключение — только устройство, назначенное через DDA на Windows Server.

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

4. Со стороны памяти — перевод адреса получает ещё один уровень

4.1. Три вида адресов

В части 1 серии про память мы прослеживали поток, которым виртуальный адрес переводится через таблицу страниц в физический адрес («Момент, когда виртуальный адрес становится физической ОЗУ»). В виртуализированной среде под этим переводом добавляется ещё один уровень, и видов адресов становится три.

Адрес Сокр. Кто управляет
Гостевой виртуальный адрес GVA Таблица страниц гостевой ОС
Гостевой физический адрес GPA Адрес, который гостевая ОС считает «физическим»
Системный физический адрес SPA Гипервизор (фактическое место в ОЗУ)

Гостевая ОС переводит GVA в GPA своей таблицей страниц. Однако GPA, который видит гость, — не настоящий физический адрес; это частное пространство памяти, выделенное каждому разделу.2 Отображение GPA на фактическое место в ОЗУ (SPA) — работа гипервизора.

4.2. SLAT — двухуровневый перевод аппаратно

Если делать этот перевод второго уровня только программно, гипервизору придётся отслеживать каждое обновление гостевой таблицы страниц по одному, что с точки зрения производительности нереалистично. Поэтому ЦП даёт механизм, который обходит таблицы перевода второго уровня аппаратно. Это SLAT (Second Level Address Translation); реализации — Intel EPT (Extended Page Tables) и AMD RVI. Актуальный Hyper-V требует 64-разрядный процессор с поддержкой SLAT.4

Двухуровневый перевод адреса через SLATГостевой виртуальный адрес переводится в гостевой физический таблицей страниц гостевой ОС, затем дальше переводится в системный физический адрес SLAT, которым управляет гипервизор, и достигает фактической ОЗУТаблица страниц гостевой ОСSLAT (таблицы перевода EPT/RVI)Гостевой вирт. адрес (GVA)Гостевой физ. адрес (GPA)Системный физ. адрес (SPA)Физическая ОЗУСлой, который гость лишь считает физическим

Рис. 8: Под таблицей страниц гостя сидит ещё одна таблица перевода, которой управляет гипервизор, и ЦП обходит обе аппаратно.

SLAT — не возможность, которая существует только ради эффективности выполнения ВМ. VBS, которую мы увидим в части 2, использует свойство «можно иметь разную таблицу перевода SLAT на уровень привилегий» как материал границы безопасности. Причина, по которой можно создать память, которую не видит даже ядро, в том, что гипервизор держит этот перевод второго уровня. Это становится сквозной линией всей серии, поэтому запомните один пункт: «владелец таблиц перевода — гипервизор».

5. Со стороны ввода-вывода устройств — VMBus и два вида устройств

5.1. Пределы эмулируемых устройств

Классический способ показать устройство дочернему разделу — полностью имитировать настоящее оборудование (например, старый контроллер IDE) программно. Совместимость высока, потому что встроенные драйверы гостевой ОС работают как есть, но VM Exit происходит каждый раз, когда гость попадает в порт ввода-вывода, и производительность не масштабируется.

Почему ввод-вывод к эмулируемому устройству медленныйКаждый раз, когда гость оперирует портом ввода-вывода, управление передаётся на сторону гипервизора через VM Exit, устройство имитируется программно, и гостя возвращают, поэтому круговой путь повторяется и медленныйПовторяется на следующей операции портаГость оперирует портом I/OПроисходит VM ExitУстройство эмулируется программноВернуться к гостю через VM Entry

Рис. 9: Этот круговой путь выполняется много раз за одним обращением к диску, и цена совместимости платится производительностью.

5.2. VMBus и VSP/VSC — быстрый путь, спроектированный для виртуализации

Поэтому у Hyper-V есть механизм «синтетического устройства», спроектированный из допущения виртуализации. Есть три действующих лица.2

  • VMBus: логический канал связи между разделами. Даёт высокоскоростное межраздельное взаимодействие, которое использует разделяемую память.3
  • VSP (Virtualization Service Provider): служба, которая живёт на стороне корневого раздела, принимает запросы устройств от дочернего и мостит их в стек устройств/серверной части на стороне корня. Запрос может достичь физического устройства или обрабатываться серверной частью на стороне хоста вроде виртуального диска или виртуального коммутатора.
  • VSC (Virtualization Service Consumer): драйвер синтетического устройства, который входит в гостевую ОС на стороне дочернего раздела. Он отправляет запросы VSP по VMBus.

Взяв запрос хранения гостевой ОС как пример, поток выглядит так. WriteFile гостевого приложения спускается по стеку ввода-вывода гостевого ядра и внизу достигает VSC (вместо настоящего оборудования). VSC кладёт запрос на VMBus и передаёт его VSP в корневом разделе, а VSP вливает запрос в стек ввода-вывода на стороне корня. В конфигурации виртуального диска (VHDX) эта запись обрабатывается как запись в файл VHDX на хосте и в конце концов достигает физического диска. Этот подход называют Enlightened I/O (ввод-вывод, который знает о виртуализации), и он повышает эффективность, обходя слой эмуляции устройств.2

Путь ввода-вывода синтетического устройстваЗапрос ввода-вывода от приложения в дочернем разделе достигает VSC через гостевое ядро, пересекает VMBus к VSP в корневом разделе и на стеке ввода-вывода стороны корня, в который VSP мостит, может достичь настоящего устройства через драйвер физического устройства или обрабатываться серверной частью хоста вроде виртуального диска или виртуального коммутатораVMBusПриложение в дочернем разделеСтек I/O гостевого ядраVSC (драйвер синтетического устройства)VSP (сторона корневого раздела)Стек I/O стороны корняДрайвер физ. устройстваСерверная часть хоста (вирт. диск, вирт. коммутатор и так далее)Физическое устройство

Рис. 10: С синтетическим устройством гостевой ввод-вывод пересекает к корневому разделу по VMBus и через стек стороны корня достигает настоящего устройства или серверной части хоста.

Иными словами, быстр ли дисковый ввод-вывод или сеть ВМ, зависит не только от стороны гостя, но и от состояния стека ввода-вывода и драйверов устройств на стороне корневого раздела. Причина, почему наблюдение со стороны хоста незаменимо, когда расследуете проблему производительности ВМ, в том, что путь на самом деле проходит через хост.

Эмулируемые устройства против синтетических устройствЭмулируемое устройство имитирует настоящее оборудование, чтобы встроенные гостевые драйверы работали, но медленное; синтетическое устройство — целевой драйвер, который исходит из VMBus, и быстроеУстройство, показанное дочернему разделуЭмулируемое устройствоСинтетическое устройствоЭмулирует настоящее оборудование; совместимость прежде всегоНужно вмешательство на каждом I/O; медленноСпроектировано вокруг VMBus; быстроТребует подходящий драйвер в госте

Рис. 11: Из двух видов виртуальных устройств эмулируемые несут совместимость сразу после установки ОС, а синтетические — производительность в повседневном использовании.

6. Почему это не чужая проблема, даже если вы никогда не используете ВМ

Структура до сих пор может выглядеть как «история для тех, кто поднимает ВМ». Как сказано во вступлении, однако, на актуальном Windows гипервизор — часть повседневности.

  • Безопасность на основе виртуализации (VBS). Использует гипервизор Windows, чтобы создать изолированную среду, и размещает там функции безопасности. В Windows 11 включена по умолчанию, когда удовлетворены условия вроде чистой установки на совместимом оборудовании.1 Подробности — в части 2.
  • WSL2. Запускает настоящее ядро Linux внутри лёгкой служебной ВМ.6
  • Windows Sandbox. Одноразовая среда Windows, изолированная гипервизором.7 Оба разобраны в части 3.
Повседневные функции, которые сидят на одном гипервизореНе только ВМ Hyper-V, но и VBS, которая включена по умолчанию на устройствах, удовлетворяющих условиям вроде чистой установки, плюс WSL2 и Windows Sandbox — все построены на одном гипервизоре WindowsГипервизор WindowsВМ Hyper-VVBS (вкл. по умолч. на чистых установках и подобном)WSL2Windows SandboxПочему работает даже на ПК, которые никогда не используют ВМ

Рис. 12: Основание одно, и на этой схеме рушится допущение «виртуализация — история для тех, кто пользуется ВМ».

Ещё одна вещь, на которую на практике часто наступают, — сосуществование со сторонним ПО виртуализации. Поскольку гипервизор монопольно использует расширения виртуализации ЦП, в среде, где работает гипервизор Windows, VirtualBox и подобное не могут работать традиционным способом (способом, который сам использует расширения виртуализации ЦП). Для этого предусмотрен открытый API под названием Windows Hypervisor Platform, и сторонний стек виртуализации может работать, садясь поверх гипервизора Windows.8 Актуальные VirtualBox/VMware могут сосуществовать с WSL2 благодаря этому механизму, но различия в производительности и возможностях, которые приходят со сменой режима, иногда наблюдают как «после того как я включил Hyper-V (или VBS), ПО виртуализации стало вести себя иначе».

Кто владеет расширениями виртуализации ЦП и путь для стороннего ПО виртуализацииПока гипервизор Windows работает, он монопольно владеет расширениями виртуализации ЦП; стороннее ПО виртуализации, которое поддерживает WHP, работает поверх него через Windows Hypervisor Platform, а реализации без поддержки WHP не могут работать или ограниченыНетДаРасширения виртуализации ЦП (VT-x/AMD-V)Гипервизор Windows работает?Стороннее ПО может использовать напрямуюГипервизор использует монопольноWindows Hypervisor PlatformСтороннее ПО с WHP работает поверхРеализации без поддержки не работают или ограничены

Рис. 13: Владелец расширений виртуализации один, и единственное стороннее ПО, которое может сосуществовать, пока гипервизор работает, — ПО, которое поддерживает открытый API (WHP).

7. Посмотрите сами

На своей машине можно подтвердить, работает ли гипервизор.

Сначала проверка, которую можно запустить без прав администратора.

# Whether we are running on top of a hypervisor
(Get-CimInstance Win32_ComputerSystem).HypervisorPresent

# VBS status (same source as "Virtualization-based security" in msinfo32)
Get-CimInstance -Namespace root/Microsoft/Windows/DeviceGuard `
    -ClassName Win32_DeviceGuard |
    Select-Object VirtualizationBasedSecurityStatus

VirtualizationBasedSecurityStatus возвращает состояние работы VBS числом (2 — «Работает»).9

Одна оговорка. Всё, что говорит HypervisorPresent, — «работаем ли мы поверх гипервизора»; корень от дочернего он не различает. Если запустить на Windows внутри ВМ, он всё равно вернёт True как дочерний раздел. Если True на Windows на физическом ПК, этот Windows внутри корневого раздела — читайте вместе со средой выполнения.

Далее классика из командной строки.

systeminfo

Смотрите «Hyper-V Requirements» в конце вывода. На машине, где гипервизор ещё не работает, перечислены отдельные требования — поддержка SLAT, включены ли расширения виртуализации и так далее. На машине, где гипервизор уже работает, вместо требований одна строка: «A hypervisor has been detected. Features required for Hyper-V will not be displayed.»4 Поэтому эта одна строка — утверждение, что ваш Windows работает поверх какого-то гипервизора. Как и с HypervisorPresent, нужно читать это как «внутри корневого раздела» на физическом ПК или «как дочерний раздел» внутри ВМ.

Даже если каждое требование systeminfo — «Yes», это значит только, что сторона оборудования готова. Сама возможность Hyper-V есть в редакциях Pro, Enterprise и Education и нет в Home.10

В графическом интерфейсе проверьте строку «Безопасность на основе виртуализации» в «Сведениях о системе» в msinfo32. Заметьте: «Виртуализация: включено» на панели ЦП Диспетчера задач показывает только включены ли расширения виртуализации в прошивке, что отдельная информация от того, работает ли гипервизор.

Как проверить, работает ли гипервизорЕсли systeminfo говорит, что гипервизор обнаружен, вы работаете на гипервизоре (внутри корневого раздела на физическом ПК); если появляется список Hyper-V Requirements, он ещё не работает, поэтому проверяете каждое требование вроде SLAT, VM Monitor Mode Extensions и DEP, но все Yes значат только, что сторона оборудования готова, а у возможности Hyper-V ещё есть требование редакцииDetectedListedВсе YesНекоторые NoЗапустить systeminfoПоле требований?Гипервизор работаетВнутри корняна физическом ПКЕщё не работаетВсе требования Yes?Сторона оборудования готоваНужен Pro / Ent / EduПроверить пункты UEFI/BIOS

Рис. 14: Поле «Hyper-V Requirements» в systeminfo служит и проверкой состояния работы, и проверкой предпосылок.

8. Три прочтения, которых стоит избегать на практике

8.1. «Мы не включали Hyper-V, так что виртуализация к нашим ПК не относится»

Даже если вы не включали возможность Hyper-V (средства управления и среду выполнения ВМ), гипервизор Windows работает, если включён VBS. Когда расследуете проблему совместимости драйвера, тест производительности или неприятность со сторонним ПО виртуализации, проверяйте HypervisorPresent и состояние работы VBS — не то, включена ли возможность.

8.2. «Диспетчер задач говорит „Виртуализация: включено“, значит Hyper-V работает»

Это отображение — о настройке прошивки (доступны ли VT-x/AMD-V). Состояние работы гипервизора судите по «A hypervisor has been detected» в systeminfo. Наоборот, если Диспетчер задач говорит «Отключено», включить Hyper-V или WSL2 тоже нельзя, поэтому сначала проверьте настройки UEFI/BIOS.

Три проверки, которые легко перепутатьПоле виртуализации Диспетчера задач показывает настройку прошивки, список компонентов Windows — состояние установки, а systeminfo или HypervisorPresent — состояние работы; каждое отвечает на другой вопросКакой вопрос?Прошивка или Windows?Гипервизор работает?Расширения прошивки?Возможность Hyper-V вкл.?Панель ЦП Диспетчера задачИнтерфейс компонентов WindowssysteminfoHypervisorPresent

Рис. 15: Это три независимых вопроса, и выводить два других из любого одного отображения — ошибочное прочтение.

8.3. «Если ВМ медленная, это проблема гостевой ОС»

Ввод-вывод синтетического устройства пересекает VMBus к VSP в корневом разделе и идёт через стек устройств/серверной части стороны корня (физические драйверы плюс обработка виртуального коммутатора и виртуального диска). Если смотреть только счётчики внутри гостя, узкое место, которое сидит в хранилище или сетевом адаптере на стороне хоста, вы не найдёте. Принцип для проблем производительности ВМ — наблюдать с обеих сторон: гость и хост (корневой раздел).

9. Итоги

  • Когда включают Hyper-V, гипервизор работает прямо на оборудовании, а хостовый Windows работает как корневой раздел.2
  • Ядро гостевой ОС продолжает работать в кольце 0, и только операции, настроенные как перехваты, плюс исключения передаются гипервизору через VM Exit. Обычные обращения к памяти проходят через перевод SLAT.
  • Только корневой раздел держит драйверы физических устройств и стек управления виртуализацией и создаёт дочерние разделы через гипервызовы.2
  • Память становится двухуровневым переводом GVA→GPA→SPA, и второй уровень обрабатывается аппаратно SLAT (EPT/RVI). Актуальный Hyper-V требует SLAT.4
  • Вводом-выводом устройств доминирует путь синтетического устройства VSC→VMBus→VSP, и производительность зависит также от стека ввода-вывода на стороне хоста.2
  • В Windows 11, поскольку VBS включена по умолчанию на устройствах, которые удовлетворяют условиям вроде чистой установки, не необычно, что гипервизор работает даже на ПК, который никогда не использует ВМ.1 Состояние работы можно подтвердить через HypervisorPresent и systeminfo.

Общая картина части 1 сжимается в эту одну схему.

Общая картина части 1Гипервизор сидит под корневым разделом и дочерними разделами; ЦП распределяются планированием виртуальных процессоров (VM Exit только на настроенных перехватах и исключениях), память посредничается двухуровневым переводом SLAT, ввод-вывод синтетических устройств пересылается по VMBus и обрабатывается VSP корневого раздела, а у эмулируемых устройств и Discrete Device Assignment другие путиКорень + дочерние разделыГипервизорЦП: планировать VPПамять: SLATVM Exit на перехватеДвухуровневый переводУстройства: I/O VMBusОбрабатывает VSP стороны корняЭмулируемые / DDA: другие

Рис. 16: Планирование ЦП и перевод памяти гипервизор обрабатывает напрямую (VM Exit только при вмешательстве), а ввод-вывод синтетических устройств посредничает корневой раздел (VSP) по ту сторону VMBus.

Продолжение в части 2, «Память, которую не видит даже ядро — VBS, HVCI и Credential Guard».

Берём сквозную линию этой статьи — что гипервизор держит таблицы перевода SLAT — и прослеживаем, как Windows создаёт «память, которую не может прочитать ни администратор, ни ядро».

Похожие статьи

Смежные области консультирования

KomuraSoft LLC занимается проектированием сред проверки Windows-приложений, расследованием производительности в виртуализированных средах и анализом проблем совместимости драйверов и периферии.

Справочные ссылки

  1. Microsoft Learn, Silicon assisted security. О том, что VBS использует аппаратную виртуализацию, чтобы изолировать Secure Kernel от обычной ОС, и о том, что VBS и HVCI включены по умолчанию на устройствах, которые удовлетворяют предпосылкам при новой установке Windows 11.  2 3

  2. Microsoft Learn, Hyper-V Architecture. О том, что гипервизор даёт разделы как единицу изоляции; корневой раздел создаёт дочерние разделы через API гипервызовов; разделы работают в частном виртуальном пространстве памяти без прямого доступа к физическим процессорам; о ролях VMBus, VSP, VSC и Enlightened I/O; и о том, что требуются аппаратные расширения виртуализации (Intel VT/AMD-V).  2 3 4 5 6 7 8 9 10 11 12

  3. Microsoft Learn, Hyper-V architecture (Performance Tuning). О том, что Hyper-V — гипервизор типа 1, корневой раздел владеет физическими устройствами ввода-вывода, а VMBus даёт высокопроизводительное межраздельное взаимодействие, которое использует разделяемую память.  2

  4. Microsoft Learn, System requirements for Hyper-V on Windows and Windows Server. О том, что требуются 64-разрядный процессор с поддержкой SLAT и VM Monitor Mode Extensions; о возможности подтвердить, что требования выполнены, в поле «Hyper-V Requirements» systeminfo; о том, что пока гипервизор работает, отображается «A hypervisor has been detected»; и о том, что Discrete Device Assignment может назначить конкретное устройство напрямую дочернему разделу.  2 3 4

  5. Microsoft Learn, Appendix B: Hyper-V Architecture and Feature Overview. О том, что VMMS (Virtual Machine Management Service) управляет состоянием ВМ в дочерних разделах, и для каждой ВМ в пользовательском режиме в корневом разделе стартует рабочий процесс (VMWP). 

  6. Microsoft Learn, Comparing WSL Versions. О том, что WSL2 запускает настоящее ядро Linux внутри лёгкой служебной ВМ, и об оговорках при совместном использовании с актуальными VMware и VirtualBox. 

  7. Microsoft Learn, Windows Sandbox architecture. О том, что Windows Sandbox — лёгкая среда Windows, которая сочетает технологию контейнеров с изоляцией гипервизором. 

  8. Microsoft Learn, Windows Hypervisor Platform. О том, что предусмотрен API пользовательского режима, чтобы сторонний стек виртуализации мог создавать и управлять разделами поверх гипервизора Windows. 

  9. Microsoft Learn, Enable Hotpatch for Azure Arc-enabled servers. О том, что состояние работы VBS (виртуального безопасного режима) можно подтвердить через VirtualizationBasedSecurityStatus класса Win32_DeviceGuard. 

  10. Microsoft Learn, Install Hyper-V. О том, что Hyper-V можно включить в Windows 10/11 Pro или Enterprise и подобном и нельзя установить в редакции Home. 

Недавние статьи с теми же тегами помогут подробнее изучить близкие темы.

Глубины виртуализации Windows (часть 3) — виртуальные машины, которые загружаются за секунды: почему WSL2, Windows Sandbox и контейнеры такие лёгкие

Почему WSL2 и Windows Sandbox стартуют за секунды и ощущаются такими лёгкими? Статья разбирает механизмы — от динамического базового обра...

Эти страницы показывают тему статьи в более широком контексте услуг и решений.

Статья напрямую связана со следующими услугами.

Частые вопросы

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

Когда включают Hyper-V, где на самом деле работает хостовый Windows?
Гипервизор берёт прямой контроль над тем, как распределяются физические ЦП и память, а хостовый Windows работает внутри особого раздела, который называется корневым разделом. Управление физическими устройствами обычно выполняют драйверы на стороне корневого раздела. Корневой раздел держит драйверы устройств и стек управления виртуализацией, но владение физическими ЦП принадлежит гипервизору.
Значит ли «Виртуализация: включено» в Диспетчере задач, что Hyper-V работает?
Нет. Это отображение показывает, включены ли расширения виртуализации ЦП (Intel VT-x/AMD-V) в прошивке. Чтобы увидеть, работает ли гипервизор на самом деле, ищите «A hypervisor has been detected» в systeminfo или проверяйте Win32_ComputerSystem.HypervisorPresent.
Почему гипервизор работает, хотя я никогда не создавал ВМ?
В Windows 11 безопасность на основе виртуализации (VBS) включена по умолчанию на устройствах, которые удовлетворяют условиям — например, чистая установка на совместимом оборудовании, — а VBS построена на гипервизоре Windows. То же верно, если вы используете WSL2 или Windows Sandbox. То, что гипервизор работает без всякой связи с использованием ВМ, — не редкость.
Что такое SLAT и почему он обязателен для Hyper-V?
SLAT (Second Level Address Translation) — механизм, которым ЦП переводит гостевые физические адреса в настоящие физические; реализации — Intel EPT и AMD RVI. Без него гипервизору пришлось бы вести таблицы перевода программно, что с точки зрения производительности нереалистично, поэтому актуальный Hyper-V считает это жёстким требованием.
Если включить Hyper-V, перестанут ли работать VirtualBox и VMware?
Поскольку гипервизор монопольно использует расширения виртуализации ЦП, сторонний гипервизор не может работать традиционным способом. Однако актуальные VirtualBox и VMware имеют режим, который работает поверх гипервизора Windows (через Windows Hypervisor Platform), поэтому недавние версии каждого могут сосуществовать.

Об авторе

Страница с профилем автора статьи.

Го Комура

Представитель KomuraSoft LLC

Специализируется на разработке программного обеспечения для Windows, техническом консалтинге и расследовании сбоев, особенно в проектах с унаследованными системами и трудно воспроизводимыми ошибками.

Публичные ссылки

Вернуться в блог