(57)【要約】【課題】ジョブスケジューリングの処理効率を向上させる。【解決手段】複数の計算ノード２ａ，２ｂ，２ｃ，・・・，２ｍ，２ｎが複数のグループに分けられている。最大資源空き量判定部１３は、複数のグループそれぞれについて、グループに属する計算ノードのうち、資源の空き量が最も多い計算ノードの該資源の空き量を、そのグループの最大資源空き量と判定する。除外部１４は、ジョブ３の資源消費量と、複数のグループそれぞれの最大資源空き量とを比較し、最大資源空き量が資源消費量に満たないグループを、探索対象から除外する。探索部１５は、探索対象から除外されていないグループに属する計算ノードの中から、資源の空き量が資源消費量以上の計算ノードを探索する。【選択図】図１
2015146154.tif 000002
【特許請求の範囲】
【請求項１】
複数の計算ノードが複数のグループに分けられており、前記複数のグループそれぞれについて、グループに属する計算ノードのうち、資源の空き量が最も多い計算ノードの該資源の空き量を、該グループの最大資源空き量と判定する最大資源空き量判定部と、
ジョブの資源消費量と、前記複数のグループそれぞれの最大資源空き量とを比較し、最大資源空き量が前記資源消費量に満たないグループを、探索対象から除外する除外部と、
探索対象から除外されていないグループに属する計算ノードの中から、資源の空き量が前記資源消費量以上の計算ノードを探索する探索部と、
を有するジョブスケジューリング装置。
【請求項２】
前記最大資源空き量判定部は、資源の種別ごとに最大資源空き量を判定し、
前記除外部は、前記ジョブの資源の種別ごとの資源消費量と、前記複数のグループそれぞれの資源の種別ごとの最大資源空き量とを比較し、少なくとも１つの種別の資源において、最大資源空き量が資源消費量に満たないグループを、探索対象から除外する、
ことを特徴とする請求項１記載のジョブスケジューリング装置。
【請求項３】
前記除外部は、前記複数のグループそれぞれの最大資源空き量の頻度分布に基づいて、最大資源空き量が前記資源消費量以上のグループの割合を計算し、該割合が所定値以上になる場合、前記資源消費量と前記複数のグループそれぞれの最大資源空き量との比較を抑止し、
前記探索部は、最大資源空き量が前記資源消費量以上のグループの割合が所定値以上になる場合、複数の計算ノードすべての中から、資源の空き量が前記資源消費量以上の計算ノードを探索する、
ことを特徴とする請求項１または２記載のジョブスケジューリング装置。
【請求項４】
前記複数のグループそれぞれの最大資源空き量の頻度分布に基づいて、最も処理を効率化できる、１グループ当たりの計算ノード数を算出し、算出された計算ノード数ごとのグループに、改めてグルーピングするグルーピング部、
をさらに有することを特徴とする請求項１乃至３のいずれかに記載のジョブスケジューリング装置。
【請求項５】
前記グルーピング部は、１グループ当たりの計算ノード数の候補値を複数生成し、生成された候補値それぞれについて、該候補値を１グループ当たりの計算ノード数としたときの処理の効率化の度合いを計算し、最も処理を効率化できる候補値を、１グループ当たりの計算ノード数とする、
ことを特徴とする請求項４記載のジョブスケジューリング装置。
【請求項６】
前記グルーピング部は、値の小さい候補値から順に処理の効率化の度合いを算出し、候補値の上昇に伴い処理の効率化の度合いが低下する傾向になると、効率化の度合いの算出を抑止し、効率化の度合いを既に算出した候補値のなかで、最も処理を効率化できる候補値を、１グループ当たりの計算ノード数とする、
ことを特徴とする請求項５記載のジョブスケジューリング装置。
【請求項７】
前記複数の計算ノードそれぞれの資源の空き量を記憶する記憶部と、
資源の空き量が前記資源消費量以上の計算ノードに対して、前記ジョブの実行を指示すると共に、該計算ノードによる前記ジョブの実行終了を検知するジョブ操作部と、
該計算ノードへの前記ジョブの実行指示または該計算ノードによる前記ジョブの実行終了に伴い、前記記憶部に記憶された該計算ノードの資源の空き量を更新する更新部と、
をさらに有することを特徴とする請求項１乃至６のいずれかに記載のジョブスケジューリング装置。
【請求項８】
コンピュータが、
複数の計算ノードを複数のグループに分け、
前記複数のグループそれぞれについて、グループに属する計算ノードのうち、資源の空き量が最も多い計算ノードの該資源の空き量を、該グループの最大資源空き量と判定し、
ジョブの資源消費量と、前記複数のグループそれぞれの最大資源空き量とを比較し、最大資源空き量が前記資源消費量に満たないグループを、探索対象から除外し、
探索対象から除外されていないグループに属する計算ノードの中から、資源の空き量が前記資源消費量以上の計算ノードを探索する、
ジョブスケジューリング方法。
【請求項９】
コンピュータに、
複数の計算ノードを複数のグループに分け、
前記複数のグループそれぞれについて、グループに属する計算ノードのうち、資源の空き量が最も多い計算ノードの該資源の空き量を、該グループの最大資源空き量と判定し、
ジョブの資源消費量と、前記複数のグループそれぞれの最大資源空き量とを比較し、最大資源空き量が前記資源消費量に満たないグループを、探索対象から除外し、
探索対象から除外されていないグループに属する計算ノードの中から、資源の空き量が前記資源消費量以上の計算ノードを探索する、
処理を実行させるジョブスケジューリングプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ジョブスケジューリング装置、ジョブスケジューリング方法、およびジョブスケジューリングプログラムに関する。
【背景技術】
【０００２】
計算センタなどのＨＰＣ（High Performance Computing）では、計算資源を公平でかつ効率的に利用できるように、計算ノードが有する計算資源にジョブが割り付けられる。ジョブは、割り付け先の計算ノードで実行される。ジョブの実行が終了すると、計算ノードへのジョブの割り付けが解除される。
【０００３】
ＨＰＣの計算資源を提供する装置は、ＰＣ（Personal Computer）クラスタ、ＳＭＰ（Symmetric Multiple Processor ）マシン、専用ハードウェアのスーパーコンピュータなど様々である。計算資源は、リソースとも呼ばれる。リソースには、様々な種類のものがある。例えばプロセッサやメモリは、リソースの一種である。リソースとしてのプロセッサには、ＣＰＵ（Central Processing Unit）に限らず、ＧＰＧＰＵ（General-Purpose computing on Graphics Processing Units）、メニーコアプロセッサなどの様々な演算資源が含まれる。マルチコアプロセッサの場合、プロセッサ・コア（以下、単にコアと呼ぶ）それぞれを個別のリソースとして取り扱うことができる。
【０００４】
実行するジョブの処理内容には、構造解析、流体解析など様々な種類がある。またジョブには、１つのコアで実行する逐次ジョブや、複数のコアで並列に実行する並列ジョブがある。並列ジョブの場合、１台の計算ノード内の複数のコアで並列に処理しても、複数の計算ノードで並列に処理してもよい。そのためジョブの割り付け先となる計算ノードは、そのジョブを実行するときに使用するコア数に応じた空きのコアを有していることが条件となる。さらにジョブは、処理内容に応じて使用するメモリ量が異なる。そのためジョブの割り付け先となる計算ノードは、そのジョブで使用するメモリ量に応じた空きのメモリ資源を有していることが条件となる。
【０００５】
ジョブをリソースに割り付けることを、ジョブスケジューリングと呼ぶ。ジョブごとに割り付け先に要求される空きのリソース量が異なるため、ジョブスケジューリングでは、ジョブを割り付け可能かどうかが、計算ノードごとに判断される。なお計算ノードのリソースへのジョブの割り付けは、ジョブへのリソースの割り当てと呼ぶこともある。ジョブへのリソースの割り当てに関する技術としては、例えば、ジョブクラス定義表に各ジョブクラスのジョブが同時使用できるプロセッサ個数（最大値）やこれに対応したプロセッサグループなどをあらかじめ記載しておく技術がある。この技術では、ジョブクラス定義表を参照することで、実行要求ジョブに対応のプロセッサ個数やプロセッサグループを求めて、プロセッサを割り当てる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平０７−２００４９６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかし、現在のジョブスケジューリング技術ではシステムの大規模化に十分に対応できておらず、システムの規模の拡大に伴いジョブスケジューリングの処理時間が増大している。すなわち、システムが大規模化し計算ノード数が増加すると、各計算ノードに対してジョブを割り付け可能か否かの判断回数が増加する。その結果、ジョブスケジューリングの処理時間が長期化する。
【０００８】
ジョブスケジューリングの処理時間の長期化は、システム全体の処理効率の低下の要因となる。例えばジョブスケジューリングの処理時間が長期化すれば、その分、計算ノードへのジョブの実行指示も遅れることとなる。しかもスケジュールの更新処理の実行中は、ジョブ操作やコマンド受付などの処理が実行できない。そのためジョブ操作などのさまざまな処理が遅延する。
【０００９】
１つの側面では、本発明は、ジョブスケジューリングの処理効率を向上させることを目的とする。
【課題を解決するための手段】
【００１０】
１つの案では、最大資源空き量判定部、除外部、および探索部を有する。複数の計算ノードが複数のグループに分けられており、最大資源空き量判定部は、複数のグループそれぞれについて、グループに属する計算ノードのうち、資源の空き量が最も多い計算ノードの該資源の空き量を、該グループの最大資源空き量と判定する。除外部は、ジョブの資源消費量と、複数のグループそれぞれの最大資源空き量とを比較し、最大資源空き量が資源消費量に満たないグループを、探索対象から除外する。探索部は、探索対象から除外されていないグループに属する計算ノードの中から、資源の空き量が資源消費量以上の計算ノードを探索する。
【発明の効果】
【００１１】
１態様によれば、ジョブスケジューリングの処理効率が向上する。
【図面の簡単な説明】
【００１２】
【図１】第１の実施の形態に係るジョブスケジューリング装置の機能の一例を示すブロック図である。
【図２】第２の実施の形態のシステムの一構成例を示す図である。
【図３】第２の実施の形態に用いる管理ノードのハードウェアの一構成例を示す図である。
【図４】管理ノードの機能を示すブロック図である。
【図５】リソース情報の一例を示す図である。
【図６】最大空き値ペア情報の一例を示す図である。
【図７】グループの最大空き値ペアの例を示す図である。
【図８】最大空き値ペアテーブルの一例を示す図である。
【図９】計算ノードのグルーピングの一例を示す図である。
【図１０】探索対象とするグループの判断例を示す図である。
【図１１】探索対象とするグループ内の計算ノードの調査例を示す図である。
【図１２】すべての計算ノードを調査する場合のスケジューリングコストを示す図である。
【図１３】探索対象のグループのフィルタリングを行う場合のスケジューリングコストを示す図である。
【図１４】ｐ値の算出例を示す図である。
【図１５】最適なｍ値の算出例を示す図である。
【図１６】ジョブスケジューリングの手順の一例を示すフローチャートである。
【図１７】第１のジョブスケジューリング処理の手順の一例を示すフローチャートである。
【図１８】第２のジョブスケジューリング処理の手順の一例を示すフローチャートである。
【図１９】ｍ値更新処理の手順の一例を示すフローチャートである。
【図２０】第１のジョブについてのシミュレーション結果を示す図である。
【図２１】第２のジョブについてのシミュレーション結果を示す図である。
【図２２】第３のジョブについてのシミュレーション結果を示す図である。
【発明を実施するための形態】
【００１３】
以下、本実施の形態について図面を参照して説明する。なお各実施の形態は、矛盾のない範囲で複数の実施の形態を組み合わせて実施することができる。
〔第１の実施の形態〕
図１は、第１の実施の形態に係るジョブスケジューリング装置の機能の一例を示すブロック図である。ジョブスケジューリング装置１０は、ネットワーク１を介して複数の計算ノード２ａ，２ｂ，２ｃ，・・・，２ｍ，２ｎに接続されている。ジョブスケジューリング装置１０は、複数の計算ノード２ａ，２ｂ，２ｃ，・・・，２ｍ，２ｎにジョブを実行させる際のスケジューリングを行う。
【００１４】
ジョブスケジューリング装置１０は、ジョブのスケジューリングのために、記憶部１１、グルーピング部１２、最大資源空き量判定部１３、除外部１４、探索部１５、ジョブ操作部１６、および更新部１７を有する。
【００１５】
記憶部１１は、複数の計算ノードそれぞれの資源の空き量を記憶する。例えば記憶部１１には、各計算ノードの空きコア数と空きメモリ量とが格納されている。また記憶部１１には、例えば各計算ノードが属するグループの識別子、そのグループの最大空きコア数、そのグループの最大空きメモリ量を記憶することもできる。
【００１６】
グルーピング部１２は、複数のグループそれぞれの最大資源空き量の頻度分布に基づいて、最も処理を効率化できる、１グループ当たりの計算ノード数を算出する。そしてグルーピング部１２は、算出された計算ノード数ごとのグループに、複数の計算ノードを改めてグルーピングする。グルーピング部１２は、グルーピングをした場合、各計算ノードに対応付けて、その計算ノードが属するグループの識別子を、例えば記憶部１１に格納する。
【００１７】
なおグルーピングの際の１グループ当たりの計算ノード数は、グルーピングをすることによる処理の効率化を勘案して定めることができる。例えばグルーピング部１２は、１グループ当たりの計算ノード数の候補値を複数生成し、生成された候補値それぞれについて、候補値を１グループ当たりの計算ノード数としたときの処理の効率化の度合いを計算する。そしてグルーピング部１２は、最も処理を効率化できる候補値を、１グループ当たりの計算ノード数とする。これにより、ジョブスケジューリング処理の効率化を促進できる。
【００１８】
またグルーピング部１２は、値の小さい候補値から順に処理の効率化の度合いを算出し、候補値の上昇に伴い処理の効率化の度合いが低下する傾向になると、効率化の度合いの算出を抑止することもできる。この場合、グルーピング部１２は、効率化の度合いを既に算出した候補値のなかで、最も処理を効率化できる候補値を、１グループ当たりの計算ノード数に決定する。これにより、効率化の度合いの算出の回数を削減することができ、処理が効率的となる。
【００１９】
最大資源空き量判定部１３は、複数のグループそれぞれについて、グループに属する計算ノードのうち、資源の空き量が最も多い計算ノードの該資源の空き量を、該グループの最大資源空き量と判定する。なお各計算ノードの資源の空き量が資源の種別ごとに管理されている場合、最大資源空き量判定部１３は、資源の種別ごとに最大資源空き量を判定する。最大資源空き量判定部１３は、グループの最大資源空き量を、例えば記憶部１１に格納する。
【００２０】
除外部１４は、ジョブ３の資源消費量と、複数のグループそれぞれの最大資源空き量とを比較し、最大資源空き量が資源消費量に満たないグループを、探索対象から除外する。なお各計算ノードの資源の空き量が資源の種別ごとに管理されている場合、除外部１４は、ジョブ３の資源の種別ごとの資源消費量と、複数のグループそれぞれの資源の種別ごとの最大資源空き量とを比較する。この場合、除外部１４は、少なくとも１つの種別の資源において、最大資源空き量が資源消費量に満たないグループを、探索対象から除外する。
【００２１】
探索部１５は、探索対象から除外されていないグループに属する計算ノードの中から、資源の空き量がジョブ３の資源消費量以上の計算ノード２ｍを探索する。
ジョブ操作部１６は、資源の空き量がジョブ３の資源消費量以上の計算ノード２ｍに対して、ジョブ３の実行を指示する。またジョブ操作部１６は、ジョブ３の実行を指示した計算ノード２ｍによるジョブ３の実行終了を検知する。例えばジョブ操作部１６は、計算ノード２ｍからのジョブ実行終了の通知を受けて、ジョブ３の実行終了を認識する。
【００２２】
更新部１７は、計算ノード２ｍへのジョブ３の実行指示または計算ノード２ｍによるジョブ３の実行終了に伴い、記憶部１１に記憶された計算ノード２ｍの資源の空き量を更新する。例えば更新部１７は、計算ノード２ｍへのジョブ３の実行指示が出されたときは、記憶部１１内の計算ノード２ｍの空き資源量から、ジョブ３の資源消費量だけ減算する。また更新部１７は、計算ノード２ｍによるジョブ３の実行が終了したときは、記憶部１１内の計算ノード２ｍの空き資源量に、ジョブ３の資源消費量だけ加算する。
【００２３】
このようなジョブスケジューリング装置１０によれば、グルーピング部１２により、複数の計算ノードがグルーピングされる。そして最大資源空き量判定部１３により、各グループの最大資源空き量が判定される。図１の例では、記憶部１１に、各計算ノードについて、コア数とメモリ量との２つの種別の資源の空き量が管理されている。そこで最大資源空き量判定部１３は、グループ内の空きコア数が最も大きい計算ノードの空きコア数を、そのグループの最大空きコア数とする。また最大資源空き量判定部１３は、グループ内の空きメモリ量が最も大きい計算ノードの空きメモリ量を、そのグループの最大空きメモリ量とする。
【００２４】
その後、例えばジョブ３の実行依頼を受け付けると、除外部１４は、ジョブ３の資源消費量と、複数のグループそれぞれの最大資源空き量とを比較し、最大資源空き量が資源消費量に満たないグループを、探索対象から除外する。なお複数の種別の資源について管理されている場合、少なくとも１つの種別の資源において、最大資源空き量が資源消費量に満たないグループは、探索対象から除外される。例えば図１の例では、ジョブ３の使用コア数（消費するコア数）は５であり、使用メモリ量（消費するメモリ量）は４ＧＢである。グループ番号「０」のグループは、最大空きコア数が４であり、ジョブ３の使用コア数に満たない。そのためグループ番号「０」のグループは、探索対象から除外される。グループ番号「１」のグループは、最大空きメモリ量が３ＧＢであり、ジョブ３の使用メモリ量に満たない。そのためグループ番号「１」のグループは、探索対象から除外される。グループ番号「２」のグループは、最大空きコア数が６であり、最大空きメモリ量が４ＧＢである。するとグループ番号「２」のグループは、最大空きコア数がジョブ３の使用コア数以上であり、かつ最大空きメモリ量がジョブ３の使用メモリ量以上である。そのためグループ番号「２」のグループは、探索対象となる。
【００２５】
探索対象から除外されるグループのグループ番号は、探索部１５に通知される。すると探索部１５は、探索対象から除外されていないグループに属する計算ノードの中から、資源の空き量がジョブ３の資源消費量以上の計算ノード２ｍを探索する。図１の例では、探索対象から除外されていないグループ番号「２」のグループには、ノード番号「６」〜「８」の３台の計算ノードが属している。そこで探索部１５は、３台の計算ノードそれぞれについて、資源の空き量がジョブ３の資源消費量以上かどうかを判断する。図１の例では、計算ノード番号「６」の計算ノードの空きコア数は３であり、空きメモリ量は２ＧＢである。すると計算ノード番号「６」の計算ノードは、ジョブ３の使用コア数と使用メモリ量との両方を満たさない量の空き資源しか有していない。計算ノード番号「７」の計算ノードの空きコア数は６であり、空きメモリ量は４ＧＢである。すると計算ノード番号「７」の計算ノードは、ジョブ３の資源消費量以上の空き資源量を有している。計算ノード番号「８」の計算ノードの空きコア数は５であり、空きメモリ量は３ＧＢである。すると計算ノード番号「８」の計算ノードは、ジョブ３の使用コア数に満たない量の空きコア数しか有していない。その結果、計算ノード番号「７」の計算ノード２ｍが検出される。
【００２６】
計算ノード２ｍが検出されると、ジョブ操作部１６によって、ジョブ３の実行指示が計算ノード２ｍに送信される。すると、更新部１７によって、計算ノード２ｍの空きコア数と空きメモリ量の値が更新される。計算ノード２ｍによるジョブ３の実行が終了すると、実行終了がジョブ操作部１６で検知される。すると更新部１７によって、計算ノード２ｍの空きコア数と空きメモリ量の値が更新される。
【００２７】
このように、計算ノードを複数のグループにグルーピングし、実行するジョブ３の資源消費量に満たない最大空き資源量しか有していないグループについては、ジョブを割り付け可能な計算ノードの探索対象から除外される。これにより、ジョブスケジューリングの処理効率が向上する。例えばグループ単位での探索対象からの除外処理を行わずに、計算ノードすべてを探索対象として、ジョブ３を実行可能な計算ノードの探索を行った場合、図１の例であれば、空き資源量とジョブの資源消費量との比較を、最大で９回繰り返すこととなる。他方、グループ単位での探索対象からの除外処理を行った場合、グループの最大空き資源量とジョブの資源消費量との比較を３回行い、探索対象のグループ（グループ番号「２」）内の各計算ノードの空き資源量とジョブの資源消費量との比較を３回行えばよい。すると資源量の比較が６回で済み、処理が効率化されている。
【００２８】
しかも、近年のシステムの大規模化に伴い、計算ノード数が増加している。例えば数千ノード、数万ノードを有するシステムも実用化されている。従来であれば、計算ノードの増加に伴いスケジューリングの処理量も増加し、計算ノードを増加させたにもかかわらずシステムの処理速度が十分に高速化されない事態が生じる。第１の実施の形態に示すように、実行するジョブの資源消費量に満たない最大空き資源量のグループについて探索対象から除外することで、計算ノード数の増加に伴うジョブスケジューリングの処理量の増加を抑止することができる。その結果、システムの大規模化に見合った分の処理の高速化が可能となる。
【００２９】
なお除外部１４は、複数のグループそれぞれの最大資源空き量の頻度分布に基づいて、最大資源空き量がジョブの資源消費量以上のグループの割合が所定値以上になるかどうかを判断することもできる。最大資源空き量がジョブ３の資源消費量以上のグループの割合が所定値以上になると判断した場合、例えば除外部１４は、ジョブ３の資源消費量と複数のグループそれぞれの最大資源空き量との比較を抑止する。また、探索部１５は、最大資源空き量が資源消費量以上のグループの割合が所定値以上になる場合、複数の計算ノードすべての中から、資源の空き量が資源消費量以上の計算ノードを探索する。これにより、グループごとの探索対象からの除外判断をして一部のグループ内の計算ノードを探索対象から除外する探索手法と、すべての計算ノードを探索対象とする探索手法とのうち、負荷状況に応じて処理効率がよい探索手法を採用することができる。その結果、システム全体の負荷状況に応じて、適切な探索手法による効率的なジョブスケジューリングを行うことができる。
【００３０】
なお、図１に示したグルーピング部１２、最大資源空き量判定部１３、除外部１４、探索部１５、ジョブ操作部１６、および更新部１７は、例えばジョブスケジューリング装置１０が有するプロセッサにより実現することができる。また、記憶部１１は、例えばジョブスケジューリング装置１０が有するメモリにより実現することができる。
【００３１】
また、図１に示した各要素間を接続する線は通信経路の一部を示すものであり、図示した通信経路以外の通信経路も設定可能である。
〔第２の実施の形態〕
次に第２の実施の形態について説明する。
【００３２】
図２は、第２の実施の形態のシステムの一構成例を示す図である。管理ノード１００には、複数の計算ノード３１，３２，３３，・・・が接続されている。管理ノード１００は、計算ノード３１，３２，３３，・・・を管理するコンピュータである。計算ノード３１，３２，３３，・・・は、ジョブを実行するコンピュータである。計算ノード３１，３２，３３，・・・は、並列ジョブの場合、複数の計算ノードが互いに連携してジョブを実行する。
【００３３】
また管理ノード１００には、端末装置２０が接続されている。端末装置２０は、実行するジョブの内容を指示するユーザが使用するコンピュータである。ジョブの実行内容を指示する場合、ユーザは、例えば端末装置２０に対して、実行するジョブの内容を入力する。ジョブの内容としては、例えばジョブの実行に用いるプログラムやデータ、逐次ジョブか並列ジョブかのジョブ種の指定、並列ジョブであれば並列度（使用するコア数）、使用するメモリ容量、ジョブの実行に要する最大の時間（最大実行時間）などが含まれる。ジョブの実行に使用するコア数は、そのジョブのコア消費量と言い換えることもできる。またジョブの実行に使用するメモリ容量は、そのジョブのメモリ消費量と言い換えることもできる。そしてユーザの指示に応じて、端末装置２０から管理ノード１００へ、ジョブの実行内容が送信される。
【００３４】
管理ノード１００は、端末装置２０からのジョブの実行依頼を受け付ける。そして、管理ノード１００は、計算ノード３１，３２，３３，・・・にジョブの実行要求を送信し、計算ノード３１，３２，３３，・・・からジョブの処理結果を受け取る。
【００３５】
図３は、第２の実施の形態に用いる管理ノードのハードウェアの一構成例を示す図である。管理ノード１００は、プロセッサ１０１によって装置全体が制御されている。プロセッサ１０１には、バス１０９を介してメモリ１０２と複数の周辺機器が接続されている。プロセッサ１０１は、マルチコアプロセッサであってもよい。プロセッサ１０１は、例えばＣＰＵ、ＭＰＵ（Micro Processing Unit）、またはＤＳＰ（Digital Signal Processor）である。プロセッサ１０１がプログラムを実行することで実現する機能の少なくとも一部を、ＡＳＩＣ（Application Specific Integrated Circuit）、ＰＬＤ（Programmable Logic Device）などの電子回路で実現してもよい。
【００３６】
メモリ１０２は、管理ノード１００の主記憶装置として使用される。メモリ１０２には、プロセッサ１０１に実行させるＯＳ（Operating System）のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、メモリ１０２には、プロセッサ１０１による処理に必要な各種データが格納される。メモリ１０２としては、例えばＲＡＭ（Random Access Memory）などの揮発性の半導体記憶装置が使用される。
【００３７】
バス１０９に接続されている周辺機器としては、ＨＤＤ（Hard Disk Drive）１０３、グラフィック処理装置１０４、入力インタフェース１０５、光学ドライブ装置１０６、機器接続インタフェース１０７およびネットワークインタフェース１０８ａ，１０８ｂがある。
【００３８】
ＨＤＤ１０３は、内蔵したディスクに対して、磁気的にデータの書き込みおよび読み出しを行う。ＨＤＤ１０３は、管理ノード１００の補助記憶装置として使用される。ＨＤＤ１０３には、ＯＳのプログラム、アプリケーションプログラム、および各種データが格納される。なお、補助記憶装置としては、フラッシュメモリなどの不揮発性の半導体記憶装置を使用することもできる。
【００３９】
グラフィック処理装置１０４には、モニタ２１が接続されている。グラフィック処理装置１０４は、プロセッサ１０１からの命令に従って、画像をモニタ２１の画面に表示させる。モニタ２１としては、ＣＲＴ（Cathode Ray Tube）を用いた表示装置や液晶表示装置などがある。
【００４０】
入力インタフェース１０５には、キーボード２２とマウス２３とが接続されている。入力インタフェース１０５は、キーボード２２やマウス２３から送られてくる信号をプロセッサ１０１に送信する。なお、マウス２３は、ポインティングデバイスの一例であり、他のポインティングデバイスを使用することもできる。他のポインティングデバイスとしては、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。
【００４１】
光学ドライブ装置１０６は、レーザ光などを利用して、光ディスク２４に記録されたデータの読み取りを行う。光ディスク２４は、光の反射によって読み取り可能なようにデータが記録された可搬型の記録媒体である。光ディスク２４には、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）などがある。
【００４２】
機器接続インタフェース１０７は、管理ノード１００に周辺機器を接続するための通信インタフェースである。例えば機器接続インタフェース１０７には、メモリ装置２５やメモリリーダライタ２６を接続することができる。メモリ装置２５は、機器接続インタフェース１０７との通信機能を搭載した記録媒体である。メモリリーダライタ２６は、メモリカード２７へのデータの書き込み、またはメモリカード２７からのデータの読み出しを行う装置である。メモリカード２７は、カード型の記録媒体である。
【００４３】
ネットワークインタフェース１０８ａは、端末装置２０に接続されている。ネットワークインタフェース１０８ａは、端末装置２０との間でデータの送受信を行う。
ネットワークインタフェース１０８ａは、ネットワークを介して端末装置２０に接続されている。ネットワークインタフェース１０８ａは、端末装置２０との間でデータの送受信を行う。
【００４４】
通信インタフェース１０８ｂは、ネットワークを介して、計算ノード３１，３２，３３，・・・に接続されている。通信インタフェース１０８ｂは、計算ノード３１，３２，３３，・・・との間でデータの送受信を行う。
【００４５】
以上のようなハードウェア構成によって、第２の実施の形態の処理機能を実現することができる。なお計算ノード３１，３２，３３，・・・も管理ノードと同様のハードウェアで実現できる。また、第１の実施の形態に示したジョブスケジューリング装置１０も、図３に示した管理ノード１００と同様のハードウェアにより実現することができる。
【００４６】
管理ノード１００は、例えばコンピュータ読み取り可能な記録媒体に記録されたプログラムを実行することにより、第２の実施の形態の処理機能を実現する。管理ノード１００に実行させる処理内容を記述したプログラムは、様々な記録媒体に記録しておくことができる。例えば、管理ノード１００に実行させるプログラムをＨＤＤ１０３に格納しておくことができる。プロセッサ１０１は、ＨＤＤ１０３内のプログラムの少なくとも一部をメモリ１０２にロードし、プログラムを実行する。また管理ノード１００に実行させるプログラムを、光ディスク２４、メモリ装置２５、メモリカード２７などの可搬型記録媒体に記録しておくこともできる。可搬型記録媒体に格納されたプログラムは、例えばプロセッサ１０１からの制御により、ＨＤＤ１０３にインストールされた後、実行可能となる。またプロセッサ１０１が、可搬型記録媒体から直接プログラムを読み出して実行することもできる。
【００４７】
次に、管理ノード１００が有する機能について詳細に説明する。
図４は、管理ノードの機能を示すブロック図である。管理ノード１００は、リソース情報記憶部１１０，最大空き値記憶部１２０、ジョブ記憶部１３０、ジョブ操作部１４０、リソース管理部１５０、ジョブスケジューリング部１６０、およびジョブ管理部１７０を有する。
【００４８】
リソース情報記憶部１１０は、計算リソースに関するリソース情報１１１を記憶する。例えばリソース情報１１１には、計算ノード３１，３２，３３，・・・ごとのコア数、メモリ容量が含まれる。またリソース情報１１１には、運用状況に応じた空きコア数や空きメモリ量も含まれる。さらにリソース情報１１１には、各計算ノード３１，３２，３３，・・・が属するグループに関する情報も含まれる。
【００４９】
最大空き値記憶部１２０は、計算リソースの空き状況に関する情報を記憶する。例えば最大空き値記憶部１２０には、最大空き値ペア情報１２１と最大空き値ペアテーブル１２２とが格納される。最大空き値ペア情報１２１は、グループごとに設けられている。最大空き値ペア情報１２１には、リソースの種別ごとに、グループ内の計算ノードのうち該当リソースの空きが最も多い計算ノードと、その計算ノードにおける該当リソースの空き量を示す値（最大値）とが含まれる。最大空き値ペアテーブル１２２は、最大空きコア数と最大空きメモリ量との組（最大空き値ペア）ごとに、該当するグループの数を管理するデータテーブルである。
【００５０】
ジョブ記憶部１３０は、実行するジョブに関する情報を記憶する。ジョブ記憶部１３０には、例えばジョブキュー１３１とジョブ情報１３２とが格納される。ジョブキュー１３１は、実行依頼を受け付けたジョブを依頼順に並べたキュー（待ち行列）である。ジョブ情報１３２は、実行するジョブの処理内容を示す情報である。なおジョブ情報１３２には、ジョブの実行時に使用するコア数やメモリ容量が含まれる。
【００５１】
ジョブ操作部１４０は、実行を依頼されたジョブの実行指示を計算ノードに送信する。例えばジョブ操作部１４０は、端末装置２０からのジョブの実行依頼を受け付け、その実行依頼をジョブ管理部１７０に転送する。またジョブ操作部１４０は、ジョブスケジューリング部１６０が決定したジョブの実行スケジュールに従ってジョブ管理部１７０から実行するジョブのジョブ情報を取得し、そのジョブの実行指示を計算ノードに送信する。
【００５２】
リソース管理部１５０は、リソースの空き状況を管理する。例えばリソース管理部１５０は、ジョブスケジューリング部１６０からの依頼に応じて、各計算ノードのリソースの空き状態をリソース情報１１１から取得する。そしてリソース管理部１５０は、各計算ノードのリソースの空き状態をジョブスケジューリング部１６０に応答する。
【００５３】
ジョブスケジューリング部１６０は、ジョブのスケジューリングを行う。例えばジョブスケジューリング部１６０は、ジョブ操作部１４０から、ジョブの計算ノードへの実行指示、または計算ノードによるジョブの実行終了のイベントを発生の通知を受けとると、ジョブスケジューリングを行う。ジョブスケジューリングの際には、ジョブスケジューリング部１６０は、最大空き値記憶部１２０を参照して、ジョブの実行時に用いる分の空きリソースを有している計算ノードを探索し、該当する計算ノードのリソースへ、実行しようとするジョブを割り付ける。このときジョブスケジューリング部１６０は、計算ノードをグループ化し、最大空き値ペア情報１２１に基づいて、グループごとに、ジョブを割り付け可能な計算ノードを含む可能性があるかどうかを判断する。そしてジョブスケジューリング部１６０は、ジョブを割り付け可能な計算ノードを含んでいる可能性があると判断したグループのみを、割り付け先のリソースの探索対象とする。
【００５４】
探索対象とするグループを決定すると、ジョブスケジューリング部１６０は、探索対象のグループ内の計算ノードのリソースの空き状況を、リソース管理部１５０から取得し、ジョブが使用するリソース量相当の空きリソースを有する計算ノードを探索する。そしてジョブスケジューリング部１６０は、ジョブが使用するリソース量相当の空きリソースを有する計算ノードのリソースに、ジョブを割り付ける。計算ノードのリソースへのジョブの割り付けが確定すると、ジョブスケジューリング部１６０は、ジョブの割り付け先のリソースの情報を、ジョブ操作部１４０に通知する。
【００５５】
またジョブスケジューリング部１６０は、１グループ当たりの最適な計算ノード数を、定期的に計算する。例えばジョブスケジューリング部１６０は、ジョブスケジューリングに要する時間が最小となるような、１グループ当たりの計算ノード数を計算により求め、その計算ノード数を１グループ当たりの最適な計算ノード数とする。ジョブスケジューリング部１６０は、１グループ当たりの最適な計算ノード数を計算した後、計算ノードの再グルーピングを行う。
【００５６】
ジョブ管理部１７０は、ジョブキュー１３１とジョブ情報１３２とを管理する。例えばジョブ管理部１７０は、実行依頼されたジョブをジョブキュー１３１にキューイングする。このときジョブ管理部１７０は、実行依頼されたジョブのジョブ情報１３２を、ジョブ記憶部１３０に格納する。またジョブ管理部１７０は、ジョブスケジューリング部１６０がジョブスケジューリングを行う際には、ジョブキュー１３１に登録されたジョブのジョブ情報を、ジョブスケジューリング部１６０に通知する。
【００５７】
なお、図４に示した各要素間を接続する線は通信経路の一部を示すものであり、図示した通信経路以外の通信経路も設定可能である。また、図４に示した各要素の機能は、例えば、その要素に対応するプログラムモジュールをコンピュータに実行させることで実現することができる。
【００５８】
次に、リソース情報１１１について具体的に説明する。
図５は、リソース情報の一例を示す図である。リソース情報１１１では、ノード番号に対応付けて、グループ番号、コア数、空きコア数、メモリ容量、および空きメモリ量が登録されている。ノード番号は、計算ノードそれぞれの識別番号である。グループ番号は、計算ノードが属するグループの識別番号である。コア数は、計算ノードが有するコアの数である。空きコア数は、計算ノードのコアのうち、ジョブが割り付けられていないコアの数である。メモリ容量は、計算ノードに実装されたメインメモリの記憶容量である。空きメモリ量は、計算ノードのメインメモリの空き容量である。空きメモリ量は、計算ノードが有するメインメモリの記憶容量に対する、空き領域の割合（パーセンテージ）で示される。
【００５９】
次に、最大空き値ペア情報１２１について具体的に説明する。
図６は、最大空き値ペア情報の一例を示す図である。最大空き値ペア情報１２１では、グループ番号に対応付けて、最大空きコア数と最大空きメモリ量との組（最大空き値ペア）が登録されている。最大空きコア数は、対応するグループに属する計算ノードのうち、最も空きコア数が多い計算ノードの空きコア数である。最大空きメモリ量は、対応するグループに属する計算ノードのうち、最も空きメモリ量が多い計算ノードの空きメモリ量である。
【００６０】
図７は、グループの最大空き値ペアの例を示す図である。図７では、１つのグループ４０に２台の計算ノード３０−１，３０−２が属している。計算ノード３０−１の空きコア数は６、空きメモリ量は１０％である。また計算ノード３０−２の空きコア数は２、空きメモリ量は７０％である。この場合、グループ４０内の計算ノード３０−１，３０−２のうち、空きコア数が最も大きいのは、計算ノード３０−１である。従ってグループ４０の最大空きコア数は、６となる。またグループ４０内の計算ノード３０−１，３０−２のうち、空きメモリ量が最も大きいのは、計算ノード３０−２である。従ってグループ４０の最大空きメモリ量は、７０％となる。このように、最大空きコア数の値と、最大空きメモリ量の値とは、別々の計算ノードから抽出した値となる場合もある。
【００６１】
次に最大空き値ペアテーブル１２２について具体的に説明する。
図８は、最大空き値ペアテーブルの一例を示す図である。最大空き値ペアテーブル１２２は、資源の種別ごとに、値の範囲ごとの出現頻度を示す２次元の頻度分布表である。
【００６２】
最大空き値ペアテーブル１２２の各行には、最大空きコア数が設定されている。また最大空き値ペアテーブル１２２の各列には、最大空きメモリ量の範囲が設定される。図８では、最大空きメモリ量を１０％刻みで分類している。最大空き値ペアテーブル１２２の各列には、対応する最大メモリ空き領域の範囲の最大値が示されている。例えば最大空きメモリ量「１０％」で示された列には、最大空きメモリ量が１０％以下のグループが含まれる。また最大空きメモリ量「２０％」で示された列には、最大空きメモリ量が１０％より大きく２０％以下のグループが含まれる。
【００６３】
行と列の交わった位置に、その行に設定された最大空きコア数と、その列に設定された範囲内の最大空きメモリ量との最大空き値ペアを有するグループの数が設定される。最大空き値ペアテーブル１２２内の値は、ジョブの実行開始、またはジョブの実行終了のイベントが発生するたびに更新される。
【００６４】
以上のようなシステムにより、ジョブスケジューリングが行われる。第２の実施の形態では、ジョブスケジューリングに先立って、計算ノードのグルーピングが行われる。
図９は、計算ノードのグルーピングの一例を示す図である。システム内の計算ノードは、それぞれ複数のグループ４１，４２，４３，・・・のいずれかに振り分けられる。例えば計算ノード３１は、グループ４１に属する。なお計算ノード３１は、複数のコア３１ａとメモリ３１ｂとを有している。他の計算ノードも同様に、複数のコアとメモリとを有している。
【００６５】
また第２の実施の形態では、各計算ノードの空きコア数と空きメモリ量とを勘案して、ジョブの割り付け先の計算ノードが決定される。その際、グループごとに、最大空き値ペアに基づいてジョブを割り付け可能な計算ノードが存在する可能性が判定され、可能性があるグループ内の計算ノードのみが、割り付け先の計算ノードの探索対象となる。
【００６６】
図１０は、探索対象とするグループの判断例を示す図である。図１０の例は、メモリの５０％および４コアを使用するジョブ５１の割り付け先を探索する場合を示している。
グループ４１は、最大空きメモリ量が７０％であり、最大空きコア数が６である。そうするとグループ４１内にジョブ５１を実行可能な計算ノードが存在する可能性がある。そこでグループ４１は、割り付け先の計算ノードの探索対象となる。
【００６７】
グループ４２は、最大空きメモリ量が１０％であり、最大空きコア数が２である。そうするとグループ４２内には、空きメモリ量が５０％以上の計算ノードはなく、さらに空きコア数が４コア以上の計算ノードもない。そのためグループ４２内には、ジョブ５１を実行可能な計算ノードが存在する可能性はない。その結果、グループ４２は、割り付け先の計算ノードの探索対象から除外される。
【００６８】
グループ４３は、最大空きメモリ量が５０％であり、最大空きコア数が３である。そうするとグループ４３内には、空きメモリ量が５０％以上の計算ノードは存在するが、空きコア数が４コア以上の計算ノードは存在しない。そのためグループ４３内には、ジョブ５１を実行可能な計算ノードが存在する可能性はない。その結果、グループ４３は、割り付け先の計算ノードの探索対象から除外される。
【００６９】
このように、複数のグループのうち、ジョブ５１を実行できる計算ノードが存在する可能性のないグループがフィルタリングされる。フィルタリングされたグループは、ジョブ５１の割り付け先の計算ノードの探索対象とはされない。その結果、ジョブ５１を実行できるかどうかの判断対象となる計算ノード数が削減される。
【００７０】
図１１は、探索対象とするグループ内の計算ノードの調査例を示す図である。図１１の例では、グループ４１内の計算ノード３１，３２，・・・から順に、ジョブ５１を割付可能か調査される。割付可能かどうかの調査では、計算ノードの空きコア数、空きメモリ量の両方が、ジョブ５１の実行時に利用する量を満たすかどうかが調査される。図１１では、各計算ノード３１，３２，・・・３４，・・・の資源のうち、使用中の資源を黒く塗りつぶし、空き資源を白抜きで示している。ハッチングをかけた資源は、ジョブ５１を割り付けた資源である。
【００７１】
グループ４１内の先頭の計算ノード３１は、空きコア数が３，空きメモリ量が５０％である。すると４コアを使用するジョブを計算ノード３１で実行することはできない。次の計算ノード３２は、空きコア数が６、空きメモリ量が７０％である。すると計算ノード３２は、ジョブ５１を実行時に利用するリソースの条件を満たしている。そこで、計算ノード３２のリソースにジョブ５１が割り付けられる。
【００７２】
ジョブ５１のリソースへの割り付けが確定すると、リソース探索は終了する。従って、リソース探索の対象としてグループ４４内の計算ノード３４があっても、計算ノード３２のリソースにジョブ５１を割り付けた後は、計算ノード３４に対するリソースの調査は行われない。
【００７３】
なお、ジョブ５１を実行できる計算ノードが存在する可能性のないグループのフィルタリングを行うよりも、すべての計算ノードを探索対象とした方が効率的な場合もある。そこで第２の実施の形態では、探索対象とするグループのフィルタリングを行うのが効率的な場合に限定して、そのようなフィルタリングを行う。以下図１２、図１３を参照して、スケジューリング手法ごとのスケジューリングコストについて説明する。
【００７４】
図１２は、すべての計算ノードを調査する場合のスケジューリングコストを示す図である。例えばシステム内にＮ台（Ｎは１以上の整数）の計算ノードがあるものとする。また、１台当たりの調査コストをＣｃ（Ｃｃは正の実数）とする。調査コストは、その計算ノードがジョブを実行するのに十分な空きリソースを有しているかどうかの判断に要する時間である。このときすべて最悪の場合を想定し、すべての計算ノードに対して調査を行うものとする。スケジューリングコストをＣｓ1（Ｃｓ1は正の実数）とすると、スケジューリングコストは以下の式で表される。
Ｃｓ1＝Ｃｃ×Ｎ    ・・・（１）
図１３は、探索対象のグループのフィルタリングを行う場合のスケジューリングコストを示す図である。ここで、グループ分割時の１グループ当たりのノード数をｍ（ｍは２以上の整数）とする。
【００７５】
あるジョブをスケジューリングするとき、個々のグループが割り付け先の調査の対象となる確率をｐ（ｐは０以上１以下の実数）とする。ジョブを割り付け可能なリソースを有する計算ノードがグループ内に存在する可能性の判断に要する、グループごとの調査コストは、個々の計算ノードに対する調査コストＣｃと同等である。ここでシステム全体のグループ数は、「Ｎ／ｍ」と表される。そこで、グループがジョブを割り付け可能な計算ノードを有する可能性の判断は、「Ｎ／ｍ」回行われる。
【００７６】
また割り付ける資源の探索対象となるグループ数は、「ｐ×（Ｎ／ｍ）」である。すなわち、グループ内の計算ノードの探索処理は、「ｐ×（Ｎ／ｍ）」回発生する。各グループにはｍ台の計算ノードが属している。そのため、グループ内の計算ノードの探索処理では、計算ノードがジョブを実行するのに十分なリソースを有しているかどうかの調査が、１グループ当たりｍ回行われる。
【００７７】
そうすると、スケジューリングコストＣｓ2（Ｃｓ2は正の実数）は以下の式で表される。
Ｃｓ2＝Ｃｃ×（Ｎ／ｍ＋ｐ×（Ｎ／ｍ）×ｍ）＝Ｃｃ×Ｎ×（１／ｍ＋ｐ）
・・・（２）
式（１）で得られるＣｓ1と式（２）で得られるＣｓ2とを比較し、Ｃｓ1の方が小さい場合、すべての計算ノードを調査した方が効率的である。他方、Ｃｓ2の方が小さい場合、探索対象のグループのフィルタリングを行い、探索対象と判断されたグループ内の計算ノードのみを調査した方が効率的である。なおＣｓ2の方が小さい場合とは、「Ｃｃ×Ｎ×（１／ｍ＋ｐ）＜Ｃｃ×Ｎ」が満たされる場合である。この比較式を簡略化すると「１／ｍ＋ｐ＜１」となる。従って「１／ｍ＋ｐ＜１」が満たされる場合には、Ｃｓ1よりＣｓ2の方が小さく、探索対象のグループのフィルタリングを行い、探索対象と判断されたグループ内の計算ノードのみを調査した方が効率的である。
【００７８】
なおｐ値は、ジョブスケジューリングを行う際に、計算される。ｐ値は、最大空き値ペアテーブル１２２に基づいて算出できる。
図１４は、ｐ値の算出例を示す図である。例えばジョブ５１の実行には、４コアを使用すると共に、５０％メモリを消費する。すると、最大空きコア数が４コア以上であり、最大空きメモリ量が５０％以上の最大空き値ペアを有するグループであれば、ジョブ５１を割り付け可能な計算ノードを有している可能性がある。このようなグループの数は、最大空き値ペアテーブル１２２から容易に導き出すことができる。図１４の例は、破線５２で囲った内側の数字を合計すれば、該当するグループ数となる。そして、ジョブ５１を割り付け可能な計算ノードを有している可能性があるグループ数を、全グループ数で除算した値がｐ値となる。
【００７９】
ｍ値は、所定周期で更新される。例えば１時間周期で最適なｍ値が算出される。算出された最適なｍ値が、以後のジョブスケジューリングにおけるｍ値として適用される。ｍ値が更新されると、１グループ当たりの計算ノード数が変わるため、計算ノードの再グルーピングが行われる。
【００８０】
図１５は、最適なｍ値の算出例を示す図である。最適なｍ値は、１／ｍ＋ｐ（ｍ）が最小になるようなｍ値である。ｐ（ｍ）は、２〜Ｎ／２の範囲内のｍ値を変数として、ｐ値を求める関数である。なおｐ値は、ジョブが使用するコア数とメモリ容量とに依存する。そこで最適なｍ値を求める際には、仮のジョブが想定され、そのジョブが使用するコア数とメモリ容量とに基づいて、ｐ（ｍ）が求められる。例えば、ジョブキュー１３１内に待機中のジョブの使用するコア数の最大値と、使用するメモリ容量の最大値とが、それぞれｐ（ｍ）を求める際の使用コア数と使用メモリ容量とされる。
【００８１】
ジョブが使用するコア数とメモリ容量を固定すると、ｐ（ｍ）はｍ値の増加関数となる。すると、「１／ｍ＋ｐ（ｍ）」は図１５に示すグラフのように表せる。「１／ｍ＋ｐ（ｍ）」を示す曲線において最小の値を得るｍ値が、最適のｍ値となる。
【００８２】
このように定期的に最適のｍ値を求め、計算ノードの再グルーピングを行うことで、ジョブの依頼状況が変化しても、そのときどきに応じた適切の手法およびｍ値で、ジョブスケジューリングを行うことができる。
【００８３】
以下に、ジョブスケジューリングの処理手順について詳細に説明する。
図１６は、ジョブスケジューリングの手順の一例を示すフローチャートである。
［ステップＳ１０１］ジョブスケジューリング部１６０は、前回のｍ値更新から、ｍ値の更新周期だけ経過したか否かを判断する。ｍ値更新周期が経過した場合、処理がステップＳ１０２に進められる。ｍ値更新周期が経過していなければ、処理がステップＳ１０３に進められる。
【００８４】
［ステップＳ１０２］ジョブスケジューリング部１６０は、ｍ値更新処理を行う。なお、この処理の詳細は後述する（図１９参照）。ｍ値更新処理が終了すると、処理がステップＳ１０１に進められる。
【００８５】
［ステップＳ１０３］ジョブスケジューリング部１６０は、ジョブ投入またはジョブ終了があったか否かを判断する。例えばジョブ操作部１４０は、端末装置２０からジョブが投入されると、ジョブが投入されたことをジョブスケジューリング部１６０に通知する。またジョブ操作部１４０は、計算ノードからジョブの実行終了の通知を受け取ると、ジョブが終了したことを、ジョブスケジューリング部１６０に通知する。ジョブスケジューリング部１６０は、このようなジョブ操作部１４０からの通知により、ジョブ投入またはジョブ終了を認識できる。ジョブ投入またはジョブ終了があった場合、処理がステップＳ１０４に進められる。ジョブ投入またはジョブ終了がなければ、処理がステップＳ１０１に進められる。
【００８６】
［ステップＳ１０４］ジョブスケジューリング部１６０は、ジョブ投入またはジョブ終了があると、最大空き値ペア情報１２１と最大空き値ペアテーブル１２２とを更新する。例えばジョブが終了した場合、ジョブ管理部１７０によって、リソース情報１１１における、そのジョブが割り付けられていたリソースを有する計算ノードの空きコア数と空きメモリ量が更新される。ジョブスケジューリング部１６０は、リソース情報１１１を参照し、最大空き値ペア情報１２１における、空きコア数と空きメモリ量が更新された計算ノードが属するグループの最大空きコア数と最大空きメモリ量を更新する。さらにジョブスケジューリング部１６０は、最大空き値ペア情報１２１の変更内容に基づいて、最大空き値ペアテーブル１２２を更新する。例えばジョブスケジューリング部１６０は、変更対象のグループにおける変更前の最大空き値ペアに対応する最大空き値ペアテーブル１２２内の値から、１だけ減算する。またジョブスケジューリング部１６０は、変更対象のグループにおける変更後の最大空き値ペアに対応する最大空き値ペアテーブル１２２内の値に、１だけ加算する。
【００８７】
［ステップＳ１０５］ジョブスケジューリング部１６０は、ジョブキュー１３１に、スケジューリングを行っていないジョブが登録されているか否かを判断する。該当するジョブがあれば、処理がステップＳ１０６に進められる。該当するジョブがなければ、処理がステップＳ１０１に進められる。
【００８８】
［ステップＳ１０６］ジョブスケジューリング部１６０は、ジョブキュー１３１に、スケジューリングを行っていないジョブがある場合、そのジョブが使用するコア数およびメモリ容量に応じたｐ値を算出する。
【００８９】
［ステップＳ１０７］ジョブスケジューリング部１６０は、比較式「１／ｍ＋ｐ＜１」が満たされるかどうかを判断する。この比較式は、ｐ値が、所定値「１−１／ｍ」より小さいかどうかを判定する式である。比較式が満たされる場合、処理がステップＳ１０９に進められる。比較式が満たされない場合、処理がステップＳ１０８に進められる。
【００９０】
［ステップＳ１０８］ジョブスケジューリング部１６０は、比較式「１／ｍ＋ｐ＜１」が満たされない場合（ｐ値が所定値以上の場合）、すべての計算ノードについて調査する、第１のジョブスケジューリング処理を実行する。この処理の詳細は後述する（図１７参照）。その後、処理がステップＳ１１０に進められる。
【００９１】
［ステップＳ１０９］ジョブスケジューリング部１６０は、比較式「１／ｍ＋ｐ＜１」が満たされる場合（ｐ値が所定値未満の場合）、探索対象のグループのフィルタリングを行う、第２のジョブスケジューリング処理を実行する。この処理の詳細は後述する（図１８参照）。
【００９２】
［ステップＳ１１０］ジョブスケジューリング部１６０は、ステップＳ１０８，Ｓ１０９における割り付け結果に基づいて、最大空き値ペア情報１２１と最大空き値ペアテーブル１２２とを更新する。更新の手順は、ステップＳ１０４と同様である。その後、処理がステップＳ１０５に進められる。
【００９３】
次に、第１のジョブスケジューリング処理の手順について説明する。
図１７は、第１のジョブスケジューリング処理の手順の一例を示すフローチャートである。
【００９４】
［ステップＳ１２１］ジョブスケジューリング部１６０は、変数ｉに初期値０を設定する。そしてジョブスケジューリング部１６０は、ステップＳ１２２の処理を、所定の終了条件が満たされるまで繰り返す（ＬｏｏｐＡ）。
【００９５】
［ステップＳ１２２］ジョブスケジューリング部１６０は、ｉの値が更新されるごとに、ｉ番目の計算ノードのリソースにジョブの割り付けが可能かどうかを判断する。例えばジョブスケジューリング部１６０は、ノード番号がｉの計算ノードの空きコア数と空きメモリ量とを、リソース情報１１１から取得する。次にジョブスケジューリング部１６０は、取得した情報と、スケジューリング対象のジョブが使用するリソース量とを比較する。そしてジョブスケジューリング部１６０は、ｉ番目の計算ノードに、そのジョブが使用する分の空きリソースがあれば、ｉ番目の計算ノードのリソースに割り付け可能であると判断する。割り付け可能であれば、ＬｏｏｐＡを抜けて、処理がステップＳ１２４に進められる。割り付け可能でなければ、処理がステップＳ１２３に進められる。
【００９６】
［ステップＳ１２３］ジョブスケジューリング部１６０は、ｉの値をカウントアップする。そしてジョブスケジューリング部１６０は、カウントアップ後のｉの値について、「ｉがＮ未満である（ｉ＜Ｎ）」という条件が満たされていれば、ステップＳ１２２の処理を繰り返す。「ｉがＮ未満である」という条件が満たされない場合、ＬｏｏｐＡを抜けて、第１のジョブスケジューリング処理を終了する。
【００９７】
［ステップＳ１２４］ジョブスケジューリング部１６０は、スケジューリング対象のジョブを、ｉ番目の計算ノードのリソースに割り付ける。その後、第１のジョブスケジューリング処理が終了する。
【００９８】
次に、第２のジョブスケジューリング処理の手順について説明する。
図１８は、第２のジョブスケジューリング処理の手順の一例を示すフローチャートである。
【００９９】
［ステップＳ１３１］ジョブスケジューリング部１６０は、変数Ｊに初期値０を設定する。そしてジョブスケジューリング部１６０は、ステップＳ１３２〜Ｓ１３５の処理を、所定の終了条件が満たされるまで繰り返す（ＬｏｏｐＢ）。
【０１００】
［ステップＳ１３２］ジョブスケジューリング部１６０は、Ｊ番目のグループ内の計算ノードを探索対象とするか否かを判断する。例えばジョブスケジューリング部１６０は、グループ番号がＪのグループの最大空き値ペアを、最大空き値ペア情報１２１から取得する。次にジョブスケジューリング部１６０は、取得した情報と、スケジューリング対象のジョブが使用するリソース量とを比較する。そしてジョブスケジューリング部１６０は、Ｊ番目のグループの最大コア数が、ジョブが使用するコア数以上であり、Ｊ番目のグループの最大空きメモリ量が、ジョブが使用するメモリ容量以上であれば、Ｊ番目のグループ内の計算ノードを探索対象と判断する。他方、ジョブスケジューリング部１６０は、Ｊ番目のグループの最大コア数が、ジョブが使用するコア数未満であれば、Ｊ番目のグループ内の計算ノードを探索対象外と判断する。ジョブスケジューリング部１６０は、Ｊ番目のグループの最大空きメモリ量が、ジョブが使用するメモリ容量未満の場合も、Ｊ番目のグループ内の計算ノードを探索対象外と判断する。Ｊ番目のグループ内の計算ノードが探索対象であれば、処理がステップＳ１３３に進められる。Ｊ番目のグループ内の計算ノードが探索対象外であれば、処理がステップＳ１３６に進められる。
【０１０１】
［ステップＳ１３３］ジョブスケジューリング部１６０は、探索対象と判断したグループ内の計算ノードに、グループ内での識別番号を付与する。さらにジョブスケジューリング部１６０は、変数Ｉに初期値０を設定する。そしてジョブスケジューリング部１６０は、ステップＳ１３４の処理を、所定の終了条件が満たされるまで繰り返す（ＬｏｏｐＣ）。
【０１０２】
［ステップＳ１３４］ジョブスケジューリング部１６０は、Ｉの値が更新されるごとに、Ｊ番目のグループ内のＩ番目の計算ノードのリソースにジョブの割り付けが可能かどうかを判断する。例えばジョブスケジューリング部１６０は、Ｉ番目の計算ノードの空きコア数と空きメモリ量とを、リソース情報１１１から取得する。次にジョブスケジューリング部１６０は、取得した情報と、スケジューリング対象のジョブが使用するリソース量とを比較する。そしてジョブスケジューリング部１６０は、Ｉ番目の計算ノードに、そのジョブが使用する分の空きリソースがあれば、Ｉ番目の計算ノードのリソースに割り付け可能であると判断する。割り付け可能であれば、ＬｏｏｐＢ，ＬｏｏｐＣを抜けて、処理がステップＳ１３７に進められる。割り付け可能でなければ、処理がステップＳ１３５に進められる。
【０１０３】
［ステップＳ１３５］ジョブスケジューリング部１６０は、Ｉの値をカウントアップする。そしてジョブスケジューリング部１６０は、カウントアップ後のＩの値について、「Ｉがｍ未満である（Ｉ＜ｍ）」という条件が満たされていれば、ステップＳ１３４の処理を繰り返す。「Ｉがｍ未満である」という条件が満たされない場合、ＬｏｏｐＣを抜けて、処理がステップＳ１３６に進められる。
【０１０４】
［ステップＳ１３６］ジョブスケジューリング部１６０は、Ｊの値をカウントアップする。そしてジョブスケジューリング部１６０は、カウントアップ後のＪの値について、「ＪがＮ／ｍ未満である（Ｊ＜Ｎ／ｍ）」という条件が満たされていれば、ステップＳ１３２〜Ｓ１３５の処理を繰り返す。「ＩがＮ／ｍ未満である」という条件が満たされない場合、ＬｏｏｐＢを抜けて、第２のスケジューリング処理が終了する。
【０１０５】
次に、ｍ値更新処理の手順について説明する。
図１９は、ｍ値更新処理の手順の一例を示すフローチャートである。
［ステップＳ１４１］ジョブスケジューリング部１６０は、ｐ（ｍ）を求める際の使用コア数と使用メモリ容量とを決定する。例えばジョブスケジューリング部１６０は、ジョブキュー１３１内で待機中のジョブにおける使用コア数とメモリ容量を統計的に処理する。統計的処理によって、ジョブスケジューリング部１６０は、待機中のジョブにおいて最も多い使用コア数と、待機中のジョブにおいて最も多い使用メモリ容量とを求める。そしてジョブスケジューリング部１６０は、最も多いパターンの使用コア数とメモリ容量との組み合わせを、Ｐ（ｍ）を算出する際のコア数とメモリ容量とに決定する。
【０１０６】
［ステップＳ１４２］ジョブスケジューリング部１６０は、ｍ値の候補を示す変数ｍに初期値２を設定する。そしてジョブスケジューリング部１６０は、ステップＳ１４２〜Ｓ１４７の処理を、所定の終了条件が満たされるまで繰り返す（ＬｏｏｐＤ）。
【０１０７】
［ステップＳ１４３］ジョブスケジューリング部１６０は、現在のｍ値の時の最大空き値ペアテーブルを作成する。例えばジョブスケジューリング部１６０は、１グループ当たりの計算ノード数をｍとして、計算ノードをグルーピングする。次にジョブスケジューリング部１６０は、各グループの最大空き値ペアを求める。そしてジョブスケジューリング部１６０は、空きコア数と空きメモリ容量との組み合わせごとに、該当する最大空き値ペアを有するグループ数をカウントし、最大空き値ペアテーブルに設定する。
【０１０８】
［ステップＳ１４４］ジョブスケジューリング部１６０は、作成した最大空き値ペアテーブルに基づいて、ｐ値（ｐ（ｍ））を取得する。例えばジョブスケジューリング部１６０は、作成した最大空き値ペアテーブルを参照し、ステップＳ１４１で決定した使用コア数以上の最大空きコア数であり、ステップＳ１４１で決定した使用メモリ容量以上の最大空きメモリ容量であるグループ数を計数する。そしてジョブスケジューリング部１６０は、計数した結果をグループ数（Ｎ／ｍ）で除算し、ｐ値とする。
【０１０９】
［ステップＳ１４５］ジョブスケジューリング部１６０は、現在のｍ値およびｐ値により「１／ｍ＋ｐ」の値を求める。そしてジョブスケジューリング部１６０は、新たに求めた「１／ｍ＋ｐ」の値が、以前に求めた「１／ｍ＋ｐ」のうちの最小値より小さいかどうかを判断する。新たに求めた「１／ｍ＋ｐ」の値が、最小値より小さければ、処理がステップＳ１４７に進められる。新たに求めた「１／ｍ＋ｐ」の値が、最小値以上であれば、処理がステップＳ１４６に進められる。
【０１１０】
［ステップＳ１４６］ジョブスケジューリング部１６０は、新たに求めた「１／ｍ＋ｐ」の値が、所定の閾値より大きいか否かを判断する。閾値は、例えば「１／ｍ＋ｐ」の最小値の２倍とする。閾値より大きければ、処理がステップＳ１４９に進められる。閾値以下であれば、処理がステップＳ１４８に進められる。
【０１１１】
図１５に示すように、「１／ｍ＋ｐ」の値は、最初はｍ値の増加に伴って減少するが、最小値を過ぎると、ｍ値の増加に伴ってほぼ単調に増加する。そのため「１／ｍ＋ｐ」の値が最小値の２倍を超えた場合、以後も単調増加するものと考えられる。よって、閾値以上の値になったら処理を打ち切ることで無駄な処理を省き、処理効率を向上させることができる。
【０１１２】
［ステップＳ１４７］ジョブスケジューリング部１６０は、「１／ｍ＋ｐ」の最小値を、新たに求めた「１／ｍ＋ｐ」の値に更新する。またジョブスケジューリング部１６０は、現在のｍ値を、「１／ｍ＋ｐ」の最小値を得たときのｍ値として記憶する。
【０１１３】
［ステップＳ１４８］ジョブスケジューリング部１６０は、ｍの値をカウントアップする。そしてジョブスケジューリング部１６０は、カウントアップ後のｍの値について、「ｍがＮ／２未満である（ｍ＜Ｎ／２）」という条件が満たされていれば、ステップＳ１４３〜Ｓ１４７の処理を繰り返す。「ｍがＮ／２未満である」という条件が満たされない場合、ＬｏｏｐＤを抜けて、処理がステップＳ１４９に進められる。
【０１１４】
［ステップＳ１４９］ジョブスケジューリング部１６０は、「１／ｍ＋ｐ」の最小値を得たときのｍ値を、以後のジョブスケジューリングに適用するｍ値に設定する。
［ステップＳ１５０］ジョブスケジューリング部１６０は、１グループ当たりの計算ノード数をｍ台として、計算ノードのグルーピングを行う。ジョブスケジューリング部１６０は、リソース情報内の各計算ノードのノード番号に対応付けて、その計算ノードが属するグループのグループ番号を設定する。そしてジョブスケジューリング部１６０は、新たに生成されたグループに従って、最大空き値ペア情報１２１と最大空き値ペアテーブル１２２とを再作成する。その後、ｍ値更新処理が終了する。
【０１１５】
以上のようにして、効率的なジョブスケジューリングが可能となる。その結果、スケジューリングコストを減少させ，ジョブスケジューラの性能低下を防ぐことが可能となる。
例えば１つのジョブのスケジューリング処理当たり、１／（ｐ＋１／ｍ）倍の高速に処理することができる。１／（ｐ＋１／ｍ）の値は、システムの負荷が高いときにより大きな値となる。例えば、ＰＣクラスタでは，全体で９５％以上の使用率となることが多い。そのとき、ｐ値はかなり小さい値が期待される。ｐ値が小さい場合、高速化率「１／（ｐ＋１／ｍ）」が大きくなり、スケジューリング処理が数倍高速化することが期待される。
【０１１６】
以下、図２０〜図２２を参照して、ジョブスケジューリングのシミュレーション結果を説明する。以下の例では、１０００ノードのＰＣクラスタにおいて、９５％のリソースが使用されている状態における、ジョブの割り付け処理１回当たりのコストを、シミュレーションによって求めたものである。このシミュレーションでは、計算ノードの１ノードあたりコア数は８としている。
【０１１７】
コアの９５％が使用中であるとすると、空きコアは５％である。１０００ノードの５％空きコアは、５０ノード×８コア＝４００コアとなる。そこでシミュレートでは、１台当たりの空きコア数のパターンを１，２，３，４，５，６，７，８として、４００コア分をランダムに１０００ノードに振り分けている。
【０１１８】
また空きメモリ量の９５％が使用中であるとすると、空きメモリ量は５％である。１０００ノードの５％空きメモリ量は、５０ノード×１００％＝５０００％となる（１台当たりのメモリ容量を１００％としている）。空きメモリパターン：１０％〜１００％として，５０００％分をランダムに１０００ノードに振り分けている。
【０１１９】
このような条件で、以下の３つのジョブのパターンについての、ジョブスケジューリングコストについてシミュレートした。
・第１のジョブ：（使用メモリ容量：１０％，使用コア数：１）
・第２のジョブ：（使用メモリ容量：５０％，使用コア数：４）
・第３のジョブ：（使用メモリ容量：７０％，使用コア数：６）
図２０〜図２２の上段には、第１〜第３のジョブをスケジューリングする際のｍ値の増加に伴う「ｐ（ｍ）＋１／ｍ」と「ｐ（ｍ）」との値の遷移を、折れ線グラフで示している。図２０〜図２２の中段には、ｍ値の増加に伴う高速化率の遷移を、折れ線グラフで示している。高速化率は、「１／（ｐ（ｍ）＋１／ｍ）」である。図２０〜図２２の下段に示したグラフは、ｍ値の増加に伴う高速化率の遷移を示す折れ線グラフにおける、高速化率が最大となる範囲を拡大したものである。
【０１２０】
図２０は、第１のジョブについてのシミュレーション結果を示す図である。図２０に示したシミュレーション結果によれば、第１のジョブは、ｍ値が６のときに高速化率が最大値「２．８９倍」となる。
【０１２１】
図２１は、第２のジョブについてのシミュレーション結果を示す図である。図２１に示したシミュレーション結果によれば、第２のジョブは、ｍ値が１０のときに高速化率が最大値「３．８倍」となる。
【０１２２】
図２２は、第３のジョブについてのシミュレーション結果を示す図である。図２２に示したシミュレーション結果によれば、第３のジョブは、ｍ値が９のときに高速化率が最大値「４．２３倍」となる。
【０１２３】
このようにシステムの処理負荷が高い場合、第２のジョブスケジューリング処理を適用することで、ジョブを割り付けることができるリソースを明らかに含んでいないグループが、探索の対象から除外（フィルタリング）される。その結果、ジョブスケジューリングの処理効率が向上する。
【０１２４】
またシステムの負荷が少ない場合、ジョブを割り付け可能な計算ノードが容易に見つかる。このような場合には、第１のジョブスケジューリング処理を適用することで、グループごとの探索対象とするかどうかの判定などの処理を不要とし、効率的な処理を行うことができる。
【０１２５】
さらに、定期的に全ｍ値に対する空き最大値ペアテーブルを作成して、「１／ｍ＋ｐ（ｍ）」が最小になるｍ値を求めることで、最適なｍ値を得ることができる。ｍ値の最適化を行うことで、システムの負荷状況などのジョブの実行環境に変化があっても、その実行環境に適したｍ値により、効率的なジョブスケジューリングを行うことができる。
【０１２６】
以上、実施の形態を例示したが、実施の形態で示した各部の構成は同様の機能を有する他のものに置換することができる。また、他の任意の構成物や工程が付加されてもよい。さらに、前述した実施の形態のうちの任意の２以上の構成（特徴）を組み合わせたものであってもよい。
【符号の説明】
【０１２７】
１  ネットワーク
２ａ，２ｂ，２ｃ，・・・，２ｍ，２ｎ  計算ノード
３  ジョブ
１０  ジョブスケジューリング装置
１１  記憶部
１２  グルーピング部
１３  最大資源空き量判定部
１４  除外部
１５  探索部
１６  ジョブ操作部
１７  更新部
【図１】
2015146154.tif 000003
【図２】
2015146154.tif 000004
【図３】
2015146154.tif 000005
【図４】
2015146154.tif 000006
【図５】
2015146154.tif 000007
【図６】
2015146154.tif 000008
【図７】
2015146154.tif 000009
【図８】
2015146154.tif 000010
【図９】
2015146154.tif 000011
【図１０】
2015146154.tif 000012
【図１１】
2015146154.tif 000013
【図１２】
2015146154.tif 000014
【図１３】
2015146154.tif 000015
【図１４】
2015146154.tif 000016
【図１５】
2015146154.tif 000017
【図１６】
2015146154.tif 000018
【図１７】
2015146154.tif 000019
【図１８】
2015146154.tif 000020
【図１９】
2015146154.tif 000021
【図２０】
2015146154.tif 000022
【図２１】
2015146154.tif 000023
【図２２】
2015146154.tif 000024