Slide 1

Slide 1 text

Unikernels, MirageOS & Solo5 t-imada 1

Slide 2

Slide 2 text

Agenda § About unikernels Ø unikernel って何? Ø 特徴や構成は? § About MirageOS Ø MirageOS の生い立ち Ø 特徴は構成は? Ø マルチプラットフォーム対応 Ø 広がるMirageOS § About Solo5 Ø Solo5 って何? Ø Solo5 の生い立ち Ø 特徴は構成は? Ø ネットワークでやってみた 2

Slide 3

Slide 3 text

本日の役者たち § Unikernel § MirageOS § Solo5 OS image App. Kernel unikernel とはフレームワーク(考え方) MirageOS image App. Kernel MirageOS とは unikernel の一実装 OCaml ベース MirageOS image App. Kernel Solo5 Server hardware MirageOS image App. Kernel Solo5 Solo5 とは unikernel に特化した サンドボックス環境 3

Slide 4

Slide 4 text

About unikernels 4

Slide 5

Slide 5 text

unikernel って何? (1) § OS界隈に居ると...割と聞いたことがあるお話 https://www.docker.com/docker-news-and-press/docker-acquires-unikernel-systems-extend-breadth- docker-platform 5 「Docker社がUnikernel Systems社を買収しました」 : 2016年1月

Slide 6

Slide 6 text

unikernel って何? (2) 6 § Unikernel Systems社とは Ø Anil Madhavapeddy @ University of Cambridge ら が2015年に 立ち上げたベンチャー企業 Ø メインは MirageOS unikernel の開発を進めるため Ø Citrix (Xen) の色が強い Ø 学内の The Hall of Fame に選ばれている https://www.cst.cam.ac.uk/ring/halloffame § 今年に入って Docker 社の CTO が Justin Cormack (元Unikernel Systems社の人) に変わった Ø 「Linuxkitの人」 と言えばわかってもらえる?! Ø おっと…何か起きてくれないかな!!! Anil Madhavapeddy ※掲載許諾済

Slide 7

Slide 7 text

unikernel って何? (3) § Library OS をベースにした 「1アプリ + 1kernel」 なソフトウェアフレームワーク(概念) (unikernel 界隈の有名な論文から抜粋) “The unikernel approach builds on past work in library OSs. The entire software stack of system libraries, language runtime, and applications is compiled into a single bootable VM image that runs directly on a standard hypervisor” Anil Madhavapeddy et al., “Unikernels: Library operating systems for the cloud.” In Proceedings of ACM ASPLOS 2013, ACM 従来のOS ベース Unikernel ベース 7

Slide 8

Slide 8 text

unikernel の特徴(= いいところ) 1. Improved security ØImmutable OS image ØNo users concept 2. Small footprint (< だいたい10MB) Ø Minimum components 3. Highly optimized Ø Configuration at compiling 4. Fast boot Ø Reduced initialization 8

Slide 9

Slide 9 text

unikernel の構成形態 § 仮想マシンとして作るのが基本 (?) Ø デバイス抽象化がなされているのが大切 § ハイパバイザがなくても当然成り立つ Ø コンテナに似ているけどちょっと違う 9 Hardware Host OS Unikernel img. Unikernel img. Unikernel img. Unikernel img. Hardware Host OS / Hypervisor Unikernel img. Unikernel img. Unikernel img. Unikernel img. VM VM VM VM

Slide 10

Slide 10 text

いろんな unikernel 実装 § アプリ言語特化の unikernel Ø Clive (Go) Ø HaLVM (Haskell) Ø IncludeOS (C++) Ø LING (Erlang/OTP) Ø MirageOS (OCaml) Ø OSv (C, Java, Ruby, Node.js) Ø runtime.js (Javascript) 10 § 目的が明確な unikernel Ø ClickOS (NFV用途) Ø Hermitcore (HPC用途) Ø Rumprun (POSIX) § Love Linux! Ø UKL Ø UniLinux § Windows!! Ø Drawbridge

Slide 11

Slide 11 text

About MirageOS A programming framework for building type-safe, modular systems 11

Slide 12

Slide 12 text

MirageOS の生い立ち § Anil Madhavapeddy @ University of Cambridge らによって開発された OCaml ベースの unikernel § 現在の主なメンテナ組織 Ø Docker, Tarides, robur? Ø リポジトリは https://github.com/mirage/mirage/ § MirageOS の成果物が Docker for Mac/Windows へ Ø https://www.docker.com/blog/docker-unikernels-open-source/ § 簡単な年表 (当然他にもいろいろと事件は起きている) Ø 2013: ver 1.0 (Xen and unix for x86, x86_64) Ø 2014: ver 2.0 (aarch32 support) Ø 2017: ver 3.0 (KVM support, aarch64 support in 2018) Ø 2019: ver 3.6 (seccomp host support, PowerPC64 support) Ø 2021: ver 4.0 (planned, cross-compilation) 12 Anil Madhavapeddy ※掲載許諾済

