Unikernel - Unikernel

Сравнение традиционного стека ОС и unikernel MirageOS

А unikernel специализированный, единое адресное пространство образ машины, построенный с использованием библиотеки операционных систем.[1][2] Разработчик выбирает из модульного стека минимальный набор библиотек, который соответствует конструкциям ОС, необходимым для запуска их приложения. Затем эти библиотеки компилируются с приложением и кодом конфигурации для создания запечатанных изображений с фиксированным назначением (unikernels), которые запускаются непосредственно на гипервизор или оборудование без промежуточной ОС, такой как Linux или Windows.

Первые такие системы были Exokernel и Немезида в конце 1990-х гг.

дизайн

В библиотечной операционной системе границы защиты сдвигаются до самых нижних аппаратных уровней, что приводит к:

  1. набор библиотек, реализующих механизмы, необходимые для управления оборудованием или сетевых протоколов;
  2. набор политик, обеспечивающих контроль доступа и изоляцию на уровне приложений.

Архитектура ОС библиотеки имеет ряд преимуществ и недостатков по сравнению с традиционными конструкциями ОС. Одно из преимуществ состоит в том, что, поскольку существует только одно адресное пространство, нет необходимости в повторяющихся переходах привилегий для перемещения данных между пространством пользователя и пространством ядра. Следовательно, операционная система библиотеки может обеспечить повышенную производительность, разрешая прямой доступ к оборудованию без необходимости перехода между пользовательским режимом и режимом ядра (в традиционном ядре этот переход состоит из одной инструкции TRAP.[3] и не то же самое, что переключение контекста[4]). Повышение производительности может быть достигнуто за счет устранения необходимости копировать данные между пространством пользователя и пространством ядра, хотя это также возможно с Нулевая копия драйверы устройств в традиционных операционных системах.

Недостатком является то, что из-за отсутствия разделения попытка запустить несколько приложений бок о бок в библиотечной ОС, но с сильной изоляцией ресурсов, может стать сложной.[5] Кроме того, драйверы устройств требуются для конкретного оборудования, на котором работает ОС библиотеки. Поскольку оборудование быстро меняется, возникает необходимость регулярно переписывать драйверы, чтобы они оставались актуальными.

Операционные системы виртуализация может преодолеть некоторые из этих недостатков на стандартном оборудовании. Современный гипервизор предоставляет виртуальным машинам процессорное время и сильно изолированные виртуальные устройства. Библиотечная ОС, работающая как виртуальная машина, должна реализовывать только драйверы для этих стабильных виртуальных аппаратных устройств и может зависеть от гипервизора для управления реальным физическим оборудованием. Однако библиотеки протоколов по-прежнему необходимы, чтобы заменить службы традиционной операционной системы. Создание этих библиотек протоколов - вот где основная работа выполняется при реализации современной библиотечной ОС.[1] Кроме того, использование гипервизора может привести к снижению производительности при переключении между unikernel и гипервизором, а также при передаче данных на виртуальные устройства гипервизора и от них.

Уменьшая объем развернутого кода, уникальные ядра обязательно уменьшают вероятность поверхность атаки и поэтому имеют улучшенные свойства безопасности.[6][7]

Было показано, что Unikernels составляют около 4% от размера эквивалентной кодовой базы с использованием традиционной ОС.[8]

Из-за характера их конструкции можно выполнять оптимизацию всей системы с помощью драйверов устройств и логики приложения, улучшая, таким образом, специализацию.[9][10]

Unikernels регулярно загружаются чрезвычайно быстро, вовремя отвечая на входящие запросы до истечения времени ожидания запросов.[11][12][13]

Unikernels позволяет создавать системы, соответствующие сервис-ориентированный или микросервисы программные архитектуры.

Высокая степень специализации означает, что unikernels непригодны для универсальных многопользовательских вычислений, для которых используются традиционные операционные системы. Добавление дополнительных функций или изменение скомпилированного юникерна, как правило, невозможно, и вместо этого подход заключается в компиляции и развертывании нового юникерна с желаемыми изменениями.

Примеры

