Первый прототип: Unikernels как этап в эволюции Linux

В начале июля группа инженеров из Red Hat и Бостонского университета выпустила whitepaper, в котором предложила сменить монолитное ядро Linux на архитектуру unikernels. Мы решили разобраться в материале и обсудить реакцию ИТ-комьюнити на это предложение.

6-hf7px21yeqh8lhi6c7njvn4cw.jpeg
Фото — Eamonn Maguire — Unsplash

Unikernels как альтернатива


Известно, что Linux использует монолитное ядро. Оно управляет процессами, сетевыми функциями, периферией и доступом к файловой системе. Однако как пишут авторы статьи из Red Hat и Бостонского университета (стр. 1), такая структура имеет свои недостатки. В частности, высокопроизводительные приложения вынуждены использовать фреймворки вроде DPDK и SPDK, чтобы получить беспрепятственный доступ к устройствам ввода/вывода в обход ядра.

Определенные трудности возникают и в облаке. Для большей безопасности корпоративные приложения развертывают на отдельных виртуальных машинах. Каждая ВМ находится под управлением полновесной операционной системы. В результате вычислительные ресурсы серверов расходуются не самым оптимальным образом.

Улучшить ситуацию может альтернативный подход — unikernels. Идея следующая — связать приложение с необходимыми библиотеками операционной системы и скомпилировать их в один бинарный файл. После этот «бинарник» можно использовать для загрузки системы. Такой подход дает возможность специализировать функциональность ОС под нужды конкретного приложения.


Ресурсы такой системы расходуются эффективнее. Также unikernels обладают более высокой производительностью, по сравнению с монолитной архитектурой ядра. Причина — упрощение IO-путей, так как все данные и файлы размещаются в едином адресном пространстве. Также пропадает необходимость переключать контекст между пользовательским пространством и пространством ядра.

Команда инженеров из Бостонского университета и Red Hat разработала прототип Linux на базе unikernels. Операционная система получила название Unikernel Linux (UKL).

Что сделали инженеры


Как заявляют разработчики (стр. 3), они изменили всего одиннадцать и добавили двадцать новых строк кода в Linux kernel v5.0.5 и glibc. «Классическое» ядро сохранило работоспособность — пользователь может выбрать способ сборки (UKL или нет).

Авторы создали небольшую UKL-библиотеку, в которой разместили специальные «заглушки», которые маскируют неиспользуемые системные вызовы. Также они модифицировали линкер ядра, чтобы определять новый тип сегментов, например TLS (thread local storage) из бинарников ELF. Еще был модифицирован процесс сборки, который теперь объединяет код приложения, glibc и UKL-библиотеку в один бинарный файл.

Инженеры работают над исправлением ряда недостатков. Например, они планируют переместить TLS-память из пространства ядра и отказаться от vmalloc при управлении распределением памяти, чтобы упростить систему.

Мнения


Разработчики Red Hat говорят, что UKL может стать полноценной альтернативой для запуска процессов, работающих с аппаратным обеспечением напрямую (в обход ядра). Авторы оригинальной статьи заявляют (стр. 2), что сервис кэширования memcached под unikernels работает на 200% быстрее, чем под Linux.

В целом об инициативе авторов оригинальной статьи положительно отозвалось и ИТ-сообщество. Резиденты Hacker News отметили, что архитектура unikernels значительно повысит безопасность программной среды. В случае взлома приложения хакер получит доступ лишь к его бинарнику.


e0dcnkbpfxk4ufz0ta56lvjki-o.jpeg
Фото — Jack Young — Unsplash

Один из резидентов Hacker News даже предложил радикальное решение — переписать ядро Linux под unikernels с нуля на Rust. По его словам, язык решит проблему с большим количеством багов, связанных с безопасностью памяти. Другой пользователь назвал идею хорошей, однако предложил подождать несколько лет, пока разработчики языка разберутся с нестабильностью библиотек. Хотя один энтузиаст уже пишет свою операционную систему на Rust. Исходники можно найти на GitHub.

Другие реализации


UKL — не единственная реализация операционной системы на базе unikernels. Например, похожее решение разрабатывает группа инженеров из Политехнического университета Виргинии, компании Qualcomm и Рейнско-Вестфальского технического университета Ахена в Германии. Их легковесное ядро называется HermiTux. Оно позволяет быстро запускать приложения поверх гипервизора — по словам авторов, время загрузки не превышает 0,1 сек. Потребление памяти в тестовом окружении составляет 9 Мбайт, что в десять раз меньше, чем у классического ядра Linux.

Также имеет смысл отметить ОС MirageOS, разработанную на OCaml. Ядро может запускаться поверх гипервизоров Xen, KVM, BHyve и VMM (OpenBSD), а также на мобильных платформах. Система поддерживает несколько десятков библиотек на языке OCaml для выполнения сетевых операций (DNS, SSH, OpenFlow, HTTP, XMPP), работы с хранилищами и параллельной обработки данных. Можно сказать, что MirageOS — это один из первых успешных unikernels-проектов. Интересно, что его сайт с блогом также реализован как unikernel.

Эти операционные системы уже используются в продакшн-средах многими организациями — например, Кембриджским университетом, IBM, Ericsson и Docker. Есть вероятность, что скоро к этим ОС присоединится новая — Unikernel Linux.


О чем мы пишем в корпоративном блоге:

© Habrahabr.ru