Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Wasmを実行するunikernelとWasmコンパイラ@MITOU2023 Demo Day
Search
Saza
August 18, 2024
0
15
Wasmを実行するunikernelとWasmコンパイラ@MITOU2023 Demo Day
発表動画:
https://www.youtube.com/watch?v=0AfWFMxQdf4
Saza
August 18, 2024
Tweet
Share
More Decks by Saza
See All by Saza
第56回 情報科学若手の会 Wasmを実行するunikernelとWasmコンパイラ
sazaku
6
4.9k
Featured
See All Featured
Bootstrapping a Software Product
garrettdimon
PRO
305
110k
Scaling GitHub
holman
458
140k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
A Tale of Four Properties
chriscoyier
157
23k
Fireside Chat
paigeccino
34
3.1k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
48
2.2k
A designer walks into a library…
pauljervisheath
204
24k
Thoughts on Productivity
jonyablonski
67
4.4k
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
Gamification - CAS2011
davidbonilla
80
5.1k
Java REST API Framework Comparison - PWX 2021
mraible
28
8.3k
Transcript
Wasmを実行するunikernel とWasmコンパイラ 2024/02/18 MITOU2023 Demo Day 1 上田
蒼一朗 (京都大学 岡部研究室) 野崎 愛 (東京大学 中村・高瀬研究室)
ブラウザ 2
ブラウザ 3
ブラウザ上で Wasm を動かしてみる 4
5
など 6
など 7
8
Linux 上で Wasm を動かしてみる 9
Operating System Machine Wasm Runtime Application 10
Operating System Machine Application Application Operating System 11
12 https://github.com/mewz-project/mewz
Operating System Machine Application Application Operating System 13
Operating System Machine Application • OS と Wasm(アプリケーション)が一体化 • 単一の
Wasm のみを実行 Application Operating System 14
Operating System Machine Application • OS と Wasm(アプリケーション)が一体化 • 単一の
Wasm のみを実行 → unikernel Application Operating System 15
Mewz 上で Wasm を動かしてみる 16
Mewz 上で Wasm を動かしてみる 17 https://demoday.saza.dev
Wasm の動向 18
19
20
Machine Host OS Hypervisor Guest OS Lib Guest OS Lib
App App 仮想マシン 21
Machine Host OS Hypervisor Guest OS Lib Container Runtime Guest
OS Lib App Machine Host OS Lib App App Lib App 仮想マシン コンテナ 22
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
VS 24
VS ✅ ポータビリティ ✅ セキュリティ ✅ 軽量 25
VS ✅ ポータビリティ ✅ セキュリティ ✅ 軽量 26
27 FROM ubuntu:22.04 RUN apt-get update && apt-get install -y
\ package-foo \ package-bar COPY . /app CMD python /app/app.py
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 コンテナイメージ
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 コンテナイメージ コンテナイメージ
30 ソースコード ソースコード ソースコード
31 ソースコード ソースコード ソースコード コンパイル
32 ソースコード ソースコード ソースコード コンパイル スタンドアロン
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
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
Mewz が果たす役割・貢献 35
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
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
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
Container Runtime Machine Lib App Lib App Wasm Runtime Machine
Guest OS App App 39 Hypervisor Host OS Machine Guest OS パブリッククラウドの場合 隔離性が必要 → CVE-2024-21626 コンテナの隔離が 破られる脆弱性
40 Wasm Runtime Machine Guest OS App 40 Hypervisor Host
OS Machine
41 Wasm Runtime Machine Guest OS App 41 Hypervisor Host
OS Machine 無駄
App 42 Wasm Runtime Machine Guest OS App 42 Hypervisor
Host OS Machine Machine unikernel Hypervisor Host OS Machine
App 43 Wasm Runtime Machine Guest OS App 43 Hypervisor
Host OS Machine Machine unikernel Hypervisor Host OS Machine 隔離性の維持 × ゲスト OS のオーバーヘッドの削減
44 30% 高速化
アーキテクチャ 45
46
47 wasm.o AoT コンパイル
Wasm コンパイラ 48 https://github.com/mewz-project/wasker
49 wasm.o AoT コンパイル
50 wasm.o AoT コンパイル mewz.o mewz.o mewz.o コンパイル
51 wasm.o AoT コンパイル mewz.o mewz.o mewz.o kernel.elf コンパイル 静的リンク
52 wasm.o AoT コンパイル mewz.o mewz.o mewz.o kernel.elf コンパイル 静的リンク
53 wasm.o AoT コンパイル mewz.o mewz.o mewz.o kernel.elf コンパイル 静的リンク
… // 呼び出し call fd_read … … // 実装 fn fd_read() …
Kubernetes から Mewz を起動してみる 54
55 Container Runtime
56 Container Runtime runwasi
57 Container Runtime runwasi
MikanOS 上で Wasm を実行してみる 58
59 wasm.o mewz.o mewz.o mewz.o kernel.elf
60 wasm.o mewz.o mewz.o wasi.o app.elf あるOS上の WASI の 実装
Wasm を任意の OS 上で 実行することを可能にする 61 wasm.o mewz.o mewz.o wasi.o
app.elf あるOS上の WASI の 実装
Wasm を任意の OS 上で 実行することを可能にする 62 wasm.o mewz.o mewz.o wasi.o
app.elf MikanOS上 WASI の 実装
謝辞 63 @kateinoigakukun さん @utam0k さん
まとめ • Mewz: Wasm を実行するのに特化した軽量 OS ◦ クラウド上で Wasm を高い隔離性
を保ちつつ 低オーバーヘッド で実行 ◦ runwasi に対応 → Kubernetes などから実行できる • Wasker: Wasm をオブジェクトファイルに変換 ◦ 任意の OS 上で Wasm を実行可能にする 64 https://github.com/mewz-project/
補足スライド 65
コンテナランタイムの仕組み 66 コンテナ 高レベルランタイム 低レベルランタイム containerd-shim-runc
WasmEdge ✖ コンテナランタイム 67 Wasmプログラム 高レベルランタイム Wasmランタイム containerd-shim-wasmedge •
イメージからWasmファイルを 読み取る • WasmEdgeインスタンスを起 動
mew ✖ コンテナランタイム 68 Wasmプログラム 高レベルランタイム VM containerd-shim-mew •
Wasmを読み取る • waskerでコンパイル • mewとwaskerの生成物をリンク • VM上でmewを起動 mew
何がアツいか 🔥 unikernel による Wasm の高速な実行 🔥
WASI によって unikernel の互換性の問題 を解決 🔥 unikernel を Wasm コンテナとして透過的 に扱う 🔥 Wasm コンパイラによって WASI をカーネルに対する標準的な インターフェース として普及
unikernel の利点 • アプリケーションとカーネルがリンク → スタンドアローンなバイナリに • アプリケーションがカーネルモードで動く →
システムコールのオーバーヘッドが削減される • アドレス空間が単一 → コンテキストスイッチのオーバーヘッドが削減 70 MirageOS という unikernel の説明より →
unikernelの課題 71 運用のつらさ 互換性 アプリケーションの移植が必要 独自のビルドシステム 手元でカーネルごとビルド
煩雑なデプロイ ディスクイメージを作ってカーネルをブートして...
unikernelの互換性問題の解決 72 従来 互換性/軽量さにトレードオフ ⨯ 互換性 ✓ 実行速度
✓ 互換性 ⨯ 実行速度 mew WASIによる カーネルインターフェース ✓ 互換性 ✓ 実行速度 🔥 WASI によって unikernel の互換性の問題を解決
既存のWasmランタイムとの比較 Wasmランタイム カーネル mew WASI WASI システムコール Hypervisor
Wasker: Wasm コンパイラ Wasm binaryをnative binaryに変換するコンパイラ • WASI 関数を未解決シンボルにして
オブジェクトファイルへ変換 • 生成するオブジェクトファイルは 独自に実装したWASI関数の実装と リンクできる → 独自の WASI 実装を差し込める 74
Wasker: 開発するに至った経緯 • Wasm をネイティブバイナリに変換するものはすでにある • ↑ OS 依存なバイナリが出力される
◦ Linux、Windows のシステムコールを 叩いている ◦ WASI API の実装がすでに同梱されている ◦ → mew 上では動かない • Wasker は WASI API の実装自体はバイナリに含まず、未解決シンボ ルにする ◦ → OS 非依存 ◦ mew のみならず、他の OS 上で Wasm を実行することが可能に
今までの世界 76
今までの世界 77
wasker が実現する世界 78
wasker が実現する世界 79
wasker が実現する世界 80
wasker が実現する世界 81 🔥 Wasm コンパイラによって WASI をカーネルに
対する標準的なインターフェースとして普及
82
Windows x86_64 Linux AArch64 Linux AArch64 Windows x86_64 83
Windows x86_64 Linux AArch64 Linux AArch64 Windows x86_64 84
Linux AArch64 Windows x86_64 100MB~ ~10MB 85
サンドボックス 86
サンドボックス 87
サンドボックス 88
サンドボックス CVE-2024-21626 コンテナの隔離が破られる脆弱性 89