В рамках проекта 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 и т.п.).

Источники править


 
 
Creative Commons
Эта статья содержит материалы из статьи «В рамках проекта HermiTux развивается unikernel, бинарно совместимый с Linux», опубликованной OpenNET и распространяющейся на условиях лицензии Creative Commons Attribution (CC BY) — указание автора, источник и лицензию.
 
Эта статья загружена автоматически ботом NewsBots в архив и ещё не проверялась редакторами Викиновостей.
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.

Комментарии

Викиновости и Wikimedia Foundation не несут ответственности за любые материалы и точки зрения, находящиеся на странице и в разделе комментариев.