以下に図面を参照して、開示の並列演算装置、並列演算システム、およびジョブ制御プログラムの実施の形態を詳細に説明する。
図1は、本実施の形態にかかる並列演算装置101の動作例を示す説明図である。並列演算装置101は、複数のユーザの各々のユーザが有するジョブに計算資源を割り当てるコンピュータである。例えば、並列演算装置101は、単一のプロセッサを有する計算機に対して、計算資源としてプロセッサを専有する時間をユーザが有するジョブに割り当てる。また、並列演算装置101は、複数のプロセッサを有する計算機に対して、計算資源として、プロセッサを専有する時間*プロセッサの数をユーザが有するジョブに割り当てる。複数のプロセッサを有する計算機は、コアが複数搭載されたプロセッサを含む計算機でもよいし、シングルコアのプロセッサが並列されたプロセッサ群を含む計算機でもよいし、シングルコアのプロセッサを含む計算機が複数あってもよい。
また、単一または複数の演算装置を有する計算機は、並列演算装置101であってもよいし、他の装置であってもよい。他の装置としては、例えば、クラスタ化したパーソナル・コンピュータであってもよい。図1の記載では、説明を単純化するため、並列演算装置101が、シングルコアのプロセッサであるCPUが2つ並列されたプロセッサ群である場合を例にあげて説明する。
また、ジョブとは、ユーザから見た処理の単位を示す。ジョブと似たような概念として、プログラムの実行単位であって、固有のメモリ空間を有するプロセスや、プログラムの実行単位であって、同一プロセスに属するもの同士でメモリ空間を共有するスレッド等がある。従って、並列演算装置101は、複数のジョブとして、複数のスレッドや複数のプロセスに計算資源を割り当ててもよい。
次に、ジョブに計算資源を割り当てる処理について説明する。ジョブを割り当てるジョブスケジューラは、ユーザの操作等によって投入されたジョブを、投入順序や予め決められた静的優先度によって並び変える。ここで、静的優先度は、ユーザの間の優先度である。そして、ジョブスケジューラは、ユーザの静的優先度に基づいて並び替えたジョブ順に、ジョブの要求する計算資源の空きを探して割り当てる。
ここで、静的優先度だけに従ってジョブを割り当てると、静的優先度の高いユーザが有するジョブや、あるユーザによって先に投入されたジョブによって計算資源が専有されてしまうことがある。そこで、ジョブスケジューラは、運用中に随時更新されるユーザの動的優先度を用いてジョブを割り当てる。具体的には、ジョブスケジューラは、ユーザが現在利用中の計算資源の量が多い場合や、現在実行中のジョブの実行時間が長い場合には、該当のユーザの動的優先度を低下させ、他のユーザの動的優先度を相対的に高くするように設定する。
動的優先度は、値が大きいほどユーザが有するジョブの割り当てを優先することを示してもよいし、値が小さいほど優先することを示してもよい。動的優先度は、具体的な数値でもよいし、「高」、「中」、「低」、のような階級であってもよい。
しかしながら、各々のユーザの計算配分の比率で各々のユーザが有するジョブに計算資源を割り当てることができない場合がある。例えば、決められた比率に経過時間を乗じた値を各々のユーザの優先度に加えると、加える値の差が、時刻によって、各々のユーザが有するジョブに計算資源を割り当てる際に優先度を低下させる所定値分、または所定値の2倍分というように異なるものになる。従って、あるタイミングでは加える値の差が所定値分となり、別のタイミングでは加える値の差が所定値の2倍分となったりする。この場合、あるタイミングでは、あるユーザが他のユーザより1回多く計算資源を割り当てられる分差がつき、別のタイミングでは、あるユーザが他のユーザより2回多く計算資源が割り当てられる分差がついたりすることになる。このように、決められた比率に経過時間を乗じた値を各々のユーザの動的優先度に加えると、決められた比率で各々のジョブに計算資源を割り当てることができなくなる。
また、各々のユーザに対して予め指定された計算資源を使いきった場合に各々のユーザが有するジョブをスケジューリング不可能状態にして、決められた比率を担保することが考えられる。しかしながら、この場合、ジョブに割り当てられない計算資源が発生し、プロセッサの処理性能が低下することになる。また、各々のジョブに割り当てられた計算資源の量を監視することは、ジョブやプロセッサの個数が増加するにつれて困難なものになる。ここで、計算資源の配分の比率で各々のユーザが有するジョブに計算資源を割り当てたい理由としては、例えば、ユーザAが計算機を利用するために支払った金額と、ユーザBが計算機を利用するために支払った金額との比率にしたいことがあげられる。
そこで、本実施の形態にかかる並列演算装置101は、各々のユーザの計算資源の配分の比率に基づいて、各々のユーザが有するジョブに計算資源が割り当てられることにより各々のユーザの動的優先度を低下させる度合いを決定する。これにより、どのタイミングでも、各々のユーザの動的優先度の差が各々のユーザの計算資源の配分の比率に従うため、並列演算装置101は、計算資源を各々のユーザの計算資源の配分の比率に従って割り当てることができる。
図1を用いて、並列演算装置101の処理を説明する。図1に示す並列演算装置101は、CPU#1とCPU#2とを有する。また、並列演算装置101は、ユーザAが有するジョブとユーザBが有するジョブとを実行するものとする。また、ユーザAとユーザBとの計算資源の配分の比率を2:1とする。
例えば、動的優先度が、「高」、「中」、「低」、のような階級であるとする。このとき、並列演算装置101は、各々のユーザが有するジョブに計算資源が割り当てられることによりユーザA、Bの動的優先度を低下させる階級を、計算資源の配分の比率の逆数の比1:2から、それぞれ、1階級、2階級に決定する。
以下の説明では、動的優先度として、「フェアシェア値」と呼ばれる値を用いる場合について説明する。フェアシェア値は、フェアシェア初期値を上限としており、フェアシェア初期値よりも大きくなることはない値である。また、フェアシェア値は負の値となってもよい。フェアシェア値は、値が大きいほど優先してユーザが有するジョブを割り当てることを示す値である。また、計算資源の配分の比率を、以下、「フェアシェア配分率」と呼称する場合がある。図1の例では、ユーザAのフェアシェア配分率:ユーザBのフェアシェア配分率が、2:1となる。また、各々のユーザが有するジョブに計算資源が割り当てられることにより各々のユーザのフェアシェア値を低下させる度合いを、「フェアシェア使用量」と呼称する場合がある。また、単位時間当たりのフェアシェア値を上昇させる度合いを、「単位時間当たりの回復値」と呼称する場合がある。
また、図1の例では、ユーザAが有するジョブは、複数あってもよいし、単一のジョブを何度も実行するものでよいし、単一のジョブを同時に実行するものでもよい。ユーザBが有するジョブも同様であるとする。そして、ジョブの1回の実行の際には、ジョブは、100秒×1CPU=100の計算資源を要求するものとする。また、ユーザAとユーザBとのフェアシェア初期値を300とする。また、単位時間当たりの回復値として、1秒当たりの回復値をユーザA、ユーザBともに0.5とする。また、説明の簡略化のため、ユーザAのフェアシェア値とユーザBのフェアシェア値とが同値である場合、並列演算装置101は、ユーザAが有するジョブに優先して計算資源を割り当てるものとする。
並列演算装置101は、各々のユーザに割り当てられるフェアシェア配分率に基づいて、各々のユーザのフェアシェア使用量を決定する。ここで、ユーザAが有するジョブとユーザBが有するジョブとが要求する計算資源が常に固定値であれば、フェアシェア配分率は予め決められるものであるから、並列演算装置101は、各々のユーザのフェアシェア使用量をどのタイミングで決定してもよい。例えば、並列演算装置101は、運用開始前に、各々のユーザのフェアシェア使用量を決定する。
図1の例では、符号102で示すように、並列演算装置101は、各々のユーザが有するジョブが要求する計算資源の量と、各々のユーザに割り当てられるフェアシェア配分率の逆数とを乗じた値を、各々のジョブのフェアシェア使用量として決定する。図1の例では、並列演算装置101は、ユーザAのフェアシェア使用量:ユーザBのフェアシェア使用量=100/2:100/1=50:100とする。
図1に示すグラフ103は、決定したフェアシェア使用量に従って各々のユーザが有するジョブに計算資源を割り当てた際のフェアシェア値の時系列変化を示す。また、枠104は、計算資源を模式したものである。
グラフ103の横軸は、時刻を示す。グラフ103の縦軸は、フェアシェア値を示す。また、グラフ103は、ユーザAのフェアシェア値の時系列変化を実線で示すと共に、ユーザBのフェアシェア値の時系列変化を破線で示す。時刻0[秒]において、並列演算装置101は、ユーザA、Bのフェアシェア値とが共に300であるため、ユーザAが有するジョブにCPU#1の0〜100[秒]を割り当てると共に、ユーザBが有するジョブにCPU#2の0〜100[秒]を割り当てる。そして、並列演算装置101は、ユーザAのフェアシェア値を、300−50=250とし、ユーザBのフェアシェア値を、300−100=200とする。
次に、時刻100[秒]において、並列演算装置101は、ユーザAのフェアシェア値とユーザBのフェアシェア値とを、1秒当たりの回復値×経過時間=0.5×100=50回復させる。そして、並列演算装置101は、ユーザAのフェアシェア値が300であり、ユーザBのフェアシェア値が250であるから、ユーザAが有するジョブにCPU#1の100[秒]から200[秒]までを割り当てる。そして、並列演算装置101は、ユーザAのフェアシェア値を、300−50=250とする。続けて、並列演算装置101は、ユーザAのフェアシェア値が250であり、ユーザBのフェアシェア値が250であるから、ユーザAが有するジョブにCPU#2の100[秒]から200[秒]までを割り当てる。そして、並列演算装置101は、ユーザAのフェアシェア値を、250−50=200とする。
そして、時刻200[秒]において、並列演算装置101は、ユーザAのフェアシェア値とユーザBのフェアシェア値とを、0.5×100=50回復させる。並列演算装置101は、ユーザAのフェアシェア値が250であり、ユーザBのフェアシェア値が300であるから、ユーザBが有するジョブにCPU#1の200[秒]から300[秒]までを割り当てる。そして、並列演算装置101は、ユーザBのフェアシェア値を、300−100=200とする。続けて、並列演算装置101は、ユーザAのフェアシェア値が250であり、ユーザBのフェアシェア値が200であるから、ユーザAが有するジョブにCPU#2の200[秒]から300[秒]までを割り当てる。そして、並列演算装置101は、ユーザAのフェアシェア値を、250−50=200とする。
以上により、割り当てられた計算資源を確認すると、CPU#1、2の計算資源が全てユーザA、Bのいずれかが有するジョブに割り当てられており、かつ、ユーザA:ユーザB=4:2=2:1となる。このように、並列演算装置101は、ジョブに割り当てられない計算資源を発生させることを抑制して、各々のユーザのフェアシェア配分率に従って各々のユーザが有するジョブに計算資源を割り当てることができる。また、0[秒]から100[秒]の間では、ユーザAとユーザBとのフェアシェア値の差が常に50となっており、フェアシェア配分率2:1に従うものとなる。さらに、200[秒]以降では、ユーザAとユーザBのフェアシェア値が同一となるが、これは、200[秒]の段階で、ユーザAとユーザBとに割り当てられた計算資源が2:1となったためである。そして、並列演算装置101は、200[秒]以降も、2:1を維持するようにユーザAとユーザBとに計算資源を割り当てる。
なお、上述した説明では、並列演算装置101は、各々のユーザのフェアシェア配分率に基づいて計算資源を割り当てたが、一人以上のユーザを有する各々のユーザグループのフェアシェア配分率に基づいて計算資源を割り当ててもよい。次に、並列演算装置101を、並列演算システム200に適用した例を図2に示す。
図2は、並列演算システム200の構成例を示すブロック図である。並列演算システム200は、管理ノード201と、複数のノードとして、ノード#1〜#nを有する。nは、2以上の整数である。ここで、管理ノード201は、図1で示した並列演算装置101に相当する。ノード#1〜#nは、図1における、CPU#1、2に相当する。管理ノード201とノード#1〜#nとは、インターコネクト202により接続される。並列演算システム200は、例えば、スーパーコンピュータである。
管理ノード201は、管理ノード201とノード#1〜#nとのうち少なくともノード#1〜#nをジョブに割り当てる装置である。ノード#1〜#nは、割り当てられたノードを実行する装置である。以降の説明では、管理ノード201は、ノード単位でユーザが有するジョブを割り当てるものとする。
図3は、管理ノード201のハードウェアの一例を示すブロック図である。図3において、管理ノード201は、CPU301と、ROM302と、RAM303と、を含む。また、管理ノード201は、ディスクドライブ304およびディスク305と、通信インターフェース306と、を含む。また、CPU301〜ディスクドライブ304、通信インターフェース306はバス307によってそれぞれ接続される。
CPU301は、管理ノード201の全体の制御を司る演算処理装置である。また、管理ノードは、複数のCPUを有してもよい。ROM302は、ブートプログラムなどのプログラムを記憶する不揮発性メモリである。RAM303は、CPU301のワークエリアとして使用される揮発性メモリである。
ディスクドライブ304は、CPU301の制御に従ってディスク305に対するデータのリードおよびライトを制御する制御装置である。ディスクドライブ304には、例えば、磁気ディスクドライブ、光ディスクドライブ、ソリッドステートドライブなどを採用することができる。ディスク305は、ディスクドライブ304の制御で書き込まれたデータを記憶する不揮発性メモリである。例えばディスクドライブ304が磁気ディスクドライブである場合、ディスク305には、磁気ディスクを採用することができる。また、ディスクドライブ304が光ディスクドライブである場合、ディスク305には、光ディスクを採用することができる。また、ディスクドライブ304がソリッドステートドライブである場合、ディスク305には、半導体素子によって形成された半導体メモリ、いわゆる半導体ディスクを採用することができる。
通信インターフェース306は、ネットワークと内部のインターフェースを司り、他の装置からのデータの入出力を制御する制御装置である。具体的に、通信インターフェース306は、通信回線を通じてネットワークを介して他の装置に接続される。通信インターフェース306には、例えば、モデムやLANアダプタなどを採用することができる。
また、並列演算システム200の管理者が、管理ノード201を直接操作する場合、管理ノード201は、ディスプレイ、キーボード、マウスといったハードウェアを有してもよい。また、図示していないが、ノード#1〜nも、管理ノード201と同様のハードウェアを有する。
(管理ノード201の機能構成例)
図4は、管理ノード201の機能構成例を示すブロック図である。管理ノード201は、制御部400を有する。制御部400は、割当部401と、決定部402とを含む。制御部400は、記憶装置に記憶されたジョブ制御プログラムをCPU301が実行することにより、各部の機能を実現する。記憶装置とは、具体的には、例えば、図3に示したROM302、RAM303、ディスク305などである。また、各部の処理結果は、CPU301のレジスタや、CPU301のキャッシュメモリ等に格納される。
また、管理ノード201は、記憶部410にアクセス可能である。記憶部410は、RAM303、ディスク305といった記憶装置である。記憶部410は、各々のユーザのフェアシェア初期値と、単位時間当たりの回復値と、各々のユーザの回復倍率と、各々のユーザのフェアシェア値と、各々のユーザのフェアシェア配分率とを有する。
割当部401は、各々のユーザのフェアシェア値に基づいて、各々のユーザが有するジョブに計算資源を割り当てる。具体的には、例えば、割当部401は、計算資源として、ノードを利用する一定時間を各々のユーザが有するジョブに割り当てる。
決定部402は、記憶部410から読み出した各々のユーザのフェアシェア配分率に基づいて、各々のユーザのフェアシェア使用量を決定する。例えば、各々のユーザが有するジョブが要求する計算資源が常に固定値であれば、決定部402は、所定値を各々のユーザのフェアシェア配分率で割った値を、各々のユーザのフェアシェア使用量として決定する。所定値は、どのような値でもよい。また、各々のユーザが有するジョブが要求する計算資源の量が変化するならば、決定部402は、各々のユーザが有するジョブが要求する計算資源を各々のユーザのフェアシェア配分率で割った値を、各々のユーザのフェアシェア使用量として決定してもよい。
また、各々のユーザが有するジョブの要求する計算資源が、複数のノードのうちのいずれかのノードであるとする。このとき、各々のユーザが有するジョブにノードを割り当てる時間の長さが常に固定であるとする。この場合、決定部402は、各々のユーザが有するジョブにいずれかのノードを割り当てたことに応じて、割り当てたノードの数と各々のジョブのフェアシェア配分率とに基づいて、各々のユーザのフェアシェア使用量を決定してもよい。例えば、決定部402は、ノードの数と、各々のユーザが有するジョブが要求する計算資源とを乗じた値を、各々のユーザのフェアシェア配分率で割った値を、各々のユーザのフェアシェア使用量として決定する。
また、各々のユーザが有するジョブの要求する計算資源が、ノードを利用する時間であるとする。このとき、各々のユーザが有するジョブに割り当てるノードの数が常に固定であるとする。このとき、決定部402は、割当部401が各々のユーザが有するジョブにノードを利用する時間を割り当てたことに応じて、前述の時間と各々のユーザのフェアシェア配分率とに基づいて、各々のユーザのフェアシェア使用量を決定してもよい。例えば、決定部402は、前述の時間と、各々のユーザが有するジョブが要求する計算資源とを乗じた値を、各々のユーザのフェアシェア配分率で割った値を、各々のユーザのフェアシェア使用量として決定する。
また、割当部401が各々のユーザが有するジョブに前述の時間を割り当てた後、前述の時間が経過する前に各々のユーザが有するジョブが終了したとする。各々のユーザが有するジョブが終了する契機としては、各々のユーザが有するジョブが完了した時や、中断した場合である。この際、決定部402は、各々のユーザが有するジョブが終了した時刻から前述の時間が経過する時刻までの時間と各々のユーザのフェアシェア配分率とに基づいて、各々のユーザが有するジョブが終了することによりフェアシェア値を上昇させる度合いを決定する。各々のユーザが有するジョブが終了することによりフェアシェア値を上昇させる度合いを、以下、「フェアシェア返却量」と呼称する場合がある。
例えば、決定部402は、ジョブが要求する計算資源と、ジョブが終了した時刻から前述の時間が経過する時刻までの時間とを乗じた値を、各々のユーザのフェアシェア配分率で割った値を、各々のユーザのフェアシェア返却量として決定する。
次に、図5と図6とを用いて、本実施の形態にかかるフェアシェア配分率の差による資源配分の例と、比較として、回復倍率による資源配分の例を示す。図5、図6において、フェアシェア初期値は、ユーザA、B共に同じ値とする。また、図5、図6において、フェアシェア配分率は、ユーザA=1、ユーザB=3として、ユーザBはユーザAの3倍の設定とする。
図5は、フェアシェア配分率の差による資源配分の一例を示す説明図である。図5に示すグラフ501は、フェアシェア配分率の差により資源配分した場合における、フェアシェア値の時系列変化を示すグラフである。グラフ501の横軸は、時刻を示す。グラフ501の縦軸は、フェアシェア値を示す。また、グラフ501内の実線および点線は、ユーザAのフェアシェア値を示す。また、グラフ501内の一点鎖線および二点鎖線は、ユーザBのフェアシェア値を示す。また、グラフ501内の点線および二点鎖線は、図5の時刻t1において、ジョブを割り当てていない場合におけるフェアシェア値を示す。
図5の時刻t0において、管理ノード201は、ユーザAのジョブとユーザBのジョブとに計算資源としてノードを割り当てる。割り当てられたノードは、ジョブを実行する。そして、図5の時刻t0において、ユーザAのフェアシェア値は、以下の通りになる。
ユーザAのフェアシェア値=時刻t0におけるユーザAのフェアシェア値−ユーザAのフェアシェア使用量
また、ユーザAのフェアシェア使用量は、以下の通りになる。
ユーザAのフェアシェア使用量=ノード数×専有使用時間/1
同様に、図5の時刻t0において、ユーザBのフェアシェア値は、以下の通りになる。
ユーザBのフェアシェア値=時刻t0におけるユーザBのフェアシェア値−ユーザBのフェアシェア使用量
また、ユーザBのフェアシェア使用量は、以下の通りになる。
ユーザBのフェアシェア使用量=ノード数×専有使用時間/3
従って、ユーザAとユーザBで同一の計算資源を要求するジョブが実行開始した場合、ユーザBのフェアシェア値の減少量はユーザAの1/3になる。これは、運用中のどのタイミングでジョブ実行開始、ジョブ選択が行われても同じように制御される。例えば、グラフ501における時刻t1の時点でも時刻t2の時点でも、ユーザBのジョブはユーザAのジョブに比べて3倍のジョブ実行が可能になることを示す。
図6は、回復倍率による資源配分の一例を示す説明図である。図6に示すグラフ601は、回復倍率により資源配分した場合における、フェアシェア値の時系列変化を示すグラフである。グラフ601の横軸は、時刻を示す。グラフ601の縦軸は、フェアシェア値を示す。また、グラフ601内の実線および点線は、ユーザAのフェアシェア値を示す。また、グラフ601内の一点鎖線および二点鎖線は、ユーザBのフェアシェア値を示す。また、グラフ601内の点線および二点鎖線は、図6の時刻t1において、ジョブを割り当てない場合におけるフェアシェア値を示す。
グラフ図6の時刻t0において、ユーザAとユーザBで同一の計算資源を要求するジョブが実行開始したとすると、ユーザA、Bのフェアシェア値は同一の量分減少する。ここで、回復倍率により資源配分した場合、ユーザBのフェアシェア値は、ユーザAのフェアシェア値より3倍の回復量となる。従って、時刻によって、ユーザA、ユーザBのフェアシェア値の差が変わることになる。
例えば、図6における、時刻t1にジョブを実行しない場合の時刻t2においては、ユーザBのフェアシェア値は、ユーザAのフェアシェア値と比較してジョブ3つ分の実行を優先して行える値となっており、3倍の配分率に従うことができる。しかしながら、図6の時刻t1においては、ユーザBのフェアシェア値は、ユーザAのフェアシェア値と比較してジョブ1つ分の実行しか優先して行えない値となっており、回復倍率による資源配分の方法は、3倍の配分率に従えないものとなる。
次に、図7と図8とを用いて、フェアシェア配分率の差により資源配分を行った2つの例を示す。図7と図8とで共通する設定として、実行待ちのジョブは「ジョブ番号」の昇順に投入されるものとし、ハッチを付与したジョブがユーザAが有するジョブであり、ハッチを付与していないジョブがユーザBが有するジョブであるとする。また、図7と図8とにおいて、ジョブは、「jx」で記載する。xは1以上の整数である。
また、フェアシェア初期値は、ユーザA、ユーザB共に40000とする。また、単位時間当たりの回復値をユーザA、ユーザB共に40とする。回復倍率は、ユーザA、ユーザB共に1とする。また、並列演算システム200が有するノードの個数nを200とする。また、全てのジョブが要求する計算資源は、100ノード×100[秒]とする。
図7は、フェアシェア配分率の差により資源配分を行った一例を示す説明図である。図7の例では、ジョブ番号j1、j3、j5、j7、j9のジョブはユーザAが投入し、ジョブ番号j2、j4、j6、j8、j10のジョブはユーザBが投入したジョブである。そして、フェアシェア配分率は1:2の比とするために、ユーザA=1、ユーザB=2とする。この比率で計算資源が配分されることが目標となる。
図7の時刻t0において、ユーザA、Bのフェアシェア値は、ユーザAのフェアシェア値=40000、ユーザBのフェアシェア値=40000というように、フェアシェア初期値と同じであり、動的優先度は同じとなる。このため、管理ノード201は、ジョブ選択として投入順を採用し、図7の(1)で示すように、ジョブ番号j1のジョブを割り当てたノードに実行開始させる。
そして、ジョブ番号j1のジョブを割り当てたノードに実行開始させると、管理ノード201は、ジョブ番号j1のジョブのオーナであるユーザAのフェアシェア値を、フェアシェア配分率を使用して求められる下記(1)式と(2)式とを用いて算出する。
フェアシェア使用量=ノード数×専有使用時間/フェアシェア配分率 …(1)
フェアシェア値=フェアシェア値−フェアシェア使用量 …(2)
ユーザAのフェアシェア使用量は、「100×100/1=10000」となるので、管理ノード201は、ユーザAのフェアシェア値を30000とする。また、ジョブ番号1のジョブ選択時には、ユーザAのフェアシェア値=30000であり、ユーザBのフェアシェア値=40000であるから、ユーザBの動的優先度が高くなる。なお、ジョブ番号j1の実行時点からの経過した時間は1秒未満であるから、ユーザAのフェアシェア値の回復量は考慮せず「0」とする。このため、管理ノード201は、図7の(2)で示すように、ジョブ番号j2のユーザBのジョブを選択し、ジョブ番号j2のジョブを割り当てたノードに実行開始させる。
ジョブ番号j2のジョブを割り当てたノードに実行開始させると、管理ノード201は、ジョブ番号j2のジョブのオーナであるユーザBのフェアシェア値を、(1)式と(2)式とを用いて算出する。
ユーザBのフェアシェア使用量は、100×100/2=5000となるので、管理ノード201は、ユーザBのフェアシェア値を35000とする。また、この時点で全てのノードが使用中になるので、次のジョブ選択を行うタイミングは、ジョブ番号j1、およびジョブ番号j2のジョブが実行終了する時刻t1となる。
時刻t1のジョブ選択時において、管理ノード201は、ユーザA、Bのフェアシェア値に、経過時間に伴ったフェアシェア回復量を加算する。この加算する値は、ユーザA、B共に同じ回復倍率=1の設定のため、共にフェアシェア回復量=4000となる。この結果、ユーザAのフェアシェア値=34000、ユーザBのフェアシェア値=39000となり、ユーザBの動的優先度が高い状態が続く。このため、管理ノード201は、図7の(3)で示すように、投入順番が遅い、ユーザBがオーナであるジョブ番号j4のジョブを連続して選択し、ジョブ番号j4のジョブを割り当てたノードに実行開始させる。
ジョブ番号j4のジョブを割り当てたノードに実行開始させると、管理ノード201は、ジョブ番号j4のジョブのオーナであるユーザBのフェアシェア値を、(1)式と(2)式とを用いて算出し、34000とする。
ジョブ番号j4のジョブ実行後のジョブ選択時にはユーザAのフェアシェア値=34000、ユーザBのフェアシェア値=34000となっており、動的優先度は同じになる。なお、ジョブ番号j4のジョブ実行時点からの経過した時間は1秒未満であり回復量は考慮せず「0」とする。このため、管理ノード201は、ジョブ選択では投入順を採用して、図7の(4)で示すように、ユーザAがオーナであるジョブ番号j3のジョブを選択し、ジョブ番号j3のジョブを割り当てたノードに実行開始させる。
ジョブ番号j3のジョブを割り当てたノードに実行開始させると、管理ノード201は、ジョブ番号j3のジョブのオーナであるユーザAのフェアシェア値を、(1)式と(2)式とを用いて算出し、24000とする。また、この時点で再度全てのノードが使用中になるので、次のジョブ選択を行うタイミングは、ジョブ番号j4、およびジョブ番号j3のジョブが実行終了する時刻t2となる。
時刻t2のジョブ選択時において、管理ノード201は、ユーザA、Bのフェアシェア値に、経過時間に伴ったフェアシェア回復量を加算する。この加算する値は、ユーザA、B共に同じ回復倍率=1の設定のため、共にフェアシェア回復量=4000となる。この結果、ユーザAのフェアシェア値=28000、ユーザBのフェアシェア値=38000となり、ユーザBの動的優先度が高くなる。このため、管理ノード201は、図7の(5)で示すように、投入順番が遅い、ジョブ番号j6のユーザBのジョブを選択し、ジョブ番号j6のジョブを割り当てたノードに実行開始させる。
ジョブ番号j6のジョブを実行開始させると、管理ノード201は、ジョブ番号j6のジョブのオーナであるユーザBのフェアシェア値を、(1)式、(2)式に従って算出し、33000とする。
ジョブ番号j6のジョブ実行後のジョブ選択時にはユーザAのフェアシェア値=28000、ユーザBのフェアシェア値=33000となっており、ユーザBの動的優先度が高い状態が続く。なお、ジョブ番号j6のジョブ実行時点からの経過した時間は1秒未満であり回復量は考慮せず「0」とする。このため、管理ノード201は、図7の(6)で示すように、投入順番が遅い、ユーザBがオーナであるジョブ番号j8のジョブを連続して選択し、ジョブ番号j8のジョブを割り当てたノードに実行開始させる。
ジョブ番号j8のジョブを割り当てたノードに実行開始させると、管理ノード201は、ジョブ番号j8のジョブのオーナであるユーザBのフェアシェア値を(1)式と(2)式とを用いて算出し、28000とする。この時点で再度全てのノードが使用中になるので、次のジョブ選択を行うタイミングは、ジョブ番号j6、およびジョブ番号j8のジョブが実行終了する時刻t3となる。
時刻t3のジョブ選択時において、管理ノード201は、ユーザA、Bのフェアシェア値に、経過時間に伴ったフェアシェア回復量を加算する。この加算する値は、ユーザA、B共に同じ回復倍率=1の設定のため、共にフェアシェア回復量=4000となる。この結果、ユーザAのフェアシェア値=32000、ユーザBのフェアシェア値=32000となり、動的優先度は同じになる。このため、管理ノード201は、ジョブ選択では投入順を採用して、図7の(7)で示すように、ユーザAがオーナであるジョブ番号j5のジョブを選択し、ジョブ番号j5のジョブを割り当てたノードに実行開始させる。
ジョブ番号j5のジョブを割り当てたノードに実行開始させると、管理ノード201は、ジョブ番号j5のジョブのオーナであるユーザAのフェアシェア値を、(1)式と(2)式とを用いて算出し、22000とする。
ジョブ番号j5のジョブ実行後のジョブ選択時にはユーザAのフェアシェア値=22000、ユーザBのフェアシェア値=32000となり、ユーザBの動的優先度が高くなる。なお、ジョブ番号j5のジョブ実行時点からの経過した時間は1秒未満であり回復量は考慮せず「0」とする。このため、管理ノード201は、図7の(8)で示すように、投入順番が遅い、ユーザBがオーナであるジョブ番号j10のジョブを選択し、ジョブ番号j10のジョブを割り当てたノードに実行開始させる。
ジョブ番号j10のジョブを割り当てたノードに実行開始させると、管理ノード201は、ジョブ番号j10のジョブのオーナであるユーザBのフェアシェア値を、(1)式と(2)式とを用いて算出し、27000とする。この時点で再度全てのノードが使用中になり、管理ノード201は、この後も同様の制御を行う。
ここまでのジョブ実行による計算資源の配分比は、ユーザAの実行ジョブ数=3、ユーザBの実行ジョブ数=5となるので、1:1.67となり、目標配分比の1:2には届かない。しかしながら、これは、図7で示した例のジョブ数が少ないためであり、ジョブの実行順序を見ると、ユーザAの1つのジョブ実行後にユーザBの2つのジョブを実行することが繰り返されている。従って、計算資源の配分比は1:2になっており、目標通りの資源配分制御が可能になることがわかる。
図8は、フェアシェア配分率の差により資源配分を行った他の例を示す説明図である。図8の例では、ジョブ番号j1〜j6のジョブはユーザAが投入し、ジョブ番号j7〜j10のジョブはユーザBが投入したジョブである。そして、フェアシェア配分率は1:1の比とするために、ユーザA=1、ユーザB=1とする。この比率で計算資源が配分されることが目標となる。
図8の時刻t0において、ユーザA、Bのフェアシェア値は、ユーザAのフェアシェア値=40000、ユーザBのフェアシェア値=40000というように、フェアシェア初期値と同じであり、動的優先度は同じとなる。このため、管理ノード201は、ジョブ選択として投入順を採用し、図8の(1)で示すように、ジョブ番号j1のジョブを割り当てたノードに実行開始させる。
そして、ジョブ番号j1のジョブを実行開始させると、管理ノード201は、ジョブ番号j1のジョブのオーナであるユーザAのフェアシェア値を、(1)式と(2)式とを用いて算出し、30000とする。ジョブ番号j1のジョブ実行後のジョブ選択時にはユーザAのフェアシェア値=30000、ユーザBのフェアシェア値=40000となり、ユーザBの動的優先度が高くなる。なお、ジョブ番号j1のジョブ実行時点からの経過した時間は1秒未満であり回復量は考慮せず0とする。このため、管理ノード201は、図8の(2)で示すように、投入順番の遅い、ユーザBがオーナであるジョブ番号j7のジョブを選択して、ジョブ番号j7を割り当てたノードに実行開始させる。
ジョブ番号j7のジョブが実行開始されると、管理ノード201は、ジョブ番号j7のジョブのオーナであるユーザBのフェアシェア値を、(1)式と(2)式とを用いて算出し、30000とする。このように、ユーザBのフェアシェア配分率はユーザAと同じなので、ユーザBのフェアシェア使用量もユーザAのフェアシェア使用量と同じになる。この時点で全てのノードが使用中になるので、次のジョブ選択を行うタイミングは、ジョブ番号j1、およびジョブ番号j7のジョブが実行終了する時刻t1となる。
時刻t1のジョブ選択時において、管理ノード201は、ユーザA、Bのフェアシェア値に、経過時間に伴ったフェアシェア回復量を加算する。この加算する値は、ユーザA、B共に同じ回復倍率=1の設定のため、同じフェアシェア回復量=4000となる。この結果、ユーザAのフェアシェア値=34000、ユーザBのフェアシェア値=34000となっており、動的優先度は同じになる。このため、管理ノード201は、図8の(3)で示すように、ジョブ選択では投入順を採用し、ユーザAがオーナであるジョブ番号j2のジョブを選択し、ジョブ番号j2のジョブを割り当てたノードに実行開始させる。
ジョブ番号j2のジョブを割り当てたノードに実行開始させると、管理ノード201は、ジョブ番号j2のジョブのオーナであるユーザAのフェアシェア値を、(1)式と(2)式とを用いて算出し、24000とする。
ジョブ番号j2のジョブ実行後のジョブ選択時にはユーザAのフェアシェア値=24000、ユーザBのフェアシェア値=34000となっており、ユーザBの動的優先度が高くなる。なお、ジョブ番号j2のジョブ実行時点からの経過した時間は1秒未満であり回復量は考慮せず0とする。このため、管理ノード201は、図8の(4)で示すように、投入順番の遅い、ユーザBがオーナであるジョブ番号j8のジョブを選択して、ジョブ番号j8のジョブを割り当てたノードに実行開始させる。
ジョブ番号j8のジョブを割り当てたノードに実行開始させると、管理ノード201は、ジョブ番号j8のジョブのオーナであるユーザBのフェアシェア値を、(1)式と(2)式とを用いて算出し、24000とする。この時点で再度全てのノードが使用中になるので、次のジョブ選択を行うタイミングは、ジョブ番号j2、およびジョブ番号j8のジョブが実行終了する時刻t2となる。
t2時刻のジョブ選択時において、管理ノード201は、ユーザA、Bのフェアシェア値に、経過時間に伴ったフェアシェア回復量を加算する。この加算する値は、ユーザA、B共に同じ回復倍率=1の設定のため、同じフェアシェア回復量=4000となる。この結果、ユーザAのフェアシェア値=28000、ユーザBのフェアシェア値=28000となっており、動的優先度は同じになる。このため、管理ノード201は、図8の(5)で示すように、ジョブ選択では投入順を採用し、ユーザAがオーナであるジョブ番号j3のジョブを選択して、ジョブ番号j3のジョブを割り当てたノードに実行開始させる。
ジョブ番号j3のジョブを割り当てたノードに実行開始させると、管理ノード201は、ジョブ番号j3のジョブのオーナであるユーザAのフェアシェア値を、(1)式と(2)式とを用いて算出し、18000とする。
ジョブ番号j3のジョブ実行後のジョブ選択時にはユーザAのフェアシェア値=18000、ユーザBのフェアシェア値=28000となっており、ユーザBの動的優先度が高くなる。なお、ジョブ番号j3のジョブ実行時点からの経過した時間は1秒未満であり回復量は考慮せず0とする。このため、管理ノード201は、図8の(6)で示すように、投入順番の遅い、ユーザBがオーナであるジョブ番号j9のジョブを選択し、ジョブ番号j9のジョブを割り当てたノードに実行開始させる。
ジョブ番号j9のジョブを割り当てたノードに実行開始させると、管理ノード201は、ジョブ番号j9のジョブのオーナであるユーザBのフェアシェア値を、(1)式と(2)式とを用いて算出し、18000とする。この時点で再度全てのノードが使用中になるので、次のジョブ選択を行うタイミングは、ジョブ番号j3、およびジョブ番号j9のジョブが実行終了する時刻t3となる。
時刻t3のジョブ選択時において、管理ノード201は、ユーザA、Bのフェアシェア値に、経過時間に伴ったフェアシェア回復量を加算する。この加算する値は、ユーザA、B共に同じ回復倍率=1の設定のため、同じフェアシェア回復量=4000となる。この結果、ユーザAのフェアシェア値=22000、ユーザBのフェアシェア値=22000となっており、動的優先度は同じになる。このため、管理ノード201は、図8の(7)で示すように、ジョブ選択では投入順を採用して、ユーザAがオーナであるジョブ番号j4のジョブを選択し、ジョブ番号j4のジョブを割り当てたノードを実行開始させる。
ジョブ番号j4のジョブを実行開始させると、管理ノード201は、ジョブのオーナであるユーザAのフェアシェア値を、(1)式と(2)式とを用いて算出し、12000とする。
ジョブ番号j4のジョブ実行後のジョブ選択時にはユーザAのフェアシェア値=12000、ユーザBのフェアシェア値=22000となっており、ユーザBの動的優先度が高くなる。なお、ジョブ番号j4のジョブ実行時点からの経過した時間は1秒未満であり回復量は考慮せず0とする。このため、管理ノード201は、図8の(8)で示すように、投入順番の遅い、ユーザBがオーナであるジョブ番号j10のジョブを選択し、ジョブ番号j10を割り当てたノードに実行開始させる。
ジョブ番号j10のジョブを割り当てたノードに実行開始させると、管理ノード201は、ジョブ番号j10のジョブのオーナであるユーザBのフェアシェア値を、(1)式と(2)式とを用いて算出し、12000とする。この時点で再度全てのノードが使用中になり、管理ノード201は、この後も同様の制御を行う。
ここまでのジョブ実行による計算資源の配分比を見ると、ユーザAの実行ジョブ数=4、ユーザBの実行ジョブ数=4となるので、1:1となり、目標通り公平な資源配分制御が可能となることがわかる。
次に、図9〜図13を用いて、管理ノード201が実行する資源配分処理のフローチャートを示す。また、図9〜図13で示すフローチャートは、図7で示した動作を行う設定となる。
図9は、資源配分処理手順の一例を示すフローチャートである。資源配分処理は、ジョブに計算資源を割り当てる処理である。管理ノード201は、初期値を設定する(ステップS901)。
ステップS901の処理として、具体的には、管理ノード201は、初期値として、ユーザA、Bのフェアシェア初期値を、共に40000に設定する。また、管理ノード201は、初期値として、単位時間当たりの回復値をユーザA、ユーザB共に40に設定する。また、管理ノード201は、初期値として、回復倍率を、ユーザA、ユーザB共に1に設定する。また、管理ノード201は、初期値として、ユーザAのフェアシェア配分率を1に設定する。また、管理ノード201は、初期値として、ユーザBのフェアシェア配分率を2に設定する。また、管理ノード201は、初期値として、空きノード数を、全てのノードの数に設定する。また、管理ノード201は、初期値として、フェアシェア値更新時刻を現在時刻に設定する。
次に、管理ノード201は、空きノードがあるか否かを判断する(ステップS902)。空きノードがある場合(ステップS902:Yes)、管理ノード201は、フェアシェア値更新処理を実行する(ステップS903)。フェアシェア値更新処理は、図10で説明する。そして、管理ノード201は、割り当て候補ジョブ決定処理を実行する(ステップS904)。割り当て候補ジョブ決定処理は、図11で説明する。また、管理ノード201は、割り当て候補ジョブ決定処理により得た割り当て候補ジョブのIDをjidに設定する。
次に、管理ノード201は、割り当て候補ジョブ決定処理の処理結果として、jidが0より大きいかを判断する(ステップS905)。ここで、jidが0より大きい場合とは、割り当て候補ジョブがあることを示す。
jidが0より大きい場合(ステップS905:Yes)、管理ノード201は、計算資源割り当て処理を実行する(ステップS906)。計算資源割り当て処理は、図12で説明する。そして、管理ノード201は、ステップS902の処理に移行する。
一方、空きノードがない場合(ステップS902:No)、または、jidが0以下の場合(ステップS905:No)、管理ノード201は、イベント待ち処理を実行する(ステップS907)。イベント待ち処理は、図13で説明する。また、管理ノード201は、イベント待ち処理で得たイベントのIDを、eeに設定する。
そして、管理ノード201は、イベント待ち処理で得たイベントeeが、スケジューラ停止イベントか否かを判断する(ステップS908)。イベントeeがスケジューラ停止イベントでない場合(ステップS908:No)、管理ノード201は、ステップS902の処理に移行する。一方、イベントeeがスケジューラ停止イベントである場合(ステップS908:Yes)、管理ノード201は、資源配分処理を終了する。資源配分処理を実行することにより、管理ノード201は、ジョブに計算資源を無駄なくフェアシェア配分率に従って割り当てることができる。
図10は、フェアシェア値更新処理手順の一例を示すフローチャートである。フェアシェア値更新処理は、フェアシェア値を更新する処理である。
管理ノード201は、ttを現在時刻−フェアシェア値更新時刻に設定する(ステップS1001)。次に、管理ノード201は、ユーザAフェアシェア回復量を単位時間当たりの回復値*ユーザA回復倍率*ttに設定する(ステップS1002)。また、管理ノード201は、ユーザBフェアシェア回復量を単位時間当たりの回復値*ユーザB回復倍率*ttに設定する(ステップS1003)。次に、管理ノード201は、ユーザAフェアシェア値をユーザAフェアシェア値+ユーザAフェアシェア回復量に設定する(ステップS1004)。また、管理ノード201は、ユーザBフェアシェア値をユーザBフェアシェア値+ユーザBフェアシェア回復量に設定する(ステップS1005)。そして、管理ノード201は、フェアシェア値更新時刻を現在時刻に設定する(ステップS1006)。
ステップS1006の処理終了後、管理ノード201は、フェアシェア値更新処理を終了する。フェアシェア値更新処理を実行することにより、管理ノード201は、時間経過によるフェアシェア値の回復を行うことができる。
図11は、割り当て候補ジョブ決定処理手順の一例を示すフローチャートである。割り当て候補ジョブ決定処理は、割り当て候補となるジョブを決定する処理である。
管理ノード201は、jid_minを実行待ち最小ジョブ番号に設定する(ステップS1101)。また、管理ノード201は、jid_maxを実行待ち最大ジョブ番号に設定する(ステップS1102)。また、管理ノード201は、jidを0に設定する(ステップS1103)。
次に、管理ノード201は、ユーザAフェアシェア値がユーザBフェアシェア値より大きいか否かを判断する(ステップS1104)。ユーザAフェアシェア値がユーザBフェアシェア値より大きい場合(ステップS1104:Yes)、管理ノード201は、jid_minからjid_maxの順番でユーザAのジョブ、かつ要求ノード数が空きノード数以下のジョブを検索してjidに設定する(ステップS1105)。そして、管理ノード201は、jidが0より大きいか否かを判断する(ステップS1106)。jidが0以下である場合(ステップS1106:No)、管理ノード201は、jid_minからjid_maxの順番でユーザBのジョブ、かつ要求ノード数が空きノード数以下のジョブを検索してjidに設定する(ステップS1107)。ステップS1107の処理終了後、または、jidが0より大きい場合(ステップS1106:Yes)、管理ノード201は、割り当て候補ジョブ決定処理を終了する。
一方、ユーザAフェアシェア値がユーザBフェアシェア値以下である場合(ステップS1104:No)、管理ノード201は、ユーザAフェアシェア値がユーザBフェアシェア値より小さいか否かを判断する(ステップS1108)。ユーザAフェアシェア値がユーザBフェアシェア値より小さい場合(ステップS1108:Yes)、管理ノード201は、jid_minからjid_maxの順番でユーザBのジョブ、かつ要求ノード数が空きノード数以下のジョブを検索してjidに設定する(ステップS1109)。そして、管理ノード201は、jidが0より大きいか否かを判断する(ステップS1110)。jidが0以下である場合(ステップS1110:No)、管理ノード201は、jid_minからjid_maxの順番でユーザAのジョブ、かつ要求ノード数が空きノード数以下のジョブを検索してjidに設定する(ステップS1111)。ステップS1111の処理終了後、または、jidが0より大きい場合(ステップS1110:Yes)、管理ノード201は、割り当て候補ジョブ決定処理を終了する。
ユーザAフェアシェア値がユーザBフェアシェア値以上である場合(ステップS1108:No)、管理ノード201は、jid_minからjid_maxの順番で要求ノード数が空きノード数以下のジョブを検索してjidに設定する(ステップS1112)。ステップS1112の処理終了後、管理ノード201は、割り当て候補ジョブ決定処理を終了する。割り当て候補ジョブ決定処理を実行することにより、管理ノード201は、割り当て候補となるジョブを決定することができる。
図12は、計算資源割り当て処理手順の一例を示すフローチャートである。計算資源割り当て処理は、ジョブに計算資源を割り当てる処理である。また、計算資源割り当て処理は、ステップS904で設定されたjidを引数として受け付ける。
管理ノード201は、nodeをjid番号のジョブの要求ノード数に設定する(ステップS1201)。次に、管理ノード201は、elapseをjid番号のジョブの専有使用時間に設定する(ステップS1202)。そして、管理ノード201は、node数、elapse時間のノードを割り当てる(ステップS1203)。次に、管理ノード201は、uuをjid番号のジョブのユーザIDに設定する(ステップS1204)。そして、管理ノード201は、フェアシェア使用量をnode*elapse/ユーザuuフェアシェア配分率に決定する(ステップS1205)。次に、管理ノード201は、ユーザuuフェアシェア値をユーザuuフェアシェア値−フェアシェア使用量に設定する(ステップS1206)。そして、管理ノード201は、割り当てたノードに、jid番号のジョブを実行開始させる(ステップS1207)。
ステップS1207の処理終了後、管理ノード201は、計算資源割り当て処理を終了する。計算資源割り当て処理を実行することにより、管理ノード201は、ジョブに計算資源を割り当てることができる。
図13は、イベント待ち処理手順の一例を示すフローチャートである。イベント待ち処理は、受け付けイベントに応じた処理を行う処理である。
管理ノード201は、eeを受け付けイベントに設定する(ステップS1301)。ここで、受け付けイベントは、新規ジョブ投入イベント、ジョブ実行終了イベント、スケジューラ停止イベントのいずれかである。
次に、管理ノード201は、eeがジョブ実行終了イベントか否かを判断する(ステップS1302)。eeがジョブ実行終了イベントである場合(ステップS1302:Yes)、管理ノード201は、jidを実行終了したジョブ番号に設定する(ステップS1303)。次に、管理ノード201は、nodeをjid番号のジョブの要求ノード数に設定する(ステップS1304)。そして、管理ノード201は、elapseをjid番号のジョブの専有使用時間に設定する(ステップS1305)。次に、管理ノード201は、ssをjid番号のジョブの実行開始時刻に設定する(ステップS1306)。そして、管理ノード201は、uuをjid番号のジョブのユーザIDに設定する(ステップS1307)。
次に、管理ノード201は、フェアシェア返却量をnode*(elapse−(現在時刻−ss))/ユーザuuフェアシェア配分率に決定する(ステップS1308)。そして、管理ノード201は、ユーザuuフェアシェア値をユーザuuフェアシェア値+フェアシェア返却量に設定する(ステップS1309)。ステップS1309の処理終了後、または、eeがジョブ実行終了イベントでない場合(ステップS1302:No)、管理ノード201は、イベント待ち処理を終了する。イベント待ち処理を実行することにより、管理ノード201は、受け付けイベントに応じた処理を行うことができる。
以上説明したように、管理ノード201は、各々のユーザのフェアシェア配分率に基づいて各々のユーザのフェアシェア値から減算する各々のユーザのフェアシェア使用量を決める。これにより、どのタイミングでも各々のユーザのフェアシェア値の差が各々のユーザのフェアシェア配分率に従うため、計算資源を各々のユーザが有するジョブに無駄なく割り当てることができる。
また、管理ノード201によれば、各々のユーザが有するジョブにいずれかのノードを割り当てたことに応じて、割り当てたノードの数と各々のユーザのフェアシェア配分率とに基づいて、各々のユーザのフェアシェア使用量を決定してもよい。各々のユーザが有するジョブが要求するプロセッサを利用する時間が常に固定値であり、全て同一である場合、各々のフェアシェア使用量は、割り当てたノードの数と各々のユーザのフェアシェア配分率とに依存する。この場合、管理ノード201は、ノード#1〜#nの計算資源を無駄にすることなく、各々のユーザのフェアシェア配分率で各々のユーザが有するジョブに計算資源を割り当てることができる。そして、この場合、各々のユーザが有するジョブが要求するプロセッサを利用する時間を考慮しなくてよい分、管理ノード201は、ジョブ制御にかかる負荷を抑えることができる。
また、管理ノード201によれば、各々のユーザが有するジョブにノードを利用する時間を割り当てたことに応じて、前述の時間と各々のユーザのフェアシェア配分率とに基づいて、各々のユーザのフェアシェア使用量を決定してもよい。ジョブが要求するプロセッサの数が常に固定値であり、全て同一である場合、各々のフェアシェア使用量は、各々のユーザが有するジョブにノードを利用する時間と各々のユーザのフェアシェア配分率とに依存する。この場合、管理ノード201は、ノード#1〜#nの計算資源を無駄にすることなく、各々のジョブのフェアシェア配分率で各々のユーザが有するジョブに計算資源を割り当てることができる。そして、この場合、ジョブが要求するプロセッサの数を考慮しなくてよい分、管理ノード201は、ジョブ制御にかかる負荷を抑えることができる。
また、各々のユーザが有するジョブに前述の時間を割り当てた後、前述の時間が経過する前に各々のユーザが有するジョブが終了したとする。このとき、管理ノード201によれば、各々のユーザが有するジョブが終了した時刻から前述の時間が経過する時刻までの時間と、各々のユーザのフェアシェア配分率とに基づいて、フェアシェア返却量を決定してもよい。これにより、管理ノード201は、前述の時間が経過する前に各々のユーザが有するジョブが終了した場合にも、各々のユーザのフェアシェア配分率を維持して各々のユーザが有するジョブに計算資源を割り当てることができる。
なお、本実施の形態で説明したジョブ制御方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本ジョブ制御プログラムは、ハードディスク、フレキシブルディスク、CD−ROM(Compact Disc−Read Only Memory)、DVD(Digital Versatile Disk)等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本ジョブ制御プログラムは、インターネット等のネットワークを介して配布してもよい。
上述した実施の形態に関し、さらに以下の付記を開示する。
(付記1)複数のユーザの各々のユーザの計算資源の配分の比率に基づいて、前記各々のユーザが有するジョブに前記計算資源を割り当てる際の前記各々のユーザの優先度を前記各々のユーザが有するジョブに前記計算資源が割り当てられることにより低下させる度合いを決定する、
制御部を有することを特徴とする並列演算装置。
(付記2)前記計算資源が、複数のプロセッサのうちのいずれかのプロセッサであって、
前記制御部は、
前記各々のユーザが有するジョブに前記プロセッサを割り当てたことに応じて、前記プロセッサの数と前記比率とに基づいて、前記優先度を前記各々のユーザが有するジョブに前記プロセッサが割り当てられることにより低下させる度合いを決定することを特徴とする付記1に記載の並列演算装置。
(付記3)前記計算資源が、プロセッサを利用する時間であって、
前記制御部は、
前記各々のユーザが有するジョブに前記時間を割り当てたことに応じて、前記時間と前記比率とに基づいて、前記優先度を前記各々のユーザが有するジョブに前記時間が割り当てられることにより低下させる度合いを決定することを特徴とする付記1または2に記載の並列演算装置。
(付記4)前記制御部は、
前記各々のユーザが有するジョブに前記時間を割り当てた後、前記時間が経過する前に前記各々のユーザが有するジョブが終了したことに応じて、前記各々のユーザが有するジョブが終了した時刻から前記時間が経過する時刻までの時間と、前記比率とに基づいて、前記優先度を前記各々のユーザが有するジョブが終了することにより上昇させる度合いを決定することを特徴とする付記3に記載の並列演算装置。
(付記5)複数のプロセッサを有する並列演算システムであって、
前記複数のプロセッサのいずれかのプロセッサは、
複数のユーザの各々のユーザの計算資源の配分の比率に基づいて、前記各々のユーザが有するジョブに前記計算資源を割り当てる際の前記各々のユーザの優先度を前記各々のユーザが有するジョブに前記計算資源が割り当てられることにより低下させる度合いを決定する、
ことを特徴とする並列演算システム。
(付記6)コンピュータに、
複数のユーザの各々のユーザの計算資源の配分の比率を記憶する記憶部から前記比率を読み出し、
読み出した前記比率に基づいて、前記各々のユーザが有するジョブに前記計算資源を割り当てる際の前記各々のユーザの優先度を前記各々のユーザが有するジョブに前記計算資源が割り当てられることにより低下させる度合いを決定する、
処理を実行させることを特徴とするジョブ制御プログラム。
(付記7)コンピュータが、
複数のユーザの各々のユーザの計算資源の配分の比率を記憶する記憶部から前記比率を読み出し、
読み出した前記比率に基づいて、前記各々のユーザが有するジョブに前記計算資源を割り当てる際の前記各々のユーザの優先度を前記各々のユーザが有するジョブに前記計算資源が割り当てられることにより低下させる度合いを決定する、
処理を実行することを特徴とするジョブ制御方法。