(57)【特許請求の範囲】
【請求項１】
キャッシュのエントリを指定して当該エントリの無効化を指示する無効化指示を受け付ける無効化受付部と、
前記キャッシュのエントリを指定して当該エントリのリードを指示するリード指示を受け付けるリード受付部と、
前記無効化受付部が無効化指示を受け付けたときに、当該エントリが記録されているラインに所定のテストデータをライトするライト部と、
前記無効化受付部が無効化指示を受け付けたときに、前記ライト部がライトしたラインからエントリをリードし、当該エントリの値が前記テストデータと一致するか否かを判定することで、当該ラインにおけるライトエラーの検出を行い、前記無効化受付部が無効化指示を受け付けておらず、かつ前記リード受付部がリード指示を受け付けていないときに、所定のラインからエントリをリードして、当該ラインにおけるリードエラーの検出を行うエラー検出部と
を備えることを特徴とするキャッシュ診断装置。
【請求項２】
前記エラー検出部がリードエラーの検出を行うべきラインのアドレスを記憶するアドレス記憶部と、
前記エラー検出部があるラインに対するリードエラーの検出を終えたときに、前記アドレス記憶部が記憶するアドレスを次のラインのアドレスに書き換えるライン走査部と
を備え、
前記エラー検出部は、前記無効化受付部が無効化指示を受け付けておらず、かつ前記リード受付部がリード指示を受け付けていないときに、前記アドレス記憶部が記憶するアドレスが示すラインからエントリをリードして、当該ラインにおけるリードエラーの検出を行う
ことを特徴とする請求項１に記載のキャッシュ診断装置。
【請求項３】
前記無効化受付部が前記無効化指示を受け付けたときに当該無効化指示が示すアドレスを前記キャッシュのリードアドレスに設定し、前記リード受付部が前記リード指示を受け付けたときに当該リード指示が示すアドレスを前記キャッシュのリードアドレスに設定し、前記無効化受付部が無効化指示を受け付けておらず、かつ前記リード受付部がリード指示を受け付けていないときに、前記アドレス記憶部が記憶するアドレスを前記キャッシュのリードアドレスに設定するリードアドレス設定部を備え、
前記エラー検出部は、前記リードアドレス設定部が設定したリードアドレスが示すラインをリードする
ことを特徴とする請求項２に記載のキャッシュ診断装置。
【請求項４】
前記エラー検出部がラインのエラーを検出したときに、当該ラインを無効化する無効化部を備えることを特徴とする請求項１から請求項３の何れか１項に記載のキャッシュ診断装置。
【請求項５】
キャッシュ診断装置を用いたキャッシュ診断方法であって、
無効化受付部は、キャッシュのエントリを指定して当該エントリの無効化を指示する無効化指示を受け付け、
ライト部は、前記無効化受付部が無効化指示を受け付けたときに、当該エントリが記録されているラインに所定のテストデータをライトし、
エラー検出部は、前記ライト部がライトしたラインからエントリをリードし、当該エントリの値が前記テストデータと一致するか否かを判定することで、当該ラインにおけるライトエラーの検出を行い、
リード受付部は、前記キャッシュのエントリを指定して当該エントリのリードを指示するリード指示を受け付け、
前記エラー検出部は、前記無効化受付部が無効化指示を受け付けておらず、かつ前記リード受付部がリード指示を受け付けていないときに、所定のラインからエントリをリードして、当該ラインにおけるリードエラーの検出を行う
ことを特徴とするキャッシュ診断方法。
【請求項６】
キャッシュを備えるＣＰＵを、
当該キャッシュのエントリを指定して当該エントリの無効化を指示する無効化指示を受け付ける無効化受付部、
前記キャッシュのエントリを指定して当該エントリのリードを指示するリード指示を受け付けるリード受付部、
前記無効化受付部が無効化指示を受け付けたときに、当該エントリが記録されているラインに所定のテストデータをライトするライト部、
前記無効化受付部が無効化指示を受け付けたときに、前記ライト部がライトしたラインからエントリをリードし、当該エントリの値が前記テストデータと一致するか否かを判定することで、当該ラインにおけるライトエラーの検出を行い、前記無効化受付部が無効化指示を受け付けておらず、かつ前記リード受付部がリード指示を受け付けていないときに、所定のラインからエントリをリードして、当該ラインにおけるリードエラーの検出を行うエラー検出部
として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、キャッシュの各ラインにおけるエラーを検出するキャッシュ診断装置、キャッシュ診断方法、及びプログラムに関する。
【背景技術】
【０００２】
近年、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）のマルチコア化やキャッシュ容量の大型化により、ＣＰＵあたりのキャッシュ容量が飛躍的に増加している。しかしながら、キャッシュ容量の増加に伴い、キャッシュエラーの発生確率も高まっている。キャッシュ読み出しにおいて訂正不可能な障害が検出された場合、システムダウンが発生してしまう。
【０００３】
この問題を回避するため、キャッシュで訂正不可能なエラーが検出されたときに、該当するキャッシュラインを無効化する機能を有するプロセッサがある（例えば、特許文献１を参照）。しかしながら、エラー検出をキャッシュアクセス時に行う場合、当該ラインのエントリがｄｉｒｔｙであるときに、データ読み出し時にＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）などによるリカバリができずにシステムダウンが発生してしまう可能性がある。なお、ｄｉｒｔｙなエントリとは、キャッシュの更新により正しいデータがメモリに存在せず、キャッシュ上にのみ存在する状態のエントリをいう。
【０００４】
なお、特許文献２には、通常のメモリアクセスが行われていない時間に診断のアクセスを実行する技術が開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００６−１２００９８号公報
【特許文献２】特開２００６−１３４１９６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１や特許文献２に記載の方法を用いた場合、キャッシュのリードエラーの有無を検出することはできるが、キャッシュのライトエラーの有無を検出することはできないという問題がある。
本発明の目的は、上述した課題を解決するキャッシュ診断装置、キャッシュ診断方法、及びプログラムを提供することにある。
【課題を解決するための手段】
【０００７】
本発明は上記の課題を解決するためになされたものであり、キャッシュのエントリを指定して当該エントリの無効化を指示する無効化指示を受け付ける無効化受付部と、前記キャッシュのエントリを指定して当該エントリのリードを指示するリード指示を受け付けるリード受付部と、前記無効化受付部が無効化指示を受け付けたときに、当該エントリが記録されているラインに所定のテストデータをライトするライト部と、前記無効化受付部が無効化指示を受け付けたときに、前記ライト部がライトしたラインからエントリをリードし、当該エントリの値が前記テストデータと一致するか否かを判定することで、当該ラインにおけるライトエラーの検出を行い、前記無効化受付部が無効化指示を受け付けておらず、かつ前記リード受付部がリード指示を受け付けていないときに、所定のラインからエントリをリードして、当該ラインにおけるリードエラーの検出を行うエラー検出部とを備えることを特徴とするキャッシュ診断装置である。
【０００８】
また、本発明は、キャッシュ診断装置を用いたキャッシュ診断方法であって、無効化受付部は、キャッシュのエントリを指定して当該エントリの無効化を指示する無効化指示を受け付け、ライト部は、前記無効化受付部が無効化指示を受け付けたときに、当該エントリが記録されているラインに所定のテストデータをライトし、エラー検出部は、前記ライト部がライトしたラインからエントリをリードし、当該エントリの値が前記テストデータと一致するか否かを判定することで、当該ラインにおけるライトエラーの検出を行い、リード受付部は、前記キャッシュのエントリを指定して当該エントリのリードを指示するリード指示を受け付け、前記エラー検出部は、前記無効化受付部が無効化指示を受け付けておらず、かつ前記リード受付部がリード指示を受け付けていないときに、所定のラインからエントリをリードして、当該ラインにおけるリードエラーの検出を行うことを特徴とする。
【０００９】
また、本発明は、キャッシュを備えるＣＰＵを、当該キャッシュのエントリを指定して当該エントリの無効化を指示する無効化指示を受け付ける無効化受付部、前記キャッシュのエントリを指定して当該エントリのリードを指示するリード指示を受け付けるリード受付部、前記無効化受付部が無効化指示を受け付けたときに、当該エントリが記録されているラインに所定のテストデータをライトするライト部、前記無効化受付部が無効化指示を受け付けたときに、前記ライト部がライトしたラインからエントリをリードし、当該エントリの値が前記テストデータと一致するか否かを判定することで、当該ラインにおけるライトエラーの検出を行い、前記無効化受付部が無効化指示を受け付けておらず、かつ前記リード受付部がリード指示を受け付けていないときに、所定のラインからエントリをリードして、当該ラインにおけるリードエラーの検出を行うエラー検出部として機能させるためのプログラムである。
【発明の効果】
【００１０】
本発明によれば、通常動作への性能に影響を及ぼすことなくキャッシュのライトエラーの有無を検出することができる。
【図面の簡単な説明】
【００１１】
【図１】本発明の一実施形態によるキャッシュ診断装置を備えるＣＰＵの構成を示す概略ブロック図である。
【図２】ビジー検出部の入出力を示す図である。
【図３】リードアドレス設定部の入出力を示す図である。
【図４】ライン走査部の入出力を示す図である。
【図５】ライト部の入出力を示す図である。
【図６】エラー検出部の入出力を示す図である。
【図７】無効化部の入出力を示す図である。
【図８】キャッシュ診断装置の動作を示すフローチャートである。
【図９】キャッシュ診断装置のレジスタ値の一例を示すタイムチャートである。
【図１０】本発明によるキャッシュ診断装置の基本構成を示す概略ブロック図である。
【発明を実施するための形態】
【００１２】
以下、図面を参照しながら本発明の実施形態について詳しく説明する。
図１は、本発明の一実施形態によるキャッシュ診断装置を備えるＣＰＵの構成を示す概略ブロック図である。
ＣＰＵは、キャッシュ１０、ビジー検出部２０（無効化受付部、リード受付部）、リードアドレス設定部３０、アドレス記憶部４０、ライン走査部５０、ライト部６０、エラー検出部７０、無効化部８０を備える。なお、本実施形態においては、ビジー検出部２０、リードアドレス設定部３０、アドレス記憶部４０、ライン走査部５０、ライト部６０、エラー検出部７０、無効化部８０が、キャッシュ診断装置の構成である。
【００１３】
キャッシュ１０は、メモリが記憶する情報の一部をエントリとして所定サイズのブロック（ライン）単位に記憶する。ＣＰＵが実行するＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）は、必要に応じてキャッシュ１０からエントリをリードする。なお、キャッシュ１０が記憶する情報は、データと当該データの誤りを訂正するためのＥＣＣ（Ｅｒｒｏｒ  Ｃｈｅｃｋ  ａｎｄ  Ｃｏｒｒｅｃｔｉｏｎ）符号から構成される。ＥＣＣ符号の例としてはハミング符号などが挙げられる。なお、キャッシュ１０にはライト用のポートとリード用のポート、及びリードとライトのアドレスは独立しており、リードとライトを同時に行うことができる。
【００１４】
図２は、ビジー検出部２０の入出力を示す図である。
ビジー検出部２０は、ＣＰＵが実行するＯＳから、キャッシュ１０が記憶するエントリのリード（ｒｅａｄ）を指示する通常リード指示を受け付ける。なお、通常リード指示には、何れのエントリをリードするかを示すエントリの識別情報が含まれる。ビジー検出部２０は、当該通常リード指示を内部のＮＣＲ１Ｒレジスタに記録し、当該通常リード指示をリードアドレス設定部３０及びライン走査部５０に出力する。
また、ビジー検出部２０は、他のＣＰＵから、キャッシュ１０が記憶するエントリの無効化（ｉｎｖａｌｉｄ）を指示する無効化指示を受け付ける。なお、無効化指示には、何れのエントリを無効化するかを示すエントリの識別情報が含まれる。ビジー検出部２０は、受け付けた無効化指示を内部のＩＮＶＥＴ１Ｒレジスタに記録し、ライトテスト指示をリードアドレス設定部３０及びライン走査部５０並びにライト部６０及びエラー検出部７０に出力する。
【００１５】
図３は、リードアドレス設定部３０の入出力を示す図である。
リードアドレス設定部３０は、ビジー検出部２０から通常リード指示を受け付け、受け付けた通常リード指示が示すエントリが記録されたラインのアドレスを、内部のＮＲＡＤ１Ｒレジスタに記録する。また、リードアドレス設定部３０は、ビジー検出部２０からライトテスト指示を受け付け、受け付けたライトテスト指示が示すエントリが記録されたラインのアドレスを、内部のＮＷＡＤ１Ｒレジスタに記録する。つまり、ＣＰＵが実行するＯＳが無効化指示をアサートした場合、ＮＷＡＤ１Ｒレジスタには、当該無効化指示に対応するライトアドレスが記録される。なお、アサートとは、信号が有効になることをいう。これに対し、信号が無効になることをデアサートという。
【００１６】
リードアドレス設定部３０は、ビジー検出部２０から受け付ける通常リード指示及びライトテスト指示のアサート／デアサートの組み合わせに従って、ＮＲＡＤ１Ｒレジスタが記憶するアドレス、ＮＷＡＤ１Ｒレジスタが記憶するアドレス、アドレス記憶部４０が記憶するリードテスト用アドレスの何れかをキャッシュ１０のリードアドレスに設定する。具体的には、通常リード指示及びライトテスト指示が共にデアサートされている場合、つまり、通常動作によるキャッシュリード及びキャッシュ１０の無効化指示が無い場合に、リードアドレス設定部３０は、アドレス記憶部４０が記憶するリードテスト用アドレスをキャッシュ１０のリードアドレスに設定する。また、通常リード指示がデアサートされ、ライトテスト指示がアサートされている場合、つまりキャッシュ１０の無効化指示を受け付けた場合、リードアドレス設定部３０は、ＮＷＡＤ１Ｒレジスタが記憶するアドレスをキャッシュ１０のリードアドレスに設定する。また、通常リード指示がアサートされ、ライトテスト指示がデアサートされている場合、つまり通常動作によるキャッシュリードを行う場合、リードアドレス設定部３０は、ＮＲＡＤ１Ｒレジスタが記憶するアドレスをキャッシュ１０のリードアドレスに設定する。また、通常リード指示及びライトテスト指示が共にアサートされている場合、リードアドレス設定部３０は、ＮＷＡＤ１Ｒレジスタが記憶するアドレスをキャッシュ１０のリードアドレスに設定する。
【００１７】
図４は、ライン走査部５０の入出力を示す図である。
ライン走査部５０は、キャッシュ１０のリードテストの対象となるラインのアドレスであるリードテスト用アドレスを、アドレス記憶部４０に記録する。ライン走査部５０は、ビジー検出部２０から受け付ける通常リード指示及び無効化指示のアサート／デアサートの組み合わせに従って、リードテスト用アドレスを決定する。具体的には、通常リード指示及びライトテスト指示が共にデアサートされている場合に、ライン走査部５０は、次のラインを示すために、リードテスト用アドレスに１を加算したアドレスを、アドレス記憶部４０に記録する。他方、その他の組み合わせである場合、ライン走査部５０は、アドレス記憶部４０が記憶するアドレスが現在の値を保持するよう制御する。
【００１８】
図５は、ライト部６０の入出力を示す図である。
ライト部６０は、ＣＰＵが実行するＯＳから、キャッシュ１０へのライト（ｗｒｉｔｅ）を指示する通常ライト指示を受け付ける。なお、通常ライト指示には、データとＥＣＣ符号によって構成される、キャッシュ１０へライトすべき通常ライトデータが含まれる。また、ライト部６０は、ビジー検出部２０からライトテスト指示を受け付ける。また、ライト部６０は、ライトテスト指示によってキャッシュ１０に記録すべきテストデータを生成する。なお、テストデータは、ＡＬＬ１パタン、ＡＬＬ０パタン、１０１０を繰り返すパタンなどがあるが、ライト部６０は、任意のパタンを生成することができる。
【００１９】
ライト部６０は、ＣＰＵから受け付ける通常ライト指示及びビジー検出部２０から受け付けるライトテスト指示のアサート／デアサートの組み合わせに従って、通常ライトデータまたはテストデータを、キャッシュ１０にライトする。具体的には、通常ライト指示及びライトテスト指示が共にデアサートされている場合、つまり、通常動作によるキャッシュライト及びキャッシュ１０の無効化指示が無い場合、ライト部６０は、キャッシュ１０へのライトを行わない。また、通常ライト指示がデアサートされ、ライトテスト指示がアサートされている場合、つまりキャッシュ１０の無効化指示を受け付けた場合、ライト部６０は、生成したテストデータをキャッシュ１０にライトする。また、通常ライト指示がアサートされ、ライトテスト指示がデアサートされている場合、つまり通常動作によるキャッシュライトを行う場合、ライト部６０は、通常ライト指示に含まれる通常ライトデータをキャッシュ１０にライトする。また、通常ライト指示及びライトテスト指示が共にアサートされている場合、ライト部６０は、生成したテストデータをキャッシュ１０にライトする。なお、ライト部６０は、テストデータをキャッシュ１０にライトする場合、当該テストデータをエラー検出部７０に出力する。
【００２０】
図６は、エラー検出部７０の入出力を示す図である。
エラー検出部７０は、キャッシュ１０のライトエラー及びリードエラーの検出を行う。
エラー検出部７０は、キャッシュ１０から、リードアドレス設定部３０により設定されたアドレスが示すラインの情報をリードし、リードした情報をＲＤ２Ｒレジスタに記録する。また、エラー検出部７０は、キャッシュ１０に設定されたリードアドレスを読み出し、ＳＲＡＤ２Ｒレジスタに記録する。また、エラー検出部７０は、ビジー検出部２０からライトテスト指示を受け付ける。また、エラー検出部７０は、ライト部６０からテストデータの入力を受け付ける。
【００２１】
エラー検出部７０は、ＲＤ２Ｒレジスタが記憶する情報に含まれるＥＣＣ符号を用いて、当該情報のデータ部分のエラーを検出したときに、リードエラーが発生したことを示すリードエラー通知を無効化部８０に出力する。また、エラー検出部７０は、ＩＮＶＥＴ２Ｒレジスタが記憶するライトテスト指示がアサートされている場合において、ＲＤ２Ｒレジスタが記憶する情報のデータ部分とテストデータとが一致しないときに、ライトエラーが発生したことを示すライトエラー通知を無効化部８０に出力する。
なお、エラー検出部７０がリードエラーまたはライトエラーを検出した場合、エラー検出部７０は、ＳＲＡＤ２Ｒレジスタが記憶するアドレスをエラーが発生しているラインを示すエラーアドレスとして無効化部８０に出力する。
【００２２】
図７は、無効化部８０の入出力を示す図である。
無効化部８０は、エラー検出部７０からエラーアドレス、リードエラー通知、ライトエラー通知を受け付け、キャッシュ１０のラインのうちエラーが発生しているラインを無効化する。また、無効化部８０は、エラーが発生しているラインに格納されたエントリの状態を取得し、エントリの状態がＣｌｅａｎを示す場合、当該ラインのデグレードを行う。他方、無効化部８０は、エラーが発生しているラインに格納されたエントリの状態がＤｉｒｔｙを示す場合、デグレードのみによる継続動作が不可能であることを、ＣＰＵが実行するＯＳに通知する。
【００２３】
次に、本実施形態によるキャッシュ診断装置の動作について説明する。
図８は、キャッシュ診断装置の動作を示すフローチャートである。
まず、ビジー検出部２０は、ＣＰＵが実行するＯＳから、通常リード指示及び無効化指示を受け付け、当該通常リード指示及び無効化指示のアサート／デアサートに従って、通常リード指示及びライトテスト指示を出力する。
【００２４】
次に、リードアドレス設定部３０は、ビジー検出部２０が出力したライトテスト指示がアサートされているか否かを判定する（ステップＳ１）。リードアドレス設定部３０は、ライトテスト指示がアサートされていると判定した場合（ステップＳ１：ＹＥＳ）、ライトテスト指示が示すアドレスを、キャッシュ１０のリードアドレスに設定する（ステップＳ２）。次に、ライト部６０は、テストデータを生成し、キャッシュ１０のうちライトテスト指示が示すアドレスのラインに当該テストデータをライトする（ステップＳ３）。
【００２５】
次に、エラー検出部７０は、リードアドレス設定部３０によって設定されたリードアドレスが示すラインをキャッシュ１０からリードし（ステップＳ４）、当該リードした情報のデータ部分とテストデータを比較する（ステップＳ５）。エラー検出部７０は、リードした情報のデータ部分とテストデータとが一致しないと判定した場合（ステップＳ５：ＮＯ）、ライトエラー通知を無効化部８０に出力する（ステップＳ６）。
【００２６】
また、エラー検出部７０は、リードした情報のＥＣＣ符号を用いて、リードした情報のデータ部分の誤り検出を行う（ステップＳ７）。エラー検出部７０は、リードした情報のデータ部分に誤りがあると判定した場合（ステップＳ７：ＹＥＳ）、リードエラー通知を無効化部８０に出力する（ステップＳ８）。
【００２７】
他方、ステップＳ１において、ライトテスト指示がアサートされていないと判定した場合（ステップＳ１：ＮＯ）、リードアドレス設定部３０は、通常リード指示がアサートされているか否かを判定する（ステップＳ９）。リードアドレス設定部３０は、通常リード指示がアサートされていると判定した場合（ステップＳ９：ＹＥＳ）、当該通常リード指示が示すアドレスをキャッシュ１０のリードアドレスに設定する（ステップＳ１０）。他方、通常リード指示がアサートされていないと判定した場合（ステップＳ９：ＮＯ）、アドレス記憶部４０が記憶するリードテスト用アドレスを、キャッシュ１０のリードアドレスに設定する（ステップＳ１１）。このとき、ライン走査部５０は、リードテスト用アドレスをインクリメントして（次のラインのアドレスに書き換えて）アドレス記憶部４０に記録する（ステップＳ１２）。
【００２８】
リードアドレス設定部３０がステップＳ１０またはステップＳ１１でリードアドレスを設定すると、エラー検出部７０は、リードアドレス設定部３０によって設定されたリードアドレスが示すラインをキャッシュ１０からリードする（ステップＳ１３）。そして、エラー検出部７０は、リードした情報のＥＣＣ符号を用いて、リードした情報のデータ部分の誤り検出を行う（ステップＳ７）。エラー検出部７０は、リードした情報のデータ部分に誤りがあると判定した場合（ステップＳ７：ＹＥＳ）、リードエラー通知を無効化部８０に出力する（ステップＳ８）。
【００２９】
エラー検出部７０によるエラー検出処理が完了すると、無効化部８０は、エラー検出部７０から受け付けるライトエラー通知またはリードエラー通知の少なくとも何れか一方がアサートされたか否かを判定する（ステップＳ１４）。無効化部８０は、ライトエラー及びリードエラーが無いと判定した場合（ステップＳ１４：ＮＯ）、処理を終了する。他方、無効化部８０は、ライトエラーまたはリードエラーが検出されたと判定した場合（ステップＳ１４：ＹＥＳ）、エラー検出部７０が出力するエラーアドレスが示すキャッシュ１０のラインを無効化する（ステップＳ１５）。次に、無効化部８０は、無効化したラインの状態がＤｉｒｔｙであるかＣｌｅａｎであるかを判定する（ステップＳ１６）。無効化部８０は、ラインの状態がＤｉｒｔｙであると判定した場合（ステップＳ１６：ＹＥＳ）、デグレードのみによる継続動作が不可能であることをＣＰＵが実行するＯＳに通知する（ステップＳ１７）。他方、無効化部８０は、ラインの状態がＣｌｅａｎであると判定した場合（ステップＳ１６：ＮＯ）、当該ラインのデグレードを行う（ステップＳ１８）。
以上の動作により、キャッシュ診断装置は、キャッシュ１０のエラーの有無の検出を行う。
【００３０】
次に、具体的な例を用いてキャッシュ診断装置によるエラーの検出動作を説明する。
図９は、キャッシュ診断装置のレジスタ値の一例を示すタイムチャートである。
なお、ここでは、キャッシュ１０のアドレス「１」に格納されているデータにエラーが存在し、またキャッシュ１０のアドレス「Ａ」のラインに障害があるものとして説明する。
【００３１】
キャッシュ１０のリードテストは、通常のキャッシュアクセスでのリード（ＣＰＵでメモリアクセス命令が実行されキャッシュ１０へのリード）が行われない場合に実施される。リードテストが実施可能であるか否かの判断には、それぞれビジー検出部２０のＮＣＲ１Ｒレジスタが保持する通常リード指示及びビジー検出部２０のＩＮＶＥＴ１Ｒレジスタが保持するライトテスト指示が参照される。通常のキャッシュアクセスに影響なくリードテストが可能な状態とは、通常リード及びライトテストを実施しないケース、すなわち通常リード指示とライトテスト指示が双方、デアサートされている場合にリードテストが行われる。
【００３２】
図９のタイムチャートを参照すると、時刻Ｔ４から時刻Ｔ７が、通常のキャッシュアクセスに影響なくリードテストが可能なタイミングである。このときに、リードアドレス設定部３０によって、キャッシュ１０のリードアドレスが、ＮＲＡＤ１Ｒレジスタが記憶する通常のリードアドレスから、アドレス記憶部４０が記憶するリードテスト用アドレスに切り替わるように制御される。なお、アドレス記憶部４０が記憶するリードテスト用アドレスは、時刻Ｔ１では、「０」、つまりキャッシュ１０の先頭のエントリ（アドレス）を指し示しており、キャッシュ１０のリードテストを行うたびに、ライン走査部５０によってアドレスがインクリメントされ、キャッシュ１０全体を走査するよう制御される。
【００３３】
これにより、エラー検出部７０は、リードアドレス設定部３０の出力であるリードアドレスで、キャッシュ１０のリードを行い、キャッシュ１０からの出力値であるリードデータの値がエラー検出部７０のＲＤ２Ｒレジスタに格納されるとともに、リードされたデータに対応するキャッシュ１０のアドレスがエラー検出部７０のＳＲＡＤ２Ｒレジスタに保持される。図９のタイムチャートでは、リードテストのために読み出したリードデータ及びそのアドレスは、時刻Ｔ５のタイミングでレジスタに格納される。なお、タイムチャート中の丸括弧付きの値は、キャッシュ１０の該当アドレスに対応するデータを表したものである。
【００３４】
次に、エラー検出部７０は、ＲＤ２Ｒレジスタが記憶する情報のデータ部分とＥＣＣ符号の整合チェックを行う。時刻Ｔ５のタイミングでレジスタに格納されたエントリ（アドレス「０」の情報）にはエラーが無いため、エラー検出部７０は、リードエラー通知をデアサートする。
【００３５】
リードテストのためにレジスタのラインがリードされると、ライン走査部５０は、アドレス記憶部４０が記憶するリードテスト用アドレスをインクリメントするため、次のテストアドレスである「１」が時刻Ｔ５のタイミングでアドレス記憶部４０にセットされる。エラー検出部７０は、次のアドレス「１」のキャッシュ１０の読み出しを、時刻Ｔ５において行うと、リードエラーが検出されるため、時刻Ｔ６でリードエラー通知をアサートする。このエラーを契機に、無効化部８０は、時刻Ｔ６でエラー検出部７０がエラーアドレスとして出力したアドレスに対応する、キャッシュ１０を無効化（ｉｎｖａｌｉｄ）する。また、該当キャッシュエントリの状態がＤｉｒｔｙで無い場合、無効化部８０はデグレードを行う。また、キャッシュ状態がＤｉｒｔｙである場合、無効化部８０は、データが失われたために、デグレードのみによる継続動作が不可であることをＯＳへ通知する。これにより、該当エラー部位への通常アクセスに先立ち、診断動作でエラーを検出した場合に、エラーリカバリが期待できるケースでは、システムダウンを回避することが可能になる。
なお、エラー発生時は、後続のキャッシュアクセスを停止させる必要がある。
【００３６】
このように、通常のキャッシュアクセスがないときに、キャッシュエントリに対して網羅的なリードテストを行うことで、通常動作への影響なく、キャッシュエントリ全体の診
断を行うことができる。
【００３７】
他方、キャッシュ１０のライトテストは、通常のキャッシュアクセスにて、キャッシュ１０のデータが無効化されるタイミングで行なわれる。そのため、ライトテストが実施可能であるか否かの判断には、ビジー検出部２０のＩＮＶＥＴ１Ｒレジスタが保持するライトテスト指示が参照される。
【００３８】
図９のタイムチャートを参照すると、ビジー検出部２０のＩＮＶＥＴ１Ｒレジスタが保持する無効化指示は、時刻Ｔ１１でアサートされ、ライトテスト指示として出力される。なお、このときビジー検出部２０のＮＣＲ１Ｒレジスタが保持する通常リード指示はデアサートされている。このときに、リードアドレス設定部３０によって、キャッシュ１０のリードアドレスが、ＮＲＡＤ１Ｒレジスタが記憶する通常のリードアドレスから、ＮＷＡＤ１Ｒレジスタが記憶するライトアドレスに切り替わるように制御される。なお、ＮＷＡＤ１Ｒレジスタが記憶するライトアドレスは、時刻Ｔ１１では、「Ａ」を指し示している。
【００３９】
これにより、ライト部６０は、当該ライトアドレスに対してテストデータのライトを行う。その後、エラー検出部７０は、リードアドレス設定部３０の出力であるリードアドレスで、キャッシュ１０のリードを行い、キャッシュ１０からの出力値であるリードデータの値がエラー検出部７０のＲＤ２Ｒレジスタに格納されるとともに、リードされたデータに対応するキャッシュ１０のアドレスがエラー検出部７０のＳＲＡＤ２Ｒレジスタに保持される。図９のタイムチャートでは、ライトテストのために読み出したリードデータ及びそのアドレスは、時刻Ｔ１２のタイミングでレジスタに格納される。
【００４０】
次に、エラー検出部７０は、ＲＤ２Ｒレジスタが記憶する情報のデータ部分とライト部６０が生成したテストデータの整合チェックを行う。上述したとおり、アドレス「Ａ」のラインには障害があるため、エラー検出部７０は、時刻Ｔ１２でライトエラー通知をアサートする。なお、このときエラー検出部７０は、ＲＤ２Ｒレジスタが記憶する情報のデータ部分とＥＣＣ符号の整合チェックを行う。ＥＣＣで不整合を検出しうる場合は、リードエラーもアサートすることとなる。
【００４１】
このエラーを契機に、無効化部８０は、時刻Ｔ１２でエラー検出部７０がエラーアドレスとして出力したアドレスに対応する、キャッシュ１０を無効化する。また、該当キャッシュエントリの状態がＤｉｒｔｙで無い場合、無効化部８０はデグレードを行う。また、キャッシュ状態がＤｉｒｔｙである場合、無効化部８０は、データが失われたために、デグレードのみによる継続動作が不可であることをＯＳへ通知する。これにより、該当エラー部位への通常アクセスに先立ち、診断動作でエラーを検出した場合に、エラーリカバリが期待できるケースでは、システムダウンを回避することが可能になる。
なお、エラー発生時は、後続のキャッシュアクセスを停止させる必要がある。
【００４２】
上述したとおり、通常のキャッシュエントリの無効化タイミングで、キャッシュ１０のリードアドレスを通常のライトアドレス側に切り換えることにより、既知データのキャッシュ１０へのライトとリードテストを同時に行う。これにより、通常動作への性能に影響を及ぼすことなくキャッシュ１０のライトテストを行うことができる。
【００４３】
以上、図面を参照してこの発明の一実施形態について詳しく説明してきたが、具体的な構成は上述のものに限られることはなく、この発明の要旨を逸脱しない範囲内において様々な設計変更等をすることが可能である。
【００４４】
《基本構成》
図１０は、本発明によるキャッシュ診断装置の基本構成を示す概略ブロック図である。
上述した実施形態では、本発明によるキャッシュ診断装置の一実施形態として図１に示す構成について説明したが、本発明によるキャッシュ診断装置の基本構成は、図１０に示すとおりである。
すなわち、本発明によるキャッシュ診断装置は、ビジー検出部２０、ライト部６０、及びエラー検出部７０を基本構成とする。
【００４５】
ビジー検出部２０は、キャッシュ１０のエントリを指定して当該エントリの無効化を指示する無効化指示を受け付ける。
ライト部６０は、ビジー検出部２０が無効化指示を受け付けたときに、当該エントリが記録されているラインに所定のテストデータをライトする。
エラー検出部７０は、ライト部６０がライトしたラインからエントリをリードし、当該エントリの値がテストデータと一致するか否かを判定することで、当該ラインにおけるライトエラーの検出を行う。
これにより、キャッシュ診断装置は、通常動作への性能に影響を及ぼすことなくキャッシュ１０のライトエラーの有無を検出することができる。
【００４６】
上述のキャッシュ診断装置はＣＰＵによって実現されている。そして、上述した各処理部の動作は、プログラムの形式でコンピュータ読み取り可能な記録媒体に記憶されており、このプログラムをＣＰＵが読み出して実行することによって、上記処理が行われる。ここでコンピュータ読み取り可能な記録媒体とは、磁気ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、半導体メモリ等をいう。また、このコンピュータプログラムを通信回線によってコンピュータに配信し、この配信を受けたコンピュータのＣＰＵが当該プログラムを実行するようにしても良い。
【００４７】
また、上記プログラムは、前述した機能の一部を実現するためのものであっても良い。さらに、前述した機能をＣＰＵにすでに記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル（差分プログラム）であっても良い。
【符号の説明】
【００４８】
１０…キャッシュ  ２０…ビジー検出部  ３０…リードアドレス設定部  ４０…アドレス記憶部  ５０…ライン走査部  ６０…ライト部  ７０…エラー検出部  ８０…無効化部
【図１】
0005998561.tif 000002
【図２】
0005998561.tif 000003
【図３】
0005998561.tif 000004
【図４】
0005998561.tif 000005
【図５】
0005998561.tif 000006
【図６】
0005998561.tif 000007
【図７】
0005998561.tif 000008
【図８】
0005998561.tif 000009
【図９】
0005998561.tif 000010
【図１０】
0005998561.tif 000011