(57)【要約】      （修正有）【課題】トーラス型のコンピュータ・システムの故障ノードの修復方法を提供する。【解決手段】トーラス・ネットワークと複数のＩＯノードからなるツリー・ネットワークとを有し、計算ノードの各々はツリー・ネットワークの末端のＩＯノードとリンクを形成するコンピュータ・システムにおいて、計算の実行中に計算ノードの１つに故障が発生した場合に、故障ノードとリンクを形成するＩＯノードを、故障ノードのアドレスに一次元増やしたアドレスにより特定される代替ノードとして、故障ノードに隣接するノードに知らせ、隣接ノードが故障ノード宛のパケットを受取ると、パケットを代替ノードにルーティングし、代替ノードに到達したパケットが指定するジョブを代替ノードにおいて処理し、代替ノードはジョブの処理結果を含むパケットを送る計算ノードのアドレスを確認し、代替ノードに接続された計算ノードからアドレスに一番近い計算ノードにパケットを送る。【選択図】図９
2008165531.tif 000002
【特許請求の範囲】
【請求項１】
３次元格子点（アドレス）に配置され隣接格子点間でリンクを形成する複数の計算ノードからなるトーラス・ネットワークと、
複数のＩＯノードからなるツリー・ネットワークとを有し
前記計算ノードの各々は、前記ツリー・ネットワークの末端のＩＯノードとリンクを形成するコンピュータ・システムにおいて、計算の実行中に１つの計算ノードが故障した場合にフェイル・オーバーする方法であって、
計算の実行中に故障の計算ノードを検出するステップと、
前記故障の計算ノード（故障ノード）にリンクされた前記ＩＯノードを、前記故障ノードのアドレスに一次元増やしたアドレスにより特定される代替ノードとするステップと、
前記故障ノードに隣接する計算ノード（隣接ノード）が前記故障ノード宛のパケットを受取ると、前記パケットを前記代替ノードにルーティングするステップと、
を備えるフェイル・オーバーする方法。
【請求項２】
前記コンピュータ・システムの複数の計算ノードは、３次元トーラスとして接続されたａ×ｂ×ｃ個のアレイであり、前記計算ノードのそれぞれは隣接する計算ノードへ＋および−のｘ，ｙ，ｚ方向に６つのリンクを形成し、
前記コンピュータ・システムの前記末端のＩＯノードは、前記３次元トーラスのｚ面のａ×ｂ個のアレイの所定の数の計算ノードとリンクを形成し、
前記計算ノードは、全体で７つのリンクを有する請求項２に記載の方法。
【請求項３】
前記ＩＯノードを代替ノードとするステップは、  
前記故障ノード（ｘ、ｙ、ｚ）とリンクを形成する前記ＩＯノードを代替ノードとして前記代替ノードのアドレス（ｘ、ｙ、ｚ、１）を、前記故障ノードに隣接する計算ノードに知らせるステップを含む、請求項１または２項に記載の方法。
【請求項４】
前記代替ノードに到達した前記パケットが指定するジョブを前記代替ノードにおいて処理するステップを更に含む請求項３に記載の方法。
【請求項５】
前記代替ノードは前記ジョブの処理結果を含むパケットを送る計算ノードのアドレスを確認し、前記代替ノードに接続された計算ノードから前記アドレスに一番近い計算ノードに前記パケットを送るステップを更に備える、請求項４に記載の方法。
【請求項６】
前記ルーティングするステップは、前記隣接する計算ノードが前記代替ノードに接続されている場合、前記代替ノードに前記パケットを送るステップである請求項４記載の方法。
【請求項７】
前記ルーティングするステップは、前記隣接ノードが前記代替ノードと別のＩＯノードに接続されている場合、前記隣接ノードに到達した前記パケットを前記別のＩＯノードに送り、前記ツリー・ネットワークを経由して前記代替ノードに送るステップである請求項４記載の方法。
【請求項８】
前記計算ノード及び前記ＩＯノードは、少なくとも１つのＣＰＵ、及びメモリを含む、請求項１記載の方法。
【請求項９】
３次元格子点（アドレス）に配置され隣接格子点間でリンクを形成する複数の計算ノードからなるトーラス・ネットワークと、
複数のＩＯノードからなるツリー・ネットワークとを有し
前記計算ノードの各々は、前記ツリー・ネットワークの末端のＩＯノードとリンクを形成するコンピュータ・システムにおいて、計算の実行中に前記計算ノードの１つに故障が発生した場合に（ａ）フェイル・オーバーするために前記コンピュータに、
（ｂ）故障の計算ノード（故障ノード）を検出するステップと、
（ｃ）前記故障ノードと前記リンクを形成する前記ＩＯノードを、前記故障ノードのアドレスに一次元増やしたアドレスにより特定される代替ノードとして、前記故障ノードに隣接するノード（隣接ノード）に知らせるステップと、
（ｄ）前記隣接ノードが前記故障ノード宛のパケットを受取ると、前記パケットを前記代替ノードにルーティングするステップと、
（ｇ）前記代替ノードに到達した前記パケットが指定するジョブを前記代替ノードにおいて処理するステップと、
（ｈ）前記代替ノードは前記ジョブの処理結果を含むパケットを送る計算ノードのアドレスを確認し、前記代替ノードに接続された計算ノードから前記アドレスに一番近い計算ノードに前記パケットを送るステップと、
を実行させるプログラム。
【請求項１０】
前記ルーティングするステップは、前記隣接する計算ノードが前記代替ノードに接続されている場合、前記代替ノードに前記パケットを送るステップである請求項９記載のプログラム。
【請求項１１】
前記ルーティングするステップは、前記隣接ノードが前記代替ノードと別のＩＯノードに接続されている場合、前記隣接ノードに到達した前記パケットを前記別のＩＯノードに送り、前記ツリー・ネットワークを経由して前記代替ノードに送るステップである請求項９記載のプログラム。
【請求項１２】
３次元格子点に配置され隣接格子点間でリンクを形成する複数の計算ノードからなるトーラス・ネットワークと、
複数のＩＯノードからなるツリー・ネットワークとを備え、
前記計算ノードの各々は、前記ツリー・ネットワークの末端のＩＯノードとリンクを形成し、
更に、計算の実行中に前記計算ノードが故障した場合、前記故障ノードと前記リンクを形成する前記ＩＯノードを、前記故障ノードのアドレスに一次元増やしたアドレスにより特定される前記代替ノードに代替ノードとする手段と、
備えるコンピュータ・システム。
【請求項１３】
前記隣接する計算ノードは、前記故障ノード宛のパケットを受取ると、前記代替ノードにルーティングする手段と、
前記代替ノードは、前記パケットにより指定されるジョブの処理結果のパケットを送るアドレスを確認し、前記代替ノードに接続されている複数の計算ノードのアドレスから、宛先に一番近いアドレスの計算ノードを選び、前記アドレスの計算ノードに前記パケットを送る手段とを、
更に備える請求項１２記載のコンピュータ・システム。
【請求項１４】
前記ルーティングする手段は、前記隣接する計算ノードが前記代替ノードに接続されている場合、前記代替ノードに前記パケットを送る請求項１３記載のコンピュータ・システム。
【請求項１５】
前記ルーティングする手段は、前記隣接ノードが前記代替ノードと別のＩＯノードに接続されている場合、前記隣接ノードに到達した前記パケットを前記別のＩＯノードに送り、前記ツリー・ネットワークを経由して前記代替ノードに送る請求項１３記載のコンピュータ・システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のノードを有するコンピュータ・システムに関する。特に、本発明は、トーラス・ネットワークの故障ノードの修復方法（いわゆるフェイルオーバー）に関する。
ここで、フェイル・オーバーとは、ノードに障害が発生した場合に、代替ノードに処理を継ぐ機能を言う。
【背景技術】
【０００２】
従来、大規模な並列計算システム（コンピュータ・システム）において、トーラス・ネットワーク（以下「トーラス」（ＴＯＲＵＳ）ともいう。）が用いられている。トーラス・ネットワークは、ある立体形状をなす３次元空間の各格子点に通信ノード（以下「計算ノード」「ＩＯノード」とも言う）を配置した場合において互いに隣接して配置される通信ノードを互いに接続した通信ネットワークをいう。トーラス・ネットワークは、２次元トーラスであれば正方形、３次元トーラスであれば立方体に構成することが最も望ましい。
【０００３】
図１は、コンピュータ・システム１０および情報処理装置２０の全体構成を示す。コンピュータ・システム１０は、複数の通信ノード（後述の例では通信ノードは３次元格子点（ｘ、ｙ、ｚ、）に配置される）を有する。そして、コンピュータ・システム１０は、複数の通信ノードのそれぞれにおいて、例えば数値計算等のためのプログラムを実行する。情報処理装置２０は、コンピュータ・システム１０中の各通信ノードに対し、プログラムの実行要求を送信する。この実行要求には、実行すべき処理内容のみならず、他の何れの通信ノードから受け取った実行結果を用いてプログラムを実行するか、または、実行結果を他の何れの通信ノードに対して実行するかの指示が含まれる。即ち、コンピュータ・システム１０は、情報処理装置２０からの要求に応じてプログラムを並列実行して、その実行結果を情報処理装置２０に返信する。これにより、単一の通信ノードによってプログラムを実行するよりも極めて効率的にプログラムを実行することができる。
【０００４】
図２は、コンピュータ・システム１０のトーラス・ネットワークの構成部分を示す。コンピュータ・システム１０は、通信ノード（以下、「計算ノード」、「トーラスノード」という）１２と、通信リンク（以下「リンク」という）１３とを有する。通信ノード１２のそれぞれは、他のそれぞれの通信ノードと並列にプログラムを実行する。通信ノード１２のそれぞれは、典型的には、プロセッサ（ＣＰＵ、ＭＰＵまたは中央処理装置）である。また、通信ノード１２のそれぞれは、ＤＲＡＭなどの記憶装置であってもよいし、プロセッサを同時に併設してもよい。
【０００５】
情報処理装置２０は、ＣＰＵ及びハードディスクを有する。従来の複数のノードを有するコンピュータ・システム１０は、複数の計算ノード１２からなるトーラス・ネットワーク１０と１つのＩＯノードを含む。コンピュータ・システムの主要部分を構成する各計算ノードはトーラス・ネットワークのリンク１３（図２）とは別に、ツリー・ネットワークのリンク１５（図３の計算ノード１２の接続関係）と最上位の１つのＩＯノード１４でツリー・ネットワークのリンクを形成する。コンピュータ・システム１０は、このツリー・ネットワークにより情報処理装置２０に接続される。
【０００６】
トーラス・ネットワークは、隣接された計算ノード（最近接の格子点間のノード）とのみ接続されるため、個々のノードに置けるルーティングのオーバーヘッドが小さく構成も簡単であるためハードウエア・システムを実現することが容易である。またネットワーク自体がスケーラブルであるため、ＩＢＭ  ＢｌｕｅＧｅｎｅ／ＬをはじめとするＭａｓｓｉｖｅ  Ｐａｒｒａｌｌｅｌコンピュータ・システムによく利用される。しかしながら、トーラス・ネットワークでは、隣接された計算ノードとしか接続されていないため、１つの計算ノードが故障した場合、そのノードの代替ノードを持つことが困難である。
【０００７】
一般に冗長性を考慮したシステムでは、あるノードが故障した場合、そのノードを代替するノードが割当てられる。以降の処理は故障ノードに代わりに代替ノードで行われることになる。図４は、２次元格子点位置（ｘ、ｙ）配置されたノードの一つが故障した場合を示す。トーラス・ネットワーク自体は隣接ノードとしか接続されていないため、代替ノードをトーラスの論理的に同じ３次元格子点位置（ｘ、ｙ、ｚ）に配置することはできない。代替ノードをアサインすることが出来ないか、アサイン出来たとしても、代替ノードへのルーティングが非常に複雑になる。そのため、オーバーヘッドが大きくパフォーマンスを著しく低下させる。このような問題点は、３次元格子点に配置されたトーラスノード（計算ノード）が故障した場合にその代替ノードを与える際に顕著になる。
【０００８】
この課題にして、ＩＢＭの並列コンピュータ・システムでは以下のようにシステム運用を行っている。例えば、ＩＢＭ  ＢｌｕｅＧｅｎｅ／Ｌ等では複数のノードを有する大規模集積されたシステムである。多数のノードを有する並列コンピュータ・システムにおいては、スカラブル（ｓｃａｂｌｅ）にノードを拡張できるハードウエアであるが、ノードが多くなれば故障は発生する確率が増す。特定のノードが故障した場合には電源を落としてノードを交換し、その後最後にハードディスク（ＨＤＤ）に書かれた（バックアップしている）チェックポイントから計算を再開するという方法がとられている。ノード数が増えれば増えるほど故障率も上がり、このことがシステム全体のスループットを大きく下げる原因（問題）になってしまう。
【０００９】
特許文献１は、マルチプロセッサ並列ネットワークにおいてハードウエア障害が生じた場合にどのようにして並列ネットワークを構築し直す方法を提供する。この方法は、マルチプロセッサ並列ネットワークにおいてハードウエア障害が生じたネットワークを回復させるとう課題を解決することを目的としている。多数のノードからなる並列コンピュータ・システムにおいて故障の生じたプロセッサを含むグループを冗長なプロセッサを含むグループにより交換して、ハードウエア障害から回復できるようにしている。そのために、特許文献１は、スイッチモジュールを用いてトーラスを結線のやり直しなしに動的に分割する。例えば、４×４×４の３Ｄトーラスの１ノードでエラーが発生した場合、１×４×４と３×４×４に（１×４×４に故障ノードが含まれるように）分割し、３×４×４で計算をやり直すという方法である。この方法では、ノード数がかわってしまう。また、この方法は、はじめから５×４×４を１×４×４＋４×４×４と分割しておいて、エラーがおこったら故障ノードが１×４×４に含まれるように再分割する。これらの方法では、並列ネットワークにおいて計算実行途中における故障ノードを回復して、途中までの計算が無駄になる。
【００１０】
【特許文献１】特許公表第２００４−５３２４４７号公報
【発明の開示】
【発明が解決しようとする課題】
【００１１】
上記の通り、複数のノードを有する並列システムにおいて、ノード故障などハードウエア障害が生じた場合、実行中の計算を無駄にすることを解決しない。また、既存のトーラス・ネットワークの構成を大幅に変更する必要があるために、計算実行のパフォーマンスの向上が図れない。特に、長時間かけて計算した科学技術計算、金融工学などの分野では、ノンストップで継続的に計算履歴を取得したい場合に、ユーザ及びシステム運用者に損失は大きい。
【００１２】
そこで本発明は、上記の課題を解決することのできるトーラスネットワーク（コンピュータ・システム）を提供することを目的とする。
また本発明は、上記の課題を解決することのできる複数のノードを有するコンピュータ・システム（トーラス・ネットワーク）の故障ノードの修復（フェイルオーバー）する方法を提供することを目的とする。
【課題を解決するための手段】
【００１３】
かかる目的のもと、本発明は、３次元格子点（アドレス）に配置され隣接格子点間でリンクを形成する複数の計算ノードからなるトーラス・ネットワークと、複数のＩＯノードからなるツリー・ネットワークとを有し前記計算ノードの各々は、前記ツリー・ネットワークの末端のＩＯノードとリンクを形成する、コンピュータ・システムにおいて計算の実行中に１つの計算ノードが故障した場合フェイル・オーバーする方法である。この方法は、計算の実行中に故障の計算ノードを検出するステップと、前記故障の計算ノード（故障ノード）にリンクされた前記ＩＯノードを、前記故障ノードのアドレスに一次元増やしたアドレスにより特定される代替ノードとするステップと、前記故障ノードに隣接する計算ノード（隣接ノード）が前記故障ノード宛のパケットを受取ると、前記パケットを前記代替ノードにルーティングするステップと、を備えることを特徴とする。
また、この方法において、前記コンピュータ・システムの複数の計算ノードは、３次元トーラスとして接続されたａ×ｂ×ｃ個のアレイであり、前記計算ノードのそれぞれは隣接する計算ノードへ＋および−のｘ，ｙ，ｚ方向に６つのリンクを形成し、
前記コンピュータ・システムの前記末端のＩＯノードは、前記３次元トーラスのｚ面のａ×ｂ個のアレイの所定の数の計算ノードとリンクを形成し、前記計算ノードは、全体で７つのリンクを有することを特徴とする。
また、この方法において、前記ＩＯノードを代替ノードとするステップは、前記故障ノード（ｘ、ｙ、ｚ）とリンクを形成する前記ＩＯノードを代替ノードとして前記代替ノードのアドレス（ｘ、ｙ、ｚ、１）を、前記故障ノードに隣接する計算ノードに知らせるステップを含むことを特徴とする。
また、この方法において、前記代替ノードに到達した前記パケットが指定するジョブを前記代替ノードにおいて処理するステップを更に含むことを特徴とする。
また、この方法において、前記代替ノードは前記ジョブの処理結果を含むパケットを送る計算ノードのアドレスを確認し、前記代替ノードに接続された計算ノードから前記アドレスに一番近い計算ノードに前記パケットを送るステップを更に備えることを特徴とする。
また、この方法において、前記ルーティングするステップは、前記隣接する計算ノードが前記代替ノードに接続されている場合、前記代替ノードに前記パケットを送るステップであることを特徴とする。
また、この方法において、前記ルーティングするステップは、前記隣接ノードが前記代替ノードと別のＩＯノードに接続されている場合、前記隣接ノードに到達した前記パケットを前記別のＩＯノードに送り、前記ツリー・ネットワークを経由して前記代替ノードに送るステップであることを特徴とする。
また、この方法において、前記計算ノード及び前記ＩＯノードは、少なくとも１つのＣＰＵ、及びメモリを含むことを特徴とする。
【００１４】
かかる目的のもと、本発明は、３次元格子点（アドレス）に配置され隣接格子点間でリンクを形成する複数の計算ノードからなるトーラス・ネットワークと、複数のＩＯノードからなるツリー・ネットワークとを有し、前記計算ノードの各々は、前記ツリー・ネットワークの末端のＩＯノードとリンクを形成する、コンピュータ・システムにおいて計算の実行中に前記計算ノードの１つに故障が発生した場合に（ａ）フェイル・オーバーするためのプログラムである。このプログラムは、前記コンピュータに、
（ｂ）故障の計算ノード（故障ノード）を検出するステップと、
（ｃ）前記故障ノードと前記リンクを形成する前記ＩＯノードを、前記故障ノードのアドレスに一次元増やしたアドレスにより特定される代替ノードとして、前記故障ノードに隣接するノード（隣接ノード）に知らせるステップと、
（ｄ）前記隣接ノードが前記故障ノード宛のパケットを受取ると、前記パケットを前記代替ノードにルーティングするステップと、
（ｇ）前記代替ノードに到達した前記パケットが指定するジョブを前記代替ノードにおいて処理するステップと、
（ｈ）前記代替ノードは前記ジョブの処理結果を含むパケットを送る計算ノードのアドレスを確認し、前記代替ノードに接続された計算ノードから前記アドレスに一番近い計算ノードに前記パケットを送るステップと、
を実行させることを特徴とする。
【００１５】
かかる目的のもと、本発明は、３次元格子点に配置され隣接格子点間でリンクを形成する複数の計算ノードからなるトーラス・ネットワークと、複数のＩＯノードからなるツリー・ネットワークとを備え、前記計算ノードの各々は、前記ツリー・ネットワークの末端のＩＯノードとリンクを形成し、更に、計算の実行中に前記計算ノードが故障した場合、前記故障ノードと前記リンクを形成する前記ＩＯノードを、前記故障ノードのアドレスに一次元増やしたアドレスにより特定される前記代替ノードに代替ノードとする手段と、備えるコンピュータ・システムである。
また、このコンピュータ・システムは、前記隣接する計算ノードは、前記故障ノード宛のパケットを受取ると、前記代替ノードにルーティングする手段と、前記代替ノードは、前記パケットにより指定されるジョブの処理結果のパケットを送るアドレスを確認し、前記代替ノードに接続されている複数の計算ノードのアドレスから、宛先に一番近いアドレスの計算ノードを選び、前記アドレスの計算ノードに前記パケットを送る手段とを、
更に備えることを特徴とする。
【発明の効果】
【００１６】
本発明によれば、複数の計算ノードから構成されるコンピュータ・システムのトーラスの構成を変えることなく故障時の代替ノードの割当てることを可能にすることが出来る。
また、本発明によれば、トーラスの構成を実質的に変更しないため、トーラス型のコンピュータ・システムの変更を最小限に抑えられる。
また、本発明によれば、トーラス型のコンピュータ・システムにおいて故障ノードが検出されるまでの計算実行のジョブ（チェックポイント）を短時間に回復して、チェックポイントから後続の計算を再開できる。
【発明を実施するための最良の形態】
【００１７】
以下、発明の実施の形態を通じて本発明を説明するが、以下の実施形態（実施例）は特許請求の範囲にかかる発明を限定するものではなく、また実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
【００１８】
以下の方法により、トーラスの３次元格子点（ｘ、ｙ、ｚ）の複数のノードの構成を実質的に変えることなく故障時の代替ノードのアサインを可能にすることが出来るようにする。
１．トーラス・ネットワークを構成する各ノード（「計算ノード」と言う。）に少なくとも１つのリンク（接続）を追加する。
２．追加された１つのリンクはトーラス・ネットワークの外にあるＩＯノードに接続される。故障した計算ノード（故障ノード）とリンクを形成しているＩＯノードを、故障ノードの代替ノードとして、以下で説明する変換則を適用する。
３．トーラス・ネットワークの外にあるＩＯノード１４は、複数のトーラス・ネットワーク上の計算ノード１２とスター状に接続されている。図３は、トーラス・ネットワークの外にあるＩＯノード同士はツリー（Ｔｒｅｅ）状に接続されている。
４．トーラス・ネットワークの計算ノードからトーラスの外にあるＩＯノードへのルーティングは、以下で詳述するように実質的にトーラス・ネットワークでルーティングされる。このルーティング方法が、本発明の特徴的な内容である。このルーティング方法により、既存の並列ネットワーク・システムのトーラスノード（計算ノード）の構成の変更を最小限に抑えられる。言い換えると、この方法は、故障ノードの発生したコンピュータ・システムの既存のトーラスノードの構成を擬似的に維持して、自動的にフェイルオーバー（故障ノードの交換）をする。
【００１９】
図５は、本発明の３次元トーラスを含むコンピュータ・システムのハードウエアの構成の実施例を示す。３次元トーラスの場合、各ノード（ｘ、ｙ、ｚ）は、各軸のそれぞれ正負の方向にリンク（ｌｉｎｋ：接続関係を有する意味）を持つことから、６本のリンクを持っている。３次元トーラスは、複数のＩＯノード１４からなるツリー・ネットワークを経由して情報処理装置２０（図３）に接続される。
【００２０】
なお、図３に示されているように、ツリー・ネットワークは、従来のＩＢＭのコンピュータ・システムでは、最上位のＩＯノード１４以外はトーラスノード（計算ノード）１２で構成されている。一方、本発明のコンピュータ・システムでは、複数のトーラスノード１２（計算ノード）を併用せず、複数のＩＯノード１４のみによりツリー・ネットワークを構成する。
【００２１】
本実施例では、計算ノード１２にリンクを１本追加するので、各計算ノードは７本のリンクを持つことになる。各計算ノード１２の７本のリンクの内６本は、従来の通りトーラスノード（隣接する計算ノード１２）に接続される。追加された１本は、図５に示すようにトーラスノード（計算ノード）１２をツリー・ネットワークの末端のＩＯノード１４に接続させる。末端のＩＯノードは、代替ノードＳ１，Ｓ２，Ｓ３，Ｓ４（図６を参照）として機能する。ＩＯノード１４はトーラス上の計算ノード１２と同じハードウエアである場合には、設計効率の観点から、図５及び図６のように７本のリンクを設けてもよい。また、ＩＢＭ  ＢｌｕｅＧｅｎｅ／ＬのＩＯノードなどと同じように、ＩＯノードは、トーラス上の計算ノードよりも大容量のメモリを実装している。トーラス上のノードに接続されているＩＯノードの７本のリンクは、６本はトーラス上のノードに接続され、他の１本は末端のＩＯノードに接続される。図５に示されるように、トーラス上のノード（計算ノード）に接続されていないＩＯノード１４は、７本とも他のＩＯノードに接続され、ＩＯノード１４同士はツリー・ネットワーク構造を構成している。尚、各計算ノード１２は、２以上（複数）の末端のＩＯノード１４とリンクを形成してもよい。
【００２２】
図６はｚ＝２の面で３次元トーラスを切り取った図を示す。図６を参照しながら、１つの計算ノードが故障し、その故障した計算ノードに末端のＩＯノード（代替ノード）を割当てる方法を説明する。また、その故障ノード宛へのパケットの代替ノードへのルーティングする（ｒｏｕｔｉｎｇ：経路指定する）方法、及び、代替ノードからジョブの処理結果をルーティングする方法を以下のシーケンスにより説明する。
【００２３】
正常なオペレーション（故障ノードが存在しない）の場合は、処理はすべてトーラス・ネットワークを構成する３次元格子点（ｘ、ｙ、ｚ）に配置した複数の計算ノードの中で閉じている。ＩＯノード及びこのツリー・ネットワークが通常処理に使われることはない。ただし、ＩＢＭ  ＢｌｕｅＧｅｎｅ／Ｌなど既存の大規模並列ネットワーク・システムにおいて、ツリー・ネットワークを構成するＩＯノードは、各計算ノードの処理結果を情報処理装置２０（図ＣＰＵ及びＨＤＤ）に送る為に利用される。
【００２４】
ＩＯノードは、自分に接続されているトーラスノード（計算ノード）と同じ数の仮想トーラスアドレスを持っている。図６を参照すると、ＩＯノードＳ２が代替ノードとなる場合、このノードが持つ仮想トーラスアドレス（計算ノード）は、このノードとリンクを形成する計算ノード（ｘ，ｙ，ｚ）に一次元と追加したものである（ｘ，ｙ，ｚ，１）。例えば、図６の代替ノードＳ２は、６個のアドレス（６，５，２，１）（６，６，２，１）（６，７，２，１）（６，８，２，１）（６，９，２，１）（６，１０，２，１）の計算ノードを代替する。このように末端のＩＯノードＳ２は、複数の仮想トーラスアドレスを持つことにより、ノードが故障した場合のルーティングをスムーズに行うことが出来る。
【００２５】
本発明のコンピュータ・システムは、所定の計算の実行中において一定時間ごとにこれら６個の計算ノードの処理結果の情報を代替ノードＳ２の記憶部（図７を参照）にバックアップする。従来のトーラス型のコンピュータ・システムでは、所定の計算の実行中の各計算ノードの処理結果の情報をＩＯノードを経由して情報処理装置２０のＨＤＤ（図１及び図３を参照）にバックアップする。このバックアップされた各計算ノードの処理結果の情報は、システムにハードウエア障害が発生した場合そのハードウエア障害の修復後に、所定の計算の後続の処理をどこから始まるかのチェックポイントを特定するのに使用される。
【００２６】
従来のＩＢＭ  ＢｌｕｅＧｅｎｅ／Ｌの通常オペレーション時にも、システムが故障した場合に備えて、各ノードは処理の再開に必要な最低限の情報を定期的に自分が接続されているＩＯノードに送っている。末端のＩＯは、各トーラスノード（計算ノード）から送られてきた情報を自分のメモリに蓄えておく。そして、従来のシステムでは、この処理の再開に必要な最低限の情報はＨＤＤに書いていた。ＨＤＤに全てのノードの情報を書き出すまでの間処理を中断する必要があった。そしてＨＤＤに蓄えられている情報から中断した次に処理が開始可能なチェックポントを判断する。故障ノードを交換した後に、そのチェックポントから全体の計算ノードの実行を開始する。なお、トーラス型の並列コンピュータ・システムは、３次元格子点に配置された複数の計算ノードからなるトーラス・ネットワークと、それら計算ノード及び１つのＩＯノードからなるツリー・ネットワークを持つ。図３に示すように、このツリー・ネットワークは、複数の計算ノード１２及び最上位の１つの専用の１つのＩＯノード１４からなるツリー・ネットワークのリンクにより形成されている（ツリー構成の図３）。
【００２７】
この発明では、代替ノード（末端のＩＯノード）のメモリに書くまでの間中断するだけなので、大幅に時間が短縮できる。ツリー・ネットワークを構成するＩＯノード１４は、さらに長い周期で各々計算ノード（トーラスノード）の情報をＨＤＤに書き出すことが可能となる。また、ＩＯノード１４が、ＨＤＤに書き出すのは通常処理とは非同期に行えるため、その間に全体の処理を止める必要はない。
【００２８】
図６において、故障ノードのｚ軸方向の上下にも隣接ノード（最近接のノード）が存在するが、ここでは説明の簡単化のためにｚ軸方向の隣接ノードは省略して考える。
１．（６，７，２）のノードが故障したとする。
２．システムが（６，７，２）のノードの故障を検出すると、ＩＯノードＳ２が（６，７，２）の代替ノードになることを故障ノードの隣接ノード（６，６，２）（６，８，２）（７，７，２）（５，７，２）に伝え、記憶させる。
３．最後に末端のＩＯノード（代替ノード）に書かれたチェックポイントまで戻り、処理が再開される。
４．故障ノードと、その隣接ノード以外では通常のオペレーションと変わることはない。
５．故障ノード宛てに送られてきたパケットは、隣接ノードまでは通常のルーティングで到達する。
６．隣接ノードは故障ノード（６，７，２）宛てのパケットを受け取ると、アドレスを１次元増やし、代替ノードＳ２（６，７，２，１）としてルーティングを行う。
７．代替ノード（６，７，２，１）宛のパケットは、通常のトーラスのルーティングに従い、隣接ノードから７本目のリンクに送り出され、代替ノードＳ２に到達する。代替ノード（６，７，２、１）とアドレス指定される末端のＩＯノードＳ２は、故障ノードと７本目のリンクにより、直接または別のＩＯノードを介して接続される。またＩＯノードＳ２は、この故障ノードに隣接する計算ノード（隣接ノード）の７本目のリンクを形成する。この時、代替ノードが複数のトーラスアドレスを持っているため、スター状に接続されたＩＯノードＳ２に、あたかもトーラス接続されているかのようにパケットを送ることが出来る。
８．このとき、故障ノードと同じ代替ノードＳ２と直接リンクを形成する、この故障ノードに隣接するノード（隣接ノード）（（６，８，２）（６，６，２））の場合は、直接代替ノードＳ２にパケットが送られる。
９．故障ノードと別の末端のＩＯノードＳ１、Ｓ３に接続された隣接ノード（（５，７，２）（７，７，２））の場合は、直接代替ノードにパケットを送ることが出来ないため、以下のルーティング行う。
（９-１）．（５，７，２）または（７，７，２）に到達した（６，７，２）宛てのパケットは、（６，７，２，１）宛てのパケットとしてＳ１またはＳ３に送られる。
（９−２）．Ｓ１またはＳ３に送られたパケットは、ツリー・ネットワーク（Ｓ５）を経由して故障ノードの代替ノードであるＳ２:（６，７，２，１）に送られる。
１０．代替ノードに到達したパケットは代替ノードで処理が行われる。
１１．代替ノードＳ２は処理結果を含むパケットの送り先のアドレスを確認し、Ｓ２に接続されているトーラスノード（計算ノード）の６個のアドレスから送り先アドレスに一番近いアドレスを選び、そのアドレスにパケットを送る。送り先アドレスが（５，９，２）である場合、Ｓ２は自分にリンクしている（６，１０，２），（６，９，２），（６，８，２），（６，６，２），（６，５，２）から（６，９，２）を選び、パケットを送る。
１２．代替ノードＳ２からパケットを受け取ったトーラスノード（計算ノード）は通常のルーティングでパケットを処理する。
この本発明の代替ノードへのルーティング方法を利用すると、従来では出来なかったか、非常にオーバーヘッドが大きく実用上難しかったトーラス・ネットワーク上のノードのフェイルオーバー（ＦａｉｌＯｖｅｒ）を実現することが可能になる。
【００２９】
図７は、計算ノード１２及びＩＯノード１４（ノードとも言う）の機能構成を示す。通信ノード（計算ノード１２及びＩＯノード１４）は、記憶部３００と、受信部３１０と、選択部３２０と、送信部３３０とを有する。記憶部３００は、通信ノード１２からトーラス・ネットワーク１３及びツリー・ネットワーク１４を経由して、他のそれぞれのリンク、通信ノードに至る通信経路のトポロジーを示す情報を記憶している。更に詳細な例を図８に示す。
【００３０】
図８は、記憶部３００のデータ構造の一例を示す。記憶部３００は、パケットのノードを宛先とする場合（格子点）に対して、６つの隣接ノードをうち最適なノードの宛先を選択する場合にそのノードを変換する変換規則を記憶している。
【００３１】
故障ノード（ｘ，ｙ，ｚ）に隣接するノードの記憶部３００には、隣接ノードが故障ノード（ｘ、ｙ、ｚ）を宛先とするパケットを受取った場合に、（ｘ，ｙ，ｚ）を一次元増やしたアドレス（ｘ，ｙ，ｚ，１）とする変換則を適用する。このアドレスは、故障ノードとリンクを形成するＩＯノードを指定する。本発明では、このＩＯノードを故障ノードの代替ノードとして割当てる。故障ノード（ｘ、ｙ、ｚ）のこの変換則として、それと直接にリンクを形成するＩＯノードを指示するのに、４次元で表示（ｘ，ｙ，ｚ，１）表現している。
【００３２】
具体例として、図８は故障ノード（６，７，２）が存在する場合、ＩＯノードＳ２を代替ノードとして割当てられていることを（図６を参照）指示する変換テーブルを、故障ノードに隣接する計算ノード（６，８、２）（６，６，２）（７，７，２）（５，７，２）に知らせ、それぞれの記憶部３００にＳ２を指示する変換テーブルを保持させる。
【００３３】
なお、本図の変換則は一例であり、記憶部３００のデータ構造には様々なバリエーションが考えられる。例えば、記憶部３００は、変換が必要な座標についてのみ変換則を記憶していてもよい。また、ノード（ｘ、ｙ、ｚ）に直接にリンクしているＩＯノードを指示出来れば、この４次元表現をすることに限られない。隣接ノードが故障ノード（ｘ，ｙ，ｚ）宛のパケットを受取った場合、記憶部３００に、単に（ｘ，ｙ，ｚ）のノードが正常（０）、故障（１）かを示すフラグを設けてもよい。隣接ノードがノード（ｘ，ｙ，ｚ）宛先のパケットパッケを受けた場合において、このフラグが１（オン）の場合にノード（ｘ，ｙ，ｚ）は故障であると判断さる。故障ノード宛のパケットを故障ノードに隣接する計算ノードが受取ると、故障ノードにリンクするＩＯノードＳ２が代替ノードしてパケットを転送する。
【００３４】
図７に戻る。受信部３１０は、通信パケットを通信パケットの宛先に対応付けて受信する。受信部３１０は、通信パケットの宛先として、３次元格子空間に宛先のノードを配置した場合の座標値（ｘ、ｙ、ｚ）を受信する。例えば、一つ隣接のノード（６，８，２）がノード（６，７，２）の宛先の通信パケットであれば、受信部３１０は、座標（６，７，２，１）を受信する。選択部３２０は、記憶部３００に記憶されている変換則に基づいて、受信した宛先に至る通信経路上でノード次に通信パケットを転送する転送先のノードを選択する。
【００３５】
図９は、上述の変換則を用いて、科学技術など種々の大規模計算の実行の途中において故障ノードが発生した場合のパケットのルーティングのフローチャートを示す。典型的には、図６に示す複数の計算ノードを有するトーラス・ネットワークと複数のＩＯノードをツリー・ネットワーク状に有し、各計算ノードは末端のＩＯノードと少なくとも１つのリンクを有する、コンピュータ・システム場合を考える。図６に示す故障の計算ノード（６，７，２）をＩＯノードＳ２が代替ノードとしてルーティングする動作を説明する。
（a）コンピュータ・システムが計算を実行している際に１つの計算ノード（６，７，２）に障害が発生している。
（ｂ）情報処理装置２０（図１）または当該装置に常駐する監視システムは、故障ノード（６，７，２）を検出する。監視システムは、検出はＩＯノードが構築するツリー・ネットワークを通じて検出できる。
（ｃ）監視システムは、ＩＯノードＳ２が代替ノードであることを隣接ノードに知らせる。
監視システムは、ツリー・ネットワークのＩＯノードＳ２を通じて変換測（故障ノード（６，７，２） → 代替ノード（６，７，２，１）を４つの隣接ノード（６，８，２）、（６，６，２）に知らせ、それぞれの記憶部３００に記憶される。また、この変換則をＳ２→Ｓ５→Ｓ３またはＳ１を経由して２つの隣接ノード（７，６，２）または（５，７，２）に知らせ、それぞれの記憶部に記憶される。なお、ツリー・ネットワーク１５を構成するＩＯノード１４（Ｓ１，Ｓ２，Ｓ３、・・・・）間のルーティングは、各ＩＯノードのハードウエアにおいて事前に設定されている。
（ｄ）６つの隣接ノードは、故障ノード（ｘ、ｙ、ｚ）宛のパケットを受け取ると、代替ノードに変換測に従って、ルーティング（ｅ）または（ｄ）の場合に分かれる。
（ｅ）代替ノードＳ２（６，７，２，１）に接続された隣接ノード（６，８，２）（６，６，２）の場合：直接代替ノードＳ２にパケットを送る。
（ｆ）代替ノードＳ２とは別の代替ノードＳ３に接続された隣接ノード（７，７，２）の場合： 隣接ノード（７，７，２）に到達した故障ノード（６，７，２）宛てのパケットは、代替ノードＳ２（６，７，２，１）宛のパケットとしてＳ３に送られる。Ｓ３に送られたパケットは、トリーネットワークを経由して最終的に代替ノードＳ２（６，７，２，１）に送られる
（ｇ）代替ノードＳ２（６，７，２，１）に到達したパケットは、Ｓ２で処理される。
（ｈ）代替ノードＳ２はパケットにより指定されたジョブの処理結果の新たなパケットとして送るアドレスを確認する。
例えば、パケットが計算ノード（５，９，２）宛である場合に、Ｓ２に接続されるトーラスノード６個のアドレスから宛先に一番近い計算ノード（６，９，２）を選び、その計算ノードを経由して目的にトーラスノード（５，９，２）にパケットを送る。
【００３６】
以上、本実施例および変形例によれば、複数の計算ノードから構成されるコンピュータ・システムのトーラスの構成を変えることなく故障時の代替ノードの割当てることを可能にすることが出来る。
また、ノードが故障した場合にも最低限のオーバーヘッドで自動的に代替ノードをアサインすることで処理を継続することが出来、複数ノードを有する並列ネットワーク・システムのスループットへの影響を最小限にすることが可能となる。
【００３７】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態に記載の範囲には限定されない。上記実施の形態に、多様な変更または改良を加えることが可能であることが当業者に明らかである。その様な変更または改良を加えた形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。
【図面の簡単な説明】
【００３８】
【図１】コンピュータ・システム１０および情報処理装置２０の全体構成を示す。
【図２】コンピュータ・システム１０のトーラス・ネットワークの構成部分を示す。
【図３】トーラス・ネットワークの外にあるＩＯノード同士はツリー（Ｔｒｅｅ）状に接続されていることを示す。
【図４】２次元格子点位置（ｘ、ｙ）配置されたノードの一つが故障した場合を示す。
【図５】本発明の３次元トーラスを次のハードウエアの構成を示す。
【図６】ｚ＝２の面で本発明の３次元トーラス・ネットワークを切り取った図を示す。
【図７】計算ノード及びＩＯノード１２の機能構成を示す。
【図８】記憶部３００のデータ構造の一例を示す。
【図９】変換則を用いて、計算事項途中において発生した故障ノード宛のパケットのルーティング方法により、故障ノードをフェイル・オーバーするフローチャートを示す。
【符号の説明】
【００３９】
１０  コンピュータ・システム
２０  情報処理装置
１２  計算ノード
１３  トーラス・ネットワークのリンク
１４  ＩＯノード
１５  ツリー・ネットワークのリンク
３００  記憶部
３１０  受信部
３２０  選択部
３３０  送信部
【図１】
2008165531.tif 000003
【図２】
2008165531.tif 000004
【図３】
2008165531.tif 000005
【図４】
2008165531.tif 000006
【図５】
2008165531.tif 000007
【図６】
2008165531.tif 000008
【図７】
2008165531.tif 000009
【図８】
2008165531.tif 000010
【図９】
2008165531.tif 000011