以下、本実施の形態を図面を参照して説明する。
[第1の実施の形態]
図1は、第1の実施の形態の情報処理装置を示す図である。情報処理装置1は、ネットワークを介して複数の計算ノードに接続されている。複数の計算ノードは、計算ノード2,3,4を含む。情報処理装置1は、複数の計算ノードを用いて、複数のジョブを並列に実行させる。ジョブは、情報処理装置1が各計算ノードに割り当てる処理の単位である。ネットワークに接続された他の情報処理装置が情報処理装置1にジョブの実行要求を送信してもよい。
情報処理装置1は、各ジョブに優先度を付与して管理する。通常、優先度が相対的に高いジョブは、優先度が相対的に低いジョブよりも早く実行開始される。ジョブの優先度は、例えば、ジョブの実行要求の到着順、ユーザが属するグループやユーザの優先度、ジョブの実行要求を発行したアプリケーションの重要度などに応じて決定され得る。情報処理装置1は、優先度に従って、複数のジョブを複数の計算ノードに割り当てる。情報処理装置1は、1つのジョブの処理を複数の計算ノードに跨って割り当て、各計算ノードにより当該ジョブを並列実行させることもある。複数の計算ノードそれぞれは、自身に割り当てられたジョブを実行する。情報処理装置1は、「コンピュータ」と呼ばれてもよい。
ここで、情報処理装置1は、複数の計算ノードそれぞれを、計算ノードID(IDentifier)により識別する。計算ノードIDは、複数の計算ノードそれぞれの識別情報である。例えば、情報処理装置1は、12個の計算ノードを、計算ノードID“0”〜“11”により識別する。
情報処理装置1は、記憶部1aおよび演算部1bを有する。記憶部1aは、RAM(Random Access Memory)などの揮発性の記憶装置でもよいし、HDD(Hard Disk Drive)などの不揮発性の記憶装置でもよい。演算部1bは、例えば、プロセッサである。プロセッサは、CPU(Central Processing Unit)やDSP(Digital Signal Processor)であってもよく、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの集積回路を含んでもよい。プロセッサは、例えば、RAMに記憶されたプログラムを実行する。また、「プロセッサ」は、2以上のプロセッサの集合(マルチプロセッサ)であってもよい。
記憶部1aは、複数の計算ノードの利用可能な時間帯を示す第1の情報を記憶する。第1の情報は、複数の計算ノードそれぞれの利用可能時間のうち、何れのジョブも割り当てられていない時間帯を示す情報ということもできる。第1の実施の形態の例では、計算ノード2,3,4を含む複数のノードに対して、ジョブJ1,J2,J3,J4,J5,J6,J7が既にスケジュール済である(図1のタイムマップに相当)。複数の計算ノードのうち、何れのジョブに対しても割り当てられていない時間帯が、該当の計算ノードの利用可能な時間帯である。
記憶部1aは、複数のジョブそれぞれの計算ノードの所要量を示す第2の情報を記憶する。計算ノードの所要量は、例えば、ジョブを実行するために用いられる計算ノードの数や利用時間を含み得る。例えば、計算ノードを1つの計算機(情報処理装置、または、コンピュータ)と考えてもよい。また、計算機が複数のプロセッサを含む場合、複数のプロセッサのうち、ジョブの割り当て単位であるプロセッサ群(および、当該プロセッサ群によって利用されるメモリ)を1つの計算ノードと考えてもよい。あるいは、プロセッサが複数のコアを含む場合、複数のコアのうち、ジョブの割り当て単位であるコア群(および、当該コア群によって利用されるメモリ)を1つの計算ノードと考えてもよい。
例えば、第2の情報は、ジョブJa,Jb,Jc,Jdそれぞれの実行に用いられる計算ノードの所要量を含む。ジョブJa,Jb,Jc,Jdそれぞれは、複数の計算ノードに対して未割り当て(未スケジューリング)のジョブであり、今回の割り当て対象(スケジューリング対象)のジョブである。
ジョブJa,Jb,Jc,Jdそれぞれには優先度が付与されている。ジョブJaの優先度は最も高い。ジョブJbの優先度は、ジョブJaの優先度よりも低く、ジョブJcの優先度よりも高い。ジョブJcの優先度は、ジョブJbの優先度よりも低く、ジョブJdの優先度よりも高い。ジョブJdの優先度は最も低い。
演算部1bは、記憶部1aに記憶された第1および第2の情報に基づいて、複数のジョブのうち最優先のジョブを実行可能な第1の時刻を求める。第1の時刻は、最優先のジョブの実行を開始する候補時刻の1つであるともいえる。例えば、演算部1bは、ジョブJa,Jb,Jc,Jdのうち、最優先のジョブJaを実行可能な第1の時刻として、時刻t1を求める。演算部1bは、ジョブJaを時刻t1から開始した場合のジョブJa,Jb,Jc,Jdの優先度に従った仮のスケジューリングを試みる。この場合、優先度が高いジョブは、優先度が低いジョブよりも後に実行されないようにスケジューリングされる(優先度の高いジョブと優先度の低いジョブとが同じ時刻に実行開始されるようスケジューリングされることはある)。その結果、演算部1bは、スケジューリングの候補のパターンP1を得る。
演算部1bは、第1および第2の情報に基づいて、第1の時刻よりも遅い最優先のジョブの実行開始時刻の候補であり第1の時刻から最優先のジョブを実行するよりも所定の時刻範囲内に多くのジョブを実行できる第2の時刻があるかを判定する。所定の時刻範囲の情報は、例えば、第1の時刻を起点とした期間Tであり、記憶部1aに予め格納される。
例えば、演算部1bは、ジョブJaの実行開始時刻を、時刻t1(第1の時刻)よりも遅い時刻t2(第2の時刻)とした場合の、ジョブJa,Jb,Jc,Jdの優先度に従った仮のスケジューリングを試みる。その結果、演算部1bは、スケジューリングの候補のパターンP2を得る。例えば、演算部1bは、パターンP1,P2を比較することで、期間T内におけるジョブの実行数が、パターンP1よりもパターンP2の方が多いと判断する。したがって、演算部1bは、ジョブJaの実行開始時刻を時刻t1よりも遅い時刻t2とすることで、ジョブJaを時刻t1で実行するよりも所定の時刻範囲(例えば、期間T)内に多くのジョブを実行できると判定する。
具体的には、パターンP1では、期間T内にジョブJdの実行が完了しないので、期間T内に実行完了できるジョブの数は、ジョブJa,Jb,Jcの3つである。一方、パターンP2では、期間T内にジョブJa,Jb,Jc,Jdの4つのジョブの実行を完了できる。よって、ジョブJaを時刻t1で実行開始するよりも、ジョブJaを時刻t2で実行開始する方が、期間T内に多くのジョブを実行できることになる。
この場合、演算部1bは、最優先のジョブの実行開始時刻を第1の時刻よりも遅らせて、第2の時刻から当該最優先のジョブと他のジョブとを実行するよう複数の計算ノードに複数のジョブを割り当てる。例えば、演算部1bは、ジョブJaの実行開始時刻を時刻t1から時刻t2に遅らせる。すなわち、演算部1bは、パターンP2のスケジューリング結果を採用し、最優先のジョブJaおよび他のジョブJb,Jc,Jdを時刻t2に実行開始するよう、複数の計算ノードにジョブJa,Jb,Jc,Jdを割り当てる。
これにより、ジョブの実行を効率化できる。例えば、優先順位がつけられた各ジョブを実行できる最も早い時刻に、優先順位に従って順次実行させていく方法も考えられる。しかし、単に優先度に従って最も早い時刻にジョブを割り当てるのみでは、各ジョブに対して必ずしも効率的に計算資源を割り当てられているとは限らない。全てのジョブを完了するまでの時間が長くなることもある。例えば、パターンP1で例示したように、複数のジョブのうちの一部のジョブの実行が、期間T内に完了しないこともある。一方、パターンP2で例示したように、最優先のジョブJaの実行開始時刻を時刻t1から時刻t2に遅らせることで、当該複数のジョブの実行が、期間T内に全て完了することもあり得る。
そこで、情報処理装置1は、ジョブJaのスケジューリングの際に、後続のジョブJb,Jc,Jdも考慮する。具体的には、情報処理装置1は、ジョブJa,Jb,Jc,Jdのスケジューリングの候補となるパターンを複数取得し、当該複数のパターンの比較により、期間T内により多くのジョブを実行できるパターンを採用する。情報処理装置1は、採用したパターンに従って、各計算ノードへのジョブの割り当てを行う。例えば、パターンP2では、ジョブJa,Jb,Jc,Jdの全ての実行が完了するまでの時間を、パターンP1よりも早めることができる。また、パターンP2ではパターンP1よりも計算ノードの空き時間を低減でき、ジョブの優先度を維持したままジョブスループットを向上できる。こうして、ジョブの実行を効率化することができる。
[第2の実施の形態]
図2は、第2の実施の形態の並列計算機システムを示す図である。第2の実施の形態の並列計算機システムは、管理ノード100および複数の計算ノードを含む。複数の計算ノードは、計算ノード200,300,400を含む。管理ノード100および複数の計算ノードは、ネットワーク10に接続されている。ネットワーク10は、例えば、LAN(Local Area Network)である。
管理ノード100は、複数の計算ノードに対する複数のジョブの割り当てを行う。管理ノード100は、ネットワーク10を介して、他の情報処理装置(図示を省略)からジョブの実行要求を受信してもよい。管理ノード100は、第1の実施の形態の情報処理装置1の一例である。
計算ノード200,300,400は、管理ノード100により割り当てられたジョブを実行する。第2の実施の形態の例では、計算ノード200,300,400それぞれは、1つの計算機である(他の計算ノードも同様)。計算ノード200,300,400は、第1の実施の形態の計算ノード2,3,4の一例である。
第2の実施の形態の並列計算機システムでは、管理ノード100により、複数のジョブを複数の計算ノードに割り当てることで、複数のジョブを並列に実行させることができる。第2の実施の形態の並列計算機システムの例では、ある時間帯に、あるジョブの実行が割り当てられた計算ノードは、該当の時間帯において該当のジョブを実行するために専有される。あるジョブに対して割り当てられる計算資源の所要量は、「計算ノードの数×専有時間」で表わすことができる(計算資源の所要量を計算ノードの所要量ということもできる)。
上記のように、複数のジョブを複数の計算ノードにより並列に処理することで、高速処理を実現するシステムを、HPC(High Performance Computing)システムと呼ぶことがある。
図3は、管理ノードのハードウェア例を示す図である。管理ノード100は、CPU101,102、RAM103、HDD104、画像信号処理部105、入力信号処理部106、媒体リーダ107および通信インタフェース108を有する。これらのハードウェアユニットは、管理ノード100内でバスに接続されている。CPU101,102は、第1の実施の形態の演算部1bの一例であり、RAM103またはHDD104は、第1の実施の形態の記憶部1aの一例である。
CPU101,102は、プログラムの命令を実行する1または2以上のコアを含むプロセッサである。例えば、CPU101は、コア101a,101bを含む複数のコアを有する。同一または異なるCPUに属する複数のコアは、互いに並列に命令を実行できる。CPU101,102は、HDD104に記憶されているプログラムやデータの少なくとも一部をRAM103にロードし、プログラムを実行する。なお、各コアを「プロセッサ」と呼んでもよいし、複数のプロセッサの集合を「プロセッサ」(マルチプロセッサ)と呼んでもよい。
RAM103は、CPU101,102が実行するプログラムやCPU101,102が演算に用いるデータを一時的に記憶する揮発性メモリである。なお、管理ノード100は、RAM以外の種類のメモリを備えてもよく、複数個のメモリを備えてもよい。
HDD104は、OS(Operating System)やアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。なお、管理ノード100は、フラッシュメモリやSSD(Solid State Drive)などの他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
画像信号処理部105は、CPU101,102からの命令に従って、管理ノード100に接続されたディスプレイ11に画像を出力する。ディスプレイ11としては、CRT(Cathode Ray Tube)ディスプレイ、液晶ディスプレイ(LCD:Liquid Crystal Display)、プラズマディスプレイ(PDP:Plasma Display Panel)、有機EL(OEL:Organic Electro-Luminescence)ディスプレイなどを用いることができる。
入力信号処理部106は、管理ノード100に接続された入力デバイス12から入力信号を取得し、少なくとも1つのCPUに出力する。入力デバイス12としては、マウスやタッチパネルやタッチパッドやトラックボールなどのポインティングデバイス、キーボード、リモートコントローラ、ボタンスイッチなどを用いることができる。また、管理ノード100に、複数の種類の入力デバイスが接続されていてもよい。
媒体リーダ107は、記録媒体13に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体13として、例えば、フレキシブルディスク(FD:Flexible Disk)やHDDなどの磁気ディスク、CD(Compact Disc)やDVD(Digital Versatile Disc)などの光ディスク、光磁気ディスク(MO:Magneto-Optical disk)、半導体メモリなどを使用できる。媒体リーダ107は、例えば、記録媒体13から読み取ったプログラムやデータをRAM103またはHDD104に格納する。
通信インタフェース108は、ネットワーク10に接続され、ネットワーク10を介して複数の計算ノードを含む他の情報処理装置と通信を行うインタフェースである。通信インタフェース108は、スイッチなどの通信装置とケーブルで接続される有線通信インタフェースでもよいし、基地局などと無線リンクで接続される無線通信インタフェースでもよい。
なお、管理ノード100が備えるCPUの数は1個でもよい。また、管理ノード100は、媒体リーダ107を備えていなくてもよい。また、管理ノード100は、ユーザが操作する端末装置からネットワーク10経由で制御される場合には、画像信号処理部105や入力信号処理部106を備えていなくてもよい。また、管理ノード100は、通信インタフェース108を備えていなくてもよい。また、ディスプレイ11や入力デバイス12が、管理ノード100の筐体と一体に形成されていてもよい。更に、計算ノード200,300,400を含む各計算ノードも、管理ノード100と同様のユニットを用いて実現できる。各計算ノードは、管理ノード100と同様に、画像信号処理部105、入力信号処理部106および媒体リーダ107の少なくとも何れかを備えていなくてもよい。
図4は、管理ノードの機能例を示す図である。管理ノード100は、割り当て待ちジョブ記憶部110、割り当て対象ジョブ記憶部120、資源情報記憶部130、実行待ちジョブ記憶部140、パラメータ記憶部150、ジョブ受付部160、ジョブ選択部170、資源選択部180およびジョブ実行指示部190を有する。
割り当て待ちジョブ記憶部110、割り当て対象ジョブ記憶部120、資源情報記憶部130、実行待ちジョブ記憶部140およびパラメータ記憶部150は、RAM103やHDD104に確保された記憶領域として実現される。ジョブ受付部160、ジョブ選択部170、資源選択部180およびジョブ実行指示部190は、RAM103に記憶されたプログラムをCPU101,102が実行することで実現される。ジョブ受付部160、ジョブ選択部170、資源選択部180およびジョブ実行指示部190の機能を有するソフトウェアを、「ジョブスケジューラ」と呼ぶこともある。
割り当て待ちジョブ記憶部110は、投入されたジョブの中で資源割り当てがされていないジョブの情報(割り当て待ちジョブ情報)を記憶する。以下の説明では、投入されたジョブの中で資源割り当てがされていないジョブを指して、「割り当て待ちジョブ」と称することがある。割り当て待ちジョブの情報は、当該ジョブを実行するための計算資源の所要量(「計算ノード数」×「専有時間」)を含む。また、割り当て待ちジョブ情報は、後述する優先度の判断に用いられる情報(ジョブ毎の到着時間、発行元アプリケーションおよび当該アプリケーションを利用するユーザの情報など)を含み得る。
割り当て対象ジョブ記憶部120は、今回、計算資源の割り当ての対象とするジョブの情報を記憶する。割り当て対象ジョブ記憶部120に記憶される情報は、割り当て対象ジョブ情報および後続対象ジョブ情報を含む。
割り当て対象ジョブ情報は、割り当て待ちジョブの中で最もスケジューリング優先度が高いジョブを示す情報を含む。ここで、割り当て待ちジョブの中で最もスケジューリング優先度が高いジョブを指して、「割り当て対象ジョブ」と称することがある。
後続対象ジョブ情報は、割り当て対象ジョブと共に仮割り当ての評価対象とするジョブを示す情報を含む。ここで、割り当て対象ジョブと共に仮割り当ての評価対象とするジョブを指して、「後続対象ジョブ」と称することがある。
また、「仮割り当て」とは、割り当て対象ジョブおよび後続対象ジョブを、ある割り当て候補時刻から仮割り当て終端時刻まで、計算資源の割り当てを仮に(本番のスケジューリングに影響しないよう)行うことを示す。「割り当て候補時刻」は、割り当て対象ジョブを割り当て可能な時刻の中で、仮割り当てを行う時刻を示す。「仮割り当て終端時刻」は、仮割り当てを行う際の終端の時刻を示す。
資源情報記憶部130は、ジョブの実行に利用可能な計算資源の情報(利用可能資源情報)を記憶する。計算資源の情報は、ある時刻において、ある計算ノードでどの程度の時間をジョブの実行に利用可能であるかを示す情報である。
実行待ちジョブ記憶部140は、計算ノードの計算資源を割り当て済であり(スケジューリング済であるともいえる)、計算ノードによる実行を待機しているジョブの情報(実行待ちジョブ情報)を記憶する。以下の説明では、計算ノードによる時刻を待機しているジョブを指して、「実行待ちジョブ」と称することがある。実行待ちジョブに割り当てる計算資源の選択は、資源選択部180によって実行される。
パラメータ記憶部150は、ジョブ選択部170および資源選択部180の処理に用いられるパラメータ情報を記憶する。例えば、パラメータ情報は、後続対象ジョブの選択の基準となる情報や、計算資源選択の基準となる情報を含む。
ジョブ受付部160は、ジョブの実行要求を受け付ける。ジョブ受付部160は、受け付けたジョブに応じた割り当て待ちジョブ情報を割り当て待ちジョブ記憶部110に格納する。ジョブの実行要求は、管理ノード100上で動作するアプリケーションによって発行されてもよいし、管理ノード100や計算ノード200,300,400とは異なる情報処理装置によって発行されてもよい。
ジョブ選択部170は、割り当て待ちジョブ記憶部110に記憶された割り当て待ちジョブ情報に基づいて、割り当て待ちジョブを所定の優先度に従ってソートする。ジョブ選択部170は、例えば、ジョブの実行要求の到着順、ユーザが属するグループやユーザの優先度、ジョブの実行要求を発行したアプリケーションの重要度などに応じて、ジョブの優先度を決定する。ここで、ジョブ選択部170は、割り当て対象ジョブ選択部171および後続対象ジョブ選択部172を有する。
割り当て対象ジョブ選択部171は、割り当て待ちジョブ記憶部110に記憶された割り当て待ちジョブ情報に基づいて、割り当て対象ジョブ情報を生成し、割り当て対象ジョブ記憶部120に格納する。割り当て対象ジョブ情報は、今回の計算資源の割り当て対象とする複数のジョブのうち先頭のジョブ(割り当て対象ジョブ)および終端のジョブを示す情報を含む。先頭のジョブ(割り当て対象ジョブ)は、当該複数のジョブのうち最高の優先度のジョブである。終端のジョブは、当該複数のジョブのうち最低の優先度のジョブである。
後続対象ジョブ選択部172は、割り当て待ちジョブ記憶部110に記憶された割り当て待ちジョブ情報に基づいて後続対象ジョブ情報を生成し、割り当て対象ジョブ記憶部120に格納する。後続対象ジョブ選択部172は、ジョブの優先度順に後続対象ジョブの選択を行う。例えば、割り当て待ちジョブの数が多くなると後続対象ジョブの評価に時間がかかるようになる可能性がある。このため、例えば、パラメータ情報において仮割り当ての評価対象とするジョブ数の上限値を予め定める。後続対象ジョブ選択部172は、当該上限値となるまで、後続対象ジョブを選択する。それ以外にも、パラメータ情報において、システムにおける計算資源の空きに応じた割り当て対象ジョブ数の制限値を予め指定しておいてもよい。あるいは、後続対象ジョブ数の上限値を、割り当て待ちジョブ記憶部110に格納された全割り当て待ちジョブ数としてもよい。
上記のように、管理ノード100は、割り当て対象ジョブ情報により、先頭のジョブと終端のジョブとを指定することで、後続対象ジョブ情報を基に、先頭のジョブから終端のジョブまでの一連のジョブを割り当ての評価対象のジョブとして特定できる。
資源選択部180は、割り当て対象ジョブ記憶部120に記憶された割り当て対象ジョブ情報および後続対象ジョブ情報に基づいて、割り当て対象ジョブおよび後続対象ジョブに対する計算資源の割り当てを行う。資源選択部180は、割り当て候補時刻検出部181、仮資源割り当て部182および割り当て資源選択部183を有する。
割り当て候補時刻検出部181は、割り当て対象ジョブ記憶部120に記憶された割り当て対象ジョブ情報に基づいて、割り当て対象ジョブを特定する。割り当て候補時刻検出部181は、資源情報記憶部130に記憶された資源情報およびパラメータ記憶部150に記憶されたパラメータ情報に基づいて、割り当て対象ジョブに対して計算資源を割り当てる起点の時刻の候補(割り当て候補時刻)を複数検出する。
仮資源割り当て部182は、割り当て候補時刻検出部181により検出された複数の割り当て候補時刻それぞれを起点として、割り当て対象ジョブおよび後続対象ジョブに対する計算資源の仮割り当てを行う。例えば、仮資源割り当て部182は、第1の割り当て候補時刻に着目し、当該第1の割り当て候補時刻を起点に、割り当て対象ジョブおよび後続対象ジョブのタイムマップ上への配置を試みる。また、仮資源割り当て部182は、第2の割り当て候補時刻に着目し、当該第2の割り当て候補時刻を起点に割り当て対象ジョブおよび後続対象ジョブのタイムマップ上への配置を試みる。ジョブ配置にはジョブの優先度が考慮される。その結果、仮資源割り当て部182は、割り当て対象ジョブおよび後続対象ジョブに対する計算資源の割り当てパターンの複数の候補を得る。当該割り当てパターンの候補を、仮割り当てパターンと称することがある。仮資源割り当て部182は、複数の仮割り当てパターンの情報を、資源情報記憶部130に格納する。
割り当て資源選択部183は、資源情報記憶部130に記憶された複数の仮割り当てパターンの情報に基づいて、割り当て対象ジョブおよび後続対象ジョブに対して採用する計算資源の仮割り当てパターンを選択する。選択の基準は、例えばパラメータ記憶部150に記憶されたパラメータ情報に予め登録される。例えば、パラメータ情報は、仮割り当てパターンの選択のための基準として、(1)所定期間中に実行可能なジョブの数が大きい、(2)各ジョブの実行完了が早い、(3)所定期間中における空きの計算資源の量が少ない、などの条件を示す情報を含み得る。所定期間は、予め定められる時刻範囲であり、最優先のジョブを実行可能な最も早い時刻を起点とする当該時刻以降の一定の期間でもよいし、現時刻を起点とする当該時刻以降の一定の期間でもよい。各条件は、他の条件に対する相対的な重みをもつ。重みの大きな条件に適合するほど、パターン選択の優先度は高い。割り当て資源選択部183は、選択した仮割り当てパターンに基づいて、実行待ちジョブ情報を生成し、実行待ちジョブ記憶部140に格納する。
ジョブ実行指示部190は、実行待ちジョブ記憶部140に記憶された実行待ちジョブ情報に基づいて、複数の計算ノードそれぞれに対するジョブの実行を指示する。
図5は、タイムマップの例を示す図である。図5では、12個の計算ノードに対して7つのジョブJ1,J2,J3,J4,J5,J6,J7の実行が割り当てられた状態を示している。計算ノードは、計算ノードIDによって識別される。12個の計算ノードには、例えば、計算ノードID“0”〜“11”が付与されている。図5のようなスケジュール内容を示した情報を、タイムマップと称することがある。図5では、何れかのジョブが開始または完了する時刻t0〜t5も図示されている。
図5の例によれば、時刻t0〜t4の期間において、計算ノードID“0”〜“2”で示される3つの計算ノードにジョブJ1が割り当てられている。時刻t0〜t2の期間において、計算ノードID“3”で示される1つの計算ノードにジョブJ2が割り当てられている。時刻t0〜t1の期間において、計算ノードID“4”〜“6”で示される3つの計算ノードにジョブJ3が割り当てられている。時刻t0〜t2の期間において、計算ノードID“7”で示される1つの計算ノードにジョブJ4が割り当てられている。時刻t0〜t3の期間において、計算ノードID“8”〜“11”で示される4つの計算ノードにジョブJ5が割り当てられている。時刻t3〜t5の期間において、計算ノードID“6”〜“11”で示される6つの計算ノードにジョブJ6が割り当てられている。時刻t4〜t5において、計算ノードID“0”〜“3”で示される4つの計算ノードにジョブJ7が割り当てられている。上記12個の計算ノードについて、時刻t0以降、ジョブJ1,J2,J3,J4,J5,J6,J7に既に割り当て済の計算資源以外の計算資源が、利用可能資源R1である。利用可能資源R1は、新規のジョブに対して割り当てることが可能である。
図6は、割り当て待ちジョブの優先度の例を示す図である。ジョブは、ジョブIDによって識別される。以下の説明では、ジョブIDが“A”であるジョブを指して、“ジョブA”のように表記することがある。
例えば、割り当て待ちジョブは、ジョブA,B,C,D,・・・を含む。割り当て対象ジョブ選択部171は、割り当て待ちジョブ記憶部110を参照して、例えば、ジョブAを割り当て対象ジョブとして選択する。後続対象ジョブ選択部172は、ジョブB,C,Dを後続対象ジョブとして選択する。割り当て対象ジョブの選択の際には、各ジョブの優先度(スケジューリング優先度)が考慮される。すなわち、割り当て対象ジョブ選択部171は、割り当て待ちジョブの優先度の高い順に、割り当て対象ジョブを選択する。先頭のジョブはジョブAである。終端のジョブはジョブDである。この場合、割り当て対象ジョブ選択部171は、終端のジョブをジョブDと認識する。幾つのジョブを割り当て対象ジョブとして選択するかは、前述のようにパラメータ情報としてパラメータ記憶部150に予め設定される(例えば、4つ選択する旨が予め設定される)。
図7は、割り当て待ちジョブ情報の例を示す図である。割り当て待ちジョブ情報111は、割り当て待ちジョブ記憶部110に格納される。割り当て待ちジョブ情報111は、ジョブID、要求資源量および資源使用時間の項目を含む。
ジョブIDの項目には、ジョブの識別情報(ジョブID)が登録される。要求資源量の項目には、該当のジョブを実行するために要求されている計算ノードの数が登録される。資源使用時間の項目には、該当のジョブを実行するために要求されている各計算ノードの使用時間が登録される。
例えば、割り当て待ちジョブ情報111には、ジョブIDが“A”、要求資源量が“2”、資源使用時間が“tA”という情報が登録されている。これは、割り当て待ちジョブAが、計算ノードを2つ、時間tAだけ専有して実行されるジョブであることを示す。この場合、ジョブAの計算資源の所要量は、2×tAである。
割り当て待ちジョブ情報111には、他のジョブについても、同様に要求資源量や資源使用時間の情報が登録される。ジョブBは、計算ノードを1つ、時間tBだけ専有して実行されるジョブである。ジョブCは、計算ノードを1つ、時間tCだけ専有して実行されるジョブである。ジョブDは、計算ノードを1つ、時間tDだけ専有して実行されるジョブである。
なお、割り当て待ちジョブ情報111は、優先度の判定に用いられる情報を含んでもよい。優先度の判定に用いられる情報は、例えば、ジョブの実行要求の到着時刻、ジョブの実行要求の発行元のソフトウェアや当該ソフトウェアを利用するユーザ(または、当該ユーザが属するグループ)などの情報を含み得る。あるいは、割り当て待ちジョブ情報111の各レコードが、優先度の順にソートされていてもよい。
図8は、割り当て対象ジョブを管理する構造体の例を示す図である。割り当て対象ジョブおよび後続対象ジョブの管理には、割り当て対象ジョブ情報および後続対象ジョブ情報が用いられる。割り当て対象ジョブ情報および後続対象ジョブ情報は、割り当て対象ジョブ記憶部120に格納される。図8では、割り当て対象ジョブ情報の構造体121(schedjobinfo)および後続対象ジョブ情報の構造体122(jobinfo)の例を示す。
構造体121は、割り当て対象ジョブ情報の構造体の例である。構造体121は、ジョブ情報の数(num_jobs)、先頭ジョブ情報へのポインタ(jobinfo *head_p)および終端ジョブ情報へのポインタ(jobinfo *tail_p)を含む。ジョブ情報の数は、割り当て対象ジョブ情報で示される後続対象ジョブ情報の数(先頭ジョブ、終端ジョブおよび先頭ジョブから終端ジョブの間のジョブの数)である。先頭ジョブ情報へのポインタは、先頭ジョブに相当する後続対象ジョブ情報のRAM103上の格納アドレスを示す。終端ジョブ情報へのポインタは、終端ジョブに対応する後続対象ジョブ情報のRAM103上の格納アドレスを示す。構造体121を用いてRAM103上に格納された具体的なデータを、構造体121のインスタンスと呼ぶことができる(他の構造体についても同様)。割り当て対象ジョブ情報は、構造体121の1つのインスタンスである。
構造体122は、後続対象ジョブ情報の構造体の例である。構造体122は、次のジョブ情報へのポインタ(jobinfo *next_p)、ジョブID(jid)、要求資源量(num_reqnids)および資源使用時間(timespec reqtime)の情報を含む。次のジョブ情報へのポインタは、次の後続対象ジョブ情報のRAM103上の格納アドレスを示す。ジョブID、要求資源量および資源使用時間の情報は、図7で例示した割り当て待ちジョブ情報111の同名の項目に相当する情報である。割り当て対象ジョブ情報は、構造体122の1つのインスタンスである。後続対象ジョブ情報は、構造体122を用いてジョブ毎に作成され得る。
図9は、優先度に従った割り当て対象ジョブの管理例を示す図である。割り当て対象ジョブおよび後続対象ジョブは、割り当て対象ジョブ情報および後続対象ジョブ情報により、各ジョブの優先度に従って管理される。
具体的には、先頭ジョブへのポインタ(head_p)で示される後続対象ジョブ情報が、先頭ジョブ(割り当て対象ジョブ)の情報である。一方、終端ジョブへのポインタ(tail_p)で示される後続対象ジョブ情報が、終端ジョブの情報である。終端ジョブは、割り当て対象ジョブおよび後続対象ジョブの中で最も優先度が低い。そして、次のジョブ情報へのポインタ(next_p)により、優先度が自ジョブの次に低いジョブのジョブ情報を示す。管理ノード100は、このようなデータ構造により、先頭ジョブから終端ジョブまで、優先度の高い順に、ジョブの序列を管理する。
図10は、利用可能資源を管理する構造体の例を示す図である。利用可能資源の管理には、利用可能資源管理情報、利用可能資源情報、資源情報、仮割り当て作業情報および仮割り当てジョブ情報が用いられる。利用可能資源管理情報、利用可能資源情報、資源情報、仮割り当て作業情報および仮割り当てジョブ情報は、資源情報記憶部130に格納される。図10では、利用可能資源管理情報の構造体131(availrschead)、利用可能資源情報の構造体132(availrsc)、資源情報の構造体133(availrscinfo)、仮割り当て作業情報の構造体134(allocrscinfo)および仮割り当てジョブ情報の構造体135(allocrscjobinfo)の例を示す。
構造体131は、利用可能資源管理情報の構造体の例である。構造体131は、先頭の利用可能資源情報へのポインタ(availrsc *head_p)を含む。利用可能資源管理情報は、構造体131の1つのインスタンスである。
構造体132は、利用可能資源情報の構造体の例である。構造体132は、次の要素(利用可能資源情報)へのポインタ(availrsc *next_p)、利用可能資源の時刻(timespec time)、資源情報の数(num_rsc)、先頭の資源情報へのポインタ(availrscinfo *arihead_p)および終端の資源情報へのポインタ(availrscinfo *aritail_p)を含む。
利用可能資源の時刻は、計算資源の空き期間の開始時刻である。利用可能資源情報では、当該開始時刻から利用可能な1以上の計算資源の情報(資源情報)が管理される。資源情報の数は、利用可能資源情報で管理される資源情報の数である。先頭の資源情報へのポインタは、先頭の資源情報のRAM103上の格納アドレスを示す。終端の資源情報へのポインタは、終端の資源情報のRAM103上の格納アドレスを示す。利用可能資源情報は、構造体132の1つのインスタンスである。利用可能資源情報は、構造体132を用いて利用可能資源の時刻毎に作成され得る。
構造体133は、資源情報の構造体の例である。構造体133は、次の資源情報へのポインタ(availrscinfo *next_p)、前の資源情報へのポインタ(availrscinfo *prev_p)、計算資源の利用可能時間(timespec availtime)、利用可能ノード数(num_nids)、利用可能ノードIDを示すポインタ(*nids_p)および仮割り当て作業域(allocrscinfo allocinfo)を含む。
次の資源情報へのポインタは、次の資源情報のRAM103上の格納アドレスを示す。前の資源情報へのポインタは、前の資源情報のRAM103上の格納アドレスを示す。計算資源の利用可能時間は、利用可能資源情報に含まれる時刻を起点とした計算資源の利用可能時間である。当該時刻と利用可能時間とによって、タイムマップにおける1つの期間を指定できる。利用可能ノード数は、利用可能な計算ノードの数である。利用可能ノードIDを示すポインタは、利用可能な計算ノードの計算ノードIDのリストが格納されたRAM103上の格納アドレスを示す。仮割り当て作業域は、ジョブに対する計算資源の仮割り当てを行うための作業用の情報である。資源情報は、構造体133の1つのインスタンスである。資源情報は、構造体133を用いて複数作成され得る。
構造体134は、仮割り当て作業情報の構造体の例である。構造体134は、全仮割り当てノード数(total_alloc_nids)、仮割り当てジョブ情報の数(num_ajs)および先頭仮割り当てジョブ情報へのポインタ(allocrscjobinfo *aj_p)を含む。
全仮割り当てノード数は、ジョブを仮割り当て済である計算ノード数である。仮割り当てジョブ情報の数は、仮割り当てされたジョブの情報(すなわち、当該ジョブ)の数である。先頭仮割り当てジョブ情報へのポインタは、先頭の仮割り当てジョブ情報のRAM103上の格納アドレスを示す。仮割り当て作業情報は、構造体134の1つのインスタンスである。仮割り当て作業情報は、構造体134を用いて複数作成され得る。
構造体135は、仮割り当てジョブ情報の構造体の例である。構造体135は、次の仮割り当てジョブ情報へのポインタ(allocrscjobinfo *next_p)、ジョブID(jid)および獲得資源数(num_alloc_nids)を含む。次の仮割り当てジョブ情報へのポインタは、次の仮割り当て情報のRAM103上の格納アドレスを示す。ジョブIDは、仮割り当てされたジョブのジョブIDである。獲得資源数は、当該ジョブIDで示されるジョブによって獲得されている(当該ジョブに割り当てられている)計算ノードの数である。仮割り当てジョブ情報は、構造体135の1つのインスタンスである。仮割り当てジョブ情報は、構造体135を用いて複数作成され得る。
図11は、時刻毎の利用可能資源の管理例を示す図である。時刻t0,t1,t2,t3,t4,t5それぞれに対する利用可能資源は、利用可能資源情報によって管理される。利用可能資源管理情報は、先頭の利用可能資源情報に対するポインタを含む。ここで、各利用可能資源情報は、時刻の早い順に、ポインタ(availrsc *next_p)によって連結される。時刻t0〜t5では、時刻t0が最も早い時刻である。よって、先頭の利用可能資源情報は、時刻t0に関する利用可能資源情報となる。
以降、時刻t0の利用可能資源情報のポインタは、時刻t1の利用可能資源情報を示す。時刻t1の利用可能資源情報のポインタは、時刻t2の利用可能資源情報を示す(時刻t2以降の利用可能資源情報の図示を省略している)。時刻t3の利用可能資源情報のポインタは、時刻t4の利用可能資源情報を示す。時刻t4の利用可能資源情報のポインタは、時刻t5の利用可能資源情報を示す。
図12は、時刻t1に対する利用可能資源の管理例を示す図である。時刻t1において、利用可能資源は、次の2つに区分される。第1の利用可能資源は、計算ノードID“6”の1つの計算ノードの時刻t1以降のt3−t1(利用可能時間)の時間帯である。ここで、時刻に対するt3−t1の演算は、時刻t3と時刻t1との時間差を求める演算である(他の時刻についても同様)。すなわち、計算ノードID“6”を時刻t1から時刻t3まで利用可能である。第2の利用可能資源は、計算ノードID“4,5”の2つの計算ノードの時刻t1以降の時間帯(上限なし)である(図中、この場合の利用可能時間を無限大の記号“∞”により表わす)。
利用可能時間は、構造体133のavailtimeに相当する。利用可能ノード数は、構造体133のnum_nidsに相当する。利用可能ノードIDは、構造体133のポインタnids_pで示される情報に相当する。時刻t1における上記の第1の利用可能資源および第2の利用可能資源は、2つの資源情報によって管理される。各資源情報は、利用可能時間の短い順に連結される。
具体的には、時刻t1の利用可能資源情報では、num_rscが“2”となる。ポインタarihead_pは、第1の利用可能資源に対応する第1の資源情報を示す。ポインタaritail_pは、第2の利用可能資源に対応する第2の資源情報を示す。
第1の資源情報は、次の情報を含む。ポインタnext_pは、第2の資源情報を示す。第1の資源情報には前の資源情報が存在しないため、ポインタprev_pはNULLである。availtimeは“t3−t1”である。num_nidsは“1”である。ポインタnids_pはノードID“6”を示す。allocinfoは、第1の利用可能資源に対する仮割り当て作業域である。
第2の資源情報は、次の情報を含む。第2の資源情報には次の資源情報が存在しないため、ポインタnext_pはNULLである。ポインタprev_pは、第1の資源情報を示す。availtimeは“∞”(無限大)である。num_nidsは“2”である。nids_pはノードID“4,5”を示す。allocinfoは、第2の利用可能資源に対する仮割り当て作業域である。
図13は、時刻t1に割り当てたジョブの管理例を示す図である。図13では、仮にジョブJ8を時刻t1で実行開始するように割り当てる場合の仮割り当て作業情報を例示している。ここで、ジョブJ8の計算資源の所要量は、計算ノード3つ、および、利用時間t3−t1であるとする。この場合、前述の時刻t1における利用可能資源を用いてジョブJ8の実行が可能である。時刻t1における利用可能資源をジョブJ8に仮割り当てする場合、ジョブJ8の仮割り当て状況は、図12で例示した第1の資源情報および第2の資源情報によって管理される。
具体的には、第1の資源情報において、仮割り当て作業域(仮割り当て作業情報)allocinfoは、次の情報を含む。total_alloc_nidsは“1”である。num_ajsは“1”である。ポインタaj_pは、ジョブJ8に関する第1の仮割り当てジョブ情報を示す。
第1の仮割り当てジョブ情報は、次の情報を含む。仮割り当てされているジョブは1つ(ジョブJ8のみ)なので、ポインタnext_pはNULLである。jidは、仮割り当てされたジョブJ8のジョブIDである(図13では、これを“仮割り当てジョブJ8のID”と表記している)。num_alloc_nidsは“1”である(仮割り当てした計算ノードが計算ノードID“6”の1つの計算ノードであるため)。
また、第2の資源情報において、仮割り当て作業域(仮割り当て作業情報)allocinfoは次の情報を含む。total_alloc_nidsは“2”である。num_ajsは“1”である。ポインタaj_pは、ジョブJ8に関する第2の仮割り当てジョブ情報を示す。
第2の仮割り当てジョブ情報は、次の情報を含む。仮割り当てされているジョブは1つ(ジョブJ8のみ)なので、ポインタnext_pはNULLである。jidは、仮割り当てされたジョブJ8のジョブIDである。num_alloc_nidsは“2”である(仮割り当てした計算ノードが計算ノードID“4,5”の2つの計算ノードであるため)。
図14は、仮割り当てを管理する構造体の例を示す図である。仮割り当ての管理には、仮割り当て管理情報、仮割り当て情報、ジョブ割り当て情報およびジョブ割り当て資源情報が用いられる。仮割り当て管理情報、仮割り当て情報、ジョブ割り当て情報およびジョブ割り当て資源情報は、資源情報記憶部130に格納される。図14では、仮割り当て管理情報の構造体136(joballocsummaryhead)、仮割り当て情報の構造体137(joballocsummary)、ジョブ割り当て情報の構造体138(joballoc)およびジョブ割り当て資源情報の構造体139(joballocrscinfo)の例を示す。
構造体136は、仮割り当て管理情報の構造体の例である。構造体136は、仮割り当て情報の数(num_joballocsum)および先頭仮割り当て情報へのポインタ(joballocsummary *head_p)を含む。仮割り当て管理情報では、各ジョブに関する仮割り当てパターンを表わす仮割り当て情報が管理される。1つの仮割り当て情報が1つの仮割り当てパターンに相当する。仮割り当て情報の数は、該当の仮割り当て管理情報で管理される仮割り当て情報の数である。先頭仮割り当て情報へのポインタは、先頭の仮割り当て情報のRAM103上の格納アドレスを示す。仮割り当て管理情報は、構造体136の1つのインスタンスである。
構造体137は、仮割り当て情報の構造体の例である。構造体137は、次の仮割り当て情報(要素)へのポインタ(joballocsummary *next_p)、割り当てたジョブ数(num_jids)、割り当て開始時刻(timespec alloc_start)、割り当て完了時刻(timespec alloc_end)、先頭のジョブ割り当て情報へのポインタ(joballoc *head_p)、および、利用可能資源情報へのポインタ(availrsc *ar_p)を含む。
次の仮割り当て情報へのポインタは、次の仮割り当て情報のRAM103上の格納アドレスを示す。仮割り当て情報では、複数のジョブに対する計算資源の仮割り当てを管理し得る。割り当てたジョブ数は、該当の仮割り当て情報で管理されるジョブの数である。割り当て開始時刻は、仮割り当てされた複数のジョブのうちの最初のジョブに割り当てた時刻である(当該最初のジョブの実行開始時刻に相当する)。割り当て完了時刻は、当該複数のジョブのうちの最後のジョブに割り当てた時刻である(当該最後のジョブの実行開始時刻に相当する)。先頭のジョブ割り当て情報へのポインタは、仮割り当てされたジョブに関する先頭のジョブ割り当て情報のRAM103上の格納アドレスを示す。利用可能資源情報は、仮割り当てに用いた計算資源に関する利用可能資源情報である。仮割り当て情報は、構造体137の1つのインスタンスである。仮割り当て情報は、構造体137を用いて仮割り当てパターン毎に作成され得る。
構造体138は、ジョブ割り当て情報の構造体の例である。構造体138は、次のジョブ割り当て情報へのポインタ(joballoc *next_p)、ジョブID(jid)およびジョブ割り当て資源情報(joballocrscinfo ari)を含む。
次のジョブ割り当て情報へのポインタは、次のジョブ割り当て情報のRAM103上の格納アドレスを示す。ジョブIDは、仮割り当てされたジョブのジョブIDである。ジョブ割り当て資源情報は、ジョブIDで示されるジョブに対する計算資源の割り当て状況に関する情報である。ジョブ割り当て情報は、構造体138の1つのインスタンスである。ジョブ割り当て情報は、構造体138を用いて複数作成され得る。
構造体139は、ジョブ割り当て資源情報の構造体の例である。構造体139は、資源割り当て開始時刻(timespec start)、資源割り当て終了時刻(timespec end)、割り当て資源数(num_nids)、割り当てノードIDへのポインタ(*nids_p)を含む。
資源割り当て開始時刻は、ジョブ割り当て情報に含まれるジョブIDのジョブに対する計算資源の割り当て開始時刻である(当該ジョブの実行を当該開始時刻に開始する)。資源割り当て終了時刻は、ジョブ割り当て情報に含まれるジョブIDのジョブに対する計算資源の割り当て終了時刻である(当該ジョブの実行が当該終了時刻に完了する)。割り当て資源数は、割り当てられた計算ノードの数である。割り当てノードIDは、割り当てられた計算ノードの計算ノードIDである。ジョブ割り当て資源情報は、構造体139の1つのインスタンスである。ジョブ割り当て資源情報は、構造体139を用いて複数作成され得る。
図15は、時刻t1を起点としたジョブの仮割り当ての例を示す図である。図15では、時刻t1を起点として、ジョブA,B,C,Dを仮割り当てするパターンに相当する仮割り当て情報の例を示している。
仮割り当て情報は、次の情報を含む。ポインタnext_pは次の仮割り当て情報を示す(図15では次の仮割り当て情報の図示を省略している)。例えば、各仮割り当て情報は、割り当て開始時刻(alloc_start)の早い順に連結される。num_jidsは“4”である。4つのジョブA,B,C,Dに対する仮割り当てを示すからである。alloc_startは“t1”である。時刻t1が仮割り当ての起点の時刻(割り当て開始時刻)だからである。alloc_endは“t1+tA”である。最後に実行開始されるジョブDの実行開始時刻が時刻t1+tAだからである。ポインタhead_pは、先頭のジョブ割り当て情報を示す。ポインタar_pは、仮割り当てに用いた利用可能資源情報を示す。
図16は、仮割り当てされた複数のジョブの管理例を示す図である。例えば、時刻t1を起点としてジョブA,B,C,Dを仮割り当てしたパターンでは、それぞれに対する仮割り当ての内容を次のように管理する。この場合、ジョブA,B,C,Dそれぞれについて、構造体138を用いてジョブ割り当て情報が作成されることになる(計4つ)。各ジョブ割り当て情報は、ジョブの優先度の高い順に連結される。ただし、図16では、ジョブC,Dそれぞれのジョブ割り当て情報の図示を省略している。
前述のように、仮割り当て情報のポインタhead_pは、先頭のジョブ割り当て情報を示す。ジョブA,B,C,Dのうち、ジョブAの優先度が最高なので、先頭のジョブ割り当て情報は、ジョブAのジョブ割り当て情報である。ジョブAのジョブ割り当て情報は、次の情報を含む。ポインタnext_pは次のジョブ割り当て情報を示す。ジョブAの次に優先度が高いジョブはジョブBである。このため、ジョブAに対する次のジョブ割り当て情報は、ジョブBのジョブ割り当て情報である。jidはジョブAのジョブID(“A”)である。
更に、ジョブAのジョブ割り当て資源情報は、次の情報を含む。startが“t1”である。endが“t1+tA”である(ジョブAの資源使用時間がtAであるため)。ここで、t1+tAは、時刻t1から時間tAが経過した時刻を求める演算である(他の時刻についての演算も同様)。num_nidsは“2”である。計算ノードID“4,5”で示される2つの計算ノードがジョブAに割り当てられたからである。ポインタnids_pは、計算ノードID“4,5”の情報を示す。
また、ジョブBのジョブ割り当て情報は、次の情報を含む。ポインタnext_pは次のジョブ割り当て情報を示す。ジョブBの次に優先度が高いジョブはジョブCである。このため、ジョブBに対する次のジョブ割り当て情報は、ジョブCのジョブ割り当て情報である。jidはジョブBのジョブID(“B”)である。
更に、ジョブBのジョブ割り当て資源情報は、次の情報を含む。startが“t1”である。endが“t1+tB”である(ジョブBの資源使用時間がtBであるため)。num_nidsは“1”である。計算ノードID“6”で示される1つの計算ノードがジョブBに割り当てられたからである。ポインタnids_pは、計算ノードID“6”の情報を示す。
ジョブCのジョブ割り当て情報もジョブA,Bそれぞれのジョブ割り当て情報と同様に、ジョブCに対応する情報となる。ジョブDのジョブ割り当て情報もジョブA,Bそれぞれのジョブ割り当て情報と同様に、ジョブDに対応する情報となる。
図17は、実行待ちジョブ情報の例を示す図である。実行待ちジョブ情報141は、実行待ちジョブ記憶部140に格納される。実行待ちジョブ情報141は、ジョブID、実行開始時刻および利用資源の情報を含む。
ジョブIDの項目には、ジョブIDが登録される。実行開始時刻の項目には、実行開始時刻が登録される。利用資源の項目には、計算ノードの計算ノードIDが登録される。例えば、実行待ちジョブ情報141には、ジョブIDが“A”、実行開始時刻が“t2”、利用資源が“3,4”という情報が登録される。これは、ジョブAの実行開始時刻が時刻t2であり、ジョブAの実行に利用される計算ノードが計算ノードID“3,4”で示される2つの計算ノードであることを示す。実行待ちジョブ情報141には、ジョブB,C,Dそれぞれについても同様に、実行開始時刻や利用資源の情報が登録される。
図18は、パラメータ情報の例を示す図である。パラメータ情報151は、パラメータ記憶部150に予め格納される。パラメータ情報151は、ジョブのスケジューリングを行う際に用いられる各種の情報を含む。具体的には、パラメータ情報151は、評価対象とする後続対象ジョブ数、割り当て候補時刻の上限および割り当て採用基準の情報を含む。
評価対象とする後続対象ジョブ数は、仮割り当ての対象の後続対象ジョブの数であり、例えば4である。割り当て候補時刻の上限は、最も早い割り当て時刻に対する割り当て候補時刻の上限であり、例えば時間Δtである。時刻t1が最も早い割り当て時刻である場合、割り当て候補時刻の上限は時刻t1からΔt後の時刻(t1+Δt)ということになる。
割り当て採用基準は、各ジョブに対する計算資源の複数の仮割り当てパターンの中から、実際に採用するパターンを選択するための基準である。例えば、割り当て採用基準は、(1)仮割り当てジョブ数が多い、(2)ジョブの実行完了が早い、(3)対象期間の空き資源量が少ない、という基準を含む。上記の3つには優先度が設けられている。(1)の採用基準は最も優先度が高い。(2)の採用基準は2番目に優先度が高い。(3)の採用基準は最も優先度が低い。採用基準は、上記の複数のうちの何れか1つでもよい。また、例示した採用基準以外の採用基準でもよい。
図19は、管理ノードのデータフローの例を示す図である。図19では、図4で例示した各部と、各部による参照あるいは更新される情報との関係を例示している。具体的には、ジョブ受付部160は、割り当て待ちジョブ情報を追加する。割り当て対象ジョブ選択部171は、割り当て待ちジョブ情報から、割り当て対象ジョブ情報を抽出する。後続対象ジョブ選択部172は、パラメータ情報(評価対象とする後続対象ジョブ数)に基づいて、割り当て待ちジョブ情報から、後続対象ジョブ情報を抽出する。割り当て対象ジョブ選択部171は、後続対象ジョブ選択部172によって抽出された最後の後続対象ジョブ情報を終端のジョブの情報として特定する(割り当て対象ジョブ情報に終端ジョブ情報へのポインタを登録する)。
割り当て候補時刻検出部181は、割り当て対象ジョブ情報、パラメータ情報(割り当て候補時刻の上限)および利用可能資源情報に基づいて、割り当て候補時刻および仮割り当て終端時刻を求める。割り当て候補時刻は、ジョブの割り当ての起点となる時刻の候補である。仮割り当て終端時刻は、最優先のジョブを最も早く割り当て可能な時刻から割り当て候補時刻の上限に達する時刻である。例えば、最優先のジョブを最も早く割り当て可能な時刻が時刻t1の場合、仮割り当て終端時刻は、時刻t1+Δtである。割り当て候補時刻検出部181は、時刻t1から時刻t1+Δtの間で割り当て候補時刻を選択することになる。
仮資源割り当て部182は、割り当て対象ジョブ情報、後続対象ジョブ情報、割り当て候補時刻、仮割り当て終端時刻および利用可能資源情報(仮割り当て情報に含まれる)に基づいて、各ジョブに対する計算資源の仮割り当てを行い、仮割り当て情報を変更する。ここで、仮資源割り当て部182は、仮割り当てに伴って、利用可能資源情報を仮割り当て情報へコピーする(図19では、当該コピー処理を仮資源割り当て部182の処理として符号182aにより図示している)。仮割り当てに伴って、本番の利用可能資源情報を直接更新しないようにするためである。
割り当て資源選択部183は、仮割り当て情報およびパラメータ情報(割り当て採用基準)を参照して、複数の仮割り当てパターンの中から、採用する仮割り当てパターンを選択する。割り当て資源選択部183は、採用した仮割り当てパターンに応じて、利用可能資源情報および実行待ちジョブ情報を更新する(仮割り当てパターンの内容を実際のスケジュールに反映させる)。
ジョブ実行指示部190は、実行待ちジョブ情報に基づいて、各計算ノードに対するジョブの実行を指示する。
次に、管理ノード100による処理手順を説明する。なお、割り当て対象ジョブ選択部171および後続対象ジョブ選択部172は、割り当て対象ジョブ情報および後続対象ジョブ情報を作成済であるとする。
図20は、管理ノードの処理例を示す図である。以下、図20に示す処理をステップ番号に沿って説明する。
(S1)割り当て候補時刻検出部181は、複数の割り当て候補時刻を検出する。また、割り当て候補時刻検出部181は、仮割り当て終端時刻を求める。前述のように、仮割り当て終端時刻は、最も早い割り当て候補時刻に、割り当て候補時刻の上限の時間Δtを加えた時刻である。処理の詳細は後述される。
(S2)仮資源割り当て部182は、割り当て候補時刻の先頭(最も早い時刻)から終端(最も遅い時刻)まで順に1つずつ選択して、ステップS3,4を繰り返し処理する。
(S3)仮資源割り当て部182は、選択した割り当て候補時刻に関する仮割り当て情報を作成し、資源情報記憶部130に格納する。また、仮資源割り当て部182は、仮割り当て処理に利用する利用可能資源情報をコピーして、仮割り当て情報に追加する。コピーされた利用可能資源情報は、資源情報記憶部130の所定の作業領域に格納される。以後、選択した割り当て候補時刻に関する仮割り当てに伴い、コピーされた利用可能資源情報が参照される(当該コピーされた利用可能資源情報が更新されることもある)。
(S4)仮資源割り当て部182は、選択した割り当て候補時刻から仮割り当て終端時刻までの期間について仮資源割り当てを行い、仮割り当て情報に結果を追加する。処理の詳細は後述される。
(S5)仮資源割り当て部182は、複数の割り当て候補時刻の全てについてステップS3,S4の処理を完了すると、処理をステップS6に進める。ステップS4を実行することで、1つの割り当て候補時刻に対して1つの仮割り当てパターンが作成されることになる。割り当て候補時刻毎にステップS4が繰り返し実行されることで、複数の仮割り当てパターンが作成される。
(S6)割り当て資源選択部183は、作成された複数の仮割り当てパターンを比較し、1つの仮割り当てパターンを選択する。割り当て資源選択部183は、パラメータ情報151に含まれる割り当て採用基準に基づいて、仮割り当てパターンの選択を行う。
(S7)仮資源割り当て部182は、仮資源割り当て用に確保した作業領域を初期化する。
図21は、割り当て候補時刻検出の例を示すフローチャートである。以下、図21に示す処理をステップ番号に沿って説明する。以下の手順は、図20のステップS1に相当する。
(S11)割り当て候補時刻検出部181は、スケジューリングの優先度順に並んでいる割り当て対象ジョブ情報および後続対象ジョブ情報(struct schedjobinfo.head_pのリスト)から先頭のジョブ(最高優先度のジョブ)を取得する。割り当て候補時刻検出部181は、先頭のジョブに対する利用可能資源数を0とする。
(S12)割り当て候補時刻検出部181は、ステップS18までの手順により先頭のジョブを割り当て可能な最も早い時刻を検索する。そのために、割り当て候補時刻検出部181は、複数の利用可能資源情報(struct availrschead.head_pのリスト)の先頭の時刻から終端の時刻まで、1つずつ時刻(struct availrsc.time)を選択して、ステップS13〜S17を繰り返し実行する。ここで選択された時刻をステップS13〜S19において「特定時刻」と称する。
(S13)割り当て候補時刻検出部181は、特定時刻における複数の資源情報(struct availrsc.arihead_pのリスト)から、利用可能時間(struct availrscinfo.availtime)の長い順に1つずつ選択して、ステップS14〜S16を繰り返し実行する。なお、struct availrsc.arihead_pのリストでは、各資源情報が利用可能時間(struct availrscinfo.availtime)の長い順に並んでいる。
(S14)割り当て候補時刻検出部181は、選択した資源情報の利用可能時間が、先頭のジョブの資源使用時間より長いか否かを判定する。長い場合、処理をステップS15に進める。長くない場合、処理をステップS18に進める。当該判定は、資源情報の利用可能時間(struct availrscinfo.availtime)とジョブ情報の資源使用時間(struct jobinfo.reqtime)とを比較することで行える。ステップS14でNoの場合は、現在着目している利用可能資源情報から先頭のジョブの割り当て可能な時刻を見出すことはできないため、ステップS18に進めて次の利用可能資源情報から割り当て可能な時刻を探索することになる。
(S15)割り当て候補時刻検出部181は、着目する計算資源を先頭のジョブの実行に利用可能と判断し、利用可能資源数としてカウントする(struct availrscinfo.num_nidsの値を利用可能資源数に加算する)。
(S16)割り当て候補時刻検出部181は、先頭のジョブに対する利用可能資源数のカウント値が、先頭のジョブの要求資源量以上であるか否かを判定する。要求資源量以上である場合、処理をステップS19に進める。要求資源量以上でない場合、処理をステップS17に進める。当該判定は、先頭のジョブに対する利用可能資源数と、ジョブ情報の要求資源量(struct jobinfo.num_reqnids)とを比較することで行える。
(S17)割り当て候補時刻検出部181は、特定時刻における全ての資源情報について処理を終了すると、処理をステップS18に進める。処理をステップS18に進める場合、割り当て候補時刻検出部181は、先頭のジョブに対する利用可能資源数を0にリセットする。処理をステップS18に進める場合、現在着目している利用可能資源情報では先頭のジョブに対して割り当て可能な時刻を得られなかったことを意味する。
(S18)割り当て候補時刻検出部181は、通常、各利用可能資源情報を順番に参照しながら、ステップS13〜S17を繰り返し実行することで、何れかのタイミングにおいてステップS16によりループを抜けることになる。ただし、探索可能な全ての利用可能資源情報を処理しても、先頭のジョブに対する割り当て候補時刻を検出できない場合、割り当て候補時刻検出部181は、エラー情報を出力して割り当て候補時刻の検出処理を終了してもよい。
(S19)割り当て候補時刻検出部181は、現在着目している特定時刻(struct availrsc.time)に対して先頭のジョブを割り当て可能と判断し、当該特定時刻を、割り当て可能時刻T1としてRAM103に保持する。第2の実施の形態の例では、割り当て可能時刻T1=t1である。なお、割り当て候補時刻検出部181は、先頭のジョブに対する利用可能資源数を0にリセットする。
(S20)割り当て候補時刻検出部181は、ステップS25までの手順により、先頭のジョブを割り当て可能な、時刻T1よりも後の時刻を検索する。そのために、割り当て候補時刻検出部181は、複数の利用可能資源情報(struct availrschead.head_pのリスト)の時刻T1から割り当て候補時刻上限(=仮割り当て終端時刻T1+Δt)まで、1つずつ時刻(struct availrsc.time)を選択して、ステップS21〜S24を繰り返し実行する。ここで選択された時刻をステップS21〜S26において「特定時刻」と称する。
(S21)割り当て候補時刻検出部181は、特定時刻における複数の資源情報(struct availrsc.arihead_pのリスト)から、利用可能時間(availtime)の長い順に1つずつ選択して、ステップS22〜S24を繰り返し実行する。なお、struct availrsc.arihead_pのリストでは、各資源情報が利用可能時間(struct availrscinfo.availtime)の長い順に並んでいる。
(S22)割り当て候補時刻検出部181は、選択した資源情報の利用可能時間が、先頭のジョブの資源使用時間より長いか否かを判定する。長い場合、処理をステップS23に進める。長くない場合、処理をステップS27に進める。当該判定は、ステップS14と同様に行える。
(S23)割り当て候補時刻検出部181は、着目する計算資源を先頭のジョブの実行に利用可能と判断し、利用可能資源数としてカウントする(struct availrscinfo.num_nidsの値を利用可能資源数に加算する)。
(S24)割り当て候補時刻検出部181は、先頭のジョブに対する利用可能資源数のカウント値が、先頭のジョブの要求資源量以上であるか否かを判定する。要求資源量以上である場合、処理をステップS26に進める。要求資源量以上でない場合、処理をステップS25に進める。当該判定は、ステップS16と同様に行える。
(S25)割り当て候補時刻検出部181は、特定時刻における全ての資源情報について処理を終了すると、処理をステップS27に進める。処理をステップS27に進める場合、割り当て候補時刻検出部181は、先頭のジョブに対する利用可能資源数を0にリセットする。処理をステップS27に進める場合、現在着目している利用可能資源情報では先頭のジョブに対して割り当て可能な時刻を得られなかったことを意味する。
(S26)割り当て候補時刻検出部181は、着目する特定時刻(struct availrsc.time)に対して先頭のジョブを割り当て可能と判断し、当該特定時刻を、割り当て可能時刻としてRAM103に保持する。そして、処理をステップS27に進める。
(S27)割り当て候補時刻検出部181は、割り当て可能時刻T1よりも後の時刻の全ての利用可能資源情報について処理を終了すると、割り当て候補時刻検出処理を終了する。この段階でRAM103に保持されている割り当て可能時刻が、割り当て候補時刻である。例えば、割り当て候補時刻検出部181は、ステップS20〜S27の手順により、割り当て可能時刻T1=t1に対し、時刻t1よりも後の割り当て候補時刻として、時刻t2,t3,t4を検出する。
図22は、仮資源割り当ての例を示すフローチャートである。以下、図22に示す処理をステップ番号に沿って説明する。以下の手順は、図20のステップS4に相当する。
(S31)仮資源割り当て部182は、着目している割り当て候補時刻に対応する利用可能資源情報(指定された利用可能資源情報)を取得する。仮資源割り当て部182は、指定された利用可能資源情報を起点とする複数の利用可能資源情報のうち、開始時刻から終了時刻までの各時刻(struct availrsc.time)に対応する利用可能資源情報を1つずつ選択し、ステップS32,S33を順に処理する。開始時刻は、着目している割り当て候補時刻に相当する。終了時刻は、複数の利用可能資源情報に含まれる時刻(struct availrsc.time)のうち仮割り当て終端時刻を超過しない最も遅い時刻に相当する。ここで、ステップS31で選択された利用可能資源情報の時刻をステップS32,S33の処理において「特定時刻」と称する。
(S32)仮資源割り当て部182は、特定時刻に対して割り当て可能なジョブ(仮割り当て対象ジョブ)を全て選択する。具体的には、仮資源割り当て部182は、割り当て対象ジョブ情報および後続対象ジョブ情報から特定時刻の利用可能資源情報を参照して、割り当て可能なジョブを選択し、仮割り当て対象ジョブとしてRAM103に保持する。処理の詳細は後述される。
(S33)仮資源割り当て部182は、仮割り当て対象ジョブと仮割り当て情報に基づいて、仮割り当て対象ジョブに対する計算資源の仮割り当て(仮割り当て対象ジョブのタイムマップへの配置)を行う。仮資源割り当て部182は、仮割り当ての結果を、仮割り当て情報に反映させる。処理の詳細は後述される。
(S34)仮資源割り当て部182は、開始時刻から終了時刻までの各時刻について仮割り当て対象ジョブの選択および仮割り当て対象ジョブの配置を実行すると、着目している割り当て候補時刻を起点とした仮資源割り当ての処理を終了する。
図23は、仮割り当て対象ジョブの選択例を示すフローチャートである。以下、図23に示す処理をステップ番号に沿って説明する。以下の手順は、図22のステップS32に相当する。
(S101)仮資源割り当て部182は、割り当て対象ジョブ情報および後続対象ジョブ情報を、優先度順に処理する。具体的には、仮資源割り当て部182は、割り当て対象ジョブ情報で示される複数の後続対象ジョブ情報から優先度の高い順に1つずつ選択して、ステップS102〜S110を繰り返し実行する。なお、各後続対象ジョブ情報は、優先度の高い順に連結されている(struct schedjobinfo.head_pのリスト)。ここで、選択された後続対象ジョブ情報に対応するジョブを、ステップS102〜S110において、「対象ジョブ」と称する。仮資源割り当て部182は、対象ジョブに対する仮割り当て資源数を0とする。
(S102)仮資源割り当て部182は、特定時刻の利用可能時間の短い順に資源情報を処理する。具体的には、仮資源割り当て部182は、特定時刻における複数の資源情報のうち、利用可能時間の短い順(struct availrsc.aritail_pのリスト)に資源情報を1つずつ選択して、ステップS103〜S107を繰り返し実行する。
(S103)仮資源割り当て部182は、着目する資源情報の利用可能時間(struct availrscinfo.availtime)が、着目する後続対象ジョブ情報の資源使用時間(struct jobinfo.reqtime)よりも長いかを判定する。利用可能時間の方が長い場合、処理をステップS104に進める。利用可能時間の方が長くない場合、処理をステップS108に進める。
(S104)仮資源割り当て部182は、着目する資源情報において、仮割り当てに未利用の部分があるか否かを判定する。未利用の部分がある場合、処理をステップS105に進める。未利用の部分がない場合、処理をステップS108に進める。ここで、ステップS104の判定は、資源情報に含まれる仮割り当て作業情報の全仮割り当てノード数(struct allocrscinfo.total_alloc_nids)と、資源情報の利用可能ノード数(struct availrscinfo.num_nids)との比較により行える。全仮割り当てノード数の方が、利用可能ノード数よりも小さければ、全ての計算資源が仮割り当てに利用されているわけではなく、未利用の計算資源が残っていることになる。一方、全仮割り当てノード数が利用可能ノード数に一致していれば、全ての計算資源が仮割り当てに利用済であり、未利用の計算資源が残っていないことになる。
(S105)仮資源割り当て部182は、着目する計算資源を対象ジョブへの仮割り当て資源数としてカウントする。具体的には、仮割り当て資源数に加算されるカウント数は、min(利用可能資源数−仮割り当て済資源数,対象ジョブの要求資源数−カウント済の仮割り当て資源数)である。ここで、演算min(x,y)は、x,yのうち小さい方を選択する演算である。また、仮割り当て済資源数は、着目する資源情報のstruct allocrscinfo.total_alloc_nidsの値である。
(S106)仮資源割り当て部182は、利用可能資源情報の仮割り当て作業域を更新する。具体的には、仮資源割り当て部182は、ステップS105でカウントした仮割り当て資源数を、着目する資源情報の仮割り当て作業域(struct availrscinfo.allocinfo)の全仮割り当てノード数(struct allocinfo.total_alloc_nids)へ加算する。これにより、対象ジョブに対して仮割り当てした分の計算資源が利用済として管理される。
(S107)仮資源割り当て部182は、対象ジョブへの仮割り当て資源数が対象ジョブの要求資源数に一致するか否かを判定する。一致する場合、処理をステップS109に進める(ループを抜ける)。一致しない場合、処理をステップS108に進める。この判定は、ステップS105でカウントした仮割り当て資源数が、対象ジョブの要求資源数(struct jobinfo.num_reqnids)に達しているか否かを確認することで行われる。
(S108)仮資源割り当て部182は、特定時刻における全ての資源情報について処理を終了すると、処理をステップS110に進める。
(S109)仮資源割り当て部182は、対象ジョブに関する情報を仮割り当て対象ジョブとして保持する。具体的には、仮資源割り当て部182は、対象ジョブに対応する仮割り当て対象ジョブ情報を、RAM103上に保持する。仮割り当て対象ジョブ情報は、後続対象ジョブ情報と同様の情報を含む。ステップS109が繰り返し実行されることで、複数の仮割り当て対象ジョブを示す複数の仮割り当て対象ジョブ情報が保持され得る。このとき、仮資源割り当て部182は、ジョブ資源使用時間(struct jobinfo.reqtime)の長い順に仮割り当て対象ジョブ情報を並べておく。そして、処理をステップS110に進める。
(S110)仮資源割り当て部182は、今回の対象ジョブが仮割り当て対象ジョブとして保存されたか否かを判定する。今回の対象ジョブが仮割り当て対象ジョブとして保存された場合、処理をステップS111に進める。今回の対象ジョブが仮割り当て対象ジョブとして保存されなかった場合、処理をステップS112に進める(ループを抜ける)。対象ジョブが仮割り当て対象ジョブとして保存されていない場合に、次のジョブの仮割り当てを行わない(ステップS112に進める)理由は、スケジュール優先度の低いジョブが、スケジュール優先度の高いジョブよりも前に実行されないようにするためである。
(S111)仮資源割り当て部182は、後続対象ジョブについて全て処理を完了すると、処理をステップS112に進める。
(S112)仮資源割り当て部182は、利用可能資源情報の仮割り当て作業域をクリアする。具体的には、仮資源割り当て部182は、特定時刻に対する全ての仮割り当て対象ジョブの保存が完了すると、着目する資源情報の仮割り当て作業域(struct availrscinfo.allocinfo)をクリアする。
図24は、仮割り当て対象ジョブの配置例を示すフローチャートである。以下、図24に示す処理をステップ番号に沿って説明する。以下の手順は、図22のステップS33に相当する。
(S121)仮資源割り当て部182は、特定時間に対応する利用可能資源情報を利用時間が短い資源から長い資源へ順に処理する。具体的には、仮資源割り当て部182は、利用可能資源情報で示される複数の資源情報から、利用可能時間が短い資源情報から長い資源情報へ順(struct availrsc.aritail_pのリスト)に、1つずつ選択し、ステップS122〜S130を繰り返し実行する。利用可能時間が短い方から計算資源を利用することで、計算資源の空き時間を削減し得る。
(S122)仮資源割り当て部182は、保持した仮割り当て対象ジョブを資源使用時間が長い順に処理する。具体的には、仮資源割り当て部182は、RAM103上に保持した仮割り当て対象ジョブ情報を1つずつ選択し、ステップS123〜S129を繰り返し実行する。ここで、選択された仮割り当て対象ジョブ情報に対応する仮割り当て対象ジョブを、ステップS123〜S129において、「対象ジョブ」と称する。仮資源割り当て部182は、対象ジョブの仮割り当て資源数を0とする。
(S123)仮資源割り当て部182は、着目する資源情報に含まれる利用可能時間(struct availrscinfo.availtime)が、対象ジョブの資源使用時間(struct jobinfo.reqtime)よりも長いか否かを判定する。利用可能時間の方が長い場合、処理をステップS124に進める。利用可能時間の方が長くない場合、処理をステップS130に進める。
(S124)仮資源割り当て部182は、着目する計算資源を対象ジョブへの仮割り当て資源数としてカウントする。具体的には、仮割り当て資源数に加算されるカウント数は、min(利用可能資源数−仮割り当て済資源数,対象ジョブの要求資源数−カウント済の仮割り当て資源数)である。仮割り当て済資源数は、着目する資源情報のstruct allocrscinfo.total_alloc_nidsの値である。
(S125)仮資源割り当て部182は、利用可能資源情報の仮割り当て作業域を更新する。具体的には、仮資源割り当て部182は、ステップS124でカウントした仮割り当て資源数を、着目する資源情報の仮割り当て作業域(struct availrscinfo.allocinfo)の全仮割り当てノード数(struct allocrscinfo.total_alloc_nids)へ加算する。これにより、対象ジョブに対して仮割り当てした分の計算資源が利用済として管理される。更に、仮資源割り当て部182は、ステップS132以降の処理に備えて、当該計算資源を利用するジョブIDおよび使用資源量(獲得資源数)も合わせて仮割り当て作業域に反映する(構造体135の情報に相当)。
(S126)仮資源割り当て部182は、対象ジョブへの仮割り当て資源数が対象ジョブの要求資源数に一致するか否かを判定する。一致する場合、処理をステップS127に進める。一致しない場合、処理をステップS130に進める。この判定は、カウントした仮割り当て資源数が、対象ジョブの要求資源数(struct jobinfo.num_reqnids)に達しているか否かを確認することで行える。
(S127)仮資源割り当て部182は、仮割り当て対象ジョブから、現在着目している対象ジョブ(該当ジョブ)を削除する。具体的には、仮資源割り当て部182は、RAM103上に保持された複数の仮割り当て対象ジョブ情報の中から、現在着目している対象ジョブに対応する仮割り当て対象ジョブ情報を削除する。
(S128)仮資源割り当て部182は、仮割り当て対象ジョブがあるか否かを判定する。仮割り当て対象ジョブがある場合、処理をステップS129に進める。仮割り当て対象ジョブがない場合、処理をステップS132に進める。具体的には、RAM103上に保持した仮割り当て対象ジョブ情報が残っている場合、仮割り当て対象ジョブがあることになる。一方、ステップS127を繰り返し実行することでRAM103上に保持されていた複数の仮割り当て対象ジョブ情報が全て削除された場合、仮割り当て対象ジョブがないことになる。
(S129)仮資源割り当て部182は、利用可能資源情報の仮割り当て作業域(struct availrscinfo.allocinfo)を確認し、着目する利用可能資源において、仮割り当てに未利用の部分があるか否かを判定する。未利用の部分がある場合、処理をステップS130に進める。未利用の部分がない、すなわち、仮割り当てで全て利用済である場合、処理をステップS131に進める。具体的には、着目する資源情報の仮割り当て作業域における全仮割り当てノード数(struct allocrscinfo.total_alloc_nids)が、資源情報の利用可能ノード数(struct availrscinfo.num_nids)よりも小さい場合は、仮割り当てに未利用の部分がある。一方、全仮割り当てノード数が利用可能ノード数に一致する場合には、該当の資源情報を全て仮割り当てに利用済である(次の資源情報の処理に移る)。
(S130)仮資源割り当て部182は、次の仮割り当て対象ジョブの処理に移る(ステップS122に進む)。また、仮資源割り当て部182は、全ての仮割り当て対象ジョブを処理済の場合は、処理をステップS131に進める。
(S131)仮資源割り当て部182は、次の資源情報の処理に移る(ステップS121に進む)。なお、仮資源割り当て部182は、仮割り当て対象ジョブが残っているにも関わらず、割り当て先を判断する資源情報がない場合には、エラーを出力して処理を終了してもよい。
(S132)仮資源割り当て部182は、仮割り当て作業域の情報(仮割り当て作業情報)に基づいて、仮割り当て情報(struct joballocsummary)を更新する。
(S133)仮資源割り当て部182は、仮割り当て情報に基づいて、利用可能資源情報を更新する。具体的には、仮資源割り当て部182は、次の時刻以降の処理を行うために、ステップS132で更新した仮割り当て情報から利用可能資源情報を更新する。図20のステップS3で述べたように更新は、コピーされた利用可能資源情報に対して行われる。仮資源割り当て部182は、仮割り当て対象ジョブの仮割り当て状況に応じて、新規時刻に対する利用可能資源情報を作成することもある。例えば、仮資源割り当て部182は、既存の資源情報について利用可能時間の前半部を仮割り当てに利用し、後半部が仮割り当てに未利用である場合、当該後半部の開始時刻に対して新規の利用可能資源情報を作成する。
図25は、割り当て資源選択の例を示すフローチャートである。以下、図25に示す処理をステップ番号に沿って説明する。以下の手順は、図20のステップS6に相当する。
(S41)割り当て資源選択部183は、先頭の仮割り当て情報を取得し、選択割り当て情報として保持する。具体的には、割り当て資源選択部183は、全ての仮割り当て情報を比較するため、まず先頭の仮割り当て情報(struct joballocsummaryhead.head_p)を取出し、選択割り当て情報としてRAM103上に保持する。
(S42)割り当て資源選択部183は、仮割り当て情報を順番に処理する。具体的には、割り当て資源選択部183は、先頭の仮割り当て情報を除く仮割り当て情報(struct joballocsummaryhead.head_pのリスト)を1つずつ選択し、ステップS43〜S45を繰り返し実行する。ここで選択された仮割り当て情報を、以降のステップにおいて、「着目する仮割り当て情報」と称する。
(S43)割り当て資源選択部183は、選択割り当て情報と、着目する仮割り当て情報とを、パラメータ情報151に含まれる割り当て採用基準に基づいて比較する。
(S44)割り当て資源選択部183は、採用基準に照らして、着目する仮割り当て情報の方が、選択割り当て情報よりも優先されるか否かを判定する。着目する仮割り当て情報の方が優先される場合、処理をステップS45に進める。着目する仮割り当て情報の方が優先されない場合、処理をステップS46に進める。例えば、パラメータ情報151の割り当て採用基準は、(1)仮割り当てできたジョブが多いもの、(2)ジョブの実行完了が早いもの、(3)対象期間の空き資源量が少ないもの、を優先させる旨を示す。すなわち、割り当て資源選択部183は、まず、仮割り当てできたジョブ数が多い方を優先させる。仮割り当てできたジョブ数が同数の場合は、全ジョブの実行がより早く完了する方を優先させる。全ジョブの実行完了が同じ時刻の場合は、対象期間(実行完了時刻までの期間)における空き資源量が少ない方を優先させる。なお、空き資源量は、当該期間における空き資源のノード時間積として表わせる。
(S45)割り当て資源選択部183は、着目する仮割り当て情報を選択割り当て情報として保持する。すなわち、割り当て資源選択部183は、現在の選択割り当て情報に代えて、着目する仮割り当て情報を、選択割り当て情報として保持する。
(S46)割り当て資源選択部183は、仮割り当て情報を全て処理すると、処理をステップS47に進める。
(S47)割り当て資源選択部183は、選択割り当て情報から利用可能資源情報を更新する。具体的には、割り当て資源選択部183は、最も優先すべき仮割り当てパターン(選択割り当て情報)を基に、利用可能資源情報(struct availrschead.head_p)を更新する。ここで、更新先の利用可能資源情報は、ステップS3でコピーされた利用可能資源情報ではなく、コピー元の利用可能資源情報である。すなわち、複数の仮割り当てパターンの中から確定された割り当てパターンの内容が、本番の利用可能資源情報に反映される。
(S48)割り当て資源選択部183は、実行待ちジョブ情報に割り当て結果を保存する。具体的には、確定された割り当てパターンに従って、実行待ちジョブ情報に、ジョブの実行スケジュールを追加する。
このようにして、管理ノード100は、仮割り当てパターンを複数作成し、複数の仮割り当てパターンの中から、採用基準に最もよく合致するものを選択する。なお、採用基準の所定期間は、割り当て候補時刻上限までの期間でもよいし、割り当て候補時刻上限までの期間とは異なる期間として予め指定することもできる。
次に、管理ノード100によるジョブA,B,C,Dに対する計算資源の割り当ての具体例を説明する。
図26は、利用可能資源情報およびジョブ情報の具体例を示す図である。まず、図5で例示したように、ジョブJ1,J2,J3,J4,J5,J6,J7が既にスケジューリング済であるとする。また、今回割り当てを行うジョブは、ジョブA,B,C,Dである。このとき、利用可能資源情報132aは、次の情報を含む。
時刻t0では、利用可能な計算資源はない。
時刻t1では、2種類の計算資源を利用可能である。1つ目は、計算ノードID“6”の1つの計算ノードの、時刻t1から時間t3−t1の時間帯である。2つ目は、計算ノードID“4”,“5”の2つの計算ノードの、時刻t1からの上限なしの時間帯である。
時刻t2では、3種類の計算資源を利用可能である。1つ目は、計算ノードID“6”,“7”の2つの計算ノードの、時刻t2から時間t3−t2の時間帯である。2つ目は、計算ノードID“3”の1つの計算ノードの、時刻t2から時間t4−t2の時間帯である。3つ目は、計算ノードID“4”,“5”の2つの計算ノードの、時刻t2からの上限なしの時間帯である。
利用可能資源情報132aは、時刻t3,t4,t5についても同様に利用可能な計算資源の情報を含む。また、割り当て対象ジョブ情報121aは、先頭のジョブ情報としてジョブAのジョブ情報(後続対象ジョブ情報)を示すポインタを含む。ジョブAは、要求資源量が“2”であり、資源使用時間が“tA”である。割り当て対象ジョブ情報121aは、終端のジョブ情報として、ジョブDの情報(後続対象ジョブ情報)を示すポインタを含む(図26では図示を省略している)。
後続対象ジョブ情報122aは、各ジョブの情報を含む。各ジョブの情報は、優先度の高い順にポインタにより連結されている。後続対象ジョブ情報122aは、ジョブB,C,Dの情報を含む。ジョブBは、要求資源量が“1”であり、資源使用時間が“tB”である。ジョブBは、ジョブAの次に優先度の高いジョブである。ジョブCは、要求資源量が“1”であり、資源使用時間が“tC”である。ジョブCは、ジョブBの次に優先度の高いジョブである。ジョブDは、要求資源量が“1”であり、資源使用時間が“tD”である。ジョブDは、ジョブCの次に優先度の高いジョブである。
図27は、割り当て候補時刻の検出例を示す図である。割り当て候補時刻検出部181は、ジョブA,B,C,Dのうち、最も優先度の高いジョブAにより、割り当て候補時刻を検出する。例えば、時刻t0は、利用可能な計算資源が存在しないので、ジョブAの割り当て候補時刻とはなり得ない。
時刻t1には、利用可能ノード数“2”、かつ、利用可能時間の制限のない(“∞”)計算資源が存在する。tA<∞である。この計算資源は、ジョブAの要求資源量“2”、かつ、資源使用時間“tA”の要件を満たす。よって、時刻t1は、ジョブAを割り当て可能な時刻であり、割り当て候補時刻である。
時刻t2には、利用可能ノード数“2”、かつ、利用可能時間“t3−t2”の計算資源が存在する。しかし、tA>t3−t2である。すなわち、当該計算資源は、資源使用時間“tA”の要件を満たさないので、当該計算資源にジョブAを割り当てることはできない。また、時刻t2には、利用可能ノード数“2”、かつ、利用可能時間の制限のない計算資源が存在する。この計算資源は、ジョブAの要求資源量“2”、かつ、資源使用時間“tA”の要件を満たす。よって、時刻t2は、ジョブAを割り当て可能な時刻であり、割り当て候補時刻である。
こうして、割り当て候補時刻検出部181は、割り当て候補時刻を順次検出する。ここで、割り当て候補時刻検出部181は、未来の時刻を無制限に選択して割り当て候補時刻を検出するわけではない。ジョブAの実行をある程度以上遅延させないように、また、スケジューリングを効率的に行えるように、割り当て候補時刻に上限を設ける。
図28は、割り当て候補時刻の上限の時刻の例を示す図である。パラメータ情報151は、割り当て候補時刻の上限Δtを含む。割り当て候補時刻検出部181は、最も優先度の高いジョブAに対して決定した、最も早い割り当て候補時刻t1とΔtとを用いて、割り当て候補時刻の上限となる時刻(割り当て終端時刻)を算出する。具体的には、割り当て候補時刻の上限の時刻は、t1+Δtである。本例の場合、時刻t1+Δtは、時刻t4よりも遅く、時刻t5よりも早い時刻である。このため、割り当て候補時刻検出部181は、時刻t1,t2,t3,t4を割り当て候補時刻として検出する。時刻t5は、上限の時刻t1+Δtよりも遅い時刻であるため、割り当て候補時刻からは除外される。
図29は、仮割り当て対象ジョブの選択例を示す図である。仮資源割り当て部182は、1つの割り当て候補時刻に着目して、今回の割り当て対象であるジョブA,B,C,Dの中から、割り当て候補時刻を起点とした上限の時刻(t1+Δt)までの時刻範囲に含まれる各時刻に対して仮割り当て対象ジョブを選択する。例えば、割り当て候補時刻t1に着目する場合、仮資源割り当て部182は、まず、時刻t1に対する仮割り当て対象ジョブを選択する。仮割り当て対象ジョブは、各ジョブの優先度の順番に従って選択される。
より具体的には、仮資源割り当て部182は、利用可能資源情報132aにおける時刻t1の資源情報を参照して、ジョブA,B,C,Dの順に仮割り当て対象ジョブの選択を行う。まず、ジョブAには、時刻t1において、計算ノードID“4”,“5”の2つの計算ノードを割り当てることができる。このため、ジョブAは、時刻t1における仮割り当て対象ジョブである。
次に、ジョブBには、時刻t1において、計算ノードID“6”の1つの計算ノードを割り当てることができる。ジョブBの資源使用時間tBが、tB<t3−t1だからである。このため、ジョブBは、時刻t1における仮割り当て対象ジョブである。
この場合、時刻t1では、利用可能な全ての計算ノードがジョブA,Bに対して選択されてしまっている。このため、ジョブC以降のジョブに対して割り当て可能な計算ノードが存在しない。したがって、ジョブC,Dは、時刻t1における仮割り当て対象ジョブとはならない。
図30は、仮割り当て対象ジョブの選択例(続き)を示す図である。図29の処理を、図30で例示するように説明することもできる。まず、仮資源割り当て部182は、利用可能資源情報132aに基づいて、ジョブAに対して、時刻t1において計算ノードID“4,5”の計算ノードを割り当て可能と判断する。仮資源割り当て部182は、ジョブAを、時刻t1に対する仮割り当て対象ジョブと決定する。
次に、仮資源割り当て部182は、利用可能資源情報132aに基づいて、ジョブBに対して、時刻t1において計算ノードID“6”の計算ノードを割り当て可能と判断する。仮資源割り当て部182は、ジョブBを、時刻t1に対する仮割り当て対象ジョブと決定する。
この時点で、時刻t1において他のジョブに割り当て可能な計算ノードは存在しない。したがって、仮資源割り当て部182は、ジョブC,Dを、時刻t1における仮割り当て対象ジョブとして選択しない。よって、この場合、仮割り当て対象ジョブとして選択されるジョブは、ジョブA,Bである。すると、仮資源割り当て部182は、仮割り当て対象ジョブA,Bに対する時刻t1の計算資源への仮割り当てを実行する。
図31は、仮割り当ての例を示す図である。仮資源割り当て部182は、仮割り当て処理の際、利用可能な計算資源の利用可能時間が短い順に、割り当て可能なジョブを探索する。ここでは、仮資源割り当て部182は、時刻t1に対して特定した仮割り当て対象ジョブA,Bの中からジョブを探索することになる。このとき、仮資源割り当て部182は、仮割り当て対象ジョブのうち、資源使用時間が長いジョブを優先する。
より具体的には、利用可能資源情報132aでは、時刻t1において利用可能な計算資源として、利用可能時間t3−t1および利用可能時間∞の2種類の資源情報を含む。仮資源割り当て部182は、このうち、利用可能時間が短い方(利用可能時間t3−t1)の計算資源を割り当てるジョブを検索する。ジョブの検索順序は、前述のように資源使用時間が長い順(tA>tBなのでA,Bの順)である。この場合、ジョブAの資源使用時間“tA”は、tA>t3−t1である。よって、ジョブAを割り当てることはできない。次に、ジョブBの資源使用時間“tB”は、tB<t3−t1である。よって、ジョブBを割り当てることができる。こうして、仮資源割り当て部182は、仮割り当て対象ジョブであるジョブBに対し、時刻t1における計算ノードID“6”の計算ノードを割り当てる。次に、同様にして、仮資源割り当て部182は、仮割り当て対象ジョブであるジョブAに対して、時刻t1における計算ノードID“4”,“5”の計算ノードを割り当てる。
図32は、仮割り当ての例(続き)を示す図である。図31の処理を、図32で例示するように説明することもできる。まず、仮資源割り当て部182は、時刻t1において計算ノードID“6”の計算ノードに割り当てるジョブを、仮割り当て対象ジョブA,Bの中から検索する。仮割り当て対象ジョブA,Bでは、ジョブAの方が、ジョブBよりも使用資源時間が長い(tA>tB)。よって、仮資源割り当て部182は、時刻t1における計算ノードID“6”の計算ノードに対するジョブAの割り当てを試みるが、ジョブAの使用資源時間の要求を満たさないため、ジョブAを割り当てることはできない。次に、仮資源割り当て部182は、時刻t1における計算ノードID“6”の計算ノードに対するジョブBの割り当てを試みて、ジョブBの使用資源時間の要求を満たすと判断し、ジョブBに当該計算ノードを割り当てる。続いて、仮資源割り当て部182は、時刻t1において計算ノードID“4”,“5”の計算ノードに、仮割り当て対象ジョブAを割り当てる(残った仮割り当て対象ジョブはジョブAのみである)。
こうして、仮資源割り当て部182は、時刻t1での仮割り当て対象ジョブに対する計算資源の仮割り当てを完了する。そして、仮資源割り当て部182は、仮割り当ての結果に応じて、利用可能資源情報132aを更新する。
図33は、更新後の利用可能資源情報の例を示す図である。仮資源割り当て部182は、時刻t1に対して、ジョブA,Bを割り当てた結果を、利用可能資源情報132aに反映させる。具体的には、仮資源割り当て部182は、時刻t1の資源情報のうち、計算ノードID“6”の計算ノードを、ジョブBへ割り当てた旨を追加する。また、仮資源割り当て部182は、時刻t1の資源情報のうち、計算ノードID“4”,“5”の2つの計算ノードを、ジョブAへ割り当てた旨を追加する。
更に、仮資源割り当て部182は、時刻t1+tBに対する情報を利用可能資源情報132aに追加する(構造体132および構造体132に含まれる構造体133のインスタンスが追加されることになる)。具体的には、時刻t1+tBにおいて、利用可能ノード数が“2”、利用可能時間が“t3−t1−tB”、ノードIDが“6”,“7”という資源情報を追加する。また、時刻t1+tBにおいて、利用可能ノード数が“1”、利用可能時間が“t4−t1−tB”、ノードIDが“3”という資源情報を追加する。利用可能資源情報132bは、当該資源情報が利用可能資源情報132aに追加された後を例示している。
同様に、仮資源割り当て部182は、時刻t1+tAに対する情報も利用可能資源情報132aに追加する(ただし、図33では図示を省略している)。
こうして、仮資源割り当て部182は、更新後の利用可能資源情報132bに基づいて、次の時刻に対する仮割り当て対象ジョブを、残りのジョブC,Dの中から選択し、選択したジョブへの計算資源の仮割り当てを実行する。仮資源割り当て部182は、上記の処理を繰り返し実行することで、割り当て候補時刻毎のジョブの仮割り当てパターンを得る。
図34は、仮割り当てパターンの例を示す図である。図34(A)は、割り当て候補時刻t1に対する仮割り当てパターンPt1を例示している。具体的には、仮資源割り当て部182は、図32,33で例示した方法によりジョブA,Bに対する時刻t1の計算資源の割り当てを終えた後、ジョブCに対し、時刻t2の計算資源(計算ノードID“7”)を割り当てる。また、仮資源割り当て部182は、ジョブDに対し、時刻t1+tAの計算資源(計算ノードID“4”)を割り当てる。こうして、仮資源割り当て部182は、仮割り当てパターンPt1を得る。なお、ジョブDに対しては、時刻t1+tAの計算資源のうち、計算ノードID“4”および計算ノードID“5”の何れか一方の計算ノードを割り当てる。計算ノードID“4”,“5”の両方で利用可能な計算資源が同じである場合、例えば、計算ノードIDの小さい方を優先的に割り当てる(以下の場合も同様)。
図34(B)は、割り当て候補時刻t2に対する仮割り当てパターンPt2を例示している。割り当て候補時刻t2の場合、仮資源割り当て部182は、時刻t2における仮割り当て対象ジョブとして、ジョブA,B,C,Dを選択する。そして、仮資源割り当て部182は、計算ノードID“6”の計算ノードをジョブBに割り当てる。仮資源割り当て部182は、計算ノードID“7”の計算ノードをジョブCに割り当てる。仮資源割り当て部182は、計算ノードID“3”,“4”の2つの計算ノードをジョブAに割り当てる。仮資源割り当て部182は、計算ノードID“5”の計算ノードをジョブDに割り当てる。
図34(C)は、割り当て候補時刻t3に対する仮割り当てパターンPt3を例示している。割り当て候補時刻t3の場合、仮資源割り当て部182は、時刻t3における仮割り当て対象ジョブとしてジョブAを選択する。そして、仮資源割り当て部182は、計算ノード“4”,“5”の2つの計算ノードをジョブAに割り当てる。時刻t3では、計算ノード“3”も利用可能であるが、時間t4−t3がジョブBの資源利用時間tBよりも短い(tB<t4−t3)ため、時刻t3にはジョブA以外のジョブを割り当てることはできない。また、時刻t3+tAは、時刻t1+Δtよりも遅い時刻である。したがって、仮資源割り当て部182は、ジョブA以外のジョブの仮割り当てを行わない(仮割り当てパターンPt3にはジョブA以外は配置されていない)。
割り当て候補時刻t4に対しても、同様に仮割り当てパターンが作成される。割り当て候補時刻t4に対する仮割り当てパターンは、割り当て候補時刻t4を起点にジョブAが配置されるパターンとなる(図示を省略している)。また、時刻t4+tAは、時刻t1+Δtよりも遅い時刻となるので、割り当て候補時刻t3の場合と同様に、ジョブA以外のジョブの仮割り当ては行われない(割り当て候補時刻t4に対する仮割り当てパターンに、ジョブA以外は配置されない)。
図35は、仮割り当て情報の例(パターンPt1)を示す図である。仮割り当て情報137aおよびジョブ割り当て情報群138aは、仮割り当てパターンPt1を示す情報の具体例である。
仮割り当て情報137aは、次の情報を含む。割り当て開始時刻は“t1”である。割り当て完了時刻は“t1+tA”である(最後のジョブDの実行を開始する時刻に相当)。割り当てたジョブ数は“4”である。ジョブA,B,C,Dの計4つのジョブの仮割り当てを行った結果だからである。また、仮割り当て情報137aは、ジョブ割り当て情報群138aの先頭のジョブ割り当て情報(ジョブAの情報)を示すポインタを含む。ジョブ割り当て情報群138aは、ジョブA,B,C,Dそれぞれに対するジョブ割り当て情報を含む。各ジョブ割り当て情報は、優先度の順にポインタにより連結されている。
ジョブAに関するジョブ割り当て情報は、次の情報を含む。割り当て開始時刻は、“t1”である。割り当て終了時刻は、“t1+tA”である。割り当て資源数は、“2”である。割り当て資源(計算ノードID)は、“4,5”である。
ジョブBに関するジョブ割り当て情報は、次の情報を含む。割り当て開始時刻は、“t1”である。割り当て終了時刻は、“t1+tB”である。割り当て資源数は、“1”である。割り当て資源(計算ノードID)は、“6”である。
ジョブCに関するジョブ割り当て情報は、次の情報を含む。割り当て開始時刻は、“t2”である。割り当て終了時刻は、“t2+tC”である。割り当て資源数は、“1”である。割り当て資源(計算ノードID)は、“7”である。
ジョブDに関するジョブ割り当て情報は、次の情報を含む。割り当て開始時刻は、“t1+tA”である。割り当て終了時刻は、“t1+tA+tD”である。割り当て資源数は、“1”である。割り当て資源(計算ノードID)は、“5”である。
図36は、仮割り当て情報の例(パターンPt2)を示す図である。仮割り当て情報137bおよびジョブ割り当て情報群138bは、仮割り当てパターンPt2を示す情報の具体例である。
仮割り当て情報137bは、次の情報を含む。割り当て開始時刻は“t2”である。割り当て完了時刻は“t2”である。仮割り当てパターンPt2の場合、ジョブA,B,C,Dの全てのジョブが時刻t2に割り当てられるため、割り当て開始時刻および割り当て完了時刻は、共に“t2”となる。割り当てたジョブ数は“4”である。ジョブA,B,C,Dの計4つのジョブの仮割り当てを行った結果だからである。また、仮割り当て情報137bは、ジョブ割り当て情報群138bの先頭のジョブ割り当て情報(ジョブAの情報)を示すポインタを含む。ジョブ割り当て情報137bは、ジョブA,B,C,Dそれぞれに対するジョブ割り当て情報を含む。各ジョブ割り当て情報は、優先度の順にポインタにより連結されている。
ジョブAに関するジョブ割り当て情報は、次の情報を含む。割り当て開始時刻は、“t2”である。割り当て終了時刻は、“t2+tA”である。割り当て資源数は、“2”である。割り当て資源(計算ノードID)は、“3,4”である。
ジョブBに関するジョブ割り当て情報は、次の情報を含む。割り当て開始時刻は、“t2”である。割り当て終了時刻は、“t2+tB”である。割り当て資源数は、“1”である。割り当て資源(計算ノードID)は、“6”である。
ジョブCに関するジョブ割り当て情報は、次の情報を含む。割り当て開始時刻は、“t2”である。割り当て終了時刻は、“t2+tC”である。割り当て資源数は、“1”である。割り当て資源(計算ノードID)は、“7”である。
ジョブDに関するジョブ割り当て情報は、次の情報を含む。割り当て開始時刻は、“t2”である。割り当て終了時刻は、“t2+tD”である。割り当て資源数は、“1”である。割り当て資源(計算ノードID)は、“5”である。
割り当て候補時刻t3,t4それぞれに対する仮割り当てパターンについても、仮割り当てパターンPt1,Pt2と同様に管理できる。割り当て資源選択部183は、上記の各仮割り当てパターンの情報を比較することで、各仮割り当てパターンにおける所定時刻範囲内のジョブの実行数、実行完了時刻および計算ノードの空き時間の割合などを比較可能である。
割り当て資源選択部183は、パラメータ情報151に含まれる割り当て採用基準の情報を基に、複数の仮割り当てパターンの中から、最優先の仮割り当てパターンを選択する。例えば、仮割り当てジョブ数が多いという基準に照らせば、候補時刻t1,t2では仮割り当てジョブ数が“4”であるのに対し、候補時刻t3,t4では仮割り当てジョブ数が“1”である。このため、候補時刻t3,t4に対する2つの仮割り当てパターンは、候補時刻t1,t2に対する仮割り当てパターンPt1,Pt2に比べて優先度が低い。よって、割り当て資源選択部183は、候補時刻t3,t4に対する2つの仮割り当てパターンを選択の候補から除外する。
次に、割り当て資源選択部183は、割り当て採用基準によって、仮割り当てパターンPt1,Pt2を比較する。仮割り当てパターンPt1,Pt2は、両方とも仮割り当てジョブ数が“4”で一致している。このため、割り当て資源選択部183は、ジョブの実行完了が早いという基準により仮割り当てパターンPt1,Pt2の何れか一方を選択する。ここで、仮割り当てパターンPt2は、ジョブA,B,C,Dの全てのジョブの実行が完了する時刻が、仮割り当てパターンPt1よりも早い。
具体的には、仮割り当てパターンPt1,Pt2の何れも、最後に実行完了するジョブはジョブDである。ジョブ割り当て情報群138aによれば、仮割り当てパターンPt1において、ジョブDの割り当て終了時刻は、“t1+tA+tD”である。また、ジョブ割り当て情報群138bによれば、仮割り当てパターンPt2において、ジョブDの割り当て終了時刻は、“t2+tD”である。時刻t2+tDは、時刻t1+tA+tDよりも早い時刻である。したがって、割り当て資源選択部183は、仮割り当てパターンPt1よりも仮割り当てパターンPt2の方が選択の優先度が高いと判断する。
最終的に、割り当て資源選択部183は、ジョブA,B,C,Dに対する計算資源の割り当てとして、仮割り当てパターンPt2を採用する。割り当て資源選択部183は、選択した仮割り当てパターンPt2の内容を、実行待ちジョブ情報141に反映させる。こうして、選択した仮割り当てパターンPt2に対応するスケジュールに従って、ジョブA,B,C,Dが複数の計算ノードにより実行されることになる。
管理ノード100によれば、ジョブの実行を効率化できる。例えば、優先順位がつけられた各ジョブを実行できる最も早い時刻に、優先順位に従って順次実行させていく方法も考えられる。しかし、単に優先度に従って最も早い時刻にジョブを割り当てるのみでは、各ジョブに対して必ずしも効率的に計算資源を割り当てられているとは限らない。全てのジョブを完了するまでの時間が長くなることもある。
そこで、管理ノード100は、最も優先度の高いジョブAのスケジューリングの際に、後続のジョブB,C,Dも考慮する。具体的には、管理ノード100は、ジョブA,B,C,Dのスケジューリングの候補となる仮割り当てパターンを複数取得し、当該複数のパターンの比較により、パラメータ情報151に従い、所定期間内により多くのジョブを実行できるパターンを採用する。管理ノード100は、採用した仮割り当てパターンに従って、各計算ノードへのジョブの割り当てを行う。例えば、仮割り当てパターンPt2では、ジョブA,B,C,Dの全ての実行が完了するまでの時間を、仮割り当てパターンPt1よりも早めることができる。また、仮割り当てパターンPt2では仮割り当てパターンPt1よりも計算ノードの空き時間を低減できる。このため、ジョブの優先度を維持したままジョブ実行のスループットを向上できる。こうして、ジョブの実行を効率化することができる。
なお、第1の実施の形態の情報処理は、演算部1bにプログラムを実行させることで実現できる。また、第2の実施の形態の情報処理は、CPU101,102にプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体13に記録できる。
例えば、プログラムを記録した記録媒体13を配布することで、プログラムを流通させることができる。また、プログラムを他のコンピュータに格納しておき、ネットワーク経由でプログラムを配布してもよい。コンピュータは、例えば、記録媒体13に記録されたプログラムまたは他のコンピュータから受信したプログラムを、RAM103やHDD104などの記憶装置に格納し(インストールし)、当該記憶装置からプログラムを読み込んで実行してもよい。
以上の第1〜第2の実施の形態を含む実施形態に関し、更に以下の付記を開示する。
(付記1) 複数の計算ノードの利用可能な時間帯の情報を記憶する記憶部と、
前記情報に基づいて、複数のジョブのうち最優先のジョブを実行可能な第1の時刻を求め、前記第1の時刻よりも遅い前記最優先のジョブの実行開始時刻の候補であり前記第1の時刻から前記最優先のジョブを実行するよりも所定の時刻範囲内に多くのジョブを実行できる第2の時刻がある場合、前記第2の時刻から前記最優先のジョブと他のジョブとを実行するよう前記複数の計算ノードに前記複数のジョブを割り当てる演算部と、
を有する情報処理装置。
(付記2) 前記演算部は、前記第1の時刻および前記第2の時刻それぞれで前記最優先のジョブを実行開始する場合の前記複数のジョブの前記複数の計算ノードへの割り当てパターンの候補を示す情報を生成し、前記割り当てパターンの候補の比較に応じて、前記最優先のジョブを前記第1および前記第2の時刻の何れで実行するかを選択する、付記1記載の情報処理装置。
(付記3) 前記演算部は、前記割り当てパターンの候補に基づいて前記複数のジョブ全ての実行が完了する時刻を比較し、当該比較に応じて前記最優先のジョブを実行する時刻を選択する、付記2記載の情報処理装置。
(付記4) 前記演算部は、前記割り当てパターンの候補に基づいて前記複数の計算ノードの空き時間の量を比較し、当該比較に応じて前記最優先のジョブを実行する時刻を選択する、付記2または3記載の情報処理装置。
(付記5) 前記演算部は、前記第2の時刻の候補である複数の候補時刻それぞれで前記最優先のジョブを実行開始する場合の前記複数のジョブの前記複数の計算ノードへの割り当てパターンの候補を示す情報を生成し、前記割り当てパターンの候補の比較に応じて、前記最優先のジョブを実行する時刻を選択する、付記2記載の情報処理装置。
(付記6) 前記第1の時刻は、前記最優先のジョブを実行可能な最も早い時刻であり、
前記演算部は、前記第1の時刻に基づいて、前記複数の候補時刻の上限の時刻を決定する、付記5記載の情報処理装置。
(付記7) 前記記憶部は、前記複数のジョブそれぞれの実行に要する計算ノードの数、および、当該計算ノードの利用時間を示す要求資源の情報を記憶し、
前記演算部は、前記複数の計算ノードの利用可能な時間帯と前記複数のジョブそれぞれの前記要求資源とに基づいて、前記第1および前記第2の時刻を特定する、
付記1乃至6の何れか1つに記載の情報処理装置。
(付記8) 複数のジョブを割り当て可能な複数の計算ノードと、
前記複数の計算ノードの利用可能な時間帯の情報に基づいて、前記複数のジョブのうち最優先のジョブを実行可能な第1の時刻を求め、前記第1の時刻よりも遅い前記最優先のジョブの実行開始時刻の候補であり前記第1の時刻から前記最優先のジョブを実行するよりも所定の時刻範囲内に多くのジョブを実行できる第2の時刻がある場合、前記第2の時刻から前記最優先のジョブと他のジョブとを実行するよう前記複数の計算ノードに前記複数のジョブを割り当てる管理ノードと、
を有する並列計算機システム。
(付記9) コンピュータに、
複数の計算ノードの利用可能な時間帯の情報に基づいて、複数のジョブのうち最優先のジョブを実行可能な第1の時刻を求め、
前記第1の時刻よりも遅い前記最優先のジョブの実行開始時刻の候補であり前記第1の時刻から前記最優先のジョブを実行するよりも所定の時刻範囲内に多くのジョブを実行できる第2の時刻がある場合、前記第2の時刻から前記最優先のジョブと他のジョブとを実行するよう前記複数の計算ノードに前記複数のジョブを割り当てる、
処理を実行させるジョブスケジュール設定プログラム。
(付記10) コンピュータが、
複数の計算ノードの利用可能な時間帯の情報に基づいて、複数のジョブのうち最優先のジョブを実行可能な第1の時刻を求め、
前記第1の時刻よりも遅い前記最優先のジョブの実行開始時刻の候補であり前記第1の時刻から前記最優先のジョブを実行するよりも所定の時刻範囲内に多くのジョブを実行できる第2の時刻がある場合、前記第2の時刻から前記最優先のジョブと他のジョブとを実行するよう前記複数の計算ノードに前記複数のジョブを割り当てる、
ジョブスケジュール設定方法。