チェックポイント処理は、コンピューティングシステムに耐障害性をもたらす技術です。アプリケーションの状態のスナップショットを保存することで、障害発生時にその時点からアプリケーションを再開できるようにします。これは、障害が発生しやすいコンピューティングシステムで実行される長時間実行アプリケーションにとって特に重要です。
分散コンピューティング環境では、チェックポイント処理は、そうでなければ長時間実行中のアプリケーションが最初からやり直さざるを得なくなるような障害を許容するのに役立つ技術です。チェックポイント処理を実装する最も基本的な方法は、アプリケーションを停止し、必要なすべてのデータをメモリから信頼性の高いストレージ(並列ファイルシステムなど)にコピーしてから、実行を続行することです。[ 1 ]障害が発生した場合、アプリケーションが再起動すると、最初からやり直す必要はありません。むしろ、安定したストレージから最新の状態(「チェックポイント」)を読み取り、その時点から実行します。チェックポイント処理が分散コンピューティングシステムにおける主要なI/Oワークロードであるかどうかについては議論が続いていますが、チェックポイント処理が主要なI/Oワークロードの1つであるという一般的なコンセンサスがあります。[ 2 ] [ 3 ]
分散コンピューティングシステムにおけるチェックポイント処理には、主に協調チェックポイントと非協調チェックポイントの2つのアプローチがあります。協調チェックポイント方式では、プロセスはチェックポイントの一貫性を確保する必要があります。これは通常、何らかの2相コミットプロトコルアルゴリズムによって実現されます。非協調チェックポイント方式では、各プロセスが独立して自身の状態をチェックポイントします。プロセスに固定の時間間隔で状態をチェックポイントするように強制するだけでは、グローバルな一貫性を確保するには不十分であることを強調する必要があります。一貫性のある状態(つまり、メッセージの欠落や重複がない状態)を確立する必要性から、他のプロセスが自身のチェックポイントまでロールバックする可能性があり、その結果、さらに他のプロセスが以前のチェックポイントまでロールバックする可能性があり、最も極端なケースでは、唯一一貫性のある状態が初期状態になる(いわゆるドミノ効果)可能性があります。[ 4 ] [ 5 ]
アプリケーションのチェックポイント機能の最も古く、現在では最も一般的な方法の一つは、対話型アプリケーションにおける「状態保存」機能でした。この機能により、アプリケーションのユーザーはすべての変数やその他のデータの状態を保存し、作業を継続するか、アプリケーションを終了して再起動し、後で保存した状態を復元することができました。これは、アプリケーションの「保存」コマンドまたはメニューオプションによって実現されました。多くの場合、アプリケーションを終了する際に保存されていない作業がある場合、終了前に作業を保存するかどうかをユーザーに尋ねるのが標準的な方法となりました。
この機能は、特定のタスクを一度に完了できないアプリケーション(例えば、数十時間かかることが予想されるビデオゲームをプレイする場合)や、作業が長期間にわたって行われるアプリケーション(例えば、スプレッドシートの行などへのデータ入力)において、ユーザビリティにとって非常に重要になりました。
セーブステートの問題点は、プログラムのオペレーターが保存を要求する必要があることです。自動化されたワークロードやバッチ処理ワークロードなど、対話型ではないプログラムの場合、そのようなアプリケーションのチェックポイント機能も自動化する必要がありました。
バッチ アプリケーションが数万から数十万のトランザクションを処理するようになり、各トランザクションが 1 つのファイルから 1 つのレコードを複数の異なるファイルに対して処理するようになるにつれて、アプリケーションを最初からジョブ全体を再実行することなく、ある時点で再起動できる必要性が不可欠になりました。こうして「チェックポイント/再起動」機能が誕生しました。これは、一定数のトランザクションが処理された後に、アプリケーションの状態の「スナップショット」または「チェックポイント」を取得できる機能です。アプリケーションが次のチェックポイントの前に失敗した場合、チェックポイント情報とトランザクション ファイル内でトランザクションが正常に完了した最後の場所を指定することで、アプリケーションを再起動できます。その後、アプリケーションはその時点から再起動できます。[ 6 ]
チェックポイント処理はコストがかかるため、通常はすべてのレコードに対して行われるのではなく、チェックポイント処理のコストと、レコードのバッチを再処理するために必要なコンピュータ時間の価値との間で、妥当な妥協点を見出して行われていました。そのため、各チェックポイントで処理されるレコード数は、コスト要因、アプリケーションの相対的な複雑さ、およびアプリケーションを正常に再起動するために必要なリソースに応じて、25~200の範囲で変動していました。
FTI は、計算科学者がスケーラブルな方法でチェックポイント/再起動を簡単に実行できるようにすることを目的としたライブラリです。[ 7 ] FTI は、ローカル ストレージと複数の複製および消去技術を活用して、複数のレベルの信頼性とパフォーマンスを提供します。FTI は、ユーザーが保護する必要のあるデータを選択できるようにアプリケーション レベルのチェックポイントを提供し、効率を向上させ、スペース、時間、エネルギーの無駄を回避します。直接データ インターフェイスを提供するため、ユーザーはファイル名やディレクトリ名を扱う必要がありません。すべてのメタデータは、ユーザーに対して透過的に FTI によって管理されます。必要に応じて、ユーザーはノードごとに 1 つのプロセスを割り当てて、フォールト トレランス ワークロードと科学計算をオーバーラップさせ、チェックポイント後のタスクを非同期で実行できます。
ローレンス国立研究所のフューチャーテクノロジーグループは、BLCR と呼ばれるチェックポイント/再起動のハイブリッドカーネル/ユーザー実装を開発しています。彼らの目標は、アプリケーションコードを変更することなく、幅広いアプリケーションをチェックポイントする堅牢で実用レベルの実装を提供することです。[ 8 ] BLCR は、MPI を介して通信する並列アプリケーションのチェックポイントと、SciDAC スケーラブルシステムソフトウェア ISIC によって作成されたソフトウェアスイートとの互換性に重点を置いています。その作業は、Linux 用チェックポイント/再起動 (CR)、チェックポイント可能な MPI ライブラリ、チェックポイント/再起動へのリソース管理インターフェース、およびプロセス管理インターフェースの開発という 4 つの主要分野に分かれています。
DMTCP (Distributed MultiThreaded Checkpointing) は、ソケットで接続された多数のマシンに分散した任意のプログラム群の状態を透過的にチェックポイントするためのツールです。[ 9 ]ユーザーのプログラムやオペレーティングシステムは変更されません。DMTCP でサポートされているアプリケーションには、Open MPI、Python、Perl、および多くのプログラミング言語とシェルスクリプト言語があります。TightVNC を使用すると、拡張機能 (たとえば OpenGL やビデオ) を使用しない限り、X Window アプリケーションをチェックポイントして再起動することもできます。DMTCP でサポートされている Linux 機能には、オープンファイルディスクリプタ、パイプ、ソケット、シグナルハンドラ、プロセス ID およびスレッド ID の仮想化 (古い pid および tid が再起動時に引き続き動作することを保証します)、pty、fifo、プロセスグループ ID、セッション ID、端末属性、およびmmap /mprotect (mmap ベースの共有メモリを含む) があります。DMTCP は、InfiniBand 用の OFED API を実験的にサポートしています。[ 10 ]
最近のプロトコルの中には、チェックポイントの断片を近くのノードに保存することで協調チェックポイントを実行するものがあります。[ 11 ]これは、並列ファイルシステムへの保存コスト(大規模システムではボトルネックになることが多い)を回避し、より近いストレージを使用するため便利です。これは特に大規模なスーパーコンピューティングクラスタで利用されています。課題は、障害からの復旧時にチェックポイントが必要になったときに、チェックポイントの断片を持つ近くのノードが利用可能であることを保証することです。
Mementos は、停電などの頻繁な中断が発生するプラットフォーム向けに、汎用タスクを中断可能なプログラムに変換するソフトウェア システムです。これは、周囲のバックグラウンド ソースからエネルギーを収集するRFID タグやスマート カードなどのバッテリーレス組み込みデバイス向けに設計されています。Mementos は、システム内の利用可能なエネルギーを頻繁に検知し、差し迫った電力損失のためにプログラムをチェック ポイントするか、計算を継続するかを決定します。チェック ポイントする場合、データは不揮発性メモリに保存されます。再起動に十分なエネルギーが得られると、データは不揮発性メモリから取得され、プログラムは保存された状態から再開されます。Mementos は、 MSP430ファミリのマイクロコントローラに実装されています。[ 14 ]
Idetic は、特定用途向け集積回路(ASIC) 開発者が設計にチェックポイントを自動的に組み込むのに役立つ一連の自動ツールです。高位合成ツールを対象とし、レジスタ転送レベル( Verilogコード) でチェックポイントを追加します。動的計画法を使用して、設計の状態機械内のオーバーヘッドの少ないポイントを特定します。ハードウェア レベルでのチェックポイント処理では、依存レジスタのデータを不揮発性メモリに送信する必要があるため、最適なポイントでは、保存するレジスタの数が最小限である必要があります。Idetic は、エネルギーハーベスティングRFID タグデバイスに展開され、評価されています。[ 15 ]