Представлен TinyKVM для виртуализации на уровне отдельных процессов

Компания Varnish Software, разрабатывающая системы для построения сетей доставки и кэширования контента, представила открытый проект TinyKVM, развивающий инструментарий для изоляции выполнения отдельных процессов при помощи гипервизора KVM. Целью проекта заявлено создание самой быстрой системы sandbox-изоляции отдельных процессов, использующей аппаратную виртуализацию. Код проекта написан на языках C и С++, и распространяется под лицензией GPLv3 (для не готовых выполнять требования GPLv3 предоставляется коммерческая лицензия).

TinyKVM рассчитан на изолированный запуск любых консольных программ для Linux с производительностью, близкой к обычному выполнению. Накладные расходы на вызов каждого системного вызова составляют около 2 микросекунд. В качестве примера применения проекта упоминается дополнительная изоляция процессов в системах кэширования и обработки web-запросов. TinyKVM разработан для замены эмулятора libriscv, применяемого для изоляции обработки каждого web-запроса в платформе Varnish. Дополнительно создан вариант библиотеки libvmod, позволяющий выполнять модули к Varnish с использованием TinyKVM.


Представлен TinyKVM для виртуализации на уровне отдельных процессов

Представлен TinyKVM для виртуализации на уровне отдельных процессов

При запуске при помощи TinyKVM машинный код программ выполняется без эмулирующих прослоек на CPU и ограничивается при помощи API гипервизора KVM, что позволяет исключить накладные расходы и добиться производительности близкой к выполнению без виртуализации. Основные возможности TinyKVM:

  • Ограничение максимального времени исполнения. Программа может быть принудительно остановлена после истечения таймаута, без вызова обработчиков сигналов и потоков.
  • Ограничение потребления памяти.
  • Возможность ответвления (fork) неинициализированных экземпляров виртуальных машин от одного инициализированного экземпляра изолированной программы. Копии виртуальных машин создаются в режиме copy-on-write, что позволяет существенно экономить память, храня только один экземпляр общих данных.
  • Ответвлённые процессы могут сбрасываться в предыдущее состояние (например, ответвлённый обработчик http-запросов может без перезапуска возвращаться в исходное состояние после обработки каждого запроса). Экземпляр изолированного процесса также может быть сброшен до состояния другой виртуальной машины, а не той из которой он был ответвлён, но накладные расходы в этому случае будут выше так как потребуется изменение таблицы страниц памяти.
  • Возможность создания статических страниц памяти во время инициализации, пригодных даже для изощрённых runtime, например, как в языке Go. В этом случае изменение допускается только для страниц, находящихся в режиме copy-on-write.
  • Поддержка удалённой отладки при помощи GDB. Возможна отладка на лету с возобновлением исполнения.

Гостевое окружение TinyKVM образует урезанное ядро, защищённого от изменений, собранное с включением зашиты страниц памяти и использующее SMAP (Supervisor Mode Access Prevention) и SMEP (Supervisor Mode Execution Prevention) для дополнительной изоляции между ядром и пространством пользователя. TinyKVM использует большие страницы памяти (hugepage) для повышения производительности. Вызываемые программами системные вызовы перехватываются эмулятором и перенаправляются в хост-окружение (задержка на обработку и трансляцию эмулируемого вызова составляет около 2 микросекунд). В самой виртуальной машине не используются какие-либо драйверы, ввод/вывод и виртуальные устройства.


Представлен TinyKVM для виртуализации на уровне отдельных процессов


Источник: opennet.ru

Добавить комментарий