Show HN: CoWメモリフォークを使用したサブミリ秒VMサンドボックス
46日前原文(github.com)
概要
- Zerobootは、AIエージェント向けサブミリ秒VMサンドボックスを実現
- Firecrackerを活用し、コピーオンライト(Copy-on-Write)フォークによる高速起動
- 各サンドボックスは本物のKVM仮想マシンで、ハードウェアレベルのメモリ分離を実現
- APIやSDKを通じてPythonやTypeScriptから利用可能
- 現状はプロトタイプであり、プロダクション運用には未対応
サブミリ秒VMサンドボックスの仕組みと特徴
-
FirecrackerでVMを一度だけ起動し、Pythonやnumpyなどランタイムを事前ロードした状態でスナップショット取得
-
新しい実行ごとにKVM VMをコピーオンライトでフォークし、スナップショットメモリをMAP_PRIVATEでマッピング
-
各サンドボックスは独立したKVM VMとして起動、ゲストカーネル・メモリ・ページテーブルも完全に分離
-
コード実行後は即終了、超高速なサンドボックス起動を実現
- 起動レイテンシ(p50): 0.79ms(従来のDaytonaやE2B microsandboxと比較して圧倒的に高速)
- 起動レイテンシ(p99): 1.74ms
- サンドボックスごとのメモリ消費: 約265KB
- Pythonでのfork+exec時間: 約8ms
- 同時1000フォーク時の合計時間: 815ms
-
ハードウェアレベルのメモリ分離により、セキュリティ・アイソレーションを確保
-
LinuxのCoW機能により、メモリ効率も抜群
API・SDKによる利用方法
- API エンドポイント例
- curlコマンドでPOSTリクエスト送信し、コードを即時実行
- Python SDK
from zeroboot import Sandboxsb = Sandbox("zb_live_your_key")result = sb.run("print(1 + 1)")
- TypeScript SDK
import { Sandbox } from "@zeroboot/sdk";const result = await new Sandbox("zb_live_your_key").run("console.log(1+1)");
アーキテクチャと現状
- FirecrackerでテンプレートVMを一度だけ起動し、スナップショットを取得
- 新規リクエストごとにKVM VMをフォークし、CoWメモリを利用しつつCPU状態も復元
- 完全なVM分離によるセキュリティ
- Rustで実装、Apache-2.0ライセンス
- プロトタイプ段階であり、商用運用前の状態
- 興味があればGitHub Issueで問い合わせ可能
技術的な工夫点
- 毎回新規VMをブートせず、スナップショットから即時復元
- CoW自体よりも、スナップショットVMの正しい再開処理が難関
- 各サンドボックスは本物のKVM VMであり、コンテナとは異なる完全分離
- 書き込み時は個別ページを自動複製、高いセキュリティと効率性
まとめ
- AIエージェントやコード実行基盤に最適な、超高速・高セキュリティなサンドボックス基盤
- 従来技術と比較して圧倒的な起動速度・省メモリ
- 今後の本番運用やOSS貢献にも期待