説明

ノードコントローラ及びノード並びにデッドロック検出方法

【課題】ネットワーク上のトラヒックや処理時間、又はハードウェア量の増大を招くことなく、システム運用の前にルーティング情報が正しいかを確認できるノードコントローラ、ノード、デッドロック検出方法を提供する。
【解決手段】デッドロック検出用パケットを発行するパケット発行部60X1と、他ノード宛のデッドロック検出用パケットを受信した場合に、その送出経路が自ノードXが既に発行したデッドロック検出用パケットと同じであるならばデッドロックが発生すると判断するデッドロック検出部60X3と、他ノード宛のデッドロック検出用パケットを送信するために用いるポートと同じポートを用いて通信するノードが他に存在するか否かをルーティング情報80Xに従って判断し、存在する場合に、該ノード宛のデッドロック検出用パケットをパケット発行回路60X1に発行させる対象ノード検出部60X2とを有する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、高速パケットネットワークなどのネットワークで相互に接続されるノードを制御するノードコントローラに関し、特に、システム運用の前にルーティング情報が正しいか(デッドロックしないか)を確認できるノードコントローラ及びこれを用いたノード、並びにデッドロック検出方法に関する。
【背景技術】
【0002】
複数の処理要素(ノード)を高速パケットネットワークで接続することによって構成された大規模なコンピュータシステムにおいては、複数のパケットがネットワーク上で循環状にリソース競合を起こすと“デッドロック”が発生する。
【0003】
デッドロックが発生すると、競合を起こしたリソースの稼働が停止し、最悪の場合はシステム全体が動作不能となる。
【0004】
このようなデッドロックを避けるために、仮想的なチャネルを設けたり、パケットのルーティング情報をデッドロックしないように構成したりしていた。デッドロックが発生しないようにルーティング情報を構成することに関連する技術としては、特許文献1に開示される「マルチプロセッサ・システムにおける方向順ルーティング」がある。
【0005】
しかし、前者の仮想的なチャネルを設ける方法では、ハードウェア量が増大してしまうという欠点がある(下記課題〈1〉)。
【0006】
一方、後者のルーティング情報をデッドロックしないように構成する方法は、ハードウェア量の増大という問題は発生しないが、そのような条件を満たすルーティング情報をどのようにして構成するかが問題となる。特に、ネットワーク構成がフルクロスバやメッシュ、二次元トーラス、ハイパーキューブ等の一般的な構成ではなく、且つ各要素の縮退を許すネットワークにおいては、デッドロックを起こさず、かつノード間が可能な限り最短となるようにルーティング情報を構成するのは非常に難しい。例えば、特許文献1に開示される発明は、n次元トポロジー内で各ノードが2n方向で他のノードに接続された構成のシステムに関するものであるが、実際のネットワークはこのような幾何学的に整然とした構成であるとは限らないため、任意のトポロジーのネットワークに適用することは難しい(下記課題〈2〉)。
【0007】
デッドロックが発生しうるルーティング情報でシステムを立ち上げてしまった場合でも、一般的にはすぐにはデッドロックは発生せず、負荷が重くなった時にデッドロックが発生するため、その時になって初めてルーティング情報に不備があることが認識されることとなる(下記課題〈3〉)。
【0008】
すなわち、複数の処理要素(ノード)を高速パケットネットワークで接続することによって構成された大規模コンピュータシステムにおいては、
〈1〉ルーティング情報の設定のみならず、仮想的なチャネルを設ける方法でデッドロックを回避する場合、受信バッファ/送信バッファなどが仮想的なチャネルごとに必要となるため、ハードウェア量が増大する。
〈2〉ネットワーク構成が一般的な構成ではなく、かつ各要素の縮退を許す場合、ネットワーク構成が複雑になるため、デッドロックを起こさずノード間が可能な限り最短となるようなルーティング情報の構成が難しい。
〈3〉デッドロックが発生しうるルーティング情報でシステムを立ち上げてしまった場合、一般的にはシステムの負荷が重くなって初めてデッドロックが顕在化するため、システム運用後にルーティング情報の不備が認識される。
という問題があった。
【0009】
上記課題〈1〉〜〈3〉に対処しつつパケット通信網におけるデッドロックを回避することに関連する技術として特許文献2に開示される「デッドロックを回避するパケットルーティング方式」がある。
【特許文献1】特表平8−503799号公報
【特許文献2】特開平11−154977号公報
【発明の開示】
【発明が解決しようとする課題】
【0010】
しかし、特許文献2に開示される発明は、通信網内の一部のノードからなるサブ通信網においてデッドロックを検出・排除し、サブ通信網に含めるノード数を順次増やしながら処理を繰り返していくものである。このため、通信網のノード数が多くなると処理に要する時間や、ネットワーク上を流れる循環検索パケットのデータ量が(換言すると、ネットワーク上のトラヒックが)増大してしまう。
【0011】
本発明は係る問題に鑑みてなされたものであり、ネットワーク上のトラヒックや処理時間、あるいはハードウェア量の増大を招くことなく、システム運用の前にルーティング情報が正しいか(デッドロックしないか)を確認できるノードコントローラ及びこれを用いたノード、並びにデッドロック検出方法を提供することを目的とする。
【課題を解決するための手段】
【0012】
上記目的を達成するため、本発明は、第1の態様として、2以上のポートを介して複数の他のノードと接続されるノードに適用され、ポートを介しての他のノードとの通信を制御するノードコントローラであって、デッドロックが発生する可能性があるか否かを検出するために用いるデッドロック検出用パケットを発行するパケット発行手段と、他ノード宛のデッドロック検出用パケットを受信した場合に、そのデッドロック検出用パケットを宛先ノードへ送信するための送出経路が、自ノードが既に発行したデッドロック検出用パケットの送出経路と同じであるか否かを判断し、一致する場合にデッドロックが発生すると判断するデッドロック検出手段と、他ノード宛のデッドロック検出用パケットを宛先ノードに送信するために用いるポートと同じポートを用いて通信するノードが宛先ノード以外に存在するか否かを所定のルーティング情報に従って判断し、宛先ノードと同じポートを用いて通信するノードが存在する場合に、該ノードに対してパケット発行手段にデッドロック検出用パケットを発行させる対象ノード検出手段とを有することを特徴とするノードコントローラを提供するものである。
【0013】
また、上記目的を達成するため、本発明は、第2の態様として、上記本発明の第1の態様に係るノードコントローラを有することを特徴とするノードを提供するものである。
【0014】
また、上記目的を達成するため本発明は、第3の態様として、2以上のポートを介して複数の他のノードと接続され、ポートを介しての他のノードと通信するノードにおけるデッドロック検出方法であって、デッドロックが発生する可能性があるか否かを検出するために用いるデッドロック検出用パケットを発行する第1のパケット発行工程と、他ノード宛のデッドロック検出用パケットを受信した場合に、そのデッドロック検出用パケットの送出経路が、第1のパケット発行工程において発行したデッドロック検出用パケットと同じであるか否かを判断し、一致する場合にデッドロックが発生すると判断するデッドロック検出工程と、他ノード宛のデッドロック検出用パケットを宛先ノードに送信するために用いるポートと同じポートを用いて通信するノードが宛先ノード以外に存在するか否かを所定のルーティング情報に従って判断する判断工程と、宛先ノードと同じポートを用いて通信するノードが存在する場合に、該ノードに対してデッドロック検出用パケットを発行する第2のパケット発行工程とを有することを特徴とするデッドロック検出方法を提供するものである。
【発明の効果】
【0015】
本発明によれば、ネットワーク上のトラヒックや処理時間、あるいはハードウェア量の増大を招くことなく、システム運用の前にルーティング情報が正しいか(デッドロックしないか)を確認できるノードコントローラ及びこれを用いたノード、並びにデッドロック検出方法を提供できる。
【発明を実施するための最良の形態】
【0016】
〔システムの構成〕
図1に、本実施形態に係るコンピュータシステムの構成を示す。このシステムは、複数のノード0〜7がネットワーク8を介して接続された構成である。
ノード0は一般的な演算装置である複数のCPU00〜03と、入出力制御用の演算装置である複数のIO Hub04〜05と、ノードコントローラ06とを有する。他のノードも同様の構成である。すなわち、システム構成を一般化すると、ノードX(Xは0〜7のいずれかの整数)は複数のCPU X0〜X3と、複数のIO Hub X4〜X5と、ノードコントローラX6とを有する。
【0017】
各ノード内において、CPU−CPU間及びCPU−ノードコントローラ間は、ノード内I/Fで接続されている。一方、ノード同士の接続となるノードコントローラ−ノードコントローラ間は、ノード間I/Fで接続されている。
【0018】
ノード間I/Fで構成されるネットワーク8は、三次元ハイパーキューブとクロスバとを折衷した構成である。
ノード0−ノード1、ノード2−ノード3、ノード4−ノード5、ノード6−ノード7のそれぞれの間は、各ノードコントローラのノード間I/Fのポート0で接続されている。また、ノード0−ノード2、ノード1−ノード3、ノード4−ノード6、ノード5−ノード7のそれぞれの間は、各ノードコントローラのポート1で接続されている。また、ノード0−ノード3、ノード1−ノード2、ノード4−ノード7、ノード5−ノード6のそれぞれの間は、各ノードコントローラのポート2で接続されている。さらに、ノード0−ノード4、ノード1−ノード5、ノード2−ノード6、ノード3−ノード7のそれぞれの間は、各ノードコントローラのポート3で接続されている。
【0019】
ノードコントローラの構成について説明する。
図2に、2以上のポートを介して複数の他のノードと接続されるノードX(Xは0〜7の整数)に適用されるノードコントローラX6の要部の構成を示す。ノードコントローラX6は、デッドロックが発する可能性があるか否かを検出するために用いるデッドロック検出用パケットを発行するパケット発行部60X1と、他ノード宛のデッドロック検出用パケットを受信した場合に、そのデッドロック検出用パケットを宛先ノードへ送信するための送出経路が、自ノードが既に発行したデッドロック検出用パケットの送出経路と同じであるか否かを判断し、一致する場合にデッドロックが発生すると判断するデッドロック検出部60X3と、他ノード宛のデッドロック検出用パケットを宛先ノードに送信するために用いるポートと同じポートを用いて通信するノードが宛先ノード以外に存在するか否かを所定のルーティング情報80Xに従って判断し、宛先ノードと同じポートを用いて通信するノードが存在する場合に、該ノードに対してパケット発行部60X1にデッドロック検出用パケットを発行させる対象ノード検出部60X2とを有し、ノードXのポートを介しての他のノードとの通信を制御する。
図3に示すように、ノードXにはBMC X9が接続され、ルーティング情報の設定やデッドロックの原因となる箇所の判断が行われる。
【0020】
図4に、ノードX及びノードコントローラX6の詳細な構成を示す。各ノード・ノードコントローラの構成は同様であるため、以下ではXが0である場合を具体例として説明する。
ノードコントローラ06は、ノード内I/F制御部100〜105、ノード間I/F制御部200〜203、デッドロック検出制御部300、クロスバネットワーク400、ルーティングテーブル500を有する。
【0021】
また、ノード0のノードコントローラ06には、システムを管理するBMC(Baseboard Management Controller)09が接続されている。BMC09は、ルーティング情報の設定を行うプログラムや不適切な箇所を判断するプログラムを有する。ノード1〜7も同様に、BMC19〜79を備えている。
【0022】
ノード内I/F制御部100〜105は、ノード内I/Fを制御する。ノード間I/F制御部200〜203は、ノード間I/Fを制御する。クロスバネットワーク400は、ノード内I/F制御部100〜105、ノード間I/F制御部200〜203、及びデッドロック検出制御部300の間を接続する。
クロスバネットワーク400に接続された各制御部は、クロスバネットワーク400にパケットを発行する場合には自ノード宛か否かを判断し、他ノード宛の場合はルーティングテーブル500に記憶されているルーティング情報800に基づいて送出先のポートを判別する。
【0023】
ノード間I/F制御部200〜203のそれぞれは、ルーティング回路2001〜2031、パケット検出回路2002〜2032、受信バッファ2003〜2033、及び送信バッファ2004〜2034を有する。ルーティング回路2001〜2031は、ノード間I/Fから受信したパケットの宛先がどのノードであるかを判断し、他ノードであればノード間I/F制御部200〜203へ、自ノード宛であればノード内I/F制御部100〜105へ出力する。パケット検出回路2002〜2032は、ノードコントローラ06のデッドロック検出用パケットの受信を検出し、デッドロック検出制御部300に発行元及び宛先ノード番号を通知する。なお、デッドロック検出用パケットについては後段で詳細に説明する。受信バッファ2003〜2033は、ノード間I/Fから受信したパケットを一時的に格納するための記憶装置である。送信バッファ2004〜2034は、ノード間I/Fへ送出するパケットを一時的に格納するための記憶装置である。
【0024】
デッドロック検出制御部300は、パケット発行回路3001、対象ノード検出回路3002、及びデッドロック検出回路3003を有する。
【0025】
パケット発行回路3001は、図2に示したパケット発行部60X1に対応するものであり、BMC09又は対象ノード検出回路3002からの指示に応じて、指定されたノードに対してデッドロック検出用パケットを発行する。その際には、送出先のポート番号をデッドロック検出回路3003に通知する。対象ノード検出回路3002は、図2に示した対象ノード検出部60X2に対応するものであり、パケット検出回路2002〜2002から通知された発行元ノード番号からルーティング情報を引き、同一のポートを使用する宛先ノード番号を検出し、該ノードに対してデッドロック検出用パケットを発行するようにパケット発行回路3001に指示する。デッドロック検出回路3003は、図2にデッドロック検出部60X3に対応するものであり、パケット検出回路2002〜2002から通知された発行元ノード番号からルーティング情報を引き、パケット発行回路3001から通知されたポート番号と同じポート番号であるか否かを比較する。また、デッドロック検出回路は、ノードコントローラのステータス(デッドロックが発生するか否か)を記録するための記憶装置を備えている。
【0026】
以上の構成を一般化すると、ノードコントローラX6(Xは0〜7の整数)は、ノード内I/F制御部1X0〜1X5、ノード間I/F制御部2X0〜2X3、デッドロック検出制御部30X、クロスバネットワーク40X、及びルーティングテーブル50Xを有する。そして、ポートY(Yは、0〜3の整数)を制御するノード間I/F制御部2XYは、ルーティング回路2XY1、パケット検出回路2XY2、受信バッファ2XY3、及び送信バッファ2XY4を有する。また、デッドロック検出制御部30Xは、パケット発行回路30X1(図2のパケット発行部60X1に対応)、対象ノード検出回路30X2(図2の対象ノード検出部60X2に対応)、及びデッドロック検出回路30X3(図2のデッドロック検出部60X3に対応)を有する。
【0027】
〔デッドロック検出用パケット〕
デッドロック検出用パケットには、通常のルーティングに使用する宛先ノード番号、発行元ノード番号だけでなく、デッドロック検出用パケットの発行要因となった(BMCからの指示によって発行された以降の全ての)デッドロック検出用パケットの宛先ノード番号、発行元ノード番号も格納される。
通常のルーティングに使用する宛先ノード番号、発行元ノード番号は、(通常のパケットと同様に)デッドロック検出用パケットのヘッダ部に格納される。一方、自パケットの発行要因となったデッドロック検出用パケットの宛先ノード番号、発行元ノード番号は、デッドロック検出用パケットのデータ部に格納される。デッドロック検出用パケットのデータ部には、宛先ノード番号及び発行元ノード番号のペアをN−1個(Nはノードの総数。ここでは七つ。)格納することが可能である。
【0028】
図5は、デッドロック検出用パケットのフォーマットを示す図である。デッドロック検出用パケットは、通常のパケットと同様にヘッダ部とデータ部とに分かれている。
ヘッダ部に格納される宛先ノード番号は、通常のパケットにも存在するものであり、デッドロック検出用パケット自身の宛先ノード番号を示している。各ノードコントローラは、ヘッダ部に格納された宛先ノード番号に基づいてデッドロック検出用パケットをルーティングする。ヘッダ部にある発行元ノード番号は、宛先ノード番号同様通常のパケットにも存在するものであり、デッドロック検出用パケット自身の発行元であるノードのノード番号を示している。発行元ノード番号は、デッドロック検出用パケット自身のルーティングには使用されないが、デッドロック検出用パケットに対して宛先ノードからレスポンスのパケットを送る場合、レスポンスパケットのヘッダ部の宛先ノード番号として、デッドロック検出用パケットのヘッダ部に格納されていた発行元ノード番号が格納される。なお、パケット通信においてはパケットのデータ部の大きさは規格によって定められているが(例えば64バイト)、デッドロック検出用パケットのデータ部に格納される発行元ノード番号−宛先ノード番号の対のデータ量だけでは規格で定められた大きさに満たないため、残り部分(図5におけるReservedの部分)は空のデータとして扱われる。
【0029】
データ部にある宛先ノード番号、発行元ノード番号は、デッドロック検出用パケットの発行要因となった(BMCからの指示により発行された以降の全ての)デッドロック検出用パケットのヘッダ部の宛先ノード番号、発行元ノード番号が格納される。
これらの情報は、デッドロック検出時にデッドロック検出回路30X3にログ(記録)され、BMCによる被疑の判断時に使用される。
【0030】
〔動作〕
デッドロック検出回路30X3及びパケット検出回路2XY2の動作について説明する。
BMC09〜79は、ルーティング情報800〜807をノード0〜7の各ノードコントローラ06〜76のルーティングテーブル500〜507に設定する。設定後、システム内のBMC09〜79は、自身らの中のいずれか一つを選択する。選択されたBMCは、ネットワーク8を介して接続されているノード0〜7の中からデッドロック検出用パケットの宛先とするノードを一つ選択する。宛先ノードを選択した後に、選択されたBMCは、接続されているノードコントローラに対して、宛先として選択したノードへデッドロック検出用パケットを発行するように指示する。その後、選択されたBMCは、規定時間待機した後、デッドロック検出回路30X3に格納されているノードコントローラのステータスをReadし、デッドロックを検出したか否かを確認する。検出しなかった場合、選択されたBMCは、宛先のノードを変更して同じ動作を実行する。ネットワーク8を介して接続されている他の全てのノードに対して上記の動作を実行してもデッドロックを検出しなかった場合、BMC09〜79は、自身らの中から選択されていない別のBMCを選択し、上記同様の動作を実行する。
全てのノードの組み合わせにおいてデッドロックを検出しなかった場合、各ノードに設定されたルーティング情報に問題が無いことを意味する。この場合には、最終的には、ネットワーク8で接続された全てのノードの組み合わせにおいて、上記動作が実行されることとなる。
一方、いずれかのノードの組み合わせにおいてデッドロックを検出した場合、いずれかのノードのルーティング情報に問題があることを意味する。BMCはデッドロック検出回路30X3にログされている情報をReadし、その情報を基に被疑箇所を特定する。
【0031】
図6は、ノード0−ノード1、及びノード2−ノード6の間のノード間I/Fが故障等の理由によって切断され、かつルーティング情報が適切に設定されていないためにデッドロックが発生するケースを示している。
【0032】
以下、ノード1のBMC19が選択され、かつBMC19によってデッドロック検出用パケットの宛先としてノード4が選択されているものとする。
<1>BMC19からデッドロック検出用パケットの発行を指示されたノードコントローラ16のデッドロック検出制御部301のパケット発行回路3011は、宛先として指定されているノード4に対して、デッドロック検出用パケットを発行する。その際、デッドロック検出用パケットのヘッダ部には自身のノード番号(ここでは“1”)と宛先のノード番号(ここでは“4”)とを格納する。
【0033】
パケット発行回路3011からクロスバネットワーク401にデッドロック検出用パケットを発行するとき、パケット発行回路3001はルーティングテーブル501のルーティング情報801から送出先のポートを判別する。図6の“ノード1のルーティング情報”を参照すると、宛先ノード4の送出先ポートは“3”である。パケット発行回路3001は、この送出先ポートの情報をクロスバネットワーク401への発行の時に使用するとともに、デッドロック検出回路3013に通知する。
【0034】
<2>ノード1によって発行されたノード4宛のデッドロック検出用パケットは、ノード5のポート3、ポート0を経由してノード4のポート0へ送られる(図6の(1))。
【0035】
<3>ノード4のポート0を制御するノードコントローラ46のノード間I/F制御部240のパケット検出回路2402は、自ノード宛である上記デッドロック検出用パケット(ノード1から発行されたデッドロック検出用パケット)を検出すると、デッドロック検出用パケットを破棄する。
【0036】
<4>一方、デッドロック検出用パケットが経由するノード5のポート3を制御するノードコントローラ56のノード間I/F制御部253のパケット検出回路2532は、他ノード宛である上記デッドロック検出用パケット(ノード1によって発行されたノード4宛のデッドロック検出用パケット)を検出すると、デッドロック検出制御部305の対象ノード検出回路3052とデッドロック検出回路3053とに通知する。その際、デッドロック検出用パケットに格納されている宛先ノード番号及び発行元ノード番号も全て通知する(この場合、ヘッダ部の宛先ノード番号“4”−発行元ノード番号“1”、データ部については情報なし)。なお、パケット検出回路3532は、デッドロック検出用パケットは破棄しない。
【0037】
<5>パケット検出回路2532からの通知を受けたデッドロック検出回路3053は、通知されたヘッダ部の宛先ノード番号(この場合“4”)について、ルーティングテーブル505のルーティング情報805から送出先のポートを判別する。図6の“ノード5のルーティング情報”を参照すると、宛先ノード4の送出先ポートは“0”である。そして、パケット検出回路2532からの通知の前にパケット発行回路3051から送出先ポート情報の通知が行われている場合、その送出先ポート情報と判別結果とを比較し、一致した場合はデッドロックが発生すると判断し、ログする。その際、パケット検出回路2532から通知された全ての宛先ノード番号及び発行元ノード番号もログする。図6に示す例では、パケット発行回路3051から送出先ポート情報の通知が行われていない(通知を受けたのはノードコントローラ16のデッドロック検出回路3013である)ため、デッドロックが発生するとは判断しない。
【0038】
<6>一方、上記<5>においてパケット検出回路2532からの通知を受けた対象ノード検出回路3052は、通知されたヘッダ部の宛先ノード番号(この場合“4”)について、ルーティングテーブル505のルーティング情報805から送出先ポートを判別する。図6の“ノード5のルーティング情報”を参照すると、宛先ノード4の送出先ポートは“0”である。次に、対象ノード検出回路3052は、ルーティングテーブル505のルーティング情報805を逆引きして同じポート(この場合は“ポート0”)を送出先として使用する他のノードを判定する。ノード5のルーティング情報を参照すると、送出先ポートが“0”の他のポートとしてノード0が存在する。
同じポートを送出先とする他のノードが存在するため、対象ノード検出回路3052は、パケット発行回路3051に対して該ノード(この場合ノード0)に対してデッドロック検出用パケットを発行するように指示する。その際、パケット検出回路2532から通知された全ての宛先ノード及び発行元ノード番号(この場合、宛先ノード番号“4”、発行元ノード番号“1”)も通知する。
なお、同じポートを送出先とする他のノードが存在しない場合、対象ノード検出回路3052はそれ以降は特に動作はしない。
【0039】
<7>対象ノード検出回路3052からデッドロック検出用パケットの発行を指示されたパケット発行回路3051は、指示されたノード0に対してデッドロック検出用パケットを発行する。その際デッドロック検出用パケットのヘッダ部には、自分のノード番号と宛先のノード番号とを格納する(この場合には宛先ノード番号0、発行元モード番号5)。さらに、このデッドロック検出用パケットのデータ部には、対象ノード検出回路3052から通知された全ての宛先ノード及び発行元ノード番号を格納する(この場合は宛先ノード番号“4”、発行元ノード番号“1”)。なお、BMCからの指示によるデッドロック検出用パケットの発行時とは異なり、パケット発行回路3051は、送出先ポートの情報をデッドロック検出回路3053へ通知しない。
【0040】
<8>ノード5から発行されたノード0宛のデッドロック検出用パケットは、ノード4のポート0、ポート3を経由して、ノード0のポート3に送られる(図6の(2))。
【0041】
<9>デッドロック検出用パケットは、図6(3)、(4)に示すようにノード4、ノード0、ノード2、ノード1と順次送られていくため、これらのノードにおいて上記<3>〜<8>と同様の動作が行われる(図6の(3)、(4))。
【0042】
以下、ノード2によって発行されたノード5宛のデッドロック検出用パケット(図6の(5))が経由するノード1での動作について説明する。
【0043】
<10>デッドロック検出用パケットが経由するノード1のポート2を制御するノードコントローラ16のパケット検出回路2122は、他ノード宛である上記デッドロック検出用パケット(ノード2によって発行されたノード5宛のデッドロック検出用パケット)を検出すると、他ノード宛のデッドロック検出用パケットを検出したことをデッドロック検出制御部301の対象ノード検出回路3012とデッドロック検出回路3013とに通知する。その際、デッドロック検出用パケットに格納されている宛先ノード番号及び発行元ノード番号も全て通知する(この場合、ヘッダ部の宛先ノード番号“5”−発行元ノード番号“2”、データ部の宛先ノード番号“4”−発行元ノード番号“1”(図6の(1))、“0”−“5”(図6の(2))、“2”−“4”(図6の(3))、“1”−“0”(図6の(4))。
なお、パケット検出回路2122は、このデッドロック検出用パケットを破棄しない。
【0044】
<11>パケット検出回路2122から通知されたノード1のノードコントローラ16のデッドロック検出回路3013は、通知されたヘッダ部の宛先ノード番号(この場合“5”)について、ルーティングテーブル501のルーティング情報801から送出先のポートを判別する。図6の“ノード1のルーティング情報”を参照すると、宛先ノード5の送出先ポートは“3”である。そして、パケット検出回路2122からの通知の前に、パケット発行回路3011から送出先ポート情報が通知されている場合、その送出先ポート情報と判別結果とを比較し、一致したならば、デッドロックが発生すると判断し、ログする。
その際、パケット検出回路2122から通知された全ての宛先ノード番号及び発行元ノード番号もログする。この場合は、パケット検出回路2122から送出先ポート情報の通知が行われており(上記<1>)、通知されている送出先ポート番号は“3”である。よって、比較結果が一致するためデッドロックが発生すると判断し、全ての宛先ノード番号及び発行元ノード番号(この場合、宛先ノード番号“4”−“発行元ノード番号“1”、“0”−“5”、“2”−“4”、“1”−“0”、“5”−“2”)も含めてログする。
【0045】
デッドロック検出回路30X3にログされた宛先ノード番号−発行元ノード番号の対は、BMCX9がデッドロックが発生する原因となった被疑箇所を特定するために用いられる。被疑箇所の特定には公知の方法を適用可能であるが、例えば、異なる宛先に発行させた複数のデッドロック検出用パケットについて同じ宛先ノード番号−発行元ノード番号の対が重複してログされている場合には、その部分に問題があると判断できる。
【0046】
図7は、ルーティング情報が適切でデッドロックが発生しないケースを示す。図6との違いは、ノード0のルーティング情報において宛先ノード1に対応する出力先ポートが図6では“1”であり、図7では“2”であることのみである。この違いにより、ノード0においてノード1に対してデッドロック検出用パケットを発行する時(図6、図7の(4))、送出先ポートが“1”ではなく“2”となる。すなわち、経由するノードがノード2からノード3に変わる。そしてノード3においてデッドロック検出用パケット(図7の(4))の送出先ポート(この場合“1”)を送出先ポートとする他のノードは存在しない。すなわち、ノード3において、新しくデッドロック検出用パケットは発行されず、一連の動作はここで完了となる。
【0047】
このように、本実施形態に係るコンピュータシステムは、デッドロックが発生するか否かを検出するための専用のパケットを用いてデッドロックを検出するため、デッドロックが発生するか否かをシステム運用前に確認できる。
また、実際にネットワーク上にパケットを流してデッドロックを検出するため、ルーティング情報の構成時のミスだけでなく、ネットワークの接続ミスが要因となる場合も検出可能である。
しかも、ネットワーク上の一部のノードを抜き出して検出処理を行う必要がなく、ネットワーク全体(全ノード)検出処理を行えるため、ネットワーク上のトラヒックや処理時間、あるいはハードウェア量の増大を招くことがない。
【0048】
なお、上記実施形態は本発明の好適な実施の一例であり、本発明はこれに限定されることはない。例えば、ノード間を結ぶネットワークは完全網などの他のネットワークであっても良い。
このように本発明は様々な変形が可能である。
【図面の簡単な説明】
【0049】
【図1】本発明の好適な実施の形態に係るコンピュータシステムの構成を示す図である。
【図2】ノードコントローラの要部の構成を示す図である。
【図3】ノードの要部の構成を示す図である。
【図4】本発明の好適な実施の形態に係るコンピュータシステムに適用されるノードの構成を示す図である。
【図5】デッドロック検出用パケットのデータ構造を示す図である。
【図6】デッドロック検出動作の一例を示す図である。
【図7】デッドロック検出動作の一例を示す図である。
【符号の説明】
【0050】
0、1、2、3、4、5、6、7、X ノード
8 ネットワーク
00、01、02、03、10、11、12、13、20、21、22、23、30、31、32、33、40、41、42、43、50、51、52、53、60、61、62、63、70、71、72、73、X0、X1、X2、X3 CPU
04、05、14、25、34、35、44、45、54、55、64、65、74、75、X4、X5 IO Hub
06、16、26、36、46、56、66、76、X6 ノードコントローラ
09、19、29、39、49、59、69、76、X9 BMC
1X0、1X1、1X2、1X3、1X4、1X5 ノード内I/F制御部
2X0、2XY ノード間I/F制御部
30X デッドロック検出制御部
40X クロスバネットワーク
50X ルーティングテーブル
80X ルーティング情報
2X01、2XY1 ルーティング回路
2X02、2XY2 パケット検出回路
2X03、2XY3 受信バッファ
2X04、2XY4 送信バッファ
30X1 パケット発行回路
30X2 対象ノード検出回路
30X3 デッドロック検出回路
60X1 パケット発行部
60X2 対象ノード検出部
60X3 デッドロック検出部

【特許請求の範囲】
【請求項1】
2以上のポートを介して複数の他のノードと接続されるノードに適用され、前記ポートを介しての他のノードとの通信を制御するノードコントローラであって、
デッドロックが発生する可能性があるか否かを検出するために用いるデッドロック検出用パケットを発行するパケット発行手段と、
他ノード宛のデッドロック検出用パケットを受信した場合に、そのデッドロック検出用パケットを宛先ノードへ送信するための送出経路が、自ノードが既に発行したデッドロック検出用パケットの送出経路と同じであるか否かを判断し、一致する場合にデッドロックが発生すると判断するデッドロック検出手段と、
前記他ノード宛のデッドロック検出用パケットを前記宛先ノードに送信するために用いるポートと同じポートを用いて通信するノードが前記宛先ノード以外に存在するか否かを所定のルーティング情報に従って判断し、前記宛先ノードと同じポートを用いて通信するノードが存在する場合に、該ノードに対して前記パケット発行手段にデッドロック検出用パケットを発行させる対象ノード検出手段とを有することを特徴とするノードコントローラ。
【請求項2】
前記デッドロック検出手段は、宛先ノードへ送信するための送出経路が、外部に接続されるコントローラからの指示に応じて自ノードが既に発行したデッドロック検出用パケットの送出経路と同じである他ノード宛のデッドロック検出用パケットを受信した場合に、デッドロックが発生すると判断することを特徴とする請求項1記載のノードコントローラ。
【請求項3】
前記ルーティング情報は、前記各ノードの識別子と前記ポートの識別子とを対とするテーブルであることを特徴とする請求項1又は2記載のノードコントローラ。
【請求項4】
前記デッドロック検出用パケットは、ヘッダ部とデータ部とからなり、自パケットの発行要因となった全てのデッドロック検出用パケットの発行元ノードの識別子と宛先ノードの識別子との対が前記データ部に格納されていることを特徴とする請求項1から3のいずれか1項記載のノードコントローラ。
【請求項5】
前記各ポートを介した通信を管理する複数のノード間通信制御手段をさらに備え、
前記ノード間通信制御手段のそれぞれは、他のノード宛のデッドロック検出用パケットを自身が管理するポートを介して受信した場合に、該デッドロック検出用パケットのヘッダ部及びデータ部に格納されていた全ての宛先ノード及び発行元ノードの識別子を、前記対象ノード検出手段に通知するパケット検出手段を備え、
前記パケット発行手段は、外部に接続されるコントローラから又は対象ノード検出手段からの指示に応じて、指示されたノードに対して前記デッドロック検出用パケットを発行するとともに、前記コントローラから指示を受けた場合のみデッドロック検出手段に対して前記デッドロック検出用パケットの発行に用いるポートを表す送出先ポート情報を通知し、
前記対象ノード検出手段は、前記デッドロック検出用パケットのヘッダ部に識別子が格納されていたと前記パケット検出手段から通知されたノードと同じポートを送出先として使用するノードが存在するか否かを前記ルーティング情報に基づいて判断し、存在するならばそのノードへのデッドロック検出用パケットの発行を前記パケット発行手段に対して指示し、
前記デッドロック検出手段は、前記デッドロック検出用パケットのヘッダ部に識別子が格納されていたと前記パケット検出手段から通知されたノードとの通信に用いるポートを前記ルーティング情報に基づいて特定するとともに、前記パケット検出手段からの通知よりも前に前記パケット発行手段から送出先ポート情報が通知されている場合は、特定したポートが前記送出先ポート情報が示すポートと一致するか否かを判断し、一致する場合にはデッドロックが発生すると判断することを特徴とする請求項3記載のノードコントローラ。
【請求項6】
前記デッドロック検出手段がデッドロックが発生すると判断した場合に、判断に用いた前記他ノード宛のデッドロック検出用パケットに格納されている発行元ノードの識別子と宛先ノードの識別子との対の全てを記録することを特徴とする請求項4又は5記載のノードコントローラ。
【請求項7】
請求項1から6のいずれか1項記載のノードコントローラを有することを特徴とするノード。
【請求項8】
前記パケット発行手段に対し前記デッドロック検出用パケットの発行を指示するコントローラが接続されることを特徴とする請求項7記載のノード。
【請求項9】
請求項6記載のノードコントローラを有し、前記パケット発行手段に対して前記デッドロック検出用パケットの発行を指示するとともに、前記デッドロック検出手段によって記録された発行元ノードの識別子と宛先ノードの識別子との対を基に、デッドロックが発生する原因となる箇所を特定するコントローラが接続されることを特徴とするノード。
【請求項10】
2以上のポートを介して複数の他のノードと接続され、前記ポートを介しての他のノードと通信するノードにおけるデッドロック検出方法であって、
デッドロックが発生する可能性があるか否かを検出するために用いるデッドロック検出用パケットを発行する第1のパケット発行工程と、
他ノード宛のデッドロック検出用パケットを受信した場合に、そのデッドロック検出用パケットの送出経路が、前記第1のパケット発行工程において発行したデッドロック検出用パケットと同じであるか否かを判断し、一致する場合にデッドロックが発生すると判断するデッドロック検出工程と、
前記他ノード宛のデッドロック検出用パケットを宛先ノードに送信するために用いるポートと同じポートを用いて通信するノードが前記宛先ノード以外に存在するか否かを所定のルーティング情報に従って判断する判断工程と、
前記宛先ノードと同じポートを用いて通信するノードが存在する場合に、該ノードに対して前記デッドロック検出用パケットを発行する第2のパケット発行工程とを有することを特徴とするデッドロック検出方法。
【請求項11】
前記第1のパケット発行工程においては、自ノードの外部に接続されるコントローラからの指示に応じて前記デッドロック検出用パケットを発行することを特徴とする請求項10記載のデッドロック検出方法。
【請求項12】
前記第2のパケット発行工程においては、自パケットの発行要因となった全てのデッドロック検出用パケットの発行元ノードの識別子と宛先ノードの識別子との対を前記デッドロック検出用パケットに格納して発行することを特徴とする請求項10又は11記載のデッドロック検出方法。
【請求項13】
前記デッドロック検出用パケットは、ヘッダ部とデータ部とからなり、自パケットの発行要因となった全てのデッドロック検出用パケットの発行元ノードの識別子と宛先ノードの識別子との対は、前記データ部に格納されていることを特徴とする請求項12記載のデッドロック検出方法。
【請求項14】
前記デッドロック検出工程においてデッドロックが発生すると判断した場合に、判断に用いた前記他ノード宛のデッドロック検出用パケットに格納されている発行元ノードの識別子と宛先ノードの識別子との対の全てを記録することを特徴とする請求項13記載のデッドロック検出方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate


【公開番号】特開2009−81797(P2009−81797A)
【公開日】平成21年4月16日(2009.4.16)
【国際特許分類】
【出願番号】特願2007−251044(P2007−251044)
【出願日】平成19年9月27日(2007.9.27)
【出願人】(000168285)エヌイーシーコンピュータテクノ株式会社 (572)
【Fターム(参考)】