プログラミング
Show HN: Tarit – Firecrackerの2倍高速なハイパーバイザー
Show HN: Tarit – a hypervisor which is 2x faster than firecracker (github.com)
要約
Taritは、AIエージェントやRL環境向けに設計された、高速かつ安全なマイクロVMプラットフォームです。ミリ秒単位でのVM起動、タスク実行、破棄を可能にし、コンテナとは異なりカーネルレベルの分離を提供します。VMM(Virtual Machine Monitor)とオーケストレーターの2つのコンポーネントから成り、特に起動時間、スナップショット、サスペンド/レジューム機能においてFirecrackerを大幅に凌駕する性能を示しています。
全文翻訳
Tarit
AIエージェントとRL環境のための、最速のハイパーバイザーとサンドボックスクラウド。
Taritは、AIエージェントワークロードのために構築された、安全で高速な一時的なサンドボックスのためのマイクロVMプラットフォームです。
実ハードウェア仮想化VMをミリ秒単位で起動し、その中でタスクを実行し、破棄することで、各サンドボックスに共有カーネルコンテナ境界ではなく、カーネルレベルの分離を提供します。
これは、一緒に開発された2つの部分から構成されています。
vmm/ - Tarit VMM、最小限のrust-vmmベースのマイクロVMモニター(ハイパーバイザーレイヤー)。1つのプロセスが1つのマイクロVMを実行します。単独で使用することも、任意のオーケストレーターの下で使用することも可能です。
orch/ - taritd、フリート全体でマイクロVMを起動・管理するマルチノードオーケストレーターおよびPaaSコントロールプレーン。配置、ウォームプール、ネットワーキング、スナップショット、SSH/PTYアクセス、キーごとの使用統計、監査証跡を備えています。
これらは、1つの共有、依存関係の少ないクレート(proto/)にあるUnixドメインソケットプロトコルを介して通信します。
このクレートがワイヤー契約となるため、taritdまたは独自のコントロールプレーンからVMMを、手作業で型をコピーすることなく操作できます。
なぜマイクロVMなのか
リアルな分離。
各サンドボックスは、名前空間化されたプロセスではなく、独自のカーネルを持つKVMゲストです。侵害されたり暴走したりしたワークロードは、ホストや隣接するVMを見ることができません。
高速かつ安価。
最小限のデバイスモデル(MMIO virtioのみ、PCIなし、BIOSなし)、デマンドページングされたゲストRAM、サブ秒起動のためのスナップショット/リストア。
設計上の一時性。
作成、実行、破棄。スナップショットとコピーオンライトオーバーレイにより、多数の同一サンドボックスを安価に起動できます。
エージェントのために構築。
vsockベースの実行と対話型PTY、キーごとの使用量計測と監査、バースト的な作成/実行/破棄に最適化されたオーケストレーター。
VMM vs Firecracker
Taritの列はベアメタル検証から、Firecrackerの列は公開ドキュメントからのものです。
| 機能
| Tarit (ベアメタル, p50)
| Firecracker
| スナップショットからの実行準備完了
| 83 ms (node -v 結果)
| 公開されている数値なし
| スナップショットから実行中のVMへのリストア
| 2.9 ms
| 公開されている数値なし
| ウォームプールVMハンドオフ
| 12.3 ms
| n/a
| 実行中のVMでの実行往復
| 0.6 ms
| n/a, 実行エージェントなし
| フルスナップショット、256 MiB
| 60 ms、ゲストは実行を継続
| 一時停止が必要
| ライブスナップショット(実行中のVM)
| はい
| いいえ
| ゲストRAMを解放するサスペンド
| はい
| いいえ
| API経由のPTY
| はい
| シリアルコンソールのみ
| OCIイメージブート
| 内蔵
| いいえ
| Egressフィルタリング
| VMごとの許可リスト+レート制限
| レート制限のみ
アーキテクチャ概要
HTTP API + CLI + SSHゲートウェイ
|
taritd (orch)
1つのマルチノードコントロールプレーン
/
|
\
配置、ウォームプール、フリート
/
|
\
使用量 + 監査 -> PostgreSQL
vmm serve
vmm serve
vmm serve
1つのプロセス/マイクロVM
|
|
|
マイクロVM
マイクロVM
マイクロVM
KVMゲスト、独自のカーネル
taritdと任意のサードパーティ製オーケストレーターは、vmm serveに対して同じtarit-protoプロトコル(長さプレフィックス付きJSONリクエスト、1つのレスポンス、VMごとのUnixソケット経由)を使用します。
独自のオーケストレーターの組み込みについては、vmm/docs/INTEGRATION.mdを参照してください。
クイックスタート
クイックスタートはレイヤードになっています。
レイヤー1はコードをマイクロVMで実行できるようにします。
レイヤー2はスナップショット、サスペンド、リストアを追加します。
レイヤー3はオーケストレーターで管理されたフリートを実行します。
必要なレイヤーのみを使用してください。
KVM(/dev/kvm)とRustツールチェーンを備えたLinuxホストが必要です。
マイクロVMの実行にはroot権限(またはkvmグループのメンバーシップ)が必要なため、コマンドはsudoを使用します。
レイヤー1: コードをマイクロVMで実行する
git clone https://github.com/instavm/tarit && cd tarit
sudo make install # vmm, taritd, およびゲストエージェントをビルドしてインストール
sudo make guest # 一度だけ: ゲストカーネルをビルドしてUbuntu rootfsをプルする
make guest は、遅い作業(カーネルビルド+OCIプル)を一度行い、guest-assets/vmlinuxとguest-assets/rootfs.ext4を書き込みます。そのため、後でVMを起動するのは瞬時です。
VMを起動し、コマンドを実行し、破棄する:
sudo vmm serve --socket /tmp/vm.sock &
sudo vmm --socket /tmp/vm.sock create --kernel guest-assets/vmlinux --rootfs guest-assets/rootfs.ext4
sleep 12 # ゲストが起動してエージェントに接続するのを待つ
sudo vmm --socket /tmp/vm.sock exec "uname -a"
sudo vmm --socket /tmp/vm.sock stop
ハイパーバイザーだけが必要な場合:
sudo make install-vmm は vmm のみをインストールします。
レイヤー2: スナップショット、サスペンド、リストア
同じソケットを操作してVMの状態をキャプチャし、移動します。
フルスナップショットはメモリとデバイスの状態を書き込みます。--diff はダーティページのみを書き込みます。
サスペンドは常駐ゲストRAMを解放し、レジュームはそれを元に戻します。
リストアはスナップショットから新しいVMMを起動します。
sudo vmm --socket /tmp/vm.sock snapshot # フルスナップショット、.snapパスを出力
sudo vmm --socket /tmp/vm.sock snapshot --diff # インクリメンタル(ダーティページのみ)
sudo vmm --socket /tmp/vm.sock suspend # 常駐ゲストRAMを解放
sudo vmm --socket /tmp/vm.sock resume
sudo vmm restore --snapshot /path/to.snap # 新しいVMMプロセスにリストア
Taritはライブスナップショットも行います。ダウンタイムなしで実行中のゲストのメモリ整合性のあるスナップショットを取得するため、ビジーなVMをチェックポイントしたりフォークしたりできます。
完全なデバイス、Egress、Jailer、PTYインターフェースについては、vmm/docs/STANDALONE.mdを参照してください。
レイヤー3: オーケストレーターでフリートを実行する
taritdは、HTTP APIを介して1つ以上のノードで多数のマイクロVMを管理します。配置、ウォームプール、キーごとの使用量計測、SSH/PTYゲートウェイを備えています。
シングルノード:
cd orch
TARIT_API_KEY=$(openssl rand -hex 24) \
TARIT_VMM_BIN=$(command -v vmm) \
TARIT_KERNEL=$PWD/../guest-assets/vmlinux \
TARIT_ROOTFS=$PWD/../guest-assets/rootfs.ext4 \
taritd serve
その後、HTTP経由でVMを作成・操作し、マルチノードクラスターにスケールアウトします。
オーケストレーターのクイックスタートと設定: orch/docs/QUICKSTART.md, orch/docs/CONFIGURATION.md
アーキテクチャとHTTP API: orch/docs/ARCHITECTURE.md, orch/docs/API.md
マルチノードクラスター、フェイルオーバー、オートスケーリング: orch/docs/RESILIENCE.md, orch/docs/AUTOSCALING.md
使用統計と監査証跡: orch/docs/USAGE-AND-AUDIT.md
独自のコントロールプレーンからVMMを操作する: vmm/docs/INTEGRATION.md
リポジトリレイアウト
vmm/ Tarit VMM (マイクロVMモニター) - 独自のcargoワークスペース
orch/ taritd、オーケストレーターおよびPaaSコントロールプレーン - 独自のcargoワークスペース
proto/ tarit-proto、共有UDSワイヤープロトコルクレート (KVMフリー)
vmm/ と orch/ は独立したcargoワークスペースであるため、VMMは単独でビルド、テスト、消費できます。どちらもワイヤータイプのためにproto/に依存しています。
ドキュメント
Tarit VMM (スタンドアロン): vmm/README.md, vmm/docs/STANDALONE.md
独自のオーケストレーターを組み込む: vmm/docs/INTEGRATION.md
VMMビルド+CLI+UDS API: vmm/docs/BUILD-AND-API.md
オーケストレーターのクイックスタート+設定: orch/docs/QUICKSTART.md, orch/docs/CONFIGURATION.md
オーケストレーターのアーキテクチャ+API: orch/docs/ARCHITECTURE.md, orch/docs/API.md
レジリエンスとスケーリング(テスト済みシナリオ): orch/docs/RESILIENCE.md
使用統計と監査証跡: orch/docs/USAGE-AND-AUDIT.md
コントリビューティング: CONTRIBUTING.md
プラットフォームサポート
ホスト: KVMを備えたx86_64 Linux。開発はmacOSでもビルドとクロスチェックのために機能しますが、マイクロVMの実行にはKVMが必要です。
まだ実装されていないもの: aarch64ゲスト、virtio-balloon。
セルフホスティング
AWSとGCPでセルフホスティングがテストされています。Azureサポートは近日公開予定です。
ライセンス
TaritはAGPL-3.0-or-laterライセンスの下で提供されます。LICENSEを参照してください。