Показаны сообщения с ярлыком OSv. Показать все сообщения
Показаны сообщения с ярлыком OSv. Показать все сообщения

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

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

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

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

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

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

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

Инструменты:
  • SPECjvm2008 для тестирования Java-приложений;
  • memaslap для тестирования производительности Memcached 1.4.15 в стандартной конфигурации.

В качестве хоста выступал Intel Haswell i7-4770 с 16 Гб оперативной памяти и 64-битной Fedora 19 с установленным QEMU 1.4.2 и ядром Linux 3.10.5. В сравнении участвовали OSv версии 0.01 и 64-битная Fedora 18 с ядром Linux 3.9.9. Обе работали внутри одноядерной виртуальной машины с 3 Гб памяти и OpenJDK 1.7.0. Измерялась сетевая производительность и производительность ввода-вывода, а вот cpu intensive тесты проведены не были то ли в силу их провальности, то ли по причине молодости OSv, над оптимизацией которой пока практически не работали (это официальная причина).

Результаты тестов.
Суммарный прирост производительности Java-приложений составил меньше двух процентов, что сами разработчики объяснили использованием стандартной OpenJDK, так как оптимизированная для OSv Java-машина еще не была готова. А вот тест Memcached благодаря модели «одна память на всех», которая позволяет избежать лишних копирований буферов и переключений контекста, получился более наглядным. Memcached, запущенный в OSv, смог обслужить 286 550 запросов в секунду на канале 10 Гб, тогда как Linux-версия только 205 199 (разница составляет ~40%).

В общем-то, прирост налицо, однако было бы интересно посмотреть на результат работы Memcached, скомпилированного в виде Linux-модуля например. Другими словами, воссоздать условия запуска работы OSv внутри другой ОС.

SPECjvm2008: OSv против Linux

Установка OSv

Загрузка

qcow2 - стандартный для QEMU/KVM образ.

Установка

1) Подготовка виртуального моста:
$ sudo brctl addbr virbr0
$ sudo brctl addbr eth0
$ sudo ifconfig virbr0 up

2) Скрипт, для автоматического подключения виртуального окружения к мосту:
#!/bin/sh
echo SCRIPT, $1
brctl addif virbr0 $1
ifconfig $1 up

3) Скрипт для запуска самой ОС (создает виртуальное окружение с 2 Гб памяти, двумя виртуальными процессорами и консолью):
#!/bin/sh
sudo qemu-system-x86_64 -vnc :1 \
    -gdb tcp::1234,server,nowait -m 2G -smp 2 \
    -chardev stdio,mux=on,id=stdio \
    -mon chardev=stdio,mode=readline,default \
    -device isa-serial,chardev=stdio \
    -drive file=osv-v0.02.qcow2,if=virtio,cache=unsafe \
    -netdev tap,id=hn0,script=qemu-ifup.sh,vhost=on \
    -device virtio-net-pci,netdev=hn0,id=nic1 \
    -enable-kvm -cpu host,+x2apic

Запуск

Шелл CRaSH какими-то серьезными особенностями, кроме возможности скриптинга на Clojure, он не отличается и включает в себя несколько стандартных UNIX-команд (cat, cd, ls, pwd, sleep, sort) и специфичных Java-инструментов.

Содержимое файловой системы также очень скудно: каталоги /dev (реализация devfs из FreeBSD), /etc, /tools, /usr/lib (минимальный набор библиотек, необходимых для запуска Java-машины) и /java, содержащий Java-компоненты и стандартную библиотеку классов. Сама машина Java располагается в разделяемой библиотеке /java.so (которую лучше назвать модулем ядра, хотя границы между этими понятиями в OSv стерты).

В комплекте есть веб-сервер и удаленная консоль управления, которые можно запустить так (порт 8080):
> java -jar /usr/mgmt/web-1.0.0.jar app prod

С его помощью можно выполнять мониторинг ОС, а также загружать Java-приложения. Кроме него, для удаленного управления OSv можно использовать REST API либо тот же shell, доступный по SSH. Никакого механизма обновления не предусмотрено, сами разработчики заявляют, что в будущем для этого достаточно будет просто загрузить новый образ OSv, однако, как будет выполняться сохранение существующей конфигурации, пока непонятно.