Slide 13

Slide 13 text

MirageOS 用 platform 形態 § on Linux, MacOS, BSD から Xen, KVM までいろいろ Ø Non-virtualized host (Linux, FreeBSD, MacOS) Ø Non-virtualized host with seccomp (Linux) Ø Xen (Linux, FreeBSD) Ø QEMU/KVM or bhyve (virtio) on Linux, FreeBSD Ø KVM or vmm (hvt) on Linux, FreeBSD, OpenBSD 13 MirageOS image (= process) Host OS MirageOS image (= VM image) Hypervisor/ Host OS VM MirageOS image (= VM image) VM Hypervisor/ Host OS MirageOS image (= process) Host OS

Slide 14

Slide 14 text

MirageOS の特徴 § 沢山のライブラリ Ø 100以上の system library Ø モットーは OCaml 実装!! (一部 C や アセンブリなど) § Modular approach Ø アプリレイヤで必要としているオブジェクト(パッケージ)のみをリンクしてアプリケーションバイナリ生成 14 Network App. tcpip lib OCaml runtime User Kernel config.ml

Slide 15

Slide 15 text

§ ”-t XXX“ で適切なソフトウェアスタックに切り替えて構成してくれる § アプリレイヤはプラットフォームの違いを意識しなくていい 15 MirageOS プログラムのプラットフォーム変更 Hardware (Network interface) mirage-net-xen Network App. mirage-net mirage-net-solo5 mirage-net-unix tap Linux kernel Xen network backend Xen network frontend Xen hypervisor virtio-net (frontend) vhost-net QEMU/KVM on Linux $ mirage configure -t unix $ mirage configure -t xen $ mirage configure -t virtio $ … 共通コード 依存コード あとは make(dune) コマンド実行で OS イメージ完成

Slide 16

Slide 16 text

Hello Mirage!! 16 § console デモ from MirageOS のサンプルプログラム集 https://github.com/mirage/mirage-skeleton/tree/master/device-usage/console

Slide 17

Slide 17 text

MirageOS は広がっている § クラウド環境は当たり前としてベアメタルの世界へ Ø OSが被ってるから1つでいいと心の底から思う Ø 抽象化されたデバイスドライバAPIの確保が大切 17 https://tarides.com/internships/porting-mirageos-to-iot-devices MirageOS image (= Pure OS image) Hardware 既に RISC-V, ESP32 で実施済み 次はARMv7-M

Slide 18

Slide 18 text

時代のニューウェーブに乗っかろう § やろうと思っている (いた) こと ARM CMSIS API を使った MirageOS の porting Ø ARMv7-M, ARMv7-A はいけそう 18 https://www.keil.com/pack/doc/CMSIS/General/html/index.html ポーティングしやすい レイヤの構成方法は何? FreeRTOSとかZephyr を使う方がいいのかなぁ…

Slide 19

Slide 19 text

About Solo5 A sandboxed execution environment for unikernels 19

Slide 20

Slide 20 text

