システム概要(ES2)
ジョブスケジューリング
ES2は基本的にはバッチ処理システムです.バッチ処理システムとして,Network Queuing System II(NQSII)が使用されています.
図1は地球シミュレータのキュー構成を示しています.
図1:地球シミュレータのキュー構成.小規模バッチジョブ用(Sバッチキュー)と大規模バッチジョブ用(Lバッチキュー)が用意されています.
実行キューとして,LバッチキューとSバッチキューと呼ばれる2種類のキューが用意されています.Lバッチキューは大規模ジョブの実行を目的としています.Sバッチキューは,Lバッチキューで実行される大規模ジョブの初期値データ作成等のジョブの前処理や,大規模ジョブの実行結果の後処理等での使用を目的としています.ユーザは実行するジョブに最適なキューを選択します.
SバッチキューのスケジューリングはCPU時間で行われ,シングルノードジョブのみを実行することができます.一方,Lバッチキューのスケジューリングは,次のようなポリシーを持って行われています.
(a) CPU時間ではなく,ユーザが宣言した経過時間を基にスケジューリングを行う.
(b) ジョブに割り当てられた計算ノードは,そのジョブが専有する.
(a)により,スケジューラはジョブの終了時間を予測することができ,他のリクエストを効率よくスケジュールすることができます.(b)は,ジョブの実行時の効率の向上に寄与しています.ジョブはノードを専有することができるので,各ノード上のプロセスの実行状況を均一化することができるようになり,大規模並列プログラムを効率よく実行することができます.
各計算ノードはユーザディスクへアクセスすることはできません.これはディスクへのアクセス性能を十分に確保するためです.そのため,ジョブの実行に必要なファイルはジョブの実行前に各ノードのワークディスクへコピーする必要があります.これをステージインといいます.このステージングにかかる時間を如何に隠すかがジョブスケジューリングでは重要になります.
ジョブスケーリングの主な流れは以下のようになっています.
- (1) ノード割り当て
- (2) ステージイン (ファイルをユーザディスクからワークディスクへコピー)
- (3) ジョブエスカレーション (再スケジューリング)
- (4) ジョブ実行
- (5) ステージアウト (ファイルをワークディスクからユーザディスクへコピー)
ジョブが投入されると,スケジューラは使用可能なノードを探し,実行開始時刻を決定します(1).そして,それらのノードに対してステージングを行います (2).ステージインが完了すると,そのジョブは実行開始時刻まで待機します.この間に,実行開始時刻を早めることができる場合には,再スケジューリングが行われます(ジョブエスカレーション)(3).実行開始時刻になると,スケジューラはそのジョブを実行します(4).ユーザが宣言した経過時間を過ぎるか,計算が終了すると,スケジューラはそのジョブを終了させます.ジョブの終了後,スケジューラはステージアウトを実行します(5).
【過去ジョブの実行方法】
ジョブを実行するには,バッチスクリプト(図.2)を記述します.バッチスクリプトには,使用するノード数や経過時間等の計算資源やジョブの実行に必要なファイル等を記述します.

図2:バッチスクリプトの記述例.#PBSで始まる行は,NQSIIへの指示行です.
バッチスクリプトを記述したら,ユーザはログインサーバからバッチスクリプトを投入し,ジョブの実行が終了するまで待ちます.その間,ユーザはコマンドやブラウザでジョブの処理状況を確認することができます.
計算ノードのスケジューリングやステージイン,ステージアウト等の処理は,バッチスクリプトの記述に従ってシステムが自動的に行います.