OSv

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 16:09, 5 июня 2019.
OSv
OSv.jpg
Разработчик Cloudius Systems
Написана на C++
Состояние разработки Alpha
Исходный код Открытый
Дата первого релиза 16.09.2013
Целевой маркетинг Облачные вычисления
Доступно в Многоязычный
Платформы x86-64 с использованием гипервизоров KVM, Xen, VMware и VirtualBox.
Ядро (тип) Unikernel
Пользовательское
пространство
POSIX, Java, Ruby
По умолчанию
пользовательский
интерфейс
CLI, web
Лицензия BSD
Официальный веб-сайт osv.io

OSv - это операционная система с открытым исходным кодом, предназначенная для облака. Данная система спроектирована с нуля для выполнения одного приложения поверх гипервизора, что обеспечивает превосходную производительность и простое управление[Источник 1].

Содержание

Ключевые особенности

Хорошая производительность

OSv уменьшает нагрузку на память и процессор, налагаемую традиционной ОС. Планирование упрощено, приложение и ядро взаимодействуют, а объединения памяти используются совместно. OSv обеспечивает беспрецедентные короткие задержки и постоянную предсказуемую производительность, что напрямую приводит к экономии капитальных вложений за счет уменьшения размера и количества экземпляров ОС.

Быстрая сборка и развертывание виртуальных машин

OSv обеспечивает низкую нагрузку и быстрый оборот, как контейнеры, но благодаря гибкости развертывания пользователь получает только истинную виртуализацию. С помощью инструмента сборки Capstan пользователь может создавать и осуществлять запуск с помощью одной команды, при этом создать полноценную виртуальную машину, которая будет работать в существующей облачной среде. Создание образа виртуальной машины добавляет только 12-20 МБ накладных расходов, три секунды времени сборки и несколько строк конфигурации.

Управление Zero OS

Устаревшие файлы конфигурации в стиле UNIX исчезли за счет их замены простым, согласованным REST API и согласованным развертыванием, основанным на cloud-init, которое работает одинаково в общедоступных и частных облаках.

DevOps/PaaS как развертывание

Экземпляры OSv могут быть развернуты непосредственно из IDE разработчика или через пользовательскую систему непрерывной интеграции, как внутри предприятия, так и в облаке. Это так же быстро и удобно, как система PaaS, однако производится полное развертывание в виде первоклассной виртуальной машины непосредственно в пользовательском облаке.

Интеграция с общей структурой

Фреймворки Java, такие как Tomcat, JBoss и SpringSource, безупречно работают на OSv вместе с другими популярными языковыми средами исполнения, такими как Ruby.

Оптимизация пользовательских встроенных приложений

Обычно OSv запускает неизмененные приложения. Для обеспечения более лучшей производительности можно получить доступ к API ядра низкого уровня[Источник 2].

Управляемость

Управление использованием и API

OSv размещает все конечные точки управления в одном месте: простой документированный REST API. Все операции управления могут выполняться с использованием выбранных вами инструментов управления или ваших собственных сценариев по протоколу HTTP. Приборная доска представлена на рисунке 1. Доступна дополнительная панель инструментов в браузере. Панель инструментов предоставляет живые обновления и включает в себя:

  • Основы ОС, такие как использование памяти и загрузка процессора
  • Точки трассировки для всех функций системы и приложений
  • Конечные точки JMX (с использованием коннектора Jolokia JMX-over-REST)
  • Специфичные для приложения метрики, которые могут быть добавлены разработчиком приложения.
Рисунок 1 – Приборная доска OSv

Детали REST API

В облачной среде с несколькими экземплярами неэффективно взаимодействовать с каждым экземпляром с использованием обычного графического интерфейса пользователя или интерфейса командной строки, предназначенных для аппаратных серверов. OSv REST API упрощает управление.

Cloud-INIT

Механизм cloud-init предоставляет простой способ предоставления параметров конфигурации для каждого экземпляра виртуальной машине OSv во время загрузки. Это полезно для загрузки многих кластеризованных экземпляров горизонтально масштабируемого приложения, такого как база данных NoSQL.

OSv cloud-init работает одинаково в общедоступных и частных облаках, поэтому разработанная внутри себя конфигурация cloud-init будет работать везде, где пользователь захочет развернуть. Идеально для гибридных облачных сред[Источник 3].

Статус

Поддержка гипервизоров

OSv поддерживается на следующих гипервизорах:

