この節では、ユーザーレベルとカーネルレベルの 2 種類のジョブチェックポイント設定について検討します。
多くのアプリケーションプログラム、特にかなりの CPU 時間を消費するプログラムでは、フォールトトレランスを高めるためにチェックポイント設定および再起動メカニズムが使用されます。処理データのステータス情報と重要部分は、アルゴリズムのある段階で 1 つ以上のファイルに繰り返し書き込まれます。アプリケーションが中止された場合、これらの再開ファイルを処理してあとで再起動することができます。ファイルは、チェックポイントの直前の状況に相当する一貫性のある状態に戻ります。ほとんどの場合、ユーザーは再開ファイルを適切な場所に移動する必要があるので、この種のチェックポイント設定はユーザーレベルの チェックポイント設定と呼ばれます。
統合されたユーザーレベル チェックポイント設定を持たないアプリケーションプログラムは、チェックポイント設定ライブラリを使用できます。チェックポイント設定ライブラリは、ハードウェアベンダーまたはパブリックドメインによって提供される場合があります。University of Wisconsin の Condor プロジェクトはこの一例です。アプリケーションをこのライブラリと再リンクすることによって、チェックポイント設定メカニズムは、ソースコードを変更せずにアプリケーションにインストールできます。
オペレーティングシステムによっては、オペレーティングシステムのカーネルの内部でチェックポイント設定をサポートしているものもあります。この場合、アプリケーションプログラムでの準備やアプリケーションの再リンクは必要ありません。カーネルレベルのチェックポイント設定は、通常 1 つのプロセスやプロセス階層全体に適用されます。それぞれのプロセスの階層にチェックポイントを設定して、いつでも再起動することができます。通常、チェックポイントの開始にはユーザーコマンドと C ライブラリインタフェースの両方が使用できます。
Grid Engine システムは、オペレーティングシステムによるチェックポイント設定も適宜サポートしています。現在サポート対象のカーネルレベルのチェックポイント設定機能については、N1 Grid Engine 6.1 ソフトウェアのリリースノートを参照してください。
再起動機能によって実行済みの作業を繰り返す必要はほとんどないので、チェックポイント設定ジョブはいつでも割り込みできます。この機能は、Grid Engine システムで移行および動的負荷均衡メカニズムを構築するために使用されます。要求があれば、チェックポイント設定ジョブはオンデマンドで中止されます。ジョブは Grid Engine システムのほかのマシンに移行されるので、クラスタ内の負荷は動的に平均化されます。チェックポイント設定ジョブが中止され移行される理由は、次のとおりです。
実行中のキューまたはジョブが qmod または QMON コマンドによって明示的に一時停止された。
キューの一時停止しきい値を超過したので、ジョブまたはジョブが実行されているキューが自動的に一時停止された。ジョブのチェックポイント機会の指定には、一時停止の場合も含まれます。詳細は、『Sun N1 Grid Engine 6.1 管理ガイド』の「負荷および一時停止しきい値の構成」と 「コマンド行からのチェックポイント設定ジョブの発行、監視、または削除」を参照してください。
ジョブを移行すると、sge_qmaster に戻ります。別の適切なキューを使用できる場合、ジョブは続けてそのキューに割り振られます。この場合、qstat の出力は R をステータスとして示します。
カーネルレベル チェックポイント設定のシェルスクリプトは、通常のシェルスクリプトと同じです。
ユーザーレベルのチェックポイント設定ジョブのシェルスクリプトは、再起動プロセスを適切に処理できるところだけが通常のバッチスクリプトと異なります。環境変数 RESTARTED は、再開されたチェックポイント設定ジョブに対して設定されます。初めて呼び出す場合だけ実行する必要があるジョブ スクリプトのセクションをスキップするために、この変数を使用してください。
例 4–3 に、透過的なチェックポイント設定ジョブのスクリプト例を示します。
#!/bin/sh # Grid Engine の /bin/sh を強制実行します。 #$ -S /bin/sh # 再起動したか移行したかをテストします。 if [ $RESTARTED = 0 ]; then # 0 = not restarted # Parts to be executed only during the first # start go in here set_up_grid fi # チェックポイント実行可能ファイルの起動 fem #スクリプトファイルの終了 |
ユーザーレベルのチェックポイント設定ジョブが移行されると、ジョブスクリプトは最初から再開されます。シェルスクリプトのプログラムの流れをジョブが割り込まれた場所に導くのはユーザーの役目です。これにより、複数回実行する必要があるスクリプト内の行がスキップされます。
カーネルレベルのチェックポイント設定ジョブはいつでも割り込みできます。周りのシェルスクリプトは、最後にチェックポイントが設定された正確な場所から再開されます。したがって、RESTARTED 環境変数は、カーネルレベルのチェックポイント設定ジョブには影響しません。
適切なオプションを指定して次のコマンドを入力してください。
# qsub options arguments |
チェックポイント設定ジョブの発行は、qsub -ckpt および qsub -c コマンドを除いて通常のバッチスクリプト同様に行われます。これらのコマンドには、チェックポイント設定メカニズムが必要です。これらのコマンドは、ジョブに対してチェックポイントを設定しなければならない場面も定義します。
-ckpt オプションでは、使用するチェックポイント設定環境の名前を示す引数が使用されます。『Sun N1 Grid Engine 6.1 管理ガイド』の「チェックポイント設定環境の構成」を参照してください。
-c オプションは必要ありません。-c でも 1 つの引数が使用されます。チェックポイント設定環境構成の when パラメータの定義を無効にする場合は、-c オプションを使用してください。詳細は、checkpoint(5) のマニュアルページを参照してください。
-c オプションの引数は、次の 1 文字のいずれか、またはこれらの組み合わせです。引数は時間値の場合もあります。
n – チェックポイントは設定されません。 n は最優先されます。
s – ジョブホストの sge_execd が停止された場合のみ、チェックポイントを設定します。
m – 対応するキュー構成で定義される最小 CPU 間隔でチェックポイントが設定されます。queue_conf (5) のマニュアルページの min_cpu_interval パラメータを参照してください。
x –ジョブが一時停止されると、チェックポイントが設定されます。
interval – チェックポイントは指定された間隔で設定されますが、この頻度は min_cpu_interval より少なくなります。時間値は、hh:mm:ss のように指定してください。この書式では、コロンで区切られた 2 桁の時間、分および秒を指定します。
チェックポイント設定ジョブの監視は、通常のジョブの監視とは異なります。チェックポイント設定ジョブは適宜移行できます。したがって、チェックポイント設定ジョブは 1 つのキューと結合しているわけではありません。ただし、一意のジョブ識別番号とジョブ名は変わりません。
チェックポイント設定ジョブの削除は、「コマンド行からのジョブの監視と制御」の説明どおりに行われます。
QMON によるチェックポイント設定ジョブの発行は通常のバッチジョブの発行と同じで、さらに適切なチェックポイント設定環境も指定できます。「QMON による高度なジョブの発行」の説明どおり、「Submit Job」ダイアログボックスはジョブと関連付けられるチェックポイント設定環境のフィールドを提供します。フィールド横のボタンをクリックして、次の選択ダイアログボックスを開きます。
使用可能なチェックポイントオブジェクトのリストから適切なチェックポイント環境を選択できます。インストールされているチェックポイント設定環境のプロパティーについては、システム管理者に問い合わせてください。詳細は、『Sun N1 Grid Engine 6.1 管理ガイド』の「チェックポイント設定環境の構成」を参照してください。
ユーザーレベルのチェックポイントまたはチェックポイント設定ライブラリに基づくカーネルレベルのチェックポイントが書き込まれるときには、チェックポイントを設定するプロセスまたはジョブが占める仮想メモリのイメージ全体を保存する必要があります。このためには十分なディスク容量が必要です。チェックポイント設定環境構成パラメータの ckpt_dir が設定されている場合、チェックポイント情報は ckpt_dir の下のジョブ固有の場所に保存されます。ckpt_dir が NONE に設定されている場合、チェックポイント設定ジョブが開始されたディレクトリが使用されます。チェックポイント設定環境の構成については、checkpoint(5) のマニュアルページを参照してください。
ckpt_dir が NONE に設定されている場合、チェックポイント設定ジョブは qsub -cwd スクリプトで開始する必要があります。
ジョブの移行と再開を正常に行うには、すべてのマシンでチェックポイント設定ファイルと再開ファイルが認識されていなければなりません。ファイルシステムの編成にファイル可視性が必要なため、NFS か類似のファイルシステムである必要があります。ご自分のサイトがこの要件を満たしているかどうか、クラスタ管理者に問い合わせてください。
サイトで NFS を実行していない場合は、シェルスクリプトの最初で再開ファイルを明示的に転送することができます。たとえば、ユーザーレベルのチェックポイント設定ジョブの場合は rcp または ftp を使用できます。