Изменения внутреннего устройства ядра Windows Server 2008 - Виртуализация машин

ОГЛАВЛЕНИЕ

Виртуализация машин

До появления Windows Server 2008 обеспечивающие виртуализацию продукты Майкрософт, включая Virtual Server 2005, реализовывались посредством виртуализации с размещением, как показано на рис. 5. В случае виртуализации с размещением виртуальные машины реализуются посредством монитора виртуальных машин (VMM), работающего наряду с основной операционной системой, как правило, в качестве драйвера устройств. VMM опирается на управление ресурсами и драйверы устройств основной операционной системы. Когда монитор выполняется в соответствии с графиком операционной системы, он распределяет интервалы времени ЦПУ между активными виртуальными машинами (VM).


Рис. 5 Виртуализация машин с размещением

Технология Hyper-V, ранее имевшая кодовое название «Viridian», реализуется с использованием виртуализации гипервизора. Гипервизор полностью управляет всеми аппаратными ресурсами, и даже операционная система Windows Server 2008, которая загружает систему и посредством которой осуществляется управление виртуальными машинами, работает, по существу, на виртуальной машине, как видно из рис. 6.


Рис. 6 Архитектура Hyper-V 

Гипервизор может разделить систему на несколько VM и рассматривать загрузочный экземпляр Windows Server 2008 как главный или корневой раздел, предоставляя ему непосредственный доступ к таким устройствам, как диск, сетевые адаптеры и графический процессор. Гипервизор предполагает, что корневой раздел осуществляет управление питанием и реагирует на события, связанные с автоматическими конфигурируемым оборудованием. Он перехватывает операции ввода-вывода устройств, инициированные в дочерних разделах, и направляет их в корневой раздел, который для доступа к оборудованию использует стандартные драйверы устройств Windows Server 2008. Таким образом серверы, на которых работает Hyper-V, могут воспользоваться преимуществом, обеспечиваемым поддержкой устройств операционной системой Windows.

Если Windows Server 2008 настраивается для выполнения серверной роли Hyper-V, Windows для параметра hypervisorimagelaunchtypeboot Boot Configuration Database (BCD) задает значение auto и настраивает драйвер устройств, Hvboot.sys для запуска на начальном этапе процесса загрузки. Если настроен этот режим, Hvboot.sys готовит систему для виртуализации, после чего загружает в память либо %Systemroot%\System32\Hvax64.exe, либо %Systemroot%\System32\Hvix64.exe, в зависимости от того, реализует система расширения виртуализации AMD-V или Intel VT CPU соответственно.

После загрузки гипервизор использует расширения виртуализации, чтобы внедриться ниже уровня операционной системы Windows Server 2008. Приложения пользовательского режима используют уровень привилегий Ring 3 процессора x64, а код режима ядра работает с привилегиями Ring 0, поэтому гипервизор работает на концептуальном уровне привилегий Ring минус 1, поскольку он может управлять средой выполнения кода, работающего на уровне Ring 0.

Если консоль управления Hyper-V используется для создания или запуска дочернего раздела, она взаимодействует с гипервизором посредством драйвера %Systemroot%\System32\Drivers\Winhv.sys, который использует открыто документированный интерфейс API гипервызова для создания нового раздела с указанными объемом физической памяти и характеристиками выполнения. Служба VM (%Systemroot%\System32\Vmms.exe) из корневого раздела создает рабочий процесс VM (%Systemroot%\System32\Vmwp.exe) для каждого дочернего раздела с целью управления его состоянием.

Один из способов, которым Windows повышает эффективность операционных систем дочерних VM, состоит в реализации как в Windows Server 2008, так и в Windows Vista «просветлений», представляющих собой последовательности кода, которые активируются только если операционная система работает на гипервизоре, реализующем интерфейс API Майкрософт для гипервызова. Запрашивая напрямую службы гипервызова, дочерняя VM избегает дополнительного кода виртуализации, который потребовался бы, если бы гипервизору пришлось угадывать намерения дочерней операционной системы.

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

Другой способ, которым Windows Server 2008 повышает производительность VM, заключается в ускорении доступа VM к устройствам. Производительность повышается за счет установки в дочерней операционной системе набора компонентов под общим названием «Компоненты интеграции VM».

Если VM работает без установки компонентов интеграции, дочерняя операционная система настраивает драйверы для тех эмулируемых устройств, которые ей представляет гипервизор. Гипервизор должен вступить в игру, когда драйвер устройства пытается вступить во взаимодействие с аппаратным ресурсом, чтобы предоставить информацию корневому разделу, который выполняет операции ввода-вывода с помощью стандартных драйверов устройств Windows от имени операционной системы дочерней VM. Поскольку одна высокоуровневая операция ввода-вывода, например чтение с диска, может повлечь много отдельных обращений к оборудованию, это может вызвать много операций передачи, называемых перехватами, в гипервизор и корневой раздел.

В Windows Server 2008 перехваты минимизируются с помощью трех компонентов: драйвера шины виртуальной машины (%Systemroot%\System32\Drivers\Vmbus.sys), клиентов виртуальных служб (VSC) и поставщиков виртуальных служб (VSP). Если на VM с поддерживаемой операционной системой устанавливаются компоненты интеграции, VSC берут на себя роль драйверов устройств и используют службы драйвера Vmbus.sys в дочерней VM для отправки запросов на операции ввода-вывода высокого уровня драйверу шины виртуальной машины в корневом разделе, используя для этого гипервызов и службы гипервизора, совместно использующие память. В корневом разделе Vmbus.sys перенаправляет запрос соответствующему VSP, который затем инициирует запросы стандартных операций ввода-вывода Windows I/O посредством драйверов устройств корневого раздела.

Очевидно, что Windows Server 2008, в которой появилась виртуализация Hyper-V на основе гипервизора, играет решающую роль в стратегии Майкрософт по виртуализации машин. Для получения дополнительных сведений об этих и других компонентах см. следующее издание моей книги «Microsoft Windows Internals» (Внутренняя структура Microsoft Windows), публикация которого запланирована на этот год.

Автор: Марк Руссинович