(57)【要約】【課題】ディレクトリ１１０で訂正不可能障害が検出された場合でも、継続動作可能状態に復帰できるメモリコントローラ１０９等を提供する。【解決手段】メモリコントローラ１０９は、第一のエントリ情報の一部のキャッシュデータからなる第二のエントリ情報を保持するディレクトリキャッシュ１１２を備えている。ディレクトリ１１０のエントリ情報に訂正不可能な異常が検出された場合、そのエントリ情報を無効化し、そのエントリ情報に代わる代替エントリ情報をディレクトリキャッシュ１１２に作成する。これにより、プロセッサ１０１〜１０４は、異常の発生したエントリ情報を使わずに、代替エントリ情報を使うことができるので、継続動作可能状態に復帰する。【選択図】図１
2008234531.tif 000002
【特許請求の範囲】
【請求項１】
主記憶データを格納する主記憶装置と、前記主記憶データの一部をキャッシュデータとして保持するプロセッサキャッシュを有する複数のプロセッサと、前記主記憶データについてアドレス情報毎のキャッシュ制御状態を示す第一のエントリ情報を格納するディレクトリとに接続され、前記複数のプロセッサの各々から前記主記憶装置へのアクセスを前記第一のエントリ情報に応じて制御することにより前記プロセッサキャッシュ間のコヒーレンシを保証するメモリコントローラであって、
前記第一のエントリ情報の一部のキャッシュデータからなる第二のエントリ情報を保持するディレクトリキャッシュと、前記ディレクトリから読み出した前記第一のエントリ情報に訂正不可能な異常があるか否かを検出する障害検出部と、この障害検出部によって異常があると検出された前記第一のエントリ情報を無効化する指示を前記複数のプロセッサへ出力するスヌープ生成部と、このスヌープ生成部によって無効化された前記第一のエントリ情報に代わる新たな前記第二のエントリ情報を代替エントリ情報として前記ディレクトリキャッシュに作成するライトデータ生成部と、
を備えたことを特徴とするメモリコントローラ。
【請求項２】
前記障害検出部は、前記ディレクトリキャッシュから読み出した前記代替エントリ情報に訂正不可能な異常があるか否かを検出する機能を有し、
前記スヌープ生成部は、前記障害検出部によって異常があると検出された前記代替エントリ情報を無効化する指示を前記複数のプロセッサへ出力する機能を有し、
前記ライトデータ生成部は、前記スヌープ生成部によって無効化された前記代替エントリ情報に代わる新たな前記第二のエントリ情報を新たな代替エントリ情報として前記ディレクトリキャッシュに作成する機能を有する、
ことを特徴とする請求項１記載のメモリコントローラ。
【請求項３】
前記第二のエントリ情報には当該第二のエントリ情報が前記代替エントリ情報であるか否かを示すフラグが含まれ、このフラグは、前記代替エントリ情報であることを示すときに、当該代替エントリ情報に対する掃き出し及び前記ディレクトリへの書き戻しを禁止することを示す、
ことを特徴とする請求項１又は２記載のメモリコントローラ。
【請求項４】
前記主記憶装置と、前記複数のプロセッサと、前記ディレクトリと、請求項１乃至３のいずれかに記載のメモリコントローラと、
を備えたことを特徴とするマルチプロセッサシステム。
【請求項５】
主記憶データを格納する主記憶装置と、前記主記憶データの一部をキャッシュデータとして保持するプロセッサキャッシュを有する複数のプロセッサと、前記主記憶データについてアドレス情報毎のキャッシュ制御状態を示す第一のエントリ情報を格納するディレクトリとに用いられ、前記複数のプロセッサの各々から前記主記憶装置へのアクセスを前記第一のエントリ情報に応じて制御することにより前記プロセッサキャッシュ間のコヒーレンシを保証するメモリ制御方法であって、
前記第一のエントリ情報の一部のキャッシュデータからなる第二のエントリ情報を保持するディレクトリキャッシュを用意し、前記ディレクトリから読み出した前記第一のエントリ情報に訂正不可能な異常があるか否かを検出し、その異常があると検出した前記第一のエントリ情報を無効化する指示を前記複数のプロセッサへ出力し、無効化した前記第一のエントリ情報に代わる新たな前記第二のエントリ情報を代替エントリ情報として前記ディレクトリキャッシュに作成する、
ことを特徴とするメモリ制御方法。
【請求項６】
前記ディレクトリキャッシュから読み出した前記代替エントリ情報に訂正不可能な異常があるか否かを検出し、その異常があると検出した前記代替エントリ情報を無効化する指示を前記複数のプロセッサへ出力し、無効化した前記代替エントリ情報に代わる新たな前記第二のエントリ情報を新たな代替エントリ情報として前記ディレクトリキャッシュに作成することを併せて行う、
ことを特徴とする請求項５記載のメモリ制御方法。
【請求項７】
前記第二のエントリ情報には当該第二のエントリ情報が前記代替エントリ情報であるか否かを示すフラグが含まれ、このフラグは、前記代替エントリ情報であることを示すときに、当該代替エントリ情報に対する掃き出し及び前記ディレクトリへの書き戻しを禁止する、
ことを特徴とする請求項５又は６記載のメモリ制御方法。
【請求項８】
主記憶データを格納する主記憶装置と、前記主記憶データの一部をキャッシュデータとして保持するプロセッサキャッシュを有する複数のプロセッサと、前記主記憶データについてアドレス情報毎のキャッシュ制御状態を示す第一のエントリ情報を格納するディレクトリとに接続されたコンピュータに用いられ、前記複数のプロセッサの各々から前記主記憶装置へのアクセスを前記第一のエントリ情報に応じて制御することにより前記プロセッサキャッシュ間のコヒーレンシを保証するメモリ制御プログラムであって、
前記コンピュータは、前記第一のエントリ情報の一部のキャッシュデータからなる第二のエントリ情報を保持するディレクトリキャッシュを備え、
前記ディレクトリから読み出した前記第一のエントリ情報に訂正不可能な異常があるか否かを検出する障害検出機能と、この障害検出機能によって異常があると検出された前記第一のエントリ情報を無効化する指示を前記複数のプロセッサへ出力するスヌープ生成機能と、このスヌープ生成機能によって無効化された前記第一のエントリ情報に代わる新たな前記第二のエントリ情報を代替エントリ情報として前記ディレクトリキャッシュに作成するライトデータ生成機能と、
を前記コンピュータに実現させることを特徴とするメモリ制御プログラム。
【請求項９】
前記障害検出機能は、前記ディレクトリキャッシュから読み出した前記代替エントリ情報に訂正不可能な異常があるか否かを検出する機能を有し、
前記スヌープ生成機能は、前記障害検出機能によって異常があると検出された前記代替エントリ情報を無効化する指示を前記複数のプロセッサへ出力する機能を有し、
前記ライトデータ生成機能は、前記スヌープ生成機能によって無効化された前記代替エントリ情報に代わる新たな前記第二のエントリ情報を新たな代替エントリ情報として前記ディレクトリキャッシュに作成する機能を有する、
ことを特徴とする請求項８記載のメモリ制御プログラム。
【請求項１０】
前記第二のエントリ情報には当該第二のエントリ情報が前記代替エントリ情報であるか否かを示すフラグが含まれ、このフラグは、前記代替エントリ情報であることを示すときに、当該代替エントリ情報に対する掃き出し及び前記ディレクトリへの書き戻しを禁止することを示す、
ことを特徴とする請求項８又は９記載のメモリ制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のプロセッサの各々から主記憶装置へのアクセスをエントリ情報に応じて制御することにより、プロセッサキャッシュ間のコヒーレンシを保証するメモリコントローラ等に関する。
【背景技術】
【０００２】
記憶データを格納する主記憶装置と、主記憶データの一部をキャッシュデータとして保持するプロセッサキャッシュを有する複数のプロセッサと、主記憶データについてアドレス情報毎のキャッシュ制御状態を示すエントリ情報を格納するディレクトリと、複数のプロセッサの各々から主記憶装置へのアクセスをエントリ情報に応じて制御することによりプロセッサキャッシュ間のコヒーレンシを保証するメモリコントローラと、を備えたマルチプロセッサシステムが知られている。この種のマルチプロセッサシステムに関する従来技術を、以下に幾つか例示する。
【０００３】
特許文献１に開示された主記憶共有マルチプロセッサは、プロセッサ内部にプロセッサキャッシュを有し、主記憶の各ページ毎にその主記憶がプロセッサキャッシュに登録されているか否かを示すディレクトリを有し、それらのプロセッサキャッシュやディレクトリを管理する制御回路を有している。
【０００４】
特許文献２には、マルチプロセッサシステムのキャッシュ障害処理方法が開示されている。ここで、マルチプロセッサシステムは、複数のプロセッサとバス制御回路と第一のバスとを有する系を、少なくとも一つ備える。複数のプロセッサは、キャッシュメモリを有する。キャッシュメモリは、そのキャッシュメモリに格納されたデータのキーアドレス及びステータスから成るアドレスアレイのコピーデータを保持する、コピーキャッシュを有する。バス制御回路は、キャッシュメモリの内容と主記憶装置のキャッシュコヒーレンシを保証する。第一のバスは、プロセッサ及びバス制御回路を接続する。系と主記憶装置が第二のバスによって接続されている。ここで、キャッシュ障害処理方法は、マルチプロセッサシステムでアドレスアレイのデータに訂正不可能なエラーが発生した場合に、アドレスアレイのデータで発生したエラーの検出回数をカウントし、予め設定された回数になるまで、コピーキャッシュで保持したコピーデータを用いてアドレスアレイのデータを回復させる。
【０００５】
【特許文献１】特開２００５−２５０８３０号公報
【特許文献２】特許２８７２２１１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
従来は、ディレクトリで訂正不可能障害が検出された場合、プロセッサキャッシュ間コヒーレンシ保証が不可能になり、システムの停止を行わなければならなかった。また、システムあたりの主記憶の容量は増加する傾向にあり、ディレクトリの容量も増加してきた。これら二つのことから比較的障害の起きる可能性が高くなっており、システム全体の可用性が低くなるという問題があった。換言すると、従来のシステムでは、ディレクトリの情報はＥＣＣ（Error Checking and Correction）により保護されており、訂正可能な障害はエラーの訂正を行い、継続動作を行っていた。しかし、訂正不可能障害が発生すると該当データに関するプロセッサのキャッシュの状況がわからなくなるため、コヒーレンシ保証ができなくなり、継続動作が不可能となるという問題があった。
【０００７】
そこで、本発明の目的は、ディレクトリで訂正不可能障害が検出された場合でも、継続動作可能状態に復帰できるメモリコントローラ等を提供することにある。
【課題を解決するための手段】
【０００８】
本発明に係るメモリコントローラは、主記憶データを格納する主記憶装置と、前記主記憶データの一部をキャッシュデータとして保持するプロセッサキャッシュを有する複数のプロセッサと、前記主記憶データについてアドレス情報毎のキャッシュ制御状態を示す第一のエントリ情報を格納するディレクトリとに接続され、前記複数のプロセッサの各々から前記主記憶装置へのアクセスを前記第一のエントリ情報に応じて制御することにより前記プロセッサキャッシュ間のコヒーレンシを保証するものである。そして、本発明に係るメモリコントローラの特徴は、前記第一のエントリ情報の一部のキャッシュデータからなる第二のエントリ情報を保持するディレクトリキャッシュと、前記ディレクトリから読み出した前記第一のエントリ情報に訂正不可能な異常があるか否かを検出する障害検出部と、この障害検出部によって異常があると検出された前記第一のエントリ情報を無効化する指示を前記複数のプロセッサへ出力するスヌープ生成部と、このスヌープ生成部によって無効化された前記第一のエントリ情報に代わる新たな前記第二のエントリ情報を代替エントリ情報として前記ディレクトリキャッシュに作成するライトデータ生成部と、を備えたことにある（請求項１）。本発明では、ディレクトリのエントリ情報に訂正不可能な異常が検出された場合、そのエントリ情報を無効化し、そのエントリ情報に代わる代替エントリ情報をディレクトリキャッシュに作成する。これにより、複数のプロセッサは、異常の発生したエントリ情報を使わずに、代替エントリ情報を使うことができるので、継続動作可能状態に復帰する。
【０００９】
本発明に係るメモリコントローラにおいて、前記障害検出部は、前記ディレクトリキャッシュから読み出した前記代替エントリ情報に訂正不可能な異常があるか否かを検出する機能を有し、前記スヌープ生成部は、前記障害検出部によって異常があると検出された前記代替エントリ情報を無効化する指示を前記複数のプロセッサへ出力する機能を有し、前記ライトデータ生成部は、前記スヌープ生成部によって無効化された前記代替エントリ情報に代わる新たな前記第二のエントリ情報を新たな代替エントリ情報として前記ディレクトリキャッシュに作成する機能を有する、としてもよい（請求項２）。本発明では、ディレクトリキャッシュの代替エントリ情報に訂正不可能な異常が検出された場合、その代替エントリ情報を無効化し、そのエントリ情報に代わる新たな代替エントリ情報をディレクトリキャッシュに作成する。これにより、複数のプロセッサは、異常の発生した代替エントリ情報を使わずに、新たな代替エントリ情報を使うことができるので、継続動作可能状態に復帰する。
【００１０】
本発明に係るメモリコントローラにおいて、前記第二のエントリ情報には当該第二のエントリ情報が前記代替エントリ情報であるか否かを示すフラグが含まれ、このフラグは、前記代替エントリ情報であることを示すときに、当該代替エントリ情報に対する掃き出し及び前記ディレクトリへの書き戻しを禁止することを示す、としてもよい（請求項３）。本発明では、代替エントリ情報がディレクトリキャッシュに留まり続けるので、プロセッサがディレクトリにアクセスして再び障害が発生することを防止できる。
【００１１】
本発明に係るマルチプロセッサシステムは、前記主記憶装置と、前記複数のプロセッサと、前記ディレクトリと、本発明に係るメモリコントローラと、を備えたことを特徴とする（請求項４）。本発明に係るマルチプロセッサシステムでは、ディレクトリの訂正不可能障害が検出された場合でも、本発明に係るメモリコントローラによって継続動作可能状態に復帰できるので、可用性を向上できる。
【００１２】
本発明に係るメモリ制御方法は、主記憶データを格納する主記憶装置と、前記主記憶データの一部をキャッシュデータとして保持するプロセッサキャッシュを有する複数のプロセッサと、前記主記憶データについてアドレス情報毎のキャッシュ制御状態を示す第一のエントリ情報を格納するディレクトリとに用いられ、前記複数のプロセッサの各々から前記主記憶装置へのアクセスを前記第一のエントリ情報に応じて制御することにより前記プロセッサキャッシュ間のコヒーレンシを保証するものである。そして、本発明に係るメモリ制御方法の特徴は、前記第一のエントリ情報の一部のキャッシュデータからなる第二のエントリ情報を保持するディレクトリキャッシュを用意し、前記ディレクトリから読み出した前記第一のエントリ情報に訂正不可能な異常があるか否かを検出し、その異常があると検出した前記第一のエントリ情報を無効化する指示を前記複数のプロセッサへ出力し、無効化した前記第一のエントリ情報に代わる新たな前記第二のエントリ情報を代替エントリ情報として前記ディレクトリキャッシュに作成することにある（請求項５）。本発明では、ディレクトリのエントリ情報に訂正不可能な異常が検出された場合、そのエントリ情報を無効化し、そのエントリ情報に代わる代替エントリ情報をディレクトリキャッシュに作成する。これにより、複数のプロセッサは、異常の発生したエントリ情報を使わずに、代替エントリ情報を使うことができるので、継続動作可能状態に復帰する。
【００１３】
本発明に係るメモリ制御方法において、前記ディレクトリキャッシュから読み出した前記代替エントリ情報に訂正不可能な異常があるか否かを検出し、その異常があると検出した前記代替エントリ情報を無効化する指示を前記複数のプロセッサへ出力し、無効化した前記代替エントリ情報に代わる新たな前記第二のエントリ情報を新たな代替エントリ情報として前記ディレクトリキャッシュに作成することを併せて行う、としてもよい（請求項６）。本発明では、ディレクトリキャッシュの代替エントリ情報に訂正不可能な異常が検出された場合、その代替エントリ情報を無効化し、そのエントリ情報に代わる新たな代替エントリ情報をディレクトリキャッシュに作成する。これにより、複数のプロセッサは、異常の発生した代替エントリ情報を使わずに、新たな代替エントリ情報を使うことができるので、継続動作可能状態に復帰する。
【００１４】
本発明に係るメモリ制御方法において、前記第二のエントリ情報には当該第二のエントリ情報が前記代替エントリ情報であるか否かを示すフラグが含まれ、このフラグは、前記代替エントリ情報であることを示すときに、当該代替エントリ情報に対する掃き出し及び前記ディレクトリへの書き戻しを禁止する、としてもよい（請求項７）。本発明では、代替エントリ情報がディレクトリキャッシュに留まり続けるので、プロセッサがディレクトリにアクセスして再び障害が発生することを防止できる。
【００１５】
本発明に係るメモリ制御プログラムは、主記憶データを格納する主記憶装置と、前記主記憶データの一部をキャッシュデータとして保持するプロセッサキャッシュを有する複数のプロセッサと、前記主記憶データについてアドレス情報毎のキャッシュ制御状態を示す第一のエントリ情報を格納するディレクトリとに接続されたコンピュータに用いられ、前記複数のプロセッサの各々から前記主記憶装置へのアクセスを前記第一のエントリ情報に応じて制御することにより前記プロセッサキャッシュ間のコヒーレンシを保証するものである。本発明に係るメモリ制御プログラムの特徴は、前記コンピュータは、前記第一のエントリ情報の一部のキャッシュデータからなる第二のエントリ情報を保持するディレクトリキャッシュを備え、前記ディレクトリから読み出した前記第一のエントリ情報に訂正不可能な異常があるか否かを検出する障害検出機能と、この障害検出機能によって異常があると検出された前記第一のエントリ情報を無効化する指示を前記複数のプロセッサへ出力するスヌープ生成機能と、このスヌープ生成機能によって無効化された前記第一のエントリ情報に代わる新たな前記第二のエントリ情報を代替エントリ情報として前記ディレクトリキャッシュに作成するライトデータ生成機能と、を前記コンピュータに実現させることにある（請求項８）。本発明では、ディレクトリのエントリ情報に訂正不可能な異常が検出された場合、そのエントリ情報を無効化し、そのエントリ情報に代わる代替エントリ情報をディレクトリキャッシュに作成する。これにより、複数のプロセッサは、異常の発生したエントリ情報を使わずに、代替エントリ情報を使うことができるので、継続動作可能状態に復帰する。
【００１６】
本発明に係るメモリ制御プログラムは、前記障害検出機能は、前記ディレクトリキャッシュから読み出した前記代替エントリ情報に訂正不可能な異常があるか否かを検出する機能を有し、前記スヌープ生成機能は、前記障害検出機能によって異常があると検出された前記代替エントリ情報を無効化する指示を前記複数のプロセッサへ出力する機能を有し、前記ライトデータ生成機能は、前記スヌープ生成機能によって無効化された前記代替エントリ情報に代わる新たな前記第二のエントリ情報を新たな代替エントリ情報として前記ディレクトリキャッシュに作成する機能を有する、としてもよい（請求項９）。本発明では、ディレクトリキャッシュの代替エントリ情報に訂正不可能な異常が検出された場合、その代替エントリ情報を無効化し、そのエントリ情報に代わる新たな代替エントリ情報をディレクトリキャッシュに作成する。これにより、複数のプロセッサは、異常の発生した代替エントリ情報を使わずに、新たな代替エントリ情報を使うことができるので、継続動作可能状態に復帰する。
【００１７】
本発明に係るメモリ制御プログラムは、前記第二のエントリ情報には当該第二のエントリ情報が前記代替エントリ情報であるか否かを示すフラグが含まれ、このフラグは、前記代替エントリ情報であることを示すときに、当該代替エントリ情報に対する掃き出し及び前記ディレクトリへの書き戻しを禁止することを示す、としてもよい（請求項１０）。本発明では、代替エントリ情報がディレクトリキャッシュに留まり続けるので、プロセッサがディレクトリにアクセスして再び障害が発生することを防止できる。
【００１８】
換言すると、本発明は、プロセッサキャッシュ間コヒーレンシ保証方式として全ての主記憶データをキャッシュラインサイズ単位でその状態を管理するフルディレクトリ方式を採用するマルチプロセッサシステムであって、かつ、セット・アソシアティブ方式のキャッシュを用いたシステムにおいて、ディレクトリを構成するＲＡＭの訂正不可能障害検出時に、ディレクトリキャッシュのエントリを代替とすることで、システムダウンすることなく継続動作できることを特徴としている。同時に、全プロセッサの該当するアドレスのデータを破棄させるスヌープを発行することによって、コヒーレンシを保証することを特徴としている。また、当該ディレクトリキャッシュを構成するＲＡＭにおいてディレクトリの代替を行っているエントリについて訂正不可能障害検出した場合に、ディレクトリキャッシュの別のレベルのエントリで代替することで、システムダウンすることなく継続動作し、可用性を向上させたことを特徴としている。このように、本発明は、ディレクトリキャッシュによって訂正不可能障害を救済する方式に関する。
【００１９】
以上説明したように、本発明によれば次の効果が得られる。第１の効果は、ディレクトリメモリで訂正不可能障害を検出した場合に、ハードウェア量を少しの増加のみで、プロセッサキャッシュ間コヒーレンシを保証したまま、システムを継続動作できることである。第２の効果は、代替するエントリで訂正不可能障害が検出した場合でも、代替しているエントリのフラグを‘０１’から‘１０’にするだけで、継続運用が可能となり、多重障害にも対応できることである。
【発明の効果】
【００２０】
本発明によれば、ディレクトリのエントリ情報に訂正不可能な異常が検出された場合、そのエントリ情報を無効化し、そのエントリ情報に代わる代替エントリ情報をディレクトリキャッシュに作成することにより、その代替エントリ情報を複数のプロセッサで使うことができるので、継続動作可能状態に復帰できる。
【発明を実施するための最良の形態】
【００２１】
図１は、本発明に係るメモリコントローラ及びマルチプロセッサシステムの一実施形態を示すブロック図である。以下、この図面に基づき、本実施形態の概要について説明する。
【００２２】
以下の説明において、特許請求の範囲における「主記憶装置」及び「プロセッサキャッシュ」は、それぞれ「主記憶」及び「キャッシュ」と略称する。また、図１以外に記載されている構成要素については、その図番を符号の代わりに括弧書きする。
【００２３】
本実施形態のメモリコントローラ１０９は、主記憶データを格納する主記憶１１１と、主記憶データの一部をキャッシュデータとして保持するキャッシュ１０５〜１０８を有するプロセッサ１０１〜１０４と、主記憶データについてアドレス情報毎のキャッシュ制御状態を示す第一のエントリ情報（図２）を格納するディレクトリ１１０とに接続され、プロセッサ１０１〜１０４の各々から主記憶１１１へのアクセスを第一のエントリ情報（図２）に応じて制御することによりキャッシュ１０５〜１０８間のコヒーレンシを保証するものである。
【００２４】
そして、メモリコントローラ１０９の特徴は、第一のエントリ情報（図２）の一部のキャッシュデータからなる第二のエントリ情報（図３）を保持するディレクトリキャッシュ１１２と、ディレクトリ１１０から読み出した第一のエントリ情報（図２）に訂正不可能な異常があるか否かを検出する障害検出部（図４）と、障害検出部（図４）によって異常があると検出された第一のエントリ情報（図２）を無効化する指示をプロセッサ１０１〜１０４へ出力するスヌープ生成部（図４）と、スヌープ生成部（図４）によって無効化された第一のエントリ情報（図２）に代わる新たな第二のエントリ情報（図３）を代替エントリ情報としてディレクトリキャッシュ１１２に作成するライトデータ生成部（図４）とを備えたことにある。
【００２５】
本実施形態では、ディレクトリ１１０のエントリ情報に訂正不可能な異常が検出された場合、そのエントリ情報を無効化し、そのエントリ情報に代わる代替エントリ情報をディレクトリキャッシュ１１２に作成する。これにより、プロセッサ１０１〜１０４は、異常の発生したエントリ情報を使わずに、代替エントリ情報を使うことができるので、継続動作可能状態に復帰する。
【００２６】
また、障害検出部（図４）は、ディレクトリキャッシュ１１２から読み出した代替エントリ情報に、訂正不可能な異常があるか否かを検出する機能を有する。スヌープ生成部（図４）は、障害検出部（図４）によって異常があると検出された代替エントリ情報を無効化する指示を、プロセッサ１０１〜１０４へ出力する機能を有する。ライトデータ生成部（図４）は、スヌープ生成部（図４）によって無効化された代替エントリ情報に代わる新たな第二のエントリ情報（図３）を、新たな代替エントリ情報としてディレクトリキャッシュ１１２に作成する機能を有する。
【００２７】
本実施形態では、ディレクトリキャッシュ１１２の代替エントリ情報に訂正不可能な異常が検出された場合、その代替エントリ情報を無効化し、そのエントリ情報に代わる新たな代替エントリ情報をディレクトリキャッシュ１１２に作成する。これにより、プロセッサ１０１〜１０４は、異常の発生した代替エントリ情報を使わずに、新たな代替エントリ情報を使うことができるので、継続動作可能状態に復帰する。
【００２８】
第二のエントリ情報（図３）には、当該第二のエントリ情報が代替エントリ情報であるか否かを示すフラグ（図３）が含まれる。このフラグ（図３）は、代替エントリ情報であることを示すときに、当該代替エントリ情報に対する掃き出し及びディレクトリ１１０への書き戻しを禁止することを示す。これにより、代替エントリ情報がディレクトリキャッシュ１１２に留まり続けるので、プロセッサ１０１〜１０４がディレクトリ１１０にアクセスして再び障害が発生することを防止できる。
【００２９】
マルチプロセッサシステム１００は、主記憶１１１と、プロセッサ１０１〜１０４と、ディレクトリ１１０と、メモリコントローラ１０９とを備えている。マルチプロセッサシステム１００では、ディレクトリ１１０の訂正不可能障害が検出された場合でも、メモリコントローラ１０９によって継続動作可能状態に復帰できるので、可用性を向上できる。
【００３０】
以上のように、本実施形態は、プロセッサキャッシュ間コヒーレンシ保証方式として全ての主記憶データをキャッシュラインサイズ単位でその状態を管理するフルディレクトリ方式を採用するマルチプロセッサシステム１００であり、かつ、セット・アソシアティブ方式のキャッシュ１０５〜１０８を用いたシステムにおいて、ディレクトリ１１０を構成するＲＡＭの訂正不可能障害検出時に、ディレクトリキャッシュ１１２のエントリを代替とすることで、システムダウンすることなく継続動作できることを特徴としている。同時に、全プロセッサ１０１〜１０４の該当するアドレスのデータを破棄させるスヌープを発行することによって、コヒーレンシを保証することを特徴としている。また、ディレクトリキャッシュ１１２を構成するＲＡＭにおいてディレクトリ１１０の代替を行っているエントリに訂正不可能障害を検出した場合に、ディレクトリキャッシュ１１２内の別のレベルのエントリで代替することで、システムダウンすることなく継続動作し、可用性を向上させたことを特徴としている。
【００３１】
また、ディレクトリキャッシュ１１２は、処理速度の向上のために設けられ、ディレクトリ１１０のエントリ単位でそのデータを保持する。ディレクトリ１１０のあるエントリで訂正不可能障害を検出したとき、ディレクトリキャッシュ１１２内の２ビットのフラグ（図３）を代替ステータスに変え、ディレクトリキャッシュ１１２のエントリを代替として使用することにより、システムダウンすることなく、継続動作を行う。全プロセッサ１０１〜１０４に対してキャッシュ無効化のスヌープを行う機構を設けることにより、システムのプロセッサキャッシュ間コヒーレンシを保証する。また、代替を行っているディレクトリキャッシュ１１２のエントリが訂正不可能障害を起こしたとき、同一エントリの別レベルで代替することにより、継続動作を可能として、可用性を高めている。
【００３２】
次に、本実施形態の構成について、更に詳しく説明する。
【００３３】
図１は、マルチプロセッサシステム１００の一例である。図１を参照すると、キャッシュ１０５，１０６，１０７，１０８は、それぞれプロセッサ１０１，１０２，１０３，１０４の内部に主記憶１１１のデータを一時的に格納するキャッシュメモリであり、ＭＥＳＩなどの一般的なキャッシュプロトコルを採用する。ＭＥＳＩのキャッシュプロトコルとは、主記憶１１１のデータを一時的に格納しているときのデータの状態を表すものであり、その詳細については後述する。プロセッサ１０１，１０２，１０３，１０４は、主記憶アクセスリクエストのリクエスタになるものであり、ごく一般的なものであるので、ここでは言及しない。
【００３４】
メモリコントローラ１０９には、主記憶１１１及びディレクトリ１１０が接続される。ディレクトリ１１０は、主記憶１１１の全てのデータについて、プロセッサ１０１〜１０４のキャッシュラインサイズ毎にＭＥＳＩステータス及びプロセッサ情報を管理する、フルディレクトリ方式を実現できる容量を備えている。ディレクトリ１１０は、メモリコントローラ１０９の外部に接続するために、アクセスにかかるレイテンシが大きくなる。そこで、そのレイテンシを小さくするために、メモリコントローラ１０９内にディレクトリキャッシュ１１２を搭載する。ディレクトリキャッシュ１１２は、セット・アソシアティブ方式を採用する。
【００３５】
図２［１］は図１のディレクトリの構成を示す説明図であり、図２［２］は図２［１］のエントリの構成を示す説明図である。以下、図１及び図２を中心に図５及び図６を参照しつつ説明する。
【００３６】
特許請求の範囲における「第一のエントリ情報」がエントリ２０１〜２０ｎに相当する。ディレクトリ１１０のエントリ２０１〜２０ｎの一つで主記憶１１１中のキャッシュラインの一つを管理するため、ディレクトリ１１０の総エントリ数は「主記憶１１１の総容量」÷「一つのキャッシュラインのサイズ（容量）」となる。総エントリ数をｎとすると、ディレクトリ１１０内におけるエントリは、エントリ０（２０１）、エントリ１（２０２）、…と順に並び、最後がエントリ（ｎ−１）（２０ｎ）となる。各エントリ２０１〜２０ｎは主記憶１１１に対してダイレクトにマッピングされる。すなわち、主記憶アクセスリクエストのアドレスと、そのキャッシュラインに対応するディレクトリ１１０のエントリ２０１〜２０ｎのいずれかとは、１：１に対応する。
【００３７】
各エントリ２０１〜２０ｎは、主記憶１１１をキャッシュライン単位で管理するための情報を保持する。キャッシュステータス３０１は、エントリ２０１，…に対応するキャッシュラインのステータス（後述）である、ＭＥＳＩのいずれかの状態を示すコードを格納する。ＥＣＣ３０３は、ディレクトリ１１０からデータを読み出す際、データの誤りを検出及び訂正するためにデータに付加したものである。
【００３８】
キャッシングエージェント３０２は、図５に示す‘Ｍ’７０１、‘Ｅ’７０２、‘Ｓ’７０３のそれぞれの場合に、そのディレクトリ１１０のエントリ２０１，…に対応する主記憶データを格納しているプロセッサ１０１〜１０４の情報（後述）を示す。キャッシングエージェント３０２は、システムの構成に応じて、キャッシュを搭載するプロセッサ数と等しいビット数で構成する必要がある。本実施形態では、プロセッサが４個の構成であるので、図６に示すようにキャッシングエージェント３０２は４ビット構成になる。図６に示すように、ビット０（８０１）が１ならば、プロセッサ１０１のキャッシュ１０５に、ディレクトリ１１０のエントリに対応する主記憶データがキャッシュされている可能性があることを示す。同様に、ビット１（８０２）はプロセッサ１０２、ビット２（８０３）はプロセッサ１０３、ビット３（８０４）はプロセッサ１０４のそれぞれキャッシュ内に、ディレクトリ１１０のエントリに対応する主記憶データが保存されている可能性があることを示す。
【００３９】
図３［１］は図１のディレクトリキャッシュの構成を示す説明図であり、図３［２］は図３［１］のエントリの構成を示す説明図である。以下、図１乃至図３及び図７に基づき説明する。
【００４０】
特許請求の範囲における「第二のエントリ情報及び代替エントリ情報」がエントリ４０１〜４０ｍに相当する。本実施形態のディレクトリキャッシュ１１２は、セット・アソシアティブ方式を採用する。セット・アソシアティブ方式は、一般的なものであり、レベル数も２、４などがあるが、本実施形態では、複数存在すればよいので、ここでは言及しない。１つのレベルのエントリ数をｍとし、各エントリをエントリ０（４０１）、エントリ１（４０２）、…、エントリｍ−１（４０ｍ）と定義する。同一エントリにおけるレベル方向の決定は、空いているエントリを使用するが、エントリが空いていない場合は、他のデータをエントリから掃き出す。その掃き出し方法として、ＦＩＦＯ（First In First Out）やＬＲＵ（Least Recently Used）などのアルゴリズムが採用されるが、本発明には直接関係しないので、ここでは言及はしない。
【００４１】
図３［２］において、フラグ５０１は、本実施形態で追加したものであり、２ビットで構成されている。フラグ５０１の役割は後で述べる。また、フラグ用パリティビット５０２は、フラグ５０１の正当性を検証するために付加したものである。
【００４２】
キーアドレス５０３は、ディレクトリ１１０のエントリ２０１〜２０ｎのどれがキャッシングされているかを決定するものである。先ほどの例で示すと、ディレクトリ１１０のエントリ番号をＮ（０≦Ｎ≦ｎ−１）とすると、Ｎをｍで割ったときの商（整数）を書き込む。これにより、ディレクトリキャッシュ１１２のキーアドレス５０３とエントリ４０１〜４０ｍの位置とから、ディレクトリ１１０のエントリ２０１〜２０ｎの位置の特定が可能となる。
【００４３】
ディレクトリキャッシュ１１２内のキャッシュステータス５０４、キャッシングエージェント５０５は、それぞれディレクトリ１１０のキャッシュステータス３０１、キャッシングエージェント３０２に対応している。ＥＣＣ５０６はＥＣＣ３０３と同様、ディレクトリキャッシュ１１２からデータを読み出す際、データの誤りを検出及び訂正するためにデータに付加したものである。本実施形態では、ＥＣＣ５０６の保護対象はキーアドレス５０３からキャッシュステータス５０５までである。
【００４４】
図７は、図３［２］で示した２ビットのフラグ５０１がどのような役割をするかを示す。フラグ５０１が００（９０１）の場合は、通常のディレクトリキャッシュ１１２として、ＦＩＦＯやＬＲＵのアルゴリズムにより、ディレクトリキャッシュ１１２のエントリ４０１〜４０ｍからの掃き出しを行う。０１（９０２）の場合は、代替ステータスとなり、ＦＩＦＯやＬＲＵのアルゴリズムによるディレクトリキャッシュ１１２のエントリ４０１〜４０ｍからの掃き出しを禁止する。１０（９０３）の場合には、使用禁止となり、そのエントリ４０１〜４０ｍ自体の使用を禁止する。１１（９０４）は本実施形態では使用しない。
【００４５】
図４は、図１のメモリコントローラの詳細な構成を示すブロック図である。以下、この図面に基づき説明する。
【００４６】
特許請求の範囲における「障害検出部」「スヌープ生成部」及び「ライトデータ生成部」は、それぞれ「障害検出回路６０７，６０９」、「ディレクトリキャッシュ更新／スヌープ生成回路６１１」及び「ディレクトリキャッシュライトデータ生成回路６０６」の機能の一部として実現されている。
【００４７】
調停回路６０１は、プロセッサからのリクエスト及びスヌープリプライと、リクエストバッファ／スヌープカウンタ６０２からのディレクトリ更新のためのリクエストの発行とを調停し、その結果を信号線６５２によってセレクタ６０３へ出力している。このとき、通常はプロセッサからの入力が選択されるが、リクエストバッファ／スヌープカウンタ６０２からの信号線６５３がアサートされた場合は、信号線６５４が選ばれる。
【００４８】
リクエストバッファ／スヌープカウンタ６０２は、現在、メモリコントローラ１０９で実行されているリクエストを全て保持する。また、保持しているリクエストを起因として、ディレクトリキャッシュ更新／スヌープ生成回路６１１からスヌープがプロセッサに送信された場合に、スヌープ送信数を保持し、プロセッサからのスヌープに対する返信数をカウントし、送信数と返信数が等しくなったときに、ディレクトリキャッシュ１１２を更新するためのリクエストを生成する。
【００４９】
セレクタ６０３は、５本の信号線（６７０，６５８，６６１，６６５，６５２）からのリクエストから一つを選択する。選択時の優先順位は、「プロセッサのリクエスト６５２」＜「エントリの更新リクエスト６６５」＜「エントリへの格納リクエスト６７０」＜「代替用のエントリ作成リクエスト６５８」＜「障害の起きたエントリの使用停止リクエスト６６１」の順で選択を行う。そして、信号線６５５を使用し、選択したリクエストをアドレス生成回路６０５に送信する。また、ディレクトリキャッシュ１１２への書き込みがある場合は、その情報をディレクトリキャッシュライトデータ生成回路６０６へ送信する。また、主記憶１１１へ書き込みがある場合は、その情報を主記憶ライトデータ生成回路６０４へ送信する。
【００５０】
アドレス生成回路６０５は、セレクタ６０３で選択されたリクエストから、ディレクトリ１１０、主記憶１１１、ディレクトリキャッシュ１１２へのアクセスのためのアドレスを抽出する。生成されたアドレスは、信号線６５６を介して、ディレクトリ１１０、主記憶１１１、ディレクトリキャッシュ１１２にそれぞれ入力する。
【００５１】
主記憶ライトデータ生成回路６０４は、セレクタ６０３で選択されたリクエストに主記憶１１１への書き込みの指示がある場合に、書き込みデータを生成して主記憶１１１へ出力する。
【００５２】
主記憶１１１は、ライトリクエストの場合は、信号線６５６で指示されたアドレスに対応するメモリへ、主記憶ライトデータ生成回路６０４から出力されたデータを書き込み、リードリクエストの場合は、信号線６５６で指示されたアドレスに対応するメモリからデータを読み出し、そのデータを合成回路６１２に出力する機能を有する。
【００５３】
ディレクトリキャッシュライトデータ生成回路６０６は、セレクタ６０３で選択されたリクエストによる、ディレクトリキャッシュ１１２への書き込みデータを生成する。本実施形態では、ディレクトリキャッシュライトデータ生成回路６０６で生成するデータは、プロセッサのリクエストによるディレクトリキャッシュ１１２の更新のライトデータ、スヌープリプライによるディレクトリキャッシュ１１２の更新のライトデータ、ディレクトリキャッシュ１１２のエントリのエラーによるエントリの使用停止のためのライトデータ、ディレクトリ１１０のリードによるディレクトリキャッシュ１１２への格納のためのライトデータ、ディレクトリ１１０のエントリのエラーによる代替エントリ生成のためのデータを生成する。
【００５４】
ディレクトリキャッシュ１１２は、信号線６５６で指示されたアドレスに対応するエントリに、ディレクトリキャッシュライトデータ生成回路６０６で生成されたデータを書き込む機能を有する。また、信号線６５６で指示されたアドレスに対応するエントリの読み出しを行い、読み出されたデータを障害検出回路６０７に出力する機能を有する。
【００５５】
図では示していないが、ディレクトリ１１０をライトするときに、ディレクトリキャッシュ１１２にエントリの空きがない場合は、ディレクトリ１１０へ掃き出す機能を有する。ディレクトリ１１０に掃き出すことによって、ディレクトリキャッシュ１１２にあった最新のデータがディレクトリ１１０に書かれる。すなわち、ディレクトリキャッシュ１１２のエントリにデータが保持されていない場合は、ディレクトリ１１０に最新のデータが存在することになる。
【００５６】
障害検出回路６０７は、ディレクトリキャッシュ１１２から読み出したデータのＥＣＣチェックを行う。ＥＣＣチェックとは、決められたビット数までのエラーについては訂正できる。しかし、決められたビット数を超えたエラーについては、検出はできるが訂正はできない。決められたビット数は、システムによって変わるので、本実施形態では言及しない。エラーがない時は、そのまま信号線６５９に出力する。エラーが検出されたとき、訂正可能障害ならば訂正し、信号線６５９に出力する。訂正不可能障害ならば、信号線６６０で判断回路６０８に障害があったことを通知する。また、フラグ５０１のパリティチェックを行う。パリティチェックでエラーを検出した際の救済方法は、後に述べる。
【００５７】
判断回路６０８は、ディレクトリキャッシュ１１２に有効なデータがなかった（ミスヒットした）場合に、判断回路６１０に信号線６６３で通知する。一方、有効なデータがあり（ヒットした）、かつディレクトリキャッシュ１１２から読み出したデータが訂正不可能障害でない場合、判断回路６０８は、スヌープの必要性を確認し、必要ならばディレクトリキャッシュ更新／スヌープ生成回路６１１にスヌープ生成要求をする。スヌープの必要がない場合は、信号線６６５でディレクトリキャッシュ１１２の更新を指示し、信号線６６４でリクエストの返信を指示する。障害検出回路６０７から訂正不可能障害検出の通知があった場合には、信号線６６２を介して、全プロセッサにキャッシュを無効化するためのスヌープ生成を指示する。また、エラーしたエントリの使用停止リクエストを、信号線６６１を介してセレクタ６０３に出力する。
【００５８】
ディレクトリ１１０は、判断回路６０８からミスヒット通知があった場合、信号線６５６で指示されたアドレスに対応するエントリの読み出しを行い、そのデータを障害検出回路６０９へ送信する機能を有する。また、ディレクトリキャッシュ１１２から掃き出されたデータの書き込みを行う機能を有する。
【００５９】
障害検出回路６０９は、ディレクトリ１１０から読み出したデータに対して前述と同様にＥＣＣチェックを行う。エラーがない時は、そのまま信号線６６７に出力する。エラーが検出されたとき、訂正可能障害ならば訂正し、信号線６６７に出力する。訂正不可能障害ならば、信号線６６８で判断回路６０８に障害があったことを通知する。
【００６０】
判断回路６１０は、ディレクトリ１１０から読み出したデータが訂正不可能障害でない場合、信号線６７０でディレクトリキャッシュ１１２の更新リクエストをセレクタ６０３に出力する。また、スヌープが必要な場合は、ディレクトリキャッシュ更新／スヌープ生成回路６１１にスヌープの生成を指示する。障害検出回路６０９から訂正不可能障害検出の通知があった場合には、信号線６６９によって、ディレクトリキャッシュ更新／スヌープ生成回路６１１に、全プロセッサにキャッシュを無効化するためのスヌープ生成を指示する。
【００６１】
ディレクトリキャッシュ更新／スヌープ生成回路６１１は、判断回路６０８，６１０からの指示に従いスヌープリクエストの生成を行い、そのスヌープリクエストを調停回路６１３に送信する。それと同時に、信号線６５７でリクエストバッファ／スヌープカウンタ６０２にスヌープの送信数を通知する。また、本実施形態では、ディレクトリ１１０又はディレクトリキャッシュ１１２で訂正不可能障害を検出した場合に、信号線６５８によってディレクトリキャッシュ１１２の代替用のエントリ作成リクエストを出力する。
【００６２】
合成回路６１２は、主記憶１１１から読み出されたデータとディレクトリキャッシュ１１２から読み出されたデータとから、プロセッサからのリクエストに対するリプライデータを生成し、そのリプライデータを調停回路６１３に出力する。
【００６３】
調停回路６１３は、信号線６６６によるリクエストに対するリプライデータの送信と、信号線６７１によるスヌープの送信とを調停し、その結果をプロセッサへ送信する。
【００６４】
図５は、図２［２］及び図３［２］のキャッシュステータスを示す説明図である。以下、補足として、図１及び図５に基づき、一般的なキャッシュプロトコルＭＥＳＩについて説明する。
【００６５】
ＭＥＳＩは、主記憶１１１のデータを一時的に格納しているときのデータの状態を表すものである。‘Ｍ’７０１は、‘Ｍｏｄｉｆｉｅｄ’であり、システム内の唯一のプロセッサが主記憶データとは異なる内容でシステム唯一の最新データをキャッシュに保存していることを示す。‘Ｅ’７０２は、‘Ｅｘｃｌｕｓｉｖｅ’であり、システム内の唯一のプロセッサが主記憶データと同じ内容で保持している、又は、キャッシュ内にデータを保持していない可能性があることを示す。このように状態が異なる可能性があるのは、‘Ｅ’７０２で主記憶データをキャッシングしたプロセッサは、そのデータ（主記憶と同じデータ）をメモリコントローラ１０９に通知することなくこれを破棄することが許可されているためである。‘Ｓ’７０３は、‘Ｓｈａｒｅｄ’であり、システム内の複数又は一つのプロセッサが主記憶と同じデータをキャッシュ内に保持しているか、又はキャッシュ内にデータを保持しない可能性があることを示す。このように状態が異なる可能性があるのは、‘Ｅ’７０２と同様に、‘Ｓ’７０３で主記憶データをキャッシングしたプロセッサは、そのデータ（主記憶と同じデータ）をメモリコントローラ１０９に通知することなく破棄することが許可されているためである。‘Ｉ’７０４は、‘Ｉｎｖａｌｉｄａｔｅ’であり、システム内のいずれのプロセッサも主記憶と同じデータをキャッシュ内に保持していないことを示す。
【００６６】
次に、図４を中心に適宜他の図面を参照しつつ、メモリコントローラ１０９の動作を説明する。
【００６７】
＜１＞．ディレクトリ１１０に訂正不可能障害がないケースの一例として、ディレクトリキャッシュ１１２にリクエストアドレスに対応するデータが保持されてなく、かつディレクトリ１１０内のデータのキャッシュステータス３０１が‘Ｍ’となっているアドレスに対するリードの場合の動作について説明する。
【００６８】
プロセッサからのリードリクエストが調停回路６０１で選択されたとき、調停回路６０１は、そのリクエストをリクエストバッファ／スヌープカウンタ６０２に格納してもらい、これに並行してセレクタ６０３にリードリクエストを出力する。セレクタ６０３は、そのリクエストを選択し、それをディレクトリキャッシュ１１２を読み出すためにアドレス生成回路６０５へ送信する。アドレス生成回路６０５で生成されたアドレスは信号線６５６を介してディレクトリキャッシュ１１２へ出力され、ディレクトリキャッシュ１１２はそのアドレスに対応するエントリを読み出す。
【００６９】
しかし、ディレクトリキャッシュ１１２には該当するデータがキャッシュされてないので、判断回路６０８は、信号線６６３でディレクトリ１１０にミスヒットの通知をする。通知を受け取ったディレクトリ１１０は、当該アドレスに対応するディレクトリ１１０のエントリを読み出し、障害検出回路６０９でＥＣＣチェックを行って、データを判断回路６１０に送信する。
【００７０】
判断回路６１０は、障害検出回路６０９からエラーの通知がないことを確認し、エラーがないときの動作を行う。信号線６７０でディレクトリキャッシュ１１２への格納のリクエストを出力する。また、判断回路６１０は、ディレクトリ１１０から読み出したデータ内のキャッシュステータス３０１及びキャッシングエージェント３０２を確認し、前述のとおりステータスは‘Ｍ’と定義しているので、ディレクトリキャッシュ更新／スヌープ生成回路６１１にどのプロセッサにスヌープを送信するかの指示を行う。
【００７１】
ディレクトリキャッシュ更新／スヌープ生成回路６１１は、スヌープを生成し、調停回路６１３による選択を通して、プロセッサにスヌープを送信する。それと並行し、信号線６５７によって、リクエストバッファ／スヌープカウンタ６０２へスヌープの送信数が通知される。プロセッサから返信されたスヌープリプライは、調停回路６０１からリクエストバッファ／スヌープカウンタ６０２へ送信される。プロセッサのステータスは‘Ｍ’であるので、主記憶１１１への書き戻しのスヌープリプライが返ってきたら、セレクタ６０３でスヌープリプライを選択し、アドレス生成回路６０５で生成されたアドレスに対応する主記憶１１１のエントリに、主記憶ライトデータ生成回路６０４で生成したデータを書き込む。
【００７２】
リクエストバッファ／スヌープカウンタ６０２でスヌープの返信を全て受信した後、ディレクトリキャッシュ更新リクエストを調停回路６０１に発行する。このリクエストは、セレクタ６０３を通り、ディレクトリキャッシュライトデータ生成回路６０６でディレクトリキャッシュ１１２のエントリを更新するライトデータを生成するとともに、アドレス生成回路６０５でアドレスを生成し、ディレクトリキャッシュ１１２を更新する。ディレクトリキャッシュ１１２のデータの更新後、主記憶１１１に対しメモリリードを行い、更新されたディレクトリキャッシュ１１２のデータを合成回路６１２で合成し、プロセッサからのリクエストに対するリプライデータを送信する。
【００７３】
＜２＞．ディレクトリ１１０での訂正不可能障害を検出した時のケースの一例として、ディレクトリキャッシュ１１２にリクエストアドレスに対応するデータが保存されてなく、かつディレクトリ１１０内のデータのキャッシュステータス３０１が‘Ｍ’の場合の動作について説明する。
【００７４】
前述と同様に動作し、ディレクトリキャッシュ１１２でミスヒットし、ディレクトリ１１０でキャッシュをリードした時にデータに訂正不可能障害を検出したとき、従来は、その時点でプロセッサキャッシュ間コヒーレンシ保証が不可能となるためシステム停止としていた。
【００７５】
本実施形態では、障害検出回路６０９がディレクトリ１１０の読み出しデータから訂正不可能障害を検出した場合は、信号線６６９を介して、ディレクトリキャッシュ更新／スヌープ生成回路６１１に全プロセッサのキャッシュ無効化のスヌープの指示を行う。キャッシュ無効化指示とは、全プロセッサのキャッシュ内から訂正不可能障害を起こしたエントリの主記憶データを破棄しスヌープリプライの返信を行わせ、‘Ｍ’（７０１）のプロセッサは、自分のキャッシュのステータスを‘Ｉ’（７０４）にし、データを主記憶１１１に書き戻させる。
【００７６】
ディレクトリキャッシュ更新／スヌープ生成回路６１１は、キャッシュ無効化指示のスヌープを生成し、調停回路６１３から全プロセッサに送信する。これと同時に、次の二つの動作を行う。
【００７７】
一つ目は、信号線６５８によって、代替用のフラグ５０１のセットとディレクトリキャッシュ更新リクエストの要求を行う。セレクタ６０３で当該リクエストが選択されると、ディレクトリキャッシュライトデータ生成回路６０６で、代替させるためにフラグ５０１を０１（９０２）にセットし、キャッシュステータス５０４を‘Ｉ’にセットし、キャッシングエージェント５０５を全ビットが０というデータにセットし、キーアドレス５０３には、訂正不可能障害を起こしたディレクトリ１１０のエントリのアドレスをセットする。
【００７８】
二つ目は、信号線６５７によって、リクエストバッファ／スヌープカウンタ６０２に、全プロセッサへの障害を起こしたアドレスに対するスヌープの送信数を通知する。リクエストバッファ／スヌープカウンタ６０２は、調停回路６０１からスヌープリプライを受け取ったら、カウンタを加算し、リクエストに対するスヌープの送信数と受信数が等しくなるまで、カウンタを加算する。‘Ｍ’のプロセッサから、主記憶１１１への書き戻しのスヌープリプライを受信したら、主記憶ライトデータ生成回路６０４でデータを生成し、アドレス生成回路６０５で生成したアドレスに対応するエントリにそのデータを書き込む。
【００７９】
スヌープの送信数と受信数が等しくなった後、信号線６５４で訂正不可能障害を起こしたリクエストの再発行を行う。このとき、システム内唯一の最新データのありかと、アドレスに対応するディレクトリキャッシュ１１２のエントリ情報（キャッシュステータス５０４及びキャッシングエージェント５０５）とが一致しているので、システムとしてプロセッサキャッシュ間コヒーレンシ制御可能な状態に復帰したといえる。
【００８０】
その後も、訂正不可能障害を起こしたエントリの代替がディレクトリキャッシュ１１２内にあり、更にフラグ５０１が０１（９０２）にセットされているので、キャッシュの掃き出しが行われることがないので、必ずリクエストアドレスに該当するエントリ情報がディレクトリキャッシュ１１２内に存在したまま、継続動作をすることができる。
【００８１】
＜３＞．ディレクトリキャッシュ１１２で代替を行っているエントリに対応するアドレスに対してのリードリクエストについて、ディレクトリキャッシュ１１２に訂正不可能障害がない場合の動作を説明する。このときのディレクトリキャッシュ１１２の当該代替エントリのキャッシュステータス５０４は‘Ｓ’とする。
【００８２】
プロセッサからのリードリクエストは、調停回路６０１で調停され、リクエストバッファ／スヌープカウンタ６０２及びセレクタ６０３にそれぞれ送信される。セレクタ６０３で選択されたリードリクエストは、アドレス生成回路６０５でアドレスを抽出し、そのアドレスに対応するディレクトリキャッシュ１１２のエントリを読み出す。代替を行っているエントリであるので、有効なデータがディレクトリキャッシュ１１２内に存在する。読み出されたデータは障害検出回路６０７に出力する。訂正不可能障害が検出されなかったデータは、判断回路６０８でスヌープの必要性を判断する。
【００８３】
キャッシュステータス５０４は‘Ｓ’であるので、スヌープが必要ないと判断され、ディレクトリキャッシュ１１２の更新リクエストを信号線６６５で指示し、更新したデータを信号線６６４に出力する。リードリクエストのリプライデータは、合成回路６１２で信号線６５６によって読み出した主記憶のデータと更新したディレクトリキャッシュ１１２のデータとを合成して調停回路６１３に出力し、プロセッサに返信する。
【００８４】
＜４＞．ディレクトリキャッシュ１１２の代替を行っているエントリに対応するアドレスに対してのリードリクエストについて、ディレクトリキャッシュ１１２に訂正不可能障害を検出したときの動作について説明する。このときのディレクトリキャッシュ１１２の当該代替エントリのキャッシュステータス５０４は‘Ｓ’とする。
【００８５】
前述と同様に動作し、調停回路６０１で選択されたプロセッサからのリードリクエストは、代替しているエントリのデータをディレクトリキャッシュ１１２から読み出す。代替を行っているエントリへのリクエストであるので、有効なデータは必ず存在し、読み出されたデータは、障害検出回路６０７に出力される。
【００８６】
障害検出回路６０７で出力された有効なデータからＥＣＣチェックで訂正不可能障害が検出されると、信号線６６０で判断回路６０８に通知される。判断回路６０８は、信号線６６１で、ディレクトリキャッシュ１１２の障害を起こしたエントリの使用停止リクエストを発行する。発行されたリクエストに基づき、フラグ５０１のビットを使用禁止ステータスの１０（９０３）に変更するデータを、ディレクトリキャッシュライトデータ生成回路６０６で生成し、それをディレクトリキャッシュ１１２に書き込む。また、信号線６６２で、ディレクトリキャッシュ更新／スヌープ生成回路６１１に全プロセッサのキャッシュ無効化のスヌープの指示を行う。
【００８７】
ディレクトリキャッシュ更新／スヌープ生成回路６１１は、全プロセッサに訂正不可能障害の起きたエントリのキャッシュ無効化のスヌープを送信する。この送信に伴い、信号線６５７でリクエストバッファ／スヌープカウンタ６０２にスヌープの送信数を通知する。また、信号線６５８で、別レベルのエントリのフラグ５０１を代替ステータスである０１（９０２）に変更し、キャッシュステータス５０４を‘Ｉ’にし、かつキャッシングエージェント５０５を全て０にするリクエストを出力する。
【００８８】
スヌープの全て刈り取りが終了すると、どのプロセッサもキャッシュしていない状態になる。これにより、前述と同様に、システム内唯一の最新データのありかと、アドレスに対応するディレクトリキャッシュ１１２のエントリ情報（キャッシュステータス５０４及びキャッシングエージェント５０５）が一致しているので、システムとしてプロセッサキャッシュ間コヒーレンシ制御可能な状態に復帰したといえる。
【００８９】
その後も、訂正不可能障害を起こしたエントリはフラグ５０１が１０（９０３）にセットされているので、そのエントリへアクセスはされない。また、訂正不可能障害を起こしたエントリの代替がディレクトリキャッシュ１１２内にあり、更にフラグ５０１が０１（９０２）にセットされていることにより、キャッシュの掃き出しが行われることがないので、必ずリクエストアドレスに該当するエントリ情報がディレクトリキャッシュ１１２内に存在したまま、継続動作をすることができる。
【００９０】
次に、メモリコントローラ１０９の他の動作について、図４を中心に適宜他の図面を参照しつつ説明する。
【００９１】
＜Ａ＞．他のステータス、ライトの場合について。
【００９２】
前述の動作の説明として、キャッシュステータスが‘Ｍ’と‘Ｓ’のリードリクエストについて説明したが、その他のステータスやライト時の場合でもエラー時の動作が同じになることを述べる。
【００９３】
＜Ａ−１＞．キャッシュステータス‘Ｅ’の場合
キャッシュステータス（３０１、５０４）が‘Ｅ’のアドレスに対するリードリクエストの場合は、訂正不可能障害検出時にキャッシュ無効化スヌープを送信する。これによって、全プロセッサから‘Ｉ’が返信され、データの書き込みはないので、最新のデータは主記憶１１１に存在しているために、プロセッサキャッシュ間コヒーレンシ制御可能な状態になり、リードリクエストを再発行し、リプライデータを送信することで、継続動作できる。
【００９４】
＜Ａ−２＞，キャッシュステータス‘Ｉ’の場合
キャッシュステータス３０１，５０４が‘Ｉ’のアドレスに対するリードリクエストの場合も、訂正不可能障害検出時にキャッシュ無効化スヌープを送信する。これによって、全プロセッサから‘Ｉ’が返信され、データの書き込みはないので、最新のデータは主記憶に存在しているために、プロセッサキャッシュ間コヒーレンシ制御可能な状態になり、リードリクエストを再発行し、リプライデータを送信することで、継続動作できる。
【００９５】
＜Ａ−３＞．ライトリクエストの場合
プロセッサからのライトリクエストの場合は、ディレクトリ１１０、又は、訂正不可能障害検出時にキャッシュ無効化スヌープを送信することによって全プロセッサから、‘Ｉ’が返信される。ライトリクエストであるので主記憶１１１には最新のデータが書き込まれている。それにより、プロセッサキャッシュ間コヒーレンシ制御可能な状態に復帰したといえる。
【００９６】
＜Ｂ＞．代替ではないディレクトリキャッシュのエラーの場合について。
【００９７】
図４において、判断回路６０８で障害検出回路６０７からＥＣＣチェックにより訂正不可能障害を検出したとの通知を受けたときに、ディレクトリキャッシュ更新／スヌープ生成回路６１１に訂正不可能障害を起こしたディレクトリキャッシュ１１２のエントリのフラグ５０１の値も通知する機能を設ける。ディレクトリキャッシュ更新／スヌープ生成回路６１１は、信号線６５８でディレクトリキャッシュ１１２を更新する際に、通知されたフラグをそのまま別レベルのエントリへ持ち越すというリクエストを生成する。つまり、訂正不可能障害を起こしたエントリのフラグ５０１のビットが、０１（９０２）ならば、別エントリへ書き込むための更新リクエストも０１（９０２）を付け、００（９０１）の場合は、００（９０１）をそのままにして更新する。これにより、ディレクトリキャッシュ１１２の代替を行っていないエントリの訂正不可能障害の場合にも、前述と同様に継続動作を行える。
【００９８】
ここで、最新のデータは、信号線６５８での更新リクエストによりディレクトリキャッシュ１１２に存在する。フラグ５０１のビットが００（９０１）の場合は、あるアルゴリズムによるディレクトリ１１０へのデータの掃き出しが行われる。これにより、ディレクトリ１１０もデータの更新が行われる。データの掃き出しが行われるまでのコヒーレンシ保証できるデータはディレクトリキャッシュ１１２に存在し、データの掃き出しが行われたあとは、ディレクトリ１１０にコヒーレンシ保証できるデータが存在することになり、ディレクトリキャッシュ１１２で訂正不可能障害が検出されたときもディレクトリ１１０のデータは更新しなくてよいことになる。
【００９９】
この場合は、本発明をそのまま実装できるだけでなく、ディレクトリキャッシュ１１２の代替でないエントリの訂正不可能障害検出時でも、プロセッサキャッシュ間コヒーレンシ保証ができ、継続動作を行うことができるという新たな効果を有する。
【０１００】
＜Ｃ＞パリティエラー時に継続動作を行わせる場合。
【０１０１】
本実施形態では、フラグ５０１についてパリティビット５０２でエラー検証を行い、フラグ５０１にエラーを発見した場合は、システムダウンとした。これを解決するために、判断回路６０８で訂正不可能障害を検出した場合には、信号線６６２によって、ディレクトリキャッシュ１１２で訂正不可能障害を検出したことをディレクトリキャッシュ更新／スヌープ生成回路６１１に通知する。また、判断回路６０８は信号線６６３でディレクトリ１１０に通知し、アドレス生成回路６０５で生成されたアドレスに対応するディレクトリ１１０のエントリを読み出す。ディレクトリ１１０で訂正不可能障害を検出した場合、判断回路６１０はディレクトリキャッシュ更新／スヌープ生成回路６１１に信号線６６９で通知する。
【０１０２】
ディレクトリキャッシュ更新／スヌープ生成回路６１１は、信号線６６２，６６９で通知の有無の確認をする。信号線６６９からのみ通知があった場合、ディレクトリ１１０の障害と判断し、フラグ５０１を代替ステータスの０１（９０２）にセットし、ディレクトリキャッシュ１１２のエントリを更新し、キャッシュ無効化スヌープを送信する。
【０１０３】
信号線６６２，６６９の両方から通知があった場合、代替を行っていたディレクトリキャッシュ１１２の障害と判断する。この場合、信号線６６９からのみの通知と同様に、フラグ５０１を代替ステータスの０１（９０２）にセットし、ディレクトリキャッシュ１１２のエントリを更新し、キャッシュ無効化スヌープを送信する。
【０１０４】
信号線６６２からのみの通知の場合、ディレクトリキャッシュ１１２の代替を行っていないエントリの障害と判断し、フラグ５０１のビットを００（９０１）にセットし、ディレクトリキャッシュ１１２のエントリを更新し、キャッシュ無効化スヌープを送信する。
【０１０５】
これにより、パリティビットにエラーが発生しても、コヒーレンシ保証が可能となり、継続動作を行うことができるという新たな効果を有する。
【０１０６】
次に、本発明に係るメモリ制御方法の一実施形態について、図１乃至図３に基づき説明する。
【０１０７】
本実施形態のメモリ制御方法は、主記憶データを格納する主記憶１１１と、主記憶データの一部をキャッシュデータとして保持するキャッシュ１０５〜１０８を有するプロセッサ１０１〜１０４と、主記憶データについてアドレス情報毎のキャッシュ制御状態を示す第一のエントリ情報（図２）を格納するディレクトリ１１０とに用いられ、プロセッサ１０１〜１０４の各々から主記憶１１１へのアクセスを第一のエントリ情報（図２）に応じて制御することによりキャッシュ１０５〜１０８間のコヒーレンシを保証するものである。
【０１０８】
そして、本実施形態のメモリ制御方法の特徴は、第一のエントリ情報（図２）の一部のキャッシュデータからなる第二のエントリ情報（図３）を保持するディレクトリキャッシュ１１２を用意し、ディレクトリ１１０から読み出した第一のエントリ情報（図２）に訂正不可能な異常があるか否かを検出し、その異常があると検出した第一のエントリ情報（図２）を無効化する指示をプロセッサ１０１〜１０４へ出力し、無効化した第一のエントリ情報（図２）に代わる新たな第二のエントリ情報（図３）を代替エントリ情報（図３）としてディレクトリキャッシュ１１２に作成することにある。
【０１０９】
本実施形態では、ディレクトリ１１０のエントリ情報に訂正不可能な異常が検出された場合、そのエントリ情報を無効化し、そのエントリ情報に代わる代替エントリ情報をディレクトリキャッシュ１１２に作成する。これにより、プロセッサ１０１〜１０４は、異常の発生したエントリ情報を使わずに、代替エントリ情報を使うことができるので、継続動作可能状態に復帰する。
【０１１０】
また、本実施形態のメモリ制御方法では、ディレクトリキャッシュ１１２から読み出した代替エントリ情報（図３）に訂正不可能な異常があるか否かを検出し、その異常があると検出した代替エントリ情報（図３）を無効化する指示をプロセッサ１０１〜１０４へ出力し、無効化した代替エントリ情報（図３）に代わる新たな第二のエントリ情報（図３）を新たな代替エントリ情報（図３）としてディレクトリキャッシュ１１２に作成することを併せて行う。
【０１１１】
本実施形態では、ディレクトリキャッシュ１１２の代替エントリ情報に訂正不可能な異常が検出された場合、その代替エントリ情報を無効化し、そのエントリ情報に代わる新たな代替エントリ情報をディレクトリキャッシュ１１２に作成する。これにより、プロセッサ１０１〜１０４は、異常の発生した代替エントリ情報を使わずに、新たな代替エントリ情報を使うことができるので、継続動作可能状態に復帰する。
【０１１２】
第二のエントリ情報（図３）には、当該第二のエントリ情報が代替エントリ情報であるか否かを示すフラグ（図３）が含まれる。このフラグ（図３）は、代替エントリ情報であることを示すときに、当該代替エントリ情報に対する掃き出し及びディレクトリ１１０への書き戻しを禁止することを示す。これにより、代替エントリ情報がディレクトリキャッシュ１１２に留まり続けるので、プロセッサ１０１〜１０４がディレクトリ１１０にアクセスして再び障害が発生することを防止できる。
【０１１３】
その他の詳細については、本発明に係るメモリコントローラ等の一実施形態の説明で述べたことに準ずる。
【０１１４】
図８及び図９は、本発明に係るメモリ制御プログラムの一実施形態を示すフローチャートである。次に、本発明に係るメモリ制御プログラムの一実施形態について、図１乃至図３並びに図８及び図９に基づき説明する。
【０１１５】
本発明に係るメモリ制御プログラムは、主記憶データを格納する主記憶１１１と、主記憶データの一部をキャッシュデータとして保持するキャッシュ１０５〜１０８を有するプロセッサ１０１〜１０４と、主記憶データについてアドレス情報毎のキャッシュ制御状態を示す第一のエントリ情報（図２）を格納するディレクトリ１１０とに接続されたコンピュータ（メモリコントローラ１０９の一部）に用いられ、プロセッサ１０１〜１０４の各々から主記憶１１１へのアクセスを第一のエントリ情報（図２）に応じて制御することによりキャッシュ１０５〜１０８間のコヒーレンシを保証するものである。
【０１１６】
そして、本実施形態のメモリ制御プログラムの特徴は、メモリコントローラ１０９は、第一のエントリ情報（図２）の一部のキャッシュデータからなる第二のエントリ情報（図３）を保持するディレクトリキャッシュ１１２を備え、図８に示すように、ディレクトリ１１０から読み出した第一のエントリ情報（図２）に訂正不可能な異常があるか否かを検出する障害検出機能（ステップ１１，１２）と、障害検出機能によって異常があると検出された第一のエントリ情報（図２）を無効化する指示をプロセッサ１０１〜１０４へ出力するスヌープ生成機能（ステップ１３）と、スヌープ生成機能によって無効化された第一のエントリ情報（図２）に代わる新たな第二のエントリ情報（図３）を代替エントリ情報としてディレクトリキャッシュ１１２に作成するライトデータ生成機能（ステップ１４）と、をメモリコントローラ１０９に実現させることにある。
【０１１７】
本実施形態では、ディレクトリ１１０のエントリ情報に訂正不可能な異常が検出された場合、そのエントリ情報を無効化し、そのエントリ情報に代わる代替エントリ情報をディレクトリキャッシュ１１２に作成する。これにより、プロセッサ１０１〜１０４は、異常の発生したエントリ情報を使わずに、代替エントリ情報を使うことができるので、継続動作可能状態に復帰する。
【０１１８】
また、図９に示すように、障害検出機能は、ディレクトリキャッシュ１１２から読み出した代替エントリ情報（図３）に訂正不可能な異常があるか否かを検出する機能（ステップ２１，２２）を有し、スヌープ生成機能は、障害検出機能によって異常があると検出された代替エントリ情報（図３）を無効化する指示をプロセッサ１０１〜１０４へ出力する機能（ステップ２３）を有し、ライトデータ生成機能は、スヌープ生成機能によって無効化された代替エントリ情報（図３）に代わる新たな第二のエントリ情報（図３）を新たな代替エントリ情報（図３）としてディレクトリキャッシュ１１２に作成する機能（ステップ２４）を有する。
【０１１９】
本実施形態では、ディレクトリキャッシュ１１２の代替エントリ情報に訂正不可能な異常が検出された場合、その代替エントリ情報を無効化し、そのエントリ情報に代わる新たな代替エントリ情報をディレクトリキャッシュ１１２に作成する。これにより、プロセッサ１０１〜１０４は、異常の発生した代替エントリ情報を使わずに、新たな代替エントリ情報を使うことができるので、継続動作可能状態に復帰する。
【０１２０】
第二のエントリ情報（図３）には、当該第二のエントリ情報が代替エントリ情報であるか否かを示すフラグ（図３）が含まれる。このフラグ（図３）は、代替エントリ情報であることを示すときに、当該代替エントリ情報に対する掃き出し及びディレクトリ１１０への書き戻しを禁止することを示す。これにより、代替エントリ情報がディレクトリキャッシュ１１２に留まり続けるので、プロセッサ１０１〜１０４がディレクトリ１１０にアクセスして再び障害が発生することを防止できる。
【０１２１】
その他の詳細については、本発明に係るメモリコントローラ等の一実施形態の説明で述べたことに準ずる。
【０１２２】
次に、本発明の各実施形態の全体について総括する。各実施形態は、ディレクトリキャッシュ１１２によって訂正不可能障害を救済する方式に関する。各実施形態によれば次の効果が得られる。第１の効果は、ディレクトリ１１０で訂正不可能障害を検出した場合に、ハードウェア量を少しの増加のみで、プロセッサキャッシュ間コヒーレンシを保証したまま、システムを継続動作できることである。第２の効果は、代替するエントリで訂正不可能障害が検出した場合でも、代替しているエントリのフラグ５０１を‘０１’から‘１０’にするだけで、継続運用が可能となり、多重障害にも対応できることである。
【図面の簡単な説明】
【０１２３】
【図１】本発明に係るメモリコントローラ及びマルチプロセッサシステムの一実施形態を示すブロック図である。
【図２】図２［１］は図１のディレクトリの構成を示す説明図であり、図２［２］は図２［１］のエントリの構成を示す説明図である。
【図３】図３［１］は図１のディレクトリキャッシュの構成を示す説明図であり、図３［２］は図３［１］のエントリの構成を示す説明図である。
【図４】図１のメモリコントローラの詳細な構成を示すブロック図である。
【図５】図２［２］及び図３［２］のキャッシュステータスを示す説明図である。
【図６】図２［２］及び図３［２］のキャッシュングエージェントを示す説明図である。
【図７】図３［２］のフラグを示す説明図である。
【図８】本発明に係るメモリ制御プログラムの一実施形態を示すフローチャート（その１）である。
【図９】本発明に係るメモリ制御プログラムの一実施形態を示すフローチャート（その２）である。
【符号の説明】
【０１２４】
１００  マルチプロセッサシステム
１０１〜１０４  プロセッサ
１０５〜１０８  キャッシュ（プロセッサキャッシュ）
１０９  メモリコントローラ
１１０  ディレクトリ
１１１  主記憶（主記憶装置）
１１２  ディレクトリキャッシュ
２０１〜２０ｎ  エントリ（第一のエントリ情報）
３０１，５０４  キャッシュステータス
３０２，５０５  キャッシングエージェント
３０３，５０６  ＥＣＣ
４０１〜４０ｍ  エントリ（第二のエントリ情報、代替エントリ情報）
５０１  フラグ
５０２  フラグ用パリティビット
６０１，６１３  調停回路
６０２  リクエストバッファ／スヌープカウンタ
６０３  セレクタ
６０４  主記憶ライトデータ生成回路
６０５  アドレス生成回路
６０６  ディレクトリキャッシュライトデータ生成回路（ライトデータ生成部）
６０７，６０９  障害検出回路（障害検出部）
６０８，６１０  判断回路
６１１  ディレクトリキャッシュ更新／スヌープ生成回路（スヌープ生成部）
６１２  合成回路
【図１】
2008234531.tif 000003
【図２】
2008234531.tif 000004
【図３】
2008234531.tif 000005
【図４】
2008234531.tif 000006
【図５】
2008234531.tif 000007
【図６】
2008234531.tif 000008
【図７】
2008234531.tif 000009
【図８】
2008234531.tif 000010
【図９】
2008234531.tif 000011