Существует ряд новых подходов к построению уникальных ядер, которые находятся на разной степени зрелости.

  • ClickOS[10][14] это высокопроизводительная виртуализированная программная промежуточная платформа, основанная на виртуализации с открытым исходным кодом. Ранний анализ производительности показывает, что виртуальные машины ClickOS малы (5 МБ), загружаются быстро (всего 20 миллисекунд), имеют небольшую задержку (45 микросекунд) и могут одновременно запускаться более 100, насыщая канал 10 ГБ на недорогом обычном сервере.
  • Клайв[15] это операционная система, предназначенная для работы в средах распределенных и облачных вычислений, написанная на Язык программирования Go.
  • Drawbridge - это исследовательский прототип новой формы виртуализации для изолированной программной среды приложений. Drawbridge сочетает в себе две основные технологии: пикопроцесс, который представляет собой контейнер изоляции на основе процессов с минимальной поверхностью API ядра, и библиотечную ОС, которая представляет собой версию Windows, предназначенную для эффективной работы в пикопроцессе.[16]
  • ОС с библиотекой графена[5][17] - это Linux-совместимая библиотечная операционная система, которая ориентирована на защиту многопроцессорных, серверных или устаревших приложений типа оболочки. Графен охватывает многопроцессорное приложение через несколько пикопроцессов, при этом межпроцессные абстракции (например, сигналы, очереди сообщений, семафоры) скоординированы по простым конвейерным потокам. Для приложений с несколькими принципами безопасности Graphene может динамически изолировать небезопасный пикопроцесс.
  • Облегченная виртуальная машина Haskell (HaLVM ) является портом Компилятор Glasgow Haskell набор инструментов, который позволяет разработчикам писать легкие виртуальные машины высокого уровня, которые могут работать непосредственно на Xen гипервизор.
  • HermitCore[18] это новое ядро, нацеленное на масштабируемое и предсказуемое поведение во время выполнения для высокопроизводительных вычислений и облачных сред. HermitCore поддерживает C, C ++, Фортран, Идти, Pthreads, OpenMP и iRCCE[19] как библиотека передачи сообщений. Это исследовательский проект, который расширяет многоядерный подход и сочетает его с функциями unikernel. HermitCore может работать непосредственно на KVM гипервизор, но также изначально на архитектуре x86_64.
  • HermiTux[20] представляет собой эволюцию HermitCore и представляет собой исследовательский проект, целью которого является запуск в качестве unikernels немодифицированных двоичных файлов приложений Linux.
  • Включить ОС это минимальная, сервисно-ориентированная операционная система с открытым исходным кодом и включаемой библиотекой для облачных сервисов. Он предназначен для запуска кода C ++ на виртуальном оборудовании.
  • ЛИНГ[21] это unikernel, основанный на Erlang / OTP и понимает файлы .beam. Разработчики могут создавать код на Erlang и развертывать его как unikernels LING. LING удаляет большинство векторных файлов, использует только три внешние библиотеки и не использует OpenSSL.
  • MirageOS[22] представляет собой библиотечную операционную систему с чистого листа, которая создает одноядерные ядра для безопасных, высокопроизводительных сетевых приложений на различных облачных вычислениях и мобильных платформах. Сейчас существует более 100 библиотек MirageOS[23] и растущее число совместимых библиотек в более широком OCaml экосистема.
  • OSv это новая ОС, разработанная специально для облачных виртуальных машин от Cloudius Systems.[24] OSv может загружаться менее чем за секунду и изначально спроектирован для выполнения одного приложения поверх любого гипервизора, что обеспечивает превосходную производительность, скорость и простое управление. OSv может работать без изменений Linux исполняемые файлы (с некоторыми ограничениями) и поддержка C, C ++, JVM, Рубин и Node.js стеки приложений доступны.
  • Румпрун это программный стек, который позволяет запускать существующие немодифицированные POSIX софт как unikernel. Rumprun поддерживает несколько платформ, начиная с нуля РУКА оборудование для гипервизоров, таких как Xen. Он основан на ядро NetBSD rump которые предоставляют бесплатные портативные компонентные драйверы качества ядра, такие как файловые системы, обработчики системных вызовов POSIX, драйверы устройств PCI, стек протокола SCSI, virtio и стек TCP / IP.[25]
  • Runtime.js - это операционная система библиотеки с открытым исходным кодом для облака, которая работает на виртуальной машине JavaScript, может быть объединена с приложением и развернута как легкий и неизменяемый образ виртуальной машины. Runtime.js построен на Двигатель V8 Javascript и в настоящее время поддерживает QEMU /KVM гипервизор.
  • Nanos - это уникальное ядро, работающее на QEMU /KVM и Xen гипервизоры. Он может загружать произвольные двоичные файлы ELF и реализуется конструктором / оркестратором. «ОПС».
  • TamaGo - это платформа, которая позволяет компилировать и выполнять незагруженные приложения Go на голых платах на базе ARM SoC, поддерживая создание уникальных ядер Go без какой-либо прямой или косвенной зависимости от других компонентов или языков программирования.
  • Юникрафт: Высокоуровневая цель Unikraft состоит в том, чтобы иметь возможность создавать уникальные ядра, ориентированные на конкретные приложения, без необходимости трудоемкой экспертной работы, которая требуется сегодня для создания такого одноядерного ядра. Дополнительная цель (или надежда) Unikraft заключается в том, что все разработчики, заинтересованные в разработке unikernel, будут вносить свой вклад, поставляя библиотеки, а не работая над независимыми проектами с различными базами кода, как это делается сейчас.

Смотрите также

