(57)【特許請求の範囲】
【請求項１】
それぞれのメモリおよびキャッシュを管理する演算処理装置を１または２以上有するノードが複数接続される情報処理システムにおいて、
前記演算処理装置は、
検出したエラーへの対応を指示するリクエスト生成部と、
前記メモリ上の所定単位のデータごとに管理される状態管理情報を更新するディレクトリ制御部と、
前記状態管理情報に応じて、自身の演算処理装置以外の演算処理装置に対するコマンドを発行するコマンド実行部と、
自身の演算処理装置以外の演算処理装置のコマンド実行部から発行されたコマンドを実行するキャッシュ制御部と、をそれぞれ備え、
第１の演算処理装置のリクエスト生成部は、
第２の演算処理装置が管理するメモリ上の前記データにアクセスをしてエラーを検出した場合、前記データに対する前記状態管理情報の更新を、前記第２の演算処理装置の前記ディレクトリ制御部に指示し、
前記第２の演算処理装置の前記コマンド実行部は、自ノードまたは他ノードの他の演算処理装置に対して、持ち出した前記データの破棄を指示するコマンドを発行し、
前記データを持ち出している演算処理装置の前記キャッシュ制御部は、前記データの破棄を指示するコマンドを受け取ると、持ち出した前記データを破棄し、破棄の結果を前記第２の演算処理装置に送信し、
前記第２の演算処理装置の前記ディレクトリ制御部は、前記データを持ち出している演算処理装置から前記破棄の結果として前記破棄が正常に実行された旨の通知を受信すると、前記データに対する前記状態管理情報を前記データが正常であることを示す情報に更新する、
情報処理システム。
【請求項２】
前記第２の演算処理装置の前記コマンド実行部は、
前記状態管理情報から前記データを持ち出した演算処理装置を特定できる場合には、前記特定された演算処理装置に対して、前記データの破棄を指示するコマンドを発行する、
請求項１に記載の情報処理システム。
【請求項３】
前記第２の演算処理装置の前記コマンド実行部は、
あるノードの故障によりエラーを検出した場合に、故障したノード以外のノードが有する演算処理装置に対して、前記データの破棄を指示するコマンドを発行する、
請求項１に記載の情報処理システム。
【請求項４】
前記第１の演算処理装置の前記リクエスト生成部は、前記データに対する前記状態管理情報の更新を指示する前に、前記データの状態が正常か否かの判定を、前記第２の演算処理装置に指示し、
前記第２の演算処理装置の前記ディレクトリ制御部は、前記第１の演算処理装置からの指示を受け付け、前記状態管理情報から前記データの状態が正常か否かを判定し、判定の結果を前記第１の演算処理装置に送信し、
前記第１の演算処理装置は、前記データの状態が正常でないと判定された場合に、前記データに対する前記状態管理情報の更新を、前記第２の演算処理装置の前記ディレクトリ制御部に指示する、
請求項１から３のいずれか一項に記載の情報処理システム。
【請求項５】
前記第２の演算処理装置のコマンド実行部は、前記データの状態が正常であると判定された場合に、前記データを持ち出している演算処理装置に前記データの書き戻しを指示するコマンドを発行し、
前記データの書き戻しを指示するコマンドを受け取った演算処理装置の前記キャッシュ制御部は、持ち出した前記データを前記第２の演算処理装置に送信する、
請求項４に記載の情報処理システム。
【請求項６】
それぞれのメモリおよびキャッシュを管理する演算処理装置を１または２以上有するノードが複数接続される情報処理システムの第１の演算処理装置は、第２の演算処理装置が管理するメモリ上の所定単位のデータにアクセスをしてエラーを検出した場合、前記所定単位のデータ毎に管理される状態管理情報の更新を、前記第２の演算処理装置に指示し、
前記第２の演算処理装置は、前記第１の演算処理装置からの指示に応じて、自ノードまたは他ノードの他の演算処理装置に対して、持ち出した前記データの破棄を指示するコマンドを発行し、
前記他の演算処理装置は、前記データの破棄を指示するコマンドを受け取ると、前記データを持ち出していれば、持ち出した前記データを破棄し、破棄の結果を前記第２の演算処理装置に送信し、
前記第２の演算処理装置は、前記データを持ち出している演算処理装置から前記破棄の結果として前記破棄が正常に実行された旨の通知を受信すると、前記データに対する前記状態管理情報を前記データが正常であることを示す情報に更新する、
情報処理方法。
【請求項７】
それぞれのメモリおよびキャッシュを管理する演算処理装置を１または２以上有するノードが複数接続される情報処理システムの第１の演算処理装置は、第２の演算処理装置が管理するメモリ上の所定単位のデータにアクセスをしてエラーを検出した場合、前記所定単位のデータ毎に管理される状態管理情報の更新を、前記第２の演算処理装置に指示し、
前記第２の演算処理装置は、前記第１の演算処理装置からの指示に応じて、自ノードまたは他ノードの他の演算処理装置に対して、持ち出した前記データの破棄を指示するコマンドを発行し、
前記他の演算処理装置は、前記データの破棄を指示するコマンドを受け取ると、前記データを持ち出していれば、持ち出した前記データを破棄し、破棄の結果を前記第２の演算処理装置に送信し、
前記第２の演算処理装置は、前記データを持ち出している演算処理装置から前記破棄の
結果として前記破棄が正常に実行された旨の通知を受信すると、前記データに対する前記状態管理情報を前記データが正常であることを示す情報に更新する、
ことを各演算処理装置に実行させるための情報処理プログラム。
【請求項８】
それぞれのメモリおよびキャッシュを管理する演算処理装置を１または２以上有するノードを複数備える情報処理装置において、
前記演算処理装置は、
検出したエラーへの対応を指示するリクエスト生成部と、
前記メモリ上の所定単位のデータごとに管理される状態管理情報を更新するディレクトリ制御部と、
前記状態管理情報に応じて、自身の演算処理装置以外の演算処理装置に対するコマンドを発行するコマンド実行部と、
自身の演算処理装置以外の演算処理装置のコマンド実行部から発行されたコマンドを実行するキャッシュ制御部と、をそれぞれ備え、
第１の演算処理装置のリクエスト生成部は、
第２の演算処理装置が管理するメモリ上の前記データにアクセスをしてエラーを検出した場合、前記データに対する前記状態管理情報の更新を、前記第２の演算処理装置に指示し、
前記第２の演算処理装置のコマンド実行部は、自ノードまたは他ノードの他の演算処理装置に対して、持ち出した前記データの破棄を指示するコマンドを発行し、
前記データを持ち出している演算処理装置の前記キャッシュ制御部は、前記データの破棄を指示するコマンドを受け取ると、持ち出した前記データを破棄し、破棄の結果を前記第２の演算処理装置に送信し、
前記第２の演算処理装置の前記ディレクトリ制御部は、前記データを持ち出している演算処理装置から前記破棄の結果として前記破棄が正常に実行された旨の通知を受信すると、前記データに対する前記状態管理情報を前記データが正常であることを示す情報に更新する、
情報処理装置。
【請求項９】
それぞれのメモリおよびキャッシュを管理する演算処理装置を複数備える情報処理システムにおいて、
前記演算処理装置は、
検出したエラーへの対応を指示するリクエスト生成部と、
前記メモリ上の所定単位のデータごとに管理される状態管理情報を更新するディレクトリ制御部と、
前記状態管理情報に応じて、自身の演算処理装置以外の演算処理装置に対するコマンドを発行するコマンド実行部と、
自身の演算処理装置以外の演算処理装置のコマンド実行部から発行されたコマンドを実行するキャッシュ制御部と、をそれぞれ備え、
第１の演算処理装置のリクエスト生成部は、
第２の演算処理装置が管理するメモリ上の前記データにアクセスをしてエラーを検出した場合、前記データに対する前記状態管理情報の更新を、前記第２の演算処理装置に指示し、
前記第２の演算処理装置のコマンド実行部は、自身の演算処理装置以外の演算処理装置に対して、持ち出した前記データの破棄を指示するコマンドを発行し、
前記データを持ち出している演算処理装置の前記キャッシュ制御部は、前記データの破棄を指示するコマンドを受け取ると、持ち出した前記データを破棄し、破棄の結果を前記第２の演算処理装置に送信し、
前記第２の演算処理装置の前記ディレクトリ制御部は、前記データを持ち出している演算処理装置から前記破棄の結果として前記破棄が正常に実行された旨の通知を受信すると
、前記データに対する状態管理情報を前記データが正常であることを示す情報に更新する、
情報処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理システム、情報処理方法、情報処理プログラムおよび情報処理装置に関する。
【背景技術】
【０００２】
複数の演算処理装置が主記憶装置を共有する技術として、Symmetric Multi-Processor
（ＳＭＰ）が知られている。ＳＭＰの技術が適用された情報処理システムは、例えば、演算処理装置と主記憶装置とを有する複数のノードを同一のバスで接続し、バスを介して、各演算処理装置が各主記憶装置を共有する。
【０００３】
情報処理システムは、主記憶装置（以下、メモリともいう）の共有により各ノードの演算処理装置がキャッシュしたデータのコヒーレンシを保持するため、ディレクトリ方式を用いることができる。ディレクトリ方式は、自身の演算処理装置のデータが他のどの演算処理装置にキャッシュされているかを示す情報を自身のメモリ内に保持し、キャッシュされたデータの情報処理システム内におけるコヒーレンシを保持する方式である。コヒーレンシは、複数キャッシュ間での共有リソースの一貫性を意味する。
【０００４】
ＳＭＰでは、複数ノード間でメモリを共有するため、一つのノードの故障は他のノードの停止につながる。ノードの故障による影響範囲を抑える手段として、メモリを共有メモリとローカルメモリとに区分し、他のノードの演算処理装置からは、ローカルメモリを参照できないようにする共有メモリシステムが知られている。共有メモリシステムは、共有メモリを、ノード間のデータの通信手段として使用する。
【０００５】
共有メモリシステムにおいて、エラーの検出およびエラー発生時の処理として、以下のような技術が知られている。複数のノードをクロスバスイッチ等のノード間接続装置により接続したシステムにおいて、パケットの通信の滞留が発生した場合、通信経路を変更して処理が継続される。クロスバスイッチは、複数の演算処理装置やメモリの間でデータをやり取りする際に、複数の通信路間の交点にスイッチを設け、これらのスイッチ群を制御することで、経路を選択する装置である。ノードが送信したリクエストは、クロスバスイッチから自身のノードおよび他のノードへ送信される。リクエストを送信したノードは、リクエストを送信してから受信するまでの時間を計測し、タイムアウトを検出することで、パケットの通信の滞留に起因するエラーが検出される。
【０００６】
また、エラーを検出した場合、エラーが発生したキャッシュラインを利用しないために、ディレクトリにエラーマークを設定する技術が知られる。キャッシュラインは、キャッシュに保持するデータの単位である。複数のCentral Processing Unit（ＣＰＵ）が、デ
ィレクトリ方式によってキャッシュメモリを制御する共有メモリシステムにおいて、あるＣＰＵがエラーで停止した時、タイムアウトやディレクトリのエラーマークにより、エラーが検出される。また、ディレクトリ方式において経路故障によりデータのコヒーレンシが保持されなくなった場合にも、エラーが検出される。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１４−１９７４０２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、ノードの異常や経路故障によってエラーが検出されても、キャッシュされたデータは破棄されず、ディレクトリは正常化されないため、コヒーレンシの異常状態は回復されない。エラーの原因となったデータに再度アクセスされるまでに、キャッシュの破棄とディレクトリの正常化がされなければ、再びエラーが検出される。以上のように、従来の技術では、コヒーレンシが保持されなくなった場合、キャッシュコヒーレンシの異常状態は検出されるが、システムが再起動されなければ異常状態は回復されない。
【０００９】
本発明の一態様は、共有メモリシステムにおいて、キャッシュコヒーレンシの異常状態から回復する技術を提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明の態様の一つは、それぞれのメモリおよびキャッシュを管理する演算処理装置を１または２以上有するノードが複数接続される情報処理システムによって例示される。演算処理装置は、検出したエラーへの対応を指示するリクエスト生成部と、メモリ上の所定単位のデータごとに管理される状態管理情報を更新するディレクトリ制御部と、状態管理情報に応じて、自身の演算処理装置以外の演算処理装置に対するコマンドを発行するコマンド実行部と、自身の演算処理装置以外の演算処理装置のコマンド実行部から発行されたコマンドを実行するキャッシュ制御部と、をそれぞれ備え、第１の演算処理装置のリクエスト生成部は、第２の演算処理装置が管理するメモリ上のデータにアクセスをしてエラーを検出した場合、該データに対する前記状態管理情報の更新を、第２の演算処理装置のディレクトリ制御部に指示し、第２の演算処理装置のコマンド実行部は、自ノードまたは他ノードの他の演算処理装置に対して、持ち出した該データの破棄を指示するコマンドを発行し、該データを持ち出している演算処理装置のキャッシュ制御部は、該データの破棄を指示するコマンドを受け取ると、持ち出した該データを破棄し、破棄の結果を第２の演算処理装置に送信し、第２の演算処理装置のディレクトリ制御部は、該データを持ち出している演算処理装置から受け取った破棄の結果に基づいて、該データの状態管理情報を更新する。
【発明の効果】
【００１１】
本発明の一態様によれば、共有メモリシステムにおいて、キャッシュコヒーレンシの異常状態から回復することが可能となる。
【図面の簡単な説明】
【００１２】
【図１】共有メモリを有する情報処理システムの構成例を示す図である。
【図２】共有メモリを有する情報処理システムの機能構成の例を示す図である。
【図３】他のノードのデータが持ち出された例を示す図である。
【図４】データを持ち出したＣＰＵを含むノードが故障した例を示す図である。
【図５】データが持ち出されたＣＰＵを含むノードが故障した例を示す図である。
【図６】ノード間の経路故障の例を示す図である。
【図７】複数のＣＰＵにデータが持ち出された例を示す図である。
【図８】複数のＣＰＵにデータが持ち出され、データを持ち出したＣＰＵを含むノードの一つが故障した例を示す図である。
【図９】ディレクトリの正常化の処理例を示す図である。
【図１０】リクエスターＣＰＵの回路を例示する図である。
【図１１】実施形態１におけるＨｏｍｅ  ＣＰＵおよびキャッシュＣＰＵの回路を例示する図である。
【図１２Ａ】アドレス指定レジスタのレジスタフォーマットの例を示す図である。
【図１２Ｂ】コマンド指定レジスタのレジスタフォーマットの例を示す図である。
【図１２Ｃ】実施形態１におけるステータス表示レジスタのレジスタフォーマットの例を示す図である。
【図１３】実施形態２におけるＨｏｍｅ  ＣＰＵおよびキャッシュＣＰＵの回路を例示する図である。
【図１４】実施形態２におけるディレクトリ制御部の動作判定条件の例を示す図である。
【図１５】実施形態２におけるステータス表示レジスタのレジスタフォーマット例を示す図である。
【図１６】データを持ち出したＣＰＵを含むノードが故障した場合の動作フローの例を示す図である。
【図１７】経路故障の場合の動作フローの例を示す図である。
【図１８】キャッシュの誤り訂正ができないエラーが発生した場合の動作フローの例を示す図である。
【発明を実施するための形態】
【００１３】
以下、図面に基づいて、本発明の実施の形態を説明する。以下の実施形態の構成は例示であり、本発明は実施形態の構成に限定されない。
【００１４】
〔実施形態１〕
実施形態１において、情報処理システムは、エラーが検出された場合に、エラーの原因となったデータを持ち出したＣＰＵのキャッシュから、持ち出されたデータを破棄し、当該データのディレクトリを正常化する。ディレクトリの情報は、メモリから持ち出されるデータの所定単位（以下、キャッシュラインともいう）ごとに管理される情報である。ディレクトリの正常化は、データが持ち出されたＣＰＵのディレクトリにおいて、あるキャッシュラインに対してエラーマークが設定されていた場合、当該キャッシュラインのデータが正常であることを示す値を設定する処理である。
【００１５】
＜システム構成＞
図１は、共有メモリを有する情報処理システム１の構成例を示す図である。情報処理システム１は、共有メモリシステムである。複数のビルディングブロック４（以下、ノード４ともいう）は、ＸＢ（クロスバスイッチ）５により接続される。情報処理システム１は、複数のビルディングブロック４を備える情報処理装置１であってもよい。
【００１６】
ノード４は、１または２以上のＣＰＵ  ２、および各ＣＰＵ  ２に対応するメモリ３を含む。各ＣＰＵ  ２は、複数のＸＢ  ｃｈｉｐ  ４１を介して、クロスバスイッチ５に接続される。
【００１７】
ＣＰＵ  ２は、メモリコントローラ２１、キャッシュ２２、機能レジスタ２３および外部Ｉｎｔｅｒｆａｃｅ（ＩＦ）２４を含む。メモリコントローラ２１は、メモリ３とのデータの受け渡しおよびディレクトリ３３の更新等を制御する。
【００１８】
キャッシュ２２は、処理に利用するためにメモリから読み出したデータを一時的に保持する。機能レジスタ２３は、データのアドレス、ソフトウェアからのコマンド、コマンドの指示による処理結果を記憶する。外部ＩＦ  ２４は、ＣＰＵ  ２の外部とのインタフェースである。
【００１９】
メモリ３は、共有メモリ３１、Ｌｏｃａｌメモリ３２およびディレクトリ３３を含む。共有メモリ３１は、同じノード４内の他のＣＰＵ  ２、または他のノード４のＣＰＵ  ２との間で、相互に参照可能なメモリ領域である。
【００２０】
Ｌｏｃａｌメモリ３２は、同じノード４内の他のＣＰＵ  ２との間で、相互に参照可能
なメモリ領域である。Ｌｏｃａｌメモリ３２は、他のノード４のＣＰＵ  ２からは参照されない。
【００２１】
ディレクトリ３３は、持ち出される所定単位のデータごとに、データの状態、およびデータを持ち出したＣＰＵ  ２の情報等を記憶する。データへのアクセスによりエラーが検出されると、対応するディレクトリ３３にはエラーマークが設定される。ディレクトリ３３は、「状態管理情報」の一例である。
【００２２】
なお、情報処理システム１または情報処理装置１の構成は一例であり、上記に限られない。実施の形態に応じて適宜構成要素の省略、置換または追加が可能である。例えば、情報処理システム１において、各ノード４は、クロスバスイッチ５によって接続されるのではなく、直結していてもよい。また、情報処理システム１は、複数のＣＰＵ  ２を備え、各ＣＰＵ  ２がノード４として動作してもよい。
【００２３】
＜機能構成＞
図２は、共有メモリを有する情報処理システム１の機能構成の例を示す図である。情報処理システム１は、リクエスターＣＰＵ  ２Ａ、Ｈｏｍｅ  ＣＰＵ  ２ＢおよびキャッシュＣＰＵ  ２Ｃを含む。リクエスターＣＰＵ  ２Ａ、Ｈｏｍｅ  ＣＰＵ  ２ＢおよびキャッシュＣＰＵ  ２Ｃは、それぞれ異なるノード４に含まれるＣＰＵ  ２であってもよく、同じノード４に含まれるＣＰＵ  ２であってもよい。また、リクエスターＣＰＵ  ２Ａ、Ｈｏｍｅ  ＣＰＵ  ２ＢおよびキャッシュＣＰＵ  ２Ｃは、互いに同じＣＰＵ  ２であってもよい。
【００２４】
リクエスターＣＰＵ  ２Ａ、Ｈｏｍｅ  ＣＰＵ  ２ＢおよびキャッシュＣＰＵ  ２Ｃは、互いに異なるノード４に含まれるＣＰＵ  ２である場合には、外部バスＩｎｔｅｒｆａｃｅ（Ｉ／Ｆ）部９０を介して接続される。
【００２５】
リクエスターＣＰＵ  ２Ａは、ソフトウェアＩｎｔｅｒｆａｃｅ（Ｉ／Ｆ）部６０、リクエスト生成部６１およびリクエスト回収部６２を含む。リクエスターＣＰＵ  ２Ａは、「第１の演算処理装置」の一例である。
【００２６】
ソフトウェアＩ／Ｆ部６０は、ソフトウェアからのコマンドを受け付ける。ソフトウェアＩ／Ｆ部６０は、リクエスト生成部６１に対し、受け付けたコマンドに基づくリクエストの発行を指示する。また、ソフトウェアＩ／Ｆ部６０は、リクエスト回収部６２から、コマンドに対する処理結果を受け取り、受け取った結果に応じた状態を、ソフトウェアから参照されるレジスタに書き込む。
【００２７】
リクエスト生成部６１は、ソフトウェアＩ／Ｆ部６０から、コマンドの対象となるデータに対するリクエスト生成の指示を受け付ける。リクエスト生成部６１は、コマンドの対象となるデータを管理するＨｏｍｅ  ＣＰＵ  ２Ｂのディレクトリ制御部７０に対し、生成されたリクエストを発行する。
【００２８】
リクエスト回収部６２は、Ｈｏｍｅ  ＣＰＵ  ２Ｂのディレクトリ制御部７０から、リクエスト生成部６１が生成したリクエストに対する結果を回収し、リクエストの結果をソフトウェアＩ／Ｆ部６０に通知する。
【００２９】
Ｈｏｍｅ  ＣＰＵ  ２Ｂは、ディレクトリ制御部７０、コマンド実行部７１およびメモリコントローラ２１を含む。Ｈｏｍｅ  ＣＰＵ  ２Ｂは、「第２の演算処理装置」の一例である。
【００３０】
ディレクトリ制御部７０は、リクエスト生成部６１から発行されたリクエストを受け付けると、ディレクトリ３３をチェックする。ディレクトリ制御部７０は、ディレクトリ３３のエラーマークの有無等に応じて、コマンド実行部７１に対し、持ち出されたデータの破棄を指示するコマンドの発行を依頼する。また、ディレクトリ制御部７０は、コマンド実行部７１から、コマンドの実行結果を受け取る。ディレクトリ制御部７０は、受け取った実行結果に基づき、ディレクトリ３３を更新する。ディレクトリ制御部７０は、リクエスト回収部６２に、受け取った実行結果を通知する。
【００３１】
コマンド実行部７１は、ディレクトリ制御部７０から、コマンド発行の依頼を受け付ける。コマンド実行部７１は、キャッシュＣＰＵ  ２Ｃに対し、キャッシュされたデータの破棄等のコマンドを発行する。また、コマンド実行部７１は、コマンドを発行した各キャッシュＣＰＵ  ２Ｃからの応答を受信する。コマンド実行部７１は、ディレクトリ制御部７０に対し、各キャッシュＣＰＵ  ２Ｃからの応答の結果を通知する。
【００３２】
メモリコントローラ２１は、メモリ３のディレクトリ３３の内容を取得し、ディレクトリ制御部７０に通知する。メモリコントローラ２１は、ディレクトリ制御部７０の指示により、メモリ３のディレクトリ３３を更新する。
【００３３】
キャッシュＣＰＵ  ２Ｃは、キャッシュ制御部８０を含む。キャッシュ制御部８０は、コマンド実行部７１から、コマンドを受け付け、持ち出されたデータを破棄する。また、キャッシュＣＰＵ  ２Ｃは、コマンドの実行結果をコマンド実行部７１に通知する。
【００３４】
＜エラー検出時の対処＞
図３から図８は、エラー検出時の対処方法について説明するための図である。なお、図３から図８において、ノード＃０、ノード＃１およびノード＃２は、図１に示すノード４の例であり、共通する構成についての説明は省略される。また、ノード＃０、ノード＃１およびノード＃２の構成の一部は、図示が省略される。
【００３５】
ノード＃０、ノード＃１、ノード＃２は、それぞれリクエスターＣＰＵ  ２Ａ、Ｈｏｍｅ  ＣＰＵ  ２Ｂ、キャッシュＣＰＵ  ２Ｃを含み、それぞれリクエスターノード、Ｈｏｍｅノード、持ち出しノードとも称される。
【００３６】
また、図３から図８において、ＣＰＵ＃００、ＣＰＵ＃１０およびＣＰＵ＃２０は、それぞれ図２に示すリクエスターＣＰＵ  ２Ａ、Ｈｏｍｅ  ＣＰＵ  ２Ｂ、キャッシュＣＰＵ  ２Ｃの例であり、共通する機能構成についての説明は省略される。
【００３７】
図３は、他のノードのデータが持ち出された例を示す図である。図３において、ノード＃０およびノード＃１は、ノード間接続経路５（例えば、クロスバスイッチ）を介して接続される。
【００３８】
ノード＃０のＣＰＵ＃００は、ノード＃１のＣＰＵ＃１０の共有メモリ３１のデータを持ち出している。ノード＃１のメモリ３上のディレクトリ３３は、ＣＰＵ＃００にデータが持ち出されたことを記録する。
【００３９】
図４は、データを持ち出したＣＰＵ  ２を含むノード４が故障した例を示す図である。ノード＃０が故障した後、他のノード４のＣＰＵ２が、ノード＃０のＣＰＵ＃００がデータを持ち出しているキャッシュラインのアドレスにアクセスすると、ディレクトリ制御部７０は、持ち出されたデータをノード＃０から回収しようとする。ディレクトリ制御部７０は、ノード＃０の故障によりデータを回収できないため、ノード＃１のディレクトリ３３に、当該キャッシュラインが異常であることを示すエラーマーク（図中“Ｕｎｋｎｏｗ
ｎ”と示される）を設定する。
【００４０】
エラーマークが設定されたキャッシュラインを再利用するためには、ディレクトリ制御部７０に対して、ディレクトリ３３の正常化が指示されればよい。ディレクトリ制御部７０は、ディレクトリ３３に、当該キャッシュラインが正常であることを示すマーク（図中“Ｎｏ  Ｅｒｒｏｒ”と示される）を設定する。
【００４１】
図５は、データが持ち出されたＣＰＵ  ２を含むノード４が故障した例を示す図である。ノード＃１が故障すると、ＣＰＵ＃００に対し、ノード＃１のＣＰＵ＃１０から持ち出されたデータの削除が指示されればよい。ＣＰＵ＃００は、キャッシュ２２内のＣＰＵ＃１０のデータを削除する。
【００４２】
図６は、ノード間の経路故障の例を示す図である。図６は、ＣＰＵ＃００がＣＰＵ＃１０からデータを持ち出した後、ノード＃０とノード＃１との間のいずれかの経路で故障が発生した例を示す。
【００４３】
図４の例と同様に、ＣＰＵ＃００がデータを持ち出しているキャッシュラインのアドレスがアクセスされると、ディレクトリ制御部７０は、ディレクトリ３３に、当該キャッシュラインが異常であることを示すエラーマークを設定する。
【００４４】
エラーマークが設定されたキャッシュラインを再利用するためには、ＣＰＵ＃００のキャッシュ２２内のＣＰＵ＃１０のデータの削除およびディレクトリ３３の正常化がされればよい。キャッシュ２２内のデータの削除およびディレクトリ３３の正常化は、データのコヒーレンシを保持するため、同時に実施されることが望ましい。具体的には、キャッシュ２２内のデータの削除およびディレクトリ３３の正常化は、アドレスロックにより、当該キャッシュラインに対して新規にアクセスされるのを止めている間に実施されればよい。
【００４５】
図７は、複数のＣＰＵ  ２にデータが持ち出された例を示す図である。図４において、ノード＃０、ノード＃１およびノード＃２は、ノード間接続経路５を介して、相互に接続される。
【００４６】
ノード＃０のＣＰＵ＃００およびノード＃２のＣＰＵ＃２０は、ノード＃１のＣＰＵ＃１０の共有メモリ３１のデータを持ち出している。ノード＃１のメモリ３上のディレクトリ３３は、ＣＰＵ＃００およびＣＰＵ＃２０にデータが持ち出されたことを記録する。
【００４７】
図８は、複数のＣＰＵ  ２にデータが持ち出され、データを持ち出したＣＰＵ  ２を含むノード４の一つが故障した例を示す図である。エラーが検出されると、ディレクトリ制御部７０は、ディレクトリ３３に、当該キャッシュラインが異常であることを示すエラーマークを設定する。
【００４８】
エラーマークが設定されたキャッシュラインを再利用するためには、ＣＰＵ＃００のキャッシュ２２内のＣＰＵ＃１０のデータの削除およびディレクトリ３３の正常化がされればよい。ＣＰＵ＃００のキャッシュ２２内のデータの削除およびディレクトリ３３の正常化は、データのコヒーレンシを保持するため、同時に実施されることが望ましい。具体的には、キャッシュ２２内のデータの削除およびディレクトリ３３の正常化は、アドレスロックにより、当該キャッシュラインに対して新規にアクセスされるのを止めている間に実施されればよい。
【００４９】
＜処理例＞
図９は、ディレクトリ３３の正常化の処理例を示す図である。情報処理システム１は、ノード＃０、ノード＃１およびノード＃２を含む。ノード＃０のＣＰＵ＃００およびノード＃２のＣＰＵ＃２０は、ノード＃１の共有メモリ３１のデータを持ち出している。何等かの故障要因により、ディレクトリ３３に、エラーマークが設定された場合のディレクトリ３３の正常化の処理例が示される。
【００５０】
エラーが検出されると、ソフトウェアは、ノード＃１（Ｈｏｍｅノード）のディレクトリ制御部７０に指示を出す、ノード＃０の機能レジスタ２３のコマンド指定レジスタに、ディレクトリ正常化のコマンドに対応する値を書き込む（Ａ１）。
【００５１】
機能レジスタ２３にコマンドが書き込まれると、ＣＰＵ＃００は、ノード＃１のＣＰＵ＃１０のディレクトリ制御部７０に、ディレクトリ正常化を要求する（Ａ２）。ディレクトリ制御部７０は、ＣＰＵ＃００およびＣＰＵ＃２０に持ち出されたデータのアドレスに対し、他のＣＰＵ  ２からアクセスされないようにロックする（Ａ３）。ディレクトリ制御部７０は、Cache Coherent NonUniform Memory Access（ｃｃＮＵＭＡ）の機構を利用
して当該アドレスをロックすることができる。
【００５２】
ディレクトリ制御部７０は、ディレクトリ３３にエラーマークされていることを確認する。エラーマークの設定により、データを持ち出したＣＰＵ  ２は、不明となっている。このため、ディレクトリ制御部７０は、キャッシュ制御要求回路７１に、情報処理システム１内の他のＣＰＵ  ２に持ち出された当該アドレスのデータを破棄させるように指示を出す（Ａ４）。なお、キャッシュ制御要求回路７１は、コマンド実行部７１として、その処理の一部を実行する。
【００５３】
キャッシュ制御要求回路７１は、情報処理システム１内の他のＣＰＵ  ２に対し、持ち出された当該アドレスのデータを破棄するよう指示する（Ａ５）。指示を受けた各ＣＰＵ
２は、当該アドレスのデータを持ち出しているか否かを確認し、持ち出している場合には削除する（Ａ６）。
【００５４】
指示を受けた各ＣＰＵ  ２は、持ち出したデータの削除が正常に完了した場合、または持ち出しをしていない場合、ノード＃１のＣＰＵ＃１０のキャッシュ制御要求回路７１に完了を通知する（Ａ７）。一方、指示を受けた各ＣＰＵ  ２は、何等かの故障が発生している場合には、キャッシュ制御要求回路７１にエラーを通知する（Ａ７）。
【００５５】
キャッシュ制御要求回路７１は、Ａ５で指示をした各ＣＰＵ  ２から、完了またはエラーの通知を待つ（Ａ８）。キャッシュ制御要求回路７１は、各ＣＰＵ  ２から完了の通知を受信した場合、ディレクトリ制御部７０に完了を通知する（Ａ９）。一方、キャッシュ制御要求回路７１は、何れかのＣＰＵ  ２からエラーの通知を受信した場合、または応答がなくタイムアウトとなった場合には、ディレクトリ制御部７０にエラーを通知する（Ａ９）。
【００５６】
ディレクトリ制御部７０は、完了の通知を受信した場合、ディレクトリ３３を正常化する（Ａ１０）。一方、ディレクトリ制御部７０は、エラーの通知を受信した場合、ディレクトリ３３をエラーマークのままとする（Ａ１０）。
【００５７】
ディレクトリ制御部７０は、ディレクトリ正常化を要求したＣＰＵ＃００に対し、ディレクトリ正常化の処理結果を通知する（Ａ１１）。ＣＰＵ＃００は、機能レジスタ２３のステータス表示レジスタに、処理結果に対応する値を書き込む（Ａ１２）。
【００５８】
Ａ１においてディレクトリ正常化のコマンドを書き込んだソフトウェアは、機能レジス
タ２３のステータス表示レジスタを監視し、ディレクトリ正常化の処理が正常に終了したか否かを認識する。
【００５９】
図９の例は、ノード＃０、ノード＃１およびノード＃２以外のノード４で故障が発生した場合、経路故障の場合等の処理例を示す。これに対し、ノード＃１が故障した場合、ＣＰＵ＃００のディレクトリ制御部７０およびキャッシュ制御要求回路７１が、Ａ３、Ａ４、Ａ５、Ａ１１等の処理をすればよい。なお、図９では図示が省略されるが、ＣＰＵ＃００、ＣＰＵ＃１０、ＣＰＵ＃２０は、いずれもキャッシュ２２、機能レジスタ２３、ディレクトリ制御部７０、キャッシュ制御要求回路７１を備える。また、ノード＃１が故障した場合、ディレクトリ３３の正常化（Ａ１０）は実行されない。
【００６０】
＜回路例＞
図１０から図１２Ｃは、リクエスターＣＰＵ  ２Ａ、Ｈｏｍｅ  ＣＰＵ  ２ＢおよびキャッシュＣＰＵ  ２Ｃの回路を説明するための図である。図１０および図１１は、リクエスターＣＰＵ  ２Ａ、Ｈｏｍｅ  ＣＰＵ  ２ＢおよびキャッシュＣＰＵ  ２Ｃの回路を例示する。図１２Ａから図１２Ｃは、リクエスターＣＰＵ  ２Ａの機能レジスタ２３のフォーマットを例示する。
【００６１】
図１０は、リクエスターＣＰＵ  ２Ａの回路を例示する図である。リクエスターＣＰＵ
２Ａは、ソフトウェアからのコマンドを受け付ける。リクエスターＣＰＵ  ２Ａは、ソフトウェアＩ／Ｆ部６０、リクエスト生成部６１およびリクエスト回収部６２により、Ｈｏｍｅ  ＣＰＵ  ２Ｂにディレクトリ正常化を指示し、結果を回収する。
【００６２】
ソフトウェアＩ／Ｆ部６０は、アドレス指定レジスタ（ＡＤＲＳ）６０１、コマンド指定レジスタ（ＣＭＤ）６０２およびステータス表示レジスタ（Ｓｔａｔｕｓ）６０３を備える。
【００６３】
ソフトウェアがエラーを検出すると、エラーハンドラ１００は、アドレス指定レジスタ６０１にコマンドの対象となるキャッシュラインのアドレスを書き込む。また、エラーハンドラ１００は、コマンド指定レジスタ６０２にコマンドを指定する値を書き込む。
【００６４】
ソフトウェアＩ／Ｆ部６０は、アドレス指定レジスタ６０１およびコマンド指定レジスタ６０２に値が書き込まれると、ディレクトリ正常化の処理を開始し、リクエスト生成部６１にリクエストの発行を指示する。
【００６５】
ソフトウェアＩ／Ｆ部６０は、リクエスト回収部６２からコマンド実行の結果を受け取る。ソフトウェアＩ／Ｆ部６０は、受け取った結果に応じて、ステータス表示レジスタ６０３の値を更新する。エラーハンドラ１００は、アドレス指定レジスタ６０１およびコマンド指定レジスタ６０２に値を書き込んだ後、ステータス表示レジスタ６０３の値の更新を監視する。
【００６６】
リクエスト生成部６１は、ソフトウェアＩ／Ｆ部６０からの指示や他のリクエストを優先度に従って処理する。リクエスト生成部６１は、アドレス指定レジスタ６０１に指定された対象アドレスをチェックし、コマンドの実行に使用する資源を確保する。リクエスト生成部６１は、リクエストを生成し、対象アドレスを管理するＨｏｍｅ  ＣＰＵ  ２Ｂに生成したリクエストを発行する。
【００６７】
対象アドレスを管理するＨｏｍｅ  ＣＰＵ  ２ＢがリクエスターＣＰＵ  ２Ａを含むリクエスターノードと異なるノード４内のＣＰＵ  ２である場合、リクエスト生成部６１は、外部バスＩ／Ｆ部９０を介してＨｏｍｅ  ＣＰＵ  ２Ｂのディレクトリ制御部７０にリ
クエストを発行する。Ｈｏｍｅ  ＣＰＵ  ２Ｂがリクエスターノード内のＣＰＵ  ２である場合、リクエスト生成部６１は、外部バスＩ／Ｆ部９０を介さずに、Ｈｏｍｅ  ＣＰＵ
２Ｂのディレクトリ制御部７０にリクエストを発行する。
【００６８】
リクエスト回収部６２は、Ｈｏｍｅ  ＣＰＵ  ２Ｂからコマンド実行の結果を回収する。Ｈｏｍｅ  ＣＰＵ  ２ＢがリクエスターＣＰＵ  ２Ａを含むリクエスターノードと異なるノード４内のＣＰＵ  ２である場合、リクエスト回収部６２は、外部バスＩ／Ｆ部９０を介して結果を回収する。Ｈｏｍｅ  ＣＰＵ  ２Ｂがリクエスターノード内のＣＰＵ  ２である場合、リクエスト回収部６２は、外部バスＩ／Ｆ部９０を介さずに結果を回収する。
【００６９】
リクエスト回収部６２は、リクエスト生成部６１に、資源の解放を指示する。リクエスト回収部６２は、ソフトウェアＩ／Ｆ部６０に回収した結果を通知する。リクエスト回収部６２は、時間を監視し、Ｈｏｍｅ  ＣＰＵ  ２Ｂから所定時間応答がない場合には、ソフトウェアＩ／Ｆ部６０に失敗を通知する。
【００７０】
図１１は、実施形態１におけるＨｏｍｅ  ＣＰＵ  ２ＢおよびキャッシュＣＰＵ  ２Ｃの回路を例示する図である。Ｈｏｍｅ  ＣＰＵ  ２Ｂは、リクエスターＣＰＵ  ２Ａからのリクエストを受け付ける。Ｈｏｍｅ  ＣＰＵ  ２Ｂは、ディレクトリ制御部７０、コマンド実行部７１およびメモリコントローラ２１により、キャッシュＣＰＵ  ２Ｃに対してキャッシュされたデータの破棄を指示し、結果を回収する。キャッシュＣＰＵ  ２Ｃは、キャッシュ制御部８０により、キャッシュされたデータを破棄し、結果をＨｏｍｅ  ＣＰＵ  ２Ｂに通知する。
【００７１】
Ｈｏｍｅ  ＣＰＵ  ２Ｂのディレクトリ制御部７０は、リクエスターＣＰＵ  ２Ａからのリクエストを受け付けると、メモリコントローラ２１を介して、ディレクトリ３３のエラーマークをチェックする。ディレクトリ３３にエラーマークが設定されていない場合、ディレクトリ制御部７０は、リクエスターＣＰＵ  ２Ａに正常の結果応答をする。エラーマークが設定されている場合、ディレクトリ制御部７０は、コマンド実行部７１に、キャッシュされたデータの破棄を指示するコマンド（以下、キャッシュ破棄コマンドともいう）を生成させる。
【００７２】
Ｈｏｍｅ  ＣＰＵ  ２Ｂのコマンド実行部７１は、キャッシュＣＰＵ  ２Ｃに対し、キャッシュ破棄コマンドを発行する。キャッシュＣＰＵ  ２Ｃは、情報処理システム１内の各ＣＰＵ  ２である。コマンド実行部７１は、データを持ち出したＣＰＵ  ２が特定できる場合は、特定されたＣＰＵ  ２をキャッシュＣＰＵ  ２Ｃとして、キャッシュ破棄コマンドを発行する。
【００７３】
コマンド実行部７１は、情報処理システム１の起動時にサービスプロセッサ１０１に設定される構成制御レジスタ１０２を参照し、情報処理システム１内の各ＣＰＵ  ２の宛先を取得する。サービスプロセッサ１０１は、情報処理システム１の電源制御、クロック制御、ＦＡＮ制御、プロセッサ立ち上げシーケンス等を管理するプロセッサである。構成制御レジスタ１０２は、システムの構成によって設定を変えるために使用される。例えば、情報処理システム１においてノード数は固定ではなく、１〜１６のノード４を有する場合がある。構成制御レジスタ１０２の宛先指定レジスタは、存在するノード４だけをＥｎａｂｌｅに設定する。
【００７４】
キャッシュＣＰＵ  ２ＣがＨｏｍｅ  ＣＰＵ  ２Ｂを含むＨｏｍｅノードと異なるノード４内のＣＰＵ  ２である場合、コマンド実行部７１は、外部バスＩ／Ｆ部９０を介してキャッシュＣＰＵ  ２Ｃのキャッシュ制御部８０にキャッシュ破棄コマンドを発行する。
キャッシュＣＰＵ  ２ＣがＨｏｍｅノード内のＣＰＵ  ２である場合、コマンド実行部７１は、外部バスＩ／Ｆ部９０を介さずに、キャッシュＣＰＵ  ２Ｃのキャッシュ制御部８０にキャッシュ破棄コマンドを発行する。
【００７５】
キャッシュＣＰＵ  ２Ｃのキャッシュ制御部８０は、キャッシュ破棄コマンドを受信すると、対象アドレスのデータがキャッシュされているか否かを判定する。対象アドレスのデータがキャッシュされている場合、キャッシュ制御部８０は、キャッシュされたデータを破棄し、コマンド実行部７１に破棄したことの応答をする。エラーが発生した場合には、キャッシュ制御部８０は、コマンド実行部７１にエラーの応答をする。
【００７６】
キャッシュＣＰＵ  ２ＣがＨｏｍｅ  ＣＰＵ  ２Ｂを含むＨｏｍｅノードと異なるノード４内のＣＰＵ  ２である場合、キャッシュ制御部８０は、外部バスＩ／Ｆ部９０を介して、Ｈｏｍｅ  ＣＰＵ  ２Ｂのコマンド実行部７１に応答する。キャッシュＣＰＵ  ２ＣがＨｏｍｅノード内のＣＰＵ  ２である場合、キャッシュ制御部８０は、外部バスＩ／Ｆ部９０を介さずに、Ｈｏｍｅ  ＣＰＵ  ２Ｂのコマンド実行部７１に応答する。
【００７７】
Ｈｏｍｅ  ＣＰＵ  ２Ｂのコマンド実行部７１は、コマンドを発行した各キャッシュＣＰＵ  ２Ｃから応答があったか否かをチェックする。応答の受信を完了すると、コマンド実行部７１は、ディレクトリ制御部７０に完了を通知する。コマンド実行部７１は、時間を監視し、キャッシュＣＰＵ  ２Ｃから所定時間応答がない場合には、ディレクトリ制御部７０に失敗を通知する。
【００７８】
Ｈｏｍｅ  ＣＰＵ  ２Ｂのディレクトリ制御部７０は、コマンド実行部７１から、コマンド実行の結果を受け取る。ディレクトリ制御部７０は、完了の通知を受け取ると、メモリコントローラ２１を介して、ディレクトリ３３を正常化し、持ち出し無しの設定をする。ディレクトリ制御部７０は、失敗の通知を受け取ると、ディレクトリ３３にはエラーマークが設定された状態のまま、結果をリクエスターＣＰＵ  ２Ａに通知する。
【００７９】
図１１の例では、ディレクトリ３３にエラーマークが設定されている場合、Ｈｏｍｅ  ＣＰＵ  ２Ｂから、キャッシュＣＰＵ２Ｃに対して、キャッシュされたデータの破棄を指示するコマンドが発行される。これに対し、Ｈｏｍｅ  ＣＰＵ  ２Ｂは、リクエスターＣＰＵ  ２Ａにエラーの結果応答をし、リクエスターＣＰＵ  ２Ａのコマンド実行部７１が、キャッシュＣＰＵ２Ｃに対して、キャッシュされたデータの破棄を指示するコマンドを発行してもよい。
【００８０】
図１１の例は、Ｈｏｍｅ  ＣＰＵ  ２Ｂが、ディレクトリ３３の正常化およびキャッシュＣＰＵ２Ｃに対するキャッシュ破棄の指示をする例を示す。これに対し、図１１の変形例として、Ｈｏｍｅ  ＣＰＵ  ２Ｂが故障した場合、情報処理システム１内でキャッシュされたデータの破棄を行う場合には、リクエスターＣＰＵ  ２Ａのコマンド実行部７１が、キャッシュＣＰＵ２Ｃに対して、キャッシュされたデータの破棄を指示するコマンドを発行してもよい。
【００８１】
図１２Ａは、アドレス指定レジスタ６０１のレジスタフォーマットの例を示す図である。０〜６ビットおよび４７〜６３ビットは予約ビットである。７〜４６ビットは、コマンドの対象となるキャッシュラインのアドレスを指定するＰＡフィールドである。
【００８２】
図１２Ｂは、コマンド指定レジスタ６０２のレジスタフォーマットの例を示す図である。４〜７ビットおよび１１〜６３ビットは予約ビットである。０〜３ビットは、コマンドを指定するＣｏｍｍａｎｄフィールドである。例えば、“００００”は、Ｎｏ  Ｏｐｅｒａｔｉｏｎ（ＮＯＰ）、即ち処理を行わないことを指示するコマンドを示す。また、“０
００１”は、ディレクトリ正常化を指示するコマンドを示す。“００１０”は、Ｈｏｍｅ
ＣＰＵ  ２Ｂが故障した場合等に、キャッシュ破棄を指示するコマンドを示す。
【００８３】
図１２Ｃは、実施形態１におけるステータス表示レジスタ６０３のレジスタフォーマットの例を示す図である。１〜７ビットおよび９〜６３ビットは予約ビットである。０ビットは、実行したコマンドがエラー終了したか否かを示すＥｒｒｏｒフィールドである。“０”は、コマンドが正常に終了したことを示す。また、“１”は、コマンドがエラー終了したことを示す。８ビットは、コマンドの実行中であるか否かを示すＢｕｓｙフィールドである。“０”は、コマンドの実行が完了したことを示す。また、“１”は、コマンドの実行中であることを示す。
【００８４】
＜実施形態１の作用効果＞
情報処理システム１において、ノード間のデータ転送に関わるエラーの発生により、キャッシュコヒーレンシが保持されなくなる場合がある。実施形態１では、情報処理システム１は、エラーを検出すると、エラーの原因となったアドレスのデータについて、情報処理システム１内の各ＣＰＵ  ２に対し、持ち出された当該データの削除を指示し、ディレクトリ３３を正常化する。これにより、キャッシュコヒーレンシの異常状態から回復することができる。
【００８５】
情報処理システム１は、エラーを検出すると、エラーの原因となったアドレスのデータを持ち出したＣＰＵ  ２がディレクトリ３３の情報から特定できる場合には、特定された各ＣＰＵ  ２に対し、持ち出された当該データの削除を指示する。また、情報処理システム１は、ノード４の故障に起因するエラーを検出すると、故障したノード４以外のノード４に含まれるＣＰＵ  ２に対し、持ち出された当該データの削除を指示する。これにより、当該データを持ち出していないＣＰＵ  ２の負荷が軽減される。
【００８６】
〔実施形態２〕
実施形態２において、情報処理システム１は、エラーが検出された場合、実施形態１におけるディレクトリ正常化の処理の前に、コヒーレンシを調査する。コヒーレンシの調査では、情報処理システム１は、持ち出されたデータが正常か否かを判定する。情報処理システム１は、エラーの原因が経路故障等であって持ち出されたデータにエラーマークが設定されていなければ、持ち出されたデータを書き戻して、異常状態から回復する。実施形態２におけるシステム構成および機能構成は、実施形態１と同じであるため、説明は省略される。
【００８７】
＜回路例＞
図１３から図１５は、実施形態２におけるＨｏｍｅ  ＣＰＵ  ２ＢおよびキャッシュＣＰＵ  ２Ｃの回路を説明するための図である。リクエスターＣＰＵ  ２Ａの回路は実施形態１と同じであるため、説明は省略される。図１３から図１５における実施形態２の構成は、実施形態１との共通点を含むため、主として相違点が説明され、共通点についての説明は省略される。
【００８８】
図１３は、実施形態２におけるＨｏｍｅ  ＣＰＵおよびキャッシュＣＰＵの回路を例示する図である。Ｈｏｍｅ  ＣＰＵ  ２Ｂのディレクトリ制御部７０およびコマンド実行部７１、並びにキャッシュＣＰＵ  ２Ｃのキャッシュ制御部８０の動作が説明される。
【００８９】
Ｈｏｍｅ  ＣＰＵ  ２Ｂのディレクトリ制御部７０は、リクエスターＣＰＵ  ２Ａからディレクトリ正常化またはコヒーレンシ調査のリクエストを受け付ける。ディレクトリ正常化のリクエストを受け付けた場合、ディレクトリ制御部７０、コマンド実行部７１およびキャッシュ制御部８０は、実施形態１と同じ動作をする。
【００９０】
ディレクトリ制御部７０は、リクエスターＣＰＵ  ２Ａからのリクエストを受け付けると、メモリコントローラ２１を介して、ディレクトリ３３のエラーマークおよびデータの持ち出しの有無をチェックする。ディレクトリ制御部７０は、ディレクトリ３３をチェックすると、コマンドの内容、エラーマークの有無、データの持ち出しの有無の条件の組み合わせに基づいて、コマンドを発行するか、結果を応答するかの処理を決定する。
【００９１】
ディレクトリ制御部７０は、コヒーレンシ調査のリクエストを受け付け、ディレクトリ３３にエラーマークが設定されていない場合、ディレクトリ制御部７０は、コマンド実行部７１に、特定されたＣＰＵ  ２にキャッシュされたデータの書き戻しを指示するコマンド（以下、キャッシュ書き戻しコマンドともいう）を生成させる。ディレクトリ制御部７０は、ディレクトリ３３を参照して、データを持ち出したＣＰＵ  ２を特定できる場合には、特定されたＣＰＵ  ２に対するキャッシュ書き戻しコマンドを生成させる。
【００９２】
ディレクトリ制御部７０は、コヒーレンシ調査のリクエストを受け付け、ディレクトリ３３にエラーマークが設定されている場合、リクエスターＣＰＵ  ２Ａにエラーの結果応答をする。
【００９３】
Ｈｏｍｅ  ＣＰＵ  ２Ｂのコマンド実行部７１は、ディレクトリ３３にエラーマークが設定されていない場合、ディレクトリ制御部７０から指示により生成したキャッシュ書き戻しコマンドを、データを持ち出したＣＰＵ  ２に発行する。エラーマークが設定されている場合は、コマンド実行部７１は、実施形態１と同じ動作をする。
【００９４】
キャッシュＣＰＵ  ２Ｃのキャッシュ制御部８０は、キャッシュ書き戻しコマンドを受けると、キャッシュされたデータをコマンド実行部７１に送信する。エラーが発生した場合には、キャッシュ制御部８０は、コマンド実行部７１にエラーの応答をする。
【００９５】
ディレクトリ制御部７０は、ディレクトリ３３にエラーマークが設定されていない場合に、コマンド実行部７１からエラーの通知を受けると、ディレクトリ３３にエラーマークを設定する。
【００９６】
図１３の例では、ディレクトリ３３にエラーマークが設定されていない場合、データを持ち出したＣＰＵ  ２に対して、キャッシュを書き戻すコマンドが発行される。書き戻しの処理は、ディレクトリ３３で管理される持ち出し先のＣＰＵ  ２の数と、実際に当該データを持ち出したＣＰＵ  ２の数との整合性を取るための処理である。データが書き戻されない場合、Ｈｏｍｅ  ＣＰＵ  ２Ｂは、実際に当該データを持ち出したＣＰＵ  ２の数をカウントすることで、ディレクトリ３３で管理される持ち出し先のＣＰＵ  ２の数との整合性を確認してもよい。コヒーレンシ調査において、キャッシュされたデータの書き戻しをすることで、持ち出し先のＣＰＵ  ２の管理は、簡易化される。
【００９７】
図１４は、実施形態２におけるディレクトリ制御部７０の動作判定条件の例を示す図である。ディレクトリ制御部７０は、コマンドの内容、エラーマークの有無、データの持ち出しの有無の条件の組み合わせに基づいて、コマンドを発行するか、結果を応答するかの処理を決定する。
【００９８】
ディレクトリ制御部７０は、「コマンドがディレクトリ正常化、エラーマーク有り」、「コマンドがコヒーレンシ調査、エラーマーク無し、データ持ち出し有り」の場合、コマント実行部７１にコマンド発行を指示する。一方、ディレクトリ制御部７０は、「コマンドがディレクトリ正常化、エラーマーク無し」、「コマンドがコヒーレンシ調査、エラーマーク無し、データ持ち出し無し」、「コマンドがコヒーレンシ調査、エラーマーク有り
」の場合、リクエスターＣＰＵ  ２Ａに結果を応答する。
【００９９】
実施形態２におけるアドレス指定レジスタ６０１およびコマンド指定レジスタ６０２のレジスタフォーマットは実施形態１と同じであるため、説明は省略される。ただし、コマンド指定レジスタ６０２のＣｏｍｍａｎｄフィールドにおいて、実施形態１と同様に“００００”はＮＯＰ、“０００１”はディレクトリ正常化を指示するコマンドを示す。また、“００１０”は、Ｈｏｍｅ  ＣＰＵ  ２Ｂが故障した場合等に、キャッシュ破棄を指示するコマンドを示す。さらに“００１１”は、コヒーレンシ調査を指示するコマンドを示す。
【０１００】
図１５は、実施形態２におけるステータス表示レジスタ６０３のレジスタフォーマット例を示す図である。２〜７ビットおよび９〜６３ビットは予約ビットである。０〜１ビットは、コマンドの実行結果のステータスを示すＥｒｒｏｒフィールドである。“００”は、コマンドが正常に終了したことを示す。“０１”は、コヒーレンシ異常を検出し、新たにディレクトリ３３にエラーマークを設定したことを示す。“１０”は、Ｈｏｍｅ  ＣＰＵ  ２Ｂがエラーを検出し、キャッシュ破棄に失敗したことを示す。“１１”は、Ｈｏｍｅ  ＣＰＵ  ２Ｂからの応答がなかったことを示す。８ビットは、実施形態１と同様にコマンドの実行中であるか否かを示すＢｕｓｙフィールドである。“０”は、コマンドの実行が完了したことを示す。また、“１”は、コマンドの実行中であることを示す。
【０１０１】
＜動作フロー１＞
図１６は、データを持ち出したＣＰＵ  ２を含むノードが故障した場合の動作フローの例を示す図である。図１６は、リクエスターノード、Ｈｏｍｅノード、持ち出しノード、他ノード間の動作フローを示す。
【０１０２】
リクエスターノードは、ソフトウェアが検出したエラーに対し、コヒーレンシ調査およびディレクトリ正常化のリクエストをＨｏｍｅノードに発行するノード４であり、リクエスターＣＰＵ  ２Ａを備える。Ｈｏｍｅノードは、持ち出されたデータを記憶するメモリを管理するノード４であり、Ｈｏｍｅ  ＣＰＵ  ２Ｂを備える。持ち出しノードは、Ｈｏｍｅノードからデータを持ち出したノードであり、キャッシュＣＰＵ  ２Ｃを備える。他ノードは、情報処理システム１内に含まれるリクエスターノード、Ｈｏｍｅノード、持ち出しノード以外のノード４である。
【０１０３】
Ｓ１からＳ２０までの動作のうち、Ｓ１からＳ８は、ユーザプロセス実行中の動作である。Ｓ９からＳ２０は、エラーハンドラ実行中の動作である。また、Ｓ９からＳ２０までの動作のうち、Ｓ９からＳ１２は、コヒーレンシ調査コマンドに対する動作であり、Ｓ１３からＳ２０は、ディレクトリ正常化コマンドに対する動作である。
【０１０４】
Ｓ１では、キャッシュＣＰＵ  ２Ｃは、Ｈｏｍｅ  ＣＰＵ  ２Ｂの共有メモリ３１からデータを持ち出す。Ｈｏｍｅ  ＣＰＵ  ２Ｂは、持ち出されたデータに対するディレクトリ３３に、データの持ち出し有り、エラーマーク無し（正常）の設定をする。図中、ディレクトリ３３は、“ＤＩＲ”と示される（以下同様）。
【０１０５】
Ｓ２では、持ち出しノードが故障する。ディレクトリ３３は、コヒーレンシ異常状態となる。Ｓ３では、ソフトウェアは、持ち出しノードがＨｏｍｅ  ＣＰＵ  ２Ｂから持ち出したデータへのアクセスを、リクエスターＣＰＵ  ２Ａに依頼する。
【０１０６】
Ｓ４では、リクエスターＣＰＵ  ２Ａは、Ｈｏｍｅ  ＣＰＵ  ２Ｂに、持ち出されたデータへのアクセスのリクエストを発行する。Ｓ５では、Ｈｏｍｅ  ＣＰＵ  ２Ｂは、持ち出されたデータの回収をキャッシュＣＰＵ  ２Ｃに依頼する。キャッシュＣＰＵ  ２Ｃを
含む持ち出しノードが故障しているため、Ｈｏｍｅ  ＣＰＵ  ２Ｂにおいて、タイムアウトが発生する。
【０１０７】
Ｓ６では、Ｈｏｍｅ  ＣＰＵ  ２Ｂは、ディレクトリ３３に、“Ｕｎｋｎｏｗｎ”のエラーマークを設定する。Ｓ７では、Ｈｏｍｅ  ＣＰＵ  ２Ｂは、リクエスターＣＰＵ  ２Ａに、エラーの応答をする。Ｓ８では、リクエスターＣＰＵ  ２Ａは、ソフトウェアに割込みでエラーの発生およびエラーが発生したキャッシュラインのアドレスを通知する。
【０１０８】
Ｓ９では、ソフトウェアは、リクエスターＣＰＵ  ２Ａのコマンド指示レジスタ６０２に、コヒーレンシ調査コマンドを書き込む。また、ソフトウェアは、リクエスターＣＰＵ
２Ａのアドレス指定レジスタ６０１に、調査対象のキャッシュラインのアドレスとして、エラーが発生したキャッシュラインのアドレスを書き込む。Ｓ１０では、リクエスターＣＰＵ  ２Ａは、Ｈｏｍｅ  ＣＰＵ  ２Ｂに、持ち出されたデータの調査のリクエストを発行する。このとき、ディレクトリ３３には、エラーマークが設定されている。
【０１０９】
Ｓ１１では、Ｈｏｍｅ  ＣＰＵ  ２Ｂは、リクエスターＣＰＵ  ２Ａに、エラーの応答をする。リクエスターＣＰＵ  ２Ａは、ステータス表示レジスタ６０３に、コヒーレンシ調査コマンドの実行結果を設定する。具体的には、リクエスターＣＰＵ  ２Ａは、図１５のレジスタフォーマットのＥｒｒｏｒフィールドに、実行結果に応じた値を設定する。
【０１１０】
Ｓ１２では、ソフトウェアは、ステータス表示レジスタ６０３を読み込む。Ｓ１３では、ソフトウェアは、ステータス表示レジスタ６０３が正常以外の値を示す場合には、リクエスターＣＰＵ  ２Ａのコマンド指示レジスタ６０２に、ディレクトリ正常化コマンドを書き込む。また、ソフトウェアは、リクエスターＣＰＵ  ２Ａのアドレス指定レジスタ６０１に、ディレクトリ正常化の対象であるキャッシュラインのアドレスとして、エラーが発生したキャッシュラインのアドレスを書き込む。なお、ソフトウェアは、アドレス指定レジスタ６０１がＳ１０からＳ１３までの間に変更されていなければ、アドレス指定レジスタ６０１に当該アドレスを書き込まなくても良い。
【０１１１】
Ｓ１４では、リクエスターＣＰＵ  ２Ａは、Ｈｏｍｅ  ＣＰＵ  ２Ｂに、ディレクトリ正常化のリクエストを発行する。Ｓ１５では、Ｈｏｍｅ  ＣＰＵ  ２Ｂは、リクエスターＣＰＵ  ２Ａも含め、データを持ち出した可能性のあるＣＰＵ  ２に、キャッシュに持ち出されたデータの破棄を指示する。
【０１１２】
Ｓ１６では、キャッシュ破棄の指示を受けた各ＣＰＵ  ２は、キャッシュされたデータを破棄したことを、Ｈｏｍｅ  ＣＰＵ  ２Ｂに応答する。Ｓ１７では、Ｈｏｍｅ  ＣＰＵ
２Ｂは、ディレクトリ３３に、データの持ち出し無し、エラーマーク無し（正常）の設定をする。
【０１１３】
Ｓ１８では、Ｈｏｍｅ  ＣＰＵ  ２Ｂは、リクエスターＣＰＵ  ２Ａに、キャッシュ破棄の結果を応答する。リクエスターＣＰＵ  ２Ａは、ステータス表示レジスタ６０３に、ディレクトリ正常化コマンドの実行結果を設定する。
【０１１４】
Ｓ１９では、ソフトウェアは、ステータス表示レジスタ６０３を読み込む。Ｓ２０では、ソフトウェアは、ステータス表示レジスタ６０３が正常の値を示す場合には、ディレクトリ正常化が完了したことを認識し、リカバリ処理をする。リカバリ処理は、ソフトウェアのユーザプロセスが、エラーで中断したことに対するロールバック等の処理である。
【０１１５】
＜動作フロー２＞
図１７は、経路故障の場合の動作フローの例を示す図である。図１７は、図１６と同様
に、リクエスターノード、Ｈｏｍｅノード、持ち出しノード、他ノード間の動作フローを示す。各ノードの説明は、図１６と同じであるため省略される。
【０１１６】
Ｓ３１からＳ５４までの動作のうち、Ｓ３１からＳ３９は、ユーザプロセス実行中の動作である。Ｓ４０からＳ５４は、エラーハンドラ実行中の動作である。また、Ｓ４０からＳ５４までの動作のうち、Ｓ４０からＳ４６は、コヒーレンシ調査コマンドに対する動作であり、Ｓ４７からＳ５４は、ディレクトリ正常化コマンドに対する動作である。
【０１１７】
Ｓ３１では、キャッシュＣＰＵ  ２Ｃは、Ｈｏｍｅ  ＣＰＵ  ２Ｂの共有メモリ３１からデータを持ち出す。Ｈｏｍｅ  ＣＰＵ  ２Ｂは、持ち出されたデータに対するディレクトリ３３に、データの持ち出し有り、エラーマーク無し（正常）の設定をする。
【０１１８】
Ｓ３２では、ソフトウェアは、持ち出しノードがＨｏｍｅ  ＣＰＵ  ２Ｂから持ち出したデータへのアクセスを、リクエスターＣＰＵ  ２Ａに依頼する。Ｓ３３では、リクエスターＣＰＵ  ２Ａは、Ｈｏｍｅ  ＣＰＵ  ２Ｂに、持ち出されたデータへのアクセスのリクエストを発行する。
【０１１９】
Ｓ３４では、Ｈｏｍｅ  ＣＰＵ  ２Ｂは、持ち出されたデータの回収をキャッシュＣＰＵ  ２Ｃに依頼する。Ｓ３５では、キャッシュＣＰＵ  ２Ｃは、Ｈｏｍｅ  ＣＰＵ  ２Ｂに持ち出したデータを送信する。
【０１２０】
Ｓ３６では、Ｈｏｍｅ  ＣＰＵ  ２Ｂは、リクエスターＣＰＵ  ２Ａに正常の応答をする。Ｓ３７では、キャッシュＣＰＵ  ２Ｃは、リクエスターＣＰＵ  ２Ａに持ち出したデータを転送する。Ｓ３８では、キャッシュＣＰＵ  ２ＣとリクエスターＣＰＵ  ２Ａとの間で経路故障が発生し、リクエスターＣＰＵ  ２Ａは、タイムアウトを検出する。Ｓ３９では、リクエスターＣＰＵ  ２Ａは、ソフトウェアに割込みでエラーの発生およびエラーが発生したキャッシュラインのアドレスを通知する。
【０１２１】
Ｓ４０では、ソフトウェアは、リクエスターＣＰＵ  ２Ａのコマンド指示レジスタ６０２に、コヒーレンシ調査コマンドを書き込む。また、ソフトウェアは、リクエスターＣＰＵ  ２Ａのアドレス指定レジスタ６０１に、調査対象のキャッシュラインのアドレスとして、エラーが発生したキャッシュラインのアドレスを書き込む。Ｓ４１では、リクエスターＣＰＵ  ２Ａは、Ｈｏｍｅ  ＣＰＵ  ２Ｂに、持ち出されたデータの調査のリクエストを発行する。
【０１２２】
Ｓ４２では、Ｈｏｍｅ  ＣＰＵ  ２Ｂは、リクエスターＣＰＵ  ２ＡおよびキャッシュＣＰＵ  ２Ｃも含め、データを持ち出した可能性のあるＣＰＵ  ２に、データの調査を指示する。
【０１２３】
Ｓ４３では、データの調査の指示を受けた各ＣＰＵ  ２は、調査の結果をＨｏｍｅ  ＣＰＵ  ２Ｂに応答する。データを持ち出したＣＰＵ  ２は、Ｈｏｍｅ  ＣＰＵ  ２Ｂに持ち出したデータを書き戻す。
【０１２４】
データの書き戻しにより、処理が正常に完了した場合、Ｈｏｍｅ  ＣＰＵ  ２Ｂは、ディレクトリ３３にエラーマークを設定しない。この場合、Ｈｏｍｅ  ＣＰＵ  ２Ｂは、リクエスターＣＰＵ  ２Ａに、正常の応答をする。リクエスターＣＰＵ  ２Ａは、ステータス表示レジスタ６０３に、正常完了の値を設定する。ソフトウェアは、ステータス表示レジスタ６０３を読み込み、コヒーレンシの異常がないことを認識する。この場合、ディレクトリ正常化のコマンドは実行されない。
【０１２５】
一方、Ｓ４３の処理において、コヒーレンシの異常が検出された場合、以下のようにディレクトリ正常化のコマンドが実行される。Ｓ４４では、Ｈｏｍｅ  ＣＰＵ  ２Ｂは、ディレクトリ３３に、“Ｕｎｋｎｏｗｎ”のエラーマークを設定する。
【０１２６】
Ｓ４５では、Ｈｏｍｅ  ＣＰＵ  ２Ｂは、リクエスターＣＰＵ  ２Ａに、エラーの応答をする。リクエスターＣＰＵ  ２Ａは、ステータス表示レジスタ６０３に、エラーに応じた値を設定する。Ｓ４６では、ソフトウェアは、ステータス表示レジスタ６０３を読み込む。Ｓ４７では、ソフトウェアは、リクエスターＣＰＵ  ２Ａのコマンド指示レジスタ６０２に、ディレクトリ正常化コマンドを書き込む。また、ソフトウェアは、リクエスターＣＰＵ  ２Ａのアドレス指定レジスタ６０１に、ディレクトリ正常化の対象であるキャッシュラインのアドレスとして、エラーが発生したキャッシュラインのアドレスを書き込む。なお、ソフトウェアは、アドレス指定レジスタ６０１がＳ４１からＳ４７までの間に変更されていなければ、アドレス指定レジスタ６０１に当該アドレスを書き込まなくても良い。
【０１２７】
Ｓ４８では、リクエスターＣＰＵ  ２Ａは、Ｈｏｍｅ  ＣＰＵ  ２Ｂに、ディレクトリ正常化のリクエストを発行する。Ｓ４９では、Ｈｏｍｅ  ＣＰＵ  ２Ｂは、リクエスターＣＰＵ  ２Ａも含め、データを持ち出した可能性のあるＣＰＵ  ２に、キャッシュに持ち出されたデータの破棄を指示する。
【０１２８】
Ｓ５０では、キャッシュ破棄の指示を受けた各ＣＰＵ  ２は、キャッシュされたデータを破棄したことを、Ｈｏｍｅ  ＣＰＵ  ２Ｂに応答する。Ｓ５１では、Ｈｏｍｅ  ＣＰＵ
２Ｂは、ディレクトリ３３に、データの持ち出し無し、エラーマーク無しの設定をする。
【０１２９】
Ｓ５２では、Ｈｏｍｅ  ＣＰＵ  ２Ｂは、リクエスターＣＰＵ  ２Ａに、キャッシュ破棄の結果を応答する。リクエスターＣＰＵ  ２Ａは、ステータス表示レジスタ６０３に、ディレクトリ正常化コマンドの実行結果を設定する。
【０１３０】
Ｓ５３では、ソフトウェアは、ステータス表示レジスタ６０３を読み込む。Ｓ５４では、ソフトウェアは、ステータス表示レジスタ６０３が正常の値を示す場合には、ディレクトリ正常化が完了したことを認識し、リカバリ処理をする。
【０１３１】
＜動作フロー３＞
図１８は、キャッシュの誤り訂正ができないエラーが発生した場合の動作フローの例を示す図である。図１８は、リクエスターノード、Ｈｏｍｅノード、他ノード間の動作フローを示す。図１８の例において、リクエスターノードは、持ち出しノードとしても動作する。各ノードの説明は、図１６と同じであるため省略される。
【０１３２】
Ｓ６１からＳ８３までの動作のうち、Ｓ６１からＳ７１は、ユーザプロセス実行中の動作である。Ｓ７２からＳ８３は、エラーハンドラ実行中の動作である。また、Ｓ７２からＳ８３までの動作のうち、Ｓ７２からＳ７５は、コヒーレンシ調査コマンドに対する動作であり、Ｓ７６からＳ８３は、ディレクトリ正常化コマンドに対する動作である。
【０１３３】
Ｓ６１では、ソフトウェアは、アクセスするデータのロードを、リクエスターＣＰＵ  ２Ａに依頼する。Ｓ６２では、リクエスターＣＰＵ  ２Ａは、Ｈｏｍｅ  ＣＰＵ  ２Ｂに、当該データへのアクセスのリクエストを発行する。
【０１３４】
Ｓ６３では、リクエスターＣＰＵ  ２Ａは、Ｈｏｍｅ  ＣＰＵ  ２Ｂの共有メモリ３１からデータを持ち出す。Ｈｏｍｅ  ＣＰＵ  ２Ｂは、持ち出されたデータに対するディレ
クトリ３３に、データの持ち出し有り、エラーマーク無し（正常）の設定をする。
【０１３５】
Ｓ６４では、ソフトウェアは、持ち出されたデータのストアを、リクエスターＣＰＵ  ２Ａに依頼する。Ｓ６５では、リクエスターＣＰＵ  ２Ａは、キャッシュのＵｎｃｏｒｒｅｃｔａｂｌｅ  Ｅｒｒｏｒ（ＵＥ）を検出する。
【０１３６】
Ｓ６６では、リクエスターＣＰＵ  ２Ａは、Ｈｏｍｅ  ＣＰＵ  ２Ｂに、ＵＥが発生したことを通知し、キャッシュされたデータの破棄を指示する。Ｓ６７では、Ｈｏｍｅ  ＣＰＵ  ２Ｂは、ディレクトリ３３に、“Ｕｎｋｎｏｗｎ”のエラーマークを設定する。
【０１３７】
Ｓ６８では、ソフトウェアは、Ｓ６１でアクセスしたデータのロードを、リクエスターＣＰＵ  ２Ａに依頼する。Ｓ６９では、リクエスターＣＰＵ  ２Ａは、Ｈｏｍｅ  ＣＰＵ
２Ｂに、当該データへのアクセスのリクエストを発行する。このとき、ディレクトリ３３には、エラーマークが設定されている。
【０１３８】
Ｓ７０では、Ｈｏｍｅ  ＣＰＵ  ２Ｂは、リクエスターＣＰＵ  ２Ａに、エラーの応答をする。Ｓ７１では、リクエスターＣＰＵ  ２Ａは、ソフトウェアに割込みでエラーの発生およびエラーが発生したキャッシュラインのアドレスを通知する。
【０１３９】
Ｓ７２では、ソフトウェアは、リクエスターＣＰＵ  ２Ａのコマンド指示レジスタ６０２に、コヒーレンシ調査コマンドを書き込む。また、ソフトウェアは、リクエスターＣＰＵ  ２Ａのアドレス指定レジスタ６０１に、調査対象のキャッシュラインのアドレスとして、エラーが発生したキャッシュラインのアドレスを書き込む。Ｓ７３では、リクエスターＣＰＵ  ２Ａは、Ｈｏｍｅ  ＣＰＵ  ２Ｂに、持ち出されたデータの調査のリクエストを発行する。このとき、ディレクトリ３３には、エラーマークが設定されている。
【０１４０】
Ｓ７４では、Ｈｏｍｅ  ＣＰＵ  ２Ｂは、リクエスターＣＰＵ  ２Ａに、エラーの応答をする。リクエスターＣＰＵ  ２Ａは、ステータス表示レジスタ６０３に、コヒーレンシ調査コマンドの実行結果を設定する。
【０１４１】
Ｓ７５では、ソフトウェアは、ステータス表示レジスタ６０３を読み込む。Ｓ７６では、ソフトウェアは、ステータス表示レジスタ６０３が正常以外の値を示す場合には、リクエスターＣＰＵ  ２Ａのコマンド指示レジスタ６０２に、ディレクトリ正常化コマンドを書き込む。また、ソフトウェアは、リクエスターＣＰＵ  ２Ａのアドレス指定レジスタ６０１に、ディレクトリ正常化の対象であるキャッシュラインのアドレスとして、エラーが発生したキャッシュラインのアドレスを書き込む。なお、ソフトウェアは、アドレス指定レジスタ６０１がＳ７３からＳ７６までの間に変更されていなければ、アドレス指定レジスタ６０１に当該アドレスを書き込まなくても良い。
【０１４２】
Ｓ７７では、リクエスターＣＰＵ  ２Ａは、Ｈｏｍｅ  ＣＰＵ  ２Ｂに、ディレクトリ正常化のリクエストを発行する。Ｓ７８では、Ｈｏｍｅ  ＣＰＵ  ２Ｂは、リクエスターＣＰＵ  ２Ａも含め、データを持ち出した可能性のあるＣＰＵ  ２に、キャッシュに持ち出されたデータの破棄を指示する。
【０１４３】
Ｓ７９では、キャッシュ破棄の指示を受けた各ＣＰＵ  ２は、キャッシュされたデータを破棄したことを、Ｈｏｍｅ  ＣＰＵ  ２Ｂに応答する。Ｓ８０では、Ｈｏｍｅ  ＣＰＵ
２Ｂは、ディレクトリ３３に、データの持ち出し無し、エラーマーク無し（正常）の設定をする。
【０１４４】
Ｓ８１では、Ｈｏｍｅ  ＣＰＵ  ２Ｂは、リクエスターＣＰＵ  ２Ａに、キャッシュ破
棄の結果を応答する。リクエスターＣＰＵ  ２Ａは、ステータス表示レジスタ６０３に、ディレクトリ正常化コマンドの実行結果を設定する。
【０１４５】
Ｓ８２では、ソフトウェアは、ステータス表示レジスタ６０３を読み込む。Ｓ８３では、ソフトウェアは、ステータス表示レジスタ６０３が正常の値を示す場合には、ディレクトリ正常化が完了したことを認識し、リカバリ処理をする。
【０１４６】
＜実施形態２の作用効果＞
実施形態２では、情報処理システム１は、エラーが検出された場合、実施形態１におけるディレクトリ正常化の処理の前に、コヒーレンシを調査する。コヒーレンシを調査により、コヒーレンシの異常が検出されなければ、ディレクトリ正常化の処理は実行されない。これにより、情報処理システム１は、経路故障やノードの故障等、エラーの状況に応じてコヒーレンシの異常状態から回復することができる。
【０１４７】
コヒーレンシ調査において、調査対象のデータの状態が正常である場合には、持ち出されたデータは、Ｈｏｍｅ  ＣＰＵ  ２Ｂのメモリに書き戻される。これにより、ディレクトリ３３で管理する持ち出し先のＣＰＵ  ２の数は初期化され、持ち出し先のＣＰＵ  ２の管理は簡易化される。
【０１４８】
＜記録媒体＞
コンピュータその他の機械、装置（以下、コンピュータ等）に上記いずれかの機能を実現させるプログラムをコンピュータ等が読み取り可能な記録媒体に記録することができる。そして、コンピュータ等に、この記録媒体のプログラムを読み込ませて実行させることにより、その機能を提供させることができる。
【０１４９】
ここで、コンピュータ等が読み取り可能な記録媒体とは、データやプログラム等の情報を電気的、磁気的、光学的、機械的、または化学的作用によって蓄積し、コンピュータ等から読み取ることができる記録媒体をいう。このような記録媒体のうちコンピュータ等から取り外し可能なものとしては、例えばフレキシブルディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＣＤ−Ｒ／Ｗ、ＤＶＤ、ブルーレイディスク、ＤＡＴ、８ｍｍテープ、フラッシュメモリなどのメモリカード等がある。また、コンピュータ等に固定された記録媒体としてハードディスクやＲＯＭ（リードオンリーメモリ）等がある。さらに、Solid State Drive（ＳＳＤ）はコンピュータ等から取り外し可能な記録媒体としても、コンピュータ等
に固定された記録媒体としても利用可能である。
【符号の説明】
【０１５０】
１        情報処理システム、情報処理装置
２        ＣＰＵ
２Ａ      リクエスターＣＰＵ
２Ｂ      Ｈｏｍｅ  ＣＰＵ
２Ｃ      キャッシュＣＰＵ
２１      メモリコントローラ
２２      キャッシュ
２３      機能レジスタ
３        メモリ
３１      共有メモリ
３２      Ｌｏｃａｌメモリ
３３      ディレクトリ
４        ノード
５        ＸＢ（クロスバスイッチ）
６０      ソフトウェアＩ／Ｆ
６０１    アドレス指定レジスタ
６０２    コマンド指定レジスタ
６０３    ステータス表示レジスタ
６１      リクエスト生成部
６２      リクエスト回収部
７０      ディレクトリ制御部
７１      コマンド実行部
８０      キャッシュ制御部
９０      外部バスＩ／Ｆ部
【図１】
0006551024.tif 000002
【図２】
0006551024.tif 000003
【図３】
0006551024.tif 000004
【図４】
0006551024.tif 000005
【図５】
0006551024.tif 000006
【図６】
0006551024.tif 000007
【図７】
0006551024.tif 000008
【図８】
0006551024.tif 000009
【図９】
0006551024.tif 000010
【図１０】
0006551024.tif 000011
【図１１】
0006551024.tif 000012
【図１２Ａ】
0006551024.tif 000013
【図１２Ｂ】
0006551024.tif 000014
【図１２Ｃ】
0006551024.tif 000015
【図１３】
0006551024.tif 000016
【図１４】
0006551024.tif 000017
【図１５】
0006551024.tif 000018
【図１６】
0006551024.tif 000019
【図１７】
0006551024.tif 000020
【図１８】
0006551024.tif 000021