(57)【特許請求の範囲】
【請求項１】
コンピュータに、
ジョブの計算資源への割り当てに応じ、ジョブごとに入力され記憶装置に記録されている前記計算資源の予測利用量に基づいて、計算資源に割り当てられたジョブに係るユーザのジョブの割り当て順に関するユーザごとの優先度を下降させる第一の手順と、
記憶装置にユーザごとに記録された単位時間あたりの前記計算資源の利用可能量に応じた回復率に基づいて、時間の経過に応じて前記優先度を上昇させる第二の手順とを実行させるための優先度制御プログラム。
【請求項２】
前記ジョブの終了に応じ、前記予測利用量と実際の前記計算資源の利用量との差分に基づいて前記優先度を変化させる第三の手順を有する請求項１記載の優先度制御プログラム。
【請求項３】
前記回復率は、期間ごとの前記計算資源の利用予定量に応じて期間ごとに記憶装置に記録されている請求項１又は２記載の優先度制御プログラム。
【請求項４】
前記回復率は、前記利用可能量を前記単位時間によって除した値に基づく請求項１乃至３いずれか一項記載の優先度制御プログラム。
【請求項５】
前記第二の手順は、前記優先度が記憶装置にユーザごとに記録された前記優先度の最大値に達したときは前記優先度を上昇させない請求項１乃至４いずれか一項記載の優先度制御プログラム。
【請求項６】
ジョブの計算資源への割り当てに応じ、ジョブごとに入力され記憶装置に記録されている前記計算資源の予測利用量に基づいて、計算資源に割り当てられたジョブに係るユーザのジョブの割り当て順に関するユーザごとの優先度を下降させる第一の手段と、
記憶装置にユーザごとに記録された単位時間あたりの前記計算資源の利用可能量に応じた回復率に基づいて、時間の経過に応じて前記優先度を上昇させる第二の手段とを有する優先度制御装置。
【請求項７】
コンピュータが実行する優先度制御方法であって、
ジョブの計算資源への割り当てに応じ、ジョブごとに入力され記憶装置に記録されている前記計算資源の予測利用量に基づいて、計算資源に割り当てられたジョブに係るユーザのジョブの割り当て順に関するユーザごとの優先度を下降させる第一の手順と、
記憶装置にユーザごとに記録された単位時間あたりの前記計算資源の利用可能量に応じた回復率に基づいて、時間の経過に応じて前記優先度を上昇させる第二の手順とを有する優先度制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、優先度制御プログラム、優先度制御装置、及び優先度制御方法に関し、特に計算資源へのジョブの割り当て順に関するユーザごとの優先度を制御する優先度制御プログラム、優先度制御装置、及び優先度制御方法に関する。
【背景技術】
【０００２】
従来、科学技術関連等の高負荷のジョブ（例えば、完了までに数日を要する計算）は、計算センター等に配置された並列スーパコンピュータやコンピュータ・クラスタ等（以下、「計算資源」という。）を利用して行われている。一般的に、このような計算資源は複数のユーザ（例えば、数十人の研究者等）によって共用される。したがって、限られた計算資源を各ユーザに公平に割り当てるため、各ユーザによって投入されるジョブの実行のスケジューリングを適切に行う必要がある。
【０００３】
斯かるジョブの実行は、一般的に次のように行われる。
（１）ユーザがジョブスケジューラのジョブキューにジョブを投入する
（２）ジョブスケジューラがジョブキューのジョブを、各ジョブの優先度順に計算資源にディスパッチする。この処理はジョブがジョブキューに無くなるか、割り付け可能な計算資源が無くなるまで行われる。
（３）ユーザによる新規ジョブの投入やジョブの終了等により、ジョブキュー内のジョブのディスパッチが可能となるようなトリガが発生すると、（２）のスケジューリング処理を行う。
【０００４】
ここで、各ジョブの優先度は基本的にジョブの投入順序やジョブを所有するユーザの優先度に基づいてジョブ投入時に決定される。なお、ユーザの優先度（以下、「ユーザ優先度」という。）とは、ユーザ間の優先順位を規定する指標であり、ジョブの優先度とは異なる指標である。しかし、ジョブ投入時に決定されるジョブの優先度のみでディスパッチ順序が決定されると、ユーザ優先度の高いユーザや、或るユーザによって先に投入された大量のジョブによって計算資源が占有されてしまう現象が発生する。このような１ユーザによる計算資源の占有を防ぐために、一般的なジョブスケジューラはフェアシェア機能を備えている。一般的なフェアシェア機能では、ユーザが現在利用している計算資源の量や現在実行しているジョブの実行時間が長くなると、当該ユーザのユーザ優先度が低くされ、他のユーザのユーザ優先度が相対的に高くなるように調整される。
【０００５】
例えば、従来のフェアシェア方式の第一の例として、以下の式（１）を用いたものがある。なお、以下でいう優先度はユーザ優先度をいう。
Ｐｄ（ｔ）＝Ｐｓ／（１＋Ｆ（ｔ））・・・（１）
ｔ：現在時刻
Ｐｄ（ｔ）：動的優先度
Ｐｓ：静的優先度
Ｆ（ｔ）：該当ユーザの、現在実行中ジョブが利用している計算資源の量とジョブ開始から現在までの時間が長くなるほど増加する関数。全ジョブが終了すると０になる。
【０００６】
なお、図１は、従来のフェアシェア方式の第一の例における動的優先度の遷移を簡易的に示す図である。
【０００７】
同図に示されるように、式（１）によれば、動的優先度Ｐｄ（ｔ）は、ジョブの実行時間の経過に応じて（すなわち、計算資源の利用量の増加に応じて）低下する。したがって、計算資源の利用量とユーザ優先度との関係についてユーザ間における公平性を担保することができる。しかし、式（１）では、ジョブの終了直後に動的優先度Ｐｄ（ｔ）が静的優先度Ｐｓに戻される。したがって、或るユーザのジョブが計算資源を連続的に占有してしまう可能性がある。また、ジョブ開始直後の動的優先度Ｐｄ（ｔ）は高い水準にあるため或るユーザのジョブが一度に大量にディスパッチされる可能性もある。斯かる事態の発生を回避するため、式（１）に対して過去ジョブ実行時間項とコミット実行時間項とを追加した以下の式（２）が利用される。
Ｐｄ（ｔ）＝Ｐｓ／（１＋Ｆ（ｔ）＋Ｃｈ×（Ｔｈ（ｔ）＋Ｔｒ（ｔ））＋Ｃｃ×（Ｔｃ（ｔ）−Ｔｒ（ｔ）））・・・（２）
Ｃｈ：過去実行時間用の係数
Ｃｃ：コミット時間用の係数
Ｔｈ（ｔ）：過去ジョブの実行時間の合計。但し、時間経過とともに減少するように各過去ジョブの実行時間に減衰係数をかけている。
Ｔｒ（ｔ）：現在実行されているジョブ実行時間の合計
Ｔｃ（ｔ）：現在実行されているジョブのコミット時間（予想実行時間）の合計
なお、図２は、従来のフェアシェア方式の第二の例における動的優先度の遷移を簡易的に示す図である。
【０００８】
式（２）において「Ｃｈ×（Ｔｈ（ｔ）＋Ｔｒ（ｔ））」は、過去ジョブ実行時間項に相当する。過去ジョブ実行時間項は、過去に大量に計算資源を利用したユーザがジョブ終了後に連続して計算資源を占有する現象を回避するためのものである。すなわち、過去ジョブ実行時間項により、過去に実行したジョブ（過去ジョブ）の実行時間に応じて動的優先度Ｐｄ（ｔ）を低下させることができる。過去ジョブの実行時間には減衰係数が適用され、時間の経過に伴って過去ジョブの実行時間の寄与度が小さくされる。なお、図２において、ジョブ終了時以降の曲線が過去ジョブ実行時間項による効果を示す。すなわち、図１（式（１））の方式では、ジョブの実行直後に動的優先度Ｐｄ（ｔ）は静的優先度Ｐｓに復帰していたが、図２（式（２））の方式では、ジョブの実行後、動的優先度Ｐｄ（ｔ）は、緩やかに復帰する。したがって、大量に計算資源を利用したユーザの優先度をしばらく低く抑えて１ユーザによるジョブの連続実行を回避することができる。
【０００９】
また、式（２）において「Ｃｃ×（Ｔｃ（ｔ）−Ｔｒ（ｔ））」は、コミット実行時間項に相当する。コミット実行時間項は、１ユーザのジョブが一度に大量にディスパッチされるのを防ぐためのものである。すなわち、コミット実行時間項によれば、コミット時間（ユーザの自己申告によりジョブ投入時に指定されるジョブの予想実行時間））から実際の実行時間を引いた値（すなわち、予想残実行時間）が多いほど動的優先度Ｐｄ（ｔ）を低下させることができる。したがって、図２に示されるように、ジョブの開始直後に動的優先度Ｐｄ（ｔ）を低下させることができ、或るユーザのジョブが一度に大量にディスパッチされるのを回避することができる。
【特許文献１】特開２００６−４８２７５号公報
【特許文献２】特開平７−２５３８９３号公報
【非特許文献１】“Platform LSFFamily −Platform Computing”、 [online]、[平成２０年４月２４日検索]、<http://www.platform.com/Products/platform-lsf-family>
【発明の開示】
【発明が解決しようとする課題】
【００１０】
しかしながら、式（２）の方式は、各パラメータ（例えば、Ｃｈ、Ｃｃ、減衰係数）に適切な値が設定される必要があるところ、設定するパラメータの数が多いため「適切な値」の設定が困難であるという問題がある。すなわち、一般的なジョブスケジューラの運用環境では、或る期間において各ユーザに利用させたい計算資源量が決められている。したがって、フェアシェア機能よって、各ユーザに設定された計算資源量の分だけ各ユーザが計算資源を利用できるように動的優先度Ｐｄ（ｔ）が調整されることが望ましい。具体的には、設定された計算資源量を超えてジョブを実行しているユーザの優動的優先度Ｐｄ（ｔ）が、ジョブの実行量が少なく、設定された計算資源量までに余裕があるユーザに対して相対的に下がるようにしたい。そうすれば、後者のユーザに優先的に計算資源を利用させることができる。
【００１１】
しかし、式（２）の方式では、そのようにパラメータを調整することは非常に困難である。したがって、通常は各ユーザが利用した計算資源量の実績値を記録しておき、当該実績値が各ユーザに許可されている制限値を超えたらそのユーザによるジョブの実行を制限する機能をフェアシェア機能とは別に設けることになる。
【００１２】
本発明は、上記の点に鑑みてなされたものであって、計算資源へのジョブの割り当て順に関するユーザごとの優先度を適切に制御することのできる優先度制御プログラム、優先度制御装置、及び優先度制御方法の提供を目的とする。
【課題を解決するための手段】
【００１３】
そこで上記課題を解決するため、優先度制御プログラムは、コンピュータに、ジョブの計算資源への割り当てに応じ、ジョブごとに入力され記憶装置に記録されている前記計算資源の予測利用量に基づいて、計算資源に割り当てられたジョブに係るユーザのジョブの割り当て順に関する優先度を下降させる第一の手順と、記憶装置にユーザごとに記録された単位時間あたりの前記計算資源の利用可能量に応じた回復率に基づいて、時間の経過に応じて前記優先度を上昇させる第二の手順とを実行させる。
【００１４】
このような優先度制御プログラムでは、計算資源へのジョブの割り当て順に関するユーザごとの優先度を適切に制御することができる。
【発明の効果】
【００１５】
計算資源へのジョブの割り当て順に関するユーザごとの優先度を適切に制御することのできる優先度制御プログラム、優先度制御装置、及び優先度制御方法を提供をすることができる。
【発明を実施するための最良の形態】
【００１６】
以下、図面に基づいて本発明の実施の形態を説明する。図３は、本発明の実施の形態における計算システム構成例を示す図である。同図において、ジョブスケジューリング装置１０と一つ以上の計算資源２０とはＬＡＮ（Local Area Network）等のネットワーク（有線又は無線の別は問わない。）を介して接続されている。
【００１７】
ジョブスケジューリング装置１０は、ユーザからジョブの入力の受け付け、入力されたジョブの計算資源２０への割り当て（ディスパッチ）順序の制御、及びジョブのディスパッチ等を行うコンピュータである。ジョブスケジューリング装置１０は、ジョブ受付部１１、優先度算出部１２、ディスパッチ部１３、及びジョブ終了通知受付部１４等のソフトウェアを有する。各部の機能については処理手順の説明において明確にする。
【００１８】
計算資源２０は、割り当てられたジョブを実行する計算資源であり、例えば、並列スーパコンピュータやコンピュータ・クラスタ等が相当する。すなわち、図中において例示されている計算資源２０ａ、２０ｂ、及び２０ｃは、必ずしも一台のコンピュータであるとは限らず、相互結合網で結合された複数のコンピュータによって構成されていてもよい。また、各計算資源２０を一つ又は複数のＣＰＵとして捉えてもよい。
【００１９】
図４は、本発明の実施の形態におけるジョブスケジューリング装置のハードウェア構成例を示す図である。図４のジョブスケジューリング装置１０は、それぞれバスBで相互に接続されているドライブ装置１００と、補助記憶装置１０２と、メモリ装置１０３と、ＣＰＵ１０４と、インタフェース装置１０５と、表示装置１０６と、入力装置１０７と、タイマー１０８とを有するように構成される。
【００２０】
ジョブスケジューリング装置１０での処理を実現するプログラムは、ＣＤ−ＲＯＭ等の記録媒体１０１によって提供される。プログラムを記録した記録媒体１０１がドライブ装置１００にセットされると、プログラムが記録媒体１０１からドライブ装置１００を介して補助記憶装置１０２にインストールされる。補助記憶装置１０２は、インストールされたプログラムを格納すると共に、必要なファイルやデータ等を格納する。
【００２１】
メモリ装置１０３は、プログラムの起動指示があった場合に、補助記憶装置１０２からプログラムを読み出して格納する。ＣＰＵ１０４は、メモリ装置１０３に格納されたプログラムに従ってジョブスケジューリング装置１０に係る機能を実現する。インタフェース装置１０５は、ネットワークに接続するためのインタフェースとして用いられる。表示装置１０６はプログラムによるＧＵＩ（Graphical User Interface）等を表示する。入力装置１０７はキーボード及びマウス等で構成され、様々な操作指示を入力させるために用いられる。タイマー１０８は、時計である。
【００２２】
なお、プログラムのインストールは必ずしも記録媒体１０１より行う必要はなく、ネットワークを介して他のコンピュータよりダウンロードするようにしてもよい。
【００２３】
続いて、本実施の形態における優先度の制御方式の概要を説明する。図５は、本実施の形態における優先度の制御方式による優先度の遷移の例を示す図である。
【００２４】
本実施の形態において、各ユーザのジョブのディスパッチ順序（実行順序）を決定するためのユーザごとの優先度は動的に変化する。斯かる優先度を以下「動的優先度」という。一方、各ユーザには、ユーザの重要度に応じて予め静的な優先度（静的優先度）が設定されている。ユーザの重要度は、重要な又は緊急を要する研究を行っている研究者であるか、一時的な利用者であるか等、運用に応じて適宜定めればよい。静的優先度は、ユーザごとに定められた単位時間あたりの計算資源２０の利用可能量（例えば、ＣＰＵ数×時間）に基づいて定められる。重要なユーザ程、単位時間あたりの計算資源２０の利用可能量は多く与えられる。したがって、重要なユーザ程、高い静的優先度が与えられる。なお、静的優先度と動的優先度とを区別しない場合、単に「優先度」という。本実施の形態では、優先度の最大値は「０」であるとする。但し、優先度は相対的な指標であるためその絶対値には特段の意味はない。
【００２５】
ジョブがディスパッチされ、計算資源２０によってジョブの実行が開始されると（ジョブ開始時）、当該ジョブに係るユーザはペナルティを受けた状態となる。すなわち、図５に示されるように、ジョブの実行の開始に応じて当該ジョブに係るユーザの動的優先度は、当該ジョブによる計算資源２０の予測利用量（例えば、ＣＰＵ利用数×予測実行時間。以下、単に「予測利用量」という。）だけ低下する。ペナルティを受けている状態では、他のユーザより相対的に動的優先度が下がり、該当ユーザのジョブのディスパッチ順序が下がる。なお、予測利用量は、ジョブスケジューリング装置１０へのジョブの入力時にユーザによって入力される。
【００２６】
ジョブの実行の開始によりペナルティを受けた後（動的優先度が下げられた後）、当該ジョブに係るユーザの動的優先度は、単位時間あたりの計算資源２０の利用可能量に応じた回復率によって、時間の経過に応じて徐々に回復する。したがって、単位時間あたりに利用可能な計算資源２０の量が多いユーザ程、ペナルティを早期に減少させることができる。図５では、ジョブ開始時からジョブ終了時の間において線形に動的優先度が増加（上昇）している。なお、動的優先度の最大値は静的優先度とされる。したがって、動的優先度が静的優先度に達した後は、それ以上動的優先度は上昇しない。
【００２７】
なお、オプションとして、ジョブが終了したときに、ジョブ開始時のペナルティとして減らされた予測利用量と、実際に利用した計算資源の利用量（実績利用量）との差分によって動的優先度を変化（上昇又は下降）させるようにしてもよい。図５においては、ジョブ終了時に（予測利用量−実績利用量）分だけ動的優先度が上昇している例が示されている。一般的なジョブスケジューラは予測時間を実績時間が越えた時点でジョブを強制終了するが、もし予測利用量＜実績利用料すなわち（予測利用量−実績利用量）が負の値となることを許すジョブスケジューラの場合、（予測利用量−実績利用量）分だけ動的優先度は低下（下降）させることもありうる。斯かるオプションの適用により、予測利用量と実績利用量とのずれを埋め合わせることができ、より公平に動的優先度を制御することが可能となる。
【００２８】
以上のような本実施の形態における動的優先度の制御方式によれば、自らに設定された単位時間あたりの計算資源２０の利用可能量を超えて計算資源２０を利用したユーザのジョブのディスパッチ順序は下げられる（すなわち、単位時間経過後も静的優先度には復帰できない。）。したがって、各ユーザが許可された範囲内において公平に計算資源２０を利用可能なようにフェアシェア機能を実現（動的優先度を調整）することが可能となる。
【００２９】
また、本実施の形態において、管理者等によって予め設定が必要とされるパラメータは、ユーザごとの単位時間あたりの計算資源２０の利用可能量だけである。したがって、パラメータの設定作業は非常に簡便なものとなる。また、本実施の形態による方式では、利用制限（単位時間あたりの計算資源２０の利用可能量）を超えたユーザは、いきなり計算資源２０の利用が制限される（ジョブディスパッチ不可あるいはジョブ受付拒否される）ことはない。したがって、各ユーザにとっても好ましい状態が実現される。また、１ユーザによる計算資源２０の連続占有や大量ジョブのディスパッチを回避することもできる。
【００３０】
以下、上記した方式を実現するためにジョブスケジューリング装置１０が実行する処理手順等について具体的に説明する。
【００３１】
図６は、第一の実施の形態においてジョブ入力時にジョブスケジューリング装置によって実行される処理手順を説明するためのフローチャートである。
【００３２】
ステップＳ１０１において、ジョブ受付部１１は、表示装置１０６や入力装置１０７等を介して、ジョブ、当該ジョブの実行を要求するユーザの識別子（ユーザＩＤ）、ＣＰＵ利用数、及び当該ジョブの予測実行時間の入力を受け付ける。続いて、ジョブ受付部１１は、当該ジョブのジョブ構造体をメモリ装置１０３内に生成し、生成されたジョブ構造体に当該ジョブのジョブＩＤ、ＣＰＵ利用数、及び当該ジョブの予測実行時間等を記録する（Ｓ１０２）。ここで、ジョブ構造体とは、ジョブに属する情報を管理するためのデータ（構造体）であり、ジョブごとに生成される。
【００３３】
続いて、ジョブ受付部１１は、ユーザＩＤに基づいて、生成されたジョブ構造体とユーザ構造体とを関連付ける（Ｓ１０３）。ユーザ構造体とは、ユーザに属する情報（ユーザ情報）を管理するためのデータ（構造体）であり、所定のタイミング（例えば、ジョブスケジューリング装置１０の起動時等）で補助記憶装置１０２に永続化（保存）されているユーザ情報に基づいてユーザごとにメモリ装置１０３内に生成される。
【００３４】
図７は、ジョブ構造体とユーザ構造体とが関連付けられた状態を示す図である。同図では、ジョブ構造体５０１ａ、５０１ｂ、及び５０１ｃ、並びにユーザ構造体５０２ａ、５０２ｂ、及び５０２ｃが示されている。
【００３５】
ジョブ構造体とユーザ構造体との関連付けにより、ジョブ構造体には関連先のユーザ構造体へのポインタ（位置情報又は識別情報）が登録される。図中では、ジョブ構造体５０１ａ及び５０１ｃは、ユーザ構造体５０２ｃに関連付けられている。ジョブ構造体５０１ｂは、ユーザ構造体５０２ｂに関連付けられている。なお、ジョブ構造体５０１ａ、５０１ｂ、５０１ｃのそれぞれのジョブＩＤは、０、２、３である。
【００３６】
ユーザ構造体は、ユーザＩＤ、最終更新日時（ｔｕｐｄａｔｅ）、最終更新日時の動的優先度（Ｐｕｐｄａｔｅ）、回復率（Ｒ）、及び静的優先度（Ｐｍａｘ）等をメンバ変数として有する。ユーザＩＤは、上記におけるユーザＩＤと同義である。最終更新日時とは、後述するスケジューリング処理の最終実行日時（すなわち、動的優先度の最終更新日時）である。したがって、最終更新日時の動的優先度は、スケジューリング処理の最終実行時において算出された動的優先度である。回復率は、動的優先度の回復率であり、単位時間あたりの計算資源２０の利用可能量に基づいて算出される。より詳しくは、回復率は、単位時間あたりに計算資源２０の利用可能量分だけ動的優先度が回復する値（利用可能量を単位時間によって除した値）に設定される。静的優先度は、各ユーザの静的優先度であり、動的優先度の最大値として扱われる。
【００３７】
続いて、ジョブスケジューリング装置１０は、ジョブ構造体及びユーザ構造体等を用いてジョブのスケジューリング（ジョブのディスパッチ順序の決定及びディスパッチ等）を行う（Ｓ１０４）。
【００３８】
ステップＳ１０４の詳細について説明する。図８は、第一の実施の形態におけるジョブのスケジューリング処理の処理手順を説明するためのフローチャートである。同図の処理は、ジョブの入力時のみならず所定のタイミングで繰り返し（例えば定期的に）実行される。
【００３９】
ステップＳ２０１において、優先度算出部１２は、メモリ装置１０３上にロードされている全てのユーザ構造体に基づいて、全ユーザのそれぞれの現時点の動的優先度を算出する（Ｓ２０１）。なお、ここで全ユーザとは、計算システムのユーザとして予めスケジューリング装置１０にユーザ情報が登録されているユーザをいい、現時点において入力されているジョブに係るユーザのみに限られない。
【００４０】
ここで、
Ｐｎｏｗ：現時点の動的優先度
Ｐｕｐｄａｔｅ：最終更新日時の動的優先度
Ｐｍａｘ：ユーザ毎の静的優先度
Ｒ：回復率
ｔｎｏｗ：現在日時
ｔｕｐｄａｔｅ：最終更新日時
とすると、動的優先度Ｐｎｏｗは、以下の計算を行うことよって算出される。
Ｐｔｍｐ＝Ｐｕｐｄａｔｅ＋Ｒ×（ｔｎｏｗ−ｔｕｐｄａｔｅ）としたとき、
Ｐｎｏｗ＝Ｐｔｍｐ（Ｐｔｍｐ＜Ｐｍａｘのとき）
Ｐｎｏｗ＝Ｐｍａｘ（Ｐｔｍｐ＞＝Ｐｍａｘのとき）
すなわち、動的優先度Ｐｎｏｗは、基本的に最終更新日時の動的優先度Ｐｕｐｄａｔｅに対して時間の経過に応じた回復分（Ｒ×（ｔｎｏｗ−ｔｕｐｄａｔｅ））を加算した値となる。但し、最大値は、ユーザ毎の静的優先度Ｐｍａｘとされる。以上の計算を行うにあたり、ｔｎｏｗ以外のパラメータは、各ユーザ構造体に格納されている値が用いられる。ｔｎｏｗは、タイマー１０８より取得される。
【００４１】
優先度算出部１２は、また、動的優先度の算出に応じて各ユーザ構造体のメンバ変数の値を更新する。具体的には、最終更新日時に現在日時を代入し、最終更新日時の動的優先度に現時点の動的優先度を代入する。なお、Ｓ２０１における動的優先度の算出処理は、図５における、動的優先度の線形な回復を実現するための処理である。
【００４２】
続いて、ディスパッチ部１３は、各ジョブ構造体が関連付いているユーザ構造体の最終更新日時の動的優先度の高い順に（降順に）、各ジョブ構造体をソートする（Ｓ２０２）。
【００４３】
図９は、ジョブ構造体のソート結果としてのデータ構造を示す図である。同図に示されるように、ジョブ構造体のソート結果は、ジョブリスト５０３に登録される。ジョブリスト５０３は、ジョブ構造体へのポインタの配列である。すなわち、ソートされた順番でジョブ構造体のポインタがジョブリスト５０３の各要素に登録される。同図では、最終更新日時の動的優先度の値が０．０であるユーザ構造体５０２ｃに関連付いているジョブ構造体５０１ａ及び５０１ｃのポインタが、ジョブリスト５０３の１番目、２番目に登録されている。続いて、最終更新日時の動的優先度の値が−２５．３４５６であるユーザ構造体５０２ｂに関連付いているジョブ構造体５０１ｂのポインタが、ジョブリスト５０３の３番目に登録されている。
【００４４】
なお、図９におけるユーザ構造体の動的優先度等は、図７の値に対して更新されていないが、これは便宜的なものである。
【００４５】
続いて、ディスパッチ部１３は、ジョブリスト５０３に登録されている順番で１つのジョブ構造体を参照し、当該ジョブ構造体に対応するジョブを取得する（Ｓ２０３）。なお、本実施の形態において、ジョブの実体については特に限定されない。計算のためのパラメータの集合であってもよいし、計算のロジック（プログラム）を含むデータであってもよい。少なくとも、ディスパッチ待ちのジョブはジョブＩＤに関連付けられてメモリ装置１０３又は補助記憶装置１０２に記録されている。したがって、ステップＳ２０３において、ディスパッチ部１３は、参照したジョブ構造体のジョブＩＤに基づいてジョブを取り出す。
【００４６】
続いて、ディスパッチ部１３は、取り出されたジョブ（カレントジョブ）を計算資源１３に割り当てる（ディパッチする）ことが可能であるか否かを判定する（Ｓ２０４）。当該判定は、カレントジョブが必要とする分（ＣＰＵ利用数）だけ計算資源２０に空きが有るか否かに基づいて行われる。
【００４７】
計算資源２０にカレントジョブが必要とする分の空きが有る場合（Ｓ２０４でＹｅｓ）、優先度算出部１２は、カレントジョブに係るユーザの動的優先度Ｐｕｐｄａｔｅを更新する（Ｓ２０５）。当該更新は、以下の計算によって行われる。
Ｐｕｐｄａｔｅ←Ｐｕｐｄａｔｅ−ｒ×Ｔｅｓｔｉｍａｔｅ
Ｔｅｓｔｉｍａｔｅ：予測実行時間
ｒ：ＣＰＵ利用数
ここで、（ｒ×Ｔｅｓｔｉｍａｔｅ）は、予測利用量に相当する。すなわち、当該更新は、図５におけるジョブ開始時の動的優先度の低下を実現するためのものである。なお、計算のための動的優先度Ｐｕｐｄａｔｅの値は、カレントジョブのジョブ構造体が関連付いているユーザ構造体の値が用いられる。ＣＰＵ利用数ｒ及び予測実行時間Ｔｅｓｔｉｍａｔｅの値は、カレントジョブのジョブ構造体に記録されている値が用いられる。また、カレントジョブのユーザのユーザ構造体の動的優先度は計算結果の動的優先度によって更新され、最終更新日時はカレントジョブの開始（ディスパッチ）日時によって更新される。
【００４８】
続いて、ディスパッチ部１３は、カレントジョブを計算資源２０にディスパッチする（Ｓ２０６）。これにより、ディスパッチ先の計算資源２０によってカレントジョブが実行される。なお、カレントジョブのディスパッチに際し、ディパッチ部１３は、ジョブの開始日時をカレントジョブのジョブ構造体に記録する。
【００４９】
一方、計算資源２０にカレントジョブが必要とする分の空きが無い場合（Ｓ２０４でＮｏ）、ディスパッチ部１３は、ジョブリスト５０３に登録されている全てのジョブ構造体について処理を行ったか否かを判定する（Ｓ２０７）。未処理のジョブ構造体が有る場合（Ｓ２０７でＮｏ）、未処理のジョブ構造体についてステップＳ２０３以降を実行する。全てのジョブ構造体ついて処理が完了した場合（Ｓ２０７でＹｅｓ）、ディスパッチ部１３は、当該スケジューリング処理を終了させる。
【００５０】
なお、ステップＳ２０４において、ディスパッチ不可と判定された場合、カレントジョブのディスパッチが可能となるまで（カレントジョブのＣＰＵ利用数分のＣＰＵの空きが出来るまで）待機するようにしてもよい。
【００５１】
続いて、ジョブの実行が終了した際に実行される処理について説明する。図１０は、第一の実施の形態におけるジョブの終了時にジョブスケジューリング装置によって実行される処理手順を説明するためのフローチャートである。
【００５２】
ジョブが終了すると、当該ジョブを実行していた計算資源２０より終了したジョブ（終了ジョブ）のジョブＩＤが通知される。ステップＳ３０１において、ジョブスケジューリング装置１０のジョブ終了通知受信部１４は、当該通知を受信する。続いて、優先度算出部１２は、終了ジョブに係るユーザの動的優先度Ｐｕｐｄａｔｅを更新する（Ｓ３０２）。当該更新は、以下の計算によって行われる。
Ｐｕｐｄａｔｅ←Ｐｕｐｄａｔｅ＋ｒ×（Ｔｅｓｔｉｍａｔｅ−Ｔａｃｔｕａｌ）
Ｔａｃｔｕａｌ：実績実行時間
ここで、（ｒ×Ｔａｃｔｕａｌ）は、実績利用量に相当する。すなわち、当該更新は、図５におけるジョブ終了時の動的優先度の調整を実現するためのものである。なお、計算のための動的優先度Ｐｕｐｄａｔｅの値は、終了ジョブのジョブ構造体が関連付いているユーザ構造体の値が用いられる。ＣＰＵ利用数ｒ及び予測実行時間Ｔｅｓｔｉｍａｔｅの値は、終了ジョブのジョブ構造体に記録されている値が用いられる。実績実行時間は、終了ジョブのジョブ構造体に記録されているジョブの開始日時と、ジョブの終了通知が受信された日時とに基づいて算出される。また、また、終了ジョブのユーザのユーザ構造体の動的優先度は計算結果の動的優先度によって更新され、最終更新日時はジョブの終了通知が受信された日時によって更新される。
【００５３】
以上の処理によって、図５において説明した本実施の形態における動的優先度の制御方式が実現される。
【００５４】
ところで、本実施の形態における動的優先度の制御方式が実現されている環境において、計算資源２０に空き（ＣＰＵの空き）が多く存在する状況で、或るユーザ（以下、「ユーザＡ」という。）のジョブが大量に投入された場合について考える。この場合、他のユーザのジョブが存在しないために、たとえユーザＡが多くのペナルティを受けた状態であってもユーザＡのジョブが大量に実行されてしまう可能性がある。
【００５５】
その結果、ユーザＡの動的優先度は、次に示されるように遷移する。図１１は、ユーザＡのジョブが大量に投入された場合の動的優先度の遷移の例を示す図である。
【００５６】
同図において、ユーザＡの動的優先度は、ａ、ｂ、ｃ、ｄ、ｅ、ｆのタイミングで低下している。これは、それぞれのタイミングにおいてユーザＡのジョブがディスパッチされたことによる。その結果、ユーザＡの動的優先度は極端に低下し、しばらく回復できない状況となっている。したがって、他のユーザジョブが投入されたときに、他ユーザのジョブにディスパッチ順序が追い抜かれる状態が継続することが考えられる。
【００５７】
このような事態の発生を回避した例として、以下、第二の実施の形態を説明する。なお、第二の実施の形態において特に言及しない点については第一の実施の形態と同様でよい。
【００５８】
第二の実施の形態では、動的優先度の回復率を動的に（時間の経過に応じて）変化させる。具体的には、所定の期間Ｔ（例えば、１年）をＮ分割する（等分でなくてもよい。）。各ユーザは、期間Ｔにおける計算資源２０の利用可能量（例えば、ＣＰＵ数×時間）のうちの各分割期間の予定利用量を事前に申請する。各分割期間の予定利用量に応じて分割期間ごとに動的優先度の回復率が決定される。
【００５９】
例えば、１年をＮ分割し、それぞれの分割点をｔ０、ｔ１、・・・、ｔＮとした場合において、ｔｎからｔｎ＋１の分割期間での予定利用量をｒｎとすると、ｔｎ＋１からｔｎの分割期間の回復率Ｒｎは以下の式（３）で算出される。
【００６０】
Ｒｎ＝ｒｎ／Ｔ・・・（３）
各分割期間の回復率を式（３）に基づいて決定することで、多量に計算資源２０を利用する予定の分割期間はその利用量に比例して回復率が大きくすることができる。一方、計算資源２０の予定利用量が少量の分割期間についてはその予定利用量に比例して回復率を小さくすることができる。
【００６１】
以上の仕組み（動的に回復率を変化させる仕組み）を実現する場合、分割期間ごとの回復率をユーザ情報の一部としてジョブスケジューリング装置１０の補助記憶装置１０２にユーザごとに記録しておけばよい。また、分割期間ごとの回復率を管理可能とするためユーザ構造体の構成を例えば次のようにすればよい。
【００６２】
図１２は、第二の実施の形態におけるデータ構造の例を示す図である。図１２中、図９と同一部分には同一符号を付し、その説明は省略する。
【００６３】
第二の実施の形態におけるユーザ構造体には、ユーザごとの回復率テーブル（回復率テーブル５０４ａ、５０４ｂ、５０４ｃ）に対するポインタがメンバ変数として含まれている。各回復率テーブルには、対応するユーザの分割期間ごとの回復率が記録されている。
【００６４】
斯かるデータ構造に基づいて、優先度算出部１２は、図８のステップＳ２０１において全ユーザの動的優先度を算出する際に、算出時が属する分割期間に対応した回復率を用いる。その結果、図１１におけるユーザＡの動的優先度は、例えば以下のように遷移する。
【００６５】
図１３は、第二の実施の形態における動的優先度の遷移の例を示す図である。同図において、（Ａ）は動的優先度の遷移を示す。（Ｂ）は各分割期間の予定利用量の遷移を示す。例えば、（Ｂ）に示されるように、ｔ０からｔ１の分割期間において、ユーザＡの予定利用量は他のユーザに比べて多い。したがって、（Ａ）に示されるように、当該分割期間においてユーザＡの動的優先度の回復率は相対的に高くなる。一方、ｔ１以降において、ユーザＡの予定利用量は他のユーザに比べて少ない。したがって、該当する分割期間においてユーザＡの動的優先度の回復率は相対的に低くなる。
【００６６】
上述したように、第二の実施の形態によれば、ユーザが申請した予定利用量の範囲内で計算資源２０が利用されている限り、動的優先度は最大値付近から極端に低下することなくコンスタントに最大値付近の値を維持することができる。したがって、計算資源２０の大量の利用によって動的優先度が急降下する現象を回避することができ、動的優先度を適切な水準に保つことができる。
【００６７】
なお、本実施の形態では、計算資源２０の利用量を「ＣＰＵ数×時間」によって測定する例について説明した。しかし、例えば、利用するＣＰＵ数について公平性を担保する必要が無い場合には、時間のみによって利用量を測定するようにしてもよい。利用するＣＰＵ数について公平性を担保する必要が無い場合としては、例えば、各ジョブが利用するＣＰＵの個数が同じである場合が挙げられる。
【００６８】
以上、本発明の実施例について詳述したが、本発明は斯かる特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
【００６９】
以上の説明に関し、更に以下の項を開示する。
（付記１）
コンピュータに、
ジョブの計算資源への割り当てに応じ、ジョブごとに入力され記憶装置に記録されている前記計算資源の予測利用量に基づいて、計算資源に割り当てられたジョブに係るユーザのジョブの割り当て順に関する優先度を下降させる第一の手順と、
記憶装置にユーザごとに記録された単位時間あたりの前記計算資源の利用可能量に応じた回復率に基づいて、時間の経過に応じて前記優先度を上昇させる第二の手順とを実行させるための優先度制御プログラム。
（付記２）
前記ジョブの終了に応じ、前記予測利用量と実際の前記計算資源の利用量との差分に基づいて前記優先度を変化させる第三の手順を有する付記１記載の優先度制御プログラム。
（付記３）
前記回復率は、期間ごとの前記計算資源の利用予定量に応じて期間ごとに記憶装置に記録されている付記１又は２記載の優先度制御プログラム。
（付記４）
前記回復率は、前記利用可能量を前記単位時間によって除した値に基づく請求項１乃至３いずれか一項記載の優先度制御プログラム。
（付記５）
前記第二の手順は、前記優先度が記憶装置にユーザごとに記録された前記優先度の最大値に達したときは前記優先度を上昇させない付記１乃至４いずれか一項記載の優先度制御プログラム。
（付記６）
ジョブの計算資源への割り当てに応じ、ジョブごとに入力され記憶装置に記録されている前記計算資源の予測利用量に基づいて、計算資源に割り当てられたジョブに係るユーザのジョブの割り当て順に関する優先度を下降させる第一の手段と、
記憶装置にユーザごとに記録された単位時間あたりの前記計算資源の利用可能量に応じた回復率に基づいて、時間の経過に応じて前記優先度を上昇させる第二の手段とを有する優先度制御装置。
（付記７）
前記ジョブの終了に応じ、前記予測利用量と実際の前記計算資源の利用量との差分に基づいて前記優先度を変化させる第三の手段を有する付記６記載の優先度制御装置。
（付記８）
前記回復率は、期間ごとの前記計算資源の利用予定量に応じて期間ごとに記憶装置に記録されている付記６又は７記載の優先度制御装置。
（付記９）
前記回復率は、前記利用可能量を前記単位時間によって除した値に基づく請求項６乃至８いずれか一項記載の優先度制御装置。
（付記１０）
前記第二の手段は、前記優先度が記憶装置にユーザごとに記録された前記優先度の最大値に達したときは前記優先度を上昇させない付記６乃至９いずれか一項記載の優先度制御装置。
（付記１１）
コンピュータが実行する優先度制御方法であって、
ジョブの計算資源への割り当てに応じ、ジョブごとに入力され記憶装置に記録されている前記計算資源の予測利用量に基づいて、計算資源に割り当てられたジョブに係るユーザのジョブの割り当て順に関する優先度を下降させる第一の手順と、
記憶装置にユーザごとに記録された単位時間あたりの前記計算資源の利用可能量に応じた回復率に基づいて、時間の経過に応じて前記優先度を上昇させる第二の手順とを有する優先度制御方法。
（付記１２）
前記ジョブの終了に応じ、前記予測利用量と実際の前記計算資源の利用量との差分に基づいて前記優先度を変化させる第三の手順を有する付記１１記載の優先度制御方法。
（付記１３）
前記回復率は、期間ごとの前記計算資源の利用予定量に応じて期間ごとに記憶装置に記録されている付記１１又は１２記載の優先度制御方法。
（付記１４）
前記回復率は、前記利用可能量を前記単位時間によって除した値に基づく請求項１１乃至１３いずれか一項記載の優先度制御方法。
（付記１５）
前記第二の手順は、前記優先度が記憶装置にユーザごとに記録された前記優先度の最大値に達したときは前記優先度を上昇させない付記１１乃至１４いずれか一項記載の優先度制御方法。
【図面の簡単な説明】
【００７０】
【図１】従来のフェアシェア方式の第一の例における動的優先度の遷移を簡易的に示す図である。
【図２】従来のフェアシェア方式の第二の例における動的優先度の遷移を簡易的に示す図である。
【図３】本発明の実施の形態における計算システム構成例を示す図である。
【図４】本発明の実施の形態におけるジョブスケジューリング装置のハードウェア構成例を示す図である。
【図５】本実施の形態における優先度の算出方式による優先度の遷移の例を示す図である。
【図６】第一の実施の形態においてジョブ入力時にジョブスケジューリング装置によって実行される処理手順を説明するためのフローチャートである。
【図７】ジョブ構造体とユーザ構造体とが関連付けられた状態を示す図である。
【図８】第一の実施の形態におけるジョブのスケジューリング処理の処理手順を説明するためのフローチャートである。
【図９】ジョブ構造体のソート結果としてのデータ構造を示す図である。
【図１０】第一の実施の形態におけるジョブの終了時にジョブスケジューリング装置によって実行される処理手順を説明するためのフローチャートである。
【図１１】ユーザＡのジョブが大量に投入された場合の動的優先度の遷移の例を示す図である。
【図１２】第二の実施の形態におけるデータ構造の例を示す図である。
【図１３】第二の実施の形態における動的優先度の遷移の例を示す図である。
【符号の説明】
【００７１】
１０          ジョブスケジューリング装置
１１          ジョブ受付部
１２          優先度算出部
１３          ディスパッチ部
１４          ジョブ終了通知受付部
２０、２０ａ、２０ｂ、２０ｃ    計算資源
１００        ドライブ装置
１０１        記録媒体
１０２        補助記憶装置
１０３        メモリ装置
１０４        ＣＰＵ
１０５        インタフェース装置
１０６        表示装置
１０７        入力装置
１０８        タイマー
Ｂ            バス
【図１】
0005120061.tif 000002
【図２】
0005120061.tif 000003
【図３】
0005120061.tif 000004
【図４】
0005120061.tif 000005
【図５】
0005120061.tif 000006
【図６】
0005120061.tif 000007
【図７】
0005120061.tif 000008
【図８】
0005120061.tif 000009
【図９】
0005120061.tif 000010
【図１０】
0005120061.tif 000011
【図１１】
0005120061.tif 000012
【図１２】
0005120061.tif 000013
【図１３】
0005120061.tif 000014