использованная литература

  1. ^ а б "Unikernels: подъем операционной системы виртуальных библиотек". Получено 31 августа 2015.
  2. ^ "Unikernel.org". Unikernel.org. Получено 1 декабря 2015.
  3. ^ Таненбаум, Эндрю С. (2008). Современные операционные системы (3-е изд.). Прентис Холл. стр.50 –51. ISBN  978-0-13-600663-3. . . . почти все системные вызовы [вызываются] из программ C путем вызова библиотечной процедуры. . . Библиотечная процедура. . . выполняет инструкцию TRAP для переключения из пользовательского режима в режим ядра и начала выполнения. . .
  4. ^ Переключение контекста # Переключение режима пользователя и ядра
  5. ^ а б Чиа-Че, Цай; Арора, Кумар-Саураб; Банди, Нехал; Джайн, Бхушан; Яннен, Уильям; Джон, Джитин; Калоднер, Гарри; Кулькарни, Врушали; Оливьера, Даниэла; Портер, Дональд Э. (2014). Сотрудничество и изоляция безопасности библиотечных операционных систем для многопроцессорных приложений (PDF). Труды Девятой Европейской конференции по компьютерным системам (EuroSys). С. 1–14. CiteSeerX  10.1.1.589.1837. Дои:10.1145/2592798.2592812. ISBN  9781450327046.
  6. ^ «Почему Unikernels может улучшить интернет-безопасность». Апрель 2015 г.. Получено 31 августа 2015.
  7. ^ Мадхавапедди, Анил; Мортье, Ричард; Харалампос, Ротсос; Скотт, Дэвид; Сингх, Балрадж; Газанайр, Томас; Смит, Стивен; Рука, Стивен; Кроукрофт, Джон (март 2013 г.). «Unikernels: библиотечные операционные системы для облака» (PDF). Уведомления SIGPLAN (ASPLOS 13). 48 (4): 461. Дои:10.1145/2499368.2451167.
  8. ^ Калопер-Мершиняк, Давид; Менерт, Ханнес; Мадхавапедди, Анил; Сьюэлл, Питер (2015). «Не совсем сломанный TLS: уроки реинжиниринга спецификации и реализации протокола безопасности». Материалы 24-го симпозиума по безопасности USENIX (USENIX Security 15).
  9. ^ Мадхавапедди, Анил; Мортье, Ричард; Сохан, Рипдуман; Газанайр, Томас; Рука, Стивен; Диган, Тим; Маколи, Дерек; Кроукрофт, Джон (2010). «Выключив ЛАМПУ: специализация программного обеспечения для облака» (PDF). Материалы 2-й конференции USENIX по актуальным вопросам облачных вычислений.
  10. ^ а б Мартинс, Жоао; Мохамед, Ахмед; Райчиу, Костин; Уичи, Фелипе (2013). Включение быстрой динамической сетевой обработки с помощью ClickOS (PDF). Материалы второго семинара ACM SIGCOMM по актуальным вопросам программно-определяемых сетей. п. 67. Дои:10.1145/2491185.2491195. ISBN  9781450321785.
  11. ^ «Своевременный вызов Unikernels (v0.2)». Магнус Скегстад. Получено 30 августа 2015.
  12. ^ «Зерг». Zerg - демонстрация экземпляра на запрос. Получено 30 августа 2015.
  13. ^ Мадхавапедди, Анил; Леонард, Томас; Скегстад, Магнус; Газанье, Томас; Листы, Дэвид; Скотт, Дэвид; Мортье, Ричард; Чаудри, Амир; Сингх, Балрадж; Лудлам, Джон; Кроукрофт, Джон; Лесли, Ян (2015). Джитсу: Своевременный вызов уникальных ядер (PDF). 12-я конференция USENIX по проектированию и внедрению сетевых систем (NSDI). ISBN  978-1-931971-218.
  14. ^ «ClickOS и искусство виртуализации сетевых функций» (PDF). Получено 31 августа 2015.
  15. ^ «Операционная система Clive» (PDF). Получено 31 августа 2015.
  16. ^ "Подъемный мост". Microsoft Research. Получено 30 августа 2015.
  17. ^ «ОС с библиотекой графена». Университет Стоуни-Брук. Получено 31 января 2016.
  18. ^ «HermitCore - Unikernel для экстремальных вычислений». Получено 8 июн 2016.
  19. ^ «iRCCE: Неблокирующее коммуникационное расширение для коммуникационной библиотеки RCCE для однокристального облачного компьютера Intel» (PDF). Получено 8 июн 2016.
  20. ^ Оливье, Пьер; Чиба, Даниэль; Ланкес, Стефан; Мин, Чан У; Равиндран, Биной ​​(2019). «Бинарно-совместимое unikernel». Материалы 15-й Международной конференции ACM SIGPLAN / SIGOPS по виртуальным средам выполнения - VEE 2019. Нью-Йорк, Нью-Йорк, США: ACM Press: 59–73. Дои:10.1145/3313808.3313817. ISBN  978-1-4503-6020-3.
  21. ^ «Эрланг на Xen: в основе сверхэластичных облаков». Получено 31 августа 2015.
  22. ^ «MirageOS: среда программирования для создания типобезопасных модульных систем». Получено 31 августа 2015.
  23. ^ "MirageOS TROVE". Получено 31 августа 2015.
  24. ^ Кивити, Ави; Коста, Глаубер; Энберг, Пекка; Хар'Эль, Надав; Марти, Дон; Золотаров, Влад (июнь 2014). «OSv: Оптимизация операционной системы для виртуальных машин» (PDF). Ежегодная техническая конференция USENIX, 2014 г..
  25. ^ "Ядра крупы". rumpkernel.org. Получено 31 августа 2015.

внешние ссылки