Хабрахабр

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

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


Фото — Eamonn Maguire — Unsplash

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

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

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

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

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

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

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

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

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

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

Мнения

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

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


Фото — Jack Young — Unsplash

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

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

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

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

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

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

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть