お問い合わせ | 導入事例 | HPC計算機 | 管理サーバ/ファイルサーバ | オプション | OS/開発環境 | アプリ | システム構築 | サポート | FAQ | ベンチ | 技術情報 | 購入案内

基礎情報

計算機本体

ストレージ

ネットワーク

OS環境

開発環境

ジョブ管理

システム管理

設置環境


プロセッサ番号一覧へ

Linpack HPL定点観測テストへ

マルチコアに最適のジョブスケジューラジョブスケジューラ

はじめに

大型並列計算機で改良・熟成されたジョブスケジューラはマルチコアプロセッサ搭載のHPCクラスタに最適

ジョブスケジューラは大型並列計算機での長い利用実績を持ち、その挙動に最適化されたスケジューリング方式を実現しています。この大型並列計算機とマルチコアプロセッサ搭載のHPCクラスタは構造的に類似点が多いため、大型並列計算機上で改良されたジョブスケジューラのスケジューリング方式は、マルチコアプロセッサ搭載のHPCクラスタにも最適なのです。ジョブスケジューラを使ってみると、その群を抜いた使いやすさを体感することができます。

負荷分散型のジョブスケジューリング

マルチコアプロセッサ搭載のHPCクラスタの「高負荷」状態は適切な管理が必要

マルチコアプロセッサ搭載のHPCクラスタでは、各ノードに搭載されているCPUコア数と同数のジョブをノード毎に投入することができます。ところが、ノードのCPUコア数にはまだ空きがあっても、メモリなどのリソースが使い切られた状態に陥っている場合があります。もし、このような状態のノードにジョブを追加投入するとスワップアウトが発生する危険があります。これがマルチコアプロセッサ搭載のHPCクラスタで特に適切な管理が必要となる「高負荷」状態です。

マルチコアプロセッサ搭載のHPCクラスタに必須の「負荷分散スケジューリング」

マルチコアプロセッサ搭載のHPCクラスタではこのような高負荷が発生しやすいため、ノードの負荷状況に応じてジョブ投入を調節する必要があります。この調整をジョブスケジューラで行う機能が「負荷分散スケジューリング」と呼ばれるものです。

ジョブスケジューラは「負荷分散スケジューリング」機能を搭載しており「高負荷」状態に適切な対応

ジョブスケジューラは「負荷分散スケジューリング」機能を搭載しているジョブスケジューラです。ジョブスケジューラは計算ノードの負荷状況をリアルタイムで把握し、各ノードの負荷バランスが平均になるようにスケジューリングしています。その結果、ボトルネックが抑えられ計算効率が向上したり、スワップアウト発生リスクが低下します。この「負荷分散スケジューリング」こそLoad Sharing Facilityという製品名にもなっているジョブスケジューラの看板機能です。

◎ ジョブスケジューラは各ノードの負荷状況をリアルタイムで把握 (メモリ使用量やロード値 (CPU負荷))
◎ ジョブスケジューラは負荷が低いノードを探し、リソースに空きがあればジョブを割り当て

このようなシーケンスでジョブを各ノードに割り当てるため、クラスタ全体の負荷バランスが均一に維持され、効率の良いジョブ実行や安定したクラスタ運用が実現されます。

「負荷分散スケジューリング」機能の無いジョブスケジューラで予想される問題

「負荷分散スケジューリング」機能が無いジョブスケジューラをマルチコアプロセッサ搭載のHPCクラスタで使用した場合、ジョブスケジューラは各ノードの負荷状況をリアルタイムで把握できず、機械的なジョブスケジューリングが行われる結果、一部のノードに過剰な負荷がかかることがあります。その結果、ボトルネックが発生したり、スワップアウトが起こることでシステムの処理効率が低下したり、運用に障害が起こる可能性があります。

MPIのゾンビプロセス

ジョブスケジューラは並列計算の異常終了時に発生するゾンビプロセスをkillできる

MPI並列計算では異常終了などが原因でゾンビプロセスが発生することがあります。このゾンビプロセスを放置しているとメモリなどの計算機リソースが開放されないため、これが原因となりクラスタが不安定になります。ところがジョブスケジューラによる並列計算のスケジューリングでは、ゾンビプロセスが発生してもジョブスケジューラによりkillされるため安全です。これはジョブスケジューラが並列計算を実効させる際に、子プロセスを含む全ての実行プロセスを監視しているからです。並列ジョブが異常終了を起こすとジョブスケジューラは子プロセスまで確認し、もしゾンビプロセス化していれば自動的にkillします。

