(57)【特許請求の範囲】
【請求項１】
複数の演算処理装置と、前記複数の演算処理装置のそれぞれが接続する複数のメモリと、を有し、前記複数のメモリの共有領域が前記複数の演算処理装置で共有される情報処理装置において、
前記複数の演算処理装置のうち、第１の演算処理装置は、第２の演算処理装置にデータの要求を送信する第１の制御部を備え、
前記第２の演算処理装置は、前記第１の演算装置から前記要求を受信したとき、前記データを保持する演算処理装置と前記データの状態とを示すディレクトリ情報に基づいて、前記データをキャッシュに保持する第３の演算処理装置を検出し、前記第１の演算処理装置への前記データの転送と前記データの前記キャッシュからの破棄を含む依頼を前記第３の演算処理装置に送信する第２の制御部を備え、
前記第３の演算処理装置は、前記依頼を受信し、前記第１の演算処理装置へ前記データを送信し、前記データのステータスを変更し、前記ステータスを変更したことを示すステータス変更応答を前記第２の演算処理装置に送信する第３の制御部を備え、
前記第２の制御部は、前記第３の演算処理装置に前記依頼を送信してから所定時間以内に前記第３の演算処理装置から前記ステータス変更応答を受信しない場合に、前記第１の演算処理装置にエラー応答を送信し、
前記第１の制御部は、前記エラー応答を受信した場合、前記第３の演算処理装置から受信した前記データを破棄することを特徴とする情報処理装置。
【請求項２】
前記第２の制御部は、前記第３の演算処理装置に前記データの要求を送信してから前記所定時間以内に前記第３の演算処理装置から前記ステータス変更応答を受信しない場合に、前記データのディレクトリ情報を前記データに対するアクセスを禁止するエラーマークにする請求項１記載の情報処理装置。
【請求項３】
前記第３の制御部は、前記依頼を受信したときに、前記第３の演算処理装置が前記データを保持していない場合、前記第２の演算処理装置にエラー応答を送信することを特徴とする請求項１または２記載の情報処理装置。
【請求項４】
前記第２の制御部は、前記データのキャッシュからの破棄を含む依頼を前記第１の演算処理装置と前記第２の演算処理装置を除く前記複数の演算処理装置に送信し、
前記第１の演算処理装置と前記第２の演算処理装置を除く前記複数の演算処理装置それぞれは、前記データを前記キャッシュに保持していた場合に、前記データを破棄し、前記第２の制御部に前記データを破棄したことを示す応答を送信し、
前記第２の制御部は、前記ディレクトリ情報に基づく前記データを破棄したことを示す応答の数の期待値と、受信した前記データを破棄したことを示す応答の数とが一致しない場合に、前記データのディレクトリ情報を前記エラーマークにすることを特徴とする請求項１乃至３のいずれか１項に記載の情報処理装置。
【請求項５】
複数の演算処理装置と、前記複数の演算処理装置のそれぞれが接続する複数のメモリと、を有し、前記複数のメモリの共有領域が前記複数の演算処理装置で共有される情報処理装置の制御方法において、
前記複数の演算処理装置のうち、第１の演算処理装置が、第２の演算処理装置にデータの要求を送信し、
前記第２の演算処理装置が、前記第１の演算装置から前記要求を受信したとき、前記データを保持する演算処理装置と前記データの状態とを示すディレクトリ情報に基づいて、前記データをキャッシュに保持する第３の演算処理装置を検出し（、前記第１の演算処理装置への前記データの転送と前記データの前記キャッシュからの破棄を含む依頼を前記第３の演算処理装置に送信し、
前記第３の演算処理装置が、前記依頼を受信し、前記第１の演算処理装置へ前記データを送信し、前記データのステータスを変更し、前記ステータスを変更したことを示すステータス変更応答を前記第２の演算処理装置に送信し、
前記第２の演算処理装置が、前記第３の演算処理装置に前記依頼を送信してから所定時間以内に前記第３の演算処理装置から前記ステータス変更応答を受信しない場合に、前記第１の演算処理装置にエラー応答を送信し、
前記第１の演算処理装置が、前記エラー応答を受信した場合、前記第３の演算処理装置から受信した前記データを破棄する
処理を備える制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置および制御方法に関する。
【背景技術】
【０００２】
従来、複数の演算処理装置が主記憶装置を共有するSymmetric Multi-Processor（ＳＭＰ）システムがある。ＳＭＰでは、複数のノードを１パーティションとして扱っており、１つのノードが故障すると他のノードにそのエラーが波及してしまい、システムがダウンすることになる。
【０００３】
ノード間のデータ転送に関わる異常が発生した場合に、エラーの影響範囲を抑える技術が知られている（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１４−１９７４０２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ここで、ＳＭＰシステムにおいて、データ要求元のＣＰＵ、データの実メモリを所有するＣＰＵ、およびデータをキャッシュに持ち出しているＣＰＵをそれぞれローカルＣＰＵ（Ｌ−ＣＰＵ）、ホームＣＰＵ（Ｈ−ＣＰＵ）、およびリモートＣＰＵ（Ｒ−ＣＰＵ）と呼ぶ。
【０００６】
特許文献１では、Ｒ−ＣＰＵからＨ−ＣＰＵへのデータの書き戻し（ライトバック）に問題がある場合の解決方法しか記載されていない。従来技術では、ライトバックに問題がある場合以外の問題、例えば、異常があった場合にＬ−ＣＰＵがＲ−ＣＰＵからのデータを使用しまう等の問題は解決していない。そのため、このような問題が発生した場合に、キャッシュコヒーレンシが崩れ、エラーが他のノードに波及してしまい、システムがダウンしてしまう。
【０００７】
１つの側面において、本発明の課題は、異常が発生した場合にエラーの影響範囲を抑えることである。
【課題を解決するための手段】
【０００８】
実施の形態に係る情報処理装置は、複数の演算処理装置と、前記複数の演算処理装置のそれぞれが接続する複数のメモリと、を有し、前記複数のメモリの共有領域が前記複数の演算処理装置で共有される。
【０００９】
前記複数の演算処理装置のうち、第１の演算処理装置は、第２の演算処理装置にデータの要求を送信する第１の制御部を備える。
【００１０】
前記第２の演算処理装置は、第２の制御部を備える。前記第２の制御部は、前記第１の演算装置から前記要求を受信したとき、前記データを保持する演算処理装置と前記データの状態とを示すディレクトリ情報に基づいて、前記データをキャッシュに保持する第３の演算処理装置を検出する。前記第２の制御部は、前記第１の演算処理装置への前記データの転送と前記データの前記キャッシュからの破棄を含む依頼を前記第３の演算処理装置に送信する。
【００１１】
前記第３の演算処理装置は、第３の制御部を備える。前記第３の制御部は、前記依頼を受信し、前記第１の演算処理装置へ前記データを送信し、前記データのステータスを変更し、前記ステータスを変更したことを示すステータス変更応答を前記第２の演算処理装置に送信する。
【００１２】
前記第２の制御部は、前記第３の演算処理装置に前記依頼を送信してから所定時間以内に前記第３の演算処理装置から前記ステータス変更応答を受信しない場合に、前記第１の演算処理装置にエラー応答を送信する。
【００１３】
前記第１の制御部は、前記エラー応答を受信した場合、前記第３の演算処理装置から受信した前記データを破棄する。
【発明の効果】
【００１４】
実施の形態に係る情報処理装置によれば、異常が発生した場合にエラーの影響範囲を抑えることが出来る。
【図面の簡単な説明】
【００１５】
【図１】実施の形態に係る情報処理システムの構成図である。
【図２】実施の形態に係るビルディングブロックの構成図である。
【図３Ａ】実施の形態に係る情報処理システムの三角転送時の処理を示す図である。
【図３Ｂ】ローカルＣＰＵの処理を示すフローチャートである。
【図４Ａ】実施の形態に係る情報処理システムのリモートＣＰＵからの応答の検出処理を示す図である。
【図４Ｂ】ホームＣＰＵの処理を示すフローチャートである。
【図５Ａ】実施の形態に係る情報処理システムのディレクトリ情報に矛盾がある場合の処理を示す図である。
【図５Ｂ】リモートＣＰＵの処理を示すフローチャートである。
【図６】ＤＩＲ＝ＵＮＫとなるパターンを示す図である。
【図７Ａ】実施の形態に係る情報処理システムのＳＨ数が矛盾した場合の処理を示す図である。
【図７Ｂ】リモートＣＰＵの処理を示すフローチャートである。
【図７Ｃ】ホームＣＰＵの処理を示すフローチャートである。
【図８】ローカルＣＰＵの詳細な処理を示すフローチャートである。
【図９】ホームＣＰＵの詳細な処理を示すフローチャートである。
【図１０】リモートＣＰＵの詳細な処理を示すフローチャートである。
【図１１】実施の形態に係る情報処理システムの処理を示す図である。
【発明を実施するための形態】
【００１６】
従来のＳＭＰシステムにおいて、下記のような問題がある。
ＳＭＰシステムにおいて、データ要求元のＣＰＵ、データの実メモリを所有するＣＰＵ、およびデータをキャッシュに持ち出しているＣＰＵをそれぞれローカルＣＰＵ（Ｌ−ＣＰＵ）、ホームＣＰＵ（Ｈ−ＣＰＵ）、およびリモートＣＰＵ（Ｒ−ＣＰＵ）と呼ぶ。
【００１７】
・問題１―異常のある転送データを使用してしまう問題（三角転送）
Ｌ−ＣＰＵがＨ−ＣＰＵにデータを要求（ＥＸ要求）してＨ−ＣＰＵがＲ−ＣＰＵにＩＶ依頼を送信するまでは正常動作と同じである。尚、ＥＸ要求は、キャッシュデータのステータスをExclusiveとして要求データを持ちたいことを示す要求である。また、ＩＶ依頼は、キャッシュに要求データをステータスがExclusiveまたはModifiedで格納している場合に要求データをＬ−ＣＰＵに送信し、要求データに対応するキャッシュデータのステータスを無効（Invalid）にすることを依頼するものである。キャッシュデータのステータスについては後述する。ここで、もしＲ−ＣＰＵが故障していたとすると、Ｒ−ＣＰＵからの応答がないのでＨ−ＣＰＵは指示のタイムアウトを検出する。このときのアクセスがライトバック（ＷＲＢＫ）応答、すなわちＲ−ＣＰＵからのデータ受信を期待するものであれば、Ｈ−ＣＰＵはディレクトリ（ＤＩＲ）情報にエラーマーク（ＤＩＲ＝ＵＮＫ）を書き込む。ここで、Ｈ−ＣＰＵがＲ−ＣＰＵに依頼を出すのと、Ｌ−ＣＰＵの要求に応答を返すのを同時に行ったとすると、以下の問題が起きる。
【００１８】
Ｒ−ＣＰＵからＨ−ＣＰＵへの応答はないが、Ｒ−ＣＰＵからＬ−ＣＰＵへのデータ転送があったときに、Ｈ−ＣＰＵはタイムアウトを検出して、ＤＩＲ情報をＤＩＲ＝ＵＮＫとするが、Ｈ−ＣＰＵはＲ−ＣＰＵからの応答を受け取る前にＬ−ＣＰＵに応答を返しているため、Ｒ−ＣＰＵから転送されてきたデータに問題があることをＬ−ＣＰＵに伝えていない。そのため、Ｌ−ＣＰＵはＲ−ＣＰＵからの問題があるデータを使用してしまう。
【００１９】
・問題２−ＷＲＢＫ以外のパケットの滞留（タイムアウト）を検出してもエラーマークできない問題
従来、ＷＲＢＫ応答が期待されなければ、Ｈ−ＣＰＵはＤＩＲ情報にＤＩＲ＝ＵＮＫを書き込まない。これにより、以下の問題が起きる。
【００２０】
Ｈ−ＣＰＵがＤＩＲ情報を参照してＲ−ＣＰＵにデータ転送を指示してもＲ−ＣＰＵからの応答を得られないとき、Ｒ−ＣＰＵは故障しているはずであるが、エラーマークされないのでキャッシュコヒーレンシの崩れた状態を認識できないまま動作を継続することになる。
【００２１】
・問題３−ＤＩＲ情報とキャッシュの状態に矛盾が生じると、エラーが波及してしまう問題（Ｒ−ＣＰＵに波及）
Ｈ−ＣＰＵのＤＩＲ情報をもとに発行された依頼とＲ−ＣＰＵのキャッシュデータのステータスが一致しないとする。Ｈ−ＣＰＵはＲ−ＣＰＵにＥＸデータの返却を求めるが、Ｒ−ＣＰＵはＥＸデータを保持していなかった場合、プロトコルエラーとなりＲ−ＣＰＵはＦＡＴＡＬすることになる。尚、ＥＸデータは、ステータスがExclusiveまたはModifiedであるデータである。
【００２２】
・問題４−ＤＩＲ情報とキャッシュの状態に矛盾が生じると、エラーが波及してしまう問題（Ｈ−ＣＰＵに波及）
Ｈ−ＣＰＵのＤＩＲ情報をもとに発行された依頼とＲ−ＣＰＵのキャッシュデータのステータスが一致しないとする。Ｈ−ＣＰＵのＤＩＲ情報をもとに複数のＲ−ＣＰＵにデータ破棄を依頼する。そして、Ｈ−ＣＰＵはＲ−ＣＰＵからの破棄応答を受け取る。このとき、Ｈ−ＣＰＵはＳＨデータを保持しているＲ−ＣＰＵにだけ依頼を出すのではなく、全Ｒ−ＣＰＵに依頼を出し、ＤＩＲ情報で管理していたＲ−ＣＰＵのＳＨデータがすべて破棄されたかをＲ−ＣＰＵの破棄応答とつき合わせて確認している。ＤＩＲ情報で管理していたＳＨデータの数（ＳＨ数）と破棄されたＳＨデータの数が合わない場合、Ｈ−ＣＰＵはＦＡＴＡＬする。尚、ＳＨデータは、複数のＣＰＵがキャッシュに持っており、且つ更新されていないデータである。
【００２３】
従来技術では、データ要求元ＣＰＵと、データの実メモリを所有するＣＰＵと、データをキャッシュに持ち出しているＣＰＵとの３つのＣＰＵ間の間でのデータの書き戻し（ライトバック（ＷＲＢＫ））に起因した問題のみ解決している。そのため、ライトバック以外で発生した問題については、解決しておらず、上記の問題１〜４が発生した場合に、キャッシュコヒーレンシの異常が波及し、システムがダウンしてしまう。
【００２４】
以下、図面を参照しながら実施の形態について説明する。
図１は、実施の形態に係る情報処理システムの構成図である。
【００２５】
情報処理システム１０１は、ビルディングブロック（ＢＢ）２０１−ｉ（ｉ＝１〜４）およびクロスバスイッチ（ＸＢ）３０１を備える。
【００２６】
ＢＢ２０１−ｉは、ＣＰＵとメモリを有し、Operating System（ＯＳ）等のソフトウェアを実行する。尚、ＢＢ２０１−ｉの詳細な構成については後述する。また、実施の形態において、ＢＢ２０１−ｉをそれぞれノードとしている。尚、実施の形態のＢＢ２０１−ｉの数は一例であり、これに限られるものではない。
【００２７】
ＸＢ３０１は、各ビルディングブロック２０１−ｉを相互に接続する。
情報処理ステム１０１では、ＣＰＵ間のキャッシュコヒーレンス制御をディレクトリ方式で実現し、データをメモリ上に持つ後述のホームＣＰＵが該当ディレクトリを管理している。
【００２８】
図２は、実施の形態に係るビルディングブロックの構成図である。
ＢＢ２０１−ｉは、ＣＰＵ４０１−ｉ−ｊ（ｊ＝１，２）、メモリ５０１−ｉ−ｊ、およびＸＢチップ６０１−ｉを備える。尚、ＣＰＵ４０１−ｉ−ｊおよびメモリ５０１−ｉ−ｊの数は一例であり、これに限られるものではない。
【００２９】
ＣＰＵ４０１−ｉ−１は、コア４１１−ｉ、キャッシュ４２１−ｉ、アクセス制御部４３１−ｉ、メモリアクセス部４４１−ｉ、リクエスト（ＲＥＱ）部４５１−ｉ、タイマ４５２−ｉ−ｋ（ｋ＝１〜ｐ）、オーダー（ＯＤＲ）部４６１−ｉ、タイマ４６２−ｉ−ｍ（ｍ＝１〜ｑ）、外部インタフェース（ＩＦ）４７１−ｉを備える。
【００３０】
尚、図２において、ＣＰＵ４０１−ｉ−２およびメモリ５０１−ｉ−２の構成は、ＣＰＵ４０１−ｉ−１およびメモリ５０１−ｉ−１の構成と同様であるため、記載は省略している。
【００３１】
コア４１１−ｉは、演算処理を実行し、ＯＳやアプリケーション等を実行する。
キャッシュ４２１−ｉは、コア４１１−ｉで頻繁に利用されるデータを一時的に格納するキャッシュメモリである。
【００３２】
アクセス制御部４３１−ｉは、ノードマップ４３２−ｉ、タグ（ＴＡＧ）部４３３−ｉ、ディレクトリ（ＤＩＲ）部４３４−ｉ、およびカウント（ＣＮＴ）部４３５−ｉを備える。
【００３３】
ノードマップ４３２−ｉは、物理アドレスと、物理アドレスが示す記憶領域を有するメモリ５０１−ｉ−ｊと接続されたＣＰＵ４０１−ｉ−ｊを示す識別子（ＣＰＵＩＤ）が対応付けて登録されたテーブルである。
【００３４】
ＴＡＧ部４３３−ｉは、キャッシュ４２１−ｉに格納されたキャッシュデータのステータス（ＴＡＧ情報）を管理する。
【００３５】
ＤＩＲ部４３４−ｉは、ＤＩＲ情報５２１−ｉの管理を行う。
ＴＡＧ部４３３−ｉおよびＤＩＲ部４３４−ｉは、ＭＥＳＩプロトコル等の手法を用いて、キャッシュコヒーレンスを保持するための処理を実行する。例えば、ＴＡＧ部４３３−ｉおよびＤＩＲ部４３４−ｉは、キャッシュされたデータ（キャッシュデータ）のステータスがＭＥＳＩ(Modified/Exclusive/Shared/Invalid)のいずれであるかを判定する。
【００３６】
ＴＡＧ部４３３−ｉおよびＤＩＲ部４３４−ｉは、判定結果に応じて、他のＣＰＵ４０１−ｉ−ｊとコヒーレンシを保持するための要求（リクエスト）や依頼（オーダー）の送受信を行い、キャッシュデータの状態に応じた処理を実行する。ここで、「Ｍｏｄｉｆｉｅｄ」とは、いずれか１つのＣＰＵがデータをキャッシュしており、かつ、キャッシュデータが更新される状態を示す。なお、キャッシュデータの状態が「Modified」である場合には、ライトバックを実行する必要がある。
【００３７】
また、「Exclusive」とは、いずれか１つのＣＰＵがデータをキャッシュしており、かつ、キャッシュデータが更新されていない状態を示す。また、「Shared」とは、複数のＣＰＵがデータをキャッシュしており、かつ、キャッシュデータが更新されていないことを示す。また、「Invalid」とは、キャッシュデータのステータスが登録されていないことを示す。以下、Modified、Exclusive、Shared、およびInvalidをそれぞれＥＸ（Ｍ）、ＥＸ、ＳＨ、およびＩＶと表記する場合がある。尚、特に断らなければ、ＥＸはＥＸ（Ｍ）を含む。
【００３８】
ＣＮＴ部４３５−ｉは、データを使用しているＣＰＵ４０１−ｉ−ｊの数と当該データを返却（破棄）したＣＰＵ４０１−ｉ−ｊの数の管理を行う。
【００３９】
メモリアクセス部４４１−ｉ、メモリ５０１−ｉ−１へのアクセスを行い、ＤＩＲ情報５２１−ｉおよびデータ５１１−ｉの読み書きを行う。
【００４０】
リクエスト部４５１−ｉは、他のＣＰＵ４０１−ｉ−ｊに対する要求（リクエスト）を格納するバッファであり、他のＣＰＵ４０１−ｉ−ｊに要求を送信する。
【００４１】
タイマ４５２−ｉ−ｋは、リクエスト部４５１−ｉが依頼を送信してからの時間をカウントするタイマである。タイマ４５２−ｉ−ｋは、リクエスト部４５１−ｉが格納する要求に対応する数が用意される。
【００４２】
オーダー部４６１−ｉは、他のＣＰＵ４０１−ｉ−ｊに対する依頼（オーダー）を格納するバッファであり、他のＣＰＵ４０１−ｉ−ｊに依頼を送信する。
【００４３】
タイマ４６２−ｉ−ｍは、オーダー部４６１−ｉが依頼を送信してからの時間をカウントするタイマである。タイマ４６２−ｉ−ｍは、オーダー部４６１−ｉが格納する依頼に対応する数が用意される。
【００４４】
外部ＩＦ４７１−ｉは、ＸＢチップ６０１およびＣＰＵ４０１−ｉ−２と接続するインタフェースである。
【００４５】
メモリ５０１−ｉ−１は、共有領域とローカル領域を有する。メモリ５０１−ｉ−１は、ディレクトリ（ＤＩＲ）情報５２１−ｉおよびデータ５１１−ｉを格納する。以下、ＤＩＲ情報５２１−ｉを単にＤＩＲ５２１−ｉと表記する場合がある。ローカル領域は、同じＢＢ２０１−ｉ内のＣＰＵ４０１−ｉ−ｊのＣＰＵが使用でき、共有領域は、他のＢＢ２０１−ｉ内のＣＰＵ４０１−ｉ−ｊからも使用できる。例えば、共有領域は、全てのＢＢ２０１−ｉ内の複数のＣＰＵ４０１−ｉ−ｊで共有される。
【００４６】
ＤＩＲ情報５２１−ｉは、ＣＰＵ４０１−ｉ−１が所有するメモリ５０１−ｉ−１のアドレスのデータのステータス（ＭＥＳＩのいずれか）と当該アドレスのデータをキャッシュに持つＣＰＵ４０１−ｉ−ｊとが対応付けられたリストである。
【００４７】
ＸＢチップ６０１−ｉは、ＣＰＵ４０１−ｉ−ｊおよびＸＢ３０１と接続と接続している。
【００４８】
データ要求元のＣＰＵ、データの実メモリを所有するＣＰＵ、およびデータをキャッシュに持ち出しているＣＰＵをそれぞれローカルＣＰＵ（Ｌ−ＣＰＵ）、ホームＣＰＵ（Ｈ−ＣＰＵ）、およびリモートＣＰＵ（Ｒ−ＣＰＵ）と呼ぶ。
【００４９】
また、以下の説明において、Ｌ−ＣＰＵ、Ｈ−ＣＰＵ、およびＲ−ＣＰＵは、それぞれ異なるＢＢ２０１−ｉに搭載されたＣＰＵ４０１−ｉ−ｊのいずれかに相当する。尚、Ｌ−ＣＰＵとＨ−ＣＰＵは、同一のＣＰＵ４０１−ｉ−ｊであってもよい。
【００５０】
図３Ａは、実施の形態に係る情報処理システムの三角転送時の処理を示す図である。
図３Ｂは、ローカルＣＰＵの処理を示すフローチャートである。
【００５１】
図３Ａでは、Ｌ−ＣＰＵがあるデータを要求した場合に、当該データを格納するメモリをＨ−ＣＰＵが有し、当該データはＲ−ＣＰＵのキャッシュに持ち出されたとする。この場合、以下のような処理が行われる。
【００５２】
Ｌ−ＣＰＵ内のアクセス制御部４３１−ｉは、コア４１１−ｉから、メモリ５０１−ｉ−ｊのいずれかの共有領域にあるアドレスのデータを要求される。
【００５３】
コア４１１−ｉからの要求を受けて、アクセス制御部４３１−ｉは、ノードマップ４３２−ｉに基づいてアクセス先、すなわち要求データのアドレスの実メモリを所有しているＣＰＵ４０１−ｉ−ｊを検出する。
【００５４】
ここでは、要求データはＬ−ＣＰＵのキャッシュに登録されていなく（ステータスがＩＶ）、Ｌ−ＣＰＵが要求データのアドレスの実メモリも所有していない。また、要求データのアドレスの実メモリを所有しているＣＰＵとしてＨ−ＣＰＵが検出される。
【００５５】
Ｌ−ＣＰＵのリクエスト部４５１−ｉは、Ｈ−ＣＰＵに要求（ＥＸ要求）を出す。尚、ＥＸ要求は、キャッシュデータのステータスをＥＸとして要求データを持ちたいことを示す要求である。
【００５６】
Ｈ−ＣＰＵは、Ｌ−ＣＰＵから要求を受信すると、要求データが格納されたメモリのアドレスに対応するＤＩＲ情報を参照する。ここでは、要求データに対応するＤＩＲ情報５２１−ｉが、Ｒ−ＥＸであるとする。Ｈ−ＣＰＵは、“Ｒ”で示されるＲ−ＣＰＵがＥＸのステータスで要求データをキャッシュに持ち出していると分かる。
【００５７】
Ｈ−ＣＰＵのオーダー部４６１−ｉは、Ｒ−ＣＰＵにＩＶ依頼を送信する。ＩＶ依頼は、キャッシュに要求データをステータスがＥＸまたはＥＸ（Ｍ）で格納している場合にＬ−ＣＰＵに要求データを送信し、要求データに対応するキャッシュデータのステータスを無効にすることを依頼する。
【００５８】
Ｒ−ＣＰＵは、ＩＶ依頼を受信すると、アクセス制御部４３１−ｉは、Ｌ−ＣＰＵに要求データを送信し、キャッシュデータのステータスをＩＶに変更し、ステータスの変更したことを示す応答をＨ−ＣＰＵに送信する。また、Ｒ−ＣＰＵは、ＩＶ依頼の受信時に、キャッシュデータのステータスがＥＸ（Ｍ）であるので、アクセス制御部４３１−ｉは、Ｈ−ＣＰＵに要求データを送信（ライトバック応答）することにより、ライトバックを行う。尚、Ｒ−ＣＰＵは、ＩＶ依頼の受信時に、キャッシュデータのステータスがＥＸである場合は、アクセス制御部４３１−ｉは、Ｈ−ＣＰＵに要求データを送信せず、ステータスの変更したことを示す応答をＨ−ＣＰＵに送信する。
【００５９】
ここで、Ｒ−ＣＰＵがＬ−ＣＰＵに要求データを送信後且つＨ−ＣＰＵにステータスの変更したことを示す応答を送信前に故障した、またはＲ−ＣＰＵとＨ−ＣＰＵ間の経路に故障が発生したとする。
【００６０】
Ｈ−ＣＰＵは、ＩＶ依頼を送信するとタイマを起動し、所定時間以内にステータスの変更したことを示す応答を受信するかチェックしている。上記のように、Ｒ−ＣＰＵが故障またはＲ−ＣＰＵとＨ−ＣＰＵ間の経路に故障が発生した場合、Ｈ−ＣＰＵは、応答を受信しないため、タイムアウトを検出する。Ｈ−ＣＰＵは、タイムアウトを検出すると、ＤＩＲ情報５２１−ｉをＵＮＫに変更し、Ｌ−ＣＰＵにエラー（ＡＥＲ）応答を送信する。
【００６１】
Ｌ−ＣＰＵのＤＩＲ部４３４−ｉは、ＡＥＲ応答を受信したか判定し（ステップＳ７０１）、コア４１１−ｉは、ＡＥＲ応答を受信するとＲ−ＣＰＵから受信した要求データを破棄する（ステップＳ７０２）。また、コア４１１−ｉは、ＡＥＲ応答を受信しない場合、Ｒ−ＣＰＵから受信した要求データを使用する（ステップＳ７０３）。
【００６２】
Ｈ−ＣＰＵはタイムアウトを検出すると、ＡＥＲ応答をＬ−ＣＰＵに送信する。それにより、Ｌ−ＣＰＵはＲ−ＣＰＵからの問題があるデータ（すなわち、Ｈ−ＣＰＵが管理できていないデータ）を使用してしまうことを防止できる。すなわち、上述の問題１が解決できる。
【００６３】
図４Ａは、実施の形態に係る情報処理システムのリモートＣＰＵからの応答の検出処理を示す図である。
【００６４】
図４Ｂは、ホームＣＰＵの処理を示すフローチャートである。
図４Ａ，４Ｂにおいて、Ｌ−ＣＰＵ、Ｈ−ＣＰＵ、およびＲ−ＣＰＵは、上述の図３Ａの説明と同様の処理を行うとする。
【００６５】
ここでは、Ｈ−ＣＰＵの処理についてさらに説明する。
上述のようにＨ−ＣＰＵは、Ｒ−ＣＰＵにＩＶ依頼を送信するとタイマを起動し、所定時間以内にステータスの変更したことを示す応答を受信するかチェックしている。Ｈ−ＣＰＵは、Ｒ−ＣＰＵから所定時間内に応答を受信しない場合、タイムアウトを検出する（ステップＳ７１１）。Ｈ−ＣＰＵは、タイムアウトを検出すると、ＤＩＲ情報５２１−ｉをステータスが不明でありアクセスを禁止することを示すエラーマーク（ＤＩＲ＝ＵＮＫ）に変更し（ステップＳ７１１）、Ｌ−ＣＰＵにエラー（ＡＥＲ）応答を送信する。情報処理システム１０１は、エラーマークに対応するアドレス領域に対して、キャッシュコヒーレンシを復旧させるまで使用（アクセス）しないようする。これにより、キャッシュコヒーレンシの異常が波及するのを防ぐことが出来る。情報処理システム１０１は、ＤＩＲ情報にエラーマークが設定された場合、ＣＰＵ４０１−ｉーｊに含まれるリカバリ部（不図示）により、キャッシュコヒーレンシを復旧させる。
【００６６】
従来は、Ｈ−ＣＰＵにおいてライトバック応答（すなわち、メモリに書き戻すためのデータ）の受信が期待される場合に、ＩＶ依頼の送信から所定時間以内にライトバック応答を受信しなかった場合にのみ、ＤＩＲ情報をＤＩＲ＝ＵＮＫに変更している。
【００６７】
例えば、ＩＶ依頼を受信したときに、Ｒ−ＣＰＵのキャッシュの状態がＥＸである場合、Ｒ−ＣＰＵは、Ｈ−ＣＰＵにライトバック応答は送信せず、ステータスの変更したことを示す応答をＨ−ＣＰＵに送信する。この場合、従来技術では、Ｒ−ＣＰＵが故障し、ステータスの変更したことを示す応答をＨ−ＣＰＵが所定時間以内に受信できなくても、ＤＩＲ情報をＤＩＲ＝ＵＮＫに変更しない。すなわち、キャッシュコヒーレンスが崩れている可能性があっても、情報処理システムはキャッシュコヒーレンスの異常を認識できず、ＦＡＴＡＬが発生する。
【００６８】
Ｈ−ＣＰＵは、ＩＶ依頼を送信してから所定時間以内にステータスの変更したことを示す応答を受信するかチェックし、タイムアウトを検出すると、ＤＩＲ情報をＵＮＫに変更する。実施の形態の情報処理システムによれば、ライトバック応答以外の応答（ステータスの変更したことを示す応答）の所定時間以内の未受信を検出して、ＤＩＲ情報にエラーマークを記述できる。すなわち、上述の問題２が解決できる。
【００６９】
図５Ａは、実施の形態に係る情報処理システムのディレクトリ情報に矛盾がある場合の処理を示す図である。
図５Ｂは、リモートＣＰＵの処理を示すフローチャートである。
【００７０】
図５Ａにおいて、あるデータをキャッシュにステータスがＥＸで持ちたいＬ−ＣＰＵがいるとする。Ｌ−ＣＰＵがノードマップを確認すると、Ｈ−ＣＰＵが自身ではなかったので、Ｈ−ＣＰＵにＥＸになりたいとリクエスト（ＥＸ要求）を送信する。
【００７１】
Ｈ−ＣＰＵが対象アドレスのＤＩＲ情報５２１−ｉを確認するとＲ−ＣＰＵがＥＸで所有していると検出されたとする。Ｈ−ＣＰＵはＲ−ＣＰＵに、データをＬ−ＣＰＵに送信してステータス（ＴＡＧ情報）をＩＶにするようにオーダー（ＩＶ依頼）を送信する。本来であればＲ−ＣＰＵはＴＡＧ情報をＩＶに変更し、Ｈ−ＣＰＵに変更したことを応答で伝え、Ｒ−ＣＰＵはＬ−ＣＰＵにデータを転送する。
【００７２】
ここで、Ｒ−ＣＰＵは要求されたデータ（ＥＸデータ）をキャッシュに保持していなかったとする（すなわち、ＴＡＧ情報がＩＶ）。
【００７３】
Ｈ−ＣＰＵからのオーダーを受け取ったＲ−ＣＰＵはＴＡＧ情報を参照し、キャッシュに要求された対象アドレスのデータがあるか判定する（ステップＳ７２２）。ＴＡＧ情報にＨ−ＣＰＵから要求された対象アドレスのデータを持っていないので、Ｒ−ＣＰＵはＨ−ＣＰＵにＡＥＲ応答をする（ステップＳ７２３）。以降、Ｒ−ＣＰＵは、通常の処理（正常処理）を行う（ステップＳ７２４）。ＡＥＲ応答を受け取ったＨ−ＣＰＵは対象アドレスのＤＩＲ情報５２１−ｉにＤＩＲ＝ＵＮＫを書き込み、Ｌ−ＣＰＵにＡＥＲを応答する。ＡＥＲを受け取ったＬ−ＣＰＵは要求を終了する。
【００７４】
また、Ｌ−ＣＰＵがＳＨ、ＥＸデータを保持しているにも関わらず、ＳＨデータを要求してきた場合、Ｌ−ＣＰＵがＥＸデータを保持しているにもかかわらず、ＥＸデータを要求してきた場合も、Ｈ−ＣＰＵは、ＤＩＲ情報５２１−ｉをＤＩＲ＝ＵＮＫに変更し、Ｌ−ＣＰＵにＡＥＲを応答する。すでにＤＩＲ＝ＵＮＫであった場合には、Ｌ−ＣＰＵにＡＥＲを応答する。
【００７５】
また、Ｌ−ＣＰＵがＥＸデータを保持していないはずなのにデータを書き戻してきた場合や、Ｌ−ＣＰＵがＳＨ、ＥＸデータを保持していないはずなのにデータを返却してきた場合はＨ−ＣＰＵはＦＡＴＡＬする。
【００７６】
実施の形態に係る情報処理システムは、ディレクトリ情報に矛盾がある場合、ＡＥＲ応答を行い、ＤＩＲ情報にＤＩＲ＝ＵＮＫを書込むことで、ＤＩＲ情報の変更を抑止し、キャッシュコヒーレンシの異常の波及を防ぐ。すなわち、上述の問題３が解決できる。
【００７７】
ここで、ＤＩＲ矛盾があり、ＤＩＲ情報がＵＮＫとなるケースを示す。
図６は、ＤＩＲ＝ＵＮＫとなるパターンを示す図である。
【００７８】
図６では、Ｌ−ＣＰＵからのリクエストを受けて、Ｈ−ＣＰＵのＤＩＲ情報、Ｒ−ＣＰＵのＴＡＧ情報を変更する。
図６のＬ−ＴＡＧ、Ｒ−ＴＡＧは、それぞれＬ−ＣＰＵ、Ｒ−ＣＰＵのＴＡＧ情報である。
【００７９】
・ＩＶ要求、ＳＨ要求、またはＥＸ要求
ＩＶ要求の場合、Ｒ−ＣＰＵのＴＡＧ情報をＥＸからＳＨに変更するようにオーダーを投げ、Ｒ−ＣＰＵはＨ−ＣＰＵに変更したことを応答で伝えてＬ−ＣＰＵにデータを送り、Ｌ−ＣＰＵはＴＡＧ情報をＳＨに変更する。また、Ｈ−ＣＰＵはＤＩＲ情報をＲ−ＥＸからＲ−ＳＨに変更する。
【００８０】
ＳＨ要求の場合、Ｒ−ＣＰＵのＴＡＧ情報をＥＸからＳＨに変更するようにオーダーを投げ、Ｌ−ＣＰＵにデータを送り、Ｌ−ＣＰＵはＴＡＧ情報をＳＨに変更する。また、Ｈ−ＣＰＵはＤＩＲ情報をＲ−ＥＸからＲ−ＳＨに変更する。ここで、Ｒ−ＣＰＵがＥＸデータを変更している場合、Ｒ−ＣＰＵはＴＡＧ情報をＩＶに変更したことをＨ−ＣＰＵに応答で伝えてデータをＨ−ＣＰＵとＬ−ＣＰＵに送る。Ｌ−ＣＰＵはＴＡＧ情報をＥＸに変更する。また、Ｈ−ＣＰＵのＤＩＲ情報はＲ−ＥＸのままである。データを受け取ったＨ−ＣＰＵは最新のデータをメモリに反映する。
【００８１】
ＥＸ要求の場合、Ｒ−ＣＰＵのＴＡＧ情報をＥＸからＩＶに変更するようにオーダーを投げ、Ｒ−ＣＰＵはＴＡＧ情報をＩＶに変更したことをＨ−ＣＰＵに応答で伝えてデータをＬ−ＣＰＵに送り、Ｌ−ＣＰＵはＴＡＧ情報をＥＸに変更する。また、Ｈ−ＣＰＵのＤＩＲ情報はＲ−ＥＸのままである。ここで、Ｒ−ＣＰＵがＥＸデータを変更している場合、Ｒ−ＣＰＵはＨ−ＣＰＵとＬ−ＣＰＵにデータを送り、Ｈ−ＣＰＵは最新のデータをメモリに反映する。
【００８２】
・ＩＶ依頼
Ｒ−ＣＰＵのＴＡＧ情報をＥＸからＩＶに変更するようにオーダーを投げ、Ｒ−ＣＰＵはＴＡＧ情報をＩＶに変更したことをＨ−ＣＰＵに応答で伝える。Ｈ−ＣＰＵはＤＩＲ情報をＲ−ＥＸからＲ−ＩＶに変更する。
【００８３】
・全ＩＶ依頼
Ｒ−ＣＰＵのＴＡＧ情報をＳＨからＩＶに変更するようにオーダーを投げ、Ｒ−ＣＰＵはＴＡＧ情報をＩＶに変更したことをＨ−ＣＰＵに応答で伝える。Ｈ−ＣＰＵはＤＩＲ情報をＲ−ＳＨからＲ−ＩＶに変更する。
【００８４】
このとき、Ｒ−ＣＰＵはＨ−ＣＰＵからのオーダーと自身のキャッシュを確認し、ＳＨではなくＥＸで所有していたら、Ｒ−ＣＰＵはＦＡＴＡＬするようにする。
【００８５】
・強制全ＩＶ
Ｒ−ＣＰＵのＴＡＧ情報をＥＸからＩＶに変更するようにオーダーを投げ、Ｒ−ＣＰＵはＴＡＧ情報をＩＶに変更したことをＨ−ＣＰＵに応答で伝える。Ｈ−ＣＰＵはＤＩＲ情報をＲ−ＥＸからＲ−ＩＶに変更する。ここで、Ｒ−ＣＰＵがＥＸデータを変更している場合でも、Ｈ−ＣＰＵにデータ送付せず、Ｈ−ＣＰＵは最新のデータをメモリに反映しない。
【００８６】
図７Ａは、実施の形態に係る情報処理システムのＳＨ数が矛盾した場合の処理を示す図である。
図７Ｂは、リモートＣＰＵの処理を示すフローチャートである。
図７Ｃは、ホームＣＰＵの処理を示すフローチャートである。
【００８７】
図７Ａ〜７Ｃにおいて、あるデータをＨ−ＣＰＵが自身のメモリに戻したいとする。
Ｈ−ＣＰＵが対象アドレスのＤＩＲ情報５２１−ｉを参照すると、Ｒ−ＣＰＵがデータをステータス（ＴＡＧ情報）がＳＨでキャッシュに所有していると検出され、Ｈ−ＣＰＵはＲ−ＣＰＵにＴＡＧ情報をＩＶにするようにオーダー（データ回収指示）を送信し、データを回収する。尚、データの回収は、Ｒ−ＣＰＵに回収データを転送させるのではなく破棄させ、Ｒ−ＣＰＵのＴＡＧ情報がＳＨからＩＶになるように依頼する。
【００８８】
ここで、Ｒ−ＣＰＵは１つではなく複数あり、Ｈ−ＣＰＵのＣＮＴ部４３５−ｉがＳＨ数を確認すると複数のＲ−ＣＰＵがデータをＴＡＧ情報がＳＨでキャッシュに保持していたとする。このとき、Ｈ−ＣＰＵは、Ｌ−ＣＰＵとＨ−ＣＰＵを除く全ＣＰＵにオーダーを送信する。すなわち、Ｈ−ＣＰＵは、送信先のＣＰＵがデータをキャッシュに所有しているか否かにかかわらずオーダーを送信する。尚、Ｈ−ＣＰＵは、ＴＡＧ情報がＳＨでキャッシュに保持しているＲ−ＣＰＵにのみオーダーを送信してもよい。ここで、ＳＨ数は、ＤＩＲ情報に基づく、あるデータをキャッシュに持っているＲ−ＣＰＵの数である。
【００８９】
Ｈ−ＣＰＵからのデータ回収指示を受けたＲ−ＣＰＵはデータ、データがキャッシュにあるか判定し（ステップＳ７３１）、データがキャッシュにあれば破棄し、ＴＡＧ情報をＩＶに変更したことをしめす応答をＨ−ＣＰＵに送信する（ステップＳ７３２）。また、もともとデータを所有しておらず、ＴＡＧ情報がＩＶであったＲ−ＣＰＵもＨ−ＣＰＵに応答を返す（ステップＳ７３３）。Ｒ−ＣＰＵは、応答の中にキャッシュにデータを持っていたか否かを示す情報（ＣＮＴ）を含める。Ｒ−ＣＰＵは、キャッシュにデータを持っていた場合、ＣＮＴ＝１とし、キャッシュにデータを持っていなかった場合、ＣＮＴ＝０とする。
【００９０】
これにより、全Ｒ−ＣＰＵから応答が返ってきたときに、Ｈ−ＣＰＵは、ＳＨ数とＣＮＴ＝１である応答の数との差分（ＳＨ−ＣＮＴ）を算出し、すべてのＳＨのデータを回収できたかを判定する（ステップＳ７４１）。例えば、Ｈ−ＣＰＵは、差分がＳＨ数とＤＩＲ情報５２１−ｉにより算出される期待値と一致するか判定することにより、すべてのＳＨのデータを回収できたかを判定する。
【００９１】
Ｈ−ＣＰＵは、すべてのＳＨのデータを回収できていない場合、ＤＩＲ情報５２１−ｉにＤＩＲ＝ＵＮＫを書き込み（ステップＳ７４２）、通常の処理を実行する（ステップＳ７４３）。
【００９２】
算出された差分により、Ｈ−ＣＰＵは、それぞれ下記のように動作する。
【００９３】
・ＳＨ−ＣＮＴ＝０の場合（このとき期待値は０）
すべてのＳＨのデータを回収できたので、Ｈ−ＣＰＵは、正常にオーダーを終了する。
【００９４】
・ＳＨ−ＣＮＴ＝１の場合
ＳＨのデータを１つ回収できていない。どこかのＣＰＵがＳＨでデータを所有している状態である。
【００９５】
このとき、Ｈ−ＣＰＵはＤＩＲ情報ＤＩＲ情報５２１−ｉから回収できていないＳＨはどのＣＰＵが所有しているのかを確認する。
【００９６】
回収できなかったＳＨのデータを所有しているＣＰＵがＬ−ＣＰＵである場合、そもそもオーダーを送信していないので、期待値は１であり、ＳＨ−ＣＮＴと期待値は一致しているため、正常にオーダーを終了する。
【００９７】
回収できなかったＳＨを所有しているＣＰＵがＲ−ＣＰＵである場合、期待値は０であるが、ＳＨ−ＣＮＴと期待値は一致していない。すなわち、ＳＨのデータがどこかで消失してしまっているので、ＤＩＲ情報５２１−ｉにＤＩＲ＝ＵＮＫを書き込んでＬ−ＣＰＵにＡＥＲを応答し、オーダーを終了する。
【００９８】
・ＳＨ−ＣＮＴ≧２の場合
Ｌ−ＣＰＵ以外にもＲ−ＣＰＵからも回収できていないことになる。ＳＨがどこかで消失してしまっているので、ＤＩＲ情報にＤＩＲ＝ＵＮＫを書き込んでＬ−ＣＰＵにＡＥＲを応答し、オーダーを終了する。
【００９９】
・ＳＨ−ＣＮＴ≦−１の場合
この場合、Ｈ−ＣＰＵは、ＳＨのデータを余計に回収している。Ｈ−ＣＰＵが把握しているＳＨ数よりも多くのＲ−ＣＰＵがデータをＳＨで所有していたことになり、これはＨ−ＣＰＵが以前に応答を受け損ねていたことを示す。Ｈ−ＣＰＵは、ＤＩＲ情報５２１−ｉにＤＩＲ＝ＵＮＫを書き込んでＬ−ＣＰＵにＡＥＲを応答し、オーダーを終了する。
【０１００】
実施の形態の情報処理システムは、ＤＩＲ情報に基づくＳＨ数と実際にキャッシュにデータをＳＨで保持しているＣＰＵの数とが矛盾している場合、ＤＩＲ情報にＤＩＲ＝ＵＮＫを書込むことで、ＤＩＲ情報の変更を抑止し、キャッシュコヒーレンシの異常の波及を防ぐ。すなわち、上述の問題４が解決できる。
【０１０１】
次に、ＣＰＵ４０１−ｉ−ｊがデータ要求元であるＬ−ＣＰＵである場合の処理を示す。
【０１０２】
図８は、ローカルＣＰＵの詳細な処理を示すフローチャートである。
ステップＳ８０１において、コア４１１−ｉは、あるアドレスに格納されたデータを要求し、アクセス制御部４３１−ｉは要求を受信する。
【０１０３】
ステップＳ８０２において、ＴＡＧ部４３２−ｉは、ＴＡＧ情報に基づいて、要求されたデータ（要求データ）がキャッシュ４２１−ｉに格納されたかを判定する。キャッシュに要求データが４２１−ｉに格納された場合、制御はステップＳ８１５に進み、格納されていない場合、制御はステップＳ８０３に進む。
【０１０４】
ステップＳ８０３において、アクセス制御部４３１−ｉは、ノードマップ４３２−ｉに基づいて、要求データを格納するアドレスに対応するメモリを所有するＣＰＵ４０１−ｉ−ｊを検出する。要求データを格納するアドレスに対応するメモリを自ＣＰＵ４０１−ｉ−ｊが所有していた場合、制御はステップＳ８１３に進み、要求データを格納するアドレスに対応するメモリを他のＣＰＵ４０１−ｉ−ｊ（Ｈ−ＣＰＵ）が所有していた場合、制御はステップＳ８０４に進む。
【０１０５】
ステップＳ８０４において、リクエスト部４５１−ｉは、Ｈ−ＣＰＵに要求を送信し、タイマ４５２−ｉ−ｋを２つ起動する。２つのタイマ４５２−ｉ−ｋは、それぞれ第１の所定時間、および第１の所定時間より長い第２の所定時間で満了する。
【０１０６】
ステップＳ８０５において、リクエスト部４５１−ｉは、Ｈ−ＣＰＵに要求を送信してから第１の所定時間以内にＨ−ＣＰＵから応答を受信した場合、制御はステップＳ８０５に進み、Ｈ−ＣＰＵに要求を送信してから第１の所定時間以内にＨ−ＣＰＵから応答を受信しなかった（タイマ満了）場合、制御はステップＳ８１１に進む。
【０１０７】
ステップＳ８０６において、ＤＩＲ部４３４−ｉは、ＡＥＲ応答を受信したか判定する。ＡＥＲ応答を受信した場合、制御はステップＳ８１２に進み、ＡＥＲ応答を受信しない場合、制御はステップＳ８０７に進む。
【０１０８】
ステップＳ８０７において、Ｒ−ＣＰＵからの要求データの転送（送信）がある場合、制御はステップＳ８０８に進み、Ｒ−ＣＰＵからの要求データの転送が無い場合、制御はステップＳ８０９に進む。尚、Ｒ−ＣＰＵからの要求データの転送が無い場合、アクセス制御部４３１−ｉは、Ｈ−ＣＰＵから要求データを受信している。
【０１０９】
ステップＳ８０８において、ＤＩＲ部４３４−ｉは、Ｈ−ＣＰＵに要求を送信してから第２の所定時間以内にＲ−ＣＰＵから応答（要求データ）を受信したか判定する。Ｈ−ＣＰＵに要求を送信してから第２の所定時間以内にＲ−ＣＰＵから応答を受信した場合、制御はステップＳ８０９に進み、Ｈ−ＣＰＵに要求を送信してから第２の所定時間以内にＲ−ＣＰＵから応答を受信しない場合（タイマ満了）、制御はステップＳ８１０に進む。
【０１１０】
ステップＳ８０９において、アクセス制御部４３１−ｉは、受信した要求データをキャッシュ４２１−ｉに格納する。
【０１１１】
ステップＳ８１０において、ＤＩＲ部４３４−ｉは、タイムアウトと判定する。
ステップＳ８１１において、ＤＩＲ部４３４−ｉは、タイムアウトと判定する。
【０１１２】
ステップＳ８１２において、ＤＩＲ部４３４−ｉは、コア４１１−ｉに受信した要求データの破棄を通知する。
【０１１３】
ステップＳ８１３において、アクセス制御部４３１−ｉは、メモリアクセス部４４１−ｉを介してメモリ５０１−ｉ−ｊから要求データを読み出し、キャッシュ４２１−ｉに格納する。
【０１１４】
ステップＳ８１４において、ＤＩＲ部４３４−ｉは、ＤＩＲ情報５２１−ｉを更新する。
【０１１５】
ステップＳ８１５において、アクセス制御部４３１−ｉはコアに要求データを送信する。
【０１１６】
次に、ＣＰＵ４０１−ｉ−ｊがデータの実メモリを所有するＨ−ＣＰＵである場合の処理を示す。
【０１１７】
図９は、ホームＣＰＵの詳細な処理を示すフローチャートである。
ステップＳ８２１において、リクエスト部４５１−ｉは、Ｌ−ＣＰＵから要求を受信する。
【０１１８】
ステップＳ８２２において、Ｌ−ＣＰＵからの要求がデータ書き戻し要求である場合、制御はステップＳ８２３に進み、Ｌ−ＣＰＵからの要求がデータ書き戻し要求でない場合、制御はステップＳ８２８に進む。
【０１１９】
ステップＳ８２３において、ＤＩＲ部４３４−ｉは、ＤＩＲ情報５２１−ｉに矛盾があるか判定する。ＤＩＲ部４３４−ｉは、例えば、図６に示すようなパターンに該当するかによって、矛盾があるか判定する。
【０１２０】
ステップＳ８２４において、ＤＩＲ情報５２１−ｉがすでにエラーマーク（ＤＩＲ＝ＵＮＫ）である場合、制御はステップＳ８４２進み、エラーマーク（ＤＩＲ＝ＵＮＫ）でない場合、制御はステップＳ８２５進む。
【０１２１】
ステップＳ８２５において、ＤＩＲ情報５２１−ｉがＬ−ＣＰＵ：ＥＸ以外の場合  制御はステップＳ８２６に進み、ＤＩＲ情報５２１−ｉがＬ−ＣＰＵ：ＥＸの場合、制御はステップＳ８２７に進む。
【０１２２】
ステップＳ８２６において、ホームＣＰＵはＦＡＴＡＬする。
ステップＳ８２７において、メモリアクセス部４４１は、データ５１１−ｉの更新を行う。
【０１２３】
ステップＳ８２８において、ＤＩＲ部４３４−ｉは、ＤＩＲ情報５２１−ｉに矛盾があるか判定する。
【０１２４】
ステップＳ８２９において、ＤＩＲ情報５２１−ｉがすでにエラーマーク（ＤＩＲ＝ＵＮＫ）である場合、制御はステップＳ８４２進み、エラーマーク（ＤＩＲ＝ＵＮＫ）でない場合、制御はステップＳ８３０進む。
【０１２５】
ステップＳ８３０において、ＤＩＲ情報５２１−ｉがＬ−ＣＰＵ：ＳＨであり、且つＬ−ＣＰＵからの要求がＳＨ要求である場合、制御はステップＳ８４１に進み、ＤＩＲ情報５２１−ｉがＬ−ＣＰＵ：ＳＨであり、且つＬ−ＣＰＵからの要求がＳＨ要求（ＴＡＧ情報をＳＨとしてデータを持ちたい要求）である以外の場合、制御はステップＳ８３１に進む。
【０１２６】
ステップＳ８３１において、ＤＩＲ情報５２１−ｉがＬ−ＣＰＵ：ＥＸであり、且つＬ−ＣＰＵからの要求がＥＸ要求（ＴＡＧ情報をＥＸとしてデータを持ちたい要求）である場合、制御はステップＳ８４１に進み、ＤＩＲ情報５２１−ｉがＬ−ＣＰＵ：ＥＸであり、且つＬ−ＣＰＵからの要求がＥＸ要求である以外の場合、制御はステップＳ８３２に進む。
【０１２７】
ステップＳ８３２において、ＤＩＲ部４３４−ｉは、ＤＩＲ情報５２１−ｉに基づいて、データをキャッシュに格納している他のＣＰＵ（Ｒ−ＣＰＵ）を検出する。データをキャッシュに格納している他のＣＰＵがない場合、制御はステップＳ８３３に進み、データをキャッシュに格納している他のＣＰＵがある場合、制御はステップＳ８３４に進む。
【０１２８】
ステップＳ８３３において、メモリアクセス部４４１−ｉは、メモリ５０１−ｉ−ｊからデータ５１１−ｉを読み出す。
【０１２９】
ステップＳ８３４において、オーダー部４６１−ｉは、Ｒ−ＣＰＵに依頼を送信し、タイマ４５２−ｉ−ｋを起動する。Ｒ−ＣＰＵへの依頼は、Ｒ−ＣＰＵのＴＡＧ情報をＩＶにする（キャッシュデータを破棄する）ＩＶ依頼（データ破棄依頼）や、Ｌ−ＣＰＵへのデータの転送依頼を含むＩＶ依頼（データ返却依頼）等である。
【０１３０】
ステップＳ８３５において、ＤＩＲ部８１１−ｉは、Ｒ−ＣＰＵに要求を送信してから第３の所定時間以内にＲ−ＣＰＵから応答を受信したか判定する。Ｒ−ＣＰＵに要求を送信してから第３の所定時間以内にＲ−ＣＰＵから応答を受信した場合、制御はステップＳ８３６に進み、Ｒ−ＣＰＵに要求を送信してから第３の所定時間以内にＲ−ＣＰＵから応答を受信しない場合（タイマ満了）、制御はステップＳ８３８に進む。
【０１３１】
ステップＳ８３６において、ＤＩＲ部８１１−ｉは、Ｒ−ＣＰＵから受信した応答がＡＥＲ応答であるか判定する。Ｒ−ＣＰＵから受信した応答がＡＥＲ応答である場合、制御はステップＳ８４１に進み、Ｒ−ＣＰＵから受信した応答がＡＥＲ応答で無い場合、制御はステップＳ８３７に進む。
【０１３２】
ステップＳ８３７において、ＣＮＴ部４３５−ｉは、ＳＨ数が不足しているか（すなわち、すべてのＳＨのデータを回収できたか）判定する。ＳＨ数が不足している場合（すべてのＳＨのデータを回収できていない場合）、制御はステップＳ８４１に進み、ＳＨ数が不足していない場合、制御はステップＳ８３９に進む。
【０１３３】
ステップＳ８３８において、ＤＩＲ部４３４−ｉは、タイムアウトを判定する。
ステップＳ８３９において、ＤＩＲ部４３４−ｉは、Ｌ−ＣＰＵからの要求に基づいて、ＤＩＲ情報５２１−ｉを更新する。
【０１３４】
ステップＳ８４０において、ＤＩＲ部４３４−ｉは、Ｌ−ＣＰＵに応答する。
ステップＳ８４１において、ＤＩＲ部４３４−ｉは、ＤＩＲ情報５２１−ｉにエラーマーク（ＤＩＲ＝ＵＮＫ）を書き込む。
【０１３５】
ステップＳ８４２において、ＤＩＲ部４３４−ｉは、Ｌ−ＣＰＵにＡＥＲ応答を送信する。
【０１３６】
次に、ＣＰＵ４０１−ｉ−ｊがデータをキャッシュに格納していると判定されたＲ−ＣＰＵである場合の処理を示す。
【０１３７】
図１０は、リモートＣＰＵの詳細な処理を示すフローチャートである。
ステップＳ８５１において、オーダー部４６１−ｉは、Ｈ−ＣＰＵから依頼を受信する。
【０１３８】
ステップＳ８５２において、Ｈ−ＣＰＵから受信した依頼が、データ返却依頼である場合、制御はステップＳ８５３に進み、データ返却依頼でない場合、制御はステップＳ８５９に進む。
【０１３９】
ステップＳ８５３において、ＴＡＧ部４３３−ｉは、キャッシュ４２１−ｉにＨ−ＣＰＵからの依頼に対応するデータが格納されたか判定する。キャッシュ４２１−ｉにＨ−ＣＰＵからの依頼に対応するデータが格納された場合、制御はステップＳ８５４に進み、格納されていない場合、制御はステップＳ８５８に進む。
【０１４０】
ステップＳ８５４において、ＴＡＧ部４３３−ｉは、キャッシュ４２１−ｉを更新する。すなわち、ＴＡＧ部４３３−ｉは、キャッシュ４２１−ｉに格納されたＨ−ＣＰＵからの依頼に対応するデータをオーダー部４６１−ｉに送信し、キャッシュ４２１−ｉに格納されたデータを破棄、すなわち、当該データのステータスを変更する。
【０１４１】
ステップＳ８５５において、オーダー部４６１−ｉは、ステータスを変更したことを示す応答をＨ−ＣＰＵに送信する。さらに、オーダー部４６１−ｉは、Ｈ−ＣＰＵからの依頼に対応するデータをＨ−ＣＰＵに送信してもよい。
【０１４２】
ステップＳ８５６において、オーダー部４６１−ｉがＨ−ＣＰＵからの依頼に対応するデータをＬ−ＣＰＵに送信する場合、制御はステップＳ８５７に進み、送信しない場合、処理は終了する。
【０１４３】
ステップＳ８５７において、オーダー部４６１−ｉがＨ−ＣＰＵからの依頼に対応するデータをＬ−ＣＰＵに送信する。
【０１４４】
ステップＳ８５８において、ＤＩＲ部４３４−ｉは、Ｈ−ＣＰＵにＡＥＲ応答を送信する。
【０１４５】
ステップＳ８５９において、Ｈ−ＣＰＵから受信した依頼は、データ破棄依頼である。
ステップＳ８６０において、ＴＡＧ部４３３−ｉは、キャッシュ４２１−ｉにＨ−ＣＰＵからの依頼に対応するデータが格納されたか判定する。キャッシュ４２１−ｉにＨ−ＣＰＵからの依頼に対応するデータが格納された場合、制御はステップＳ８６１に進み、格納されていない場合、制御はステップＳ８６３に進む。
【０１４６】
ステップＳ８６１において、ＴＡＧ部４３３−ｉは、キャッシュ４２１−ｉを更新する。すなわち、ＴＡＧ部４３３−ｉは、キャッシュ４２１−ｉに格納されたＨ−ＣＰＵからの依頼に対応するデータを破棄、すなわち、当該データのステータスを変更する。
【０１４７】
ステップＳ８６２において、ＴＡＧ部４３３−ｉは、Ｈ−ＣＰＵからの依頼に対応するデータを持っていたことを示すＣＮＴ＝１を含む応答をＨ−ＣＰＵに送信する。
【０１４８】
ステップＳ８６３において、ＴＡＧ部４３３−ｉは、Ｈ−ＣＰＵからの依頼に対応するデータを持っていなかったことをＣＮＴ＝０を含む応答をＨ−ＣＰＵに送信する。
【０１４９】
図１１は、実施の形態に係る情報処理システムの処理を示す図である。
上述の図８〜１０の処理を簡略化して示すと図１１のようになる。
【０１５０】
Ｌ−ＣＰＵがデータ要求を生成し、Ｈ−ＣＰＵに送信する。Ｌ−ＣＰＵは、データ要求を送信とともに、Ｈ−ＣＰＵからの応答を検出するＬ−Ｈタイマ、Ｒ−ＣＰＵからの応答を検出するＲ−Ｌタイマを起動する。
【０１５１】
Ｈ−ＣＰＵは、データ要求を受信するとＲＥＱ−ＯＤＲタイマを起動し、データ要求を受信してから依頼を発行するまでの時間をカウントする。Ｈ−ＣＰＵは、依頼（オーダー）を生成し、Ｒ−ＣＰＵに送信する。また、Ｈ−ＣＰＵは、依頼の送信とともに、Ｒ−ＣＰＵからの応答を検出するＨ−Ｒタイマを起動する。ＲＥＱ−ＯＤＲタイマまたはＨ−Ｒタイマがタイムアウトした場合、ＤＩＲ情報５２１−ｉをＤＩＲ＝ＵＮＫにする。
【０１５２】
Ｒ−ＣＰＵは、Ｈ−ＣＰＵからの依頼と自身のＴＡＧ情報に基づいて、ＤＩＲ情報に矛盾が無いか判定する。Ｒ−ＣＰＵは、ＤＩＲ情報に矛盾が無ければ、正常な応答を生成しＨ−ＣＰＵに送信する。また、Ｌ−ＣＰＵにデータの送信が必要であれば、Ｌ−ＣＰＵにデータを送信する（三角転送）。Ｒ−ＣＰＵは、ＤＩＲ情報に矛盾があれば、ＡＥＲ応答をＨ−ＣＰＵに送信する。
【０１５３】
Ｈ−ＣＰＵは、Ｒ−ＣＰＵからの応答とステート（ＤＩＲ情報およびＳＨ数に基づいて、Ｌ−ＣＰＵへの応答を生成し、Ｌ−ＣＰＵに送信する。
【０１５４】
実施の形態に係る情報処理システムによれば、上述の問題１〜４が発生しても、キャッシュコヒーレンシの異常が波及し、システムがダウンしてしまうのを防ぐことが出来る。
【０１５５】
また、情報処理システム１０１は、あらかじめ情報処理システム１０１のハードウェアまたはソフトウェアが参照できる場所に、故障ノードを示す情報を登録しておき、ＣＰＵ４０２−ｉーｊがアクセスする際にアクセス先が故障ノードであったら、ＤＩＲ情報５２１−ｉにＤＩＲ＝ＵＮＫを書いてもよい。
【０１５６】
情報処理システム１０１は、Ｈ−ＣＰＵの依頼がタイムアウトしたらＤＩＲ情報５２１−ｉにＤＩＲ＝ＵＮＫを書き込んでいるが、エントリがつまって依頼を発行できない場合に備えて別途タイマを用意し、エントリを解放できていない依頼の宛先を故障ノードであるとしてＤＩＲ情報５２１−ｉにＤＩＲ＝ＵＮＫを書いてもよい。また、このとき上記の故障ノードの登録を行ってもよい。
【０１５７】
アクセス制御部４３１−ｉは、ある範囲内でＤＩＲ＝ＵＮＫを複数検出したら等の条件を用いて、故障メモリアドレスを示すＤＩＲ情報５２１−ｉのＤＩＲ＝ＵＮＫだけでなく、故障ＤＩＭＭ、故障ＣＰＵ、または故障ノードを示すエラーマークを設定する等、エラーマークする単位を昇格させてもよい。また、そのときにはＤＩＲ情報５２１−ｉがＤＩＲ＝ＵＮＫの場合と同様のリカバリができるようにしておいてもよい。これにより、タイムアウト待ちやリカバリにかかる時間を節約でき、性能を向上できる。
【０１５８】
以上の実施の形態に関し、さらに以下の付記を開示する。
（付記１）
複数の演算処理装置と、前記複数の演算処理装置のそれぞれが接続する複数のメモリと、を有し、前記複数のメモリの共有領域が前記複数の演算処理装置で共有される情報処理装置において、
前記複数の演算処理装置のうち、第１の演算処理装置は、第２の演算処理装置にデータの要求を送信する第１の制御部を備え、
前記第２の演算処理装置は、前記第１の演算装置から前記要求を受信したとき、前記データを保持する演算処理装置と前記データの状態とを示すディレクトリ情報に基づいて、前記データをキャッシュに保持する第３の演算処理装置を検出し、前記第１の演算処理装置への前記データの転送と前記データの前記キャッシュからの破棄を含む依頼を前記第３の演算処理装置に送信する第２の制御部を備え、
前記第３の演算処理装置は、前記依頼を受信し、前記第１の演算処理装置へ前記データを送信し、前記データのステータスを変更し、前記ステータスを変更したことを示すステータス変更応答を前記第２の演算処理装置に送信する第３の制御部を備え、
前記第２の制御部は、前記第３の演算処理装置に前記依頼を送信してから所定時間以内に前記第３の演算処理装置から前記ステータス変更応答を受信しない場合に、前記第１の演算処理装置にエラー応答を送信し、
前記第１の制御部は、前記エラー応答を受信した場合、前記第３の演算処理装置から受信した前記データを破棄することを特徴とする情報処理装置。
（付記２）
前記第２の制御部は、前記第３の演算処理装置に前記データの要求を送信してから前記所定時間以内に前記第３の演算処理装置から前記ステータス変更応答を受信しない場合に、前記データのディレクトリ情報を前記データに対するアクセスを禁止するエラーマークにする付記１記載の情報処理装置。
（付記３）
前記第３の制御部は、前記依頼を受信したときに、前記第３の演算処理装置が前記データを保持していない場合、前記第２の演算処理装置にエラー応答を送信することを特徴とする付記１または２記載の情報処理装置。
（付記４）
前記第２の制御部は、前記データのキャッシュからの破棄を含む依頼を前記第１の演算処理装置と前記第２の演算処理装置を除く前記複数の演算処理装置に送信し、
前記第１の演算処理装置と前記第２の演算処理装置を除く前記複数の演算処理装置それぞれは、前記データを前記キャッシュに保持していた場合に、前記データを破棄し、前記第２の制御部に前記データを破棄したことを示す応答を送信し、
前記第２の制御部は、前記ディレクトリ情報に基づく前記データを破棄したことを示す応答の数の期待値と、受信した前記データを破棄したことを示す応答の数とが一致しない場合に、前記データのディレクトリ情報を前記エラーマークにすることを特徴とする付記１乃至３のいずれか１項に記載の情報処理装置。
（付記５）
複数の演算処理装置と、前記複数の演算処理装置のそれぞれが接続する複数のメモリと、を有し、前記複数のメモリの共有領域が前記複数の演算処理装置で共有される情報処理装置の制御方法において、
前記複数の演算処理装置のうち、第１の演算処理装置が、第２の演算処理装置にデータの要求を送信し、
前記第２の演算処理装置が、前記第１の演算装置から前記要求を受信したとき、前記データを保持する演算処理装置と前記データの状態とを示すディレクトリ情報に基づいて、前記データをキャッシュに保持する第３の演算処理装置を検出し、前記第１の演算処理装置への前記データの転送と前記データの前記キャッシュからの破棄を含む依頼を前記第３の演算処理装置に送信し、
前記第３の演算処理装置が、前記依頼を受信し、前記第１の演算処理装置へ前記データを送信し、前記データのステータスを変更し、前記ステータスを変更したことを示すステータス変更応答を前記第２の演算処理装置に送信し、
前記第２の演算処理装置が、前記第３の演算処理装置に前記依頼を送信してから所定時間以内に前記第３の演算処理装置から前記ステータス変更応答を受信しない場合に、前記第１の演算処理装置にエラー応答を送信し、
前記第１の演算処理装置が、前記エラー応答を受信した場合、前記第３の演算処理装置から受信した前記データを破棄する
処理を備える制御方法。
制御方法。
（付記６）
前記第２の演算処理装置が、前記第３の演算処理装置に前記データの要求を送信してから前記所定時間以内に前記第３の演算処理装置から前記ステータス変更応答を受信しない場合に、前記データのディレクトリ情報を前記データに対するアクセスを禁止するエラーマークにする付記５記載の制御方法。
（付記７）
前記第３の演算処理装置が、前記依頼を受信したときに、前記第３の演算処理装置が前記データを保持していない場合、前記第２の演算処理装置にエラー応答を送信することを特徴とする付記５または６記載の制御方法。
（付記８）
前記第２の演算処理装置が、前記データのキャッシュからの破棄を含む依頼を前記第１の演算処理装置と前記第２の演算処理装置を除く前記複数の演算処理装置に送信し、
前記第１の演算処理装置と前記第２の演算処理装置を除く前記複数の演算処理装置それぞれが、前記データを前記キャッシュに保持していた場合に、前記データを破棄し、前記第２の演算処理装置に前記データを破棄したことを示す応答を送信し、
前記第２の演算処理装置が、前記ディレクトリ情報に基づく前記データを破棄したことを示す応答の数の期待値と、受信した前記データを破棄したことを示す応答の数とが一致しない場合に、前記データのディレクトリ情報を前記エラーマークにすることを特徴とする付記５乃至７のいずれか１項に記載の制御方法。
【符号の説明】
【０１５９】
１０１    情報処理システム
２０１    ビルディングブロック（ＢＢ）
３０１    クロスバスイッチ（ＸＢ）
４０１    ＣＰＵ
４１１    コア
４２１    キャッシュ
４３１    アクセス制御部
４４１    メモリアクセス部
４５１    リクエスト部
４５２    タイマ
４６１    オーダー部
４６２    タイマ
４７１    外部インタフェース（ＩＦ）
５０１    メモリ
５１１    データ
５２１    ディレクトリ（ＤＩＲ）情報
６０１    ＸＢチップ
【図１】
0006520733.tif 000002
【図２】
0006520733.tif 000003
【図３Ａ】
0006520733.tif 000004
【図３Ｂ】
0006520733.tif 000005
【図４Ａ】
0006520733.tif 000006
【図４Ｂ】
0006520733.tif 000007
【図５Ａ】
0006520733.tif 000008
【図５Ｂ】
0006520733.tif 000009
【図６】
0006520733.tif 000010
【図７Ａ】
0006520733.tif 000011
【図７Ｂ】
0006520733.tif 000012
【図７Ｃ】
0006520733.tif 000013
【図８】
0006520733.tif 000014
【図９】
0006520733.tif 000015
【図１０】
0006520733.tif 000016
【図１１】
0006520733.tif 000017