(57)【特許請求の範囲】
【請求項１】
複数の装置を有する、ＰＣＩ Ｅｘｐｒｅｓｓの情報処理システムにおいて、
前記複数の装置のうち第１の装置が、
前記第１の装置が送信した要求に対する応答を所定時間内に受信しないことを検出した後、前記複数の装置のうち少なくとも前記要求の転送又は前記応答の転送に関係する装置の記憶部に、当該装置が接続されたリンクでエラーが発生していないことを示す情報を設定し、設定した時点から予め定められた時間が経過した後に、当該装置の記憶部から、当該装置が接続されたリンクでエラーが発生したか否かを示す情報を取得し、
取得した前記情報に基づき、エラーが発生したリンク又は当該リンクに接続された装置を特定する
処理を実行する原因特定方法。
【請求項２】
前記装置が接続されたリンクでエラーが発生したか否かを示す情報を取得する処理において、前記第１の装置が送信した要求に対する応答を所定時間内に受信しないことをルートポートで検出した場合には、
前記装置を特定する処理において、
取得した前記情報のうち更新のあった情報の取得元装置に隣接するリンクを、エラーが発生したリンクとして特定する
ことを特徴とする請求項１記載の原因特定方法。
【請求項３】
前記第１の装置は、ルートポートを有するＣＰＵであり、
前記記憶部は、訂正可能なエラーについての情報を格納するレジスタである
請求項１又は２記載の原因特定方法。
【請求項４】
前記第１の装置が、
前記複数の装置のうちＰＣＩ Ｅｘｐｒｅｓｓのエンドデバイスである第２の装置が送信した要求に対する応答を前記第２の装置が前記所定時間内に受信しないことを検出した場合に、前記第２の装置を原因に決定する
処理をさらに実行する請求項３記載の原因特定方法。
【請求項５】
複数の装置
を有する、ＰＣＩ Ｅｘｐｒｅｓｓの情報処理システムであって、
前記複数の装置の各々は、
当該装置が接続されたリンクでエラーが発生したか否かを示す情報を格納する記憶部
を有し、
前記複数の装置のうち第１の装置は、
前記第１の装置が送信した要求に対する応答を所定時間内に受信しないことを検出した後、前記複数の装置のうち少なくとも前記要求の転送又は前記応答の転送に関係する装置の記憶部に、当該装置が接続されたリンクでエラーが発生していないことを示す情報を設定し、設定した時点から予め定められた時間が経過した後に、当該装置の記憶部から、当該装置が接続されたリンクでエラーが発生したか否かを表す情報を取得する取得部と、
取得した前記情報に基づき、エラーが発生したリンク又は当該リンクに接続された装置を特定する特定部と、
を有する情報処理システム。
【請求項６】
送信した要求に対する応答を所定時間内に受信しないことを検出した後、ＰＣＩ Ｅｘｐｒｅｓｓの情報処理システムに含まれる複数の装置のうち少なくとも前記要求の転送又は前記応答の転送に関係する装置の記憶部に、当該装置が接続されたリンクでエラーが発生していないことを示す情報を設定し、設定した時点から予め定められた時間が経過した後に、当該装置の記憶部から、当該装置が接続されたリンクでエラーが発生したか否かを示す情報を取得し、
取得した前記情報に基づき、エラーが発生したリンク又は当該リンクに接続された装置を特定する
処理をプロセッサに実行させるための原因特定プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信に関するエラーの原因を特定する技術に関する。
【背景技術】
【０００２】
ＰＣＩ（Peripheral Components Interconnect） Ｅｘｐｒｅｓｓ（以下、ＰＣＩｅと呼ぶ）とは、ＰＣＩ−ＳＩＧ（Peripheral Components Interconnect-Special Interest Group）により策定された、シリアル転送のインタフェース規格である。
【０００３】
ＰＣＩｅにおいて、デバイス間における情報の伝達は、デバイス間を接続するネットワークを介してパケットを転送することによって行われる。ＴＬＰ（Transaction Layer Packet）リクエストと呼ばれる要求パケットの送信元のデバイスはリクエスタと呼ばれ、ＴＬＰリクエストの送信先のデバイスはコンプリータと呼ばれる。リクエスタがＴＬＰコンプリーションと呼ばれる応答パケットをコンプリータから所定時間内に受信しない場合、リクエスタにおいてコンプリーションタイムアウト（Completion Timeout）が検出される。
【０００４】
ＰＣＩｅにおける一部のエラーについては、エラーの原因を特定する技術が知られている。例えば、ＰＣＩｅがサポートしていないＴＬＰリクエストである場合のエラー（すなわち、"Unsupported Request Error"）については、コンプリータが有するヘッダログレジスタ（Header Log Register）に書き込まれた情報に基づき、原因となった箇所（この場合、リクエスタ）を特定することができる。
【０００５】
しかし、コンプリーションタイムアウトの原因の特定に着目した従来技術は存在しない。コンプリーションタイムアウトはリクエスタにおいて検出されるが、ヘッダログレジスタには、コンプリーションタイムアウトに関するログが格納されない。また、コンプリーションタイムアウトの場合、リクエスタ、コンプリータ、及びリクエスタとコンプリータとの間の経路上のリンク等が原因となり得る。
【先行技術文献】
【非特許文献】
【０００６】
【非特許文献１】"PCI Express Base Specification Revision 3.0", Peripheral Components Interconnect-Special Interest Group, November 10, 2010, p. 151
【特許文献】
【０００７】
【特許文献１】特開２００８−２２５６９４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
従って、本発明の目的は、１つの側面では、応答が所定時間内に返ってこない原因を特定するための技術を提供することである。
【課題を解決するための手段】
【０００９】
本発明に係る原因特定方法は、複数の装置を有する情報処理システムにおいて実行される。そして、本原因特定方法は、複数の装置のうち第１の装置が、（Ａ）第１の装置が送信した要求に対する応答を所定時間内に受信しない場合、複数の装置のうち少なくとも要求の転送又は応答の転送に関係する装置から、当該装置の記憶部に格納されている、当該装置が接続されたリンクでエラーが発生したか否かを示す情報を取得し、（Ｂ）取得した情報に基づき、エラーが発生したリンク又は当該リンクに接続された装置を特定する処理を含む。
【発明の効果】
【００１０】
１つの側面では、応答が所定時間内に返ってこない原因を特定できるようになる。
【図面の簡単な説明】
【００１１】
【図１】図１は、情報処理装置のハードウエア構成を示す図である。
【図２】図２は、ポートの構成を示す図である。
【図３】図３は、ＵＥＳレジスタの一例を示す図である。
【図４】図４は、ＣＥＳレジスタの一例を示す図である。
【図５】図５は、情報処理装置の機能ブロック図である。
【図６】図６は、エラーの発生とＵＥＳレジスタに対する書き込みとの関係を説明するための図である。
【図７】図７は、エラーの発生とＵＥＳレジスタに対する書き込みとの関係を説明するための図である。
【図８】図８は、エラーの発生とＣＥＳレジスタに対する書き込みとの関係を説明するための図である。
【図９】図９は、メインの処理フローを示す図である。
【図１０】図１０は、特定処理の処理フローを示す図である。
【図１１】図１１は、解析処理の処理フローを示す図である。
【図１２】図１２は、出力されるデータの一例を示す図である。
【図１３】図１３は、ＰＣＩｅのレイヤについて説明するための図である。
【発明を実施するための形態】
【００１２】
図１に、本実施の形態における情報処理装置１のハードウエア構成を示す。情報処理装置１は、ＣＰＵ１００と、メモリ１０１と、バスブリッジ及び周辺回路等が集積されたチップを含むチップセット１０２と、Ｉ／Ｏ（Input/Output）デバイス１０３と、ＲＯＭ（Read Only Memory）とを有する。ＣＰＵ１００は、複数のポート及びレジスタ１００２を含むＩ／Ｏ部１０００を有する。Ｉ／Ｏ部１０００は、例えばＩｎｔｅｌ社のＩｎｔｅｇｒａｔｅｄ Ｉ／Ｏ等であり、Ｉ／Ｏの機能が集約されている。図１において、網掛けが付された正方形の図形はポートを表す。
【００１３】
ＣＰＵ１００にはメモリ１０１が接続される。また、Ｉ／Ｏ部１０００のポートのうちいずれかのポートにチップセット１０２が接続される。チップセット１０２には、Ｉ／Ｏデバイス１０３と、ＲＯＭ１０４とが接続される。
【００１４】
Ｉ／Ｏ部１０００のポートのうちいずれかのポート（ここでは、ポート１００１）は、ＰＣＩｅのデバイスに接続される。以下では、ポート１００１をルートポートと呼ぶ。なお、ＰＣＩｅについては付録を参照されたい。
【００１５】
ルートポート１００１には、ＰＣＩｅスイッチ１０５が接続される。ＰＣＩｅスイッチ１０５には、ＰＣＩｅスイッチ１０６及びＰＣＩｅスイッチ１０７が接続される。ＰＣＩｅスイッチは、データの中継等を行うデバイスである。
【００１６】
ＰＣＩｅスイッチ１０６には、ＰＣＩｅエンドデバイス１０６１及び１０６２と、ＰＣＩｅスイッチ１０８とが接続される。ＰＣＩｅスイッチ１０８には、ＰＣＩｅエンドデバイス１０８１乃至１０８３が接続される。ＰＣＩｅエンドデバイスは、例えばＰＣＩｅカード等である。
【００１７】
ＰＣＩｅスイッチ１０７には、ＰＣＩｅエンドデバイス１０７１と、ＰＣＩｅスイッチ１０９及び１１０とが接続される。ＰＣＩｅスイッチ１０９には、ＰＣＩｅエンドデバイス１０９１乃至１０９３が接続される。ＰＣＩｅスイッチ１１０には、ＰＣＩｅエンドデバイス１１０１乃至１１０３が接続される。
【００１８】
このように、ルートポート１００１を起点として、ＰＣＩｅデバイスがツリー状に接続される。ツリーは複数の階層を含み、ルートポート１００１に近い階層ほど上位であるとする。
【００１９】
図２に、情報処理装置１内のポートの構成を示す。ポートは、ＰＣＩｅデバイスが訂正できないエラーについての値が格納されるアンコレクタブルエラーステータスレジスタ（以下、ＵＥＳレジスタと呼ぶ）１２０１と、ＰＣＩｅデバイスが訂正可能なエラーについての値が格納されるコレクタブルエラーステータスレジスタ（以下、ＣＥＳレジスタと呼ぶ）１２０２とを有する。
【００２０】
図３に、ＵＥＳレジスタ１２０１の一例を示す。図３の例では、"Surprise Down Error Status"の値と、"Uncorrectable Internal Error Status"の値と、"Unsupported Request Error Status"の値と、"Completion Timeout Status"の値とが格納される。これらの値は、実際にエラーが発生した場合に所定の値（例えば１）に設定される。なお、ＵＥＳレジスタ１２０１には、ＰＣＩｅデバイスが訂正することができない他のエラーについても値が格納されるが、本実施の形態とは直接関係しないので説明を省略する。
【００２１】
図４に、ＣＥＳレジスタ１２０２の一例を示す。図４の例では、"Receiver Error Status"の値と、"Bad TLP Status"の値と、"Header Log Overflow Status"の値と、"Corrected Internal Error Status"の値と、"Advisory Non-Fatal Error Status"の値と、"Replay Timer Timeout Status"の値と、"REPLAY_NUM Rollover Status"の値と、"Bad DLLP Status"の値とが格納される。これらの値は、実際にエラーが発生した場合に所定の値（例えば１）に設定される。なお、ＣＥＳレジスタ１２０２には、ＰＣＩｅデバイスが訂正可能な他のエラーについても値が格納されるが、本実施の形態とは直接関係しないので説明を省略する。
【００２２】
なお、本実施の形態の処理を実行するためのプログラムは、例えばファームウエアに含まれ、ＲＯＭ１０４に格納される。本実施の形態の処理を実行するためのプログラムは、ＣＰＵ１００により実行される際にはＲＯＭ１０４からメモリ１０１に読み出される。図５に、本実施の形態における情報処理装置１の機能ブロック図を示す。図５の例では、情報処理装置１は、割り込み処理部１００３と、ＵＥＳレジスタ読み出し部１００４と、停止処理部１００５と、特定部１００６と、ＣＥＳレジスタ初期化部１００７と、ＣＥＳレジスタ読み出し部１００８とを含む。
【００２３】
割り込み処理部１００３は、ＣＰＵ１００への割り込みが発生した場合に、ＵＥＳレジスタ読み出し部１００４に処理の開始を要求する。ＵＥＳレジスタ読み出し部１００４は、割り込み処理部１００３からの要求に応じ、情報処理装置１内の全ＵＥＳレジスタ１２０１から値を読み出し、特定部１００６に通知する。特定部１００６は、ＵＥＳレジスタ読み出し部１００４からの通知に応じ、エラーの原因を特定する処理を実行する。また、特定部１００６は、発生したエラーがコンプリーションタイムアウトエラーである場合に、ＣＥＳレジスタ初期化部１００７に処理の開始を要求する。ＣＥＳレジスタ初期化部１００７は、特定部１００６からの要求に応じ、情報処理装置１内の全ＣＥＳレジスタ１２０２を初期化（ここでは、エラーが発生していないことを示す値（例えば０）を設定）し、ＣＥＳレジスタ読み出し部１００８に処理の開始を要求する。ＣＥＳレジスタ読み出し部１００８は、ＣＥＳレジスタ初期化部１００７からの要求を受け取ってから所定時間（例えば１秒）が経過した場合、情報処理装置１内の全ＣＥＳレジスタ１２０２から値を読み出し、特定部１００６に通知する。特定部１００６は、ＣＥＳレジスタ読み出し部１００８からの通知に応じ、コンプリーションタイムアウトエラーの原因を特定する処理を実行し、停止処理部１００５に処理の開始を要求する。停止処理部１００５は、特定部１００６からの要求に応じ、情報処理装置１を停止する処理を実行する。
【００２４】
ここで、エラーの通知について説明する。本実施の形態においては、各ＰＣＩｅデバイスが、そのＰＣＩｅデバイス及びそのＰＣＩｅデバイスより下位のＰＣＩｅデバイスで検出されたエラーを上位に通知するため、デバイスコントロールレジスタ及びルートコントロールレジスタのビットが予め設定される。具体的には、デバイスコントロールレジスタの"Error Reporting Enable"のビットが予め１に設定され、ルートコントロールレジスタの"System Error Enable"のビットが予め１に設定される。これにより、エラーを通知するためのＴＬＰがＩ／Ｏ部１０００まで転送される。なお、ＰＣＩＥｘｐｒｅｓｓにおけるエラー通知の詳細については、"PCI Express Base Specification Revision 3.0"の"6.2.6. Error Message Controls"（例えば、http://www.pcisig.com/specifications/pciexpress/base3/）を参照されたい。
【００２５】
Ｉ／Ｏ部１０００は、ルートポート１００１及びルートポート１００１配下において訂正不可のエラーが発生したことを、エラーを通知するためのＴＬＰによって検出した場合に、ＣＰＵ１００への割り込みを発生させる。なお、Ｉ／Ｏ部１０００が発生させる割り込みについては、例えばＩｎｔｅｌ社の"Intel 5520 Chipset and Intel 5500 Chipset Datasheet"（例えば、http://www.intel.com/content/www/us/en/chipsets/5520-5500-chipset-ioh-datasheet.html、又は、http://www.intel.com/content/dam/www/public/us/en/documents/datasheets/5520-5500-chipset-ioh-datasheet.pdf）を参照されたい。本実施の形態においては、訂正不可のエラーが発生した場合に、例えばＳＭＩ（System Management Interrupt）と呼ばれるハードウエア割り込みを発生させるように予め設定される。ハードウエア割り込みの設定の詳細については、例えばＩｎｔｅｌ社の"Intel Core i7 Processor Family for the LGA-2011 Socket Datasheet, Vol. 2"（例えば、http://www.intel.com/content/www/us/en/processors/core/core-i7-lga-2011-datasheet-vol-2.html、又は、"http://www.intel.com/content/dam/doc/datasheet/core-i7-lga-2011-datasheet-vol-2.pdf"）を参照されたい。
【００２６】
Ｉ／Ｏ部１０００は、パケットを受信したルートポートの識別情報等をレジスタ１００２に書き込む。割り込みの発生により呼び出された割り込み処理部１００３は、レジスタ１００２の情報を読み出し、ルートポート１００１又はルートポート１００１の配下において訂正不可のエラーが発生したことを検出する。そして、割り込み処理部１００３は、ＵＥＳレジスタ読み出し部１００４に処理の開始を要求するとともに、読み出されたルートポートの識別情報をＵＥＳレジスタ読み出し部１００４に通知する。
【００２７】
図６乃至図８を用いて、エラーの発生とＵＥＳレジスタ１２０１及びＣＥＳレジスタ１２０２に対する書き込みとの関係について説明する。
【００２８】
まず、図６を用いて、コンプリーションタイムアウトエラーの発生とＵＥＳレジスタ１２０１に対する書き込みとの関係について説明する。図６においては、リクエスタがルートポート１００１であり且つコンプリータがＰＣＩｅエンドデバイス１０７１である場合において、ルートポート１００１が送信したＴＬＰリクエストに対するＴＬＰコンプリーションが所定時間内に返ってこないとする。
【００２９】
この場合、ルートポート１００１のＵＥＳレジスタ１２０１における"Completion Timeout Error"の値が１に設定される。但し、コンプリーションタイムアウトエラーの原因は必ずしもルートポート１００１であるわけではなく、ＰＣＩｅエンドデバイス１０７１、ルートポート１００１とＰＣＩｅエンドデバイス１０７１との間の経路上のＰＣＩｅデバイス、或いは経路上のリンクが原因である場合もある。
【００３０】
図７を用いて、リンクのダウンとＵＥＳレジスタ１２０１に対する書き込みとの関係について説明する。図７においては、リクエスタがルートポート１００１であり且つコンプリータがＰＣＩｅエンドデバイス１０７１である場合において、ＰＣＩｅスイッチ１０５とＰＣＩｅスイッチ１０７との間のリンクがダウンしたとする。
【００３１】
この場合、ＰＣＩｅスイッチ１０５のポートのうちダウンしたリンクに接続されたポートのＵＥＳレジスタ１２０１における"Surprise Down Error Status"の値が１に設定される。この場合は、ダウンしたリンクそのもの（例えば、ＰＣＩｅケーブルなど）が原因である可能性が高い。
【００３２】
図８を用いて、リンクのエラーとＣＥＳレジスタ１２０２に対する書き込みとの関係について説明する。ここで言う「リンクのエラー」とは、ＰＣＩｅデバイスが訂正可能なエラーであり、リンクがダウンしてはいないが、ＰＣＩｅケーブルの問題或いはＰＣＩｅデバイスの嵌合の問題等によってリンクに何らかの不良があることである。図８においては、リクエスタがルートポート１００１であり、コンプリータがＰＣＩｅエンドデバイス１０７１である場合において、ＰＣＩｅスイッチ１０５とＰＣＩｅスイッチ１０７との間のリンクにエラーが発生したとする。
【００３３】
この場合、ＰＣＩｅスイッチ１０５のポートのうちエラーが発生したリンクに接続されたポートのＣＥＳレジスタ１２０２と、ＰＣＩｅスイッチ１０７のポートのうちエラーが発生したリンクに接続されたポートのＣＥＳレジスタ１２０２とに対して書き込みが行われる。具体的には、パケットの送信側のポートのＣＥＳレジスタ１２０２における"Replay Timer Timeout Status"の値及び"REPLAY_NUM Rollover Status"の値と、パケットの受信側のポートのＣＥＳレジスタ１２０２における"Receiver Error Status"の値、"Bad TLP Status"の値及び"Bad DLLP Status"の値とが１に設定される。
【００３４】
次に、図９乃至図１２を用いて、情報処理装置１が実行する処理について説明する。まず、情報処理装置１において訂正できないエラー（Uncorrectable Error）が発生したとする。すると、割り込み処理部１００３は、ルートポート１００１又はルートポート１００１の配下において訂正できないエラーが発生したことを検出する（図９：ステップＳ１）。割り込み処理部１００３は、ＵＥＳレジスタ読み出し部１００４に処理の開始を要求すると共に、レジスタ１００２から読み出したルートポートの識別情報をＵＥＳレジスタ読み出し部１００４に通知する。
【００３５】
ＵＥＳレジスタ読み出し部１００４は、ルートポート１００１及びルートポート１００１の配下にある全ＰＣＩｅデバイスのＵＥＳレジスタ１２０１からデータを読み出す（ステップＳ３）。読み出されたデータは、例えばメモリ１０１に格納される。
【００３６】
ＵＥＳレジスタ読み出し部１００４は、ルートポート１００１及びルートポート１００１の配下の全ＰＣＩｅデバイスのうちいずれかについての"Uncorrectable Internal Error Status"のビットが１であるか判断する（ステップＳ５）。
【００３７】
ルートポート１００１及びルートポート１００１の配下のＰＣＩｅデバイスのうちいずれかについての"Uncorrectable Internal Error Status"のビットが１である場合（ステップＳ５：Ｙｅｓルート）、ＵＥＳレジスタ読み出し部１００４は、読み出されたデータを特定部１００６に通知する。そして、特定部１００６は、"Uncorrectable Internal Error Status"の原因となった箇所を特定し（ステップＳ７）、特定された箇所の識別情報等をメモリ１０１に格納する。ステップＳ７においては、"Uncorrectable Internal Error Status"のビットが１であるＵＥＳレジスタ１２０１を有するルートポート１００１又はＰＣＩｅデバイスが特定される。
【００３８】
ルートポート１００１及びルートポート１００１の配下のＰＣＩｅデバイスのいずれも"Uncorrectable Internal Error Status"のビットが１ではない場合（ステップＳ５：Ｎｏルート）、ＵＥＳレジスタ読み出し部１００４は、ルートポート１００１及びルートポート１００１の配下のＰＣＩｅデバイスのうちいずれかについての"Surprise Down Error Status"のビットが１であるか判断する（ステップＳ９）。
【００３９】
ルートポート１００１及びルートポート１００１の配下のＰＣＩｅデバイスのうちいずれかについての"Surprise Down Error Status"のビットが１である場合（ステップＳ９：Ｙｅｓルート）、ＵＥＳレジスタ読み出し部１００４は、読み出されたデータを特定部１００６に通知する。そして、特定部１００６は、"Surprise Down Error Status"の原因となった箇所を特定し（ステップＳ１１）、特定された箇所の識別情報等をメモリ１０１に格納する。ステップＳ１１においては、"Surprise Down Error Status"のビットが１であるＵＥＳレジスタ１２０１を有するポートが接続されたリンク（すなわち、ダウンしたリンク）が特定される。
【００４０】
ルートポート１００１及びルートポート１００１の配下のＰＣＩｅデバイスのいずれも"Surprise Down Error Status"のビットが１ではない場合（ステップＳ９：Ｎｏルート）、ＵＥＳレジスタ読み出し部１００４は、ルートポート１００１及びルートポート１００１の配下のＰＣＩｅデバイスのうちいずれかについての"Unsupported Request Error Status"のビットが１であるか判断する（ステップＳ１３）。
【００４１】
ルートポート１００１及びルートポート１００１の配下のＰＣＩｅデバイスのうちいずれかについての"Unsupported Request Error Status"のビットが１である場合（ステップＳ１３：Ｙｅｓルート）、ＵＥＳレジスタ読み出し部１００４は、読み出されたデータを特定部１００６に通知する。そして、特定部１００６は、"Unsupported Request Error Status"の原因となった箇所を特定し（ステップＳ１５）、特定された箇所の識別情報等をメモリ１０１に格納する。ステップＳ１５においては、例えば、コンプリータが有するヘッダログレジスタに格納されたＴＬＰリクエストのヘッダに基づき、リクエスタが特定される。
【００４２】
ルートポート１００１及びルートポート１００１の配下のＰＣＩｅデバイスのいずれも"Unsupported Request Error Status"のビットが１ではない場合（ステップＳ１３：Ｎｏルート）、ＵＥＳレジスタ読み出し部１００４は、ルートポート１００１及びルートポート１００１の配下のＰＣＩｅデバイスのうちいずれかについての"Completion Timeout Status"のビットが１であるか判断する（ステップＳ１７）。
【００４３】
ルートポート１００１及びルートポート１００１の配下のＰＣＩｅデバイスのいずれも"Completion Timeout Status"のビットが１ではない場合（ステップＳ１７：Ｎｏルート）、ステップＳ２１の処理に移行する。
【００４４】
ルートポート１００１及びルートポート１００１の配下のＰＣＩｅデバイスのうちいずれかについての"Completion Timeout Status"のビットが１である場合（ステップＳ１７：Ｙｅｓルート）、ＵＥＳレジスタ読み出し部１００４は、読み出されたデータを特定部１００６に通知する。そして、特定部１００６は、特定処理を実行する（ステップＳ１９）。特定処理については図１０を用いて説明する。
【００４５】
まず、特定部１００６は、コンプリーションタイムアウトがルートポート１００１で検出された（すなわち、ルートポート１００１のＵＥＳレジスタ１２０１における"Completion Timeout Status"のビットが１である）か判断する（図１０：ステップＳ３１）。
【００４６】
コンプリーションタイムアウトがルートポート１００１で検出されていない場合（ステップＳ３１：Ｎｏルート）、特定部１００６は、コンプリーションタイムアウトを検出したＰＣＩｅデバイスをコンプリーションタイムアウトの原因に決定する（ステップＳ３３）。そして、特定部１００６は、コンプリーションタイムアウトを検出したＰＣＩｅデバイスの識別情報等をメモリ１０１に格納する。
【００４７】
コンプリーションタイムアウトの原因は、コンプリーションタイムアウトを検出したＰＣＩｅデバイス以外のＰＣＩｅデバイス或いはリンク等である可能性もある。しかし本実施の形態においては、コンプリーションタイムアウトを検出したＰＣＩｅデバイスが原因である可能性、並びに、ＰＣＩｅデバイスの交換及び復旧にかかる工数等を考慮し、コンプリーションタイムアウトを検出したＰＣＩｅデバイスを原因に決定する。
【００４８】
一方、コンプリーションタイムアウトがルートポート１００１で検出された場合（ステップＳ３１：Ｙｅｓルート）、特定部１００６は、解析処理を実行する（ステップＳ３５）。解析処理については、図１１を用いて説明する。
【００４９】
まず、特定部１００６は、ＣＥＳレジスタ初期化部１００７に処理の開始を要求する。これに応じ、ＣＥＳレジスタ初期化部１００７は、ルートポート１００１及びルートポート１００１の配下にある全ＰＣＩｅデバイスのＣＥＳレジスタ１２０２のデータを初期化する（ここでは、エラーが発生していないことを示す値（例えば０）を設定する）（図１１：ステップＳ４１）。
【００５０】
ＣＥＳレジスタ１２０２には、最後に初期化された時点（例えば、情報処理装置１を初めて稼働させた時点）の後に発生した訂正可能なエラーについての情報が残されている。そのため、ステップＳ４１の処理を実行することで、コンプリーションタイムアウトに関係しないエラーの記録を消去し、コンプリーションタイムアウトに関係しないエラーが発生したリンクを特定するのを防げる。
【００５１】
ＣＥＳレジスタ初期化部１００７は、ＣＥＳレジスタ読み出し部１００８に処理の開始を要求する。ＣＥＳレジスタ読み出し部１００８は、ＣＥＳレジスタ初期化部１００７からの要求を受け取ってから一定時間（例えば１秒）待機する（ステップＳ４３）。
【００５２】
一定時間が経過した場合、ＣＥＳレジスタ読み出し部１００８は、ルートポート１００１及びルートポート１００１の配下にある全ＰＣＩｅデバイスのＣＥＳレジスタ１２０２のデータを読み出し（ステップＳ４５）、特定部１００６に通知する。
【００５３】
ステップＳ４５の処理の際には、全ＰＣＩｅデバイスに対してＴＬＰリクエストが転送されるので、不良リンクに接続されたポートのＣＥＳレジスタ１２０２に書き込みが行われる可能性がある。これだけでも不良リンクを特定できるが、ステップＳ４３において一定時間待機すると、より確実に不良リンクを特定できるようになる。なぜなら、一定時間待機している間に、不良リンクがスリープ状態に移行する場合があるからである。不良リンクがスリープ状態に移行した後にステップＳ４５の処理を実行すると、不良リンクについてリンクの再トレーニング（すなわち、リンクトレーニングの再実行）等が行われるため、その際にＣＥＳレジスタ１２０２に対して書き込みが行われる可能性がより高くなる。
【００５４】
なお、予めリクエスタ及びコンプリータを特定できる場合には、ステップＳ４１及びＳ４５において、ＴＬＰリクエスト及びＴＬＰコンプリーションに関係するＰＣＩｅデバイスのみを対象として初期化及び読み出しを実行してもよい。
【００５５】
特定部１００６は、ＣＥＳレジスタ１２０２から読み出したデータを用いて、ＣＥＳレジスタ１２０２に対する書き込みがされたか判断する（ステップＳ４７）。ステップＳ４７においては、いずれかのＣＥＳレジスタ１２０２において、物理層の"Receiver Error Status"の値、並びに、データリンク層の"Replay Timer Timeout Status"の値、"REPLAY_NUM Rollover Status"の値、"Bad TLP Status"の値及び"Bad DLLP Status"の値が１に設定されているか判断する。
【００５６】
ＣＥＳレジスタ１２０２に対する書き込みが検出された場合（ステップＳ４７：Ｙｅｓルート）、特定部１００６は、書き込みが行われたＣＥＳレジスタ１２０２を有するＰＣＩｅデバイスが接続されたリンク（すなわち、エラーが発生したリンク）を特定する（ステップＳ４９）。そして、特定部１００６は、特定されたリンクの識別情報等（又は、そのリンクに接続されたＰＣＩｅデバイスの識別情報等）をメモリ１０１に格納する。
【００５７】
ＣＥＳレジスタ１２０２に対する書き込みがされていない場合（ステップＳ４７：Ｎｏルート）、特定部１００６は、ルートポート１００１及びルートポート１００１の配下にある全ＰＣＩｅデバイスを被疑箇所として特定する（ステップＳ５１）。そして、特定部１００６は、ルートポート１００１及びルートポート１００１の配下にある全ＰＣＩｅデバイスの識別情報等をメモリ１０１に格納する。そして呼び出し元の処理に戻る。
【００５８】
リンクのエラーが発生した場合、データリンク層による再送及び物理層によるリンクの再トレーニング等によってエラーを自動訂正し、リンクのダウンを回避できたとしても、コンプリーションタイムアウトが発生することがある。上で説明した処理によれば、コンプリーションタイムアウトの原因となった不良リンクを特定できるようになる。特にルートポート１００１においてコンプリーションタイムアウトが検出された場合、原因となり得るものの範囲が広いが、本実施の形態によれば原因を絞り込むことができる。
【００５９】
そして、特定部１００６は、メモリ１０１に格納された識別情報等を出力（例えば、情報処理装置１の表示画面に表示）する。例えば、図１２に示すようなデータが出力される。図１２の例では、タイムスタンプと、エラーの重度と、エラーの検出箇所と、エラーの内容を表す情報とが出力される。図１２に示したような情報を出力（例えば、情報処理装置１の表示画面に表示）すれば、管理者等は、エラーの発生原因及び交換されるべきＰＣＩｅデバイス等を認識できるようになる。
【００６０】
図９の説明に戻り、停止処理部１００５は、情報処理装置１を停止するための処理を実行する（ステップＳ２１）。そして処理を終了する。
【００６１】
以上のような処理を実行すれば、管理者等は、交換されるべきＰＣＩｅデバイスを交換して情報処理装置１を復旧し、情報処理装置１を再稼働させることができるようになる。コンプリーションタイムアウトの原因を絞り込めない場合、作業の工数が膨大になる（例えば、多数のＰＣＩｅデバイスを交換する作業が発生する）。しかし、本実施の形態によれば、作業の工数を削減し、情報処理装置１の運用に及ぼす影響を減らせるようになる。
【００６２】
なお、訂正可能なエラーを常時監視する処理を実行するという方法も考えられるが、物理層及びデータリンク層のエラーは頻発することがあるため、監視する処理がＣＰＵ１００及びＰＣＩｅデバイスの通信を占有し、情報処理装置１の運用に影響を及ぼす。そして、そのような影響を回避するために、複雑な制御を行うことになる。しかし、本実施の形態の方法によれば、そのような問題を生じさせることは無い。
【００６３】
以上本発明の一実施の形態を説明したが、本発明はこれに限定されるものではない。例えば、上で説明した情報処理装置１の機能ブロック構成は実際のプログラムモジュール構成に一致しない場合もある。
【００６４】
また、上で説明したデータ保持形態の構成は一例であって、上記のような構成でなければならないわけではない。さらに、処理フローにおいても、処理結果が変わらなければ処理の順番を入れ替えることも可能である。さらに、並列に実行させるようにしても良い。
【００６５】
また、上ではＰＣＩｅのシステムを例にして説明したが、接続の形態が同様であり且つ各接続点がステータスレジスタを有する他のシステムに対して本実施の形態を適用してもよい。
【００６６】
また、上ではルートポート１００１の配下にある全ＰＣＩｅデバイスのＵＥＳレジスタ１２０１及びＣＥＳレジスタ１２０２の読み出し等をしているが、ＴＬＰリクエスト及びＴＬＰコンプリーションに関係するＰＣＩｅデバイスのみを対象にしてもよい。但し、何らかの方法によってリクエスタ及びコンプリータの両方を予め特定しておくことが前提である。
【００６７】
［付録］
本付録においては、ＰＣＩｅについて説明する。
【００６８】
１．概要
ＰＣＩｅは、ＰＣＩ−ＳＩＧにより策定された、ＰＣＩバス規格に続くインタフェース規格である。ＰＣＩバス規格においては接続がバス型であるのに対し、ＰＣＩｅにおいては接続がポイントツーポイント（Point to Point）型である。また、データの転送は、ＰＣＩバス規格においてはハンドシェイクによって行われるのに対し、ＰＣＩｅにおいてはネットワークにおけるパケットの送受信によって行われる。
【００６９】
ＰＣＩｅデバイスは、ルートポート、ポート及びエンドデバイス等の機能毎にコンフィグレーション空間を有し、コンフィグレーション空間は機能にアクセスするために使用される。コンフィグレーション空間は、ＵＥＳレジスタ１２０１、ＣＥＳレジスタ１２０２、及びエラー発生時のパケット等が格納されるヘッダログレジスタ等を含む。
【００７０】
２．ＰＣＩｅのレイヤについて
図１３に、ＰＣＩｅのレイヤを示す。図１３に示すように、ＰＣＩｅにおいては、物理層と、データリンク層と、トランザクション層と、ソフトウエア層とが定義されている。
【００７１】
物理層は、データリンク層からデータを受け取り、物理的な信号として送出する役割を有する。ここで、物理層は、上位層から様々な処理を施された８ビットのデータを１０ビットのデータに変換してから送出を行う。送出されるデータは、上位層のＴＬＰ及びＤＬＬＰ（Data Link Layer Packet）と、オーダードセットと呼ばれる物理層のパケットとを含む。また、物理層は、通信相手からの信号を受け取り、データリンク層へデータを引き渡す。また、物理層は、無効な１０ビットシンボルを検出した場合、受信したシンボルが無効であることをレシーバーエラー（Receiver Error）としてデータリンク層に通知することができる。
【００７２】
データリンク層の主な目的は、物理的なリンクで結ばれたふたつのコンポーネント間においてＴＬＰを確実に交換する仕組みを提供することである。そのため、ＤＬＰには、ＴＬＰにシーケンス番号とＬＣＲＣ（Link Cyclic Redundancy Check）とが付与される。パケットを受信したＰＣＩｅデバイスは、ＬＣＲＣ及びシーケンス番号を参照し、ＴＬＰがシーケンス番号の順に届いたことを確認する。エラー等によってＴＬＰが欠落した場合、復旧のためにリトライが実行される。パケットの再送を行っても送達が確認されない場合、リンクが正常ではないとみなされる。その場合、データリンク層は物理層にリンクの再トレーニングを指示する。物理層におけるリンクの再トレーニングが失敗した場合、リンクダウンが発生したとみなされる。
【００７３】
トランザクション層の主な役割は、ＴＬＰリクエスト（例えばメモリ、Ｉ／Ｏ及びコンフィグレーション空間についての書き込み及び読み出しの要求）及びエラーの通知等に関するパケットをトランザクション層間で交換し、上位のソフトウエアに対してＰＣＩと互換性のある機能を提供することである。ＴＬＰリクエストはリクエスタからコンプリータに転送され、コンプリータはＴＬＰコンプリーションをリクエスタに返す。通常、ＴＬＰはＰＣＩｅエンドデバイス或いはルートコンプレックス（すなわち、ルートポートを含むデバイス）といった末端のＰＣＩｅデバイスで生成され、ＰＣＩｅスイッチ等を経由して宛先のＰＣＩｅデバイスに届けられる。リクエスタのトランザクション層とコンプリータのトランザクション層との間の接続は、データリンク層のようなポイントツーポイント型ではなく、エンドツーエンド（End to End）型である。また、トランザクション層においては、ＥＣＲＣ（End-to-end Cyclic Redundancy Check）と呼ばれるＴＬＰのＣＲＣが使用される。
【００７４】
ソフトウエア層はトランザクション層の上位にあり、ＢＩＯＳ（Basic Input/Output System）、ファームウエア、ＯＳ（Operating System）、ドライバ及びアプリケーション等である。
【００７５】
３．コンプリーションタイムアウトについて
ＰＣＩバス規格において、ＴＬＰの送達は、データリンク層におけるシーケンス番号及びＬＣＲＣの付与、並びに、Ａｃｋ及びＮａｃｋを使用したリトライによって確認される。また、ＰＣＩｅにおいては、トランザクション層において、クレジットによるフロー制御によりＴＬＰのバッファオーバーフローを防ぐ。しかし、トランザクション層のフロー制御は、物理的なリンクで接続されたＰＣＩｅデバイス間でのみ行われる。よって、ポイントツーポイントの制御でありエンドツーエンドの制御ではなく、ＴＬＰが宛先に届いたことを保証するものではない。なお、ＰＣＩＥｘｐｒｅｓｓのトランザクション層におけるフロー制御については、例えば、"PCI Express Base Specification Revision 3.0"の"2.6. Ordering and Receive Buffer Flow Control"（例えば、http://www.pcisig.com/specifications/pciexpress/base3/）を参照されたい。
【００７６】
つまり、ＰＣＩｅにおいては、データリンク間の送達は保証されるが、複数のデータリンクを経由する場合の送達は保証されない。よって、ＴＬＰリクエスト及びＴＬＰコンプリーションは、途中の受信者までは到達するが、最終的な受信者までは到達しないということが起こり得る。このような問題は、ＰＣＩｅスイッチが多段に接続された大規模なシステムである場合に特に発生しやすくなる。
【００７７】
このような問題に関して、ＰＣＩｅにおいてはコンプリーションタイムアウトが定義されている。リクエスタのトランザクション層においてＴＬＰリクエストを送信してから経過した時間を監視し、経過した時間が所定時間より長い場合にはコンプリーションタイムアウトがリクエスタにおいて検出される。コンプリーションタイムアウトはトランザクション単位のエラーではなく、ルートポート及びエンドデバイスにおいて検出されるエラーである。つまり、ＰＣＩｅにおいて、コンプリーションタイムアウトは、トランザクション層がデバイス単位で検出するエラーである。コンプリーションタイムアウトが発生したトランザクションを特定することができるのは、ソフトウエア層である。
【００７８】
ＰＣＩｅにおいては、エラー毎に重度を定義することが可能である。従って、コンプリーションタイムアウトを、システムの稼働を阻む致命的なエラー（Fatal Error）として取り扱うこと、ソフトウエア層の処理によってリカバリが可能であるエラー（Non-Fatal Error）として取り扱うこと、及び、エラーとして取り扱わないことのいずれも可能である。
【００７９】
よって、ソフトウエア層にFatal Errorとして通知することで、装置を速やかに停止するという対処を行うことができる。また、ソフトウエア層にNon-Fatal Errorとして通知をすることで、ソフトウエア層がそのトランザクションについてリトライを行い、復旧を試みることもできる。また、ソフトウエア層にエラーの通知を行わず、ソフトウエア層がタイムアウトの監視及びリトライを実行することによってトランザクションを制御することもできる。
【００８０】
以上述べた本発明の実施の形態をまとめると、以下のようになる。
【００８１】
本実施の形態に係る原因特定方法は、複数の装置を有する情報処理システムにおいて実行される。そして、本原因特定方法は、複数の装置のうち第１の装置が、（Ａ）第１の装置が送信した要求に対する応答を所定時間内に受信しない場合、複数の装置のうち少なくとも要求の転送又は応答の転送に関係する装置から、当該装置の記憶部に格納されている、当該装置が接続されたリンクでエラーが発生したか否かを示す情報を取得し、（Ｂ）取得した情報に基づき、エラーが発生したリンク又は当該リンクに接続された装置を特定する処理を含む。
【００８２】
例えばリンクの不良等が発生すると、応答を所定時間内に受信しない（すなわち、タイムアウトになる）場合がある。そこで、上で述べたようにすれば、タイムアウトの原因を特定できるようになる。
【００８３】
また、装置が接続されたリンクでエラーが発生したか否かを示す情報を取得する処理において、（ａ１）複数の装置のうち少なくとも要求の転送又は応答の転送に関係する装置の記憶部に、当該装置が接続されたリンクでエラーが発生していないことを示す情報を設定し、設定した時点から予め定められた時間が経過した後に、当該装置の記憶部から情報を取得してもよい。記憶部には、タイムアウトに関係しないエラー（例えば既に解消されたエラー等）についての情報が格納されている場合があるため、上記のように設定をすればタイムアウトに関係しないエラーを誤って検出することが無くなる。そして、タイムアウトに関係するエラーは、記憶部から情報を取得する際の通信によって検出され、記憶部にはエラーが発生したことを示す情報が格納される。よって、上で述べたようにすれば、タイムアウトに関係しないエラーを排除し、タイムアウトに関係するエラーを検出できるようになる。
【００８４】
また、上で述べた情報処理システムは、ＰＣＩ Ｅｘｐｒｅｓｓのシステムであり、上で述べた第１の装置は、ルートポートを有するＣＰＵであり、上で述べた記憶部は、訂正可能なエラーについての情報を格納するレジスタであってもよい。ルートポートを有するＣＰＵでタイムアウトが検出されると、ルートポート、ルートポートの配下にある全エンドデバイス、及び経路上のリンク等が被疑箇所になり、原因の特定に多大な工数がかかる。そこで、上で述べたようにすれば、タイムアウトの原因を容易に特定できるようになる。
【００８５】
また、本原因特定方法は、上で述べた第１の装置が、（Ｃ）複数の装置のうちＰＣＩ Ｅｘｐｒｅｓｓのエンドデバイスである第２の装置が送信した要求に対する応答を第２の装置が所定時間内に受信しないことを検出した場合に、第２の装置を原因に決定する処理をさらに含んでもよい。エンドデバイスにおいてタイムアウトが検出された場合は、ルートポートを有するＣＰＵの場合と比較すると、そのエンドデバイス自体がタイムアウトの原因である可能性が高い。そこで、上で述べたようにすれば、適切な対応を行えるようになる。
【００８６】
また、上で述べた複数の装置の各々は、訂正できないエラーについての情報を格納する第２のレジスタを有し、第２の装置を原因に決定する処理において、（ｃ１）第２のレジスタに格納されている情報に基づき、複数の装置の中から、所定時間内に応答を受信しない装置を検出してもよい。ＰＣＩ Ｅｘｐｒｅｓｓにおいては、タイムアウト（例えばコンプリーションタイムアウト）は訂正できないエラーとして検出される。従って、上で述べたようにすれば、タイムアウトを適切に検出できるようになる。
【００８７】
なお、上記方法による処理をプロセッサに行わせるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブルディスク、ＣＤ−ＲＯＭ、光磁気ディスク、半導体メモリ、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。尚、中間的な処理結果はメインメモリ等の記憶装置に一時保管される。
【００８８】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【００８９】
（付記１）
複数の装置を有する情報処理システムにおいて、
前記複数の装置のうち第１の装置が、
前記第１の装置が送信した要求に対する応答を所定時間内に受信しない場合、前記複数の装置のうち少なくとも前記要求の転送又は前記応答の転送に関係する装置から、当該装置の記憶部に格納されている、当該装置が接続されたリンクでエラーが発生したか否かを示す情報を取得し、
取得した前記情報に基づき、エラーが発生したリンク又は当該リンクに接続された装置を特定する
処理を実行する原因特定方法。
【００９０】
（付記２）
前記装置が接続されたリンクでエラーが発生したか否かを示す情報を取得する処理において、前記複数の装置のうち少なくとも前記要求の転送又は前記応答の転送に関係する装置の記憶部に、当該装置が接続されたリンクでエラーが発生していないことを示す情報を設定し、設定した時点から予め定められた時間が経過した後に、当該装置の記憶部から前記情報を取得する
付記１記載の原因特定方法。
【００９１】
（付記３）
前記情報処理システムは、ＰＣＩ Ｅｘｐｒｅｓｓのシステムであり、
前記第１の装置は、ルートポートを有するＣＰＵであり、
前記記憶部は、訂正可能なエラーについての情報を格納するレジスタである
付記１又は２記載の原因特定方法。
【００９２】
（付記４）
前記第１の装置が、
前記複数の装置のうちＰＣＩ Ｅｘｐｒｅｓｓのエンドデバイスである第２の装置が送信した要求に対する応答を前記第２の装置が前記所定時間内に受信しないことを検出した場合に、前記第２の装置を原因に決定する
処理をさらに実行する付記３記載の原因特定方法。
【００９３】
（付記５）
前記複数の装置の各々は、訂正できないエラーについての情報を格納する第２のレジスタを有し、
前記第２の装置を原因に決定する処理において、前記第２のレジスタに格納されている情報に基づき、前記複数の装置の中から、前記所定時間内に応答を受信しない装置を検出する
付記４記載の原因特定方法。
【００９４】
（付記６）
複数の装置
を有し、
前記複数の装置の各々は、
当該装置が接続されたリンクでエラーが発生したか否かを示す情報を格納する記憶部
を有し、
前記複数の装置のうち第１の装置は、
前記第１の装置が送信した要求に対する応答を所定時間内に受信しない場合、前記複数の装置のうち少なくとも前記要求の転送又は前記応答の転送に関係する装置から、当該装置の記憶部に格納されている前記情報を取得する取得部と、
取得した前記情報に基づき、エラーが発生したリンク又は当該リンクに接続された装置を特定する特定部と、
を有する情報処理システム。
【００９５】
（付記７）
送信した要求に対する応答を所定時間内に受信しない場合、少なくとも前記要求の転送又は前記応答の転送に関係する装置から、当該装置の記憶部に格納されている、当該装置が接続されたリンクでエラーが発生したか否かを示す情報を取得し、
取得した前記情報に基づき、エラーが発生したリンク又は当該リンクに接続された装置を特定する
処理をプロセッサに実行させるための原因特定プログラム。
【符号の説明】
【００９６】
１  情報処理装置    １００  ＣＰＵ
１０１  メモリ    １０２  チップセット
１０３  Ｉ／Ｏデバイス    １０４  ＲＯＭ
１０００  Ｉ／Ｏ部    １００１  ルートポート
１００２  レジスタ    １００３  割り込み処理部
１００４  ＵＥＳレジスタ読み出し部    １００５  停止処理部
１００６  特定部    １００７  ＣＥＳレジスタ初期化部
１００８  ＣＥＳレジスタ読み出し部
１０５，１０６，１０７，１０８，１０９，１１０  ＰＣＩｅスイッチ
１０６１，１０６２，１０７１，１０８１，１０８２，１０８３，１０９１，１０９２，１０９３，１１０１，１１０２，１１０３  ＰＣＩｅエンドデバイス
１２０１  ＵＥＳレジスタ    １２０２  ＣＥＳレジスタ
【図１】
0006427979.tif 000002
【図２】
0006427979.tif 000003
【図３】
0006427979.tif 000004
【図４】
0006427979.tif 000005
【図５】
0006427979.tif 000006
【図６】
0006427979.tif 000007
【図７】
0006427979.tif 000008
【図８】
0006427979.tif 000009
【図９】
0006427979.tif 000010
【図１０】
0006427979.tif 000011
【図１１】
0006427979.tif 000012
【図１２】
0006427979.tif 000013
【図１３】
0006427979.tif 000014