Представлен TinyKVM для виртуализации на уровне отдельных процессов
Компания Varnish Software, разрабатывающая системы для построения сетей доставки и кэширования контента, представила открытый проект TinyKVM, развивающий инструментарий для изоляции выполнения отдельных процессов при помощи гипервизора KVM. Целью проекта заявлено создание самой быстрой системы sandbox-изоляции отдельных процессов, использующей аппаратную виртуализацию. Код проекта написан на языках C и С++, и распространяется под лицензией GPLv3 (для не готовых выполнять требования GPLv3 предоставляется коммерческая лицензия).
TinyKVM рассчитан на изолированный запуск любых консольных программ для Linux с производительностью, близкой к обычному выполнению. Накладные расходы на вызов каждого системного вызова составляют около 2 микросекунд. В качестве примера применения проекта упоминается дополнительная изоляция процессов в системах кэширования и обработки web-запросов. TinyKVM разработан для замены эмулятора libriscv, применяемого для изоляции обработки каждого web-запроса в платформе Varnish. Дополнительно создан вариант библиотеки libvmod, позволяющий выполнять модули к Varnish с использованием 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 микросекунд). В самой виртуальной машине не используются какие-либо драйверы, ввод/вывод и виртуальные устройства.
Источник: https://www.opennet.ru/opennews/art.shtml?num=62898