В рамках проекта HermiTux развивается unikernel, бинарно совместимый с Linux
7 апреля 2019 года
Группа исследователей из Политехнического университета Виргинии (США), компании Qualcomm и Рейнско-Вестфальского технического университета Ахена (Германия) развивает легковесное ядро HermiTux, соответствующее парадигме "unikernel". HermiTux позволяет напрямую запускать приложения поверх гипервизора без дополнительных прослоек, обеспечивая бинарную совместимость с приложениями для Linux на уровне ABI. Код написан на языке Си и распространяется под лицензией BSD.
HermiTux предоставляет минимальное окружение операционной системы со своим ядром, которое потребляет существенно меньше ресурсов, чем при создании окружений на базе штатного ядра Linux, и позволяет очень быстро запускать приложения поверх гипервизора - время загрузки не превышает 0.1 сек. В тестах производительности HermiTux отстал от окружений с обычным ядром Linux примерно на 3%, что обусловлено накладными расходами на проброс ввода/вывода на сторону хост-системы. Потребление памяти в тестовом окружении составило 9 Мб, что в 10 раз меньше, чем при использовании ядра Linux (потребление Docker составило около 2 Мб за счёт использования общего с хост-окружением ядра без применения полноценной виртуализации).
Возможность запуска немодифицированных приложений, собранных для Linux, осуществляется через поддержку формата ELF, реализацию системных вызовов Linux и эмуляцию виртуальных ФС. На текущем этапе развития HermiTux реализует 83 системных вызова. Всего ядром Linux предоставляется более 350 системных вызовов, но только небольшая часть из них используется в реальных приложениях (для охвата 90% программ из обычных дистрибутивов достаточно реализовать 200 системных вызовов).
Для сокращения задержек в процессе обработки системных вызовов реализован опциональный механизм переопределения (rewrite) обращений к системным вызовам в вызов типовых функций ядра, позволяющий обойтись без выполнения достаточно ресурсоёмкой инструкции syscall (так как в HermiTux используется общее адресное пространство нет смысла в использовании вызова syscall). Для статически связанных приложений возможна замена в исполняемом файле инструкций syscall на вызовы функций. Для динамически связанных приложений замена осуществляется на уровне стандартной библиотеки.
Кроме того, подготовлены инструменты для анализа системных вызовов, задействованных в исполняемых файлах, которые позволяют собрать минимальный образ HermiTux, включающий лишь код, необходимый для обработки только используемых в приложении системных вызовов. С точки зрения обеспечения защиты подобная модульность позволяет вместо фильтрации неиспользуемых системных вызовов (например, через seccomp) полностью исключать их из ядра.
Приложение выполняется в общем адресном пространстве (HermiTux рассчитан на запуск поверх гипервизора одного приложения). Предоставляется базовая поддержка многопоточности (Pthreads Embedded). В качестве файловой системы предлагается MiniFS, в которой файлы размещаются в ОЗУ (ramdisk) и эмулируются некоторые элементы виртуальных ФС (/dev/zero, /proc/cpuinfo и т.п.).
TCP/IP стек основан на наработках проекта LWIP, а в качестве стандартной Си-библиотеки используется модифицированный вариант проекта Musl. HermiTux не требует пересборки приложений и позволяет запускать как скомпилированные исполняемые файлы (статически и динамически связанные), так и приложения на интерпретируемых языках (Python, Lua и т.п.).
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.