# 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 могут быть подключены для значительного улучшения производительности ввода-вывода.

![image](images/StratoVirt-arch.jpg)

## Функции

- Высокая изоляция на основе аппаратного обеспечения;
- Быстрая холодная загрузка: благодаря минималистичному дизайну 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 процессора.