OSv — легковесная ОС для гипервизора

Виртуализация используется для всего, начиная от запуска серверов и заканчивая тестированием приложений.

Гипервизор (Hypervisor) (или Монитор виртуальных машин) — (в компьютерах) программа или аппаратная схема, обеспечивающая или позволяющая одновременное, параллельное выполнение нескольких или даже многих операционных систем на одном и том же хост-компьютере. Гипервизор также обеспечивает изоляцию операционных систем друг от друга, защиту и безопасность, разделение ресурсов между различными запущенными ОС и управление ресурсами.

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

OSv - ОС, созданная исключительно для работы в виртуальных окружениях.

В целом в ОС реализовано четыре простых идеи:
  • Одна память на всех. В OSv нет разделения памяти как между ядром и приложениями, так и между самими приложениями. Вся оперативная память — это одна большая страница, доступная для записи, чтения и исполнения всем, включая пользовательские процессы и процессы ядра. И те и другие здесь всего лишь нити, а понятия «режим ядра» и «пользовательский режим» вообще не существуют.
  • Максимально простой дизайн. Являясь операционной системой для виртуальных окружений, OSv не включает в себя драйверов и многочисленных прослоек, предназначенных для упрощения переноса ОС на другие архитектуры.
  • Автоматическая конфигурация. В системе нет ни одного конфигурационного файла. После запуска она просто работает.
  • Интегрированная Java-машина. OSv ориентирована в первую очередь на запуск Java-приложений, но может быть использована и для запуска серверов на Си (требуется портирование), а также на таких языках, как Ruby (jRuby), Python (Jython) и JavaScript (Rhino, Nashorn).

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

OSv против систем общего назначения

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

Если речь идет о запуске масштабных Java-серверов, обслуживающих множество приложений, то здесь за защиту памяти отвечает сама виртуальная машина Java, так же как это сделано, например, в jOS или Inferno: на уровне железа одна память на всех, но виртуальная машина (Java) реализует собственную программную систему защиты.

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

Кроме Java, в OSv реализован совместимый со стандартом POSIX API, который позволяет легко портировать для нее большинство UNIX-софта, написанного без использования специфичных для Linux или FreeBSD интерфейсов. От никсов системе также досталась файловая система ZFS (исходники взяты из FreeBSD, как и сетевой стек), ее выбор обусловлен ориентацией на приложения вроде Tomcat, Jboss и Hadoop, которым по определению необходим мощный виртуальный сервер с большим количеством дисковой памяти и функциональностью, которую дает развитая ФС.

Стандартная облачная конфигурация

В общем и целом OSv — это фреймворк или прослойка со встроенной файловой системой ZFS, виртуальной машиной Java, POSIX API и сетевым стеком, назначение которой — запуск приложения с максимальной изоляцией, обеспечиваемой гипервизором.

Облачная конфигурация с использованием OSv

Опытный админ наверняка скажет, что OSv не нужна, так как она создает слишком много нагромождений (ОС -> гипервизор -> специальная ОС для гипервизора -> Java-машина -> приложение) и является усложнением идей OpenVZ и LXC, которые ко всему прочему еще и предоставляют полноценное Linux-окружение, вместо POSIX-совместимого огрызка. Однако у разработчиков ОС на это есть простой ответ.

OSv, по их мнению (я говорил, что она написана ведущими разработчиками гипервизора KVM Ави Кивити и Дор Лаор?), — это такой ответ на сложившуюся ситуацию и ничего больше. Это ОС для Amazon или ему подобных PaaS-сервисов, которые работают под управлением Xen и KVM и вообще не предоставляют окружения на базе виртуализации уровня ОС. Кроме того, OpenVZ и LXC гораздо более сложны, чем сама OSv и гипервизор, будь то KVM и Xen, а также более уязвимы для взлома.

Фактически идеи, которые легли в основу OSv, родились задолго до начала эры облачных вычислений. Впервые они были реализованы еще в шестидесятых годах в мейнфрейме IBM System/360 — он был снабжен программным гипервизором, поверх которого могли работать множественные инстанции простой однозадачной операционной системы CMS (изначально эта связка называлась CP/CMS, а в настоящее время носит имя z/VM).
Еще один пример более ранней реализации идей OSv — это Maxine Virtual Machine, а точнее, редакция этой Java-машины для запуска поверх железа.

OSv и «RUMP поверх Xen» во многом олицетворяют естественное развитие технологий, которое идет по кочкам, ямам и технологическому мусору, накопившемуся за последние 50 лет развития IT. Это не самые красивые технологии, и, если мыслить, отбросив весь балласт давно отживших, но продолжающих занимать важное место идей, мы могли бы придумать нечто гораздо более правильное и современное, что-то вроде z/VM или пресловутой JavaOS. Но с действительностью приходится считаться, и в таких условиях проекты вроде OSv являются правильным шагом вперед.