(57)【特許請求の範囲】
【請求項１】
ネットワークで接続された複数のノードと通信する通信部と、
前記複数のノードの一部をあるジョブに割り当てる制御部とを有し、
前記制御部は、前記複数のノードのうち、前記ジョブに割り当てられた第１のノードから第２のノードへの経路上に位置する経由ノードを判定し、前記経由ノードにおけるリソースの使用状況を示す指標値を取得し、前記指標値と前記ジョブのメモリ使用量とに基づいて、前記第１のノードから前記第２のノードに前記ジョブのデータを転送する場合の転送時間の推定値を算出する、
並列計算制御装置。
【請求項２】
前記推定値の算出には、前記指標値を重み付ける係数を更に用い、
前記制御部は、前記推定値の算出後に前記第１のノードから前記第２のノードに前記ジョブのデータが転送された場合、当該転送の実行結果に基づいて前記係数を更新する、
請求項１記載の並列計算制御装置。
【請求項３】
前記指標値として、前記経由ノードにおける他のジョブの実行状況を示す第１の指標値と、通信リンクの使用状況を示す第２の指標値の少なくとも一方を用いる、
請求項１または２記載の並列計算制御装置。
【請求項４】
前記制御部は、前記推定値とスケジュール上の前記第２のノードの空き時間とに基づいて、前記ジョブのデータを前記第２のノードに転送するか否か決定する、
請求項１乃至３の何れか一項に記載の並列計算制御装置。
【請求項５】
ネットワークで接続された複数のノードと、
前記複数のノードの一部をあるジョブに割り当てる制御装置とを有し、
前記制御装置は、前記複数のノードのうち、前記ジョブに割り当てられた第１のノードから第２のノードへの経路上に位置する経由ノードを判定し、前記経由ノードにおけるリソースの使用状況を示す指標値を取得し、前記指標値と前記ジョブのメモリ使用量とに基づいて、前記第１のノードから前記第２のノードに前記ジョブのデータを転送する場合の転送時間の推定値を算出する、
並列計算システム。
【請求項６】
コンピュータに、
ネットワークで接続された複数のノードのうち、あるジョブに割り当てられた第１のノードから第２のノードへの経路上に位置する経由ノードを判定し、
前記経由ノードにおけるリソースの使用状況を示す指標値を取得し、
前記指標値と前記ジョブのメモリ使用量とに基づいて、前記第１のノードから前記第２のノードに前記ジョブのデータを転送する場合の転送時間の推定値を算出する、
処理を実行させるマイグレーション時間推定プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は並列計算制御装置、並列計算システムおよびマイグレーション時間推定プログラムに関する。
【背景技術】
【０００２】
物理的なコンピュータである複数のノードと、それら複数のノードを互いに通信できるように接続する相互結合網（Interconnected Network）とを含む並列計算システムが存在する。相互結合網の形状（トポロジ）としては、メッシュ、トーラス、ハイパーキューブ、ツリーなどの種々のものが使用され得る。多数のノードを相互結合網に接続して並列に動作させることで、演算能力を向上させることができる。演算能力の高い並列計算システムは、複雑なシミュレーションなどの大規模科学技術計算に用いられることがある。
【０００３】
ユーザから一纏まりの処理の単位であるジョブが投入されると、並列計算システムは、投入されたジョブに対して１または２以上のノードを割り当てる。割り当てられたノードにおいて、投入されたジョブのプログラムが実行されることになる。複数のジョブが投入された場合、並列計算システムは、ジョブスケジューリングを行う。ジョブスケジューリングでは、ノード×時刻によって特定される計算リソースを複数のジョブに割り振り、各ジョブを実行させるノードおよび時刻を決定する。
【０００４】
なお、プロセスを配置可能な複数のノードのメモリを管理する計算機システムが提案されている。提案の計算機システムは、あるノードでプロセス生成が要求されたときに、そのノードのメモリに空きがない場合、メモリから排出するページを選択する。計算機システムは、選択したページが他のノードに排出可能である場合、ネットワークを介して当該ページを他のノードに送信する。一方、計算機システムは、選択したページが他のノードに排出可能でない場合、当該ノードの外部記憶装置にページを移動させる。
【０００５】
また、プロセッサをジョブに割り当てるジョブスケジューリングシステムが提案されている。提案のジョブスケジューリングシステムは、まず通常スケジューリングを行う。通常スケジューリングの結果、ある時刻に空きプロセッサが生じた場合、ジョブスケジューリングシステムは、空きプロセッサを用いて未開始のジョブをスケジュールよりも先行して開始させる。先行して開始したジョブが終了する前に空きプロセッサがなくなると、ジョブスケジューリングシステムは、当該先行して開始したジョブを次に空きプロセッサが生じるまで中断させる。また、先行して開始したジョブが終了する前に本来の開始時刻が到来すると、ジョブスケジューリングシステムは、通常スケジューリングによって割り当てたプロセッサに当該先行して開始したジョブを引き継がせる。
【０００６】
また、「チェックポイントリスタート」によってプロセスを一時的に中断することができるコンピュータシステムが提案されている。チェックポイントリスタートは、あるノード上で実行されているプロセスの状態を保存し、保存した状態に基づいて後で、中断前と同一または異なるノード上でプロセスを再開させる技術である。提案のコンピュータシステムは、論理ノード番号と物理ノード番号との対応関係を示すノード番号変換テーブルを生成する。コンピュータシステムは、プロセスを再開させる際、ノード番号変換テーブルを更新することで、中断前と異なるノード上での再開を可能とする。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平６−１８７３０８号公報
【特許文献２】特開２０１０−１８２１９９号公報
【特許文献３】特開２０１１−１８６６０６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
ところで、ジョブによって使用ノード数や実行時間は異なるため、並列計算システムを運用していると、ノード×時刻のリソース空間上において未使用の計算リソースが断片化されてしまうことがある。特に、未使用の計算リソースが時間方向に断片化され、新たなジョブを投入しようとしても、そのジョブの実行予定時間に相当する連続した計算リソースを確保できないことがある。このままでは、断片化された未使用の計算リソースが活用されず、ノード使用効率が低下してしまうおそれがある。
【０００９】
これに対し、ジョブの中断を許容して時間方向に断片化された計算リソースを使用する方法が考えられる。例えば、並列計算システムは、あるノードを用いてジョブを開始し、優先度の高い他のジョブの開始時刻が近づくと、メモリのデータを当該ノードの補助記憶装置などの退避領域に退避してジョブを一時停止させる。他のジョブが終了すると、並列計算システムは、退避したデータをメモリにロードして、当該ノードを用いてジョブを再開する。また、例えば、並列計算システムは、空き時間が生じた他のノードにメモリのデータを転送し、他のノードを用いてジョブを再開する。
【００１０】
このように、ジョブの中断を考慮してジョブスケジューリングを行うことで、並列計算システムのノード使用効率を改善する余地がある。しかし、ノード間でジョブのデータを転送することを含むスケジュール案を検討する際、転送時間の推定の精度が問題となる。転送元および転送先のノードの間に経由するノードが存在する場合、他のジョブの実行や他のジョブの通信の影響により、転送時間が大きく変動してしまうことがある。よって、ハードウェア性能などの静的な情報のみから転送時間を推定すると、推定した転送時間と実際の転送時間との誤差が大きくなってしまうおそれがある。
【００１１】
そして、転送時間の推定の精度が低いと、スケジュールを最適化できず、ノード使用効率を十分に向上させることが難しくなってしまう。例えば、並列計算システムが、データの転送時間と他のノードの空き時間から、転送先のノードで十分な実行時間を確保できると判断し、ジョブに割り当てるノードの変更を決定したとする。これに対し、実際の転送時間が推定よりも長くなり、転送先のノードで十分な実行時間を確保できなくなったとする。すると、結果的にジョブ中断が多く発生することになり、実質的なノード使用効率が低下してしまう。また、転送時間が長いと予めわかっていれば、ジョブに割り当てるノードを変更しないスケジュールが選択された可能性もある。このように、ジョブスケジューリングにおける転送時間の推定の精度は、ノード使用効率に影響する。
【００１２】
１つの側面では、本発明は、ノード使用効率を改善したジョブスケジューリングを可能とする並列計算制御装置、並列計算システムおよびマイグレーション時間推定プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１３】
１つの態様では、通信部と制御部とを有する並列計算制御装置が提供される。通信部は、ネットワークで接続された複数のノードと通信する。制御部は、複数のノードの一部をあるジョブに割り当てる。制御部は、複数のノードのうち、ジョブに割り当てられた第１のノードから第２のノードへの経路上に位置する経由ノードを判定する。制御部は、経由ノードにおけるリソースの使用状況を示す指標値を取得する。制御部は、指標値とジョブのメモリ使用量とに基づいて、第１のノードから第２のノードにジョブのデータを転送する場合の転送時間の推定値を算出する。
【００１４】
また、１つの態様では、複数のノードと制御装置とを有する並列計算システムが提供される。また、１つの態様では、コンピュータに実行させるマイグレーション時間推定プログラムが提供される。
【発明の効果】
【００１５】
１つの側面では、ノード使用効率を改善したジョブスケジューリングが可能となる。
【図面の簡単な説明】
【００１６】
【図１】第１の実施の形態の並列計算システムを示す図である。
【図２】第２の実施の形態の並列計算システムを示す図である。
【図３】管理ノードのハードウェア例を示すブロック図である。
【図４】ジョブへの計算ノードの割り当て例を示す図である。
【図５】ジョブ中断方法の例を示す図である。
【図６】ジョブスワップのスケジュール例を示す図である。
【図７】チェックポイントリスタートの第１のスケジューリング例を示す図である。
【図８】チェックポイントリスタートの第２のスケジューリング例を示す図である。
【図９】マイグレーションのスケジューリング例を示す図である。
【図１０】管理ノードと計算ノードの機能例を示すブロック図である。
【図１１】定数テーブルの例を示す図である。
【図１２】回帰分析テーブルの例を示す図である。
【図１３】係数テーブルの例を示す図である。
【図１４】ジョブ中断の手順例を示すフローチャートである。
【図１５】スケジュール決定の手順例を示すフローチャートである。
【図１６】時間推定の手順例を示すフローチャートである。
【図１７】転送時間測定の手順例を示すフローチャートである。
【発明を実施するための形態】
【００１７】
以下、本実施の形態を図面を参照して説明する。
［第１の実施の形態］
図１は、第１の実施の形態の並列計算システムを示す図である。
【００１８】
第１の実施の形態の並列計算システムは、並列計算制御装置１０と、ネットワーク２０で接続されたノード２１〜２６とを有する。並列計算制御装置１０は、ジョブスケジューリングを行い、ノード２１〜２６のうちの１または２以上のノードをジョブ１３に割り当てる。並列計算制御装置１０は、ジョブ１３の実行中にジョブ１３を中断させることがある。ジョブ１３の中断において、並列計算制御装置１０は、ジョブ１３に割り当てるノードを変更することがある。その場合、ノード間でジョブ１３のデータが転送される。
【００１９】
ノード２１〜２６は、ジョブ１３のプロセスを実行することができる物理的なコンピュータである。ノード２１〜２６は、並列に動作することができる。ジョブ１３に割り当てられたノードは、他のノードとは独立にジョブ１３のプロセスを実行する。
【００２０】
ネットワーク２０は、ノード２１〜２６を互いに通信できるように接続する相互結合網である。ネットワーク２０のトポロジは、例えば、メッシュ、トーラス、ハイパーキューブ、ツリーなどの直接網である。直接網は、複数のノードを通信専用装置を介さずに直接接続し、各ノードにルーティング機能を設けるトポロジである。直接網の場合、２つのノード間の通信を、その経路上に位置する他のノードが中継することがある。
【００２１】
並列計算制御装置１０は、通信部１１および制御部１２を有する。通信部１１は、ノード２１〜２６と通信する。通信部１１は、例えば、有線通信インタフェースまたは無線通信インタフェースである。制御部１２は、ジョブスケジューリングを行い、ノード２１〜２６の一部をジョブ１３に割り当てる。後述するように、制御部１２は、スケジュールを決定するにあたり、ジョブ１３のデータの転送時間を推定することがある。
【００２２】
なお、並列計算制御装置１０は、コンピュータであってもよい。制御部１２は、ＣＰＵ（Central Processing Unit）やＤＳＰ（Digital Signal Processor）などのプロセッサでもよい。また、制御部１２は、ＡＳＩＣ（Application Specific Integrated Circuit）やＦＰＧＡ（Field Programmable Gate Array）などの特定用途の電子回路を含んでもよい。プロセッサは、ＲＡＭ（Random Access Memory）などのメモリに記憶されたプログラムを実行する。プログラムには、マイグレーション時間推定プログラムが含まれ得る。複数のプロセッサの集合（マルチプロセッサ）を「プロセッサ」と呼ぶこともある。
【００２３】
ここで、ジョブ１３にノード２１が割り当てられているとする。また、ジョブ１３に割り当てるノードをノード２６に変更する、すなわち、ノード２１からノード２６へのジョブ１３の移行（マイグレーション）を行うスケジュール案を検討するものとする。このスケジュール案を採用するか否か判定するにあたり、制御部１２は、以下のようにして、ノード２１からノード２６にジョブ１３のデータを転送する転送時間１６を推定する。
【００２４】
まず、制御部１２は、ノード２１〜２６のうち、転送元のノード２１から転送先のノード２６への経路上に位置する経由ノードを判定する。図１の例では、ネットワーク２０はメッシュやトーラスなどの格子状の相互結合網であり、ノード２１からノード２６への経路上にノード２３，２５が位置している。すなわち、ジョブ１３のデータをノード２１からノード２６に転送する場合、ノード２３，２５がデータを中継する（ルーティングする）ことになる。格子状の相互結合網の場合、制御部１２は、例えば、転送元のノードの座標と転送先のノードの座標から経由ノードを判定できる。
【００２５】
次に、制御部１２は、経由ノード（ノード２３，２５）におけるリソースの使用状況を示す指標値１４を取得する。指標値１４として、例えば、ノード使用率など、他のジョブによる経由ノードの使用状況を示す指標値を用いることができる。また、指標値１４として、例えば、リンク使用量など、経由ノード上の他のジョブによるリンクの使用状況を示す指標値を用いることができる。また、複数種類の指標値を用いてもよい。制御部１２は、例えば、並列計算制御装置１０がノード２１〜２６から定期的に収集しているリソース情報に基づいて、指標値１４を算出する。ただし、制御部１２は、転送時間１６を推定するときに、経由ノードからリソース情報を取得するようにしてもよい。
【００２６】
そして、制御部１２は、指標値１４とメモリ使用量１５とに基づいて、転送時間１６の推定値を算出する。メモリ使用量１５は、ジョブ１３がノード２１で使用しているメモリ領域の大きさであり、ノード２１からノード２６に転送するデータの量と同一であるかまたは近似する。制御部１２は、例えば、並列計算制御装置１０がノード２１〜２６から定期的に収集しているリソース情報の中から、メモリ使用量１５を抽出する。転送時間１６は、例えば、次のように算出する。制御部１２は、係数を用いて指標値１４を重み付けして、現在の経由ノードの状態に応じた転送帯域幅を推定する。そして、制御部１２は、推定した転送帯域幅とメモリ使用量１５から転送時間１６の推定値を算出する。
【００２７】
転送時間１６の推定に係数を用いる場合、実際の転送時間をフィードバックして係数を更新してもよい。例えば、制御部１２は、転送時間１６を推定した後にノード２１からノード２６へのデータ転送が行われた場合、実際の転送時間を測定する。そして、制御部１２は、測定した転送時間、指標値１４およびメモリ使用量１５の組をデータベースに保存しておく。制御部１２は、データベースに上記の情報が蓄積されると、指標値１４を説明変数（独立変数）として回帰分析を行うことで、係数を算出することができる。
【００２８】
第１の実施の形態の並列計算システムによれば、ノード２１からノード２６にジョブ１３のデータを転送するか検討するにあたり、経路上に位置する経由ノードが判定され、経由ノードにおけるリソースの使用状況を示す指標値１４が取得される。そして、指標値１４とジョブ１３のメモリ使用量１５とに基づいて、転送時間１６が推定される。
【００２９】
これにより、ジョブ１３のデータを転送するときの経由ノードの状態を反映した転送時間１６の推定値を算出することができ、転送時間１６の推定精度を向上させることができる。例えば、他のジョブによって経由ノードやその周辺のリンクが多く使用されているときは転送時間１６の推定値が大きくなり、経由ノードやその周辺のリンクがあまり使用されていないときは転送時間１６の推定値が小さくなると期待できる。
【００３０】
その結果、ノード２１〜２６の使用効率が高くなるようにジョブスケジューリングを行うことが容易となる。例えば、転送先のノード２６の空き時間との関係で、転送時間１６が短いときはデータ転送を伴うスケジュール案を採用し、転送時間１６が長いときは他のスケジュール案を検討することが考えられる。これにより、ジョブ１３の中断が頻繁に発生するのを抑制し、実質的なノード使用効率を向上させることができる。
【００３１】
［第２の実施の形態］
図２は、第２の実施の形態の並列計算システムを示す図である。
第２の実施の形態の並列計算システムは、計算ノード１Ａ〜９Ａ，１Ｂ〜９Ｂ，…，１Ｆ〜９Ｆ、相互結合網３０および管理ノード１００を有する。
【００３２】
相互結合網３０は、９×６個の計算ノードをメッシュ状に接続した直接網である。すなわち、相互結合網３０は、スイッチなどの通信専用装置を用いずに、隣接する計算ノード同士をリンクによって直接接続する。例えば、計算ノード２Ｂは、隣接する計算ノード１Ｂ，２Ａ，２Ｃ，３Ｂと直接接続されている。相互結合網３０上において、各計算ノードの位置は２次元の座標によって特定することができる。例えば、計算ノード１Ａの座標を（０，０）、計算ノード９Ａの座標を（８，０）、計算ノード１Ｆの座標を（０，５）、計算ノード９Ｆの座標を（８，５）と特定することができる。
【００３３】
計算ノード１Ａ〜９Ａ，１Ｂ〜９Ｂ，…，１Ｆ〜９Ｆは、並列に動作することができる物理的なコンピュータである。計算ノード１Ａ〜９Ａ，１Ｂ〜９Ｂ，…，１Ｆ〜９Ｆは、ジョブのプロセスを実行するジョブ実行機能と、データを中継するルーティング機能とを有する。ある計算ノードが他の計算ノードと通信するときは、その間に位置する計算ノードがリレー方式でデータを中継することになる。宛先の計算ノードは、例えば、座標によって指定される。ルーティングアルゴリズムとしては、例えば、まずＸ座標が宛先に近づく方向に転送し、次にＹ座標が宛先に近づく方向に転送していく方法を用いる。例えば、計算ノード１Ａが送信した計算ノード７Ｄ宛てのデータは、計算ノード２Ａ〜６Ａを通って計算ノード７Ａに到達し、計算ノード７Ｂ，７Ｃを通って計算ノード７Ｄに到達する。
【００３４】
管理ノード１００は、計算ノード１Ａ〜９Ａ，１Ｂ〜９Ｂ，…，１Ｆ〜９Ｆによるジョブの実行を管理するサーバコンピュータである。管理ノード１００は、第１の実施の形態の並列計算制御装置１０に対応する。管理ノード１００は、１または２以上のユーザから、ジョブの投入を順次受け付ける。管理ノード１００は、投入されたジョブのスケジューリングを行い、計算ノード×時刻によって特定される計算リソースをジョブに割り当てる。なお、管理ノード１００は、計算ノード１Ａ〜９Ａ，１Ｂ〜９Ｂ，…，１Ｆ〜９Ｆと通信することができる。例えば、管理ノード１００は、管理用のネットワークを介して計算ノード１Ａ〜９Ａ，１Ｂ〜９Ｂ，…，１Ｆ〜９Ｆと接続されている。
【００３５】
図３は、管理ノードのハードウェア例を示すブロック図である。
管理ノード１００は、ＣＰＵ１０１、ＲＡＭ１０２、ＨＤＤ（Hard Disk Drive）１０３、画像信号処理部１０４、入力信号処理部１０５、媒体リーダ１０６および通信インタフェース１０７を有する。上記のユニットは、それぞれバス１０８に接続されている。
【００３６】
ＣＰＵ１０１は、プログラムの命令を実行する演算回路を含むプロセッサである。ＣＰＵ１０１は、ＨＤＤ１０３に記憶されたプログラムやデータの少なくとも一部をＲＡＭ１０２にロードし、プログラムを実行する。なお、ＣＰＵ１０１は複数のプロセッサコアを備えてもよく、管理ノード１００は複数のプロセッサを備えてもよく、以下で説明する処理を複数のプロセッサまたはプロセッサコアを用いて並列に実行してもよい。また、複数のプロセッサの集合（マルチプロセッサ）を「プロセッサ」と呼んでもよい。
【００３７】
ＲＡＭ１０２は、ＣＰＵ１０１が実行するプログラムやＣＰＵ１０１が演算に用いるデータを一時的に記憶する揮発性の半導体メモリである。なお、管理ノード１００は、ＲＡＭ以外の種類のメモリを備えてもよく、複数個のメモリを備えてもよい。
【００３８】
ＨＤＤ１０３は、ＯＳ（Operating System）やミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。プログラムには、マイグレーション時間推定プログラムが含まれる。なお、管理ノード１００は、フラッシュメモリやＳＳＤ（Solid State Drive）などの他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
【００３９】
画像信号処理部１０４は、ＣＰＵ１０１からの命令に従って、管理ノード１００に接続されたディスプレイ１１１に画像を出力する。ディスプレイ１１１としては、ＣＲＴ（Cathode Ray Tube）ディスプレイ、液晶ディスプレイ（ＬＣＤ：Liquid Crystal Display）、プラズマディスプレイ（ＰＤＰ：Plasma Display Panel）、有機ＥＬ（ＯＥＬ：Organic Electro-Luminescence）ディスプレイなどを用いることができる。
【００４０】
入力信号処理部１０５は、管理ノード１００に接続された入力デバイス１１２から入力信号を取得し、ＣＰＵ１０１に出力する。入力デバイス１１２としては、マウスやタッチパネルやタッチパッドやトラックボールなどのポインティングデバイス、キーボード、リモートコントローラ、ボタンスイッチなどを用いることができる。また、管理ノード１００に、複数の種類の入力デバイスが接続されていてもよい。
【００４１】
媒体リーダ１０６は、記録媒体１１３に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体１１３として、例えば、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤなどの磁気ディスク、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）などの光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）、半導体メモリなどを使用できる。媒体リーダ１０６は、例えば、記録媒体１１３から読み取ったプログラムやデータをＲＡＭ１０２またはＨＤＤ１０３に格納する。
【００４２】
通信インタフェース１０７は、計算ノード１Ａ〜９Ａ，１Ｂ〜９Ｂ，…，１Ｆ〜９Ｆと通信を行う。通信インタフェース１０７は、例えば、スイッチなどの通信装置とケーブルで接続される有線通信インタフェースである。ただし、通信インタフェース１０７は、アクセスポイントと無線リンクで接続される無線通信インタフェースでもよい。
【００４３】
なお、管理ノード１００は、媒体リーダ１０６を備えなくてもよい。また、ユーザが操作する端末装置からネットワーク経由で管理ノード１００を制御できる場合、管理ノード１００は、画像信号処理部１０４や入力信号処理部１０５を備えていなくてもよい。また、ディスプレイ１１１や入力デバイス１１２が、管理ノード１００の筐体と一体に形成されてもよい。計算ノード１Ａ〜９Ａ，１Ｂ〜９Ｂ，…，１Ｆ〜９Ｆも、管理ノード１００と同様のハードウェアを用いて実現できる。ただし、計算ノード１Ａ〜９Ａ，１Ｂ〜９Ｂ，…，１Ｆ〜９Ｆは、隣接する複数の計算ノードと直接接続するために、複数の通信インタフェース（２次元メッシュの場合、４つの通信インタフェース）を備えてもよい。
【００４４】
次に、ジョブへの計算ノードの割り当てについて説明する。
図４は、ジョブへの計算ノードの割り当て例を示す図である。
ジョブ３１が投入されると、管理ノード１００は、計算ノード１Ａ〜９Ａ，１Ｂ〜９Ｂ，…，１Ｆ〜９Ｆの中から１または２以上の計算ノードをジョブ３１に割り当てる。割り当てる計算ノードの数や隣接関係は、ユーザから指定される。隣接関係は、メッシュやトーラスなどの格子状の相互接続網の場合、矩形の形状、すなわち、各次元方向に並ぶ計算ノードの数として表現される。二次元のメッシュまたはトーラスの場合、Ｘ次元の計算ノード数×Ｙ次元の計算ノード数がユーザから指定される。
【００４５】
ユーザは、特定の形状の計算ノード群を想定して、ジョブ３１のプログラムを最適化している可能性がある。計算ノード群の形状が変わってしまうと、通信のオーバヘッドが増大してジョブ３１の実行効率が低下するおそれがある。このため、管理ノード１００は、原則としてユーザから指定された形状の通りに、計算ノード群をジョブ３１に割り当てるようにする。図４の例では、ジョブ３１について、３×３個の計算ノードを使用することが指定されている。これに対して、管理ノード１００は、計算ノード１Ａ〜３Ａ，１Ｂ〜３Ｂ，１Ｃ〜３Ｃをジョブ３１に割り当てている。
【００４６】
ジョブ３１に割り当てられた計算ノード１Ａ〜３Ａ，１Ｂ〜３Ｂ，１Ｃ〜３Ｃが、ユーザによって作成されたプログラムを並列に実行することで、ジョブ３１の処理が進行する。例えば、管理ノード１００は、スケジューリングによって決定した開始時刻になると、プログラムが格納されている場所および引数を含むコマンドを計算ノード１Ａ〜３Ａ，１Ｂ〜３Ｂ，１Ｃ〜３Ｃに送信する。計算ノード１Ａ〜３Ａ，１Ｂ〜３Ｂ，１Ｃ〜３Ｃは、コマンドに応じてプログラムを読み出して実行する。これにより、計算ノード１Ａ〜３Ａ，１Ｂ〜３Ｂ，１Ｃ〜３Ｃにおいて、ジョブ３１のプロセスが起動する。
【００４７】
ジョブ３１は、開始から終了まで連続的に、最初に割り当てられた計算ノード１Ａ〜３Ａ，１Ｂ〜３Ｂ，１Ｃ〜３Ｃを占有できることが好ましい。しかし、後述するように、管理ノード１００は、スケジュールの都合でジョブ３１を中断させることがある。ジョブ３１の中断において、管理ノード１００は、ジョブ３１に割り当てる計算ノードを変更することもあるし、変更しないこともある。図４の例では、ジョブ３１に割り当てる計算ノードが、計算ノード７Ｄ〜９Ｄ，７Ｅ〜９Ｅ，７Ｆ〜９Ｆに変更されている。すなわち、計算ノード１Ａ〜３Ａ，１Ｂ〜３Ｂ，１Ｃ〜３Ｃから計算ノード７Ｄ〜９Ｄ，７Ｅ〜９Ｅ，７Ｆ〜９Ｆへのジョブ３１の移行（マイグレーション）が行われている。
【００４８】
ジョブ３１に割り当てる計算ノードが変更されると、変更前の計算ノードから、それに対応する変更後の計算ノードに、ジョブ３１のデータが転送されることになる。図４の例では、計算ノード１Ａのデータが、計算ノード２Ａ〜７Ａ，７Ｂ，７Ｃを経由して計算ノード７Ｄに転送される。これにより、計算ノード１Ａで実行されていたジョブ３１のプロセスが、計算ノード７Ｄに引き継がれる。同様に、計算ノード２Ａのデータが計算ノード８Ｄに転送され、計算ノード３Ａのデータが計算ノード９Ｄに転送される。計算ノード１Ｂのデータが計算ノード７Ｅに転送され、計算ノード２Ｂのデータが計算ノード８Ｅに転送され、計算ノード３Ｂのデータが計算ノード９Ｅに転送される。計算ノード１Ｃのデータが計算ノード７Ｆに転送され、計算ノード２Ｃのデータが計算ノード８Ｆに転送され、計算ノード３Ｃのデータが計算ノード９Ｆに転送される。
【００４９】
上記の９組のデータ転送は、並列に実行し得る。例えば、計算ノード１Ａから計算ノード７Ｄへのデータ転送と、計算ノード１Ｂから計算ノード７Ｅへのデータ転送とは、並列に実行し得る。ただし、経由する計算ノード４Ａ〜９Ａ，４Ｂ〜９Ｂ，４Ｃ〜９Ｃでは、他のジョブが実行されている可能性がある。このため、上記のデータ転送に要する転送時間は、他のジョブの実行状況や他のジョブによるリンクの使用状況の影響を受ける。また、ジョブ３１内でも、並列に実行される一のデータ転送と他のデータ転送とが、同じ計算ノードや同じリンクを経由する可能性がある。このため、上記のデータ転送に要する転送時間は、ジョブ３１内で発生するデータ転送の衝突の影響を受ける。
【００５０】
次に、実行を開始したジョブを中断する方法について説明する。
図５は、ジョブ中断方法の例を示す図である。
スケジュールの都合でジョブ３１を中断させる場合、「ジョブスワップ」、「チェックポイントリスタート」および「マイグレーション」の中から中断方法が選択される。チェックポイントリスタートは、同一ノード復帰と別ノード復帰の２通りに分けられる。
【００５１】
（Ａ）ジョブスワップは、実行していたプロセスのデータを主記憶装置（例えば、ＲＡＭ）の上で退避し、時間を空けて当該データを復帰させる中断方法である。ジョブスワップは、中断前後でジョブ３１の実行に用いる計算ノードを変更しない。
【００５２】
例えば、計算ノード１ＡのＲＡＭ上に、実行中のプロセスのデータを記憶するＲＡＭ実行領域３０１と、一時停止したプロセスのデータを退避するＲＡＭ退避領域３０２とが形成されている。計算ノード１Ａは、ジョブスワップによってジョブ３１を停止させる場合、ＲＡＭ実行領域３０１に記憶されているジョブ３１のデータを、ＲＡＭ退避領域３０２に移動させる。これにより、ＲＡＭ実行領域３０１に他のジョブのデータを格納することが可能となり、計算ノード１Ａを他のジョブに割り当てることができる。ジョブ３１を再開する場合、計算ノード１Ａは、ＲＡＭ退避領域３０２に記憶されているジョブ３１のデータを、ＲＡＭ実行領域３０１に移動させる。
【００５３】
（Ｂ）チェックポイントリスタート（同一ノード復帰）は、実行していたプロセスのデータを補助記憶装置（例えば、ＨＤＤ）に退避し、時間を空けて当該データを復帰させる中断方法である。チェックポイントリスタート（同一ノード復帰）は、ジョブスワップと同様、中断前後でジョブ３１の実行に用いる計算ノードを変更しない。
【００５４】
例えば、計算ノード１ＡのＨＤＤ上に、一時停止したプロセスのデータを退避するＨＤＤ領域３０３が形成されている。計算ノード１Ａは、チェックポイントリスタート（同一ノード復帰）によってジョブ３１を停止させる場合、ＲＡＭ実行領域３０１に記憶されているジョブ３１のデータを、ＨＤＤ領域３０３に移動させる。ジョブ３１を再開する場合、計算ノード１Ａは、ＨＤＤ領域３０３に記憶されているジョブ３１のデータを、ＲＡＭ実行領域３０１に移動させる。
【００５５】
（Ｃ）チェックポイントリスタート（別ノード復帰）は、チェックポイントリスタート（同一ノード復帰）と同様に、実行していたプロセスのデータを補助記憶装置に退避し、時間を空けて当該データを復帰させる中断方法である。ただし、チェックポイントリスタート（別ノード復帰）は、中断前後でジョブ３１の実行に用いる計算ノードを変更する。
【００５６】
例えば、計算ノード７ＤのＲＡＭ上に、実行中のプロセスのデータを記憶するＲＡＭ実行領域３０１ａが形成されている。ジョブ３１を停止させる場合の処理は、チェックポイントリスタート（同一ノード復帰）と同じである。ジョブ３１を再開する場合、計算ノード１Ａは、ＨＤＤ領域３０３に記憶されているジョブ３１のデータを、ＲＡＭ実行領域３０１などのＲＡＭ上の領域に移動させる。更に、計算ノード１Ａは、ＲＡＭに移動したデータを計算ノード７Ｄに送信する。計算ノード７Ｄは、計算ノード１Ａから受信したデータをＲＡＭ実行領域３０１ａに格納する。これにより、中断前に計算ノード１Ａで実行されていたジョブ３１のプロセスが、計算ノード７Ｄで実行される。
【００５７】
（Ｄ）マイグレーションは、実行していたプロセスのデータを、時間を空けずに別の計算ノードに転送する中断方法である。マイグレーションは、チェックポイントリスタート（別ノード復帰）と同様、中断前後でジョブ３１の実行に用いる計算ノードを変更する。計算ノード１Ａは、マイグレーションによってジョブ３１を中断させる場合、ＲＡＭ実行領域３０１に記憶されているジョブ３１のデータを計算ノード７Ｄに送信する。計算ノード７Ｄは、計算ノード１Ａから受信したデータをＲＡＭ実行領域３０１ａに格納する。
【００５８】
管理ノード１００は、上記の中断方法の中から適切な中断方法を選択し、ジョブスケジューリングを行う。なお、中断方法毎にその中断方法を選択できる条件が存在する。ジョブスワップは、複数のジョブのデータが主記憶装置に記憶されることになるため、計算ノード１Ａの主記憶装置の空き容量が十分に大きい場合に選択できる。チェックポイントリスタートは、計算ノード１Ａの補助記憶装置の空き容量が十分に大きい場合に選択できる。マイグレーションは、計算ノード１Ａがジョブ３１のプロセスを停止する時点で、計算ノード７Ｄをジョブ３１に割り当て可能である場合に選択できる。
【００５９】
図６は、ジョブスワップのスケジュール例を示す図である。
ここでは、現在のスケジュールにおいて、ある計算ノード群が、時刻Ｔ１１から時刻Ｔ１２までジョブ＃２に割り当てられており、時刻Ｔ１３から時刻Ｔ１４までジョブ＃３に割り当てられているとする。当該計算ノード群は、時刻Ｔ１０から時刻Ｔ１１まで空いており、時刻Ｔ１２から時刻Ｔ１３まで空いている。ここで、実行予定時間が上記の各空き時間よりも長いジョブ＃１が投入されたとする。この場合、管理ノード１００は、計算リソースが逼迫しているため、断片化された空き計算リソースをジョブ＃１に割り当てることを許容する。例えば、管理ノード１００は、時刻Ｔ１１までに上記の計算ノード群を空けることを条件として、時刻Ｔ１０にジョブ＃１を開始させる。
【００６０】
中断方法としてジョブスワップを選択する場合、ジョブデータの退避にはＲＡＭ書き込みに関する退避時間を要する。このため、時刻Ｔ１１よりも退避時間だけ前にジョブ＃１が停止することになる。よって、中断前のジョブ＃１の実行可能時間は、時刻Ｔ１０から、時刻Ｔ１１よりも退避時間だけ前までとなる。また、ジョブデータの復帰にはＲＡＭ読み出しに関する復帰時間を要する。このため、時刻Ｔ１２よりも復帰時間だけ後にジョブ＃１が再開することになる。よって、中断後のジョブ＃１の実行可能時間は、時刻Ｔ１２の復帰時間だけ後から、時刻Ｔ１３までとなる。ただし、ジョブ＃１が時刻Ｔ１３までに終了する見込みがない場合、ジョブ＃１の実行可能時間は、時刻Ｔ１２の復帰時間だけ後から、時刻Ｔ１３よりも退避時間だけ前までとなる。
【００６１】
管理ノード１００は、ジョブ＃１の実行予定時間、空き時間（時刻Ｔ１０から時刻Ｔ１１までと、時刻Ｔ１２から時刻Ｔ１３まで）、退避時間の推定値、復帰時間の推定値などに基づいて、ジョブスワップを選択することが適切か判断する。連続した実行可能時間が短い場合には、ジョブ＃１の中断が高頻度で発生することになり、退避・復帰のオーバヘッドによって実質的なノード使用効率が低下するおそれがあるためである。
【００６２】
図７は、チェックポイントリスタートの第１のスケジューリング例を示す図である。
ここでは、現在のスケジュールにおいて、ある計算ノード群が、時刻Ｔ２１から時刻Ｔ２２までジョブ＃２に割り当てられており、時刻Ｔ２３から時刻Ｔ２４までジョブ＃３に割り当てられているとする。当該計算ノード群は、時刻Ｔ２０から時刻Ｔ２１まで空いており、時刻Ｔ２２から時刻Ｔ２３まで空いている。ここで、実行予定時間が上記の各空き時間よりも長いジョブ＃１が投入されたとする。この場合、管理ノード１００は、計算リソースが逼迫しているため、断片化された空き計算リソースをジョブ＃１に割り当てることを許容する。例えば、管理ノード１００は、時刻Ｔ２０にジョブ＃１を開始させる。
【００６３】
中断方法としてチェックポイントリスタート（同一ノード復帰）を選択する場合、ジョブデータの退避にはＨＤＤ書き込みに関する退避時間を要する。このため、時刻Ｔ２１よりも退避時間だけ前にジョブ＃１が停止することになる。よって、中断前のジョブ＃１の実行可能時間は、時刻Ｔ２０から、時刻Ｔ２１よりも退避時間だけ前までとなる。また、ジョブデータの復帰にはＨＤＤ読み出しに関する復帰時間を要する。このため、時刻Ｔ２２よりも復帰時間だけ後にジョブ＃１が再開することになる。よって、中断後のジョブ＃１の実行可能時間は、時刻Ｔ２２の復帰時間だけ後から、時刻Ｔ２３まで（または、時刻Ｔ２３よりも退避時間だけ前まで）となる。
【００６４】
管理ノード１００は、ジョブ＃１の実行予定時間、空き時間（時刻Ｔ２０から時刻Ｔ２１までと、時刻Ｔ２２から時刻Ｔ２３まで）、退避時間の推定値、復帰時間の推定値などに基づいて、チェックポイントリスタート（同一ノード復帰）を選択することが適切か判断する。なお、チェックポイントリスタート（同一ノード復帰）の退避時間や復帰時間は、通常、ジョブスワップの場合よりも長くなる。
【００６５】
図８は、チェックポイントリスタートの第２のスケジューリング例を示す図である。
ここでは、現在のスケジュールにおいて、ある計算ノード群が、時刻Ｔ３１から時刻Ｔ３２までジョブ＃２に割り当てられており、時刻Ｔ３３から時刻Ｔ３５までジョブ＃４に割り当てられているとする。当該計算ノード群は、時刻Ｔ３０から時刻Ｔ３１まで空いており、時刻Ｔ３２から時刻Ｔ３３まで空いている。また、別の計算ノード群が、時刻Ｔ３１から時刻Ｔ３２までジョブ＃２に割り当てられており、時刻Ｔ３４から時刻Ｔ３５までジョブ＃３に割り当てられているとする。当該別の計算ノード群は、時刻Ｔ３２から時刻Ｔ３４まで空いている。ここで、実行予定時間が上記の各空き時間よりも長いジョブ＃１が投入されたとする。この場合、管理ノード１００は、計算リソースが逼迫しているため、断片化された空き計算リソースをジョブ＃１に割り当てることを許容する。例えば、管理ノード１００は、時刻Ｔ３０にジョブ＃１を開始させる。
【００６６】
中断方法としてチェックポイントリスタート（別ノード復帰）を選択する場合、ジョブデータの退避にはＨＤＤ書き込みに関する退避時間を要する。このため、時刻Ｔ３１よりも退避時間だけ前にジョブ＃１が停止することになる。よって、中断前のジョブ＃１の実行可能時間は、時刻Ｔ３０から、時刻Ｔ３１よりも退避時間だけ前までとなる。また、ジョブデータの復帰にはＨＤＤ読み出し、データ転送およびＲＡＭ書き込みに関する復帰時間を要する。このため、時刻Ｔ３２よりも復帰時間だけ後にジョブ＃１が再開することになる。よって、中断後のジョブ＃１の実行可能時間は、時刻Ｔ３２の復帰時間だけ後から、時刻Ｔ３４まで（または、時刻Ｔ３４よりも退避時間だけ前まで）となる。
【００６７】
管理ノード１００は、ジョブ＃１の実行予定時間、空き時間（時刻Ｔ３０から時刻Ｔ３１までと、時刻Ｔ３２から時刻Ｔ３４まで）、退避時間の推定値、転送時間を含む復帰時間の推定値などに基づいて、チェックポイントリスタート（別ノード復帰）を選択することが適切か判断する。なお、チェックポイントリスタート（別ノード復帰）の復帰時間は、通常、チェックポイントリスタート（同一ノード復帰）の場合よりも長くなる。
【００６８】
図９は、マイグレーションのスケジューリング例を示す図である。
ここでは、現在のスケジュールにおいて、ある計算ノード群が、時刻Ｔ４１から時刻Ｔ４３までジョブ＃２に割り当てられているとする。当該計算ノード群は、時刻Ｔ４０から時刻Ｔ４１まで空いている。また、別の計算ノード群が、時刻Ｔ４２から時刻Ｔ４３までジョブ＃３に割り当てられているとする。当該別の計算ノード群は、時刻Ｔ４０から時刻Ｔ４２まで空いている。ここで、実行予定時間が上記の各空き時間よりも長いジョブ＃１が投入されたとする。この場合、管理ノード１００は、計算リソースが逼迫しているため、断片化された空き計算リソースをジョブ＃１に割り当てることを許容する。例えば、管理ノード１００は、時刻Ｔ４０にジョブ＃１を開始させる。
【００６９】
中断方法としてマイグレーションを選択する場合、ＲＡＭ読み出し、データ転送およびＲＡＭ書き込みに関するマイグレーション時間を要する。このため、時刻Ｔ４１よりもマイグレーション時間だけ前にジョブ＃１が停止することになる。よって、中断前のジョブ＃１の実行可能時間は、時刻Ｔ４０から、時刻Ｔ４１よりもマイグレーション時間だけ前までとなる。また、中断後のジョブ＃１の実行可能時間は、時刻Ｔ４１から、時刻Ｔ４２まで（または、時刻Ｔ４２よりも退避時間だけ前まで）となる。
【００７０】
管理ノード１００は、ジョブ＃１の実行予定時間、空き時間（時刻Ｔ４０から時刻Ｔ４１までと、時刻４１から時刻Ｔ４２まで）、転送時間を含むマイグレーション時間の推定値などに基づいて、マイグレーションを選択することが適切か判断する。
【００７１】
このように、管理ノード１００は、ジョブスケジューリングを行うにあたって退避時間・復帰時間やマイグレーション時間を推定する。この退避時間・復帰時間やマイグレーション時間の推定精度は、並列計算システムの処理能力（スループット）に影響を与える。そこで、管理ノード１００は、推定値をハードウェア性能のみに基づいて静的に算出する代わりに、様々な要因を考慮して動的に算出することとする。以下では、退避時間・復帰時間やマイグレーション時間の推定を中心に説明する。
【００７２】
図１０は、管理ノードと計算ノードの機能例を示すブロック図である。
管理ノード１００は、パラメータ記憶部１２１、測定情報記憶部１２２、リソース情報収集部１３１、スケジューリング部１３２、時間推定部１３３およびフィードバック部１３４を有する。パラメータ記憶部１２１および測定情報記憶部１２２は、例えば、ＲＡＭ１０２またはＨＤＤ１０３に確保した記憶領域として実現できる。リソース情報収集部１３１、スケジューリング部１３２、時間推定部１３３およびフィードバック部１３４は、例えば、ＣＰＵ１０１が実行するプログラムモジュールとして実現できる。
【００７３】
パラメータ記憶部１２１は、退避時間・復帰時間・マイグレーション時間などのジョブ中断に関する時間の推定に用いるパラメータの値であって、予め決められた定数を記憶する。この定数は、計算ノード１Ａ〜９Ａ，１Ｂ〜９Ｂ，…，１Ｆ〜９Ｆやリンクのハードウェア性能に基づいて決まる。また、パラメータ記憶部１２１は、ジョブ中断に関する時間の推定に用いるパラメータの値であって、フィードバック部１３４によって更新される係数を記憶する。測定情報記憶部１２２は、ジョブ中断に関する時間の推定に用いた指標値であって、ジョブの実行状況に応じて変化する変数を記憶する。また、測定情報記憶部１２２は、ジョブ中断に関する時間を推定した後に測定された転送時間を記憶する。測定情報記憶部１２２に記憶された指標値や転送時間は、ジョブ中断に関する時間の推定に用いる係数を、回帰分析によって算出するときに参照される。
【００７４】
リソース情報収集部１３１は、計算ノード１Ａ〜９Ａ，１Ｂ〜９Ｂ，…，１Ｆ〜９Ｆから定期的に、リソースの使用状況を示すリソース情報を収集する。リソース情報には、各計算ノードで実行されているプロセスのメモリ使用量が含まれる。また、リソース情報には、各計算ノードによるリンク毎の単位時間当たりのリンク使用量（データ通信量）が含まれる。リソース情報収集部１３１は、スケジューリング部１３２からの要求に応じて、最新のリソース情報の少なくとも一部をスケジューリング部１３２に提供する。
【００７５】
スケジューリング部１３２は、ジョブのスケジュール、すなわち、投入された各ジョブを何れの時刻に何れの計算ノードを用いて実行するかを決定する。スケジューリング部１３２は、相互結合網３０のトポロジや計算ノード１Ａ〜９Ａ，１Ｂ〜９Ｂ，…，１Ｆ〜９Ｆの座標を示すトポロジ情報を保持する。また、スケジューリング部１３２は、現在までに決定したジョブのスケジュールを示すスケジュール情報を保持する。トポロジ情報やスケジュール情報は、ＲＡＭ１０２またはＨＤＤ１０３に記憶されてもよい。
【００７６】
各ジョブに対しては、ユーザから、当該ジョブが使用する計算ノードの数および隣接関係を示す計算ノード条件（例えば、３×３個など）が指定される。また、各ジョブに対しては、ユーザから、当該ジョブの実行予定時間が指定される。スケジューリング部１３２は、新たなジョブが投入されると、最新のスケジュール情報を参照して、計算ノード条件を満たしており実行予定時間以上の連続した空き時間をもつ計算リソースを検索する。今後所定時間以内に該当する計算リソースが存在しない場合、スケジューリング部１３２は、断片化された計算リソースを利用することを検討する。
【００７７】
断片化された計算リソースを利用する場合、スケジューリング部１３２は、連続した空き時間が実行予定時間よりも短い計算ノードをジョブに割り当てて、当該ジョブを早く開始させる。割り当て時間の終了が近づくと、スケジューリング部１３２は、最新のスケジュール情報を参照して、中断方法および再開後に用いる計算ノード（再開ノード）を決定する。中断方法および再開ノードは、ジョブ中断に関する時間（退避時間と復帰時間、または、マイグレーション時間）の推定値を考慮して決定する。
【００７８】
中断方法としてジョブスワップまたはチェックポイントリスタート（同一ノード復帰）を検討する場合、スケジューリング部１３２は、リソース情報収集部１３１が収集したリソース情報に基づいて、ジョブに割り当てられた計算ノードのメモリ使用量を算出する。そして、スケジューリング部１３２は、中断方法とメモリ使用量とを指定して、時間推定部１３３に退避時間・復帰時間の推定を依頼する。スケジューリング部１３２は、推定された退避時間・復帰時間に基づいて、ノード使用効率の観点から、選択した中断方法および選択した再開ノードの候補を採用するか否か判断する。
【００７９】
中断方法としてチェックポイントリスタート（別ノード復帰）またはマイグレーションを検討する場合、スケジューリング部１３２は、リソース情報収集部１３１が収集したリソース情報に基づいて、ジョブに割り当てられた計算ノードのメモリ使用量を算出する。また、スケジューリング部１３２は、データの転送元と転送先の間に位置する経由ノードを判定し、収集されたリソース情報に基づいて、転送時間に影響する複数の指標値を算出する。そして、スケジューリング部１３２は、中断方法とメモリ使用量と複数の指標値を指定して、時間推定部１３３に退避時間・復帰時間またはマイグレーション時間の推定を依頼する。スケジューリング部１３２は、推定された退避時間・復帰時間またはマイグレーション時間に基づいて、ノード使用効率の観点から、選択した中断方法および選択した再開ノードの候補を採用するか否か判断する。
【００８０】
また、スケジューリング部１３２は、決定したスケジュールに従い、計算ノード１Ａ〜９Ａ，１Ｂ〜９Ｂ，…，１Ｆ〜９Ｆにジョブのプロセスの起動を指示する。また、ジョブスワップまたはチェックポイントリスタートによるジョブ中断を決定した場合、スケジューリング部１３２は、退避開始時刻になると関連する計算ノードにデータの退避を指示し、復帰開始時刻になると関連する計算ノードにデータの復帰を指示する。マイグレーションによるジョブ中断を決定した場合、スケジューリング部１３２は、マイグレーション開始時刻になると関連する計算ノードにマイグレーションを指示する。
【００８１】
また、上記でチェックポイントリスタート（別ノード復帰）またはマイグレーションを採用した場合、スケジューリング部１３２は、算出したメモリ使用量および複数の指標値を測定情報記憶部１２２に保存する。データ転送が行われると、スケジューリング部１３２は、実際の転送時間を測定し、測定した転送時間を測定情報記憶部１２２に保存する。そして、スケジューリング部１３２は、係数を更新するよう依頼する。
【００８２】
時間推定部１３３は、スケジューリング部１３２からの依頼に基づいて、ジョブ中断に関する時間（退避時間・復帰時間またはマイグレーション時間）を推定する。時間の推定には、スケジューリング部１３２から指定される中断方法・メモリ使用量・複数の指標値と、パラメータ記憶部１２１に記憶されている定数・係数が用いられる。
【００８３】
中断方法としてジョブスワップまたはチェックポイントリスタート（同一ノード復帰）が指定された場合、時間推定部１３３は、メモリ使用量と定数から退避時間と復帰時間を推定する。中断方法としてチェックポイントリスタート（別ノード復帰）が指定された場合、時間推定部１３３は、メモリ使用量と定数から退避時間を推定する。また、時間推定部１３３は、メモリ使用量と複数の指標値と定数と係数から転送時間を推定し、転送時間を含む復帰時間を推定する。マイグレーションが指定された場合、時間推定部１３３は、チェックポイントリスタート（別ノード復帰）と同様に転送時間を推定し、転送時間を含むマイグレーション時間を推定する。これらの時間の推定方法の詳細は後述する。
【００８４】
フィードバック部１３４は、スケジューリング部１３２からの依頼に基づいて、転送時間の推定に用いられる係数を更新する。フィードバック部１３４は、測定された転送時間を係数にフィードバックしていると言うこともできる。フィードバック部１３４は、測定情報記憶部１２２に記憶された複数の指標値とメモリ使用量と測定された転送時間の組を用いて回帰分析を行い、係数を算出する。フィードバック部１３４は、算出した係数を、時間推定部１３３を介してパラメータ記憶部１２１に上書き保存する。
【００８５】
なお、測定情報記憶部１２２には、複数の指標値とメモリ使用量と測定された転送時間の組が、複数蓄積される。フィードバック部１３４は、この複数の組を用いて回帰分析を行う。一度回帰分析に使用した組も、測定情報記憶部１２２から削除せずに残しておいてよい。ただし、測定情報記憶部１２２に書き込まれてから一定時間以上経過した古い組を、測定情報記憶部１２２から削除するようにしてもよい。
【００８６】
計算ノード１Ａは、リソース監視部３１１、ジョブ起動部３１２およびジョブ中断部３１３を有する。リソース監視部３１１、ジョブ起動部３１２およびジョブ中断部３１３は、例えば、ＣＰＵ１０１が実行するプログラムモジュールとして実現できる。他の計算ノードも、計算ノード１Ａと同様の構成によって実現できる。
【００８７】
リソース監視部３１１は、計算ノード１Ａに関するリソース情報を生成して管理ノード１００に送信する。リソース監視部３１１は、管理ノード１００からの要求に応じてリソース情報を送信してもよいし、要求なしに管理ノード１００に対して定期的にリソース情報を送信してもよい。リソース情報には、実行中のジョブのプロセスが使用している計算ノード１ＡのＲＡＭ領域の大きさ（メモリ使用量）が含まれる。また、リソース情報には、計算ノード１Ａに接続されているリンク毎に、計算ノード１Ａが単位時間当たりに送信したデータの量の平均値（例えば、直近の所定時間の平均値）が含まれる。
【００８８】
ジョブ起動部３１２は、管理ノード１００からジョブ起動コマンドを受信すると、ジョブ起動コマンドで指定されたプログラムを、ジョブ起動コマンドで指定された引数を適用して実行する。これにより、計算ノード１Ａでジョブのプロセスが起動する。
【００８９】
ジョブ中断部３１３は、管理ノード１００からの指示に応じてジョブ中断を実行する。ジョブ中断部３１３は、ジョブスワップ部３１４、チェックポイントリスタート部３１５およびマイグレーション部３１６を有する。
【００９０】
ジョブスワップ部３１４は、ジョブスワップを指定した退避通知を受信すると、実行中のプロセスを停止させ、プロセスのデータをＲＡＭ上の他の記憶領域に退避する。その後に復帰通知を受信すると、ジョブスワップ部３１４は、退避したデータを元の位置に復帰させ、プロセスを再開させる。
【００９１】
チェックポイントリスタート部３１５は、チェックポイントリスタート（同一ノード復帰）を指定した退避通知を受信すると、実行中のプロセスを停止させ、プロセスのデータをＨＤＤに退避する。その後に復帰通知を受信すると、チェックポイントリスタート部３１５は、退避したデータをＲＡＭに復帰させ、プロセスを再開させる。
【００９２】
また、チェックポイントリスタート部３１５は、チェックポイントリスタート（別ノード復帰）を指定した退避通知を受信すると、実行中のプロセスを停止させ、プロセスのデータをＨＤＤに退避する。その後に再開ノードを指定した復帰通知を受信すると、チェックポイントリスタート部３１５は、退避したデータをＲＡＭに読み込み、指定された再開ノードに転送する。また、チェックポイントリスタート部３１５は、他の計算ノードからデータを受信すると、受信したデータをＲＡＭに格納し、プロセスを再開させる。データ転送が終わった時点で、チェックポイントリスタート部３１５は、管理ノード１００に完了通知を送信する。なお、管理ノード１００は転送元の計算ノードに加えて再開ノードに対しても、復帰通知を送信するようにしてもよい。
【００９３】
マイグレーション部３１６は、再開ノードを指定したマイグレーション通知を受信すると、実行中のプロセスを停止させ、プロセスのデータを指定された再開ノードに転送する。また、マイグレーション部３１６は、他の計算ノードからデータを受信すると、受信したデータをＲＡＭに格納し、プロセスを再開させる。データ転送が終わった時点で、マイグレーション部３１６は、管理ノード１００に完了通知を送信する。なお、管理ノード１００はマイグレーション元の計算ノードに加えてマイグレーション先ノードに対しても、マイグレーション通知を送信するようにしてもよい。
【００９４】
図１１は、定数テーブルの例を示す図である。
定数テーブル１２３は、パラメータ記憶部１２１に記憶されている。定数テーブル１２３には、定数名と設定値の組が登録される。定数名には、ＲＡＭ読み出し速度、ＲＡＭ書き込み速度、ＨＤＤ読み出し速度、ＨＤＤ書き込み速度および理想帯域幅が含まれる。
【００９５】
ＲＡＭ読み出し速度は、単位時間当たりにＲＡＭから読み出し可能なデータ量を示す。ＲＡＭ書き込み速度は、単位時間当たりにＲＡＭに書き込み可能なデータ量を示す。ＲＡＭ読み出し速度とＲＡＭ書き込み速度は同じであってもよい。ＨＤＤ読み出し速度は、単位時間当たりにＨＤＤから読み出し可能なデータ量を示す。ＨＤＤ書き込み速度は、単位時間当たりにＨＤＤに書き込み可能なデータ量を示す。理想帯域幅は、２つの計算ノードの間でデータを転送する場合の理論上の伝送速度を示す。
【００９６】
図１２は、回帰分析テーブルの例を示す図である。
回帰分析テーブル１２４は、測定情報記憶部１２２に記憶されている。回帰分析テーブル１２４は、ノード使用率、リンク使用平均、リンク使用分散、ホップ数、ジョブサイズ、メモリ使用量および転送時間の項目を有する。ノード使用率、リンク使用平均、リンク使用分散、ホップ数およびジョブサイズは、転送時間に影響する指標値である。
【００９７】
ノード使用率は、あるジョブのデータを転送する際に経由する経由ノードのうち、他のジョブを実行中であるものの割合を示す。経由ノードは、転送元ノード群と転送先ノード群の間で、ジョブに属する少なくとも１つのプロセスのデータを転送する計算ノードである。何れの計算ノードが経由ノードになるかは、ルーティングアルゴリズムに依存する。図４の例では、計算ノード４Ａ〜９Ａ，４Ｂ〜９Ｂ，４Ｃ〜９Ｃが経由ノードである。
【００９８】
リンク使用平均は、リンク毎の単位時間当たりのデータ送信量を、経由ノードに接続されている全てのリンクの間で平均化したものである。リンク使用分散は、リンク毎の単位時間当たりのデータ送信量について、経由ノードに接続されている全てのリンクの間の分散を算出したものである。ホップ数は、経由するリンクの数を、転送元ノードと転送先ノードの組全てについて平均化したものである。図４の例では、転送元ノードと転送先ノードの組それぞれは９個のリンクを経由するため、ホップ数は９である。ジョブサイズは、転送対象のジョブに割り当てられている計算ノードの数を示す。
【００９９】
このメモリ使用量は、計算ノード毎のメモリ使用量を、転送対象のジョブに割り当てられている全ての計算ノードの間で平均化したものである。ただし、計算ノード毎のメモリ使用量を、対象ジョブに割り当てられている全ての計算ノードについて合計したもの（ジョブ全体のメモリ使用量）を、指標値として用いてもよい。また、対象ジョブに割り当てられている計算ノードの中で最大のメモリ使用量を、指標値として用いてもよい。転送時間は、データ転送に要した時間の測定値を示す。第２の実施の形態では、管理ノード１００が１つ目の計算ノードに復帰通知またはマイグレーション通知を送信してから、最後の計算ノードからの完了通知を受信するまでの時間を、転送時間として測定している。
【０１００】
図１３は、係数テーブルの例を示す図である。
転送時間を推定する推定式は、上記の５つの指標値（ノード使用率、リンク使用平均、リンク使用分散、ホップ数およびジョブサイズ）を重み付ける５つの係数を含む。５つの係数は、フィードバック部１３４が回帰分析を行うことで算出する。
【０１０１】
係数テーブル１２５は、パラメータ記憶部１２１に記憶されている。係数テーブル１２５には、係数名と算出値の組が登録される。係数名には、ノード使用率に対応する係数Ａ、リンク使用平均に対応する係数Ｂ、リンク使用分散に対応する係数Ｃ、ホップ数に対応する係数Ｄ、および、ジョブサイズに対応する係数Ｅが含まれる。これら５個の係数それぞれの算出値は、実数として表現される。なお、回帰分析が行われる前は、係数Ａ，Ｂ，Ｃ，Ｄ，Ｅの算出値は、０などの所定値に設定されている。
【０１０２】
ここで、ジョブ中断に関する時間の推定方法について説明する。
（Ａ）ジョブスワップの退避時間は、メモリ使用量／ＲＡＭ書き込み速度、として算出できる。メモリ使用量は変数であり、収集されたリソース情報から算出できる。ＲＡＭ書き込み速度は定数であり、定数テーブル１２３に登録されている。ジョブスワップの復帰時間は、メモリ使用量／ＲＡＭ読み出し速度、として算出できる。ＲＡＭ読み出し速度は定数であり、定数テーブル１２３に登録されている。
【０１０３】
（Ｂ）チェックポイントリスタート（同一ノード復帰）の退避時間は、メモリ使用量／ＨＤＤ書き込み速度、として算出できる。ＨＤＤ書き込み速度は定数であり、定数テーブル１２３に登録されている。チェックポイントリスタート（同一ノード復帰）の復帰時間は、メモリ使用量／ＨＤＤ読み出し速度、として算出できる。ＨＤＤ読み出し速度は定数であり、定数テーブル１２３に登録されている。
【０１０４】
（Ｃ）チェックポイントリスタート（別ノード復帰）の退避時間は、メモリ使用量／ＨＤＤ書き込み速度、として算出できる。チェックポイントリスタート（別ノード復帰）の復帰時間は、メモリ使用量／ＨＤＤ読み出し速度＋転送時間＋メモリ使用量／ＲＡＭ書き込み速度、として算出できる。（Ｄ）マイグレーション時間は、メモリ使用量／ＲＡＭ読み出し速度＋転送時間＋メモリ使用量／ＲＡＭ書き込み速度、として算出できる。
【０１０５】
上記の転送時間は、メモリ使用量／平均帯域幅、として算出できる。平均帯域幅は、２つの計算ノードの間でデータを転送する場合の現実的な伝送速度を示す。平均帯域幅は、理想帯域幅＋Ａｘ0＋Ｂｘ1＋Ｃｘ2＋Ｄｘ3＋Ｅｘ4、として算出できる。
【０１０６】
理想帯域幅は定数であり、定数テーブル１２３に登録されている。ｘ0はノード使用率を示す変数であり、スケジュール情報から算出できる。ｘ1はリンク使用平均を示す変数であり、収集されたリソース情報から算出できる。ｘ2はリンク使用分散を示す変数であり、収集されたリソース情報から算出できる。ｘ3はホップ数を示す変数であり、トポロジ情報から算出できる。ｘ4はジョブサイズを示す変数であり、スケジュール情報から算出できる。係数Ａ，Ｂ，Ｃ，Ｄ，Ｅは変数ｘ0，ｘ1，ｘ2，ｘ3，ｘ4が平均帯域幅に与える影響の重みを示し、係数テーブル１２５に登録されている。実際の転送時間を係数Ａ，Ｂ，Ｃ，Ｄ，Ｅにフィードバックすることで、転送時間の推定精度を向上できる。
【０１０７】
次に、管理ノード１００が行う処理について説明する。
図１４は、ジョブ中断の手順例を示すフローチャートである。
このジョブ中断の処理は、あるジョブに実行予定時間よりも短い計算リソースが割り当てられており、割り当てられた計算リソースの終了が近づいた（例えば、次のジョブの開始予定時刻まで所定時間未満となった）ときに実行される。
【０１０８】
（Ｓ１０）スケジューリング部１３２は、ジョブ中断スケジュールを決定する。ジョブ中断スケジュールは、中断方法、再開ノード、退避時間（推定）、退避開始時刻、退避完了時刻、復帰時間（推定）、復帰開始時刻、復帰完了時刻、マイグレーション時間（推定）、マイグレーション開始時刻、マイグレーション完了時刻などを示す。ジョブ中断スケジュールの決定方法については後述する。
【０１０９】
（Ｓ１１）スケジューリング部１３２は、決定された再開ノードが、対象ジョブを実行中の計算ノードとは別の計算ノードであるか判断する。別の計算ノードである場合はステップＳ１２に処理が進み、同じ計算ノードである場合はステップＳ１３に処理が進む。
【０１１０】
（Ｓ１２）スケジューリング部１３２は、退避時間、復帰時間、マイグレーション時間などのジョブ中断に関する時間の推定に用いた指標値およびメモリ使用量を、測定情報記憶部１２２に記憶された回帰分析テーブル１２４に保存する。指標値には、ノード使用率、リンク使用平均、リンク使用分散、ホップ数およびジョブサイズが含まれる。
【０１１１】
（Ｓ１３）スケジューリング部１３２は、中断方法がマイグレーションであるか判断する。マイグレーションである場合はステップＳ１７に処理が進み、ジョブスワップまたはチェックポイントリスタートである場合はステップＳ１４に処理が進む。
【０１１２】
（Ｓ１４）スケジューリング部１３２は、決定された退避開始時刻になると、対象ジョブを実行中の計算ノードに対して退避通知を送信する。
（Ｓ１５）スケジューリング部１３２は、決定された復帰開始時刻になると、対象ジョブを実行中の計算ノードに対して復帰通知を送信する。このとき、スケジューリング部１３２は、１つ目の復帰通知を送信した時刻を記録しておく。なお、再開ノードが別の計算ノードである場合、スケジューリング部１３２は、更にデータ転送先の計算ノードに対して復帰通知を送信するようにしてもよい。
【０１１３】
（Ｓ１６）スケジューリング部１３２は、再開ノードが対象ジョブを実行中の計算ノードと同一の計算ノードであるか判断する。同一の計算ノードである場合はジョブ中断の処理が終了し、別の計算ノードである場合はステップＳ１８に処理が進む。
【０１１４】
（Ｓ１７）スケジューリング部１３２は、決定されたマイグレーション開始時刻になると、対象ジョブを実行中の計算ノードに対してマイグレーション通知を送信する。このとき、スケジューリング部１３２は、１つ目のマイグレーション通知を送信した時刻を記録しておく。なお、スケジューリング部１３２は、更にマイグレーション先の計算ノードに対してマイグレーション通知を送信するようにしてもよい。
【０１１５】
（Ｓ１８）スケジューリング部１３２は、ステップＳ１５の復帰通知またはステップＳ１７のマイグレーション通知に対応する、データ転送の完了を示す完了通知を受信する。完了通知は、例えば、転送先またはマイグレーション先の計算ノードから受信される。
【０１１６】
（Ｓ１９）スケジューリング部１３２は、１つ目の復帰通知またはマイグレーション通知を送信したとき（ステップＳ１５またはステップＳ１７で記録した時刻）から、最後の完了通知を受信したときまでの時間を、転送時間として測定する。そして、スケジューリング部１３２は、測定した転送時間を、ステップＳ１２で保存した指標値やメモリ使用量と対応付けて回帰分析テーブル１２４に保存する。
【０１１７】
（Ｓ２０）スケジューリング部１３２は、係数の更新をフィードバック部１３４に依頼する。フィードバック部１３４は、回帰分析テーブル１２４から、蓄積されている指標値とメモリ使用量と転送時間の組を複数取得する。
【０１１８】
（Ｓ２１）フィードバック部１３４は、ステップＳ２０で取得した指標値とメモリ使用量と転送時間を用いて回帰分析を行い、転送時間の推定式に用いられる係数Ａ，Ｂ，Ｃ，Ｄ，Ｅを算出する。例えば、フィードバック部１３４は、平均帯域幅＝メモリ使用量／転送時間を目的変数（従属変数）とし、ノード使用率・リンク使用平均・リンク使用分散・ホップ数・ジョブサイズを説明変数（独立変数）として、回帰分析を行う。フィードバック部１３４は、算出した係数Ａ，Ｂ，Ｃ，Ｄ，Ｅを時間推定部１３３に通知する。時間推定部１３３は、パラメータ記憶部１２１に記憶された係数テーブル１２５に係数Ａ，Ｂ，Ｃ，Ｄ，Ｅを上書き保存することで、係数テーブル１２５を更新する。
【０１１９】
図１５は、スケジュール決定の手順例を示すフローチャートである。
このスケジュール決定の処理は、上記のステップＳ１０で実行される。
（Ｓ３０）スケジューリング部１３２は、最新のスケジュール情報から、現在以降に存在する一纏まりの空き計算リソース（隣接した計算ノード群および連続した空き時間をもつもの）を検出し、検出した空き計算リソースを時刻の早い順にソートする。ただし、スケジューリング部１３２は、検出する空き計算リソースを、対象ジョブの計算ノード条件（使用する計算ノードの数および隣接関係）を満たすものに限定する。スケジューリング部１３２は、時刻の早い方から空き計算リソースを１つ選択する。
【０１２０】
（Ｓ３１）スケジューリング部１３２は、ステップＳ３０で選択した空き計算リソースをもつ計算ノードが、対象ジョブを実行中の計算ノードと同一であるか判断する。また、スケジューリング部１３２は、対象ジョブを実行中の計算ノードの全てが、他のジョブのデータを追加的に記憶するのに十分なメモリ残量を有しているか（例えば、メモリ残量が閾値以上であるか）判断する。後者の条件は、収集されたリソース情報が示す各計算ノードのメモリ使用量に基づいて判断できる。上記２つの条件を満たす場合はステップＳ３２に処理が進み、少なくとも一方を満たさない場合はステップＳ３３に処理が進む。
【０１２１】
（Ｓ３２）スケジューリング部１３２は、ジョブスワップを選択する。
（Ｓ３３）スケジューリング部１３２は、選択した空き計算リソースをもつ計算ノードが、対象ジョブを実行中の計算ノードとは別であるか判断する。また、スケジューリング部１３２は、使用中の計算リソースと選択した空き計算リソースとが中断時に同時に使用可能であるか（例えば、使用中の計算リソースと選択した空き計算リソースとが、時間軸上で所定時間以上重複しているか）判断する。上記２つの条件を満たす場合はステップＳ３４に処理が進み、少なくとも一方を満たさない場合はステップＳ３５に処理が進む。
【０１２２】
（Ｓ３４）スケジューリング部１３２は、マイグレーションを選択する。
（Ｓ３５）スケジューリング部１３２は、チェックポイントリスタートを選択する。
（Ｓ３６）スケジューリング部１３２は、時間推定部１３３を利用して、ジョブ中断に関する時間を推定する。ジョブスワップまたはチェックポイントリスタートが選択された場合は退避時間および復帰時間が推定され、マイグレーションが選択された場合はマイグレーション時間が推定される。時間推定については後述する。
【０１２３】
（Ｓ３７）スケジューリング部１３２は、中断方法がマイグレーションであるか判断する。マイグレーションである場合はステップＳ３９に処理が進み、ジョブスワップまたはチェックポイントリスタートである場合はステップＳ３８に処理が進む。
【０１２４】
（Ｓ３８）スケジューリング部１３２は、現在の計算リソースの終了時刻（次のジョブの開始予定時刻）より退避時間だけ早い時刻を、退避開始時刻として算出する。また、スケジューリング部１３２は、現在の計算リソースの終了時刻を退避完了時刻とみなし、次のジョブの終了予定時刻を復帰開始時刻とみなす。また、スケジューリング部１３２は、復帰開始時刻から復帰時間だけ遅い時刻を、復帰完了時刻として算出する。スケジューリング部１３２は、復帰完了時刻から、選択した空き計算リソースの終了時刻までの時間を、実行可能時間として算出する。ただし、スケジューリング部１３２は、次のジョブ中断を行うための退避時間を実行可能時間から差し引いてもよい。
【０１２５】
（Ｓ３９）スケジューリング部１３２は、現在の計算リソースの終了時刻（次のジョブの開始予定時刻）よりマイグレーション時間だけ早い時刻を、マイグレーション開始時刻として算出する。また、スケジューリング部１３２は、現在の計算リソースの終了時刻をマイグレーション完了時刻とみなす。スケジューリング部１３２は、マイグレーション完了時刻から、選択した空き計算リソースの終了時刻までの時間を、実行可能時間として算出する。ただし、スケジューリング部１３２は、次のジョブ中断を行うための退避時間を実行可能時間から差し引いてもよい。
【０１２６】
（Ｓ４０）スケジューリング部１３２は、ジョブが現在の計算リソースを使い切った後の残り実行予定時間を算出する。残り実行予定時間は、ジョブに対して当初指定された実行予定時間とスケジュール情報に基づいて算出できる。スケジューリング部１３２は、ステップＳ３８またはステップＳ３９で算出した実行可能時間が、残り実行予定時間以上であるか判断する。実行可能時間が残り実行予定時間以上である場合はステップＳ４２に処理が進み、それ以外の場合はステップＳ４１に処理が進む。
【０１２７】
（Ｓ４１）スケジューリング部１３２は、ステップＳ３８またはステップＳ３９で算出した実行可能時間が、所定の閾値以上であるか判断する。実行可能時間が閾値以上である場合はステップＳ４２に処理が進む。それ以外の場合はステップＳ３０に処理が進み、次に時刻の早い空き計算リソースが割り当て候補として選択される。
【０１２８】
（Ｓ４２）スケジューリング部１３２は、最後に選択した空き計算リソースを用いるジョブ中断スケジュールを決定する。ジョブ中断スケジュールは、中断方法、再開ノード、退避時間、退避開始時刻、退避完了時刻、復帰時間、復帰開始時刻、復帰完了時刻、マイグレーション時間、マイグレーション開始時刻、マイグレーション完了時刻などを示す。
【０１２９】
図１６は、時間推定の手順例を示すフローチャートである。
この時間推定の処理は上記のステップＳ３６において実行される。
（Ｓ５０）スケジューリング部１３２は、メモリ使用量を算出する。例えば、スケジューリング部１３２は、収集されたリソース情報から、対象ジョブを実行中の計算ノードそれぞれのメモリ使用量を検索し、メモリ使用量の平均値または最大値を算出する。
【０１３０】
（Ｓ５１）スケジューリング部１３２は、再開ノードが対象ジョブを実行中の計算ノードと同一の計算ノードであるか判断する。同一の計算ノードである場合はステップＳ５５に処理が進み、別の計算ノードである場合はステップＳ５２に処理が進む。
【０１３１】
（Ｓ５２）スケジューリング部１３２は、トポロジ情報と、対象ジョブを実行中の計算ノードの座標と、再開ノードの座標と、予め各計算ノードに設定されているルーティングアルゴリズムとに基づいて、対象ジョブのデータを転送する経由ノードを判定する。また、スケジューリング部１３２は、転送元の計算ノードと転送先の計算ノードの組それぞれについてホップ数を算出し、ホップ数の平均を算出する。
【０１３２】
（Ｓ５３）スケジューリング部１３２は、スケジュール情報に基づいて、対象ジョブに割り当てられているノードの数（ジョブサイズ）を算出する。また、スケジューリング部１３２は、スケジュール情報に基づいて、ステップＳ５２で判定された経由ノードのうち他のジョブに割り当てられている経由ノードをカウントし、カウントした経由ノードの数／判定された全ての経由ノードの数をノード使用率として算出する。
【０１３３】
（Ｓ５４）スケジューリング部１３２は、収集されたリソース情報から、ステップＳ５２で判定された経由ノードのリンク使用量を検索し、経由ノードが使用するリンク１個当たりのリンク使用量の平均および分散を算出する。
【０１３４】
（Ｓ５５）スケジューリング部１３２は、中断方法とステップＳ５０で算出したメモリ使用量とを指定して、ジョブ中断に関する時間の推定を時間推定部１３３に依頼する。再開ノードが別の計算ノードである場合、スケジューリング部１３２は、更に、ステップＳ５２で算出されたホップ数と、ステップＳ５３で算出されたジョブサイズおよびノード使用率と、ステップＳ５４で算出されたリンク使用平均およびリンク使用分散を指定する。時間推定部１３３は、中断方法がジョブスワップであるか判断する。ジョブスワップである場合はステップＳ５６に処理が進み、それ以外の場合はステップＳ５７に処理が進む。
【０１３５】
（Ｓ５６）時間推定部１３３は、指定されたメモリ使用量と、定数テーブル１２３に登録されたＲＡＭ書き込み速度とから、退避時間を推定する。また、時間推定部１３３は、指定されたメモリ使用量と、定数テーブル１２３に登録されたＲＡＭ読み出し速度とから、復帰時間を推定する。そして、時間推定の処理が終了する。
【０１３６】
（Ｓ５７）時間推定部１３３は、中断方法がマイグレーションであるか判断する。マイグレーションである場合はステップＳ５８に処理が進み、それ以外の場合（チェックポイントリスタートである場合）はステップＳ５９に処理が進む。
【０１３７】
（Ｓ５８）時間推定部１３３は、指定されたメモリ使用量および複数の指標値と、定数テーブル１２３に登録された理想帯域幅と、係数テーブル１２５に登録された係数Ａ，Ｂ，Ｃ，Ｄ，Ｅとを推定式に代入して、転送時間を推定する。そして、時間推定部１３３は、指定されたメモリ使用量と、定数テーブル１２３に登録されたＲＡＭ読み出し速度およびＲＡＭ書き込み速度と、推定した転送時間とから、マイグレーション時間を推定する。その後、時間推定の処理が終了する。
【０１３８】
（Ｓ５９）時間推定部１３３は、指定されたメモリ使用量と、定数テーブル１２３に登録されたＨＤＤ書き込み速度とから、退避時間を推定する。
（Ｓ６０）時間推定部１３３は、再開ノードが同一の計算ノードであるか、すなわち、中断方法がチェックポイントリスタート（同一ノード復帰）であるか判断する。チェックポイントリスタート（同一ノード復帰）である場合はステップＳ６１に処理が進み、チェックポイントリスタート（別ノード復帰）である場合はステップＳ６２に処理が進む。
【０１３９】
（Ｓ６１）時間推定部１３３は、指定されたメモリ使用量と、定数テーブル１２３に登録されたＨＤＤ読み出し速度とから、復帰時間を推定する。
（Ｓ６２）時間推定部１３３は、指定されたメモリ使用量および複数の指標値と、定数テーブル１２３に登録された理想帯域幅と、係数テーブル１２５に登録された係数Ａ，Ｂ，Ｃ，Ｄ，Ｅとを推定式に代入して、転送時間を推定する。そして、時間推定部１３３は、指定されたメモリ使用量と、定数テーブル１２３に登録されたＨＤＤ読み出し速度およびＲＡＭ書き込み速度と、推定した転送時間とから、復帰時間を推定する。
【０１４０】
なお、上記説明では、１つのジョブ中断スケジュールを決定する毎に、回帰分析を行って係数Ａ，Ｂ，Ｃ，Ｄ，Ｅを更新することとした。これに対し、ある程度の量の情報が回帰分析テーブル１２４に蓄積されるのを待って、バッチ方式で回帰分析を行ってもよい。
【０１４１】
例えば、フィードバック部１３４は、回帰分析テーブル１２４への指標値とメモリ使用量と転送時間の組（エントリ）の登録を監視し、一定量のエントリが蓄積されたときに回帰分析を開始する。この場合、フィードバック部１３４は、回帰分析に使用したエントリを回帰分析テーブル１２４から削除するようにしてもよい。これにより、回帰分析の実行間隔を調整することができ、管理ノード１００の負荷を低減できる。
【０１４２】
第２の実施の形態の並列計算システムによれば、ジョブ中断スケジュールを決定するとき、ジョブのデータを中継する経由ノードが判定され、経由ノードの使用状況など転送時間に影響を与える複数の指標値が算出される。そして、算出された複数の指標値とそれら指標値を重み付ける複数の係数とを用いて、転送時間が推定される。これにより、ハードウェア性能などの静的な情報のみに基づいて転送時間を推定する場合と比べて、推定精度を向上できる。また、データ転送が行われると実際の転送時間がフィードバックされ、実際の転送時間と推定に用いられた複数の指標値とを用いて回帰分析が行われ、推定に用いられる複数の係数が更新される。これにより、更に転送時間の推定精度を向上できる。
【０１４３】
その結果、データ転送後に確保できる連続した実行可能時間を精度よく算出することができる。よって、ジョブの中断が頻繁に発生するのを抑制でき、実質的なノード使用効率が向上するようにジョブスケジューリングを行うことが容易となる。
【０１４４】
［第３の実施の形態］
次に、第３の実施の形態を説明する。第２の実施の形態との違いを中心に説明し、第２の実施の形態と同様の事項は説明を省略することがある。
【０１４５】
第３の実施の形態の並列計算システムは、実際の転送時間の測定方法が第２の実施の形態と異なる。第３の実施の形態の並列計算システムは、図２，３，１０に示した第２の実施の形態の構成と同様の構成によって実現できる。以下、図２，３，１０で使用した符号を用いて、第３の実施の形態について説明する。
【０１４６】
図１７は、転送時間測定の手順例を示すフローチャートである。
（Ｓ７０）転送元ノードのジョブ中断部は、管理ノード１００から、チェックポイントリスタート（別ノード復帰）の復帰通知またはマイグレーション通知を受信する。すると、転送元ノードのジョブ中断部は、現在時刻（開始時刻）を示すパケットを転送先ノードに送信する。転送先ノードは、管理ノード１００から指定される。
【０１４７】
（Ｓ７１）転送先ノードのジョブ中断部は、転送元ノードから受信したパケットが示す開始時刻をＲＡＭまたはＨＤＤに記録しておく。
（Ｓ７２）転送元ノードのジョブ中断部は、対象ジョブに属するプロセスのデータをＲＡＭから読み出し、転送先ノードに対して送信する。
【０１４８】
（Ｓ７３）転送先ノードのジョブ中断部は、転送元ノードからプロセスのデータを受信し、受信したデータをＲＡＭに書き込む。
（Ｓ７４）転送先ノードのジョブ中断部は、プロセスのデータを全て受信し終えると、現在時刻（終了時刻）をＲＡＭまたはＨＤＤに記録する。
【０１４９】
（Ｓ７５）転送先ノードのジョブ中断部は、ステップＳ７１で記録した開始時刻とステップＳ７４で記録した終了時刻を管理ノード１００に通知する。以上のステップＳ７０〜Ｓ７５の処理は、転送元ノードと転送先ノードの組毎に実行される。
【０１５０】
（Ｓ７６）管理ノード１００のスケジューリング部１３２は、転送先ノードそれぞれから、開始時刻と終了時刻の通知を受信する。
（Ｓ７７）スケジューリング部１３２は、通知された開始時刻のうち最も時間の早い開始時刻を抽出する。また、スケジューリング部１３２は、通知された終了時刻のうち最も遅い終了時刻を抽出する。そして、スケジューリング部１３２は、最も遅い終了時刻から最も早い開始時刻を差し引いた時間、すなわち、全てのデータ転送を実行するのに要した時間を転送時間として算出し、回帰分析テーブル１２４に保存する。
【０１５１】
第３の実施の形態の並列計算システムによれば、第２の実施の形態と同様の効果が得られる。更に、第３の実施の形態では、データ転送開始のタイムスタンプが転送元ノードによって生成され、データ転送終了のタイムスタンプが転送先ノードによって生成される。これにより、実際の転送時間の測定精度を向上させることができる。その結果、回帰分析の精度が向上し、転送時間の推定精度を更に向上させることができる。
【０１５２】
なお、第１の実施の形態の情報処理は、並列計算制御装置１０やノード２１〜２６にプログラムを実行させることで実現できる。第２および第３の実施の形態の情報処理は、計算ノード１Ａ〜９Ａ，１Ｂ〜９Ｂ，…，１Ｆ〜９Ｆや管理ノード１００にプログラムを実行させることで実現できる。
【０１５３】
プログラムは、コンピュータ読み取り可能な記録媒体（例えば、記録媒体１１３）に記録しておくことができる。記録媒体としては、例えば、磁気ディスク、光ディスク、光磁気ディスク、半導体メモリなどを使用できる。磁気ディスクには、ＦＤおよびＨＤＤが含まれる。光ディスクには、ＣＤ、ＣＤ−Ｒ（Recordable）／ＲＷ（Rewritable）、ＤＶＤおよびＤＶＤ−Ｒ／ＲＷが含まれる。プログラムは、可搬型の記録媒体に記録されて配布されることがある。その場合、可搬型の記録媒体からＨＤＤなどの他の記録媒体（例えば、ＨＤＤ１０３）にプログラムをコピーして実行してもよい。
【符号の説明】
【０１５４】
１０  並列計算制御装置
１１  通信部
１２  制御部
１３  ジョブ
１４  指標値
１５  メモリ使用量
１６  転送時間
２０  ネットワーク
２１〜２６  ノード
【図１】
0006447329.tif 000002
【図２】
0006447329.tif 000003
【図３】
0006447329.tif 000004
【図４】
0006447329.tif 000005
【図５】
0006447329.tif 000006
【図６】
0006447329.tif 000007
【図７】
0006447329.tif 000008
【図８】
0006447329.tif 000009
【図９】
0006447329.tif 000010
【図１０】
0006447329.tif 000011
【図１１】
0006447329.tif 000012
【図１２】
0006447329.tif 000013
【図１３】
0006447329.tif 000014
【図１４】
0006447329.tif 000015
【図１５】
0006447329.tif 000016
【図１６】
0006447329.tif 000017
【図１７】
0006447329.tif 000018