The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Выпуск MirageOS 3.5, платформы для запуска приложений поверх гипервизора

08.03.2019 10:18

Состоялся релиз операционной системы MirageOS 3.5, позволяющая формировать операционные системы одного приложения, в которых приложение поставляется как самодостаточный "unikernel", способный выполняться без применения операционных систем, отдельного ядра ОС и каких-либо прослоек. Для разработки приложений применяется язык OCaml. Код проекта распространяется под свободной лицензией ISC.

Вся низкоуровневая функциональность, свойственная операционной системе, реализована в форме библиотеки, прикрепляемой к приложению. Приложение может быть разработано в любой ОС, после чего компилируется в специализированное ядро (концепция unikernel), которое может запускаться напрямую поверх гипервизоров Xen, KVM, BHyve и VMM (OpenBSD), поверх мобильных платформ, в форме процесса в POSIX-совместимом окружении или в облачных окружениях Amazon Elastic Compute Cloud и Google Compute Engine.

Сгенерированное окружение не содержит ничего лишнего и взаимодействует непосредственно с гипервизором без драйверов и системных прослоек, что позволяет добиться существенного снижения накладных расходов и повышения безопасности. Работа с MirageOS сводится к трём стадиям: подготовка конфигурации с определением используемых в окружении OPAM-пакетов, сборка окружения и запуск окружения. Runtime для обеспечения работы поверх Xen основан на урезанном ядре Mini-OS, а для других гипервизоров и систем на базе ядра Solo5.

Несмотря на то, что приложения и библиотеки формируются на высокоуровневом языке OCaml, итоговые окружения демонстрируют достаточно неплохую производительность и минимальный размер (например, DNS-сервер занимает всего 200 Кб). Упрощается и сопровождение окружений, так как при необходимости обновления программы или изменения конфигурации, достаточно создать и запустить новое окружение. Поддерживается несколько десятков библиотек на языке OCaml для выполнения сетевых операций (DNS, SSH, OpenFlow, HTTP, XMPP и т.п.), работы с хранилищами и обеспечения параллельной обработки данных.

