В условиях стремительного роста количества разнообразных средств разработки и сторонних компонентов, а также стремительном развитии облачных технологий, возникает острая необходимость в высокопроизводительных виртуальных окружениях, способных исполнять самих себя (самовиртуализация). Однако исполнение каждого вложенного виртуального окружения приводит к деградации производительности и расходу дополнительных системных ресурсов.
Очевидно, что вложенная виртуализация – необходимый шаг в развитии, вследствие того, что всё чаще возникает необходимость в создании систем с изолированными потоками приложения и порождение изолированных дочерних сервисов. Использование вложенной виртуализации позволяет предоставить полный контроль над дочерними виртуальными окружениями родительскому потоку. Благодаря этому, при разработке программного обеспечения становиться возможны развертывание приложения на любое количество платформ без изменений кода и ущерба целостности системы.
Преимущества использования вложенной виртуализации позволяет лишить разработчиков проблемы масштабирования приложений и покрыть больший спектр платформ без изменения кода. Очевидно, что развертывание таких приложений сводиться к копированию виртуального окружения на целевое устройство.
Системы вложенной виртуализации должны обладать следующими требованиями:
Самовиртуализация
Способность запускать новое виртуальное окружение внутри другого виртуального окружения
Независимость от аппаратной архитектуры
Приложения написанные для виртуального окружения не должны знать об архитектуре аппаратной платформы и быть независимыми от неё благодаря использованию синтетического набора команд и библиотек виртуального окружения
При построении системы удовлетворяющей поставленные требования возникает две проблемы: получение максимальной производительности вложенных виртуальных окружений и распределение доступных ресурсов.
В данной статье мы рассмотрим только проблему с оптимизации производительности. Она связана с двумя факторами:
Выполнение единичной операции в виртуальной среде приводит к выполнению серии операций в родительской среде
Доступ к любому участку памяти виртуальной среды требует предварительного получения права доступа к соответствующей секции памяти родительской среды
Очевидно, что для каждой последующей степени вложенности виртуальной среды, описанные выше, накладные расходы возрастают.
Существует три наиболее эффективных метода решения проблемы производительности:
Метод разворачивания памяти
Данные метод предполагает, что выделение блоков памяти происходит не в самом виртуальном окружение, а в родительском окружении.
Метод доверительного исполнения
Метод основан на предварительной проверки блока кода на безопасность, после которой, указатель на данный блок кода и указатель на контекст виртуального окружения передается обработчику команд родительского окружения. Процесс передачи указателей продолжается, пока не будет достигнут обработчик команд реального окружения.
Метод понижения уровня вложенности
В основе метода лежит перенос среды исполнения обработчика команд. В данном подходе, обработкой команд виртуальной среды занимается обработчик команд размещенный в реальном окружении, а не в виртуальной среде. Данный метод предполагает, что обработчик команд способен самостоятельно отслеживать безопасность исполнения команд.
В данный момент существует академическая разработка AppFactory™ 0xGEN. В ней реализованы три описанных ранее метода, что позволяет исполнять единый код на любой из поддерживаемых аппаратных платформ.
Вложенная виртуализация открывает большие перспективы для разработчиков программного обеспечения, сервисов и провайдеров технических площадок. Однако данная проблематика всё еще слабо развита и требует дальнейшего исследований.
Литература:
Смит Е. Дж. Virtual Machines. – Уолтер: Morgan Kaufmann, 2005. – 656 с.
Ян Д. К. Virtual Machines. – Лондо: Springer, 205 – 284 с.
Реинхард В. Compiler Design: Virtual Machines – Лондон: Springer, 2011 - 200 с.
Бланден Б. Memory Management: Algorithms and Implementations in C/C++ – Барлингтон: Jones & Bartlett Publishers, 2002 – 360 с.
Бланден Б. Virtual Machine Design and Implementation C/C++ – Плано: Wordware Publishing, Inc, 2002 – 500 с.