(57)【要約】  本発明は、ノードを備えるクラスタにおけるこれらのノードを接続する静的な通信リンクの擬似動的ルーティングに関する。ルーティングは、リンクに関する負荷レベルにもとづく。タスクの実行に割り当てられた一群のノードを指定するノード識別子のリストを受信（６３５）した後で、前記一群のノードのうちの第１ノードの識別子と前記第１のノードとは別の第２のノードの識別子とで形成されるペアに、第１の所定の値を有する重みが割り当てられ、別々のタスクに割り当てられたノードの識別子で形成されるペアには、前記第１の値とは異なる初期値として割り当てられる第２の所定の値を有する重みが割り当てられる（６５５）。次いで、クラスタのルーティングが行なわれ、このルーティングは、前記第１および第２のノードの間の経路を選択するステップ（６１０）と、前記選択された経路を構成する各々のリンクに関する負荷レベルを前記第１の値だけ増やすステップ（６２５）とを含む。
2013531424.tif 000002
【特許請求の範囲】
【請求項１】
複数のノードと前記複数のノードのノードを接続する静的な通信リンクとを備えるクラスタにおいて、前記通信リンクに関する負荷レベルにもとづく擬似動的ルーティングを行なうためのコンピュータにおける方法であって、
前記複数のノードのうちのノードの識別子であって、あるタスクの実行に割り当てられた一群のノードを指定する識別子のリストを受信するステップ（６３５）と、
前記一群のノードのうちの第１のノードの識別子と、前記第１のノードとは別個の前記一群のノードのうちの第２のノードの識別子とによって形成されるペアに、第１の所定の値を有する重みを割り当て、別々のタスクに割り当てられたノードの識別子で形成されるペアには、前記第１の値とは異なる初期値として割り当てられる第２の所定の値を有する重みを割り当てるステップ（６５５）と、
前記クラスタのルーティングを行なうステップと
を含んでおり、
前記ルーティングを行なうステップが、
前記第１および第２のノードの間の経路を選択するステップ（６１０）と、
前記選択された経路を構成する各々の通信リンクに関する負荷レベルを前記第１の値だけ増やすステップ（６２５）と
を含んでいることを特徴とする、方法。
【請求項２】
前記第１のノードの前記識別子と前記第１のノードの出力アドレスとの間および前記第２のノードの前記識別子と前記第２のノードの入力アドレスとの間の対応関係を確立するステップをさらに含んでおり、
前記重みを割り当てるステップが、前記第１のノードの前記出力アドレスと前記第２のノードの前記入力アドレスとで形成されるペアに重みを割り当てるように進められる、請求項１に記載の方法。
【請求項３】
前記タスクの特徴を表わす情報項目を所定のデータ項目と比較するステップを
さらに含んでおり、
前記ルーティングを行なうステップが、前記比較するステップに応答して実行される、請求項１または２に記載の方法。
【請求項４】
前記タスクの特徴を表わす情報項目が、前記タスクの実行に割り当てられたノードの数である、請求項３に記載の方法。
【請求項５】
間に接続を確立させなければならない前記クラスタのうちの少なくとも２つのノードを特定するステップ（６０５）と、
前記通信リンクによって前記特定された少なくとも２つのノードを接続する少なくとも１つの経路を、前記特定された少なくとも２つのノード、前記通信リンクのうちの複数の通信リンク、および前記複数の通信リンクの各々の通信リンクに関する少なくとも１つの負荷レベルに従って決定し、決定された経路を選択するステップ（６１０）と、
前記選択された経路に関する重みの値を推定するステップ（６２０）と、
前記選択された経路を構成する各々の通信リンクに関する負荷レベルを、前記推定による重さに従って増加させるステップ（６２５）と
をさらに含む、請求項１から４のいずれか一項に記載の方法。
【請求項６】
前記特定された少なくとも２つのノードのうちの少なくとも一方についてノードの種類を取得するステップ（６１５）をさらに含んでおり、
前記重みの前記推定による値が、前記取得されたノードの種類に応じて少なくとも部分的に推定される、請求項５に記載の方法。
【請求項７】
前記特定された少なくとも２つのノードのうちの少なくとも一方が属するグループの参照を取得するステップ（６１５）をさらに含んでおり、
前記重みの前記推定による値が、前記取得されたグループの参照に応じて少なくとも部分的に推定される、請求項５または６に記載の方法。
【請求項８】
少なくとも１つの静的なルーティング表を更新するステップをさらに含んでおり、
前記少なくとも１つの静的なルーティング表が、前記クラスタの少なくとも２つのノードを接続する前記クラスタの少なくとも１つのスイッチに関連付けられている、請求項１から７のいずれか一項に記載の方法。
【請求項９】
経路が、経路に関連付けられた重みの値の順にて選択される、請求項１から８のいずれか一項に記載の方法。
【請求項１０】
コンピュータ上で実行されたときに請求項１から９のいずれか一項に記載の方法の各ステップを実行するように構成されたインストラクションを含んでいるコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、クラスタにおけるルーティング、すなわちクラスタのノード群の間の通信経路の決定に関し、さらに詳しくは、静的な通信リンクを備えるクラスタにおける擬似動的ルーティング方法およびこの方法を実行するコンピュータプログラムに関する。
【背景技術】
【０００２】
高性能計算（ＨＰＣ）が、特に航空、エネルギー、気候、および生命科学などの技術分野において、大学および産業界における研究などのために開発されている。モデル化およびシミュレーションが、特により信頼できかつ消費するエネルギーも少ない革新的な製品の開発コストの削減および迅速な商品化を可能にする。研究技術者にとって、高性能計算は、不可欠の研究手段となっている。
【０００３】
この計算は、一般に、クラスタと呼ばれるデータ処理システムにおいて実行される。クラスタは、典型的には、相互接続されたノードの組を備えている。いくつかのノード（計算ノード）は、計算タスクの実行に使用され、別のノード（ストレージノード）は、データの記憶に使用され、他の１つ以上のノード（管理ノード）が、クラスタを管理する。各々のノードは、例えばＬｉｎｕｘ（登録商標）などのオペレーティングシステムを実行するサーバである。ノード間の接続は、例えばＥｔｈｅｒｎｅｔ（登録商標）またはＩｎｆｉｎｉｂａｎｄ（商標）の通信リンクを使用して行なわれる。
【０００４】
図１が、ファットツリー（ｆａｔ−ｔｒｅｅ）形式のクラスタの接続形態１００の一例の概略図である。クラスタが、ノード（大まかに１０５で指し示されている）の組を備えている。組１１０に属するノードが、ここでは計算ノードである一方で、組１１５のノードは、サービスノード（ストレージノードおよび管理ノード）である。計算ノードを、計算アイランドと称される下位の組１２０にグループ化でき、組１１５は、サービスアイランドと称される。
【０００５】
ノードは、スイッチによって例えば階層的に接続される。図１に示した例では、ノードが第１のレベルのスイッチ１２５へと接続され、第１のレベルのスイッチ１２５が、第２のレベルのスイッチ１３０へと接続され、次いで第２のレベルのスイッチ１３０が、第３のレベルのスイッチ１３５へと接続されている。
【０００６】
図２に示されるように、各々のノードは、通常は１つ以上のマイクロプロセッサ、ローカルメモリ、および通信インターフェイスを備えている。より具体的には、ここでは、ノード２００が通信バス２０２を備えており、
中央演算ユニット（ＣＰＵ）またはマイクロプロセッサ２０４、
プログラムの実行時に生成および変更される変数およびパラメータを記録するように構成されたレジスタを備えるランダムアクセスメモリ（ＲＡＭ）２０６の構成要素（図示のように、各々のランダムアクセスメモリ構成要素をマイクロプロセッサに組み合わせることができる）、ならびに
データの送信および受信を行なうように構成された通信インターフェイス２０８
が通信バス２０２へと接続されている。
【０００７】
ノード２００は、ここでは、特にプログラムの実行可能コードを収容することができるハードディスクなどの内部ストレージ手段２１２をさらに有している。
【０００８】
通信バスが、ノード２００に含まれ、あるいはノード２００へと接続される種々の構成要素の間の通信および相互運用を可能にしている。マイクロプロセッサ２０４が、１つ以上のプログラムのソフトウェアコードの各部のインストラクションの実行を制御および指揮する。起動時に、例えばハードディスクなどの不揮発メモリに保存された１つ以上のプログラムが、ランダムアクセスメモリ２０６へと転送される。
【０００９】
ここで、クラスタの性能が、通信リンクを介して確立されてノード間のデータの転送を可能にする経路の品質に直接的に関係することが、明らかになっている。一般に、物理的な通信リンクが、クラスタのハードウェアの構成時にノードおよびスイッチの間に確立され、通信経路そのものは、ノード間に確立させるべき接続の定義にもとづいて、初期化段階において決定される。実装される通信技術に応じて、経路の設定は、静的であっても、動的であってもよい。
【００１０】
例として、Ｉｎｆｉｎｉｂａｎｄ技術は、クラスタにおいて経路の静的な設定を可能にする。この設定は、各々のスイッチにおいてリニア転送テーブル（ＬＦＴ）として知られる静的なルーティング表を使用する。この技術が実装される場合、ＦＴｒｅｅ、ＭＩＮＨＯＰ、ＵＰＤＮ、およびＬＡＳＨという名称で知られるアルゴリズムなどのルーティングアルゴリズムを使用することができる。
【００１１】
簡単化された方法で、ＦＴｒｅｅアルゴリズムは、存在する通信リンクの全体に可能なかぎり分散するように経路を決定する。これらの目的のために、全体がファットツリー形式のアーキテクチャに従って接続された通信ネットワークのルーティングの際には、ネットワークの各々のノードが、同じ重要性を有するものと考えられる。したがって、経路が同じリンクの２つのノードの間に確立されるとき、そのリンクを使用する経路の数（リンクの負荷と呼ばれる）が、１だけ増加する。ルーティングアルゴリズムは、新たな経路を確立させようとするとき、そこにいくつかの可能性が存在する場合、それらの可能性のあるリンクに関する負荷レベルを比較し、負荷レベルが最も低いリンクに係る経路を選択する。
【００１２】
ルーティングの品質を、リンク当たりの経路の数に関して表現することができる。
【００１３】
図３ａ〜図３ｅが、スイッチ３００を含むクラスタの初期化段階の際のスイッチ３００におけるこのルーティングの原理を示している。
【００１４】
ここで、スイッチ３００が、スイッチ３００を入力３０５−１〜３０５−４へと接続する４つの入力通信リンク（３１０−１〜３１０−４で指し示されている）と、スイッチ３００を出力３１５−１および３１５−２へと接続する２つの出力通信リンク（３２０−１および３２０−２で指し示されている）を有している。初期化の前は、リンク３１０−１〜３１０−４、３２０−１、および３２０−２のいずれも、経路を含んでいない。したがって、これらのリンクに関する負荷レベルは、図３ａにおいて各々のリンクの傍らに示されているようにゼロである。次いで、スイッチ３００の入力３０５−１と出力との間に経路を確立すべき場合、リンク３１０−１（使用できる唯一のリンク）が選択され、さらにリンク３２０−１が選択される（ここではリンク３２０−１および３２０−２に関する負荷レベルがゼロに等しいため、第１のリンクが選択される）。次いで、図３ｂに示されるように、リンク３１０−１および３２０−１に関する負荷レベルが、これらのリンクが追加の経路を提供していることを示すために、１だけ増やされる。
【００１５】
同じ方法で、スイッチ３００の入力３０５−２と出力との間に経路を確立すべき場合、リンク３１０−２（使用できる唯一のリンク）が選択され、さらにリンク３２０−２が選択される（リンク３２０−１に関する負荷レベルが１に等しく、リンク３２０−２に関する負荷レベルがゼロに等しいため、後者のリンクが選択される）。次いで、図３ｃに示されるように、リンク３１０−２および３２０−２に関する負荷レベルが、これらのリンクが追加の経路を提供していることを示すために、１だけ増やされる。同様の方法で、スイッチ３００の入力３０５−３と出力との間に経路を確立すべき場合、リンク３１０−３（使用できる唯一のリンク）が選択され、さらにリンク３２０−１が選択される（リンク３２０−１および３２０−２に関する負荷レベルが等しいため、第１のリンクが選択される）。次いで、図３ｄに示されるように、リンク３１０−３および３２０−１に関する負荷レベルが、これらのリンクが追加の経路を提供していることを示すために、１だけ増やされる。
【００１６】
最後に、スイッチ３００の入力３０５−４と出力との間に経路を確立すべき場合、リンク３１０−４（使用できる唯一のリンク）が選択され、さらにリンク３２０−２が選択される（リンク３２０−１に関する負荷レベルが２に等しく、リンク３２０−２に関する負荷レベルが１に等しいため、後者のリンクが選択される）。次いで、図３ｅに示されるように、リンク３１０−４および３２０−２に関する負荷レベルが、これらのリンクが追加の経路を提供していることを示すために、１だけ増やされる。ノード間のすべての経路が確立されたとき、スイッチの静的なルーティング表が更新される。
【発明の概要】
【発明が解決しようとする課題】
【００１７】
上述のルーティングアルゴリズムは、良好な結果をもたらすが、最適ではない。
【００１８】
本発明は、上述した問題のうちの少なくとも１つを解決できるようにする。
【課題を解決するための手段】
【００１９】
本発明は、複数のノードと前記複数のノードのノードを接続する静的な通信リンクとを備えるクラスタにおいて、前記通信リンクに関する負荷レベルにもとづく擬似動的ルーティングを行なうためのコンピュータにおける方法であって、
前記複数のノードのうちのノードの識別子であって、あるタスクの実行に割り当てられた一群のノードを指定する識別子のリストを受信するステップと、
前記一群のノードのうちの第１のノードの識別子と、前記第１のノードとは別個の前記一群のノードのうちの第２のノードの識別子とによって形成されるペアに、第１の所定の値を有する重みを割り当て、別々のタスクに割り当てられたノードの識別子で形成されるペアには、前記第１の値とは異なる初期値として割り当てられる第２の所定の値を有する重みを割り当てるステップと、
前記クラスタのルーティングを行なうステップと
を含んでおり、
前記ルーティングを行なうステップが、
前記第１および第２のノードの間の経路を選択するステップと、
前記選択された経路を構成する各々の通信リンクに関する負荷レベルを前記第１の値だけ増やすステップと
を含む方法に関する。
【００２０】
このようにして、本発明による方法は、クラスタのノードによって実行されるべきタスクに応じて特定の経路が他の経路よりも優先または回避されるように経路に重みを組み合わせることによって、クラスタのルーティングを最適にすることを可能にする。
【００２１】
好都合には、この方法が、前記第１のノードの前記識別子と前記第１のノードの出力アドレスとの間および前記第２のノードの前記識別子と前記第２のノードの入力アドレスとの間の対応関係を確立するステップをさらに含み、前記重みを割り当てるステップが、前記第１のノードの前記出力アドレスと前記第２のノードの前記入力アドレスとで形成されるペアに重みを割り当てるように進められる。
【００２２】
したがって、本発明による方法を、ノードの入力および出力アドレスをノード識別子に関連付け、タスクをノードに関連付けるクラスタの設定ファイルにもとづいて容易に実行することができる。
【００２３】
特定の実施の形態によれば、この方法が、前記タスクの特徴を表わす情報項目を所定のデータ項目と比較するステップを
さらに含み、前記ルーティングを行なうステップが、前記比較するステップに応答して実行される。
【００２４】
このようにして、本発明による方法は、実行されるタスクの特徴に応じたクラスタのルーティングの最適化を可能にする。前記タスクの特徴を表わす情報項目は、例えばこのタスクの実行に割り当てられたノードの数である。
【００２５】
さらに特定の実施の形態によれば、この方法が、
前記クラスタのノードであって、間に接続を確立すべき少なくとも２つのノードを特定するステップと、
前記特定された少なくとも２つのノードを前記通信リンクによって接続する少なくとも１つの経路を、前記特定された少なくとも２つのノード、前記通信リンクのうちの複数の通信リンク、および前記複数の通信リンクの各々の通信リンクに関する少なくとも１つの負荷レベルに従って割り出し、所定の経路を選択するステップと、
前記選択された経路に関する重みの値を推定するステップと、
前記選択された経路を構成する各々の通信リンクに関する負荷レベルを、前記推定による値に従って増加させるステップと
をさらに含む。
【００２６】
このようにして、本発明による方法は、タスクへのノードの割り当てならびに実装されクラスタおよびノードの特徴に応じたクラスタのルーティングの最適化を可能にする。
【００２７】
この方法が、好ましくは、前記特定された少なくとも２つのノードのうちの少なくとも一方についてノードの種類を取得するステップをさらに含み、前記重みの前記推定による値が、前記取得されたノードの種類に応じて少なくとも部分的に推定される。このようにして、本発明による方法は、ノードの種類に応じたクラスタのルーティングの最適化を可能にする。
【００２８】
好都合には、この方法が、前記特定された少なくとも２つのノードのうちの少なくとも一方が属するグループの参照を取得するステップをさらに含み、前記重みの前記推定による値が、前記取得されたグループの参照に応じて少なくとも部分的に推定される。このようにして、本発明による方法は、各々のノードを個別に特徴づける必要なく、ノードの種類に応じたクラスタのルーティングの最適化を可能にする。ノードの種類および／またはグループは、好ましくは該当のノードの性質に応じて決定される。
【００２９】
さらに特定の実施の形態によれば、この方法が、少なくとも１つの静的なルーティング表を更新するステップをさらに含み、前記少なくとも１つの静的なルーティング表が、前記クラスタの少なくとも２つのノードを接続する前記クラスタの少なくとも１つのスイッチに関連付けられている。このようにして、本発明による方法を、特に静的なルーティング表を備えるスイッチを使用する従来からのアーキテクチャにおいて、容易に実行することができる。
【００３０】
経路は、好都合には、ルーティングを簡単にするために各経路に関する重みの値の順にて選択される（重みの軽い経路は、重みの大きい経路よりも容易に定めることができる）。
【００３１】
さらに本発明は、コンピュータ上で実行されたときに上述の方法の各ステップを実行するように構成されたインストラクションを含んでいるコンピュータプログラムに関する。このコンピュータプログラムによってもたらされる利点は、上述した利点と同様である。
【００３２】
本発明の他の利点、目的、および特徴が、あくまでも本発明を限定するものではない例として添付の図面に関連して提示される以下の詳細な説明から、明らかになるであろう。
【図面の簡単な説明】
【００３３】
【図１】クラスタの接続形態の例を示している。
【図２】クラスタのノードのアーキテクチャの例を示している。
【図３ａ】スイッチを備えるクラスタの初期化段階の際のこのスイッチにおけるＦＴｒｅｅ方式のアルゴリズムによるルーティングの原理を示している。
【図３ｂ】スイッチを備えるクラスタの初期化段階の際のこのスイッチにおけるＦＴｒｅｅ方式のアルゴリズムによるルーティングの原理を示している。
【図３ｃ】スイッチを備えるクラスタの初期化段階の際のこのスイッチにおけるＦＴｒｅｅ方式のアルゴリズムによるルーティングの原理を示している。
【図３ｄ】スイッチを備えるクラスタの初期化段階の際のこのスイッチにおけるＦＴｒｅｅ方式のアルゴリズムによるルーティングの原理を示している。
【図３ｅ】スイッチを備えるクラスタの初期化段階の際のこのスイッチにおけるＦＴｒｅｅ方式のアルゴリズムによるルーティングの原理を示している。
【図４ａ】スイッチを備えるクラスタの初期化段階の際のこのスイッチにおける重みを用いたルーティングの原理の例を示している。
【図４ｂ】スイッチを備えるクラスタの初期化段階の際のこのスイッチにおける重みを用いたルーティングの原理の例を示している。
【図４ｃ】スイッチを備えるクラスタの初期化段階の際のこのスイッチにおける重みを用いたルーティングの原理の例を示している。
【図４ｄ】スイッチを備えるクラスタの初期化段階の際のこのスイッチにおける重みを用いたルーティングの原理の例を示している。
【図５】ルーティングの最適化を可能にすべく本発明に従ってノードを接続する経路の重みが実行されるタスクに応じて計算されるクラスタの一部分の接続形態の例を示している。
【図６ａ】静的な通信リンクを備えるクラスタのルーティングまたは再ルーティングのための典型的なアルゴリズムの特定の段階を示している。
【図６ｂ】静的な通信リンクを備えるクラスタのルーティングまたは再ルーティングのための典型的なアルゴリズムの特定の段階を示している。
【発明を実施するための形態】
【００３４】
クラスタ内の通信ネットワークの経路が同じ性質である場合、それらの経路によって接続されるノードの性質が、交換されるデータの量に関し、したがって使用される帯域幅に関して、ある役割を果たすことが明らかになっている。すなわち、例えば、２つの計算ノードを接続する経路は、一般に、計算ノードをストレージノードへと接続する経路と比べ、あまり帯域幅を使用しない。
【００３５】
同様に、同じタスクの実行に使用される計算ノードを接続するために使用される経路は、一般に、異なるタスクの実行に使用される計算ノードを接続するために使用される経路と比べ、より多くの帯域幅を必要とする。
【００３６】
ここで、タスクまたはプロセス（ジョブとも呼ばれる）が、特に時間および場所において定められるアプリケーションであることを思い出すべきである。タスクは、通常は、タスクマネージャ（バッチマネージャまたはリソースマネージャとも呼ばれる）によって開始された後に、一群のノードによって実行される。タスクマネージャの目的は、特に、タスクの実行に必要なノードの数を決定し、状況に応じて個々の制約（特に、ユーザによって決定される制約）を考慮してタスクの実行に使用できる充分な数のノードが存在するか否かをチェックし、ノードをタスクの実行に割り当て、タスクの実行を開始することにある。
【００３７】
したがって、本発明は、ルーティングの際に、クラスタのノードの性質および役割を使用して、それらのノードを接続する経路に重みまたは重み付け係数を与える。クラスタの特定の種類のノードを接続する経路ならびに特定の役割を有するノード（特に、同じタスクを実行するノード）への経路に重みを割り当てることで、使用されるルーティングのアルゴリズムを特定の経路へと偏らせることが可能になり、したがって使用される通信リンクの各々の経路への帯域幅の割り当てを最適にすることが可能になる。
【００３８】
従来からの方法においては、使用されるルーティングアルゴリズムが、２つのノードの間の経路を確立するときに複数の選択肢が存在する場合、それらの選択肢に関する負荷レベル（すなわち典型的には、それらの選択肢に対応するリンクを使用している経路の数）を比較し、負荷レベルが最も低い選択肢を選択する。しかしながら、本発明によれば、２つのノードの間に経路が確立されるとき、その経路をサポートする通信リンクの負荷レベルが、当該２つのノードの種類および当該２つのノードが割り当てられたタスクに関係した値を有する重みに応じて増やされる。
【００３９】
特定の種類の経路に所与の重みを割り当てることによって、ルーティングを、帯域幅に関して特定のニーズを有する特定の経路を優先するように偏らせることが可能になる。すなわち、２つのノードを接続する経路に大きな値を有する重みを使用することによって、それらのノードの間のデータ通信により広い帯域幅を割り当てることができる。
【００４０】
ルーティング段階における経路への重みの割り当てを、アプリケーションプログラムインターフェイス（ＡＰＩ）を通じて実行することができる。
【００４１】
特定の実施の形態によれば、ルーティング段階における重みの割り当てが、ノードあるいはノードが属する１つ以上のグループの種類ならびにそれらのノードによって実行されるタスクのそれぞれに従って決定される。
【００４２】
ノードまたはノードが属する１つ以上のグループの種類に従って重みを割り当てるために、ｗｅｉｇｈｔ＿ｆｉｌｅと呼ばれる重みファイルを使用することができる。ここで、重みファイルは、Ｉｎｆｉｎｉｂａｎｄ方式の通信ネットワークにおいてポートＧＵＩＤ（グローバル一意識別子（Ｇｌｏｂａｌｌｙ  Ｕｎｉｑｕｅ  Ｉｄｅｎｔｉｆｉｅｒ）の略）と称されるポート識別子によって定められる経路へと重みを割り当てることを可能にする。
【００４３】
そのようなファイルが、ルーティング段階に先立って分析される。そのようなファイルは、種類によってグループ分けされた通信ネットワークの通信要素（典型的には、ノード）のリスト、ならびにそれらのグループ間に形成されるペアについての重みのリストを含んでいる。それらの分析の際に、それらの重みを、ルーティング段階において各々の通信リンクについて使用すべき負荷レベルの増分を記述する配列を満たすために使用することができる。初期値として、ある２種類のノードを接続する経路について重みの値が定義されていない場合には、その値は１に等しい。
【００４４】
ルーティング段階において経路が一連のリンクを通じて確立されるとき、それらのリンクの各々に関する負荷レベルが、確立された経路の両端のノードの種類に関連付けられた重みの値だけ増やされる。
【００４５】
図４ａ〜図４ｄが、スイッチ４００を含むクラスタの初期化段階の際のスイッチ４００における、ノードまたはノードが属する１つ以上のグループの種類に応じたルーティングの原理を示している。
【００４６】
図３ａ〜図３ｅに示したスイッチ３００と同様に、ここではスイッチ４００が、スイッチ４００を入力４０５−１〜４０５−４へと接続する４つの入力通信リンク（４１０−１〜４１０−４で指し示されている）と、スイッチ４００を出力４１５−１および４１５−２へと接続する２つの出力通信リンク（４２０−１および４２０−２で指し示されている）を有している。入力は、例えばネットワークのノードからの出力または他のスイッチの出力である。
【００４７】
初期化以前は、リンク４１０−１〜４１０−４、４２０−１、および４２０−２のいずれも、経路を含んでいない。したがって、これらのリンクの各々に関する負荷レベルは、図４ａにおいて各々のリンクの傍らに示されているとおり、ゼロである。次いで、スイッチ４００の入力４０５−１と出力との間に経路を確立すべき場合、リンク４１０−１（使用できる唯一のリンク）が選択され、さらにリンク４２０−１が選択される（リンク４２０−１および４２０−２に関する負荷レベルが同じゼロであるため、第１のリンクが選択される）。ここで、今まさに確立されたリンク４１０−１および４２０−１を使用する経路の目的が、計算ノードをストレージノードへと接続することであると仮定する。したがって、計算タイプのノードとストレージタイプのノードとを接続する経路の重みの値が２００である場合、この値が、図４ｂに示されるようにリンク４１０−１および４２０−１の負荷レベルを増やすために使用される。
【００４８】
同じ方法で、スイッチ４００の入力４０５−２と出力との間に経路を確立すべき場合、リンク４０−２（使用できる唯一のリンク）が選択され、さらにリンク４２０−２が選択される（リンク４２０−１に関する負荷レベルが２００に等しく、リンク４２０に関する負荷レベルがゼロであるため、負荷レベルの値が最も小さい後者が選択される）。
【００４９】
ここで、今まさに確立されたリンク４１０−２および４２０−２を使用する経路の目的が、サービスノードを計算ノードへと接続することであると仮定し、サービスタイプのノードと計算タイプのノードとを接続する経路の重みの値が９９であると仮定すると、この値が、図４ｃに示されるようにリンク４１０−２および４２０−２の負荷レベルを増やすために使用される。
【００５０】
同様の方法で、スイッチ４００の入力４０５−３と出力との間に経路を確立すべき場合、リンク４１０−３（使用できる唯一のリンク）が選択され、さらにリンク４２０−２が選択される（リンク４２０−１に関する負荷レベルが２００に等しく、リンク４２０に関する負荷レベルが９９に等しいため、負荷レベルの値が最も小さい後者が選択される）。今まさに確立されたリンク４１０−３および４２０−２を使用する経路の目的が、２つの計算ノードを接続することであると仮定し、計算タイプのノードを接続する経路の重みの値が１であると仮定すると、この値が、図４ｄに示されるようにリンク４１０−３および４２０−２の負荷レベルを増やすために使用される。
【００５１】
重みファイルの抜粋が、別表（抜粋１）に示されている。別表は、通信ネットワークのノードのグループ分けの例（ここでは、各々のグループが別々の種類のノードに相当している）、ならびにノードの種類の組に対する重みの属性を示している。
【００５２】
この例によれば、ポートＧＵＩＤとして値０ｘ１００９０１、０ｘ１０１２０１、０ｘ１００９０３、０ｘ１１０１２０３、０ｘ１０１２０７、０ｘ１００９０９、および０ｘ１０１２０９を有するノードが、「ストレージ（ｓｔｏｒａｇｅ）」タイプのノードである。ここで、ノードのタイプ（種類）の定義は、ＤＥＦという表示を使用して行なわれ、ＤＥＦという表示の後ろにグループ自身の名称が続けられ、その後に中括弧の間に配置された該当するポートＧＵＩＤの列挙が続けられる。同様に、ポートＧＵＩＤとして値０ｘ１００９０５、０ｘ１０１２０５、および０ｘ１００９０７を有するノードは、「管理（ａｄｍｉｎ）」タイプのノードであり、すなわち管理ノードである。同様に、ポートＧＵＩＤとして値０ｘ１００９０ｂ、０ｘ０１０１２０ｂ、０ｘ１００９０ｄ、０ｘ１０１２０ｄ、０ｘ１００９０ｆ、０ｘ１０１２０ｆ、０ｘ１００９１１、０ｘ１０１２１１、０ｘ１００９１３、０ｘ１０１２１３、０ｘ１００９１５、０ｘ１００９１７、０ｘ１０１２１７、および０ｘ１００９１９を有するノードは、「計算（ｃｏｍｐｕｔｅ）」タイプのノードである。さらに、「サービス（ｓｅｒｖｉｃｅ）」と呼ばれるノードのタイプは、「ストレージ（ｓｔｏｒａｇｅ）」および「管理（ａｄｍｉｎ）」全タイプのノードの集合である。
【００５３】
ここで、重みは、ファイルの末尾において与えられる。ここで、２つのノードを接続する経路の重みを定義するための文法は、「ＩＤ１＝＞ＩＤ２  重み」という構文を使用し、ここでＩＤ１がポートＧＵＩＤまたは送信元ノードのグループであり、ＩＤ２がポートＧＵＩＤまたは受信ノードのグループであり、重みが、リンクの負荷の計算において使用すべき値である。この例によれば、２００に等しい重みの値が、計算ノード（すなわち、「計算（ｃｏｍｐｕｔｅ）」タイプのノード）からストレージノード（すなわち、「ストレージ（ｓｔｏｒａｇｅ）」タイプのノード）へのすべての経路に加えられる（「ｃｏｍｐｕｔｅ＝＞ｓｔｏｒａｇｅ  ２００」）。同様に、９９に等しい重みの値が、サービスノード（すなわち、「サービス（ｓｅｒｖｉｃｅ）」タイプのノード）から計算ノード（すなわち、「計算（ｃｏｍｐｕｔｅ）」タイプのノード）へのすべての経路に加えられる（「ｓｅｒｖｉｃｅ＝＞ｃｏｍｐｕｔｅ  ９９」）。同じ方法で、２００に等しい重みの値が、管理ノード（すなわち、「管理（ａｄｍｉｎ）」タイプのノード）からストレージノード（すなわち、「ストレージ（ｓｔｏｒａｇｅ）」タイプのノード）へのすべての経路に加えられる（「ａｄｍｉｎ＝＞ｓｔｏｒａｇｅ  ２００」）。
【００５４】
特定の実施の形態によれば、２つの種類のノードを接続する経路に関する重みが、重み設定ファイルに複数回現れる場合に、その経路に関する重みが、指定された重みの累積値に等しい。
【００５５】
当然ながら、他の重みを定めることができる。同様に、別の文法を使用することができる。さらに、上述の例に従い、経路に方向性があると考えられる場合に、経路に関する負荷のレベルは、あたかも経路が双方向性であるかのように、逆の経路に関する負荷のレベルと同じであってもよい。
【００５６】
このようなルーティングを、クラスタの初期化の際に行なうことができ、あるいは後述されるようにタスクの実行に関係した再ルーティング作業と併せて行なうことができる。
【００５７】
タスクの実行の開始に先立ち、そのタスクの実行に割り当てられたノードの識別子のリストが、タスクプロローグ（ｔａｓｋ  ｐｒｏｌｏｇ）またはジョブプロローグ（ｊｏｂ  ｐｒｏｌｏｇ）と呼ばれるステップにおけるタスク内の重みの管理のためのソフトウェアモジュールへと送信される。このリストは、タスクの開始に先立ってタスクマネージャによって確立される。
【００５８】
これにより、タスク内の重みの管理のモジュールが、タスク識別子を受信したリストに属するノード識別子に関連付け、好ましくはそれらのノード識別子とデータベースに保存された情報（特に、ポート識別子またはポートＧＵＩＤ）との間の対応関係を確立させ、タスク識別子とポートＧＵＩＤとの間の対応関係を確立させる。次いで、特定の値を有する重みが、同じ識別子に関連付けられたポートＧＵＩＤの各ペアに割り当てられる。このようにして、ルーティングの際に、経路が一式の通信リンクを介して生成されるとき、それらのリンクの負荷レベルが、前記重みに等しい値だけ増やされる。
【００５９】
例として、同じタスクの実行に割り当てられているのではない２つのノードの間の経路の確立に使用される通信リンクの負荷レベルが１に等しい場合に、同じタスクの実行に割り当てられた２つのノードの間の経路の確立に使用される類似の通信リンクの負荷レベルは１０に等しくてもよい。したがって、この例によれば、同じタスク識別子に関連付けられたポートＧＵＩＤを接続する経路が一式の通信リンクを介して生成されるとき、それらの通信リンクの各々の負荷レベルが１０だけ増やされる。
【００６０】
ノードのペアへと重みを割り当て、より詳しくはポートＧＵＩＤのペアへと重みを割り当てた後で、実行されるタスクに応じてクラスタのルーティングをやり直すようにネットワークマネージャ（サブネットマネージャと呼ばれる）へとメッセージを送信することができる。
【００６１】
しかしながら、好都合には、ルーティングのやり直しは、クラスタを不必要に妨げることがないよう、特定の条件のもとでのみ実行される。すなわち、例えば、実行すべきタスクに割り当てられたノードの数がクラスタのノードの数と比べて多い場合、および／またはタスクの予想実行時間が所定のしきい値よりも長い場合にかぎって、ルーティングのやり直しを実行することができる。したがって、例として、実行すべきタスクにクラスタのノードのうちの２５％超が割り当てられた場合、およびこのタスクの実行時間が１時間を超える場合にかぎり、ルーティングのやり直しを実行することができる。
【００６２】
ルーティングをやり直した後で、タスクが開始される。次に、タスクの実行後に、このタスクの実行に割り当てられたノード（または、ポートＧＵＩＤ）のペアの重みの値が、それぞれの初期値（例えば、１という値）へと再び初期化される。このステップは、エピローグと呼ばれる。
【００６３】
図５が、本発明に従ってノードを接続する経路の重みが実行されるタスクに応じて計算することによってルーティングの最適化を可能にするクラスタの一部分の接続形態の例を示している。
【００６４】
ここに示されているクラスタの一部分は、４つの計算ノード（５０５−１〜５０５−４で示されている）が接続された第１のスイッチ５００−１と、計算ノード５０５−５〜５０５−８が接続された第２のスイッチ５００−２とを含んでおり、第２のスイッチ５００−２が２つの通信リンクによって第１のスイッチ５００−１へと接続されている。通信リンクは、静的な通信リンクであり、例えばＩｎｆｉｎｉｂａｎｄ方式の通信リンクである。
【００６５】
図５に示した例によれば、群５１０−１を形成する計算ノード５０５−１〜５０５−６が、第１のタスクへと割り当てられる一方で、群５１０−２を形成する計算ノード５０５−７および５０５−８が、第２のタスクへと割り当てられている。
【００６６】
すでに示したように、２つのノードを接続する経路の重みの値は、初期設定として設定され、１に等しくてもよい。したがって、ノード５０５−１と５０５−８とを接続する経路（経路は通信リンク５１５−３を使用すると仮定する）に関して、ノード５０５−１のスイッチ５００−１への接続、ノード５０５−８のスイッチ５００−２への接続、およびスイッチ同士の接続のそれぞれの通信リンク５１５−１、５１５−２、および５１５−３の負荷は、初期設定による値に等しく、例えばリンク５１５−３の傍らに記載されているように１に等しい（ここで、リンク５１５−３を使用する他の経路に関する負荷は、分かり易くするために無視した）。
【００６７】
このような初期値を、タスクの開始時に変更することができる。
【００６８】
すなわち、ノード５０５−１〜５０５−６の第１のタスクへの割り当てを承けて、ノード５０５−１〜５０５−６を互いに接続する経路の重みを変更することができる。例えば、ノード５０５−１と５０５−５とを接続する経路（経路が通信リンク５１５−５を使用すると仮定する）に関して、ノード５０５−１のスイッチ５００−１への接続、ノード５０５−５のスイッチ５００−２への接続、およびスイッチ同士の接続のそれぞれの通信リンク５１５−１、５１５−４、および５１５−５の負荷が、他の値に等しく、例えばリンク５１５−５の傍らに記載されているように１０に等しい（ここで、リンク５１５−５を使用する他の経路に関する負荷は、分かり易くするために無視した）。
【００６９】
特定の実施の形態によれば、同じタスクに割り当てられたノードを接続する経路の重みの計算は、いくつかのソフトウェアモジュールを使用する。これらのモジュールは、特に、再ルーティングおよび重みの管理を可能にするＡＰＩの使用を可能にするネットワークマネージャ、タスクの実行に割り当てられたノードのリストを確立するためのタスクマネージャ、ノードの識別子とポートＧＵＩＤなどのルーティング情報項目との間の関係を確立する通信リンクマネージャ、およびタスク内重み管理モジュールに関する。これらのモジュールの一部（タスクマネージャ）は、特段の変更を必要とせずに使用可能であり、他のモジュール（ネットワークマネージャおよび通信リンクマネージャ）は、重みの管理に鑑みて変更され、他のモジュール（タスク内重み管理モジュール）は、重みの管理に特有である。
【００７０】
重み管理の有効化を、ネットワークマネージャを通じて、例えばｒｏｕｔｉｎｇ＿ｅｎｇｉｎｅ＜ルーティングエンジン名＞などのコマンドラインを設定ファイルに挿入することによって実行することができる。また、例えばＲ＜ルーティングエンジン名＞などのネットワークマネージャのコマンドの選択肢を選択することによって実行することもできる。
【００７１】
ここで、計算ノード以外のノードを接続する経路に関する重みが、それらのノードがタスクマネージャによって送信されるタスクに割り当てられたノードの識別子のリストに現れないということから、ノードによって実行されるタスクに応じた重みの属性に影響されないことが明らかである。
【００７２】
したがって、ノードの種類による重みの管理またはノードが属するグループによる重みの管理と、実行されるタスクに応じた重みの管理とは、互いに相補的であり、お互いを邪魔することがない。
【００７３】
ルーティングの段階において、経路は、ルーティングを最適にするために、好ましくは重みの値が他の経路の重みの値よりも大きい経路が当該他の経路よりも前に決定されるように順序づけられた方式で決定される。この順序は、重みの配列および種類に応じたノードの特定を可能にするノードのグループにもとづいて決定でき、タスクの開始時に決定される重み表にもとづいて決定できる。
【００７４】
図６ａおよび図６ｂが、静的な通信リンクを備えるクラスタのルーティングまたは再ルーティングのための例示的なアルゴリズムの特定の段階を示している。
【００７５】
図６ａが、２つのノードを接続する経路を決定および選択し、さらには経路の選択後に通信リンクの負荷レベルを決定するために実行されるアルゴリズムの例の概略図である。
【００７６】
第１のステップ（ステップ６００）は、２つのノードから形成されるノードペアに重み（経路の方向にかかわらず同じ重み）を関連付け、あるいは別表（表１）に示されるように送信元ノードおよび受信ノードから形成されるノードペアに重み（経路の方向に関連した重み）を関連付けることを可能にする重み配列の初期化に関する。この配列を、特に別表（抜粋１）に示した重みファイルなどの重みファイルから確立することができる。このステップは、ノードの識別子とノードの種類および／またはノードが属する１つ以上のグループとの間の対応関係を保存することも可能にする。あるいは、重み配列が、別表（表２）に部分的に示されているように、各々のノードペアに関する重みを直接定めてもよい。
【００７７】
表１が、送信側のノードタイプを受信側のノードタイプへと接続する経路に与えるべき重みを示している一方で、表２は、送信元ノードを受信ノードへと接続する経路に与えるべき重みを示している。
【００７８】
続くステップ（ステップ６０５）において、確立すべき経路の両端のノードのペアが特定される。ここでは、ノードのペアが、送信元ノードおよび受信ノードからなる。このステップは、確立すべき経路の定義を可能にするためのルーティングアルゴリズムの基本的なステップである。例えば、ノードが、ポートＧＵＩＤによって特定される。
【００７９】
次いで、それら特定されたノードを接続するための経路の選択肢を割り出し、最良の経路を選択するステップが、標準的なアルゴリズム（例えば、ＦＴｒｅｅアルゴリズム）に従って実行される（ステップ６１０）。
【００８０】
続くステップ（ステップ６１５）において、特定されたノードのタイプあるいはそれらが属する１つ以上のグループが、初期化のステップにおいて得られた情報に従って取得される。破線の使用によって示唆されているとおり、このステップは随意である。なぜならば、特に初期化の段階において決定される重み配列が、重みをノードの識別子に直接関連付けている場合に、この段階においてノードの種類および／またはノードが属する１つ以上のグループを割り出す必要がないからである。
【００８１】
次いで、これら２つのノードを接続する経路の重みが推定される（ステップ６２０）。この推定は、ノードの種類、ノードが属する１つ以上のグループ、および／またはノードの識別子（例えば、ポートＧＵＩＤ）にもとづき、あるいは特定された２つのノードが同じタスクの実行に割り当てられた計算ノードである場合に以前に実行された計算の結果にもとづく。
【００８２】
重みは、特定されたノードの種類またはそれらが属する１つ以上のグループに関係する場合には、好ましくは前もって決定された重み配列から読み出すことによって直接与えられる。あるいは、重みを、所定の関数または表に従い、重み配列に保存された参照値に従って推定することができる。重み配列からの重みを、例えばクラスタの接続形態または当該経路によって実現されるリンクの位置に関する特定の状況に応じて、増減させてもよい。
【００８３】
重みは、特定されたノードによって実行されるタスクに関係する場合には、別表（表３）に示されるような重み表によって得られる。
【００８４】
すでに示したように、経路の重みの値は、初期値に等しくない場合には、ノードの種類または属するグループに従って決定される値またはタスクによる割り当てに従って決定される値に等しいが、好ましくはノードの種類または属するグループおよびタスクによる割り当てに従って決定される値に等しくはない。結果として、その値が、使用される重みアレイにもとづいて決定される場合、重みを特定されたノードの割り当てに従って変更しなければならないかどうかを、常に検証する必要はない。
【００８５】
ここで、表３は、それぞれ送信側のポートＧＵＩＤ、受信側のポートＧＵＩＤ、および重みの値に対応する３つの列を含んでいる。各々の行が、送信側のポートＧＵＩＤを有するノードと受信側のポートＧＵＩＤを有するノードとの間の経路に相当する。
【００８６】
次いで、選択された経路について推定された重みが、当該経路によって使用される通信リンクに関する負荷レベルを更新するために使用される（ステップ６２５）。すでに述べたように、推定された重みの値を、当該経路が使用する通信リンクの負荷レベルの値へと加算することができる。
【００８７】
破線の矢印によって示唆されるとおり、ステップ６０５〜６２５を、新たな経路の確立のために繰り返すことができる。典型的には、ステップ６０５〜６２５が、図６ａに示したアルゴリズムが実行されるクラスタにおいて確立すべきすべての経路について繰り返される。
【００８８】
図６ｂは、２つのノードを接続する経路の重みをそれらのノードが同じタスクの実行に割り当てられたときに計算するための典型的なアルゴリズムの特定の段階を示している。
【００８９】
すでに示したとおり、新たなタスクを開始すべき場合に、タスクマネージャがそれを実行できるか否かを判断し、肯定の場合に、その実行に割り当てられるノードのリストを確立する。すなわち、新たなタスクを実行すべき場合（ステップ６３０）、タスク内重み管理モジュールが、その実行に割り当てられたノードのリストを受信する（ステップ６３５）。タスク識別子が、それらのノード識別子に関連付けられる。
【００９０】
実行すべき新たなタスクが存在しない場合、アルゴリズムは、停止させられるまでルーピングを続ける。
【００９１】
次いで、特に実行すべきタスクの実行を最適化するために、クラスタの再ルーティングを実行すべきかどうかを判断するための試験が実行される（ステップ６４０）。
【００９２】
すでに示したように、そのような試験を、特に、実行すべきタスクに割り当てられたノードの数をクラスタのノードの数と比較すること、および／または推定されるタスクの実行時間を所定のしきい値と比較することで構成することができる。
【００９３】
破線の使用によって示唆されているとおり、このステップは随意である。実行される各々のタスクについて再ルーティングを実行すべきであると判断してもよい。
【００９４】
再ルーティングを実行する必要がない場合、当該タスクの実行を可能にするインストラクションがタスクマネージャへと送信される（ステップ６４５）。次いで、アルゴリズムは、実行すべき新たなタスクを待つべくステップ６３０へと戻る。
【００９５】
そうでない場合、再ルーティングを実行しなければならない場合に、続くステップ（ステップ６５０）において、ノード識別子およびポートＧＵＩＤなどのルーティング情報項目の間のリンクが確立される。このステップは、典型的には、タスクマネージャから受信されたノード識別子のリストおよび通常はデータベースに保存された設定データにもとづいて行なわれる。このステップは、特に同じタスクの実行へと割り当てられ、間に経路を確立させなければならないノードの送信アドレスおよび受信アドレスを特定することを可能にする。
【００９６】
やはり、破線の使用によって示唆されているとおり、このステップは随意である。その実行は、クラスタにおけるノード間の通信リンクの管理の方法に応じて決まる。
【００９７】
最後に、実行すべきタスクへと割り当てられたノードの出力アドレスを同じタスクへと割り当てられたノードの入力アドレスへと接続する各々の経路に重みが与えられる。そのようなアドレスは、好ましくはポートＧＵＩＤである。このステップは、別表（表３）に示されるような重み表の確立を可能にする。
【００９８】
次いで、クラスタの再ルーティングが、図６ａに関して説明したアルゴリズムなどのアルゴリズムを使用して行なわれる（符号Ａ）。次に、該当のタスクの実行を可能にするためのインストラクションがタスクマネージャへと送信され（ステップ６４５）、アルゴリズムは実行すべき新たなタスクを待つべくステップ６３０へと戻る。
【００９９】
図６ａおよび図６ｂを参照して説明したアルゴリズムを、例えば図２に関して説明したアーキテクチャと同様のアーキテクチャを有する装置において実行できることが、明らかになっている。
【０１００】
このアルゴリズムは、管理ノード上で動作するネットワークマネージャにおいて実行される。
【０１０１】
さらに、ルーティングアルゴリズムにおける重みの使用が、クオリティオブサービス（ＱｏＳ）の管理アルゴリズムと矛盾しないことが明らかになっている。ここで、クオリティオブサービスの管理が、典型的には仮想リンクの考え方に従って各々の経路に関するサービスおよび信用のレベルにもとづいて、ネットワークの争いの場合に特定の経路を優先できるようにすることを、思い出すべきである。したがって、この管理は、本質的にルーティングとは無関係である。したがって、これら２つの手法は、クラスタにおけるデータの伝送を改善し、したがってクラスタの性能を向上させるうえで、相補的である。
【０１０２】
当然ながら、個々のニーズを満たすために、当業者であれば以上の説明に変更を加えることができるであろう。
【０１０３】
【表１】
2013531424.tif 000003
【０１０４】
抜粋１
【表２】
2013531424.tif 000004
【０１０５】
【表３】
2013531424.tif 000005
【０１０６】
【表４】
2013531424.tif 000006
【図１】
2013531424.tif 000007
【図２】
2013531424.tif 000008
【図３ａ】
2013531424.tif 000009
【図３ｂ】
2013531424.tif 000010
【図３ｃ】
2013531424.tif 000011
【図３ｄ】
2013531424.tif 000012
【図３ｅ】
2013531424.tif 000013
【図４ａ】
2013531424.tif 000014
【図４ｂ】
2013531424.tif 000015
【図４ｃ】
2013531424.tif 000016
【図４ｄ】
2013531424.tif 000017
【図５】
2013531424.tif 000018
【図６ａ】
2013531424.tif 000019
【図６ｂ】
2013531424.tif 000020
【国際調査報告】
2013531424.tif 000021
2013531424.tif 000022
2013531424.tif 000023
2013531424.tif 000024
2013531424.tif 000025
2013531424.tif 000026