Гипервизор Полностью работоспособный Экспериментальный
KVM/Firecracker YesY N
KVM/QEMU YesY N
Xen YesY N
VMWare Workstation N YesY
VMWare ESXi N YesY
VirtualBox N YesY

Поддержка OSv на провайдерах публичного облака

OSv доступна на следующих провайдерах публичного облака:

Облачные провайдеры Полностью работоспособный Экспериментальный
EC2 YesY N
GCE N YesY

Доступные виртуальные устройства OSv

Образ OSv OSv-Cassandra OSv-Memcached OSv-Tomcat OSv-IPerf
QCOW2 для KVM YesY YesY YesY YesY YesY
OVA для VirtualBox YesY YesY YesY YesY YesY
VMDK для VMWare YesY YesY YesY YesY YesY
OVA для VMWare YesY YesY YesY YesY YesY

Доступность инструмента Capstan

Capstan доступен на следующих платформах[Источник 4]:

Работа Capstan на ОС/Запуск через VM KVM VirtualBox VMWare QEMU GCE EC2
Linux YesY YesY YesY YesY YesY YesY
Mac OS N YesY YesY YesY YesY YesY
Windows N YesY YesY YesY YesY YesY

Дизайн

Виртуальная память

Во-первых, OSv не имеет нескольких адресных пространств. В обычной системе виртуальный адрес 0x200000 может быть сопоставлен с разными физическими страницами (или с одной и той же страницей, иногда или с отсутствующей страницей), в зависимости от процесса. В OSv адрес отображается только на одной странице. Это означает, что пользователю не нужно переключать сопоставления, когда процессор перестает запускать один процесс и начинает запускать другой.

Второе отличие заключается в том, что OSv не поддерживает разные разрешения для приложения и ядра. В типичной многопользовательской системе ядро ​​не позволяет приложению получать доступ к страницам ядра. Это означает, что он должен переключать уровни привилегий при запуске кода ядра, а затем переключаться обратно. OSv не делает этот переключатель; вместо этого он использует гипервизор для защиты приложений друг от друга.

Все пользовательские потоки разделяют адресное пространство памяти (они являются потоками, а не процессами). Это позволяет упростить код и повысить производительность, поскольку мы можем избежать переключения таблицы страниц, связанного с сбросом TLB (поскольку у Intel нет тегированного TLB), которое может происходить при переключении между процессами.

Между пользовательским пространством и ядром нет защиты - вызов ядра - это просто вызов функции, а пользовательское пространство и ядро ​​могут читать и записывать память друг друга. Это дает преимущества в производительности и большую гибкость. Но это означает, что даже если бы у нас было отдельное адресное пространство для разных процессов, у них не было бы изоляции в стиле UNIX, потому что каждый процесс мог читать и записывать данные ядра, принадлежащие другому процессу.

Производительность и трассировка

Измерения производительности основаны на статических точках трассировки, вставленных в код в стратегических точках. В оболочке доступны инструменты для сбора статистики о попаданиях точек трассировки, сбора гистограмм стека вызовов на выбранных точках трассировки или просто захвата трассировки для последующего анализа[Источник 5].

Технология

Облачный дизайн позволяет OSv упростить стек, как смотря вниз (в сторону аппаратного обеспечения), так и вверх (в сторону приложения).

Одно адресное пространство, кольцо 0

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

Интеграция виртуальной машины Java

Работа в том же адресном пространстве, что и виртуальная машина Java, позволяет OSv предоставлять аппаратные функции, такие как таблицы страниц, непосредственно виртуальной машине Java. Это, в свою очередь, позволяет JVM управлять памятью более эффективно, чем это возможно с традиционными API (mmap () и friends). Среди возможностей для эксплуатации оборудования:

  • Прямое использование больших страниц (2 МБ и 1 ГБ страниц).
  • Использование таблиц страниц для отслеживания изменений памяти, чтобы помочь с сборкой мусора.
  • Совместное планирование и расстановка приоритетов критических потоков GC.

Алгоритмы без блокировки

В отличие от традиционных многоядерных операционных систем, OSV вообще не использует спин-блокировки. Известно, что на виртуальных машинах спин-блокировки вызывают проблему «освобождения держателя блокировки», которая снижает производительность. Таким образом, OSV полностью избегает спин-блокировок и даже предлагает реализацию мьютекса, которая не основана на спин-блокировке.

 Операционные системы на многоядерной виртуальной машине сталкиваются с уникальной проблемой, которой не было на физических машинах: на физической машине все ядра всегда работают на полную мощность (если ОС не требует иного). На виртуальных машинах это не так: виртуальный ЦП часто останавливает выполнение гостевого кода в непредсказуемое время, на короткое или длительное время. Например, гость может остановиться, когда гипервизор обрабатывает прерывание устройства или когда гипервизор выгружает работающую виртуальную машину в пользу другого хост-процесса или другой гостевой виртуальной машины.

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

