(57)【特許請求の範囲】
【請求項１】
複数のノードを含む共有メモリシステムであって、
前記複数のノード各々は、
演算処理装置と、
メモリと、
を含み、
前記演算処理装置は、
プロセッサコアと、
前記共有メモリシステム内の他のノードが備える前記メモリに対する第１のリクエストを発行するリクエスト発行回路と、
前記複数のノードそれぞれについて故障していることを示す第１の情報又は故障していないことを示す第２の情報が設定される第１の故障ノードリストを記憶する記憶回路と、
前記リクエスト発行回路が発行した前記第１のリクエストがタイムアウトした場合、前記第１の故障ノードリストにおいて前記他のノードに前記第１の情報を設定する設定回路と、
前記プロセッサコアから前記他のノードが備える前記メモリに対する第２のリクエストが入力された場合に、前記第１の故障ノードリストにおいて前記他のノードに前記第１の情報が設定されていれば前記リクエスト発行回路による前記第２のリクエストの発行を抑止し、前記第１の故障ノードリストにおいて前記他のノードに前記第２の情報が設定されていれば前記リクエスト発行回路による前記第２のリクエストの発行を抑止しない、発行抑止回路と、
を含む、共有メモリシステム。
【請求項２】
前記リクエスト発行回路は、更に、第１のノードとの間の通信経路の異常が通知された場合、前記リクエスト発行回路が備えるバッファ内に保持される前記第１のノードを送信先とする第３のリクエストに設定抑止情報を設定し、
前記設定回路は、前記第１の故障ノードリストにおいて、前記設定抑止情報が設定されている前記第３のリクエストの送信先の前記第１のノードに前記第１の情報を設定する動作を抑止する、
ことを特徴とする請求項１に記載の共有メモリシステム。
【請求項３】
前記複数のノード各々は更に、
監視装置と、
前記複数のノードそれぞれについて前記第１の情報又は前記第２の情報が設定される第２の故障ノードリストを記憶する記憶装置と、
を含み、
前記監視装置は、前記設定回路が前記第１の故障ノードリストにおいて、第２のノードに前記第１の情報を設定した場合、前記共有メモリシステム内の別のノードの前記監視装置に前記第２の故障ノードリストにおいて前記第２のノードに前記第１の情報を設定するように指示し、
前記演算処理装置及び前記監視装置は、前記第１の故障ノードリスト又は前記第２の故障ノードリストの一方の設定を変更した場合に、前記設定の変更を他方に反映させるように動作する、
ことを特徴とする請求項１又は２に記載の共有メモリシステム。
【請求項４】
前記演算処理装置は、更に、
前記第１のリクエストがタイムアウトした場合に、前記第１のリクエストの処理時間の監視を解放させる割り込み通知を前記プロセッサコアに送信する割込通知回路を備える、
ことを特徴とする請求項１から３のいずれか1項に記載の共有メモリシステム。
【請求項５】
プロセッサコアと、
共有メモリシステム内の複数のノードのうちの他のノードが備えるメモリに対する第１のリクエストを発行するリクエスト発行回路と、
前記複数のノードそれぞれについて故障していることを示す第１の情報又は故障していないことを示す第２の情報が設定される第１の故障ノードリストを記憶する記憶回路と、
前記リクエスト発行回路が発行した前記第１のリクエストがタイムアウトした場合、前記第１の故障ノードリストにおいて前記他のノードに前記第１の情報を設定する設定回路と、
前記プロセッサコアから前記他のノードが備える前記メモリに対する第２のリクエストが入力された場合に、前記第１の故障ノードリストにおいて前記他のノードに前記第１の情報が設定されていれば前記リクエスト発行回路による前記第２のリクエストの発行を抑止し、前記第１の故障ノードリストにおいて前記他のノードに前記第２の情報が設定されていれば前記リクエスト発行回路による前記第２のリクエストの発行を抑止しない、発行抑止回路と、
を含む、演算処理装置。
【請求項６】
共有メモリシステム内の複数のノードのうちの他のノードが備えるメモリに対してリクエスト発行回路が発行した第１のリクエストがタイムアウトした場合、前記複数のノードのそれぞれについて故障していることを示す第１の情報又は故障していないことを示す第２の情報が設定される第１の故障ノードリストにおいて、前記他のノードに対して前記第１の情報を設定回路が設定する工程と、
プロセッサコアから前記他のノードが備える前記メモリに対する第２のリクエストが入力された場合に、前記第１の故障ノードリストにおいて前記他のノードに前記第１の情報が設定されていれば前記リクエスト発行回路による前記第２のリクエストの発行を発行抑止回路が抑止し、前記他のノードに前記第２の情報が設定されていれば前記リクエスト発行回路による前記第２のリクエストの発行を前記発行抑止回路が抑止しない工程と、
を含む、演算処理装置が実行する方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、共有メモリシステム、演算処理装置、及び方法に関する。
【背景技術】
【０００２】
複数の演算処理装置が主記憶装置を共有する対称型マルチプロセッサ（ＳＭＰ：Symmetric Multi-Processor）が知られている。このようなＳＭＰの技術が適用された情報処理システムの一例として、演算処理装置と主記憶装置とを有する複数のノードを同一のバスで接続し、バスを介して、各演算処理装置が各主記憶装置を共有する情報処理システムがある。このような情報処理システムには、ディレクトリ方式を用いて、各ノードの演算処理装置がキャッシュしたデータのコヒーレンシを保持するものがある。
【０００３】
ＳＭＰでは複数のノードを１パーティションとして扱うため、一つのノードの故障が他のノードすべてのダウンにつながる。このようなエラーの影響範囲を抑えるための技術に共有メモリシステムがある。
【０００４】
これに関し、情報処理装置がダウンする可能性を抑制するための技術が知られている（例えば、特許文献１参照）。また、ノード間のデータ転送に関わる異常が発生した場合に、エラーの影響範囲を抑えるための技術が知られている（例えば、特許文献２参照）。サーバから複数の端末にデータを送信するシステムにおいて、端末へのデータ送信の性能の低下を招かないようにするための技術が知られている（例えば、特許文献３参照）。制御装置が複数の端末に順次ポーリングする際に、他の端末へのサービスの低下を防止および端末を監視して復旧を速やかに行うための技術が知られている（例えば、特許文献４参照）。ノード間クロスバスイッチを介してノード間のデータ転送を行うシステムにおいて、１台のクロスバスイッチに障害が発生した場合においてもシステムダウンを防止するための技術が知られている（例えば、特許文献５参照）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１３−１８２３５５号公報
【特許文献２】特開２０１３−１４０４４５号公報
【特許文献３】特開２００２−２５９２６４号公報
【特許文献４】特開平６−１５２６１２号公報
【特許文献５】特開２００６−３９８９７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、例えば、或るノードのＣＰＵ（演算処理装置）が別なノードにリクエストを送信した場合に、別なノードが故障しておりリクエストに対する応答がないことがある。その結果、リクエストがタイムアウトしてしまい、ＣＰＵ内部の処理監視時間を超えてしまう、或いは、ＣＰＵ内部の資源を使い切ってしまうことがある。そして、リクエストを発行したノードが故障していなくてもダウンしてしまうことがある。本発明の一態様に係る目的は、共有メモリシステムにおいて、或るノードが、他のノードの故障に起因してダウンしてしまうことを抑止することである。
【課題を解決するための手段】
【０００７】
本発明の一つの態様の共有メモリシステムは、複数のノードを含み、複数のノード各々は、演算処理装置と、メモリとを含む。演算処理装置は、プロセッサコアと、リクエスト発行回路と、記憶回路と、設定回路と、発行抑止回路とを含む。リクエスト発行回路は、共有メモリシステム内の他のノードが備えるメモリに対する第１のリクエストを発行する。記憶回路は、複数のノードそれぞれについて故障していることを示す第１の情報又は故障していないことを示す第２の情報が設定される第１の故障ノードリストを記憶する。設定回路は、リクエスト発行回路が発行した第１のリクエストがタイムアウトした場合、第１の故障ノードリストにおいて他のノードに第１の情報を設定する。発行抑止回路は、プロセッサコアから他のノードが備えるメモリに対する第２のリクエストが入力された場合に、第１の故障ノードリストにおいて他のノードに第１の情報が設定されていればリクエスト発行回路による第２のリクエストの発行を抑止する。また、発行抑止回路は、第１の故障ノードリストにおいて他のノードに第２の情報が設定されていればリクエスト発行回路による第２のリクエストの発行を抑止しない。
【発明の効果】
【０００８】
共有メモリシステムにおいて、或るノードが、他のノードの故障に起因してダウンしてしまうことを抑止することができる。
【図面の簡単な説明】
【０００９】
【図１】例示的な共有メモリシステムを示す図である。
【図２】共有メモリシステムの動作例を示す図である。
【図３】共有メモリシステムにおけるリクエストのタイムアウトとノードのダウンとを例示する図である。
【図４】ビルディングブロックの故障と経路の故障とを例示する図である。
【図５】第１の実施形態に係る情報処理システムを例示するブロック図である。
【図６】ＣＰＵ内部のホームエージェント回路によるリクエストの発行と抑止とを例示する図である。
【図７】情報処理システムにおけるリクエストの発行の抑止動作を例示する図である。
【図８】故障ノードリストによるリクエスト及びオーダーの発行と発行抑止とについて例示する図である。
【図９】ＣＰＵ間を繋ぐ経路の構成を例示する図である。
【図１０】ホームエージェント回路とルータ共通回路とルータポート固有回路とを例示する図である。
【図１１】経路の異常が検出された場合に故障ノードフラグの設定を抑止する動作の流れを例示する図である。
【図１２】ホームエージェント回路とＳＣＦとによる故障ノードリストの同期を例示する図である。
【図１３】第２の実施形態に係る情報処理システムにおいてノードを強制終了する場合の動作を例示する図である。
【図１４】第２の実施形態に係る情報処理システムのビルディングブロック間の接続を例示する図である。
【図１５】第２の実施形態に係る情報処理システムにおける第２の故障ノードリストの利用の別な例を示す図である。
【発明を実施するための形態】
【００１０】
以下、図面を参照しながら、本発明のいくつかの実施形態について詳細に説明する。なお、複数の図面において対応する要素には同一の符号を付す。
【００１１】
図１は、例示的な共有メモリシステム１００を示す図である。共有メモリシステム１００は、例えば、複数のビルディングブロック（ＢＢ）１０１、及びクロスバスイッチ１０２を含む。ビルディングブロック１０１は、例えば、クロスバスイッチ（ＧＸＢ）１０２を介して互いに接続されている。共有メモリシステム１００において、例えば、ビルディングブロック１０１はノードとして動作する。ビルディングブロック１０１は、例えば、メモリ１１１、ＣＰＵ（演算処理装置）１１２、クロスバチップ（ＬＸＢ）１１３を含む。ビルディングブロック１０１は、メモリ１１１と、ＣＰＵ１１２を複数含んでいてもよく、又はメモリ１１１と、ＣＰＵ１１２を１つ含んでいてもよい。ＣＰＵ１１２は、例えば、ＣＰＵ１１２外部とのインタフェースである外部インタフェース（ＩＦ）１２１を含む。ＣＰＵ１１２は、外部インタフェース１２１を通じて同じビルディングブロック１０１内のＣＰＵ１１２と接続されている。また、ＣＰＵ１１２は、別のビルディングブロック１０１内のＣＰＵ１１２とクロスバスイッチ１０２を通じて接続されている。また、各ＣＰＵ１１２はメモリ１１１と接続されている。メモリ１１１は、例えば、同じビルディングブロック１０１内のＣＰＵ１１２のみが使用できるローカル領域と、他のビルディングブロック１０１からも使用できる共有領域の２つの領域を含む。
【００１２】
図２は、共有メモリシステム１００の動作例を示す図である。例えば、或るＣＰＵ１１２が、同じビルディングブロック１０１内のメモリ１１１の共有領域にアクセスした場合に、アクセスした共有領域の実体データが別のビルディングブロック１０１内のメモリ１１１の共有領域にあったとする（図２の（１））。この場合、ＣＰＵ１１２は、共有領域の実体データを有する別のビルディングブロック１０１にリクエストを送信し、その応答としてデータを取得する（図２の（２））。なお、メモリ１１１へのアクセスはキャッシュコヒーレントを保ちながら処理されてよい。
【００１３】
リクエストの送信は、ＣＰＵ１１２内部のパイプラインによって順序の制御が行われる。また、送信したリクエストに対する応答が返ってこない場合に、応答を待ち続けることを避けるためにリクエストには待ち時間が設定されている。そして、例えば、リクエストに対する応答が待ち時間を経過しても返ってこない場合、リクエストはタイムアウトする。ここで、リクエストのタイムアウトは回復不能なエラーではなく回復可能なエラーとして扱えるように設定することができる。即ち、例えば、或るビルディングブロック１０１のＣＰＵ１１２が別のビルディングブロック１０１へと発行したリクエストがタイムアウトになっても、リクエストのタイムアウトによりビルディングブロック１０１がダウンしないように設定することができる。しかし、この場合にも、リクエストに対する応答が、ＣＰＵ１１２内部の処理監視時間を超えて受信されない場合、ビルディングブロック１０１のリセットや、強制停止などが実行され、ビルディングブロック１０１はダウンしてしまう。なお、ＣＰＵ１１２内部の処理監視時間は、例えば、ウォッチドッグタイマであってよく、例えば、約１秒に設定されていてよい。この様に、他のビルディングブロック１０１に送信したリクエストのタイムアウトに起因して、正常に動作可能な状態であったとしてもビルディングブロック１０１がダウンしてしまうことがある。
【００１４】
図３は共有メモリシステム１００におけるリクエストのタイムアウトとノードのダウンとを例示する図である。例えば、ビルディングブロック＃０（ＢＢ＃０）のＣＰＵ１１２が、同じビルディングブロック内のメモリ１１１の共有領域にアクセスし、アクセスした共有領域の実体データが別のビルディングブロック＃１（ＢＢ＃１）のメモリ１１１の共有領域にあったとする。この場合、ビルディングブロック＃０のＣＰＵ１１２は、共有領域の実体データを有する別のビルディングブロック＃１にリクエストを送信し、その応答でデータを取得する。ここで、リクエストの送信先であるビルディングブロック＃１が故障していたとする。この場合、ビルディングブロック＃０のＣＰＵ１１２は、故障しているビルディングブロック＃１へとリクエストを送信するが（図３の３０１）、故障しているビルディングブロック＃１からはリクエストに対する応答が返ってこない（図３の３０２）。また、応答を待つ間にも、別途、故障しているビルディングブロック＃１へのリクエストが発生することもあり（図３の３０３）、この場合、応答を待つリクエストが積みあがっていくことになる（図３の３０４）。
【００１５】
そして、故障しているビルディングブロック＃１へと送信したリクエストがタイムアウトした場合に、更に、ＣＰＵ内部の処理監視時間もタイムアウトしてしまい、正常に動作可能な状態にあったとしてもビルディングブロック＃０がダウンしてしまうことがある。或いは、この様なリクエストのタイムアウトが複数回に発生し、応答を待つリクエストが積みあがっていくと、ＣＰＵ１１２内部の資源を使い切るなどしてしまい、正常なノードがスローダウンし、異常ノードとなってしまうこともある。例えば、ＣＰＵ１１２が同時に実行可能な命令の個数には限りがあり、タイムアウトなどにより処理が解放されないと、その資源を使い切ってしまうことがある。この様に、或るノードが他のノードにリクエストを送信した場合に、何らかの異常に起因して応答を受信できない場合、リクエストを送信したノードが正常なノードであっても、ダウンしたり、異常なノードになってしまったりすることがある。そのため、例えば、共有メモリシステムにおいて、或るノードが、他のノードの故障に起因してダウンしてしまうことを抑止することができる技術が望まれる。
【００１６】
また、例えば、ビルディングブロック１０１のＣＰＵ１１２が送信したリクエストに対する応答が返ってこない原因には、図４に示す様に、ビルディングブロック１０１の故障の他にも、ビルディングブロック同士をつなぐ経路の故障もあり得る。しかしながら、リクエストのタイムアウトからは、故障個所が、例えば、リクエストの送信先のビルディングブロックにあるのか、又は経路にあるのかは特定することが困難である。そして、例えば、リクエストのタイムアウトが発生した場合に、リクエストの送信先のノードが故障していると見做し、リクエストのタイムアウトが発生した送信先のノードに対するリクエストの発行を抑止する制御を行ったとする。この場合、例えば、同じ経路を通るリクエストの送信先のノードのすべてを故障ノードと判定してしまい、実際には故障した経路を縮退することで通信を継続可能であったとしても、送信先のノードとの通信を抑止してしまうことになる。そのため、例えば、リクエストのタイムアウトが発生した場合に、リクエストの送信先のノードが故障しているのか、又は経路が故障しているのかを速やかに切り分けることのできる技術が望まれる。以下、図５から図１１を参照して、第１の実施形態を説明する。
【００１７】
＜第１の実施形態＞
図５は、第１の実施形態に係る情報処理システム５００を例示するブロック図である。図５において、情報処理システム５００は、複数のビルディングブロック（ＢＢ）５０１、及びクロスバスイッチ（ＧＸＢ）５０２を含む。ビルディングブロック５０１は、メモリ５１１、ＣＰＵ（演算処理装置）５１２、及びクロスバチップ（ＬＸＢ）５１３を含む。なお、ビルディングブロック５０１は、メモリ５１１と、ＣＰＵ５１２とを複数含んでいてもよく、又は、メモリ５１１と、ＣＰＵ５１２とを一つ含んでいてもよい。ビルディングブロック５０１は、例えば情報処理システム５００においてノードとして動作してよい。また、情報処理システム５００は、例えば、ディレクトリ方式を採用する共有メモリシステムであり、ディレクトリ方式を用いて、各ノードのＣＰＵ５１２がキャッシュしたデータのコヒーレンシを保持してよい。
【００１８】
ＣＰＵ５１２は、コア５１５、ホームエージェント（ＨＡ）回路５２０、及び外部インタフェース５３０を含む。コア５１５は、例えば、ＣＰＵ５１２のプロセッサコアである。ホームエージェント回路５２０は、例えば、パイプ（ＰＩＰＥ）５２２、ムーブインバッファ（ＭＩＢ）などを含むリクエスト発行回路５２３、タイマ（ＴＩＭ）５２４、設定回路５２５を含む。
【００１９】
パイプ５２２は、例えば、ノードマップと故障ノードリスト（ＦＮＬ）５５０とを保持する記憶回路を含み、他のノードへのアクセスの可否を制御する。故障ノードリスト５５０には、例えば、情報処理システム５００に含まれるノード（例えばビルディングブロック５０１）が故障している場合に、故障していることを示す故障情報が設定されている。故障情報は、例えば、ノードが故障していることを示すフラグの値であってよい。以下では、或るノードが故障している場合には、故障ノードリスト５５０においてそのノードに対応する故障ノードフラグが論理“１”に設定され、また、或るノードが正常に動作している場合には、故障ノードフラグが論理“０”に設定される場合を例示する。リクエスト発行回路５２３は、例えば、ＣＰＵ５１２がリクエストを制御するためのバッファ及びレジスタを備え、リクエストを発行する。タイマ５２４は、リクエスト発行回路５２３がリクエストを発行してから応答を受け取るまでの時間を監視するタイマである。設定回路５２５は、故障ノードリスト５５０の故障ノードフラグを設定する。
【００２０】
外部インタフェース（ＩＦ）５３０は、他のＣＰＵ５１２と通信するためのインタフェースである。外部インタフェース５３０は、例えば、ルータ（ＲＴ）回路５３１を含む。ルータ回路５３１は、例えば、リクエストをクロスバチップ５１３へと出力したり、通信経路の縮退を実行したりする。なお、ルータ回路５３１は、後述するルータ共通回路９０２と、経路毎に備えられているルータポート固有回路９０３とを含む。
【００２１】
図６は、図５のＣＰＵ５１２内部のホームエージェント回路５２０によるリクエストの発行と抑止とを例示する図である。ホームエージェント回路５２０は、例えば、パイプ５２２、リクエスト発行回路５２３、タイマ５２４、設定回路５２５、発行抑止回路５２６、割込通知回路５２７を含む。パイプ５２２は、例えば、ノードマップ６０１と故障ノードリスト５５０とを格納する記憶回路を含み、他のノードへのアクセスの可否を制御する。リクエスト発行回路５２３は、例えば、バッファ及びレジスタを含む。図６では、ムーブインバッファ（ＭＩＢ）、リプレイス（ＲＰＢ）バッファ、メッセージ送受信（ＭＳＧＱ）・クレンズ制御（ＣＬＰＴ）のバッファ、及びロックレジスタ（ＬＫＲ）などをリクエスト発行回路５２３が含む例が示されている。リクエストは、例えば、種類に応じて、これらのリクエスト発行回路５２３のいずれかへと振り分けられてよい。
【００２２】
そして、第１の実施形態においては、コア５１５から入力されたリクエストの発行と抑止は、故障ノードリスト５５０を用いて以下のように制御されてよい。例えば、ビルディングブロック＃ａのＣＰＵ＃１が、他のビルディングブロック５０１＃ｂのＣＰＵ５１２＃２のメモリ５１１の共有領域にアクセスするとする。この場合、コア５１５は、リクエストを発行抑止回路５２６に出力するとともに、リクエストの送信先のビルディングブロック５０１＃ｂのＣＰＵ５１２＃２を示すアドレス情報をパイプ５２２に入力する。パイプ５２２は、例えば、情報処理システム５００内で動作しているノードと、ＣＰＵ５１２とを示すノードマップを記憶している。そして、パイプ５２２は、アドレス情報が入力されると、ノードマップを参照し、アクセス先のビルディングブロック５０１＃ｂのＣＰＵ５１２＃２が情報処理システム内に含まれているか否かをチェックする。また、パイプ５２２は、故障ノードリスト５５０を参照し、アクセス先のノードに対応する故障ノードフラグが論理“１”に設定されているか否かをチェックする。そして、例えば、アクセス先のビルディングブロック５０１＃ｂのＣＰＵ５１２＃２が、ノードマップに含まれており、且つ、アクセス先のノードに対する故障ノードフラグが論理“０”であるとする。この場合、パイプ５２２は、リクエストの出力を抑止させる抑止信号を発行抑止回路５２６に出力しない。この場合、コア５１５から出力されたリクエストは発行抑止回路５２６で抑止されず、リクエスト発行回路５２３でリクエストが発行される。一方、アクセス先のビルディングブロック５０１＃ｂのＣＰＵ５１２＃２がノードマップに含まれていない、又は、アクセス先のノードに対する故障ノードフラグが論理“１”である場合、パイプ５２２は抑止信号を出力する。そのため、コア５１５から出力されたリクエストは、例えば、発行抑止回路５２６で抑止され、リクエスト発行回路５２３はリクエストを発行しない。従って、故障ノードリスト５５０において論理“１”を設定することで、リクエスト発行回路５２３からのリクエストの発行を抑止することができる。なお、発行抑止回路５２６は、例えば、論理回路：ＡＮＤで実現することができる。
【００２３】
また、リクエスト発行回路５２３は、リクエストが入力されると、アクセス先のＣＰＵ５１２のメモリ５１１の共有領域にアクセスするリクエストを発行し、タイマ５２４を起動する。ここで、リクエスト発行回路５２３がリクエストを発行した後に、そのリクエストに対する応答がなく、タイマ５２４がタイムアウトしたとする。この場合に、割込通知回路５２７は、タイムアウトしたリクエストについて、ＣＰＵ内部の処理監視時間による監視をリセット（例えば、解放）するために、コア５１５に割り込み通知を出力する。割込通知回路５２７は、例えば、割り込み通知として、送信先のノードから正常に応答を受信できたことを示す通知を疑似的に生成し、コア５１５に出力してよい。それにより、ＣＰＵ内部の処理監視時間を計時するタイマがリセットされるため、リクエストのタイムアウトによりＣＰＵ内部の処理監視時間もタイムアウトしてしまい、リクエストを送信したビルディングブロック５０１がダウンしてしまうことを回避できる。また、設定回路５２５は、リクエストがタイムアウトした場合に、故障ノードリスト５５０においてリクエストの送信先のノードに対応する故障ノードフラグを論理“１”に設定する。上述のように、故障ノードフラグが論理“１”に設定されたノードに対する新規のリクエストは発行抑止回路５２６により抑止される。そのため、故障ノードフラグが論理“１”に設定された以降は、その故障ノードに対してのリクエストのリクエスト発行回路５２３による発行は抑止される。例えば、上述のように、リクエストに対する応答のないノードに対して複数回にわたってリクエストを発行してしまった場合、応答を待つリクエストが積みあがっていく。この場合、例えば、ＣＰＵ１１２内部の資源を使い切るなどしてしまい、正常なノードがスローダウンし、異常ノードとなってしまうことがある。しかしながら、第１の実施形態によれば、故障ノードリスト５５０により故障ノードに対するリクエストの発行が抑止できる。そのため、ＣＰＵ１１２内部の資源を使い切るなどしてしまい、正常なノードがスローダウンし、異常ノードとなってしまうことを抑止できる。なお、例えば、故障ノードの情報処理システム５００からの切り離しなどの処理が完了し、正常なノードへのアクセスが可能になった場合には、故障ノードフラグを論理“１”から論理“０”に設定し、アクセスを再開できるようにしてよい。また、第１の実施形態によれば、リクエストのタイムアウトが発生した場合、割込通知回路５２７は、割り込み通知をコア５１５に出力し、それにより、ＣＰＵ内部の処理監視時間を計時するタイマがリセットされる。そのため、リクエストのタイムアウトによりＣＰＵ内部の処理監視時間もタイムアウトしてしまい、リクエストを送信したビルディングブロック５０１がダウンしてしまうことを抑止できる。
【００２４】
図７は、情報処理システム５００におけるリクエストの発行の抑止動作を例示する図である。例えば、ビルディングブロック＃０のＣＰＵ５１２が、同じビルディングブロック＃０内のメモリ５１１の共有領域にアクセスした場合に、アクセスした共有領域の実体データが別のビルディングブロック＃１のメモリ５１１の共有領域にあったとする。この場合、ビルディングブロック＃０のＣＰＵ５１２は、共有領域の実体データを有する別のビルディングブロック＃１にリクエストを送信し、その応答でデータを取得する。ここで、リクエストの送信先であるビルディングブロック＃１が故障していたとする。この場合、ビルディングブロック＃０のＣＰＵ５１２は、故障しているビルディングブロック＃１へとリクエストを送信することになる（図７の７０１）。しかしながら、故障しているビルディングブロック＃１からはリクエストに対する応答が返ってこず、リクエストのタイムアウトが発生する（図７の７０２）。この場合に、ビルディングブロック＃０のＣＰＵ５１２は、リクエストの送信先であるビルディングブロック＃１に対応する故障ノードフラグを故障ノードリスト５５０において論理“１”に設定する。それによって、ビルディングブロック＃１に対する以降の新規のリクエストの発行が抑止される（図７の７０３）。そのため、応答を待つリクエストが積みあがっていくことを抑制でき、例えば、ＣＰＵ１１２内部の資源が使い切られて正常なノードがスローダウンし、それによって異常ノードとなってしまうことが抑止できる。また、タイムアウトしたリクエストについては、割込通知回路５２７が、割り込み通知をコア５１５に通知することで、ＣＰＵ５１２内部の処理監視時間を計時するタイマをリセットする。そのため、リクエストのタイムアウトによりＣＰＵ内部の処理監視時間もタイムアウトしてしまい、それによってリクエストを送信したビルディングブロック５０１がダウンしてしまうことを抑止できる。
【００２５】
なお、上記においては、ビルディングブロック＃０のＣＰＵ５１２が、ビルディングブロック＃１へのリクエストの発行を故障ノードリスト５５０に基づいて抑止する場合を例示している。しかしながら、実施形態はこれに限定されるものではない。例えば、或るビルディングブロック５０１のＣＰＵ５１２が、他のビルディングブロック５０１からのリクエストを受信し、リクエストに対する応答を返信する際にも故障ノードリスト５５０を用いた制御が実行されてよい。また、或るビルディングブロック５０１のＣＰＵ５１２が、他のビルディングブロック５０１からのリクエストを受信した際に、そのリクエストの対象となるデータが、更に別のビルディングブロック５０１に持ち出されていることがある。この様な場合には、リクエストを受信したビルディングブロック５０１のＣＰＵ５１２は、リクエストの対象となるデータの持ち出し先のビルディングブロック５０１へとリクエスト（キャッシュ要求）を発行する。なお、以下の説明では、この様に、データの持ち出し先のビルディングブロック５０１へと更にリクエストを発行する場合、そのリクエストをオーダーと呼ぶことがある。そして、オーダーの送受信の際にも故障ノードリスト５５０による制御が実行されてよい。
【００２６】
図８は、故障ノードリスト５５０によるリクエスト及びオーダーの発行と、発行抑止とについて例示する図である。図８は、ロード命令の実行時に故障ノードリスト５５０を参照する場合を例示する。図８には、ＢＢ＃ａ−ＣＰＵ＃１、ＢＢ＃ｂ−ＣＰＵ＃２、ＢＢ＃ｃ−ＣＰＵ＃３の異なる３つのノードに含まれるＣＰＵが示されている。そして、例えば、ＢＢ＃ａ−ＣＰＵ＃１がＢＢ＃ｂ−ＣＰＵ＃２に対してリクエストを送信する場合、ＢＢ＃ａ−ＣＰＵ＃１は、リクエストの送信先のＢＢ＃ｂ−ＣＰＵ＃２に対応する故障ノードフラグが論理“１”に設定されていないことをチェックする。一方、ＢＢ＃ｂ−ＣＰＵ＃２が、ＢＢ＃ａ−ＣＰＵ＃１から受信したリクエストに対する応答を返信する場合、ＢＢ＃ｂ−ＣＰＵ＃２は、ＢＢ＃ａ−ＣＰＵ＃１に対応する故障ノードフラグが論理“１”に設定されていないことをチェックする。また、受信したリクエストで要求されるデータが他のＢＢ＃ｃ−ＣＰＵ＃ｃに持ち出されていることがある。この場合、ＢＢ＃ｂ−ＣＰＵ＃２は、データの持ち出し先のＢＢ＃ｃ−ＣＰＵ＃３に対応する故障ノードフラグが論理“１”に設定されていないことをチェックする。そして、ＢＢ＃ｃ−ＣＰＵ＃３に対応する故障ノードフラグが論理“１”に設定されていなければＢＢ＃ｃ−ＣＰＵ＃３にオーダー（キャッシュ要求）を送信する。また、ＢＢ＃ｃ−ＣＰＵ＃３がＢＢ＃ｂ−ＣＰＵ＃２から受信したオーダーに対する応答を返信する際、ＢＢ＃ｃ−ＣＰＵ＃３は、故障ノードリスト５５０を参照し、ＢＢ＃ｂ−ＣＰＵ＃２に対応する故障ノードフラグが論理“１”でないことをチェックする。従って、図８の例では、ＢＢ＃ａ−ＣＰＵ＃１がリクエストを発行し、データを受信するまでに故障ノードリスト５５０を用いた確認が４回実行されている。例えば、この様に、リクエストやオーダーの送信及び受信の際に、故障ノードリスト５５０を用いたリクエストの発行抑止の制御を複数回実行することで、故障ノードに対する無駄なリクエストや応答の送信を更に低減することができる。
【００２７】
また、上述のように、例えば、リクエストのタイムアウトが発生した場合に、その原因が経路の故障に起因する場合がある。この場合、例えば、故障した経路を縮退することで通信を継続可能であることがある。そのため、ＣＰＵ５１２は、ルータ回路５３１において経路の故障が検出されている場合には、故障ノードリスト５５０の設定を抑止し、例えば、リクエストのタイムアウトが発生したとしても、故障ノードリスト５５０の設定を行わないように制御してよい。この場合、ＣＰＵ５１２は、例えば、故障した経路を縮退した後、アクセスを再開する。経路故障の場合の経路の縮退制御と、故障ノードリスト５５０の設定抑止とは例えば以下のように実行されてよい。
【００２８】
図９は、ＣＰＵ５１２間を繋ぐ経路（ウェイ）の構成を例示する図である。図９には、ＣＰＵ５１２と、クロスバチップ５１３と、クロスバスイッチ５０２とが示されている。ＣＰＵ５１２は、ホームエージェント回路５２０と、ルータ共通回路９０２、ルータポート固有回路９０３とを含む。ホームエージェント回路５２０は、コア５１５及びメモリ５１１へのアクセスを行う。ルータ共通回路９０２と、ルータポート固有回路９０３とはＣＰＵ５１２を経路に繋ぐ。なお、ルータポート固有回路９０３は、経路毎に個別に備えられている。また、ルータ共通回路９０２と、ルータポート固有回路９０３とは、上述のルータ回路５３１に含まれる。経路は、クロスバチップ５１３と、クロスバスイッチ５０２とで形成されている。図９では、経路は、経路＃０と経路＃１との２つの経路の冗長構成となっており、例えば一方の経路が故障した場合には故障した経路を縮退することで、もう一方の経路を用いて通信を継続することが可能である。
【００２９】
図１０は、ホームエージェント回路５２０と、ルータ共通回路９０２、ルータポート固有回路９０３とを更に詳細に例示する図である。図１０を参照して、故障ノードフラグの設定と、経路故障の場合の経路の縮退とについて以下に説明する。
【００３０】
図１０において、ホームエージェント回路５２０は、例えば、パイプ５２２、リクエスト発行回路５２３、タイマ５２４、設定回路５２５、割込通知回路５２７、縮退タイミング制御回路１００１、パケット発行抑止制御回路１００２を含む。リクエスト発行回路５２３は、例えば、バッファ及びレジスタを含む。図１０では、ムーブインバッファ（ＭＩＢ）、リプレイス（ＲＰＢ）バッファ、メッセージ送受信（ＭＳＧＱ）・クレンズ制御（ＣＬＰＴ）のバッファ、及びロックレジスタ（ＬＫＲ）などをリクエスト発行回路５２３が含む例が示されている。また、縮退タイミング制御回路１００１は、ドレインタイマ１００３及びバリッド（ＶＬＤ）回路１００４を含む。
【００３１】
ルータ共通回路９０２は、例えば、縮退制御回路１０１１、及び振分制御部１０１３を含む。縮退制御回路１０１１は、経路毎に、縮退仮保持(Pending Latch)部１０１５と、縮退保持(Delete Latch)部１０１６とを含む。縮退制御回路１０１１は、ルータポート固有回路９０３から経路の異常を通知する経路別異常検出通知を受けると、その通知された経路に対する異常検出の情報を一時的に縮退仮保持部１０１５に記録する。また、縮退制御回路１０１１は、経路別異常検出通知を受けると、経路で異常が発生したことを通知する異常検出通知をホームエージェント回路５２０の縮退タイミング制御回路１００１に出力する。そして、縮退制御回路１０１１は、縮退タイミング制御回路１００１から異常検出通知に対する応答である縮退実行応答を受信すると、縮退仮保持部１０１５に一時的に記録された経路の異常を解除し、縮退保持部１０１６に記憶する。縮退保持部１０１６は、縮退された経路の情報を記憶する。また、縮退制御回路１０１１は、縮退実行応答を受信すると、後述する振分制御部１０１３の振分回路１０１９に縮退を指示する。
【００３２】
振分制御部１０１３は、例えば、マルチプレクサ１０１７、バッファ１０１８、振分回路１０１９、タイマ１０２０、クレジット回路１０２１を含み、リクエストをどの経路へと流すかを制御する。マルチプレクサ１０１７は、パケット発行抑止制御回路１００２から入力されたリクエストを、バッファ１０１８に出力する。バッファ１０１８は、例えば、入力されたリクエストを一時的に蓄積し、振分回路１０１９へと出力する。振分回路１０１９は、例えば、リクエストを経路へと振り分ける。クレジット回路１０２１は、例えば、クロスバスイッチ５０２との間でのクレジットのやり取りを管理する回路である。タイマ１０２０は、例えば、クロスバスイッチ５０２に貸し出したクレジットが返ってきたか否かを監視するためのタイマである。
【００３３】
また、ＣＰＵ５１２は、経路毎に、ルータポート固有回路９０３を備える。図１０では経路＃０系と、経路＃１系の２つのルータポート固有回路９０３が含まれている。ルータポート固有回路９０３は、例えば、経路故障検出回路（ＷＦ）１０３１、ポートエラー（ＰＥ）検出回路１０３２、異常通知回路１０３３、バッファ１０３４、ポート１０３５、破棄回路１０３６を含む。ポート１０３５は、例えば、送信ポート１０３７、受信ポート１０３８、及びモジュール回路１０３９を含む。受信ポート１０３８は、例えば、データを受信するポートであり、送信ポート１０３７は、データを送信するポートである。モジュール回路１０３９は、データリンク層のデータを処理するモジュールである。ルータポート固有回路９０３が備えるその他の回路の動作については、後述する。
【００３４】
以下、図１３を参照して、まず経路に異常が発生していない場合のリクエストの発行とリクエストの発行抑止について説明する。なお、後述するように、経路故障が発生している場合、縮退タイミング制御回路１００１は、リクエスト発行回路５２３にＦＮＬ設定抑止信号を出力し、また、パケット発行抑止制御回路１００２に所定の期間にわたってパケット発行抑止信号を出力する。一方、経路故障が発生していない場合、縮退タイミング制御回路１００１は、ＦＮＬ設定抑止信号及びパケット発行抑止信号を出力しない。この場合に、パイプ５２２は、コア５１５からリクエストが入力されると、図６を参照して述べた様に、故障ノードリスト５５０を参照し、リクエストの送信先のノードが故障しているノードであるか否かを判定する。例えば、リクエストの送信先のノードに対する故障ノードフラグが論理“１”に設定されている場合、送信先のノードが故障ノードであると考えられるため、パイプ５２２はリクエストを抑止する。一方、故障ノードフラグが論理“０”に設定されており、送信先のノードが故障ノードでない場合、パイプ５２２はリクエストをリクエスト発行回路５２３に入力する。リクエスト発行回路５２３は、例えば、入力されたリクエストをバッファに一時的に蓄積し、その後、リクエストをパケット発行抑止制御回路１００２に出力することで送信先ノードに対してリクエストを発行し、タイマ５２４を起動する。
【００３５】
パケット発行抑止制御回路１００２は、例えば、縮退タイミング制御回路１００１からパケット発行抑止信号が入力されていない場合、入力されたリクエストを、振分制御部１０１３のマルチプレクサ１０１７へと出力する。マルチプレクサ１０１７は、例えば、複数のリクエスト発行回路５２３から入力されたリクエストをバッファ１０１８に出力する。バッファ１０１８は、入力されたリクエストを一時的に蓄積し、振分回路１０１９へと出力する。振分回路１０１９は、例えば、リクエストを各経路のルータポート固有回路９０３のバッファ１０３４へと振り分ける。ルータポート固有回路９０３のバッファ１０３４は、入力されたリクエストを一時的に蓄積し、ポート１０３５を介してリクエストをＣＰＵ５１２の外部へと出力する。
【００３６】
ここで、例えば、リクエスト発行回路５２３がリクエストを発行し、そのリクエストが送信先のノードに向けて送信された後、リクエストに対応する応答がなく、タイマ５２４がタイムアウトしたとする。この場合、設定回路５２５は、パイプ５２２が備える故障ノードリスト５５０において、リクエストの送信先のノードと対応する故障ノードフラグを論理“１”に設定する。これにより、以降のそのノードに対するリクエストの発行を抑止することができる。また、タイムアウトしたリクエストについては、割込通知回路５２７が、割り込み通知をコア５１５に通知する。それにより、コア５１５が保持するＣＰＵ５１２内部の処理監視時間を計時するタイマをリセットするため、ＣＰＵ内部の処理監視時間のタイムアウトによるビルディングブロック５０１のダウンを回避することができる。
【００３７】
続いて、経路の異常が検出された場合の経路の縮退処理について説明する。なお、経路の異常は、例えば、クロスバスイッチ５０２の故障や、ポート１０３５の故障を含んでよい。
【００３８】
例えば、経路が故障した場合、ルータポート固有回路９０３のポート１０３５は、クロスバスイッチ５０２から経路の故障を通知するフェイタルパケットを受信する。ポート１０３５で受信されたフェイタルパケットは、モジュール回路１０３９で処理される。経路故障検出回路１０３１は、ポート１０３５でフェイタルパケットが受信されたことを検出し、異常通知回路１０３３に経路の異常を通知する。また、ポートエラー検出回路１０３２は、接続しているポートの異常を検出し、異常通知回路１０３３にポートの異常を通知する。ポートエラー検出回路１０３２は、例えば、ポート１０３５のリンクダウン（ＬＤＷ）、又はＦＯＳ（Fatal Ordered Set）を検出することで、ポートの異常を検出してよい。なお、リンクダウン及びＦＯＳは、例えば、クロスバスイッチ５０２からのポートの異常を示す通知であってよい。また、ポートエラー検出回路１０３２は、ポートの異常を検出すると、破棄回路１０３６に破棄信号を出力する。破棄回路１０３６は、破棄信号が入力されると、バッファ１０３４が一杯にならないようにリクエストを破棄する。異常通知回路１０３３は、経路故障検出回路１０３１又はポートエラー検出回路１０３２のいずれかから異常が通知されると、ルータ共通回路９０２の縮退制御回路１０１１に経路の異常を示す経路別異常検出通知を通知する。なお、異常通知回路１０３３は、例えば、論理回路：ＯＲで実現することができる。なお、ルータポート固有回路９０３は、例えば、経路毎に備えられており、経路別異常検出通知は経路毎の経路の異常を通知する情報である。
【００３９】
ルータ共通回路９０２の縮退制御回路１０１１は、経路毎に、縮退仮保持部１０１５と、縮退保持部１０１６とを含む。そして、縮退制御回路１０１１は、経路毎に備えられたルータポート固有回路９０３のいずれかの異常通知回路１０３３から経路別異常検出通知を受けると、その経路に対応する縮退仮保持部１０１５を論理“１”に設定する。例えば、ルータポート固有回路９０３＃０系から経路別異常検出通知を受けた場合、縮退制御回路１０１１は、経路＃０系に対応する縮退仮保持部１０１５を論理“１”に設定する。また、縮退制御回路１０１１は、経路別異常検出通知を受けた場合、異常検出通知をホームエージェント回路５２０の縮退タイミング制御回路１００１へと出力する。
【００４０】
ホームエージェント回路５２０の縮退タイミング制御回路１００１は、縮退制御回路１０１１から異常検出通知が入力されると、例えば、ドレインタイマ１００３（例えば、ドレインタイマ＃１及び＃２）を起動する。既にタイマを起動中の場合は、後続の異常検出通知は無視する。また、縮退タイミング制御回路１００１は、異常検出通知が入力されると、設定回路５２５が故障ノードリスト５５０の故障ノードフラグを論理“１”へと設定することを抑止するためのＦＮＬ設定抑止信号をリクエスト発行回路５２３に出力する。リクエスト発行回路５２３は、ＦＮＬ設定抑止信号が入力されると、ＦＮＬ設定抑止信号が入力された時点においてリクエスト発行回路５２３内のバッファに蓄積されているリクエストに対して、設定抑止情報を設定する。設定抑止情報は、例えば、設定回路５２５によるＦＮＬの更新を抑止するために用いられるＦＮＬ更新抑止フラグであってよく、例えば、リクエスト発行回路５２３が備える記憶回路に記憶されていてよい。例えば、設定回路５２５は、ＦＮＬ更新抑止フラグがセットされている場合、そのリクエストの送信先のノードに対する故障ノードフラグの設定を抑止する。従って、リクエストがタイムアウトしたとしても、その原因が経路の異常に起因する場合には、故障ノードフラグの設定は実行されない。
【００４１】
また、縮退タイミング制御回路１００１は、異常検出通知が入力されると、ドレインタイマ＃１のカウントを開始し、パケット発行抑止制御回路１００２にパケット発行抑止信号を出力する。そして、バリッド回路１００４は、ドレインタイマ＃１が所定の期間のカウントを完了するのを監視する。そして、バリッド回路１００４がカウントの完了を検出すると、縮退タイミング制御回路１００１は、パケット発行抑止信号の出力を停止する。パケット発行抑止制御回路１００２は、パケット発行抑止信号が入力されると、リクエスト発行回路５２３からのリクエストの発行を抑止する。なお、パケット発行抑止制御回路１００２は、例えば、論理回路：ＡＮＤで実現することができる。また、縮退タイミング制御回路１００１は、異常検出通知が入力されると、ドレインタイマ＃２のカウントを開始する。そして、バリッド回路１００４は、ドレインタイマ＃２が所定の期間のカウントを完了するのを監視する。そして、バリッド回路１００４がカウントの完了を検出すると、縮退タイミング制御回路１００１は、ルータ共通回路９０２の縮退制御回路１０１１に、異常が検出された経路の縮退実行を要求する縮退実行応答を出力する。なお、ここで、ドレインタイマ＃２によりカウントされる所定の期間は、例えば、ルータポート固有回路９０３から異常検出通知が通知された後、ルータ共通回路９０２において経路を縮退できるようになるまでの待ち時間である。
【００４２】
縮退制御回路１０１１は、縮退実行応答が入力されると、例えば、縮退対象の経路に設定されている縮退仮保持部１０１５の設定を解除する。また、縮退制御回路１０１１は、縮退実行応答が入力されると、例えば、経路毎の縮退保持部１０１６のいずれにも縮退を示す情報がセットされていない場合に限り、縮退対象の経路に対応する縮退保持部１０１６に、経路の縮退を示す情報を設定する。また、この場合、縮退制御回路１０１１は、振分制御部１０１３の振分回路１０１９に縮退対象の経路の縮退を指示する縮退指示信号を出力する。
【００４３】
振分制御部１０１３の振分回路１０１９は、バッファ１０１８に入力されたリクエストを各経路のルータポート固有回路９０３のバッファ１０３４へと振り分ける。例えば、振分回路１０１９は、リクエストを経路＃０又は経路＃１へと振り分けてよい。また、振分回路１０１９は、例えば、縮退制御回路１０１１から縮退を指示する縮退指示信号が入力された場合、縮退が指示されていない経路へとリクエストを振り分ける。
【００４４】
以上で述べた様に、経路における異常が検出された場合には、縮退タイミング制御回路１００１がＦＮＬ設定抑止信号をリクエスト発行回路５２３に出力し、それによって、設定回路５２５による故障ノードリスト５５０の設定が抑止される。そのため、例えば、リクエストのタイムアウトが、経路異常に起因している場合にリクエストの送信先のノードを故障ノードとして故障ノードリスト５５０に設定してしまうことを防止できる。
【００４５】
図１１は、経路の異常が検出された場合に故障ノードフラグの設定を抑止する動作の流れを例示している。例えば、クロスバスイッチ５０２において経路＃０の異常が検出された場合、クロスバスイッチ５０２はフェイタルパケット（図１１のＦＡＴＡＬ−ＸＸＸ＃０）を経路＃０に対応するルータポート固有回路９０３に送信する（図１１の（１））。ルータポート固有回路９０３は、フェイタルパケットを受信すると、経路別異常検出通知をルータ共通回路９０２の縮退制御回路１０１１に通知する（図１１の（２））。縮退制御回路１０１１は、経路別異常検出通知を受けると、対応する経路＃０の縮退仮保持部１０１５を論理“１”に設定する（図１１の（３））。また、縮退制御回路１０１１は、経路別異常検出通知を受けると、異常検出通知をホームエージェント回路５２０の縮退タイミング制御回路１００１に出力する（図１１の（４））。縮退タイミング制御回路１００１は、異常検出通知が入力されると、ドレインタイマ１００３（例えば、ドレインタイマ＃１及び＃２）を起動する（図１１の（５））。また、縮退タイミング制御回路１００１は、異常検出通知が入力されると、リクエスト発行回路５２３にＦＮＬ設定抑止信号を通知する（図１１の（６））。更に、縮退タイミング制御回路１００１は、異常検出通知が入力されると、パケット発行抑止制御回路１００２にドレインタイマ＃１が所定の期間のカウントを完了するまでパケット発行抑止信号を出力する。また、縮退タイミング制御回路１００１は、ドレインタイマ＃２が所定の期間のカウントを完了すると、縮退制御回路１０１１に、異常が検出された経路の縮退実行を要求する縮退実行応答を出力する（図１１の（７））。縮退制御回路１０１１は、縮退実行応答が入力されると、縮退仮保持部１０１５＃０を論理“０”に設定する。また、縮退制御回路１０１１は、縮退実行応答が入力されると、縮退保持部＃０，＃１のどちらもが論理“１”でない場合に限り、経路異常の検出された経路＃０の縮退保持部＃０を論理“１”に設定し（図１１の（８））、振分制御部１０１３に縮退を指示する。また、リクエスト発行回路５２３は、ＦＮＬ設定抑止信号を受信すると、ＦＮＬ設定抑止信号が入力された時点においてリクエスト発行回路５２３内のバッファに蓄積されているリクエストに対して、設定抑止情報を設定する（図１１の（９））。
【００４６】
ここで、例えば、コア５１５がリクエストをリクエスト発行回路５２３に入力した場合、リクエスト発行回路５２３はリクエストを発行し、タイマ５２４を起動する（図１１の（１０））。そして、発行されたリクエストは送信先のノード宛てで出力される（１１）。この場合に、例えば、リクエストの送信先のノードが故障しており、パケットがロストしてしまい（図１１の（１２））、結果として、リクエスト発行回路５２３が発行したリクエストがタイムアウトしてしまったとする（図１１の（１３））。この場合にも、リクエストには設定抑止情報が設定されているため、設定回路５２５は故障ノードリスト５５０の設定を抑止する（図１１の（１４））。
【００４７】
従って、リクエストがタイムアウトした場合にも、経路故障が検出されていれば、設定回路５２５による故障ノードリスト５５０の設定が抑止される。上述のように、例えば、リクエストのタイムアウトが発生した場合に、リクエストの送信先のノードが故障していると見做し、リクエストのタイムアウトが発生した送信先のノードに対するリクエストの発行を抑止する制御を行ったとする。この場合、例えば、同じ経路を通るリクエストの送信先のノードのすべてを故障ノードと判定してしまい、実際には故障した経路を縮退することで通信を継続可能であったとしても、送信先のノードとの通信を抑止してしまうことになる。しかしながら、本実施形態によれば、経路故障が検出されていれば、故障ノードリスト５５０の設定を抑止する。そのため、例えば、故障した経路を通る別のリクエストの送信先のノードを誤って故障ノードと判定してしまい、リクエストを抑止してしまうことが防止できる。そして、例えば故障した経路を縮退することで、もう一方の経路を用いて通信を継続することができる。
【００４８】
以上で述べた様に、第１の実施形態では、送信先のノードに発行したリクエストがタイムアウトした場合に、設定回路５２５は、その送信先のノードに対応する故障ノードフラグを故障ノードリスト５５０において論理“１”に設定する。そして、故障ノードフラグが論理“１”に設定されている場合、発行抑止回路５２６はそのノードに対するその後のリクエストの発行を抑止する。そのため、故障しているノードに複数回にわたりリクエストを発行してしまい、応答を待つリクエストが積みあがってしまうことを抑止できる。それによって、ＣＰＵ１１２内部の資源を使い切るなどしてしまい、正常なノードがスローダウンし、異常ノードとなってしまうことを回避できる。また、例えば、リクエストがタイムアウトした場合に、経路の異常が通知されていれば、故障ノードリスト５５０への設定が抑止される。そのため、経路の異常である場合に、送信先のノードを故障ノードと誤判断してしまい、そのノードに対するリクエストの発行を故障ノードリスト５５０により抑止してしまうことが防止できる。更に、タイムアウトしたリクエストについては、割込通知回路５２７が、割り込み通知をコア５１５に通知する。それにより、コア５１５が保持するＣＰＵ５１２内部の処理監視時間を計時するタイマをリセットするため、ＣＰＵ内部の処理監視時間のタイムアウトによるビルディングブロック５０１のダウンを回避することができる。
【００４９】
＜第２の実施形態＞
第１の実施形態では、ＣＰＵ内部に備えられたパイプ５２２が故障ノードリスト５５０を記憶し、パイプ５２２が故障ノードリスト５５０によりリクエストの発行と抑止とを制御する例を述べた。しかしながら、実施形態はこれに限定されるものではない。第２の実施形態では、更に、ビルディングブロック５０１で動作するファームウェア又はソフトウェアが設定可能な第２の故障ノードリスト１２０２を用いる場合を例示する。
【００５０】
図１２は第２の実施形態に係るホームエージェント回路５２０とＳＣＦ１２００とによる故障ノードリストの同期を例示する図である。図１２に示されるように、ホームエージェント回路５２０は、例えば、パイプ５２２、リクエスト発行回路５２３、タイマ５２４、設定回路５２５、発行抑止回路５２６、割込通知回路５２７を含む。
【００５１】
また、ＣＰＵ５１２を備えるビルディングブロック５０１は、更に、ＳＣＦ（System Control Facility）１２００と呼ばれるファームウェア又はソフトウェアを実行する装置と、記憶装置１２１０とを備えている。例えば、ＳＣＦ１２００は、ビルディングブロック５０１が備えるＣＰＵ５１２、メモリ５１１の状態や、ビルディングブロック５０１内の温度など、ビルディングブロック５０１の状態を監視する監視装置であってよい。また、ＳＣＦ１２００は、例えば、ビルディングブロック５０１が備えるＦＰＧＡ（field-programmable gate array）で実装されてよく、別の実施形態では、ＳＣＦ１２００は、ＳＣＦ内のプロセッサが記憶装置１２１０内のプログラムを実行することでファームウェア又はソフトウェアを実行してよい。ＳＣＦ１２００は、記憶装置１２１０に記憶されている第２の故障ノードリスト１２０２を読み書きしてよい。そして、第２の故障ノードリスト１２０２の故障ノードフラグは、例えば、故障ノードリスト５５０との間で同期されてよい。例えば、設定回路５２５が故障ノードリスト５５０の故障ノードフラグの設定を変更したとする。この場合に、割込通知回路５２７は、コア５１５に割り込み通知を出力し、コア５１５からの通知を受けて、ＳＣＦ１２００は、記憶装置１２１０の第２の故障ノードリスト１２０２の故障ノードフラグに同じ設定の変更を行う。一方、ＳＣＦ１２００が、第２の故障ノードリスト１２０２の故障ノードフラグの設定を変更した場合、ＳＣＦ１２００は設定の変更をＣＰＵ５１２のコア５１５に通知し、コア５１５の指示に従って、例えば、設定回路５２５が同じ変更を故障ノードフラグに行う。それによって、故障ノードリスト５５０と、第２の故障ノードリスト１２０２とは同期される。
【００５２】
そして、ＳＣＦ１２００は、例えば、ＣＰＵ５１２内部のパイプ５２２の故障ノードリスト５５０の設定が変更された場合に、その変更を他のビルディングブロック５０１のＣＰＵ５１２に通信経路を介して通知する。即ち、例えば、或るビルディングブロック５０１のＣＰＵ５１２が発行したリクエストがタイムアウトし、ＣＰＵ５１２が故障ノードリスト５５０において送信先のノードに対し故障ノードフラグを設定したとする。この場合に、同じノード内のＳＣＦ１２００は、第２の故障ノードリスト１２０２に同様に設定を行い、また、他のノードのＳＣＦ１２００にも故障ノードフラグを設定したことを通知する。通知を受けた他のノードのＳＣＦ１２００は、通知に従って、同じノード内の第２の故障ノードリスト１２０２に故障ノードフラグを設定する。第２の故障ノードリスト１２０２の設定が変更されると、その変更が同じノード内のＣＰＵ５１２の故障ノードリスト５５０に同期される。これにより、他のノードが故障ノードに不要なリクエストを送信してしまうことを抑止することができる。
【００５３】
第２の実施形態の活用例として、例えば、或るノードの電源を強制的にパワーオフする際に故障ノードフラグを設定することが考えられる。例えば、ソフトウェアや、ＯＳ（オペレーティングシステム）の不具合などでノードの電源を強制的にオフするために、強制終了と呼ばれる機能がある。しかし、共有メモリシステムにおいて、ノードを強制的に切断すると、他ノードからはそのノードが故障したように見えてしまい望ましくない。これを回避するために、第２の故障ノードリスト１２０２を利用することができる。
【００５４】
図１３は、第２の実施形態に係る情報処理システム５００においてノードを強制終了する場合の動作を例示する図である。Ｓ１３０１において、ユーザはビルディングブロックＡで動作するＳＣＦ１２００に強制終了の指示を入力する。Ｓ１３０２においてＳＣＦ１２００は、第２の故障ノードリスト１２０２において、情報処理システム５００内で動作する他のビルディングブロック５０１（例えば、ビルディングブロックＢ，Ｃ）に対応する故障ノードフラグを論理“１”に設定する。また、ＳＣＦ１２００は、情報処理システム５００内の他のビルディングブロック（例えばＢ、Ｃ）のＳＣＦ１２００に、第２の故障ノードリスト１２０２において、ビルディングブロックＡに対する故障ノードフラグを論理“１”に設定するように指示を通知する。
【００５５】
また、ＳＣＦ１２００は、第２の故障ノードリスト１２０２に実行した設定の変更を、同じビルディングブロックＡに含まれるＣＰＵ５１２に対して通知する。それによって、第２の故障ノードリスト１２０２に実行した設定の変更が、ＣＰＵ５１２の故障ノードリスト５５０にも実行され、故障ノードリスト５５０は、第２の故障ノードリスト１２０２と内容が一致するように同期される（Ｓ１３０３）。
【００５６】
故障ノードリスト５５０の同期により、他のビルディングブロック５０１に対するリクエストの発行は抑止される（Ｓ１３０４）。Ｓ１３０５においてＳＣＦ１２００は、強制終了を開始し、Ｓ１３０６において強制終了を完了する。
【００５７】
また、Ｓ１３０７において、他のビルディングブロック５０１のＳＣＦ１２００は、ビルディングブロックＡから、ビルディングブロックＡに対応する故障ノードフラグを論理“１”に変更するよう指示する通知を受信する。すると、他のビルディングブロック５０１のＳＣＦ１２００は、第２の故障ノードリスト１２０２において、ビルディングブロックＡに対応する故障ノードフラグを論理“１”に設定する。更に、ＳＣＦ１２００は、その設定の変更を、同じビルディングブロック内のＣＰＵ５１２に通知し、第２の故障ノードリスト１２０２に対する設定の変更が故障ノードリスト５５０にも適用される（Ｓ１３０８）。これにより、故障ノードリスト５５０は、第２の故障ノードリスト１２０２の内容と一致するように同期される。そして、他のビルディングブロック５０１のＣＰＵ５１２が、強制終了したビルディングブロックＡに対してアクセスすることが抑止される（Ｓ１３０９）。
【００５８】
以上で述べた様に、強制終了を実行する前にＳＣＦ１２００が、他のビルディングブロック５０１のＳＣＦ１２００に第２の故障ノードリスト１２０２の故障ノードフラグの設定を変更するように指示する。すると、指示に従って、ＳＣＦ１２００の第２の故障ノードリスト１２０２が変更され、その設定の変更は他のビルディングブロック５０１のＣＰＵ５１２が備える故障ノードリスト５５０にも反映される。従って、情報処理システム５００において動作する他のビルディングブロック５０１のＣＰＵ５１２が、強制終了したビルディングブロック５０１のＣＰＵ５１２にリクエストを発行してしまうといった、無駄なリクエストの発行が抑止される。これにより、強制終了の実行時の安全性も高まる。
【００５９】
なお、第２の実施形態において、ＳＣＦ１２００間の通信は例えば、図１４に示す様に、ビルディングブロック５０１間を接続する通信ケーブル１４０１などを介して実行されてよい。通信ケーブル１４０１には、例えば、ＬＡＮ（Local Area Network）ケーブルを用いることができる。
【００６０】
また、図１３では強制終了が実行される場合を例示したが、実施形態はこれに限定されるものではない。図１５は、第２の実施形態に係る情報処理システム５００における第２の故障ノードリスト１２０２の利用の別な例を示す図である。Ｓ１５０１において、ビルディングブロックＡのＣＰＵ５１２は、ビルディングブロックＸに送信したリクエストのタイムアウトを検出する。Ｓ１５０２においてＣＰＵ５１２は、故障ノードリスト５５０においてビルディングブロックＸに対応する故障ノードフラグを論理“１”に設定し、その設定変更をビルディングブロックＡのＳＣＦ１２００に通知する。Ｓ１５０３において、ビルディングブロックＡのＳＣＦ１２００は、通知された設定変更に従って、第２の故障ノードリスト１２０２においてビルディングブロックＸに対応する故障ノードフラグを論理“１”に設定する。また、ビルディングブロックＡのＳＣＦ１２００は、その変更を情報処理システム５００内の他のビルディングブロック５０１（例えば、Ｂ，Ｃ）のＳＣＦ１２００に通知する。Ｓ１５０４において、他のビルディングブロック５０１のＳＣＦ１２００は、通知された設定変更に従って、第２の故障ノードリスト１２０２においてビルディングブロックＸに対応する故障ノードフラグを論理“１”に設定する。また、他のビルディングブロック５０１のＳＣＦ１２００は、通知された設定変更を同じビルディングブロック５０１内のＣＰＵ５１２に通知する。Ｓ１５０５において、設定変更の通知を受けたＣＰＵ５１２は、通知された設定変更に従って、故障ノードリスト５５０においてビルディングブロックＸに対応する故障ノードフラグを論理“１”に設定する。従って、例えば、情報処理システム５００内の或るノードにおいて、別の故障ノードに対する故障ノードフラグが故障ノードリスト５５０に設定された場合に、その設定が情報処理システム５００内の他のノードでも反映される。そのため、他のノードが故障ノードにリクエストを送信してしまうことを抑止できる。また、第２の実施形態ではＳＣＦ１２００は、ファームウェア又はソフトウェアにより設定可能な第２の故障ノードリスト１２０２を備えている。そのため、ビルディングブロック５０１が備えるソフトウェアにより制御可能な通信経路等の資源を用いて第２の故障ノードリスト１２０２を用いた多様な処理が可能となる。
【００６１】
以上において、いくつかの実施形態が例示される。しかしながら、実施形態はこれに限定されるものではない。例えば、上記の実施形態においては、故障ノードフラグ、縮退仮保持部１０１５、縮退保持部１０１６などに対して設定される値の例として、論理“１”及び論理“０”を設定し処理を制御する例を述べている。しかしながら、同様の制御を実行するために、その他の値が故障ノードフラグ、縮退仮保持部１０１５、縮退保持部１０１６に対して設定されてもよい。
【００６２】
上述の実施形態を含むいくつかの実施形態は、上述の実施形態の各種変形形態及び代替形態を包含するものとして当業者には理解される。例えば、各種実施形態は、構成要素を変形して具体化されてよい。また、上述した実施形態に開示されている複数の構成要素を適宜組み合わせることにより、種々の実施形態が実施されてよい。更には、実施形態に示される全構成要素からいくつかの構成要素を削除して又は置換して、或いは実施形態に示される構成要素にいくつかの構成要素を追加して種々の実施形態が実施されてよい。
【符号の説明】
【００６３】
１００      共有メモリシステム
１０１      ビルディングブロック
１０２      クロスバスイッチ
１１１      メモリ
１１２      ＣＰＵ
１２１      外部インタフェース
５００      情報処理システム
５０１      ビルディングブロック
５０２      クロスバスイッチ
５１１      メモリ
５１２      ＣＰＵ
５１３      クロスバチップ
５１５      コア
５２０      ホームエージェント回路
５２２      パイプ
５２３      リクエスト発行回路
５２４      タイマ
５２５      設定回路
５２６      発行抑止回路
５２７      割込通知回路
５３０      外部インタフェース
５３１      ルータ回路
９０２      ルータ共通回路
９０３      ルータポート固有回路
１００１    縮退タイミング制御回路
１００２    パケット発行抑止制御回路
１００３    ドレインタイマ
１００４    バリッド回路
１０１１    縮退制御回路
１０１３    振分制御部
１０１５    縮退仮保持部
１０１６    縮退保持部
１０１７    マルチプレクサ
１０１８    バッファ
１０１９    振分回路
１０２０    タイマ
１０２１    クレジット回路
１０３１    経路故障検出回路
１０３２    ポートエラー検出回路
１０３３    異常通知回路
１０３４    バッファ
１０３５    ポート
１０３６    破棄回路
１０３７    送信ポート
１０３８    受信ポート
１０３９    モジュール回路
１２００    ＳＣＦ
１２１０    記憶装置
１４０１    通信ケーブル
【図１】
0006540309.tif 000002
【図２】
0006540309.tif 000003
【図３】
0006540309.tif 000004
【図４】
0006540309.tif 000005
【図５】
0006540309.tif 000006
【図６】
0006540309.tif 000007
【図７】
0006540309.tif 000008
【図８】
0006540309.tif 000009
【図９】
0006540309.tif 000010
【図１０】
0006540309.tif 000011
【図１１】
0006540309.tif 000012
【図１２】
0006540309.tif 000013
【図１３】
0006540309.tif 000014
【図１４】
0006540309.tif 000015
【図１５】
0006540309.tif 000016