CoWメモリフォークによるサブミリ秒VMサンドボックス
新規VMを起動する必要がなければ、隔離されたコードサンドボックスの起動がどれほど速くなるのか試してみたかった。そこで実行ごとに新しいマイクロVMを起動する代わりに、Pythonとnumpyを事前に読み込んだFirecrackerを一度起動し、完全なVM状態をスナップショットした。その後は、スナップショットメモリの`MAP_PRIVATE`マッピングを基盤とする新しいKVM VMを毎回作成するため、Linuxが自動的にコピーオンライトページを提供する。つまり各サンドボックスは、実際のVM内で既に動作しているPythonプロセスから開始し、コードを実行して終了する。これらはコンテナではなく本物のKVM VMだ:独立したゲストカーネル、独立したゲストメモリ、独立したページテーブル。VMがメモリに書き込むと、そのページのプライベートコピーを取得する。難しい部分はCoW自体ではなく、スナップショットしたVMを正しく再開することだった。Rust、Apache 2.0。
- SaaS
- Webアプリ
- オープンソース
✨ AI サマリー
ZeroBootは、Pythonとライブラリがロードされた事前起動済みFirecrackerマイクロVMをスナップショットすることで、ミリ秒未満のVMサンドボックスを作成するシステムです。各新しい実行はこのスナップショットをコピーオンライトメモリマッピングでフォークし、新鮮なVM起動のオーバーヘッドなしに完全なKVM隔離を提供します。
おすすめ対象
サーバーレス/Function-as-a-Serviceプラットフォームで高速なコールドスタートが必要な場合, 信頼できないユーザーコードの高性能コードサンドボックス, データサイエンスやMLワークロードで迅速かつ隔離されたPython環境が必要な場合
重要な理由
事前初期化されたスナップショットのメモリフォークによりブートプロセスを排除することで、完全なハードウェアレベル隔離とほぼ瞬時のVM起動を実現します。
主な機能
- コピーオンライトメモリフォークを使用して、1ミリ秒未満でVMサンドボックスを起動
- Pythonとnumpyを事前ロードしたFirecrackerを一度起動し、完全なVM状態をスナップショット
- スナップショットメモリのMAP_PRIVATEマッピングでバックアップされた新しいKVM VMを作成し、自動CoWページを実現
- 分離されたゲストカーネル、メモリ、ページテーブルによる本物のKVM VM分離を提供
ユースケース
- データサイエンスプラットフォームは、これを利用して異なる顧客向けに数千の隔離されたPythonデータ変換を実行します。各ユーザーのスクリプトはミリ秒未満で起動する新規VMで実行され、numpyなどのライブラリが既にロードされた予熱環境の性能を維持しながら、ジョブ間の完全な隔離を確保します。
- サーバーレスコンピューティングプロバイダーは、この技術を採用して関数実行環境を構築します。関数が呼び出された時、ランタイムを含むスナップショットから新しいマイクロVMがフォークされ、数百ミリ秒からミリ秒未満の時間へコールドスタート遅延を劇的に減少させ、遅延敏感なアプリケーションのユーザー体験を向上させます。
- セキュリティ研究会社は、これらのサンドボックスを活用してマルウェア分析のために信頼できないコードサンプルを安全に実行します。各サンプルはほぼ瞬時に起動する完全に隔離されたVMで実行され、研究者はフォークされた環境内で悪意のある活動を封じ込めながら数千の変種を迅速にテストできます。