# StratoVirt Design ## Обзор StratoVirt — это легковесная технология виртуализации с открытым исходным кодом, основанная на Linux Kernel-based Virtual Machine (KVM). Она снижает потребление ресурсов памяти и улучшает скорость запуска виртуальных машин (ВМ), сохраняя при этом возможности изоляции и безопасности традиционной виртуализации. StratoVirt может применяться в микросервисных или бессерверных сценариях, таких как вычисления функций, и оставляет интерфейс и дизайн для импорта дополнительных функций, включая стандартную виртуализацию. ## Архитектура На следующей схеме показана базовая архитектура StratoVirt, состоящая из трёх слоёв сверху вниз: - Внешний API: StratoVirt использует протокол QMP для связи с внешними системами и совместим с OCI. В то же время StratoVirt можно управлять с помощью libvirt. - Загрузчик: отказ от традиционного режима загрузки BIOS + GRUB для быстрой загрузки в облегчённых сценариях и поддержка загрузки UEFI для стандартных ВМ. - Эмулированная материнская плата: - microvm: для повышения производительности и уменьшения поверхности атаки StratoVirt минимизирует симуляцию устройств пользовательского режима. Реализованы устройства моделирования KVM и устройства паравиртуализации, такие как GIC, последовательные, RTC и virtio-mmio устройства; - стандартная ВМ: реализация загрузки UEFI с использованием сконструированных таблиц ACPI. Устройства virtio-pci и VFIO могут быть подключены для значительного улучшения производительности ввода-вывода.  ## Функции - Высокая изоляция на основе аппаратного обеспечения; - Быстрая холодная загрузка: благодаря минималистичному дизайну microvm может быть запущен в течение 50 мс; - Низкое использование памяти: StratoVirt работает с объёмом памяти 4 МБ; - Улучшение ввода-вывода: StratoVirt предлагает нормальную способность ввода-вывода с минималистичной эмуляцией устройств ввода-вывода; - Совместимость с OCI: StratoVirt работает с контейнерами isula и kata и может быть идеально интегрирован в экосистему Kubernetes; - Поддержка нескольких платформ: полная поддержка платформ Intel и Arm; - Расширяемость: StratoVirt оставляет интерфейс и дизайн для добавления дополнительных функций, даже расширения до поддержки стандартной виртуализации; - Безопасность: менее 55 системных вызовов во время работы. ## Реализация ### Работающая архитектура - VM StratoVirt является независимым процессом в Linux. Процесс имеет три типа потоков: основной поток, поток VCPU и поток ввода-вывода: - Основной поток представляет собой цикл для асинхронного сбора и обработки событий от внешних модулей, таких как поток VCPU; - Каждый VCPU имеет поток для обработки ловушечных событий этого VCPU; - Потоки ввода-вывода могут быть настроены для устройств ввода-вывода для улучшения производительности ввода-вывода. ## Ограничения - Поддерживается только операционная система Linux. Рекомендуемая версия ядра — 4.19; - В качестве клиентской операционной системы поддерживается только Linux, рекомендуемая версия ядра — 4.19; - StratoVirt полностью протестирован на openEuler; - Поддерживает максимум 254 процессора.