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