Основные новшества:

  • Расширена спецификация интерфейсов для работы с БД в формате ключ/значение (mirage-kv), добавлено новое хранилище в формате ключ/значение с поддержкой операций чтения и записи, а также вариант хранилища для непостоянного хранения данных в оперативной памяти. Целью проведённое работы является замена интерфейса mirage-fs на хранилище в формате ключ/значение. Кроме того развивается распределённое хранилище irmin, предоставлявшее возможность создания ответвлений БД и доступа с использованием протокола Git, а также файловая система wodan, которая сможет использоваться на Flash-накопителях;
  • Расширены API библиотек mirage-clock (системные часы), mirage-protocols (сетевые протоколы) и mirage-net (сетевые устройства);
  • Повышено качестве предоставляемого генератора псевдослучайных чисел;
  • В реализации стека TCP/IP добавлена поддержка пересборки фрагментов пакетов IPv4 (fragment reassembly). Для TCP добавлена поддержка keepalive. Код для инкапсулирования/декапсулирования Ethernet и реализация протокола определения адресов (ARP) вынесены в отдельные OPAM-пакеты;
  • Добавлена поддержка запуска в качестве unikernel высокопроизводительного http-сервера httpaf;
  • В пакете mirage-net, предоставляющем средства для низкоуровневого взаимодействия с сетевыми устройствами, реализованы бэкенды xen, solo5, unix, macos и vnetif;
  • В runtime на базе Solo5 добавлена поддержка работы поверх гипервизоров FreeBSD bhyve и OpenBSD VMM, обеспечена поддержка ARM64 и KVM, добавлена возможность работы с использованием микроядра GenodeOS;
  • Большинство пакетов переведены на использование сборочной системы dune (jbuilder). Всего для MirageOS подготовлено более 100 OPAM-пакетов;
  • Добавлена возможность прикрепления пакетов-зависимостей к unikernel, для работы с которыми требуется наличие пакетного менеджера opam 2.0.2 или более новой версии;
  • Добавлена поддержка языка OCaml 4.06.0 в режиме безопасной работы со строками (safe-string).

  1. Главная ссылка к новости (https://mirage.io/blog/announc...)
  2. OpenNews: Оценка безопасности новой системы контейнерной изоляции Nabla
  3. OpenNews: Выпуск libOS, unikernel на языке Rust для запуска приложений поверх гипервизора
  4. OpenNews: Проект Xen представил Unikraft для выполнения приложений поверх гипервизора
  5. OpenNews: Docker поглотил Unikernel, технологию выполнения приложений поверх гипервизора
  6. OpenNews: В рамках проекта IncludeOS развивается ядро для обособленного запуска C++-приложений
Лицензия: CC-BY
Тип: Программы
Ключевые слова: mirageos, unikernel
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение Ajax/Линейный | Раскрыть все сообщения | RSS
 
  • 1.1, proninyaroslav (ok), 11:24, 08/03/2019 [ответить] [показать ветку] [···]    [к модератору]
  • –1 +/
    >приложения и библиотеки формируются на высокоуровневом языке OCaml, итоговые окружения демонстрируют достаточно неплохую производительность и минимальный размер

    Интересно, причина в OCaml или в прямых руках разработчиков?

     
     
  • 2.3, Ordu (ok), 11:58, 08/03/2019 [^] [ответить]    [к модератору]
  • +9 +/
    Развитая система типов плюс статическая типизация позволяют создавать API, которые инкапсулируя всё, что требует тщательной проработки, обходятся везде где можно памятью со стека, не нагружая кучу и сборщик мусора. Это всё те же идеи, которые отрабатывались в haskell'е и в C++. Плюс к этому оно не прибито гвоздями к какой-то выбранной парадигме, позволяя использовать те парадигмы, которые лучше ложатся на задачу.

    То есть причина в OCaml. Но вероятно причина также в программистах: я полагаю, что люди пользующиеся ocaml'ом -- это существенно не случайная выборка из генсовокупности программистов. Туда лезут люди, которым чего-то не хватило в C++, в haskell и прочих. А такой человек, как минимум, не заурядная web-макака.

     
     
  • 3.12, Vkni (ok), 15:35, 08/03/2019 [^] [ответить]    [к модератору]
  • –2 +/
    > Туда лезут люди, которым чего-то не хватило в C++, в haskell и прочих.

    В Хаскелях не хватает скорости.

     
  • 3.25, Аноним (25), 13:59, 09/03/2019 [^] [ответить]    [к модератору]
  • +/
    > обходятся везде где можно памятью со стека,
    > не нагружая кучу и сборщик мусора.

    Вообще-то стэк OCaml-а аллоцирован в куче.

     
     
  • 4.27, Ordu (ok), 14:14, 09/03/2019 [^] [ответить]     [к модератору]
  • +1 +/
    Какая разница где он аллоцирован, если аллокация со стека сводится к одной арифм... весь текст скрыт [показать]
     
     
  • 5.29, Аноним (25), 14:24, 09/03/2019 [^] [ответить]     [к модератору]  
  • +1 +/
    Во-первых, говоря о стеке процессора, ты забыл про пересылку данных Во-вторых, ... весь текст скрыт [показать]
     
     
  • 6.30, Ordu (ok), 15:35, 09/03/2019 [^] [ответить]     [к модератору]  
  • +/
    стеке процессора Что за странное словосочетание Ты хочешь сказать, что ocaml... весь текст скрыт [показать]
     
     
  • 7.31, Ordu (ok), 15:41, 09/03/2019 [^] [ответить]     [к модератору]  
  • +/
    Хотя я так подумал про ocaml пишут, что у него generational gc, а выделение п... весь текст скрыт [показать]
     
  • 7.32, Аноним (25), 18:11, 09/03/2019 [^] [ответить]     [к модератору]  
  • +1 +/
    Обычное название для стека, который адресуется регистром процессора RSP в случа... весь текст скрыт [показать]
     
     
  • 8.33, Ordu (ok), 18:49, 09/03/2019 [^] [ответить]    [к модератору]  
  • +/
    > Так и сделано. Лимит можно задать перед выполнением.

    На оба стека?

     
     
  • 9.39, Аноним (25), 13:22, 10/03/2019 [^] [ответить]    [к модератору]  
  • +/
    Контролем стека процессора занимается ОС (см. man limits.conf), ставит сторожевую страницу (в общем случае не даёт гарантий от переполнения).
     
  • 8.35, Vkni (ok), 21:11, 09/03/2019 [^] [ответить]     [к модератору]  
  • +/
    Только за счёт того, что компиляция программ занимает минуты или даже десятки ми... весь текст скрыт [показать]
     
  • 7.36, Vkni (ok), 21:14, 09/03/2019 [^] [ответить]     [к модератору]  
  • +/
    Почему В Clean, например, 3 стека - ABC atomic boxed control по типу того, что... весь текст скрыт [показать]
     
     
  • 8.37, Ordu (ok), 12:15, 10/03/2019 [^] [ответить]     [к модератору]  
  • +/
    Потому что cache-locality Стек хорош в этом функции работают преимущественно с... весь текст скрыт [показать]
     
     
  • 9.38, Vkni (ok), 13:11, 10/03/2019 [^] [ответить]     [к модератору]  
  • +/
    Я думаю, что раза в полтора - всё-таки, рабочая глубина этих стеков будет меньше... весь текст скрыт [показать]
     
     
  • 10.40, Ordu (ok), 14:06, 10/03/2019 [^] [ответить]     [к модератору]  
  • +/
    Тут сложно навскидку рассуждать, но если с каждого из тех стеков надо всего одну... весь текст скрыт [показать]
     
     
  • 11.42, Аноним (25), 14:23, 10/03/2019 [^] [ответить]     [к модератору]  
  • +/
    142 многовато, вот 128 CODE cat hello asm fasm demonstration of writing s... весь текст скрыт [показать]
     
     
  • 12.46, Аноним84701 (ok), 22:05, 10/03/2019 [^] [ответить]     [к модератору]  
  • +/
    ЖЫрнота, особенно по зависимостям code cat real_hello_world asm BASE equ 07... весь текст скрыт [показать]
     
     
  • 13.47, Аноним (47), 16:05, 11/03/2019 [^] [ответить]    [к модератору]  
  • +/
    Это же MBR размером 512 байт (на некотором железе не запустится), а было "Smallest x86 ELF Hello World" (50 байт + файловый заголовок).
     
     
  • 14.48, Аноним84701 (ok), 17:07, 11/03/2019 [^] [ответить]     [к модератору]  
  • +/
    Неа, см Специально считерил, срезав см последние три строчки - в интел-... весь текст скрыт [показать]
     
     
  • 15.49, Аноним (47), 06:51, 12/03/2019 [^] [ответить]     [к модератору]  
  • +/
    Сами по себе эти 56 байт разве запустятся Всё одно, требуется некий аналог exe... весь текст скрыт [показать]
     
  • 2.5, Cradle (?), 12:31, 08/03/2019 [^] [ответить]     [к модератору]  
  • –1 +/
    популярен во франкоязычных странах Сам по себе вполне не плох, но вот только в ... весь текст скрыт [показать]
     
     
  • 3.11, Vkni (ok), 15:34, 08/03/2019 [^] [ответить]    [к модератору]  
  • +/
    Зависит от задачи. Вычислительный код писать, например, очень неудобно, если не переопределить операторы. Многопоточности пока нет.
     
  • 3.23, KonstantinB (ok), 00:41, 09/03/2019 [^] [ответить]    [к модератору]  
  • +/
    Ну почему же? В фейсбуке используют (см. reasonml). Docker for Mac тоже на нем написан.
     
  • 2.10, Vkni (ok), 15:34, 08/03/2019 [^] [ответить]     [к модератору]  
  • –1 +/
    И то, и другое Ocaml - это в девичестве Caml Light, который был создан Ксавье Л... весь текст скрыт [показать]
     
     
  • 3.13, Vkni (ok), 15:37, 08/03/2019 [^] [ответить]    [к модератору]  
  • +/
    Упомянутая выше dune, кстати, тоже отрабатывает мгновенно за счёт умного кеширования. В Jane Street недавно был доклад на эту тему.
     
  • 3.28, Аноним (25), 14:18, 09/03/2019 [^] [ответить]     [к модератору]  
  • +/
    MLton для оптимизации выполняет unboxing, в аналогичных местах OCaml будет прове... весь текст скрыт [показать]
     
     
  • 4.34, Vkni (ok), 21:05, 09/03/2019 [^] [ответить]     [к модератору]  
  • +1 +/
    Чтобы выражение f a b c d , которое обязано быть равным f a b c d , можн... весь текст скрыт [показать]
     
     
  • 5.41, Аноним (25), 14:12, 10/03/2019 [^] [ответить]     [к модератору]  
  • +/
    Благодарю Однако, там же сказано со ссылкой на Драгонбук , что преимущество мо... весь текст скрыт [показать]
     
     
  • 6.43, Vkni (ok), 14:47, 10/03/2019 [^] [ответить]    [к модератору]  
  • +/
    Ну там лажа написана - надо поменять. Простейшая проверка показывает, что right to left:

    # let f x y = (x, y);;
    val f : 'a -> 'b -> 'a * 'b = <fun>
    # f (print_string "Left") (print_string "Right");;
    RightLeft- : unit * unit = ((), ())

    Понятно, что чем больше у компилятора возможностей, тем больше может быть степень оптимизации. Но сейчас всё согласовано - right to left.

     
     
  • 7.44, Аноним (25), 16:23, 10/03/2019 [^] [ответить]     [к модератору]  
  • +/
    Если там перепутали порядок вычисления аргументов в существующих имплементациях,... весь текст скрыт [показать]
     
     
  • 8.45, Vkni (ok), 19:26, 10/03/2019 [^] [ответить]    [к модератору]  
  • +/
    > но рассчитывать на эту особенность опасно, т.к. в будущем может измениться".

    Ну я бы не стал рассчитывать на такие тонкости, с учётом тех серьёзных изменений в stdlib, которые произошли между 3 и 4. С другой стороны, то руководство вообще для дремучей версии 2.

     
  • 2.26, Аноним (25), 14:08, 09/03/2019 [^] [ответить]    [к модератору]  
  • +/
    print_endline "Hello World!";;

    компилируется в 355944 байт (ocamlopt)
    либо в 17793 байт (ocaml, байт-код)

     
  • 1.2, Твоя мама (?), 11:52, 08/03/2019 [ответить] [показать ветку] [···]    [к модератору]  
  • +4 +/
    TL;DR: чуваки написали ядро ОС без поддержки userspace-процессов.
     
     
  • 2.6, Cradle (?), 12:46, 08/03/2019 [^] [ответить]    [к модератору]  
  • +/
    да, это для эмбедовки
     
     
  • 3.8, Аноним (8), 14:16, 08/03/2019 [^] [ответить]    [к модератору]  
  • –2 +/
    MirageOS в первую очередь применяется в докере.
     
     
  • 4.9, Cradle (?), 14:56, 08/03/2019 [^] [ответить]    [к модератору]  
  • +/
    ок, спасибо, не знал. Сам на нее смотрел пару лет назад как на альтернативу freertos для allwiner (была идея выделить у A20 одно ядро под реалтайм), но не решился, да и не пошел тот проект у нас.
     
  • 2.24, KonstantinB (ok), 00:45, 09/03/2019 [^] [ответить]    [к модератору]  
  • +1 +/
    Это ОС в виде библиотеки (статически линкуемой, разумеется). В эмбедовке такой подход применяется повсеместно.
     
  • 1.4, Аноним (4), 12:17, 08/03/2019 [ответить] [показать ветку] [···]     [к модератору]  
  • +/
    Гайс, обоснуйте в ней можно будет полноценно установить запустить например брайз... весь текст скрыт [показать]
     
     
  • 2.7, Аноним (7), 13:19, 08/03/2019 [^] [ответить]    [к модератору]  
  • +1 +/
    ne
     
  • 2.14, Аноним (14), 16:27, 08/03/2019 [^] [ответить]    [к модератору]  
  • +/
    Тебе как минимум для гуя нужно взаимодействие с системой.
     
  • 2.15, Аноним (15), 16:56, 08/03/2019 [^] [ответить]    [к модератору]  
  • +/
    Это для краснoглазиков любящих сервера и консоли, гуй не нужен.
     
  • 2.19, Аноним (19), 18:43, 08/03/2019 [^] [ответить]     [к модератору]  
  • +/
    Это хромопроблемы В файрфокс метрики нет от слова вообще , его хоть из-под рут... весь текст скрыт [показать]
     
  • 1.18, erthink (ok), 17:21, 08/03/2019 [ответить] [показать ветку] [···]    [к модератору]  
  • +1 +/
    О mirage-kv написано совершенно не верно. Это не библиотека, а набор сигнатур OCaml (спецификация интерфейса) для взаимодействия с абстрактным key-value storage engine. К git это никакого отношения не имеет, совсем.

    Далее, есть отдельный проект https://github.com/mirage/irmin, реализующий некую модульную базу данных. Так вот в этом Irwin-не есть модули для взаимодействия с git и для хранения данных внутри (с опорой на сервисы) Mirage-OS. В том числе этот Irwin конечно умеет предоставлять доступ через интерфейс описанный в mirage-kv.

    Т.е. при жалении этот Irwin и его взаимодействие с Git можно пользовать без Mirage-OS (но не стоит думать что оно может конкурировать по скорости с RocksDB, Tarantool или libmdbx).

     
     
  • 2.22, erthink (ok), 22:39, 08/03/2019 [^] [ответить]    [к модератору]  
  • +/
    Вижу что уже поправили. Теперь норм.
     
  • 1.20, Аноним (20), 21:51, 08/03/2019 [ответить] [показать ветку] [···]    [к модератору]  
  • –1 +/
    Это для тех, кто скучает по DOSу?
     
     
  • 2.21, Cradle (?), 22:34, 08/03/2019 [^] [ответить]    [к модератору]  
  • +4 +/
    да, кстати, сам только сейчас понял что действительно скучаю по такой юнности в которой дос был бы аккуратно написан в открытых исходниках на окамле...
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:


      Закладки на сайте
      Проследить за страницей
    Created 1996-2019 by Maxim Chirkov  
    ДобавитьПоддержатьВебмастеруГИД  
    Hosting by Ihor