Microsoft открыл код гипервизора OpenVMM и платформы паравиртуализации OpenHCL

Компания Microsoft объявила об открытии исходных текстов слоя для обеспечения паравиртуализации OpenHCL и монитора виртуальных машин OpenVMM, специально развиваемого для организации работы OpenHCL. Код OpenVMM и OpenHCL написан на языке Rust и распространяется под лицензией MIT. OpenVMM относится к гипервизорам второго уровня, работающим в одном кольце защиты с ядром операционной системы по аналогии с такими продуктами, как VirtualBox и VMware Workstation. Поддерживается работа поверх хост-систем на базе Linux (x86_64), Windows (x86_64, Aarch64) и macOS (x86_64, Aarch64), используя предоставляемые данными ОС API виртуализации KVM, SHV (Microsoft Hypervisor), WHP (Windows Hypervisor Platform) и Hypervisor.framework.

Среди возможностей, поддерживаемых в OpenVMM:

  • Загрузка в режимах UEFI и BIOS, прямая загрузка ядра Linux;
  • Поддержка паравиртуализации на базе драйверов Virtio (virtio-fs, virtio-9p, virtio-net, virtio-pmem)
  • Поддержка паравиртуализации на базе VMBus (storvsp, netvsp, vpci, framebuffer);
  • Эмуляция vTPM, NVMe, UART, чипсета i440BX + PIIX4, IDE HDD, PCI и VGA;
  • Бэкенды для проброса графики, устройств ввода, консоли, хранилищ и сетевого доступа;
  • Управление через интерфейс командной строки, интерактивную консоль, gRPC и ttrpc.

OpenHCL позиционируется как окружение с компонентами паравиртуализации (паравизор), работающее поверх гипервизора OpenVMM. Ключевой особенностью систем виртуализации на базе OpenVMM и OpenHCL является то, что компоненты для паравиртуализации выполняются не на стороне хост-системы, а в одной виртуальной машине с гостевой системой. Изоляции слоя паравиртуализации от гостевой операционной системы при этом обеспечивается силами гипервизора второго уровня OpenVMM. OpenHCL при таком применении может рассматриваться как виртуальная прошивка, выполняемая на более высоком уровне привилегий, чем запускаемая в гостевом окружении операционная система.

Разделение гостевой системы и компонентов OpenHCL осуществляется с использованием концепции виртуальных уровней доверия (VTL, Virtual Trust Level), для реализации которых могут использоваться как программные механизмы, так и аппаратные технологии, такие как Intel TDX (Trust Domain Extensions), AMD SEV-SNP (Secure Encrypted Virtualization-Secure Nested Paging) и ARM CCA (Confidential Compute Architecture). Для выполнения компонентов OpenHCL используется урезанная сборка ядра Linux, включающая только минимально необходимые компоненты, необходимые для работы OpenVMM.


OpenHCL может работать на платформах x86-64 и ARM64, и поддерживает расширения Intel TDX, AMD SEV-SNP и ARM CCA для дополнительной изоляции. В состав OpenHCL входит набор сервисов, драйверов и эмуляторов, применяемых для организации доступа к оборудованию, обеспечения работы виртуальных устройств на стороне гостевой системы и эмуляции аппаратных устройств (например, может эмулироваться чип для хранения криптографических ключей – vTPM).

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

В отличие от уже существующего открытого проекта COCONUT-SVSM (Secure VM Service Module), предоставляющего сервисы и эмулируемые устройства для гостевых систем, выполняемых в конфиденциальных виртуальных машинах (CVM, Confidential Virtual Machine), OpenHCL позволяет использовать в гостевых системах стандартные интерфейсы, в то время как COCONUT-SVSM требует организации специального взаимодействия с SVSM, внесения изменений в гостевую систему и использования отдельных драйверов.

Из применений паравизора OpenHCL упоминаются такие сценарии, как перевод существующих систем на использование аппаратных ускорителей Azure Boost без необходимости внесения изменений в дисковый образ гостевой системы; выполнение имеющихся гостевых систем в виртуальных машинах, обеспечивающих конфиденциальные вычисления (например, на базе Intel TDX и AMD SEV-SNP); организация верифицированной загрузки виртуальных машин, используя режим UEFI Secure Boot и vTPM.

Отдельно отмечается, что проект OpenVMM сфокусирован на использование с OpenHCL и пока не готов для обособленного применения на хост-системах для рабочих внедрений конечными пользователями. Из проблем OpenVMM, мешающих его использованию в хост-окружениях в традиционной контексте, вне связки с OpenHCL, упоминаются: плохое документирование управляющего интерфейса; отсутствие должной оптимизации производительности бэкендов для хранилищ, сети и графики; отсутствие поддержки некоторых драйверов (например, IDE-дисков и PS/2 мыши); нет гарантии стабильности API и функциональности. При этом связка из OpenVMM и OpenHCL уже достигла уровня промышленного внедрения и задействована Microsoft в платформе Azure (Azure Boost SKU) для обеспечения работы более 1.5 млн. виртуальных машин.

Release. Ссылка here.