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

WebAssembly Night_Wasmを実行するunikernelとWasmコンパイラ

ainozaki
September 15, 2023
1.8k

WebAssembly Night_Wasmを実行するunikernelとWasmコンパイラ

ainozaki

September 15, 2023
Tweet

Transcript

  1. 何がアツいか
 🔥 unikernel による Wasm の高速な実行
 
 🔥 WASI によって

    unikernel の互換性の問題を解決
 
 🔥 unikernel を Wasm コンテナとして透過的に扱う
 
 

  2. 何がアツいか
 🔥 unikernel による Wasm の高速な実行
 
 🔥 WASI によって

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

  3. Wasmの何が嬉しいか?
 14 HW/Platform-independent runtimeがあれば同一バイナリがどの OS/CPUでも実行可能 Language-independent 複数の言語からコンパイルされる Safe sandbox環境で実行される Fast

    ネイティブに近い速度で実行可能 [1] https://webassembly.github.io/threads/core/intro/introduction.html#design-goals 仕様[1]より引用すると...
  4. 既存のWasmランタイムの課題
 ネイティブよりは実行速度が遅いことが報告されている [2]
 [2] B. Spies and M. Mock, "An

    Evaluation of WebAssembly in Non-Web Environments", 2021 XLVII Latin American Computing Conference (CLEI), pp. 1-10, 2021.
 17 Native Wasmランタイム
  5. unikernel は何に使えるのか?
 • クラウドの普及 → VM 上でワークロードを動かすのが一般的に
 ◦ VM 上で動かすワークロードは

    1 つだけであるケースが多い
 • 各 VM 上で動かすカーネルをより小さくし、そのワークロードに特化し たものにできないか?
 → unikernel の登場
 ハイパーバイザ VM VM Linux Linux App App ハイパーバイザ VM VM unikernel unikernel App App 軽量化・特化
  6. 例: サーバーレス
 クラウド イベント VM unikernel App クラウド unikernel の利用

    → 起動の高速化   実行時間の削減   セキュリティホールの縮小
  7. unikernelを使うと何が嬉しいか?
 30 実行速度が速い security面でも嬉しい 起動時間が短い メモリのフットプリントが小さい • context switchingが不要
 •

    システムコールのオーバヘッド削減 • Attack surfaceの少なさ
 • HyperVisorによる隔離 • コードサイズの小ささ
 • モジュール化された構成
  8. unikernel の実行速度
 31 Simon Kuenzer, Vlad-Andrei Bădoiu, Hugo Lefeuvre, Sharan

    Santhanam, Alexander Jung, Gaulthier Gain, Cyril Soldani, Costin Lupu, Stefan Teodorescu, Costi Răducanu, Cristian Banu, Laurent Mathy, Răzvan Deaconescu, Costin Raiciu, and Felipe Huici. 2021. Unikraft: Fast, Specialized Unikernels the Easy Way. In 16th European Conference on Computer Systems (EuroSys). 376–394. https://doi.org/10.1145/3447786.3456248 higher is better
  9. mew の設計
 mew が Wasm を実行する仕組み
 1. Wasmをネイティブなオブジェクトファイルに変換
 2. mewをコンパイル


    3. 2, 3をリンクしカーネルイメージ作成
 4. 物理マシン or 仮想マシンで実行
 ① ② ③ ④ 34
  10. wasker: 独自WASI 実装を挿入するWasm コンパイラ
 Wasm binaryをホストのネイティブbinaryに変換する
 • WASI 関数を未解決シンボルにして
 オブジェクトファイルへ変換


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

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

  12. 進捗
 • mew
 ✓ タイマ
 ✓ 動的メモリ管理
 ❏ ネットワーク
 ❏

    ファイルシステム
 • wasker
 ✓ 命令のサポート
 ❏ Vector/SIMD命令除く
 ❏ テスト・デバッグ
 ❏ バイナリを小さくするための最適化

  13. 既存技術との定性的比較
 42 コンテナ Wasm ランタイム mew 実行速度 △ Native以下 △

    Native以下 ◎ システムコールなし 隔離性 ✕ カーネルを共有 ◯ ランタイムが保証 ◎ ハイパーバイザ による分離 起動速度 △ ◎ △ VMの起動が必要 フットプリント ◯ ◎ △
  14. Wasmコンテナとしてのmew
 49 Wasmコンテナイ メージ Wasmtime mew 🔥 unikernel を Wasm

    コン テナとして透過的に扱う 🔥 unikernel による Wasm の高 速な実行
  15. unikernelの互換性問題の解決
 51 従来
 互換性/軽量さにトレードオフ
 ⨯ 互換性
 ✓ 実行速度
 ✓ 互換性


    ⨯ 実行速度
 mew
 WASIによる
 カーネルインターフェース
 ✓ 互換性
 ✓ 実行速度
 🔥 WASI によって unikernel の互換性の問題を解決
  16. カーネルインターフェースとしてのWASI
 ✔ 任意のカーネル上で Wasm プログラムの実行を可能にする
 ◦ waskerで生成したオブジェクトファイルと
 当該カーネル上での WASI 実装を差し込めるため


    ✔ カーネルの標準的な API としてWASI を提案
 ◦ 目的特化型カーネルの開発をよりカジュアルに
 59 🔥 Wasm コンパイラによって WASI をカーネルに
 対する標準的なインターフェースとして普及
  17. まとめ
 • mew: WASIをインターフェースとした unikernel
 • wasker: 独自の WASI 実装を差し込む

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