Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Wasmを実行するunikernelとWasmコンパイラ@MITOU2023 Demo Day

Saza
August 18, 2024
15

Wasmを実行するunikernelとWasmコンパイラ@MITOU2023 Demo Day

Saza

August 18, 2024
Tweet

Transcript

  1. Wasmを実行するunikernel 
 とWasmコンパイラ 
 2024/02/18
 MITOU2023 Demo Day
 1 上田

    蒼一朗 (京都大学 岡部研究室) 野崎 愛 (東京大学 中村・高瀬研究室)
  2. 5

  3. 8

  4. 19

  5. 20

  6. Machine Host OS Hypervisor Guest OS Lib Container Runtime Guest

    OS Lib App Machine Host OS Lib App App Lib App 仮想マシン コンテナ 22
  7. Machine Host OS Hypervisor Guest OS Lib Container Runtime Guest

    OS Lib App Machine Host OS Lib App App Lib App 仮想マシン コンテナ Wasm Runtime Machine Host OS App App Wasm 23
  8. 27 FROM ubuntu:22.04 RUN apt-get update && apt-get install -y

    \ package-foo \ package-bar COPY . /app CMD python /app/app.py
  9. 28 FROM ubuntu:22.04 RUN apt-get update && apt-get install -y

    \ package-foo \ package-bar COPY . /app CMD python /app/app.py Lib App コンテナイメージ
  10. 29 FROM ubuntu:22.04 RUN apt-get update && apt-get install -y

    \ package-foo \ package-bar COPY . /app CMD python /app/app.py Lib App コンテナイメージ コンテナイメージ
  11. Machine Host OS Hypervisor Guest OS Lib Container Runtime Guest

    OS Lib App Machine Host OS Lib App App Lib App Wasm Runtime Machine Host OS App App 33 仮想マシン コンテナ Wasm
  12. Machine Host OS Hypervisor Guest OS Lib Container Runtime Guest

    OS Lib App Machine Host OS Lib App App Lib App Wasm Runtime Machine Host OS App App 34 仮想マシン コンテナ Wasm
  13. Machine Host OS Hypervisor Guest OS Lib Container Runtime Guest

    OS Lib App Machine Host OS Lib App App Lib App Wasm Runtime Machine Host OS App App 36
  14. Container Runtime Machine Lib App Lib App Wasm Runtime Machine

    Guest OS App App 37 Hypervisor Host OS Machine Guest OS パブリッククラウドの場合 Machine Host OS Hypervisor Guest OS Lib Guest OS Lib App App
  15. Container Runtime Machine Lib App Lib App Wasm Runtime Machine

    Guest OS App App 38 Hypervisor Host OS Machine Guest OS パブリッククラウドの場合 隔離性が必要 → Machine Host OS Hypervisor Guest OS Lib Guest OS Lib App App
  16. Container Runtime Machine Lib App Lib App Wasm Runtime Machine

    Guest OS App App 39 Hypervisor Host OS Machine Guest OS パブリッククラウドの場合 隔離性が必要 → CVE-2024-21626 コンテナの隔離が 破られる脆弱性
  17. App 42 Wasm Runtime Machine Guest OS App 42 Hypervisor

    Host OS Machine Machine unikernel Hypervisor Host OS Machine
  18. App 43 Wasm Runtime Machine Guest OS App 43 Hypervisor

    Host OS Machine Machine unikernel Hypervisor Host OS Machine 隔離性の維持 × ゲスト OS のオーバーヘッドの削減
  19. 46

  20. 53 wasm.o AoT コンパイル mewz.o mewz.o mewz.o kernel.elf コンパイル 静的リンク

    … // 呼び出し call fd_read … … // 実装 fn fd_read() …
  21. まとめ
 • Mewz: Wasm を実行するのに特化した軽量 OS
 ◦ クラウド上で Wasm を高い隔離性

    を保ちつつ
 低オーバーヘッド で実行
 ◦ runwasi に対応 → Kubernetes などから実行できる
 
 • Wasker: Wasm をオブジェクトファイルに変換
 ◦ 任意の OS 上で Wasm を実行可能にする
 64 https://github.com/mewz-project/
  22. mew ✖ コンテナランタイム 
 68 Wasmプログラム 高レベルランタイム VM containerd-shim-mew •

    Wasmを読み取る • waskerでコンパイル • mewとwaskerの生成物をリンク • VM上でmewを起動 mew
  23. 何がアツいか 
 🔥 unikernel による Wasm の高速な実行 
 
 🔥

    WASI によって unikernel の互換性の問題 を解決
 
 🔥 unikernel を Wasm コンテナとして透過的 に扱う
 
 🔥 Wasm コンパイラによって WASI をカーネルに対する標準的な インターフェース として普及 

  24. unikernel の利点 
 • アプリケーションとカーネルがリンク
 → スタンドアローンなバイナリに
 • アプリケーションがカーネルモードで動く
 →

    システムコールのオーバーヘッドが削減される
 • アドレス空間が単一
 → コンテキストスイッチのオーバーヘッドが削減
 70 MirageOS という unikernel の説明より →
  25. unikernelの互換性問題の解決 
 72 従来
 互換性/軽量さにトレードオフ 
 ⨯ 互換性
 ✓ 実行速度


    ✓ 互換性
 ⨯ 実行速度
 mew
 WASIによる 
 カーネルインターフェース 
 ✓ 互換性
 ✓ 実行速度
 🔥 WASI によって unikernel の互換性の問題を解決
  26. Wasker: Wasm コンパイラ 
 Wasm binaryをnative binaryに変換するコンパイラ
 • WASI 関数を未解決シンボルにして


    オブジェクトファイルへ変換
 • 生成するオブジェクトファイルは
 独自に実装したWASI関数の実装と
 リンクできる
 → 独自の WASI 実装を差し込める 
 74
  27. Wasker: 開発するに至った経緯 
 • Wasm をネイティブバイナリに変換するものはすでにある
 • ↑ OS 依存なバイナリが出力される


    ◦ Linux、Windows のシステムコールを
 叩いている
 ◦ WASI API の実装がすでに同梱されている
 ◦ → mew 上では動かない
 • Wasker は WASI API の実装自体はバイナリに含まず、未解決シンボ ルにする
 ◦ → OS 非依存 
 ◦ mew のみならず、他の OS 上で Wasm を実行することが可能に 

  28. 82