OSV, как новая операционная система, разработанная с нуля для виртуальных машин, защищена от проблемы вытеснения держателей блокировок, потому что она вообще не использует спин-блокировки. Во многих случаях OSV использует алгоритмы без блокировки, чтобы полностью избежать блокировки. В других случаях, когда требуется блокировка, он предоставляет мьютекс без блокировки, примитив взаимного исключения, который реализуется, в отличие от традиционных реализаций мьютекса, без спин-блокировки. Преобразуйте память вместо копирования больших объектов.

Обработка прерываний в потоках

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

Традиционно операционные системы имеют контекст прерывания, специальный контекст для обработки прерываний устройства, который отличается от обычного контекста потока. Код, работающий в контексте прерывания, сложнее написать. Кроме того, поскольку нельзя спать в контексте прерывания, там традиционно используются спин-блокировки для защиты данных от одновременного доступа. Но, как объяснялось выше, мы хотим полностью избежать спин-блокировок.

Наше решение заключается в обработке прерываний устройства в потоках обработки прерываний. Это просто нормальные, обычные темы. В контексте прерывания все, что мы делаем, это пробуждаем поток обработки прерываний, и когда этот поток запускается, он выполняет большую часть работы по обработке прерываний. Если поток обработки прерываний нуждается в блокировке, он использует мьютекс, а не спин-блокировку.

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

Современная файловая система

OSv использует файловую систему ZFS для локального хранения; Самовосстанавливающаяся файловая система идеально подходит для облака[Источник 6].

Случаи применения OSv

Виртуальное устройство

Независимые поставщики программного обеспечения, которые предлагают упакованное приложение в виде образа виртуальной машины, могут извлечь выгоду из выпуска OSv несколькими способами. Образы виртуальных машин для виртуальных устройств на основе OSv имеют небольшой размер, часто всего на 6-7 МБ больше, чем само приложение. И ISV не нужно поддерживать и поддерживать большой набор программного обеспечения и конфигурации, требуемый даже для самых простых гостевых образов на других платформах.

Виртуализация сетевых функций

Виртуализация сетевых устройств требует крайне низкой задержки и высокой пропускной способности сети. OSv с сетевым стеком на основе сетевых каналов устраняет узкие места на уровне гостевой ОС.

Сервер приложений Java

Пользователь может загрузить файл WAR приложения через REST API, и приложение запускается без дальнейшей настройки. Процесс развертывания может быть подключен к системе непрерывной интеграции или IDE.

Приложения на C и C++

Несколько приложений на C и C++ были портированы разработчиками OSV или третьими лицами. Портирование дополнительных приложений часто требует изменения Makefile в две строки. OSv может использовать неизмененные разделяемые библиотеки, созданные как для Linux, так и для него. Образы, содержащие эти приложения, могут быть загружены и развернуты по мере необходимости с меньшими издержками, чем в устаревших гостевых ОС.

Горизонтальное масштабирование

Время загрузки OSv менее секунды делает его идеальным для NoSQL и других приложений, требующих горизонтального масштабирования или восстановления после отказа. Часто быстрее загружать новый гостевой OSv, чем переключаться на уже работающий гостевой[Источник 7].

Источники

  1. Определение OSv // USENIX [2019 — ]. URL: https://www.usenix.org/conference/lisa13/osv-new-open-source-operating-system-designed-cloud (дата обращения: 05.04.2019).
  2. Ключевые особенности OSv // OSv [2019 — ]. URL: http://osv.io (дата обращения: 05.04.2019).
  3. Управляемость OSv // OSv [2019 — ]. URL: http://osv.io/manageability (дата обращения: 03.05.2019).
  4. Статус OSv // OSv [2019 — ]. URL: http://osv.io/status (дата обращения: 03.05.2019).
  5. Дизайн OSv // OSv [2019 — ]. URL: http://osv.io/design (дата обращения: 03.05.2019).
  6. Технология OSv // OSv [2019 — ]. URL: http://osv.io/technology (дата обращения: 03.05.2019).
  7. Случаи применения OSv // OSv [2019 — ]. URL: http://osv.io/user-cases (дата обращения: 03.05.2019).