ゾンビプロセスをkillできない、多くのジョブスケジューラー

多くのジョブスケジューラは、MPI並列計算を実行させる際に子プロセスまでは監視していないので、子プロセスがゾンビプロセス化してしまっても察知することができず、従ってkillすることもできません。そのためこれらの処理はユーザが行わなければなりません。ところが計算ノードにゾンビプロセスが残っていても、それを発見することは簡単ではありません。そもそもゾンビプロセスが発生していることすらわからないのが実際なのです。そのためゾンビプロセスを確実に停止させるためには並列計算が異常終了した後は全ノードのリブートという手段が最も確実です。しかし現実には、長時間のジョブや多数のジョブが実行されているクラスタでは、それもなかなか困難なことです。

商用アプリケーションのライセンス

ジョブスケジューラならアプリケーションのライセンス数を考慮したスケジューリングが可能

ジョブスケジューラはアプリケーションのライセンス管理に対応しています。ジョブスケジューラはライセンス数とジョブ実行数をリアルタイムで把握しているため、計算機が空いてもライセンスに空きがなければジョブは実行されず、双方が空くまで待ちます。このようにジョブスケジューラではライセンス数と計算機資源の双方の制限範囲内で効率的にジョブを実行できます。

ライセンス利用情報を収集・監視できない、多くのジョブスケジューラー

アプリケーションのライセンス管理に対応していないジョブスケジューラでは、計算機の空き情報だけでジョブ投入を判断します。そのため、もしライセンス数を使い切っている場合は、新たに投入されたジョブはライセンスが無いため停止したり異常終了します。そしてさらに困る事は、この場合にジョブスケジューラはライセンス不足によりジョブが実行できないことを検出できなので、ジョブスケジューラからユーザへの通報はありません。ユーザは結果ファイルを確認するまではライセンス不足による未実行が判りません。せっかくジョブスケジューラを採用して多数のジョブを自動処理できる環境を構築しても、失望することになりかねません。

アプリケーションとの親和性が高いジョブスケジューラ

ジョブスケジューラを介してアプリケーションを利用する際に見逃せない点として、アプリケーションとの親和性があります。科学技術計算用のアプリケーションはジョブ投入の際に独自の手続きなどを必要とすることが多いため、ジョブスケジューラはこれらに対応している必要があります。ジョブスケジューラは広く利用されるなかで多くのアプリケーションとのインターフェースに関するノウハウが整理され、アプリケーションとの高い親和性を持っています。

複雑なジョブの流れを柔軟にコントロール

ジョブスケジューラは依存関係のあるジョブにも柔軟に対応

数値解析では、数種類の数値解析を先の解析結果を用いながら順番に行う逐次処理や、実行した解析結果を参照して入力データを修正しながら解析を反復して行う最適化処理など、複数のジョブを予め定めた依存関係に従って処理を行う運用形態で利用される場合も多いと思います。ジョブスケジューラではこのような利用形態にも柔軟に対応でき、大きくの解析現場で広く活躍しています。

ジョブスケジューラでは多彩なキューの設定が可能

ジョブスケジューラでは、CPU TimeやRun Timeの制限、メモリ量の制限、実行ホストの指定、プライオリティー、ジョブ数の指定など柔軟で多彩なキューの設定が可能です。

ジョブスケジューラなら仕様の異なる計算機の混在にもホストごとの設定で対応

クラスタへの計算ノードの増設を行うと、仕様の異なる計算ノードをクラスタに追加する場合もあります。このような場合でもジョブスケジューラなら安心です。ジョブスケジューラはノードに搭載されているコア数にあわせてジョブ数の制限を個別に行うことができます。

まとめ

以上のようにジョブスケジューラは、マルチコアプロセッサ搭載のHPCクラスタの登場により複雑化する今後のクラスタ環境を効率良く利用する際に、適切な負荷分散とリソース管理を通じて、快適で効率の良いジョブスケジューリングを行うことができる、極めて洗練されたジョブスケジューラです。