# ランタイム中立チェックポイント
## 定義
ランタイム中立チェックポイント(runtime-neutral checkpointing)は、特定のランタイム実装に依存しない中間形式でアプリケーションの実行状態を保存し、異なるランタイム間で復元可能にするチェックポイント技術である。WebAssembly の場合、プログラムカウンタ、バリュースタック、コントロールスタック、フレームスタック、線形メモリ、グローバル変数などをランタイム非依存表現に変換することで、WasmEdge から WAMR など異なるランタイム間の移行を可能にする。
## 横断的知見
- **ランタイム中立化の鍵は命令アドレスの抽象化にある**: EdgeSys ’24 と CANDARW 2025 は、プログラムカウンタやリターンアドレスを「関数インデックス」と「関数先頭からのオフセット」の組に変換することで、異なるランタイムのスタック表現間で相互変換可能にしている。命令アドレスの抽象化が、Wasm マイグレーション全体のランタイム中立化の鍵である。(Source: [[@2024__EdgeSys__Stateful VM Migration Among Heterogeneous WebAssembly Runtimes for Efficient Edge-cloud Collaborations]], [[@2025__CANDARW__Seamless Self-Healing in WebAssembly Container Orchestration with Runtime-Neutral Checkpointing]])
- **型情報に基づくスタック復元が必要である**: WasmEdge はスタック要素を 128 ビットで統一し、WAMR は 32 ビット単位で格納するため、型情報なしにバイト列をコピーしても復元できない。型スタックまたは Wasm コードからの静的型推論を用いて、各スタック要素の型を特定する。(Source: [[@2024__EdgeSys__Stateful VM Migration Among Heterogeneous WebAssembly Runtimes for Efficient Edge-cloud Collaborations]])
- **dirty memory 検出で転送サイズを削減できる**: OS カーネルの dirty memory 検出機能を利用し、線形メモリのうち実際に書き込まれた領域のみをチェックポイントに含めることで、CRIU と比較して 30〜100 倍のチェックポイント時間短縮を達成できる。(Source: [[@2024__EdgeSys__Stateful VM Migration Among Heterogeneous WebAssembly Runtimes for Efficient Edge-cloud Collaborations]])
- **自己ホスト型ランタイムは、ランタイム中立化の実装戦略として「抽象化ではなく隔離」を提供する**: EdgeSys ’24 や CANDARW 2025 は、プログラムカウンタやスタックなどをランタイム非依存表現に変換することで異種ランタイム間の C/R を実現した。対照的に、Mid4CC 2025 の Chiwawa は、Wasm にコンパイルした自己ホスト型ランタイムを隔離層として用い、アプリケーション実行状態をホストランタイムの実装から切り離す。この隔離アプローチは、ホストランタイムの改変なしに任意の実行点で C/R でき、かつ一貫して小さな状態サイズ(1076 KB)を達成する。(Source: [[@2025__Mid4CC__Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint-Restore in Edge-Cloud Continuum]])
- **fast interpreter と standard interpreter の間では、命令ポインタの対応付けとスタックレイアウトの型付けが両方必要である**: APSys 2024 の予備研究は、WasmEdge (standard interpreter) と WAMR・Wasm3 (fast interpreter) を対象に、プログラムカウンタを相対アドレスに変換し、コントロールスタック・バリュースタックを変換する。fast interpreter はカスタムコード上の実行点を持つため、Wasm バイトコード上の実行点との対応付けが必要。また、バリュースタックは 32 ビット単位と 128 ビットパディングなど異なるメモリレイアウトを持つため、型情報を管理するデータ構造を導入して変換する。(Source: [[@2024__APSys__A Checkpoint-Restore Mechanism with Interoperability Among Distinctive WebAssembly Interpreters]])
- **fast interpreter のスタック復元には Wasm コードの関数単位走査が有効である**: APSys 2024 は、fast interpreter のバリュースタックを standard interpreter の内容に変換するために、checkpoint 時に Wasm コードを関数単位で走査し、各値が格納されているアドレスを収集する。値自体の再計算は不要で、アドレス収集のみで復元できるため、ループや後方ジャンプは発生しない。(Source: [[@2024__APSys__A Checkpoint-Restore Mechanism with Interoperability Among Distinctive WebAssembly Interpreters]])
## 未解決の問い
- JIT/AOT コンパイルにより最適化されたコードの実行点を、インタプリタ実行点と対応づける方法は何か。
- ファイル I/O やネットワーク通信など、Wasm ランタイム外部の OS レベル状態を含めた完全なチェックポイントはどう実現するか。
- ランタイム中立チェックポイントのフォーマットを標準化する価値と障壁は何か。
- チェックポイント取得間隔と復元損失のトレードオフをどう設計すべきか。
- fast interpreter と standard interpreter の間で、カスタムコード上の全実行点を Wasm バイトコード上の相対アドレスに正確に対応づける一般的手法は何か。特に命令順序の変化やレジスタ割り当ての影響をどう扱うか。
## 関連
- 概念: [[WebAssembly]] / [[チェックポイント]] / [[ホットリスタート]] / [[動的ランタイム切り替え]] / [[Self-Hosted WebAssembly Runtime]]
- エンティティ: [[WasmEdge]] / [[WAMR]]
- ソース: [[@2024__EdgeSys__Stateful VM Migration Among Heterogeneous WebAssembly Runtimes for Efficient Edge-cloud Collaborations]] / [[@2025__CANDARW__Seamless Self-Healing in WebAssembly Container Orchestration with Runtime-Neutral Checkpointing]] / [[@2025__Mid4CC__Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint-Restore in Edge-Cloud Continuum]]
- 関連 MOC: [[System Engineering - MOC]]