Solo5 とは § ざっくり言うと… 「unikernel に特化したサンドボックス実行環境」 「スリムな実行環境」 § 仮想マシンなしのサンドボックス or 仮想マシンありのサンドボックス を用意 § 実装言語は C と アセンブリ (リポジトリ https://github.com/Solo5/solo5) § 詳細資料 @ FOSDEM2019 https://archive.fosdem.org/2019/schedule/event/solo5_unikernels/attachments/slides/328 1/export/events/attachments/solo5_unikernels/slides/3281/solo5_fosdem19.pdf 20 MirageOS image (= process) Host OS MirageOS image (= VM image) Host OS / Hypervisor 仮想マシンレイヤ seccompフィルタ Solo5の担当箇所 : bindings : tender (Solo5用語)

Slide 21

Slide 21 text

Solo5 の生い立ち § 2016年 Ø IBM Research の Dan Williams らによって MirageOS の Linux KVM 用仮想マシンレイヤ として登場 (2016年) o QEMU/KVM を使用する実装 (今は推奨されてない) o ukvm モードの実装 (KVM をたたく unikernel 専用のフルスクラッチ仮想マシンレイヤ) § 2017年 Ø FreeBSD/bhyveサポート § 2018年 Ø ukvm にて aarch64 をサポート Ø ukvm にて FreeBSD/vmm と OpenBSD/vmm をサポート Ø Muen separation kernel と Genode operating system をサポート Ø ukvm を hvt (hypervisor tender) に改名 § 2019年 Ø seccomp を用いた spt モードをサポート (仮想化なし) 21

Slide 22

Slide 22 text

スリム指向の原点(?) 22 § フロッピーディスク擁護派には厳しい! https://access.redhat.com/ja/articles/1446873

Slide 23

Slide 23 text

Solo5 のアクセス制御 § unikernel本体から使用しないモジュールへのアクセスを遮断 Ø Network, Block device 等のうち、 unikernel 側で必要ないものが生まれるため (これには訳が…) Ø Unikernel image に使用モジュール情報をひっつける Ø モジュールアクセスの際に同情報を参照して適宜遮断 23 $ cat _build/manifest.json { "type": "solo5.manifest", "version": 1, "devices": [ { "name": "service", "type": "NET_BASIC" } ] } 自動生成される使用モジュール情報 MirageOS image (elf format) 使用モジュール情報 バイナリ変換 & .noteセクションに 配置 Host OS / Hypervisor Net Block hvt tender 側 Network write 用 handler or ? 仮想マシンレイヤ solo5_net_write() VM Host

Slide 24

Slide 24 text

hvt (仮想化を使うサンドボックス環境) § 発想は unikernel と同じ Ø スリムなら attack surface が減るよね!! Ø VMEXITを起こすAPI: 8つ (数えた) 24 githubリポジトリ内でAPI(=hvt_do_hypercall)を検索 Paper: https://www.usenix.org/system/files/conference/hotcloud16/hotcloud16_williams.pdf MirageOS image (= VM image) Linux KVM/Host OS hvt tender (仮想マシンレイヤ) 8つのAPI hvt bindings

Slide 25

Slide 25 text

spt (仮想化を使わないサンドボックス環境) § ”sandboxed process tender” の略 § unikernel image/bindings/tender が1プロセスとして動く Ø unikernel image + bingings は1つのELF形式バイナリ Ø tender 側は main() を含む本体のELF形式バイナリ § Linux seccomp を使ってホストOS側システムコールへのアクセスをフィルタする 25 MirageOS image (elf format) Linux OS spt tender seccompフィルタ spt bindings アプリ側 elfバイナリ main() 側 elfバイナリ Paper: https://dl.acm.org/doi/10.1145/3267809.3267845 main()側elfバイナリキック アプリ側elfバイナリロード アプリ側elfバイナリキック

Slide 26

Slide 26 text

hvt のネットワーク高速化 (1) § SR-IOV VF + Netmap を用いてソフトウェア処理を減らす Ø L2 switching をハードウェアにオフロード & tap 処理をなくす Ø RX側は受信データをバッファキューにためて一気に刈り取れるようになりVMEXIT回数削減 § オリジナル実装はよくある bridge + tap を使う方式 26 Host Linux br0 hvt MirageOS tap0 NIC eth0 hvt tap1 MirageOS Host Linux NIC HW L2 switch hvt MirageOS eth1 (VF) eth0 (PF) hvt MirageOS eth2 (VF) Netmap Netmap

Slide 27

Slide 27 text

hvt のネットワーク高速化 (2) § 性能は確かに向上した Ø 試しに MirageOS で実装した MQTT broker の場合は CPU 利用率が20%位下がった Ø https://dl.acm.org/doi/abs/10.1145/3264560.3264561 (Paper) Ø https://github.com/solo5-netmap/solo5/tree/netmap (Source code) § インプリにあたっての考慮 (スリムって維持するのが難しい…) Ø ポーリング禁止 Ø Netmapドライバの位置 27 - unikernel レイヤで暇になると、VMEXIT して hvt 側で epoll() - hvt は SMP 非対応 DPDK ではなく Netmap - 既存 Netmap ドライバ は MirageOS で使用不可 (当然) - ドライバポーティング? それはコストがかかる… - ドライバを Linux に閉じ込めておく - unikernel 側では Netmap バッファ操作のみ実施

Slide 28

Slide 28 text

まとめ § About unikernels Ø アプリとカーネルを1OSイメージ収めよう Ø あくまでも概念 Ø Improved security, Small footprint などのメリット § About MirageOS Ø OCaml をベースに据える unikernel 実装 Ø Type-safe, Modular approach を取り入れてよりセキュアなOSを構成 Ø IoTデバイスへも進出中 § About Solo5 Ø unikernel に特化したサンドボックス環境 Ø スリム化とセキュア性を高めた hvt, spt tender 28