(57)【特許請求の範囲】
【請求項１】
コンピュータクラスタの空き計算ノードの数が、第１のジョブが必要とする該計算ノード数よりも少ない場合に、実行中で、該第１のジョブよりも優先度が低く、かつ実行に必要な該計算ノード数が該第１のジョブの実行のために不足している該計算ノード数以上の計算ノードを使用しているジョブを第２のジョブとして選択する実行停止ジョブ選択ステップと、
前記第２のジョブによって使用されている計算ノードで実行中の全ての処理を実行停止状態とし、前記第２のジョブによって使用されていた前記計算ノードと前記空き計算ノードにおいて前記第１のジョブを実行させる優先実行ステップと、
前記第１のジョブの実行が完了した後に、前記第２のジョブの実行を再開させる実行再開ステップと
を含むことを特徴とするジョブ管理方法。
【請求項２】
前記優先実行ステップにおいて前記第１のジョブの実行が開始された後に前記コンピュータクラスタに前記空き計算ノードが存在する場合に、実行に必要な前記計算ノード数が前記空き計算ノード数以下で、実行所要時間が前記第１のジョブの実行所要時間以下で、かつ前記コンピュータクラスタにおいて実行されていないジョブを第３のジョブとして選択する空き計算ノード活用ジョブ選択ステップと、
前記空き計算ノードにおいて前記第３のジョブを実行させる空きノード活用ジョブ実行ステップと
をさらに含むことを特徴とする請求項１に記載のジョブ管理方法。
【請求項３】
前記実行停止ジョブ選択ステップは、前記第２のジョブの選択肢が複数存在する場合に、該選択肢の中で最も優先度が低い前記ジョブ、あるいは実行に必要な前記計算ノード数が最も少ない前記ジョブを前記第２のジョブとして選択することを特徴とする請求項１または２に記載のジョブ管理方法。
【請求項４】
コンピュータクラスタの空き計算ノードの数が、第１のジョブが必要とする該計算ノード数よりも少ない場合に、実行中で、該第１のジョブよりも優先度が低く、かつ実行に必要な該計算ノード数が該第１のジョブの実行のために不足している該計算ノード数以上の計算ノードを使用しているジョブを第２のジョブとして選択する実行停止ジョブ選択手段と、
前記第２のジョブによって使用されている計算ノードで実行中の全ての処理を実行停止状態とし、前記第２のジョブによって使用されていた前記計算ノードと前記空き計算ノードにおいて前記第１のジョブを実行させる優先実行行手段と、
前記第１のジョブの実行が完了した後に、前記第２のジョブの実行を再開させる実行再開手段と
を備えることを特徴とするジョブ管理装置。
【請求項５】
コンピュータに、
コンピュータクラスタの空き計算ノードの数が、第１のジョブが必要とする該計算ノード数よりも少ない場合に、実行中で、該第１のジョブよりも優先度が低く、かつ実行に必要な該計算ノード数が該第１のジョブの実行のために不足している該計算ノード数以上の計算ノードを使用しているジョブを第２のジョブとして選択する実行停止ジョブ選択手順と、
前記第２のジョブによって使用されている計算ノードで実行中の全ての処理を実行停止状態とし、前記第２のジョブによって使用されていた前記計算ノードと前記空き計算ノードにおいて前記第１のジョブを実行させる優先実行手順と、
前記第１のジョブの実行が完了した後に、前記第２のジョブの実行を再開させる実行再開手順と
を実行させることを特徴とするジョブ管理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、複数の計算ノードから構成されたクラスタ上で実行されるジョブを管理するジョブ管理方法、ジョブ管理装置およびジョブ管理プログラムに関し、特に、複数の計算ノード間で情報をやりとりしながら処理を進めていくタイプのジョブを実行する場合にもクラスタに含まれる計算ノードを効率よく活用できるジョブ管理方法、ジョブ管理装置およびジョブ管理プログラムに関する。
【背景技術】
【０００２】
科学技術計算のような膨大な計算能力を必要とするジョブを実行するため、複数の計算ノードを組み合わせて構成された計算機クラスタ（以下、単に「クラスタ」という）が利用されている。このようなクラスタを備える情報処理環境においては、各計算ノードを効率的に活用できるように、計算ノードへのジョブの割り当てを管理するジョブ管理装置が設けられる。
【０００３】
一般に、クラスタにおいて実行されるジョブは、短時間で目的を達成するために、予め決められた数の計算ノード上で処理を並列実行するように構成されており、ジョブ管理装置は、新たなジョブが投入されると、そのジョブが必要とする数だけの計算ノードを確保し、ジョブにそれらの計算ノードを割り当てる。そして、ジョブ管理装置は、投入されたジョブが必要とする計算ノードの総数が、クラスタを構成する計算ノードの数を上回った場合には、高い優先度を与えられたジョブに優先的に計算ノードを割り当てる。
【０００４】
例えば、特許文献１において開示されているジョブ管理装置（スケジュール制御装置）は、新たに高優先度のジョブが投入されたときに、そのジョブが必要とする数の未使用の計算ノード（以下、未使用の計算ノードを「空きノード」という）がクラスタに無いと、実行中の処理のうち低優先度のジョブの処理を実行停止状態にし、それらの処理によって使用されていた計算ノードを、新たに投入された高優先度のジョブに割り当てる。
【０００５】
【特許文献１】特開平８−１６４１０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、上記の特許文献１において開示されているジョブ管理装置は、高優先度のジョブが新たに投入された場合に、低優先度のジョブの処理を無作為に選択して実行停止状態にしていた。このため、低優先度のジョブの処理を実行停止状態にした後に、計算ノードが有効に活用されなくなってしまうという問題があった。
【０００７】
具体的には、クラスタにおいて実行されるジョブには、複数の計算ノード間で情報をやりとりしながら処理を進めていくジョブがある。このようなジョブにおいては、ある計算ノード上で実行されている処理が何らかの理由で実行停止状態となった場合、他の計算ノード上で実行されている同一ジョブの処理も、実行停止状態となった処理と情報をやりとりできなくなるため、実行を継続できなくなり、実質的に実行停止状態に等しい状態となる。
【０００８】
例えば、実行中のジョブＡが４つの計算ノード間で情報をやりとりしながら処理を進めていくジョブであったとする。そして、１つの計算ノードを使用する高優先度のジョブＢの投入にともなって、そのうちの１つの計算ノード上の処理が実行停止状態となり、その計算ノードがジョブＢに割り当てられたと仮定する。この場合、ジョブＡを実行している他の３つの計算ノード上の処理は、実行停止状態となった処理と情報をやりとりできなくなるため、実質的に実行停止状態となり、３つの計算ノードが有効に活用されなくなってしまう。
【０００９】
この発明は、上述した従来技術による問題点を解消するためになされた発明であり、複数の計算ノード間で情報をやりとりしながら処理を進めていくタイプのジョブを実行する場合にもクラスタに含まれる計算ノードを効率よく活用できるジョブ管理方法、ジョブ管理装置およびジョブ管理プログラムの提供を目的とする。
【課題を解決するための手段】
【００１０】
上述した課題を解決し、目的を達成するため、本方法は、コンピュータクラスタの空き計算ノードの数が、第１のジョブが必要とする該計算ノード数よりも少ない場合に、実行中で、該第１のジョブよりも優先度が低く、かつ実行に必要な該計算ノード数が該第１のジョブの実行のために不足している該計算ノード数以上のジョブを第２のジョブとして選択する実行停止ジョブ選択ステップと、前記第２のジョブの全ての処理を実行停止状態とし、前記第２のジョブによって使用されていた前記計算ノードと前記空き計算ノードにおいて前記第１のジョブを実行させる優先実行ステップと、前記第１のジョブの実行が完了した後に、前記第２のジョブの実行を再開させる実行再開ステップとを含むことを特徴とする。
【００１１】
この方法によれば、新たなジョブが受け付けられた場合に、そのジョブを実行するために不足している計算ノード数以上の計算ノードを使用して実行されているジョブを実行停止状態とし、実行停止状態となったジョブが使用していた計算ノードと空きノードを使用して新たなジョブを実行するようにしたので、実行中のジョブの処理の一部が実行停止状態となって、そのジョブの他の処理が計算ノードを割り当てられたまま実行停止状態と同様の状態になる事態を防止でき、クラスタに含まれる計算ノードを効率よく活用できる。
【００１２】
また、本方法は、上記の方法の他の態様において、前記優先実行ステップにおいて前記第１のジョブの実行が開始された後に前記コンピュータクラスタに前記空き計算ノードが存在する場合に、実行に必要な前記計算ノード数が前記空き計算ノード数以下で、実行所要時間が前記第１のジョブの実行所要時間以下で、かつ前記コンピュータクラスタにおいて実行されていないジョブを第３のジョブとして選択する空き計算ノード活用ジョブ選択ステップと、前記空き計算ノードにおいて前記第３のジョブを実行させる空きノード活用ジョブ実行ステップとをさらに含むことを特徴とする。
【００１３】
この方法によれば、新たなジョブを実行させた後にできた空きノードを活用して、新たなジョブよりも早く実行が終了するジョブを実行するようにしたので、新たなジョブの実行が完了した後に実行停止状態のジョブを復帰させる時期を遅らせずに、クラスタに含まれる計算ノードを効率よく活用できる。
【００１４】
また、本方法は、上記の方法の他の態様において、前記実行停止ジョブ選択ステップは、前記第２のジョブの選択肢が複数存在する場合に、該選択肢の中で最も優先度が低い前記ジョブ、あるいは実行に必要な前記計算ノード数が最も少ない前記ジョブを前記第２のジョブとして選択することを特徴とする。
【００１５】
この方法によれば、実行に必要な計算ノード数が最も少ないジョブを実行停止状態にする対象として選択するようにしたので、ジョブを実行停止状態にするために要するオーバーヘッドを最小にし、クラスタに含まれる計算ノードを効率よく活用できる。
【００１６】
なお、上記方法の構成要素、表現または構成要素の任意の組合せを、方法、装置、システム、コンピュータプログラム、記録媒体、データ構造などに適用した態様も本発明の態様として有効である。
【発明の効果】
【００１７】
本発明によれば、実行中のジョブの処理の一部が実行停止状態となって、そのジョブの他の処理が計算ノードを割り当てられたまま実行停止状態と同様の状態になる事態を防止でき、クラスタに含まれる計算ノードを効率よく活用できるという効果を奏する。
【発明を実施するための最良の形態】
【００１８】
以下に、本発明に係るジョブ管理方法、ジョブ管理装置およびジョブ管理プログラムの実施例を図面に基づいて詳細に説明する。なお、この実施例によっては、この発明は限定されない。
【実施例】
【００１９】
まず、本実施例に係るジョブ管理処理の概要について説明する。図１は、本実施例に係るジョブ管理方法が実行されるクラスタシステムの一例を示す図である。同図に示すように、クラスタシステム１は、クラスタ２と、ジョブ管理装置１０と、端末装置３０ａ〜３０ｃとによって構成される。
【００２０】
クラスタ２は、計算ノード２０ａ〜２０ｄを結合して構成された計算機群である。なお、図１は、クラスタ２が、４つの計算ノードからなる例を示しているが、クラスタ２は、任意の数の計算ノードを含んでもよく、含まれる計算ノードが多くなるほど、大きな計算処理能力を有するようになる。例えば、クラスタ２は、１００台以上の計算ノードを結合して構成されていてもよい。
【００２１】
ジョブ管理装置１０は、クラスタ２において実行すべきジョブを端末装置３０ａ〜３０ｃから受け付け、受け付けたジョブの計算ノード２０ａ〜２０ｄへの割り当てをスケジューリングする装置である。ジョブ管理装置１０が受け付けるジョブには、優先度と実行に必要な計算ノード数とが予め指定されており、ジョブ管理装置１０は、これらの情報に基づいて、計算ノード２０ａ〜２０ｄができるだけ有効に活用されるようにスケジューリングを行う。なお、本明細書におけるジョブとは、所定の目的のために構成された処理の単位を意味し、具体的には、１ないし複数の実行可能なプログラムや、これらのプログラムの実行を制御するためのスクリプトや、これらのプログラムの実行に必要なデータ等からなる。例えば、膨大な計算時間を必要とする科学技術計算処理や、業務系の月次バッチ処理や、３次元データに基づく３次元映像の生成処理等が、本明細書におけるジョブに相当する。
【００２２】
端末装置３０ａ〜３０ｃは、ジョブの実行をジョブ管理装置１０に依頼し、実行結果をジョブ管理装置１０から取得する装置である。端末装置３０ａ〜３０ｃは、ネットワーク４０によってジョブ管理装置１０と接続される。
【００２３】
なお、クラスタシステム１は、クラスタシステムの一般的な例を示しており、従来のジョブ管理方法も同様の環境で実行される。また、計算ノード２０ａ〜２０ｄの実体は、独立して演算処理を実行できれば何であってもよい。例えば、計算ノード２０ａ〜２０ｄのそれぞれは、独立した筐体を有する情報処理装置であってもよいし、マルチプロセッサ型の情報処理装置が備えるＣＰＵの１つであってもよいし、マルチコア型のＣＰＵ上のコアの１つであってもよいし、ソフトウェアによって実現された仮想計算機であってもよい。
【００２４】
図２は、本実施例に係るジョブ管理処理の概要を説明するための説明図である。同図は、クラスタシステム１に高優先度のジョブＸが投入された場面を示している。同図において、クラスタシステム１は、１６個の計算ノードを結合して構成されたクラスタ２と、ジョブ管理装置１０に相当するジョブ管理装置１１を有している。ジョブ管理装置１１は、従来のジョブ管理方法を実行する装置であり、投入されているがまだ計算ノードが割り当てられていないジョブを保持する実行待ちジョブ記憶領域１１ａと、実行停止状態となったジョブを保持する実行停止ジョブ記憶領域１１ｂとを有している。
【００２５】
そして、図２において、クラスタ２内、実行待ちジョブ記憶領域１１ａ内および実行停止ジョブ記憶領域１１ｂ内の矩形は、ジョブを表している。具体的には、矩形の数は、ジョブが必要としている計算ノード数を示している。矩形内の上部の文字は、ジョブの名前を示し、下部の数字のうち、“／”より前の部分は、ジョブの優先度を示し、“／”より後の部分は、ジョブの実行所要時間を示している。なお、本実施例における優先度は、１〜１０のいずれかの値をとり、値が大きいほど優先度が高くなる。また、実行所要時間は、実行開始から実行完了までに要する時間の予測値であり、単位は分である。
【００２６】
図２のクラスタシステム１では、優先度が「６」で実行所要時間が「９０分」のジョブＡが２つの計算ノードを使用して処理を実行しており、優先度が「６」で実行所要時間が「９０分」のジョブＢが５つの計算ノードを使用して処理を実行しており、優先度が「６」で実行所要時間が「６０分」のジョブＣが６つの計算ノードを使用して処理を実行しており、優先度が「６」で実行所要時間が「１２０分」のジョブＤが３つの計算ノードを使用して処理を実行している。
【００２７】
また、実行待ちジョブ記憶領域１１ａには、優先度が「６」で実行所要時間が「１２０分」であり、２つの計算ノードを必要とするジョブＥと、優先度が「６」で実行所要時間が「１５０分」であり、１つの計算ノードを必要とするジョブＦと、優先度が「６」で実行所要時間が「１００分」であり、１つの計算ノードを必要とするジョブＧとが保持されており、実行停止ジョブ記憶領域１１ｂは空である。
【００２８】
そのとき、優先度が「１０」で実行所要時間が「１２０分」であり、４つの計算ノードを必要とする高優先度のジョブＸが投入されると、ジョブ管理装置１１は、ジョブＸを優先的に実行させるため、ジョブＸが必要とする４個の計算ノードをクラスタ２から選択し、それらの計算ノード上で実行されている処理を実行停止状態とする。そして、実行停止状態となった処理が使用していた計算ノードをジョブＸに割り当てて実行させる。
【００２９】
図２に示した例では、ジョブＸを優先的に実行させるために、ジョブＡに割り当てられていた計算ノードの１つと、ジョブＣに割り当てられていた計算ノードの１つと、ジョブＢに割り当てられていた計算ノードの２つがジョブＸに割り当てられている。このように、従来のジョブ管理処理では、高優先度のジョブＸが新たに投入された場合に、ジョブＸが必要とするだけの空きノードがなくても、ジョブＸよりも優先度が低いジョブによって使用されている計算ノード上で動作している処理を実行停止状態にすれば、ジョブＸが必要とする計算ノードが確保される。
【００３０】
しかしながら、ジョブ管理装置１１は、実行中の処理が、他の計算ノード上で実行されている同一ジョブの処理と情報をやりとりしながら処理を進めていくタイプの処理であるか否かを考慮せずに、実行停止状態にする処理を選択する。このため、例えば、図２に示した例で、ジョブＡ、ジョブＢおよびジョブＣが、割り当てられた計算ノード間で情報をやりとりしながら処理を進めていくタイプのジョブであった場合に、実行停止状態となっていない処理も、実行停止状態となった処理と情報をやりとりできないためにそれ以上処理を進められず、実質的に実行停止と等しい状態となり、斜線で示した９個の計算ノードが有効に活用されない状態となってしまう。
【００３１】
本実施例に係るジョブ管理処理は、このような問題を解決するため、高優先度のジョブが投入され、そのジョブが必要とする数の空きノードがない場合に、各計算ノードが有効に活用されるように考慮して、並列実行されている同一のジョブの処理をまとめて実行停止状態とする。
【００３２】
図２におけるジョブ管理装置１２は、本実施例に係るジョブ管理処理を実行する装置であり、実行待ちジョブ記憶領域１１ａと実行停止ジョブ記憶領域１１ｂに代えて、実行待ちジョブ記憶領域１２ａと実行停止ジョブ記憶領域１２ｂを有している。
【００３３】
同図に示すように、優先度が「１０」で実行所要時間が「１２０分」であり、４つの計算ノードを必要とする高優先度のジョブＸが投入されると、ジョブ管理装置１２は、ジョブＸを優先的に実行させるため、クラスタ２において実行中のジョブの中から実行停止状態とするジョブを選択する。実行停止状態とするジョブとして選択されるのは、ジョブＸよりも優先度が低く、ジョブＸを実行するために不足している計算ノード数以上の計算ノードを割り当てられているジョブのうち、優先度が最も低いジョブである。そして、候補となるジョブが複数存在する場合には、割り当てられている計算ノード数が最も少ないジョブが選択される。
【００３４】
図２に示した例では、５つの計算ノードを割り当てられているジョブＢが、実行停止状態にするジョブとして選択されている。この例では、新たに投入された高優先度のジョブＸを実行するために不足している計算ノードの数は４であり、５つの計算ノードを割り当てられているジョブＢと６つの計算ノードを割り当てられているジョブＣの優先度がいずれも「６」であるので、この２つのジョブが実行停止状態にする対象の候補である。このうち、ジョブＢが実行停止状態にする対象として選択されているのは、割り当てられている計算ノードの数が少ないためである。
【００３５】
このように、高優先度のジョブを実行する場合に、不足数以上の計算ノードを割り当てられているジョブを実行停止状態とする対象として選択するのは、ジョブに割り当てられている計算ノードの一部で実行されている処理が実行停止状態とされて、その処理と情報をやりとりする同一ジョブの処理が計算ノードを占有したまま実行停止状態と等しい状態となり、それらの計算ノードが有効に活用されなくなる事態を防止するためである。
【００３６】
また、候補が複数ある場合に、割り当てられている計算ノード数が最も少ないジョブを選択するのは、実行停止状態にするために要するオーバーヘッドを最小にするためである。すなわち、実行停止状態を実現するには、実行中の処理のメモリイメージをファイルにダンプし、ジョブ管理装置１２の実行停止ジョブ記憶領域１２ｂへ転送するといったオーバーヘッドが必要となるので、これを最小にするためである。
【００３７】
こうして、５つの計算ノードを割り当てられているジョブＢを実行停止状態とし、４つの計算ノードを必要とするジョブＸを実行させると、１つの計算ノードが空きノードとなる。このような空きノードを有効に活用するため、本実施例に係るジョブ管理処理では、実行待ちジョブ記憶領域１２ａに保持されている実行待ちジョブの中で、実行に必要なジョブの数が空きノード数以下であり、実行所要時間がジョブＸの実行所要時間以下であるジョブが選択され、そのジョブに空きノードが割り当てられる。そして、候補となるジョブが複数存在する場合には、空きノードをより有効に活用できるジョブ、すなわち、そのジョブに空きノードを割り当てたときに、ジョブＸの実行完了までにクラスタ２内の計算ノードが遊休状態になる時間の合計が最も短くなるジョブが選択される。
【００３８】
図２に示した例では、空きノードの数は１であり、１以下の計算ノードを必要とする実行待ちジョブは、ジョブＦとジョブＧである。これらのジョブのうち、ジョブＦの実行所要時間は、「１５０分」であり、ジョブＸの実行所要時間である「１２０分」を超過しているため、実行所要時間が「１００分」であるジョブＧが空きノードを活用して実行されるジョブ（以下、「空きノード活用ジョブ」という）として選択されている。
【００３９】
このように、実行所要時間が高優先度のジョブの実行所要時間以下であるジョブが空きノード活用ジョブとして選択されるのは、高優先度のジョブの実行が完了した後に、実行停止状態にしたジョブを速やかに復帰させるためである。図２の例に従って説明すると、空きノード活用ジョブとしてジョブＦを選択すると、ジョブＸの実行が完了した後も、ジョブＦの実行が完了するまでは、実行停止状態とされたジョブＢを復帰させられない。このため、ジョブＢの実行完了が遅れるとともに、ジョブＸの実行が完了した後からジョブＦの実行が完了するまでの間、ジョブＸに割り当てられていた計算ノードが有効に活用されない。一方、空きノード活用ジョブとしてジョブＧを選択すると、ジョブＸの実行が完了した後、ジョブＢを速やかに復帰させられるとともに、計算ノードが遊休状態となる時間が短くなる。
【００４０】
ところで、図２の例では、実行停止状態となったジョブＢの優先度を待機中の他のジョブの優先度よりも低く設定し直し、空きノード活用ジョブであるジョブＧの優先度を実行中の他のジョブの優先度よりも高く設定している。これは、優先度の関係により、ジョブＢの一部が予期しないタイミングで復帰させられたり、ジョブＧが実行停止状態にされたりする事態を防止するためである。
【００４１】
図２の例では、高優先度のジョブが投入された場合に、単一のジョブを実行停止状態とする例を示したが、複数のジョブの組合せを実行停止状態にするようにしてもよい。図３は、複数のジョブの組合せを実行停止状態にする処理の一例を示す図である。
【００４２】
図３に示した例では、４つの計算ノードを必要とする高優先度のジョブＸを優先的に実行させるために、２つの計算ノードが割り当てられているジョブＡと、３つの計算ノードを割り当てられているジョブＤの組合せが実行停止状態にする対象として選択されている。ジョブＢに割り当てられている計算ノード数は５つであり、上記の組合せに割り当てられている計算ノード数と同数であるが、図３の例では、ジョブＢの優先度が「７」であり、ジョブＡおよびジョブＤの優先度「６」よりも高くなっているため、上記の組合せが実行停止状態にする対象として選択される。
【００４３】
このように、複数のジョブの組合せを実行停止状態にする対象として選択すれば、実行停止状態にする対象を柔軟に選択できるようになる。特に、数多くの計算ノードを必要とする高優先度のジョブが投入された場合、不足数以上の計算ノードを割り当てられている単一のジョブが存在しない場合があり得るが、そのような場合でも、複数のジョブの組合せを実行停止状態にする対象として選択するようにすれば、実行停止状態にする対象を選択できる。
【００４４】
なお、実行停止状態にする対象だけでなく、空きノード活用ジョブも複数のジョブの組合せとして選択できる。空きノード活用ジョブを複数のジョブの組合せとして選択すれば、空きノード活用ジョブを柔軟に選択できるようになるとともに、計算ノードが遊休状態となる時間がさらに少なくなるように空きノード活用ジョブを選択できる。
【００４５】
また、図２および図３では、高優先度のジョブが投入された場合に、実行停止状態となる処理が最も少なくなるようにジョブを選択する例を示したが、計算ノードが遊休状態となる時間が最小になるように、単一のジョブもしくは複数のジョブの組合せを実行停止状態してもよい。
【００４６】
ここでは、説明を簡単にするため、単一のジョブのみを実行停止状態にする例を示す。図４は、計算ノードが遊休状態となる時間が最小になるように実行停止状態にする対象を選択する処理の一例を示す図である。図４に示した例では、４つの計算ノードを必要とする高優先度のジョブＸを優先的に実行させるために、６つの計算ノードが割り当てられているジョブＣが実行停止状態にする対象として選択されている。
【００４７】
図４の例では、５つの計算ノードを割り当てられているジョブＢを実行停止状態にするのも可能であるが、その場合、実行所要時間が「１００分」のジョブＧが空きノード活用ジョブとして選択され、ジョブＧの実行が完了した後、実行所要時間が「１２０」であるジョブＸの実行が完了するまでの間に、ジョブＧに割り当てられていた計算ノードが２０分間遊休状態となってしまう。一方、ジョブＣを実行停止状態とすれば、実行所要時間が「１２０分」のジョブＥを空きノード活用ジョブとして選択でき、ジョブＥとジョブＸの実行はほぼ同時に完了し、計算ノードが遊休状態となる時間は発生しない。
【００４８】
このように、計算ノードが遊休状態となる時間が最小になるように、単一のジョブもしくは複数のジョブの組合せを実行停止状態にするようにすれば、計算ノードを最大限に有効活用できる。
【００４９】
次に、本実施例に係るジョブ管理装置１２の構成について説明する。図５は、本実施例に係るジョブ管理装置１２の構成を示すブロック図である。同図に示すように、ジョブ管理装置１２は、記憶部１２１と、入力部１２２と、表示部１２３と、ネットワークインターフェース部１２４と、制御部１２５とを有する。
【００５０】
記憶部１２１は、各種情報を記憶する記憶デバイスであり、実行待ちジョブ記憶領域１２１ａと、実行停止ジョブ記憶領域１２１ｂと、ジョブ管理情報記憶領域１２１ｃ、ジョブ割当情報記憶領域１２１ｄとを有する。実行待ちジョブ記憶領域１２１ａは、投入されているがまだ計算ノードを割り当てられていないジョブを保持する記憶領域であり、実行待ちジョブ記憶領域１２ａに相当する。実行停止ジョブ記憶領域１２１ｂは、実行停止状態となったジョブを保持する記憶領域であり、実行停止ジョブ記憶領域１２ｂに相当する。
【００５１】
ジョブ管理情報記憶領域１２１ｃは、ジョブ管理情報を記憶する記憶領域である。ジョブ管理情報の一例を図６−１および図６−２に示す。ジョブ管理情報は、投入されたジョブの状態を管理するための情報であり、ジョブＩＤ、優先度、ノード数、実行所要時間、実行時間、ステータス、復帰対象ジョブ、投入日時、チェックポイントといった項目を有し、ジョブ毎に情報が１行ずつ格納される。
【００５２】
ジョブＩＤはジョブを識別するための識別子である。優先度、ノード数および実行所要時間は、ジョブの投入時に指定されたパラメータであり、それぞれ、当該のジョブの優先度、実行するために必要な計算ノードの数、実行開始から実行完了までに要する時間（予測時間）を示す。実行時間は、当該のジョブに計算ノードが割り当てられた時間の累計値である。
【００５３】
ステータスは、ジョブの状態を示し、「実行待ち」、「実行中」もしくは「実行停止」のいずれかの状態をとる。「実行待ち」は、当該のジョブにまだ計算ノードが割り当てられておらず、実行待ちジョブ記憶領域１２１ａに保持されている状態を示す。「実行中」は、当該のジョブに計算ノードが割り当てられて実行中である状態を示す。そして、「実行停止」は、当該のジョブが実行停止状態とされ、実行停止ジョブ記憶領域１２１ｂに保持されている状態を示す。
【００５４】
復帰対象ジョブは、当該のジョブを優先的に実行するために実行停止状態にされたジョブ、もしくは、当該のジョブが空きノード活用ジョブとして実行されるときに実行停止状態にされたジョブのジョブＩＤと実行停止状態にされる直前の優先度を示す。投入日時は、当該のジョブが投入された時刻であり、チェックポイントは、ジョブの優先度を調整するための値である。チェックポイントについては、後ほど詳しく説明する。
【００５５】
図６−１に示したジョブ管理情報は、図２においてジョブＸが投入される前の各ジョブの状態を示しており、ジョブＧに対応する情報は、ジョブＩＤが「Ｇ」、優先度が「６」、ノード数が「１」、実行所要時間が「１００」、実行時間が「０」、ステータスが「実行待ち」、復帰対象ジョブが未設定、投入日時が「２００７／７／５  １５：５５」、チェックポイントが「３６０」となっている。
【００５６】
また、図６−２に示したジョブ管理情報は、図２においてジョブＸが投入された直後の各ジョブの状態を示しており、ジョブＸに対応する情報が新たに登録されている。また、空きノード有効活用ジョブとして選択されたジョブＧに対応する情報が更新されており、優先度が「７」、ステータスが「実行中」、復帰対象ジョブが「Ｂ（６）」、チェックポイントが「６０」となっている。なお、復帰対象ジョブの「Ｂ（６）」は、ジョブＧが空きノード活用ジョブとして実行されるときに実行停止状態にされたジョブのジョブＩＤが「Ｂ」であり、そのジョブの優先度が「６」となる。
【００５７】
ジョブ割当情報記憶領域１２１ｄは、ジョブ割当情報を記憶する記憶領域である。ジョブ割当情報の一例を図７に示す。ジョブ割当情報は、各計算ノードがどのジョブに割り当てられているかを管理するための情報であり、ノードＩＤ、ジョブＩＤといった項目を有し、計算ノード毎に情報が１行ずつ格納される。ノードＩＤは、計算ノードを識別するための識別子である。ジョブＩＤはジョブを識別するための識別子であり、ジョブ管理情報のジョブＩＤと対応する。
【００５８】
図７に示したジョブ割当情報は、図２においてジョブＸが投入される前の各計算ノードの状態を示しており、例えば、ノードＩＤが「１」および「２」の計算ノードが「Ａ」のジョブＩＤを有するジョブに割り当てられている状態を示している。
【００５９】
入力部１２２は、情報や操作指示を入力するためのデバイスであり、例えば、キーボードやマウスからなる。表示部１２３は、各種情報を表示するためのデバイスであり、例えば、液晶表示装置からなる。ネットワークインターフェース部１２４は、ネットワーク通信を実現するためのインターフェース装置である。
【００６０】
制御部１２５は、ジョブ管理装置１２を全体制御する制御部であり、受付部１２５ａと、優先実行部１２５ｂと、実行停止ジョブ選択部１２５ｃと、空きノード活用ジョブ選択部１２５ｄと、実行制御部１２５ｅと、優先度調整部１２５ｆと、実行停止ジョブ実行再開部１２５ｇと、シミュレート部１２５ｈとを有する。
【００６１】
受付部１２５ａは、端末装置３０ａ〜３０ｃ等からジョブの実行要求を受け付ける処理部である。受付部１２５ａは、受け付けた実行要求に含まれるジョブを実行待ちジョブ記憶領域１２１ａに格納する。また、受付部１２５ａは、ジョブの属性情報として、優先度と、実行所要時間の指定を受け付け、図６−１に示したジョブ管理情報にエントリを追加し、受け付けた情報を追加したエントリに設定する。
【００６２】
そして、受付部１２５ａは、受け付けたジョブが高優先度のジョブである場合、優先実行部１２５ｂに指示して、そのジョブを優先的に実行させる。なお、受け付けたジョブが高優先度のジョブであるか否かについては、例えば、指定された優先度が所定値以上の場合に高優先度のジョブであると判定してもよいし、指定された優先度が実行中のジョブのいずれか１つよりも高いときに高優先度のジョブであると判定してもよい。
【００６３】
優先実行部１２５ｂは、高優先度のジョブをノードに優先的に実行させる処理部である。優先実行部１２５ｂは、高優先度のジョブを実行するために必要な数の空きノードがあるか否かをジョブ管理情報を参照して確認し、空きノードが十分にあれば、高優先度のジョブに空きノードを割り当て、その状態をジョブ管理情報とジョブ割当情報に反映させる。
【００６４】
一方、空きノードが不足している場合は、実行停止状態とするジョブを実行停止ジョブ選択部１２５ｃに選択させ、選択されたジョブを実行停止状態にした後、それらのジョブに割り当てられていた計算ノードを、高優先度のジョブに割り当て、その状態をジョブ管理情報とジョブ割当情報に反映させる。そして、ジョブ管理情報を参照し、高優先度のジョブに計算ノードを割り当てた後にも空きノードがあれば、空きノード活用ジョブを空きノード活用ジョブ選択部１２５ｄに選択させ、選択されたジョブに空きノードを割り当て、その状態をジョブ管理情報とジョブ割当情報に反映させる。
【００６５】
実行停止ジョブ選択部１２５ｃは、高優先度のジョブを優先実行させるために実行停止状態とするジョブを選択する処理部である。実行停止ジョブ選択部１２５ｃは、単一のジョブもしくはジョブの組合せを実行停止状態とする対象として選択し、ジョブが複数の計算ノード上で並列的に実行されている場合であっても、一部の計算ノード上で実行されている処理のみを実行停止状態にする対象として選択はしない。
【００６６】
実行停止ジョブ選択部１２５ｃは、ジョブ管理情報を参照し、ステータスが「実行中」となっているジョブの中から、優先実行される高優先度のジョブよりも優先度が低く、かつ、高優先度のジョブを優先実行させるために不足している計算ノード数以上の数の計算ノードが割り当てられている単一のジョブもしくはジョブの組合せを実行停止状態とする対象として選択する。
【００６７】
なお、該当する候補が複数あるときは、前述のように、割り当てられている計算ノード数が最も少ない候補を、最も優先度が低い候補の中から選択してもよいし、空きノード活用ジョブとの組合せを全て確認して、計算ノードが遊休状態となる時間の合計が最も短くなる候補を選択してもよい。
【００６８】
空きノード活用ジョブ選択部１２５ｄは、空きノード活用ジョブを選択する処理部である。空きノード活用ジョブ選択部１２５ｄは、ジョブ管理情報を参照し、ステータスが「実行待ち」となっているジョブの中から、実行に必要な計算ノード数が空きノード数以下であり、かつ、実行所要時間が優先実行される高優先度のジョブの実行所要時間以下である単一のジョブもしくはジョブの組合せの中から、計算ノードが遊休状態となる時間の合計が最も小さくなるジョブを空きノード活用ジョブとして選択する。
【００６９】
実行制御部１２５ｅは、高優先度のジョブの優先実行以外の、ジョブの実行に関する各種制御を行う制御部である。例えば、実行制御部１２５ｅは、定期的にジョブ割当情報を参照し、クラスタ２に空きノードの存在を認識すると、優先度を参照しながらステータスが「実行待ち」のジョブに空きノードを割り当て、その状態を図６−１に示したジョブ管理情報と図７に示したジョブ割当情報に反映させる。
【００７０】
また、実行制御部１２５ｅは、定期的にジョブ管理情報を参照し、ステータスが「実行待ち」のジョブの実行待ち時間、すなわち、現在日時と投入日時との差がチェックポイントの値よりも大きい場合に、優先度調整部１２５ｆに指示してそのジョブの優先度を高く再設定させ、そのジョブが早期に実行されるように調整する。また、実行制御部１２５ｅは、ステータスが「実行中」のジョブの実行時間が実行所要時間を超過しており、その差（以下、この差を「実行超過時間」という）がチェックポイントの値よりも大きい場合に、優先度調整部１２５ｆに指示してそのジョブの優先度を低く再設定させ、そのジョブが実行停止状態になり易いように調整する。
【００７１】
また、実行制御部１２５ｅは、定期的にジョブの実行状況を確認し、ジョブ管理情報における実行時間の値を更新する。そして、実行が完了したジョブがあれば、ジョブ管理情報とジョブ割当情報からそのジョブに関する情報を削除する。そのとき、ジョブ管理情報の該当エントリの復帰対象ジョブの項目にジョブの情報が設定されていれば、実行制御部１２５ｅは、その情報を実行停止ジョブ実行再開部１２５ｇに引き渡して実行停止状態となっている処理を復帰させる。
【００７２】
優先度調整部１２５ｆは、ジョブの実行が平等に行われるようにジョブの優先度を調整する処理部である。前述のように、ジョブの優先度の調整は、実行待ちとなっているジョブの実行待ち時間が所定値以上になった場合と、実行中のジョブの実行超過時間が所定値以上になった場合に行われる。便宜上、実行待ち時間が３６０分の倍数を超過した場合と、実行超過時間が６０分の倍数を超過した場合に優先度の調整が行われると仮定して、優先度の調整の仕組みについて説明する。
【００７３】
新たなジョブが投入されると、そのジョブに関する情報がジョブ管理情報に登録され、ジョブ管理情報のチェックポイントには「３６０」が設定される。そして、実行制御部１２５ｅが定期的にジョブ管理情報を参照し、ステータスが「実行待ち」で実行待ち時間がチェックポイントの値を超過したジョブがあれば、そのジョブの優先度を再設定するように優先度調整部１２５ｆに指示する。指示を受けた優先度調整部１２５ｆは、指示されたジョブの優先度に１を加算するとともに、チェックポイントの値に３６０を加算して、実行待ち時間がさらに長くなった場合に再度そのジョブの優先度が調整されるようにする。このように、実行待ち時間が長くなったジョブの優先度を高く再設定していけば、優先度の低いジョブがいつまでたっても実行されないという事態の発生を防止できる。
【００７４】
また、ジョブが実行状態になると、ジョブ管理情報におけるそのジョブのステータスが「実行中」に更新され、チェックポイントには「６０」が設定される。そして、実行制御部１２５ｅが定期的にジョブ管理情報を参照し、ステータスが「実行中」で実行超過時間がチェックポイントの値を超過したジョブがあれば、そのジョブの優先度を再設定するように優先度調整部１２５ｆに指示する。指示を受けた優先度調整部１２５ｆは、指示されたジョブの優先度から１を減算するとともに、チェックポイントの値に６０を加算して、実行超過時間がさらに長くなった場合に再度そのジョブの優先度が調整されるようにする。このように、実行超過時間が長くなったジョブの優先度を低く再設定していけば、予定通りに完了せずスケジュールを乱しているジョブが実行停止状態になり易いようにし、予定通りに実行されている他のジョブが実行停止状態となり実行完了が遅れる可能性を低くできる。
【００７５】
実行停止ジョブ実行再開部１２５ｇは、ジョブの実行が完了した場合に、そのジョブを実行させるために実行停止状態となった処理を復帰させる処理部である。例えば、図２に示した例では、ジョブＸとジョブＧを実行させるために、ジョブＢが実行停止状態となり、優先度が「５」に設定される。そして、図６−２に示すように、ジョブ管理情報のジョブＸとジョブＧに対応する情報の復帰対象ジョブの項目には、ジョブＢが実行停止状態となり、その時点の優先度が「６」であった旨が記録される。
【００７６】
この場合、ジョブＧの実行が完了した時点と、ジョブＸの実行が完了した時点で、実行停止ジョブ実行再開部１２５ｇは、実行制御部１２５ｅからの指示を受けて、実行が完了したジョブが使用していた計算ノードをジョブＢの処理に割り当てる。そして、ジョブＢの全ての処理が計算ノードを割り当てられた時点で、実行停止ジョブ実行再開部１２５ｇは、ジョブ管理情報におけるジョブＢのステータスを「実行中」に更新し、優先度を「５」から「６」に戻す。
【００７７】
シミュレート部１２５ｈは、ジョブの実行状況をシミュレートし、その結果を表示部１２３等に出力する処理部である。シミュレート部１２５ｈは、ジョブの実行状況を正確にシミュレートするため、必要に応じて、優先実行部１２５ｂ、実行停止ジョブ選択部１２５ｃ、空きノード活用ジョブ選択部１２５ｄ、優先度調整部１２５ｆ、実行停止ジョブ実行再開部１２５ｇ等の処理ロジックを呼び出して利用する。
【００７８】
図８は、シミュレート部１２５ｈの出力画面の一例を示す図である。同図に示すように、この出力画面では、３０分毎に、実行待ちジョブと、実行中ジョブと、実行停止ジョブとがどのように変化するかがグラフィカルに表現されている。この出力画面を参照するれば、例えば、１．５時間後から３時間後までの間に２つの計算ノードが遊休状態となるため、この間に必要とする計算ノード数が２つ以下で実行所要時間が９０分以下のジョブを実行させる余裕があると、管理者等が把握できる。
【００７９】
また、この出力画面では、仮想的に、任意の時点で新たなジョブを投入したり、任意のジョブの優先度を変更したりする操作を利用者が実行でき、シミュレート部１２５ｈは、その操作の結果に従ってシミュレーションを再実行し、結果を表示し直す。
【００８０】
次に、図５に示したジョブ管理装置１２の処理手順について説明する。図９は、ジョブ管理装置１２に新たなジョブが投入されたときの受付処理手順を示すフローチャートである。同図に示すように、受付部１２５ａは、新規ジョブを受け付けると（ステップＳ１０１）、図６−１に示したジョブ管理情報にエントリを追加してそのジョブに関する情報を設定する（ステップＳ１０２）。そして、受付部１２５ａは、そのジョブが高優先度でなければ（ステップＳ１０３否定）、通常の実行待ちジョブとして実行待ちジョブ記憶領域１２１ａに格納する（ステップＳ１０４）。
【００８１】
一方、新規ジョブが高優先度であった場合は（ステップＳ１０３肯定）、受付部１２５ａは、優先実行部１２５ｂに対してそのジョブの優先実行を指示する。指示を受けた優先実行部１２５ｂは、新規ジョブが必要とする計算ノード数ＮＲと、実行所要時間Ｔ１とをジョブ管理情報から取得し（ステップＳ１０５）、ジョブ割当情報から現在の空きノード数ＮＦ１を取得する（ステップＳ１０６）。
【００８２】
そして、ＮＦ１がＮＲよりも小さい場合、すなわち、空きノード数が、新規ジョブが必要とする数よりも少ない場合は（ステップＳ１０７肯定）、優先実行部１２５ｂは、実行停止ジョブ選択部１２５ｃに後述する実行停止ジョブ選択処理を実行させ（ステップＳ１０８）、実行停止状態とするジョブが選択された場合は（ステップＳ１０９肯定）、選択されたジョブを実行停止状態とする（ステップＳ１１０）。なお、実行停止ジョブ選択部１２５ｃによって実行停止状態とするジョブが選択されなかった場合は（ステップＳ１０９否定）、優先実行部１２５ｂは、新規ジョブを通常の実行待ちジョブとして実行待ちジョブ記憶領域１２１ａに格納し、処理を終了する（ステップＳ１０４）。
【００８３】
選択されたジョブを実行停止状態とした後、優先実行部１２５ｂは、新規ジョブに計算ノードを割り当てて実行を開始させ、その状態をジョブ管理情報とジョブ割当情報に反映させる（ステップＳ１１１）。そして、ジョブ割当情報から現在の空きノード数ＮＦ２を取得し（ステップＳ１１２）、ＮＦ２が０であれば、すなわち、空きノードがなければ（ステップＳ１１３否定）、処理を終了する。
【００８４】
ＮＦ２が０よりも大きい場合、すなわち、空きノードがある場合は（ステップＳ１１３肯定）、優先実行部１２５ｂは、空きノード活用ジョブ選択部１２５ｄに後述する空きノード活用ジョブ選択処理を実行させ（ステップＳ１１４）、空きノード活用ジョブが選択された場合は（ステップＳ１１５肯定）、選択されたジョブに計算ノードを割り当てて実行を開始させるとともに、その状態をジョブ管理情報とジョブ割当情報に反映させる（ステップＳ１１６）。なお、空きノード活用ジョブ選択部１２５ｄによって空きノード活用ジョブが選択されなかった場合は（ステップＳ１１５否定）、そのまま処理を終了する。
【００８５】
また、ステップＳ１０７においてＮＦ１がＮＲ以上であった場合、すなわち、空きノード数が、新規ジョブが必要とする数以上であった場合は（ステップＳ１０７否定）、優先実行部１２５ｂは、いずれのジョブも実行停止状態にせずに、ステップＳ１１１以降の処理を実行する。
【００８６】
図１０は、実行停止ジョブ選択処理の処理手順を示すフローチャートである。同図に示すように、実行停止ジョブ選択部１２５ｃは、ＮＲとＮＦ１の差を算出し、新規ジョブを実行するために不足している計算ノード数を求める（ステップＳ２０１）。そして、ジョブ管理情報を参照して、ステータスが「実行中」であるジョブの中から優先度が新規ジョブの優先度よりも低いジョブを選択し（ステップＳ２０２）、選択したジョブの中から、割り当てられている計算ノードの数が、ステップＳ２０１で求めた不足している計算ノード数以上のジョブを選択する（ステップＳ２０３）。
【００８７】
そして、ジョブが選択され、かつ、選択された候補が複数の場合は（ステップＳ２０４肯定、ステップＳ２０５肯定）、実行停止ジョブ選択部１２５ｃは、選択されたジョブの中から最も優先度が低いジョブを選択し、その中からノード数が最も少ないジョブを１つ選択する（ステップＳ２０６）。そして、実行停止ジョブ選択部１２５ｃは、選択されたジョブを実行停止状態にする対象として決定し（ステップＳ２０７）、選択されたジョブの優先度を実行待ち状態の他のジョブの優先度よりも低く設定し直す（ステップＳ２０８）。
【００８８】
一方、ジョブが選択され、かつ、選択された候補が１つの場合は（ステップＳ２０４肯定、ステップＳ２０５否定）、実行停止ジョブ選択部１２５ｃは、選択されたジョブを実行停止状態にする対象として決定し（ステップＳ２０７）、選択されたジョブの優先度を実行待ち状態の他のジョブの優先度よりも低く設定し直す（ステップＳ２０８）。また、実行停止ジョブ選択部１２５ｃは、ステップＳ２０３においてジョブが選択されなかった場合は（ステップＳ２０４否定）、実行停止状態にする対象を決定せずに処理を終了する。
【００８９】
なお、上記の処理手順は、単一のジョブのみを実行停止状態にする対象として選択する例を示したが、ステップＳ２０３において、選択されたジョブの全ての組合せを作成し、それらの組合せから割り当てられている計算ノード数の合計がＮＲ以上の組合せを選択するようにすれば、複数のジョブの組合せを実行停止状態にする対象として選択するように処理手順を変更できる。
【００９０】
また、上記の処理手順は、実行停止状態となる処理が少なくなるように、実行停止状態にする対象を選択する例を示したが、ステップＳ２０６において、下記のように処理を行えば、計算ノードが遊休状態となる時間の合計が最も小さくなるように、実行停止状態にする対象を選択できる。すなわち、選択されているジョブと、実行に必要な計算ノード数が、そのジョブが実行停止状態にする対象として選択された場合にできる空きノード数以下である実行待ちジョブとの組合せを全て作成し、計算ノードが遊休状態となる時間の合計が最も小さい組合せに対応する実行中のジョブを実行停止状態にする対象として選択すればよい。なお、ここでいうジョブは、ジョブの組合せであってもよい。
【００９１】
図１１は、空きノード活用ジョブ選択処理の処理手順を示すフローチャートである。同図に示すように、空きノード活用ジョブ選択部１２５ｄは、ジョブ管理情報を参照して、ステータスが「実行待ち」であるジョブの中からノード数がＮＦ２以下のジョブを選択し（ステップＳ３０１）、選択したジョブの中から、実行所要時間がＴ１以下のジョブを選択する（ステップＳ３０２）。
【００９２】
そして、ジョブが選択され、かつ、選択された候補が複数の場合は（ステップＳ３０３肯定、ステップＳ３０４肯定）、空きノード活用ジョブ選択部１２５ｄは、選択されたジョブの中から、そのジョブを空きノード活用ジョブとした場合に計算ノードが遊休状態となる時間の合計が最も少ないジョブを１つ選択する（ステップＳ３０５）。そして、空きノード活用ジョブ選択部１２５ｄは、選択されたジョブを空きノード活用ジョブとして決定し（ステップＳ３０６）、選択されたジョブの優先度を他の実行中のジョブの優先度よりも高く設定し直す（ステップＳ３０７）。
【００９３】
一方、ジョブが選択され、かつ、選択された候補が１つの場合は（ステップＳ３０３肯定、ステップＳ３０４否定）、空きノード活用ジョブ選択部１２５ｄは、選択されたジョブを空きノード活用ジョブとして決定し（ステップＳ３０６）、選択されたジョブの優先度を他の実行中のジョブの優先度よりも高く設定し直す（ステップＳ３０７）。また、ステップＳ３０２においてジョブが選択されなかった場合は（ステップＳ３０３否定）、空きノード活用ジョブを決定せずに処理を終了する。
【００９４】
なお、上記の処理手順は、単一のジョブのみを空きノード活用ジョブとして選択する例を示したが、ステップＳ３０５において、選択されたジョブの全ての組合せを作成し、全ての組合せの中から、それらの組合せを空きノード活用ジョブとした場合に計算ノードが遊休状態となる時間の合計が最も少ない組合せを１つ選択するようにすれば、複数のジョブの組合せを空きノード活用ジョブとして選択するように処理手順を変更できる。
【００９５】
図１２は、実行制御部１２５ｅのジョブ管理処理手順を示すフローチャートである。同図に示すように、実行制御部１２５ｅは、ジョブ管理装置１２が動作を開始した後、後述する実行待ちジョブ監視処理を実行し（ステップＳ４０１）、後述する実行中ジョブ監視処理を実行し（ステップＳ４０２）、一定時間待った後（ステップＳ４０３）、再び実行待ちジョブ監視処理と実行中ジョブ監視処理を実行するという処理手順を繰り返し実行する。
【００９６】
図１３は、実行待ちジョブ監視処理の処理手順を示すフローチャートである。同図に示すように、実行制御部１２５ｅは、ジョブ管理情報からステータスが「実行待ち」のジョブの情報を取得し、それを優先度順でソートする（ステップＳ５０１）。そして、ソートしたジョブの中から未選択で優先度が最も高いジョブを選択し（ステップＳ５０２）、選択できた場合は（ステップＳ５０３肯定）、選択されたジョブが必要とする計算ノード数ＮＲを取得し（ステップＳ５０４）、さらにジョブ割当情報から現在の空きノード数ＮＦを取得する（ステップＳ５０５）。
【００９７】
そして、実行制御部１２５ｅは、ＮＦがＮＲ以上であれば、すなわち、選択されたジョブを実行するために十分な数の空きノードがあれば（ステップＳ５０６肯定）、選択されたジョブに計算ノードを割り当てて実行を開始させ、その状態をジョブ管理情報とジョブ割当情報に反映させた後（ステップＳ５０７）、ステップＳ５０２に戻って次のジョブの選択を試みる。
【００９８】
一方、ＮＦがＮＲよりも小さければ、すなわち、選択されたジョブを実行するために十分な数の空きノードがなければ（ステップＳ５０６否定）、実行制御部１２５ｅは、選択されたジョブの実行待ち時間を算出する（ステップＳ５０８）。そして、実行待ち時間がチェックポイントの値よりも大きければ（ステップＳ５０９肯定）、実行制御部１２５ｅは、優先度調整部１２５ｆに優先度の調整を行わせる。優先度調整部１２５ｆは、ジョブの優先度を１上げて（ステップＳ５１０）、チェックポイントの値を更新する（ステップＳ５１１）。そして、優先度調整部１２５ｆの処理が終わった後、実行制御部１２５ｅは、ステップＳ５０２に戻って次のジョブの選択を試みる。
【００９９】
そして、全てのジョブを選択し、ステップＳ５０２において選択できるジョブがなくなった場合に（ステップＳ５０３否定）、処理を終了する。
【０１００】
図１４は、実行中ジョブ監視処理の処理手順を示すフローチャートである。同図に示すように、実行制御部１２５ｅは、ジョブ管理情報を参照して、ステータスが「実行中」で、未選択のジョブを選択し（ステップＳ６０１）、選択できた場合は（ステップＳ６０２肯定）、そのジョブの実行状態を確認する。
【０１０１】
そして、そのジョブの実行が完了していた場合は（ステップＳ６０３肯定）、実行制御部１２５ｅは、復帰が必要なジョブがあれば（ステップＳ６０４肯定）、実行停止ジョブ実行再開部１２５ｇにジョブの復帰を行わせ（ステップＳ６０５）、復帰が必要なジョブの有無に関わらず、ジョブ管理情報における該当ジョブのエントリを削除し、ジョブ割当情報における該当ジョブの情報を削除した後（ステップＳ６０６）、ステップＳ６０１に戻って次のジョブの選択を試みる。
【０１０２】
一方、ステップＳ６０１で選択したジョブの実行が完了していなければ（ステップＳ６０３否定）、実行制御部１２５ｅは、ジョブ管理情報における該当ジョブの実行時間を更新する（ステップＳ６０７）。そして、実行制御部１２５ｅは、選択されたジョブの実行超過時間を算出し、実行超過時間がチェックポイントの値よりも大きければ（ステップＳ６０８肯定）、優先度調整部１２５ｆに優先度の調整を行わせる。優先度調整部１２５ｆは、ジョブの優先度を１下げて（ステップＳ６０９）、チェックポイントの値を更新する（ステップＳ６１０）。そして、優先度調整部１２５ｆの処理が終わった後、実行制御部１２５ｅは、ステップＳ６０１に戻って次のジョブの選択を試みる。
【０１０３】
そして、全てのジョブを選択し、ステップＳ６０１において選択できるジョブがなくなった場合に（ステップＳ６０２否定）、処理を終了する。
【０１０４】
なお、図５に示した本実施例に係るジョブ管理装置１２の構成は、本発明の要旨を逸脱しない範囲で種々に変更できる。例えば、ジョブ管理装置１２の制御部１２５の機能をソフトウェアとして実装し、これをコンピュータで実行して、ジョブ管理装置１２と同等の機能を実現できる。以下に、制御部１２５の機能をソフトウェアとして実装したジョブ管理プログラム１０７１を実行するコンピュータの一例を示す。
【０１０５】
図１５は、ジョブ管理プログラム１０７１を実行するコンピュータ１０００を示す機能ブロック図である。このコンピュータ１０００は、各種演算処理を実行するＣＰＵ（Central Processing Unit）１０１０と、ユーザからのデータの入力を受け付ける入力装置１０２０と、各種情報を表示するモニタ１０３０と、記録媒体からプログラム等を読み取る媒体読取り装置１０４０と、ネットワークを介して他のコンピュータとの間でデータの授受を行うネットワークインターフェース装置１０５０と、各種情報を一時記憶するＲＡＭ（Random Access Memory）１０６０と、ハードディスク装置１０７０とをバス１０８０で接続して構成される。
【０１０６】
そして、ハードディスク装置１０７０には、図５に示した制御部１２５と同様の機能を有するジョブ管理プログラム１０７１が記憶され、図５に示した記憶部１２１に相当するジョブ管理用領域１０７２が設けられる。なお、ジョブ管理用領域１０７２を、適宜分散させ、ネットワークを介して接続された他のコンピュータに設けてもよい。
【０１０７】
そして、ＣＰＵ１０１０がジョブ管理プログラム１０７１をハードディスク装置１０７０から読み出してＲＡＭ１０６０に展開すると、ジョブ管理プログラム１０７１は、ジョブ管理プロセス１０６１として機能するようになる。そして、ジョブ管理プロセス１０６１は、ジョブ管理用領域１０７２から読み出した情報等を適宜ＲＡＭ１０６０上の自身に割り当てられた領域に展開し、この展開したデータ等に基づいて各種データ処理を実行する。
【０１０８】
なお、上記のジョブ管理プログラム１０７１は、必ずしもハードディスク装置１０７０に格納されている必要はなく、ＣＤ−ＲＯＭ等の記憶媒体に記憶されたこのプログラムを、コンピュータ１０００が読み出して実行するようにしてもよい。また、公衆回線、インターネット、ＬＡＮ（Local Area Network）、ＷＡＮ（Wide Area Network）等を介してコンピュータ１０００に接続される他のコンピュータ（またはサーバ）等にこのプログラムを記憶させておき、コンピュータ１０００がこれらからプログラムを読み出して実行するようにしてもよい。
【０１０９】
上述してきたように、本実施例では、高優先度の新たなジョブが受け付けられた場合に、そのジョブを実行するために不足している計算ノード数以上の計算ノードを使用して実行されているジョブを実行停止状態とし、実行停止状態となったジョブが使用していた計算ノードと空きノードを使用して新たなジョブを実行するようにしたので、実行中のジョブの処理の一部が実行停止状態となって、そのジョブの他の処理が計算ノードを割り当てられたまま実行停止状態と同様の状態になる事態を防止でき、クラスタに含まれる計算ノードを効率よく活用できる。
【０１１０】
また、本実施例では、新たなジョブを実行させた後にできた空きノードを活用して、新たなジョブよりも早く実行が終了するジョブを実行するようにしたので、新たなジョブの実行が完了した後に実行停止状態のジョブを復帰させる時期を遅らせずに、クラスタに含まれる計算ノードを効率よく活用できる。
【０１１１】
（付記１）コンピュータクラスタの空き計算ノードの数が、第１のジョブが必要とする該計算ノード数よりも少ない場合に、実行中で、該第１のジョブよりも優先度が低く、かつ実行に必要な該計算ノード数が該第１のジョブの実行のために不足している該計算ノード数以上のジョブを第２のジョブとして選択する実行停止ジョブ選択ステップと、
前記第２のジョブの全ての処理を実行停止状態とし、前記第２のジョブによって使用されていた前記計算ノードと前記空き計算ノードにおいて前記第１のジョブを実行させる優先実行ステップと、
前記第１のジョブの実行が完了した後に、前記第２のジョブの実行を再開させる実行再開ステップと
を含むことを特徴とするジョブ管理方法。
【０１１２】
（付記２）前記優先実行ステップにおいて前記第１のジョブの実行が開始された後に前記コンピュータクラスタに前記空き計算ノードが存在する場合に、実行に必要な前記計算ノード数が前記空き計算ノード数以下で、実行所要時間が前記第１のジョブの実行所要時間以下で、かつ前記コンピュータクラスタにおいて実行されていないジョブを第３のジョブとして選択する空き計算ノード活用ジョブ選択ステップと、
前記空き計算ノードにおいて前記第３のジョブを実行させる空きノード活用ジョブ実行ステップと
をさらに含むことを特徴とする付記１に記載のジョブ管理方法。
【０１１３】
（付記３）前記実行停止ジョブ選択ステップは、前記第２のジョブの選択肢が複数存在する場合に、該選択肢の中で最も優先度が低い前記ジョブ、あるいは実行に必要な前記計算ノード数が最も少ない前記ジョブを前記第２のジョブとして選択することを特徴とする付記１または２に記載のジョブ管理方法。
【０１１４】
（付記４）前記実行停止ジョブ選択ステップは、前記第１のジョブよりも優先度が低く、かつ、実行に必要な計算ノード数が、前記第１のジョブの実行のために不足している計算ノード数以上であるジョブが複数存在する場合に、それらのジョブの中から、前記第２のジョブの実行を再開させるまでの間に前記クラスタに含まれる計算ノードが空きノードとなる時間の合計が最も短くなるジョブを前記第２のジョブとして選択することを特徴とする付記１または２に記載のジョブ管理方法。
【０１１５】
（付記５）前記実行停止ジョブ選択ステップは、選択した前記第２のジョブの優先度を下げることを特徴とする付記１または２に記載のジョブ管理方法。
【０１１６】
（付記６）前記空きノード活用ジョブ選択ステップは、選択した前記第３のジョブの優先度を上げることを特徴とする付記２に記載のジョブ管理方法。
【０１１７】
（付記７）実行時間が指定された実行所要時間を所定時間以上超過したジョブの優先度を下げる優先度調整ステップをさらに含むことを特徴とする付記１または２に記載のジョブ管理方法。
【０１１８】
（付記８）前記受付ステップにおいて受け付けられた後、前記クラスタにおいて実行されるのを待つ時間が所定時間を超過したジョブの優先度を上げる優先度調整ステップをさらに含むことを特徴とする付記１または２に記載のジョブ管理方法。
【０１１９】
（付記９）コンピュータクラスタの空き計算ノードの数が、第１のジョブが必要とする該計算ノード数よりも少ない場合に、実行中で、該第１のジョブよりも優先度が低く、かつ実行に必要な該計算ノード数が該第１のジョブの実行のために不足している該計算ノード数以上のジョブを第２のジョブとして選択する実行停止ジョブ選択手段と、
前記第２のジョブの全ての処理を実行停止状態とし、前記第２のジョブによって使用されていた前記計算ノードと前記空き計算ノードにおいて前記第１のジョブを実行させる優先実行行手段と、
前記第１のジョブの実行が完了した後に、前記第２のジョブの実行を再開させる実行再開手段と
を備えることを特徴とするジョブ管理装置。
【０１２０】
（付記１０）コンピュータに、
コンピュータクラスタの空き計算ノードの数が、第１のジョブが必要とする該計算ノード数よりも少ない場合に、実行中で、該第１のジョブよりも優先度が低く、かつ実行に必要な該計算ノード数が該第１のジョブの実行のために不足している該計算ノード数以上のジョブを第２のジョブとして選択する実行停止ジョブ選択手順と、
前記第２のジョブの全ての処理を実行停止状態とし、前記第２のジョブによって使用されていた前記計算ノードと前記空き計算ノードにおいて前記第１のジョブを実行させる優先実行手順と、
前記第１のジョブの実行が完了した後に、前記第２のジョブの実行を再開させる実行再開手順と
を実行させることを特徴とするジョブ管理プログラム。
【産業上の利用可能性】
【０１２１】
以上のように、本発明に係るジョブ管理方法、ジョブ管理装置およびジョブ管理プログラムは、複数の計算ノードから構成されたクラスタにおいてジョブを効率的に稼動させるために有用であり、特に、複数の計算ノード間で情報をやりとりしながら処理を進めていくタイプのジョブを実行する場合にもクラスタに含まれる計算ノードを効率よく活用するのが必要な場合に適している。
【図面の簡単な説明】
【０１２２】
【図１】本実施例に係るジョブ管理処理が実行されるクラスタシステムの一例を示す図である。
【図２】本実施例に係るジョブ管理処理の概要を説明するための説明図である。
【図３】複数のジョブの組合せを実行停止状態にする処理の一例を示す図である。
【図４】計算ノードが遊休状態となる時間が最小になるように実行停止状態にする対象を選択する処理の一例を示す図である。
【図５】本実施例に係るジョブ管理装置の構成を示すブロック図である。
【図６−１】ジョブ管理情報の一例を示す図である。
【図６−２】高優先度のジョブが投入された後のジョブ管理情報の一例を示す図である。
【図７】ジョブ割当情報の一例を示す図である。
【図８】シミュレート部の出力画面の一例を示す図である。
【図９】ジョブ管理装置に新たなジョブが投入されたときの受付処理手順を示すフローチャートである。
【図１０】実行停止ジョブ選択処理の処理手順を示すフローチャートである。
【図１１】空きノード活用ジョブ選択処理の処理手順を示すフローチャートである。
【図１２】実行制御部のジョブ管理処理手順を示すフローチャートである。
【図１３】実行待ちジョブ監視処理の処理手順を示すフローチャートである。
【図１４】実行中ジョブ監視処理の処理手順を示すフローチャートである。
【図１５】ジョブ管理プログラムを実行するコンピュータを示す機能ブロック図である。
【符号の説明】
【０１２３】
１  クラスタシステム
１０、１１、１２  ジョブ管理装置
１１ａ  実行待ちジョブ記憶領域
１１ｂ  実行停止ジョブ記憶領域
１２ａ  実行待ちジョブ記憶領域
１２ｂ  実行停止ジョブ記憶領域
１２１  記憶部
１２１ａ  実行待ちジョブ記憶領域
１２１ｂ  実行停止ジョブ記憶領域
１２１ｃ  ジョブ管理情報記憶領域
１２１ｄ  ジョブ割当情報記憶領域
１２２  入力部
１２３  表示部
１２４  ネットワークインターフェース部
１２５  制御部
１２５ａ  受付部
１２５ｂ  優先実行部
１２５ｃ  実行停止ジョブ選択部
１２５ｄ  空きノード活用ジョブ選択部
１２５ｅ  実行制御部
１２５ｆ  優先度調整部
１２５ｇ  実行停止ジョブ実行再開部
１２５ｈ  シミュレート部
２  クラスタ
２０ａ〜２０ｄ  計算ノード
３０ａ〜３０ｃ  端末装置
１０００  コンピュータ
１０１０  ＣＰＵ
１０２０  入力装置
１０３０  モニタ
１０４０  媒体読取り装置
１０５０  ネットワークインターフェース装置
１０６０  ＲＡＭ
１０６１  ジョブ管理プロセス
１０７０  ハードディスク装置
１０７１  ジョブ管理プログラム
１０７２  ジョブ管理用領域
１０８０  バス
【図１】
0004935595.tif 000002
【図２】
0004935595.tif 000003
【図３】
0004935595.tif 000004
【図４】
0004935595.tif 000005
【図５】
0004935595.tif 000006
【図６−１】
0004935595.tif 000007
【図６−２】
0004935595.tif 000008
【図７】
0004935595.tif 000009
【図８】
0004935595.tif 000010
【図９】
0004935595.tif 000011
【図１０】
0004935595.tif 000012
【図１１】
0004935595.tif 000013
【図１２】
0004935595.tif 000014
【図１３】
0004935595.tif 000015
【図１４】
0004935595.tif 000016
【図１５】
0004935595.tif 000017