以下、図面を参照して、本発明の実施の形態を説明する。説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。また、様々な処理を行う機能ブロックとして図面に記載される各要素は、ハードウェア的には、CPU、メモリ、その他の回路で構成することができ、ソフトウェア的には、メモリにロードされたプログラムなどによって実現される。したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組合せによっていろいろな形で実現できることは当業者には理解されるところであり、いずれかに限定されるものではない。なお、各図面において、同一の要素には同一の符号が付されており、必要に応じて重複説明は省略されている。
また、上述したプログラムは、様々なタイプの非一時的なコンピュータ可読媒体(non−transitory computer readable medium)を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体(tangible storage medium)を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体(例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ)、光磁気記録媒体(例えば光磁気ディスク)、CD−ROM(Read Only Memory)CD−R、CD−R/W、半導体メモリ(例えば、マスクROM、PROM(Programmable ROM)、EPROM(Erasable PROM)、フラッシュROM、RAM(Random Access Memory))を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体(transitory computer readable medium)によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
本発明の具体的な実施の形態を説明する前に、まず、本発明にかかる技術の原理を説明する。なお、以下の説明において、特別な説明が無い限り、「エラー」は、「訂正不能なエラー」を意味する。
図1は、本発明にかかる技術の原理を説明するための情報処理装置100を示す。該情報処理装置100は、プロセッサ110と、キャッシュメモリユニット130と、メインメモリユニット160を有し、プロセッサ110は、第1のバス120を介してキャッシュメモリユニット130と接続されており、第2のバス150を介してメインメモリユニット160と接続されている。また、キャッシュメモリユニット130とメインメモリユニット160は、第2のバス150を介して接続されている。
プロセッサ110は、ソフトウェア命令(以下SW命令という)を実行するSW命令実行部112と、回復処理部114と、メモリリクエスト制御部116を備える。
キャッシュメモリユニット130は、キャッシュコントローラとして機能し、プロセッサ110からのメモリリクエスト(以下RSTという)を受け付けるRST受付部132と、キャッシュメモリ134と、付加情報記憶部136と、第2の情報付加部138と、RD出力部140を備える。なお、この例の情報処理装置100において、キャッシュメモリがキャッシュメモリ134のみであるため、キャッシュメモリ134は、1次キャッシュメモリ(L1キャッシュメモリ)となる。
メインメモリユニット160は、プロセッサ110からのメモリリクエストを受け付けるRST受付部162と、メインメモリ164と、第1の情報付加部166と、RD出力部168を備える。
図2は、プロセッサ110がメモリリードに際しての動作の流れを示すフローチャートである。プロセッサ110において、SW命令実行部112は、SW命令を実行している中で、メモリデータをリードする必要があるときに、メモリリクエスト制御部116にリクエスト要求RSTRを出力する。これに伴って、SW命令実行部112は、SW命令の実行を一時中断する。メモリリクエスト制御部116は、SW命令実行部112からのリクエスト要求RSTRに応じて、キャッシュメモリ134へ発行するメモリリクエストRSTを第1のバス120に出力する(S100)。キャッシュヒットした場合(S102:Yes)、メモリリクエストRSTに応じてキャッシュメモリユニット130からリプライデータRD3が第1のバス120を介してプロセッサ110に転送され、プロセッサ110は、リプライデータ受信後の処理を行う(S110)。
一方、ステップS102において、キャッシュミスした場合(S102:No)、メモリリクエスト制御部116は、メインメモリ164へ発行するメモリリクエストRSTを第2のバス150に出力する(S104)。このメモリリクエストRSTに応じてメインメモリユニット160からリプライデータRD1が第2のバス150を介してプロセッサ110に転送され、プロセッサ110は、リプライデータ受信後の処理を行う(S110)。
なお、この場合、メインメモリユニット160からプロセッサ110へ転送されるリプライデータRD1は、キャッシュメモリユニット130にも転送され、キャッシュメモリユニット130は、このリプライデータRD1でブロックロードを行う。
プロセッサ110によるステップS110の「リプライデータ受信後処理」の詳細、及びキャッシュメモリユニット130によるブロックロードの詳細は、後述する。
図3は、キャッシュミスの場合(図2のステップS102:No)に、メインメモリユニット160がプロセッサ110からメモリリクエストRSTを受信した際の動作の流れを示すフローチャートである。
キャッシュミス時に、メインメモリユニット160のRST受付部162は、第2のバス150を介して、プロセッサ110のメモリリクエスト制御部116からのメモリリクエストRSTを受け付ける(S150)。
RST受付部162は、このメモリリクエストRSTに含まれるリクエストアドレスADRをメインメモリ164とRD出力部168に出力し、メインメモリ164は、リクエストアドレスADRに該当するデータをリプライデータRD0としてRD出力部168と第1の情報付加部166に出力する。
第1の情報付加部166は、リプライデータRD0に対して訂正不能なエラーの有無の検出を行うと共に、該検出の結果を示すエラー情報と、該検出が行われた場所(ここではメインメモリユニット160)を示す場所情報とを付加情報ADI0としてRD出力部168に出力する(S154)。
RD出力部168は、RST受付部162からのリクエストアドレスADRと、メインメモリ164からのリプライデータRD0と、第1の情報付加部166からの付加情報ADI0とをリプライデータRD1として第2のバス150に出力する(S156)。
すなわち、キャッシュミス時にメインメモリユニット160から出力されるリプライデータRD1には、メインメモリ164からの、リプライデータの本体となるリプライデータRD0と、第1の情報付加部166からの付加情報ADI0とが含まれている。
前述したように、このリプライデータRD1は、第2のバス150を介してプロセッサ110とキャッシュメモリユニット130に転送される。
図4は、キャッシュメモリユニット130がプロセッサ110からメモリリクエストRSTを受信した際の動作の流れを示すフローチャートである。
キャッシュメモリユニット130のRST受付部132は、第1のバス120を介してプロセッサ110のメモリリクエスト制御部116からのメモリリクエストRSTを受け付ける(S160)と、該メモリリクエストRSTに含まれるリクエストアドレスADRをキャッシュメモリ134とRD出力部140に出力する。
キャッシュメモリ134は、リクエストアドレスADRに該当するデータが無い場合すなわちキャッシュミスの場合(S162:No)、リプライデータの出力をせずに、後にメインメモリユニット160から出力されるリプライデータRD1でブロックロードを行う(S180)。図5を参照して、ステップS180におけるブロックロード処理(リフィルを含む)を説明する。
図5に示すように、キャッシュメモリ134のキャッシュミス時に、キャッシュメモリ134の代わりにメインメモリユニット160から第2のバス150にリプライデータRD1が出力されると、キャッシュメモリユニット130におけるキャッシュメモリ134は、該リプライデータRD1の本体(リプライデータRD0)を該当するブロックに格納し(S182)、付加情報記憶部136は、リプライデータRD1に含まれる付加情報(付加情報ADI0)を、リプライデータRD0が格納されたブロックとを対応付けて格納する(S184)。
すなわち、キャッシュメモリ134のキャッシュミス時に行われるブロックロードによりキャッシュメモリ134に格納されたデータについて、該データに対応する付加情報ADI0が付加情報記憶部136に記憶される。
なお、プロセッサ110によりキャッシュメモリ134のデータ更新(Purging)が行われた際に、データ更新がなされるブロックに対応する付加情報ADI0が格納されている場合に、付加情報記憶部136は、該付加情報ADI0をクリアする。
図4に戻ってキャッシュヒットの場合について説明する。
ステップS162において、キャッシュヒットした場合に(S162:Yes)、キャッシュメモリ134は、RST受付部132からのリクエストアドレスADRに該当するデータをリプライデータRD2としてRD出力部140と第2の情報付加部138に出力する。
第2の情報付加部138は、キャッシュメモリ134が出力したリプライデータRD2に対して付加する情報(付加情報ADI1)をRD出力部140に供する。具体的には、第2の情報付加部138は、まず、キャッシュメモリ134が出力したリプライデータRD2について、付加情報記憶部136に付加情報ADI0が記憶されているか否かを確認する(S164)。リプライデータRD2に対応する付加情報ADI0が付加情報記憶部136に記憶されていれば(S164:Yes)、第2の情報付加部138は、さらに、該付加情報ADI0に含まれるエラー情報が「エラーがある」と「エラーが無い」のいずれを示しているかを確認する(S166)。確認の結果、付加情報ADI0に含まれるエラー情報が「エラーがある」を示す場合に、第2の情報付加部138は、付加情報ADI0をそのまま付加情報ADI1としてRD出力部140に出力する(S166:Yes)。
一方、リプライデータRD2に対応する付加情報ADI0が付加情報記憶部136に無い場合(S164:No)と、リプライデータRD2に対応する付加情報ADI0に含まれるエラー情報が「エラーが無い」を示す場合(S166:No)において、第2の情報付加部138は、リプライデータRD2に対して訂正不能なエラーの有無の検出を行うと共に、該検出の結果を示すエラー情報と、該検出が行われた場所(ここではキャッシュメモリユニット130)を示す場所情報とを付加情報ADI1としてRD出力部140に出力する(S170、S172)。
RD出力部140は、RST受付部132からのリクエストアドレスADRと、キャッシュメモリ134からのリプライデータRD2と、第2の情報付加部138からの付加情報ADI1とをリプライデータRD3として第1のバス120に出力する(S178)。
すなわち、キャッシュヒット時にキャッシュメモリユニット130から出力されるリプライデータRD3には、キャッシュメモリ134からの、リプライデータの本体となるリプライデータRD2と、第2の情報付加部138からの付加情報ADI1が含まれている。この付加情報ADI1は、付加情報ADI0と同一である場合がある。
ここで、付加情報ADI0と付加情報ADI1のフォーマットを説明する。
図6と図7は、上位の1ビットがエラー情報を示し、下位の1ビットで場所情報を示す2ビットで構成される付加情報ADI0と付加情報ADI1の例を夫々示す。
図6に示すように、付加情報ADI0は、上位のエラー情報ビットと下位の場所情報ビットを有し、下位ビットがメインメモリ164を示す「0」である。上位ビットが「1」であり、すなわち付加情報ADI0が「10」であることは、「メインメモリ164においてエラーが検出された」を示し、上位ビットが「0」であり、すなわち付加情報ADI0が「00」であることは、「メインメモリ164においてエラーが検出されていない」を示す。
また、図7に示すように、付加情報ADI1も、2ビットで構成され、「00」、「10」、「01」、「11」は、夫々、「メインメモリ164においてエラーが検出されていない」、「メインメモリ164においてエラーが検出された」、「キャッシュメモリ134においてエラーが検出されていない」、「キャッシュメモリ134においてエラーが検出された」を示す。
なお、プロセッサ110にとって、エラーがある場合の回復処理のために、エラーがある場合にどこでエラーが検出されたかがの情報が必要である一方、エラーが無い場合には、エラー検出がどこで行われたことを知る必要が無い。そのため、例えば、図8と図9のようなフォーマットの付加情報ADI0と付加情報ADI1を用いてもよい。
図8と図9に示す例では、上位ビットによりエラーの有無を示し、下位ビットは、エラーがある場合すなわち上位ビットが「1」である場合においてのみ有効である。
例えば、図8に示すように、「00」である付加情報ADI0は、エラーが無いことを示し、「10」である付加情報ADI0は、「メインメモリ164においてエラーが検出された」を示す。
同様に、図9に示すように、「00」である付加情報ADI1は、エラーが無いことを示し、「10」である付加情報ADI1は、「メインメモリ164においてエラーが検出された」を示し、「11」である付加情報ADI1は、「キャッシュメモリ134においてエラーが検出された」を示す。
勿論、エラーがある場合における該エラーの検出場所が分かれば、付加情報ADI0とADI1のフォーマットは、上述した例に限ることがない。
以上の説明から分かるように、キャッシュミスのときに、メインメモリユニット160からリプライデータRD1がプロセッサ110に転送され、キャッシュヒットのときに、キャッシュメモリユニット130からリプライデータRD3がプロセッサ110に転送される。
リプライデータRD1には、該リプライデータRD1に含まれるリプライデータRD0がメインメモリユニット160においてエラーが検出された否かを示す付加情報ADI0が付加されている。リプライデータRD3には、該リプライデータRD3に含まれるリプライデータRD0におけるエラーの有無、及び、エラーがある場合には、該エラーがメインメモリユニット160とキャッシュメモリユニット130のいずれにおいて検出されたかを示す付加情報ADI1が付加されている。
従って、プロセッサ110は、リプライデータRD1またはリプライデータRD3を受信した際に、該データに含まれる付加情報から、該データに含まれるデータ本体にエラーの有無を知ることができると共に、上記エラーがある場合には該エラーがどこで生じたかを知ることができるため、エラーが生じた場所に応じた回復処理を行うことができる。
図10は、図2におけるステップS110の処理、つまり、プロセッサ110がリプライデータ(RD1またはRD3)を受信した際の処理の例を示すフローチャートである。
リプライデータ(キャッシュミス時におけるメインメモリユニット160からのリプライデータRD1、またはキャッシュヒット時におけるキャッシュメモリユニット130からのリプライデータRD3)を受信すると、メモリリクエスト制御部116は、該リプライデータを回復処理部114に出力する。分かりやすいように、メモリリクエスト制御部116から回復処理部114に出力されるリプライデータを「RD4」で表記する。該リプライデータRD4は、リプライデータRD1とリプライデータRD3のいずれか一方である。
回復処理部114は、メモリリクエスト制御部116からのリプライデータRD4に含まれる付加情報(付加情報ADI0または付加情報ADI1)を参照し、エラーの有無を確認する(S112)。
リプライデータRD4に含まれる付加情報が、エラーが検出されていないことを示す場合に(S112:No)、回復処理部114は、メモリリクエスト制御部116にリプライデータRD4をそのまま返送する(S114)。
メモリリクエスト制御部116は、回復処理部114から返送されたリプライデータRD4をSW命令実行部112に出力し、SW命令実行部112は、メモリリクエストRSTを出した際に中断していたSW命令処理を再開し、リプライデータRD4に含まれるデータ本体(リプライデータRD0またはリプライデータRD2)を用いた処理を実行する(S116)。
なお、この場合、メモリリクエスト制御部116は、回復処理部114から返送されたリプライデータRD4から付加情報を取り除き、リプライデータRD4に含まれるリクエストアドレスADRと、データ本体(リプライデータRD0またはリプライデータRD2)とをSW命令実行部112に出力するようにしてもよい。
一方、ステップS112において、リプライデータRD4に含まれる付加情報が、メインメモリユニット160とキャッシュメモリユニット130のいずれかにおいて訂正不能なエラーが検出されたことを示す場合に(S112:Yes)、回復処理部114は、SW命令実行部112に割込要求IRを出力し、中断していたSW命令処理に、ステップS122からの回復処理を割り込ませる(S120、S122〜)。なお、SW命令実行部112は、回復処理部114からの命令を実行することにより回復処理を実現するが、説明が冗長にならないように、以下の説明において、SW命令実行部112が回復処理を行うように説明を進める。
SW命令実行部112は、回復処理をするのに当たって、まず、リプライデータRD4に含まれる付加情報が、キャッシュメモリユニット130から出力される際にエラーが検出されたことを示すか否かを確認する(S122)。
リプライデータRD4が、キャッシュヒット時にキャッシュメモリユニット130から出力されるリプライデータRD3であり、かつ、該リプライデータRD3に含まれるデータ本体(リプライデータRD2)がキャッシュメモリ134から出力される際に訂正不能なエラーが検出された場合においてのみ、ステップS122の確認結果が「Yes」となる。この場合、SW命令実行部112は、キャッシュメモリ134においてリプライデータRD2に対応するブロックを無効化する(S124)と共に、中断していたSW命令処理を再開する(S116)。
この場合、キャッシュメモリ134の当該ブロックが無効にされたため、SW命令実行部112によりSW命令処理を再開すると、キャッシュミスとなり、プロセッサ110のメモリリクエスト制御部116からメインメモリ164に対してメモリリクエストRSTが発行される。そのため、キャッシュメモリ134に格納された、エラーのあるリプライデータRD2が使用されず、メインメモリ164から正しいデータを取り出すことが可能となる。
一方、リプライデータRD4がキャッシュミス時にメインメモリユニット160から出力されるリプライデータRD1であり、かつ、該リプライデータRD1がメインメモリ164から出力される際にエラーが検出された場合、または、リプライデータRD4がキャッシュヒット時にキャッシュメモリ134から出力されるリプライデータRD2であり、かつ、該リプライデータRD2のブロックロード時にメインメモリユニット160においてエラーが検出された場合、ステップS122の確認結果が「No」となる。この場合、中断していたSW命令処理を再開してメインメモリ164にメモリリクエストRSTを出しても正しいデータを取り出すことができず、回復できない可能性が高い。
そのため、この場合(S122:No)において、SW命令実行部112は、OS(Operating System)に障害通知を行い、OSに回復処理を委ねる(S126)。こうすることにより、OSは、例えば、メインメモリ164の当該ページを無効化するなどにより、回復できる可能性がある。
このように、本発明にかかる技術によれば、メモリリクエストRSTに応じてプロセッサに返送されたリプライデータには、エラーの有無を示すエラー情報と、エラーがある場合には該エラーがメインメモリとキャッシュメモリのいずれで検出されたかを示す場所情報が付加されているので、プロセッサは、エラーがある場合に場所情報に基づいて、エラーが生じた場所に応じた回復処理を行うことができる。その結果、システムの効率を図ることができる。
また、付加情報のデータ量は、例えば図6〜図9に示すように2ビットしかなく、キャッシュメモリにおいて付加情報を格納する記憶部の必要容量も小さいため、回路規模の膨大化を防ぐことができる。
本願発明者は、さらに、鋭意研究模索し、キャッシュメモリのデータ更新方式がライトバックである場合に、キャッシュメモリにおいてエラーが検出された場合にリプライデータに付加する情報の中に、ブロックのステータス情報を含める技術を想到した。
これに関連して、まず、キャッシュメモリのデータ更新(Purging)の方式を説明する。
キャッシュメモリのデータ更新について、ライトスルー方式とライトバック方式が知られている。
ライトスルー方式のキャッシュメモリの場合、プロセッサが該キャッシュメモリに書き込みをしたデータが、該キャッシュメモリにストアされると共に、下位レベルのメモリ(メインメモリまたは下位レベルのキャッシュメモリ)にも書き戻される。
ライトバック方式のキャッシュメモリの場合、プロセッサが該キャッシュメモリに書き込みをしたデータが、該キャッシュメモリにストアされるものの、条件が整わない限り、下位レベルのメモリに書き戻されない。なお、下位レベルへの書き戻しの条件は、システムによって種々ある。
キャッシュメモリに格納されているデータが、下位レベルのメモリに書き戻されている場合、該データを格納するブロックのステータスは「クリーン」と呼ばれる。一方、キャッシュメモリに格納されているデータが、下位レベルのメモリに書き戻されていない場合、該データを格納するブロックのステータスは「ダーティ」と呼ばれる。
図1に示す情報処理装置100におけるキャッシュメモリ134がライトスルー方式のキャッシュメモリである場合について、図10のフローチャートが示す処理を考える。
この場合、キャッシュメモリ134に対してプロセッサ110が書き込みを行うと、書き込まれたデータがメインメモリ164にも書き戻される。そのため、キャッシュヒットした場合にキャッシュメモリ134から出力されたリプライデータRD2にエラーがあれば、メインメモリ164における、リプライデータRD2に対応するデータもエラーとなっているはずである。
ところで、リプライデータRD2におけるエラーがキャッシュメモリ134の当該ブロックの物理的障害などによるものである場合には、キャッシュメモリ134におけるリプライデータRD2に訂正不能なエラーが検出されたとしても、メインメモリ164における、リプライデータRD2に対応するデータが正しい可能性もある。
従って、リプライデータRD2がブロックロードによりキャッシュメモリ134に格納された後にプロセッサ110によりデータ更新(Purging)がなされたものである場合においても、ステップS122の確認結果が「Yes」になった際に、当該ブロックを無効にすることにより、メインメモリ164から正しいデータを取り出せる可能性がある。
キャッシュメモリ134がライトバック方式のものである場合には、キャッシュメモリ134に対してプロセッサ110が書き込みを行うと、書き込まれたデータが必ずしもメインメモリ164にも書き戻されるとは限らないが、ステータスが「ダーティ」であるブロックからのリプライデータRD2にエラーが検出された場合(図10におけるステップS120:Yes)、SW命令実行部112が当該ブロックを無効にするために例えばインバリッド指示をすると、該ブロックのデータは下位レベルのメモリ(ここではキャッシュメモリ134)に書き戻されてしまう。そのため、SW命令処理を再開してキャッシュメモリ134に対してメモリリードを行っても、回復できる可能性がほぼ無い。
本願発明者は、上述した考察に基づき、ライトバック方式のキャッシュメモリにおいてリプライデータのエラーが検出された場合に、該リプライデータの付加情報に、「ダーティ」か「クリーン」かのステータス情報を加える技術を確立した。図1に示す情報処理装置100におけるキャッシュメモリ134がライトバック方式のものであるとして説明する。
この場合においても、キャッシュメモリユニット130の第2の情報付加部138は、キャッシュヒット時にキャッシュメモリ134から出力されたリプライデータRD2について、付加情報記憶部136にそれに対応する付加情報ADI0が無い、または付加情報ADI0が「エラーが無い」を示す場合に、リプライデータRD2に対してエラー検出を行う。但し、エラーが検出された場合には、付加情報ADI1に、リプライデータRD2のブロックのステータスを示す情報を加える。
図11と図12は、キャッシュメモリ134がライトバック方式のものである場合における、付加情報ADI0と付加情報ADI1の例を示す。
図示のように、付加情報ADI0と付加情報ADI1は、エラー情報を示すビットと、場所情報を示すビットとに加え、さらに、ステータスを示す上位ビットを含む。該上位ビットは、エラー情報ビットと場所情報ビットが「11」である場合においてのみ有効である。
例えば、図11に示すように、付加情報ADI0は、下位の2ビットが「00」である場合には「メインメモリ164においてエラーが検出されていない」を示し、下位の2ビットが「10」である場合には、「メインメモリ164においてエラーが検出された」を示す。付加情報ADI0の上位の1ビットは、無効ビットである。
また、図12に示すように、付加情報ADI1は、下位の2ビットが「00」である場合には「メインメモリ164においてエラーが検出されていない」を示し、下位の2ビットが「10」である場合には、「メインメモリ164においてエラーが検出された」を示す。下位の2ビットが「00」または「10」である場合には、付加情報ADI1も、上位の1ビットが無効ビットである。
また、付加情報ADI1は、下位の2ビットが「01」である場合には「「キャッシュメモリ134においてエラーが検出されていない」を示す。この場合において、付加情報ADI1の上位の1ビットが無効ビットである。
下位の2ビットが「11」であり、すなわちキャッシュメモリ134においてエラーが検出された場合には、付加情報ADI1の上位の1ビットが有効ビットとなる。「011」である付加情報ADI1は、「キャッシュメモリ134においてエラーが検出され、当該ブロックがクリーンである」を示し、「111」である付加情報ADI1は、「キャッシュメモリ134においてエラーが検出され、当該ブロックがダーティである」を示す。
図13と図14は、キャッシュメモリ134がライトバック方式のものである場合における、付加情報ADI0と付加情報ADI1の別の例を示す。
図13と図14に示す例においても、付加情報ADI0と付加情報ADI1は、3ビットを有し、上位からの順で各ビットが「ステータス」、「エラー情報」、」場所情報」を夫々示す。また、場所情報を示す下位ビットは、エラー情報を示すビットが「1」である場合においてのみ有効であり、ステータス情報を示す上位ビットは、下位の2ビットが「11」である場合においてのみ有効である。
例えば、「000」である付加情報ADI0と付加情報ADI1は、エラーが無いことを示す。この場合、場所情報とステータスを示すビットが無効ビットである。
また、「010」である付加情報ADI0と付加情報ADI1は、「メインメモリ164においてエラーが検出された」を示す。この場合、ステータスを示すビットが無効ビットである。
また、図14に示すように、「011」である付加情報ADI1は、「キャッシュメモリ134においてエラーが検出され、当該ブロックがクリーンである」を示し、「111」である付加情報ADI1は、「キャッシュメモリ134においてエラーが検出され、当該ブロックがダーティである」を示す。
勿論、エラーがある場合における該エラーの検出場所が分かり、かつ、該エラーがキャッシュメモリにおいて検出された場合に当該ブロックのステータスが分かれば、付加情報ADI0とADI1は、図11〜図14に示す例に限ることがない。
プロセッサ110による、上述した付加情報ADI0と付加情報ADI1が含まれるリプライデータを受信した後の処理について、図15のフローチャートを参照して説明する。なお、この処理は、図2におけるステップS110の処理である。
図15において、図10におけるステップと同様の処理については、同様のステップ番号を付与している。図15と図10を比較すると分かるように、図15は、ステップS122とステップS124との間にステップS130が追加されている。
すなわち、リプライデータRD4が、キャッシュヒット時にキャッシュメモリユニット130から出力されるリプライデータRD3であり、かつ、該リプライデータRD3に含まれるデータ本体(リプライデータRD2)がキャッシュメモリ134から出力される際に訂正不能なエラーが検出された場合(S122:Yes)、SW命令実行部112は、リプライデータRD4に含まれる付加情報(ここでは付加情報ADI1となる)に基づいて、当該ブロックのステータスが「ダーティ」と「クリーン」のいずれかを確認する(S130)。
該ブロックのステータスが「ダーティ」である場合(S130:Yes)、SW命令実行部112は、ステップS126の処理を行い、すなわち、OSに障害通知を行い、OSに回復処理を委ねる。
一方、該ブロックのステータスが「クリーン」である場合には(S130:No)、SW命令実行部112は、当該ブロックを無効化し、中断していたSW命令処理を再開する(S124、S116)。
前述したように、キャッシュヒット時にキャッシュメモリ134からのリプライデータRD2からエラーが検出された場合、該データのブロックのステータスが「ダーティ」であると、該ブロックを無効にしてメインメモリ164に対してメモリリードをしても、正しいデータを得る可能性がほぼ無い。そのため、この場合において、直ちにOSに障害通知をし、OSによりメインメモリ164の当該ページを無効化するなどを行ったほうが、キャッシュメモリ134の当該ブロックを無効化してメインメモリ164に対してメモリリードを行う場合より、迅速な回復が可能である。その結果、システムの効率をより高めることができる。
情報処理装置100において、リプライデータに対してエラー情報などを付加する情報付加部(第2の情報付加部138、第1の情報付加部166)は、キャッシュメモリユニット130とメインメモリユニット160にのみ設けられているが、これら以外に、リプライデータが転送する経路上の少なくとも1箇所にさらに情報付加部を設けてもよい。キャッシュメモリとメインメモリに対して設けられた情報付加部と区別するために、経路上に設けられた情報付加部を、第3の情報付加部という。
第3の情報付加部は、転送されるリプライデータに付加された情報が「エラーがある」を示す場合に、該リプライデータとそれに付加された情報とをそのまま転送する。
一方、転送されるリプライデータに付加された情報が「エラーが無い」を示す場合に、第3の情報付加部は、リプライデータに訂正不能なエラーがあるか否かを検出すると共に、該検出の結果を示すエラー情報と、該検出が行われた場所である前記箇所を示す場所情報とをリプライデータに付加して転送する。
こうすることにより、プロセッサ110が受信したリプライデータにあるエラーは、メインメモリ、キャッシュメモリ、転送経路(例えばバス)のいずれによるものかを判断することができ、より適切に回復処理を行うことができる。
さらに、この場合、転送経路と切り換えて使用可能な転送経路を設け、片方の転送経路によるエラーが生じた場合に、他方の転送経路に切り換えるように回復処理を行うようにすれば、より効率的な回復が可能になる。
これらのことに関連して、図16に示す情報処理装置200を用いて説明する。情報処理装置200に対して、図1に示す情報処理装置100と同様のものについては同様の符号を付与すると共に、詳細な説明を省略する。
情報処理装置200は、プロセッサ210、キャッシュメモリユニット230、メインメモリユニット260を有し、プロセッサ210は、第1のバス120を介してキャッシュメモリユニット230と接続されており、第2のバス252または第2のバス254を介してメインメモリユニット260と接続されている。また、キャッシュメモリユニット230とメインメモリユニット260は、第2のバス252または第2のバス254を介して接続されている。
プロセッサ210は、SW命令実行部112、メモリリクエスト制御部212、回復処理部214、第3の情報付加部216、切換部218を備える。
キャッシュメモリユニット230は、RST受付部132、キャッシュメモリ134、付加情報記憶部136、第2の情報付加部138、RD出力部140、切換部232、第3の情報付加部234を備える。
メインメモリユニット260は、RST受付部162、メインメモリ164、第1の情報付加部166、RD出力部168、切換部262を備える。
情報処理装置200について、情報処理装置100と異なる点を重点的に説明する。
第2のバス252と第2のバス254は、選択的に使用され、それらの切換えは、プロセッサ210からの後述する切換制御信号CTRにより制御される。ここで、第2のバス252が使用されていると仮定して説明を進める。
メインメモリユニット260は、切換部262を備え、RD出力部168がリプライデータRD1を切換部262に出力する点を除き、図1に示す情報処理装置100におけるメインメモリユニット160と同様である。
切換部262は、第2のバス252と第2のバス254の両方に接続されており、プロセッサ210から切換制御信号CTRを受信するまで、現在使用中のバス(ここでは第2のバス252)からメモリリクエストRSTを取り込んでRST受付部162に出力すると共に、RD出力部168からのリプライデータRD1を第2のバス252に出力する。
切換制御信号CTRを受信した場合、切換部262は、バスの切換えを行い、ここでは、使用するバスを第2のバス252から第2のバス254に切り換え、第2のバス254からメモリリクエストRSTを取り込んでRST受付部162に出力すると共に、RD出力部168からのリプライデータRD1を第2のバス254に出力する。
キャッシュメモリユニット230は、切換部232と第3の情報付加部234を備え、メインメモリユニット260からのリプライデータRD1が切換部232を介してキャッシュメモリ134にブロックロードされ、付加情報記憶部136には第3の情報付加部234により付加した付加情報ADI2が出力される点を除き、図1に示す情報処理装置100におけるキャッシュメモリユニット130と同様である。
切換部232は、第2のバス252と第2のバス254の両方に接続されており、プロセッサ210から切換制御信号CTRを受信するまで、現在使用中のバス(ここでは第2のバス252)からリプライデータRD1を取り込んでキャッシュメモリ134と第3の情報付加部234に出力する。
切換制御信号CTRを受信した場合、切換部232は、バスの切換えを行い、ここでは、使用するバスを第2のバス252から第2のバス254に切り換え、第2のバス254からリプライデータRD1を取り込んでキャッシュメモリ134と第3の情報付加部234に出力する。
第3の情報付加部234は、切換部232からのリプライデータRD1に含まれる付加情報ADI0が「エラーがある」を示す場合に、付加情報ADI0をそのまま付加情報ADI2として付加情報記憶部136に出力する。一方、リプライデータRD1に含まれる付加情報ADI0が「エラーが無い」を示す場合に、リプライデータRD1に含まれるデータ本体(リプライデータRD0)にエラーがあるか否かの検出を行い、検出の結果を示すエラー情報と、該検出が行われた場所を示す場所情報とを付加情報ADI2として付加情報記憶部136に出力する。なお、ここでの場所情報は、第2のバス252と第2のバス254のうちの使用中のバスを示すものとなる。
第2の情報付加部138は、情報処理装置100のときに説明したように、キャッシュメモリ134が出力したリプライデータRD2に対応する付加情報(ここでは付加情報ADI2)が付加情報記憶部136に記憶されていない場合、または、付加情報記憶部136に記憶されているが「エラーが無い」を示す場合に、リプライデータRD2にエラーがあるか否かの検出を行うと共に、検出の結果を示すエラー情報と、該検出が行われた場所(キャッシュメモリ134)を示す場所情報とを付加情報ADI1としてRD出力部140に出力する。一方、付加情報記憶部136に記憶されている付加情報ADI2が「エラーがある」を示す場合には、第2の情報付加部138は、付加情報ADI2をそのまま付加情報ADI1としてRD出力部140に出力する。
すなわち、情報処理装置200において、第2の情報付加部138がRD出力部140に出力する付加情報ADI1は、付加情報ADI2と同様である場合がある。また、付加情報ADI2は、付加情報ADI0と同様である場合がある。
プロセッサ210は、第3の情報付加部216と切換部218を備える点と、回復処理部214がSW命令実行部112に行わせる回復処理が、図1に示す情報処理装置100におけるプロセッサ110の回復処理部114がSW命令実行部112に行わせる回復処理とが異なる点と、メモリリクエスト制御部212が切換制御信号CTRを出力可能である点とを除き、プロセッサ110と同様である。
プロセッサ210において、メモリリクエスト制御部212は、メインメモリ164へ出すメモリリクエストRSTを切換部218に出力する。
切換部218は、第2のバス252と第2のバス254の両方に接続されており、メモリリクエスト制御部212から切換制御信号CTRを受信するまで、現在使用中のバス(ここでは第2のバス252)にメモリリクエストRSTを出力すると共に、該バスからリプライデータRD1を取り込んで第3の情報付加部216に出力する。
メモリリクエスト制御部212から切換制御信号CTRを受信した場合、切換部218は、バスの切換えを行い、ここでは、使用するバスを第2のバス252から第2のバス254に切り換え、第2のバス254にメモリリクエストRSTを出力すると共に、該バスからリプライデータRD1を取り込んで第3の情報付加部216に出力する。
第3の情報付加部216は、キャッシュヒット時にキャッシュメモリユニット230からリプライデータRD3が入力され、キャッシュミス時に切換部218からリプライデータRD1が入力される。第3の情報付加部216は、入力されたリプライデータに含まれるデータ本体(リプライデータRD0またはリプライデータRD2)に対して付加情報ADI3を付加してメモリリクエスト制御部212に出力する。第3の情報付加部216からメモリリクエスト制御部212に出力されるデータを、リプライデータRD5と表記する。
具体的には、第3の情報付加部216は、リプライデータRD3またはリプライデータRD1に含まれる付加情報(ADI0またはADI1)が「エラーがある」を示す場合に、該付加情報をそのまま付加情報ADI3として付加する。一方、リプライデータRD3またはリプライデータRD1に含まれる付加情報が「エラーが無い」を示す場合に、該リプライデータに含まれるデータ本体(リプライデータRD0またはリプライデータRD2)にエラーがあるか否かの検出を行い、検出の結果を示すエラー情報と、該検出が行われた場所を示す場所情報とを付加情報ADI3として付加する。
なお、ここで、エラーが検出された場合に、場所情報は、第2のバス252と第2のバス254のうちの使用中のバスと、第1のバス120とのいずれであるかを示す必要がある。そのため、エラーが検出された場合に、第3の情報付加部216は、切換部218からのリプライデータRD1に含まれるデータ本体に対しては、第2のバス252と第2のバス254のうちの使用中のバスを示す情報を場所情報として付加し、キャッシュメモリユニット230からのリプライデータRD3に含まれるデータ本体に対しては、第1のバス120を示す情報を場所情報として付加する。
このように、情報処理装置200において、メモリリクエスト制御部212に返送されるリプライデータ(リプライデータRD5)には、エラーがあるか否かを示すエラー情報と、エラーがある場合に該エラーがどこで検出されたかを示す場所情報とが含まれている。また、場所情報は、メインメモリ164、キャッシュメモリ134、第2のバス252と第2のバス254のうちの使用中のバス、第1のバス120のいずれか1つを示す。
図17は、情報処理装置200において、リプライデータに含まれる付加情報(付加情報ADI0、付加情報ADI1、付加情報ADI2、付加情報ADI3)のフォーマットの一例を示す。なお、これは、キャッシュメモリ134のデータ更新方式がライトバックである場合の例であり、この例において、エラーがキャッシュメモリユニット230において検出された場合に、当該リプライデータに対応するブロックのステータス情報も付加情報に含まれる。
図示のように、情報処理装置200において、付加情報は、4ビットを有し、上位の1ビットは、ステータスを示すビットであり、下位の3ビットは、エラー情報と場所情報を示すビットである。なお、上位の1ビットは、キャッシュメモリ134においてエラーが検出された場合(付加情報の下位3ビットが「011」である場合)においてのみ有効である。勿論、付加情報のフォーマットは、図17に示す例に限られることがない。
付加情報「0000」は、エラーが無いことを示す。
メインメモリユニット260から出力されるリプライデータRD1に含まれる付加情報ADI0は、「0000」と「0001」のいずれか一方であり、「0001」は、メインメモリ164からのリプライデータRD0にエラーが検出されたことを示す。
第3の情報付加部234が出力する付加情報ADI2は、「0000」、「0001」、「0010」のいずれか一方である。「0010」は、第2のバス252と第2のバス254のうちの使用中のバスにおいてエラーが検出されたことを示す。
付加情報ADI1は、「0000」、「0001」、「0010」、「0011」、「1011」のいずれか一方である。「0011」は、キャッシュメモリ134からのリプライデータRD2においてエラーが検出され、かつリプライデータRD2に対応するブロックのステータスが「クリーン」であることを示す。一方、「1011」は、キャッシュメモリ134からのリプライデータRD2においてエラーが検出され、かつリプライデータRD2に対応するブロックのステータスが「ダーティ」であることを示す。
付加情報ADI3は、上述した付加情報ADI0、ADI1、ADI2のとりうる各値以外に、「0100」になる可能性がある。「0100」である付加情報ADI3は、第1のバス120においてエラーが検出されたことを示す。
ここで、プロセッサ210における第3の情報付加部216が、キャッシュメモリユニット230またはメインメモリユニット260からのリプライデータ(RD1またはRD3)を受信してメモリリクエスト制御部212にリプライデータRD5を出力した後の処理を説明する。この処理は、図15が示す、情報処理装置100のプロセッサ110がリプライデータを受信した際の処理(ステップS110の処理)に対応し、比較しやすいように、該処理を、図2におけるステップS110の処理として説明する。
図17は、第3の情報付加部216がリプライデータRD3をメモリリクエスト制御部212に出力した後にプロセッサ210にて行われる処理の一例を示すフローチャートである。
メモリリクエスト制御部212は、第3の情報付加部216からリプライデータRD5を受信すると、該リプライデータRD5を回復処理部214に出力する。回復処理部214は、メモリリクエスト制御部212からのリプライデータRD5に含まれる付加情報ADI3を参照して、エラーの有無を確認する(S210)。
付加情報ADI3が「エラーが無い」を示す場合、すなわち付加情報ADI3が「0000」である場合(S210:No)に、回復処理部214は、メモリリクエスト制御部212にリプライデータRD5をそのまま返送する(S214)。
メモリリクエスト制御部212は、回復処理部214から返送されたリプライデータRD5をSW命令実行部112に出力し、SW命令実行部112は、メモリリクエストRSTを出力した際に中断していたSW命令処理を再開し、リプライデータRD5に含まれるデータ本体(リプライデータRD0またはリプライデータRD2)を用いて処理を実行する(S216)。
一方、ステップ210において、リプライデータRD5に含まれる付加情報ADI3が「エラーが有る」を示す場合、すなわち付加情報ADI3が「0000」以外である場合(S212:Yes)に、回復処理部214は、SW命令実行部112に割込要求IRを出力し、中断していたSW命令処理に、ステップS222からの回復処理を割り込ませる(S220、S222〜)。
SW命令実行部112は、回復処理部214からの命令を実行することにより回復処理を行う。具体的には、SW命令実行部112は、まず、付加情報ADI3が「第1のバス120においてエラーが検出された」を示す場合、すなわち付加情報ADI3が「0100」である場合(S222:Yes)、中断していたSW命令処理を再開する(S216)。これにより、プロセッサ210がメモリリードをリトライする。
付加情報ADI3が「第2のバス252と第2のバス254のうちの使用中のバスにおいてエラーが検出された」を示す場合、すなわち付加情報ADI3が「0010」である場合(S222:No、S224:Yes)、SW命令実行部112は、メモリリクエスト制御部212に切換制御信号CTRを発行させる(S226)。これにより、切換制御信号CTRがプロセッサ210における切換部218、キャッシュメモリユニット230における切換部232、メインメモリユニット260における切換部262に出力され、これらの切換部は、第2のバス252と第2のバス254のうちの使用中の一方のバスを他方に切り換える。
そして、SW命令実行部112は、中断していたSW命令処理を再開し、メモリリードをリトライする(S216)。エラーの原因となるバスは、別のバスに切り替わったので、リトライしたメモリリードにより、メインメモリ164から正しいデータを取得することができる。
付加情報ADI3が「キャッシュメモリ134においてエラーが検出された」を示す場合、すなわち付加情報ADI3の下位3ビットが「011」である場合(S222:No、S224:No、S230:Yes)に、SW命令実行部112は、さらに付加情報ADI3の上位1ビットが示すステータス情報を確認する(S234)。
ステータス情報が「クリーン」を示す場合、すなわち付加情報ADI3の上位1ビットが「0」である場合、SW命令実行部112は、当該ブロックを無効化すると共に、中断していたSW命令処理を再開する(S234:No、S236、S216)。
一方、ステータス情報が「ダーティ」を示す場合、すなわち付加情報ADI3の上位1ビットが「1」である場合、SW命令実行部112は、OSに障害通知を行い、OSに回復処理を委ねる(S234:Yes、S240)。
また、付加情報ADI3が「メインメモリ164においてエラーが検出された」を示す場合、すなわち付加情報ADI3が「0001」である場合に、SW命令実行部112は、OSに障害通知を行い、OSに回復処理を委ねる(S230:No、S240)。
このように、情報処理装置200は、メインメモリユニット160とキャッシュメモリユニット230に夫々設けられた第1の情報付加部166と第2の情報付加部138以外に、第2のバス252と第2のバス254上を転送されるリプライデータに対してエラーの検出と情報の付加を行う第3の情報付加部234と第3の情報付加部216を備える。そのため、メインメモリ164とキャッシュメモリ134の索引障害以外に、バスの障害も検出することができ、より適切な回復処理が可能になる。
また、選択的に使用される第2のバス252と第2のバス254を設け、エラー情報に応じて切り換えるようにしているので、第2のバスの障害から迅速に回復することができる。
なお、分かりやすいように、情報処理装置200に対して、メインメモリ164がリプライデータを出力するバス(第2のバス)を冗長に設けているが、キャッシュメモリ134がリプライデータを出力するバス(第1のバス120)に対しても代替可能な別のバスを設けるようにしてもよい。
以上の説明を踏まえて、本発明の具体的な実施の形態を説明する。
図19は、本発明の実施の形態にかかるマルチプロセッサシステム300を示す。マルチプロセッサシステム300は、複数(図示の例では3つ)のプロセッサユニット302と、2次キャッシュメモリユニット350と、メインメモリユニット370を備える。各プロセッサユニット302は、1次キャッシュメモリユニット330が内蔵されており、バス340を介して2次キャッシュメモリユニット350と接続され、2次キャッシュメモリユニット350を介してメインメモリユニット370と接続されている。2次キャッシュメモリユニット350は、バス360を介してメインメモリユニット370と接続されている。
1次キャッシュメモリユニット330に備えられるキャッシュメモリ(図示しない1次キャッシュメモリ)のデータ更新方式は、ライトスルーである。2次キャッシュメモリユニット350に備えられるキャッシュメモリ(図示しない2次キャッシュメモリ)は、データ更新方式がライトバックであり、キャッシュ・コヒーレンシのプロトコルとしてはライン・インバリデート方式が用いられている。
図20は、マルチプロセッサシステム300におけるプロセッサユニット302、及びマルチプロセッサシステム300の各機能ブロック間のデータの受渡しを詳細に示す図である。分かりやすいように、プロセッサユニット302について、1つのみを示すと共に、プロセッサユニット302から出すメモリリクエストについては省略する。
図示のように、プロセッサユニット302は、プロセッサ310と1次キャッシュメモリユニット330を備え、プロセッサ310は、SW命令実行部312、回復処理部314、メモリリクエスト制御部316、第3の情報付加部320を有する。
図21は、プロセッサ302がメモリリードに際しての動作の流れを示すフローチャートである。プロセッサユニット302のSW命令実行部312は、SW命令を実行している中で、メモリデータをリードする必要があるときに、メモリリクエスト制御部316にリクエスト要求RSTRを出力する。これに伴って、SW命令実行部312は、SW命令の実行を一時中断する。メモリリクエスト制御部316は、SW命令実行部312からのリクエスト要求RSTRに応じて、メモリリクエストを1次キャッシュメモリユニット330に出力する(S300)。キャッシュヒットした場合(S302:Yes)、メモリリクエストに応じて1次キャッシュメモリユニット330からリプライデータRD16がプロセッサ310に出力され、プロセッサ310は、リプライデータ受信後の処理を行う(S310)。
一方、ステップS302において、1次キャッシュメモリでキャッシュミスした場合(S302:No)、メモリリクエスト制御部316は、2次キャッシュメモリへ発行するメモリリクエストをバス340に出力する(S304)。
2次キャッシュメモリでキャッシュヒットした場合(S306:Yes)、メモリリクエストに応じて2次キャッシュメモリユニット350からリプライデータRD13がバス340を介してプロセッサ310に転送され、プロセッサ310は、リプライデータ受信後の処理を行う(S310)。
なお、この場合、2次キャッシュメモリユニット350からプロセッサ310へ転送されるリプライデータRD13は、1次キャッシュメモリユニット330にも転送され、1次キャッシュメモリユニット330は、このリプライデータRD13ブロックロードを行う。
一方、ステップS306において、2次キャッシュメモリでキャッシュミスした場合(S306:No)、メモリリクエスト制御部316は、メインメモリへ発行するメモリリクエストをバス360に出力する(S308)。このメモリリクエストに応じてメインメモリユニット370からリプライデータRD11がバス360を介してプロセッサ310に転送され、プロセッサ310は、リプライデータ受信後の処理を行う(S310)。
なお、この場合、メインメモリユニット370からプロセッサ310へ転送されるリプライデータRD11は、2次キャッシュメモリユニット350にも転送され、2次キャッシュメモリユニット350は、このリプライデータRD11でブロックロードを行う。
本実施の形態のマルチプロセッサシステム300において、メインメモリユニット370は、図1に示す情報処理装置100におけるメインメモリユニット160と同様に動作する。具体的には、メインメモリユニット370は、メモリリクエストに応じてプロセッサ310に転送するリプライデータの本体(リプライデータRD10という)を出力する際に、エラーの検出を行うと共に、検出の結果を示すエラー情報と、場所情報とからなる付加情報ADI11を付加する。
2次キャッシュメモリユニット350は、キャッシュミス時に、リプライデータRD11でブロックロードする際に、リプライデータRD11に含まれるデータ本体(リプライデータRD10)を図示しない2次キャッシュメモリの該当するブロックに格納すると共に、リプライデータRD11に含まれる付加情報ADI10が「エラーがある」と「エラーが無い」のいずれを示すかを確認する。
付加情報ADI10が「エラーがある」を示す場合に、2次キャッシュメモリユニット350は、該付加情報ADI10をそのまま記憶しておく。一方、付加情報付加情報ADI10が「エラーが無い」を示す場合に、2次キャッシュメモリユニット350は、該リプライデータRD10に対してエラーの有無の検出を行うと共に、検出の結果を示すエラー情報と場所情報とからなる付加情報を記憶しておく。この場合、記憶された付加情報は、「バス360にてエラーが検出された否か」を示すことになる。
キャッシュヒット時に、2次キャッシュメモリユニット350は、図示しない2次キャッシュメモリからリプライデータ(リプライデータRD12という)を出力する際に、該リプライデータRD12に対応する付加情報が記憶されており、かつ、該付加情報が「メインメモリにおいてエラーが検出された」または「バス360においてエラーが検出された」を示す場合に、記憶していた付加情報をそのまま付加情報ADI11として付加する。一方、付加情報が無い、または、付加情報が「エラーが無い」を示す場合には、2次キャッシュメモリユニット350は、リプライデータRD12に対してエラーの有無の検出を行うと共に、検出の結果を示すエラー情報と、場所情報と、当該ブロックのステータス情報とを付加情報ADI11として付加する。
1次キャッシュメモリユニット330は、データ更新方式がライトスルーであるため、キャッシュヒット時にリプライデータ15を出力する際にエラーが検出された場合に、ステータス情報を付加しない点を除き、2次キャッシュメモリユニット350と同様である。
1次キャッシュメモリのキャッシュミス時に2次キャッシュメモリユニット350からプロセッサ310に出力されたリプライデータRD13、または1次キャッシュメモリと2次キャッシュメモリが共にキャッシュミス時にメインメモリユニット370からプロセッサ310に出力されたリプライデータRD11は、まず、プロセッサ310の第3の情報付加部320に入力される。
第3の情報付加部320は、入力されたリプライデータに含まれる付加情報が「エラーがある」を示す場合に、該付加情報をそのまま付加情報ADI12としてデータ本体に付加してメモリリクエスト制御部316に出力する。なお、データ本体は、リプライデータRD10とリプライデータRD12のいずれか一方である。
一方、入力されたリプライデータに含まれる付加情報が「エラーが無い」を示す場合に、第3の情報付加部320は、該リプライデータに含まれるデータ本体に対してエラーの有無の検出を行い、検出の結果を示すエラー情報と、場所情報とを付加情報ADI12としてデータ本体に付加してメモリリクエスト制御部316に出力する。この場合の付加情報ADI12は、「バス340にてエラーが検出された否か」または「2次キャッシュメモリユニット350にてエラーが検出されたか否か」を示すことになる。
図3は、キャッシュミスの場合(図2のステップS102:No)に、メインメモリユニット160がプロセッサ110からメモリリクエストRSTを受信した際の動作の流れを示すフローチャートである。
ここで、本実施の形態のマルチプロセッサシステム300において使用される付加情報のフォーマットを説明する。付加情報(ADI10、ADI11、ADI12、ADI13)は、「エラーが検出されたか否か」と、エラーが検出された場合には、「メインメモリ、2次キャッシュメモリ、1次キャッシュメモリ、バス360、バス340のいずれで検出されたか」と、2次キャッシュメモリで検出された場合には、「当該ブロックのステータスがダーティであるかクリーンであるか」とを示す。図22は、それらのフォーマットの例を示す。
図22に示す例では、付加情報は、5ビットを有し、上位の1ビット目がステータスを示すビットであり、上位の2ビット目がエラー情報を示すビットであり、下位の3ビットが場所情報を示すビットである。なお、上位の1ビットは、2次キャッシュメモリにおいてエラーが検出された場合(付加情報の下位4ビットが「1010」である場合)においてのみ有効である。勿論、付加情報のフォーマットは、図22に示す例に限られることがない。
具体的には、付加情報「00000」は、エラーが無いことを示す。
付加情報「01000」は、1次キャッシュメモリ索引でエラーが検出されたことを示す。
付加情報「01001」は、バス340でエラーが検出されたことを示す。
付加情報「01010」は、2次キャッシュメモリでエラーが検出され、当該ブロックのステータスが「クリーン」であることを示す。
付加情報「11010」は、2次キャッシュメモリでエラーが検出され、当該ブロックのステータスが「ダーティ」であることを示す。
付加情報「01011」は、バス360でエラーが検出されたことを示す。
付加情報「01100」は、メインメモリでエラーが検出されたことを示す。
プロセッサ310が受信するリプライデータには、データ本体以外に、上述したいずれかの付加情報が含まれており、プロセッサ310は、付加情報に基づいて、図21におけるステップS310の「リプライデータ受信後処理」を行う。これについて、図23のフローチャートを参照して説明する。
メモリリクエスト制御部316は、第3の情報付加部320からリプライデータRD14、または1次キャッシュメモリユニット330からリプライデータRD16を受信すると、当該リプライデータを回復処理部314に出力する。回復処理部314は、メモリリクエスト制御部316からのリプライデータ(リプライデータRD17)に含まれる付加情報(付加情報ADI12または付加情報ADI13)を参照して、エラーの有無を確認する(S312)。
付加情報が「エラーが無い」を示す場合、すなわち付加情報が「00000」である場合(S312:No)に、回復処理部314は、後述するリトライ回数nを「0」にリセットすると共に、メモリリクエスト制御部316にリプライデータRD17をそのまま返送する(S314、S316)。なお、回復処理部314には、図示しない、リトライ回数nを格納するレジスタが設けられている。
メモリリクエスト制御部316は、回復処理部314から返送されたリプライデータRD17をSW命令実行部312に出力し、SW命令実行部312は、メモリリクエストを出力した際に中断していたSW命令処理を再開し、リプライデータRD17に含まれるデータ本体を用いて処理を実行する(S318)。
一方、ステップ312において、リプライデータRD17に含まれる付加情報が「エラーが有る」を示す場合、すなわち付加情報の上位2ビット目が「1」である場合(S312:Yes)に、回復処理部314は、SW命令実行部312に割込要求IRを出力し、中断していたSW命令処理に、ステップS330からの回復処理を割り込ませる(S320、S330〜)。
回復処理に当たり、回復処理部314は、まず、リトライ回数nが所定の閾値に達したか否かを確認する(S330)。この閾値は、予め設定された1以上の整数である。
本実施の形態において、プロセッサ310は、受信したリプライデータにエラーがあるときに、該エラーがソフトウェアエラーであることに備え、どこでエラーが生じたかを確認する前に、メモリリクエストを再発行してメモリリードをリトライする。リトライ回数nは、このリトライの回数の上限値である。
図23に示すように、回復処理部314は、リトライ回数nが閾値より小さいときに、nを1つインクリメントし(S330:No、S332)、SW命令実行部312にSW命令処理を再開させる(S334)。これにより、SW命令実行部312からリクエスト要求RSTRが再度出力され、メモリリクエスト制御部316からメモリリクエストが再度発行される。
リトライの回数がリトライ回数nに達してもリプライデータにエラーがある場合に(S330:Yes)、SW命令実行部312は、リプライデータRD17に含まれる付加情報を参照して、エラーがどこで検出されたかを確認する。付加情報が「バス340でエラーが検出された」を示す場合(すなわち付加情報が「01001」である場合)(S340:Yes)、または、付加情報が「バス360でエラーが検出された」を示す場合(すなわち付加情報が「01011」である場合)(S340:No、S342:Yes)、SW命令実行部312は、リトライをしても回復できる可能性が少ないので、SW命令実行部312は、OSに障害通知を行い、OSに回復処理を委ねる(S370)。これにより、OSによる回復処理が行われる(S380)。
付加情報が「1次キャッシュ索引でエラーが検出された」を示す場合(すなわち付加情報が「01000」である場合)(S340:No、S342:No、S350:Yes)、SW命令実行部312は、1次キャッシュメモリユニット330に備えられた1次キャッシュメモリの当該ブロックを無効化した上で、中断していたSW命令処理を再開する(S352、S334)。
1次キャッシュメモリのデータ更新方式がライトスルーであるため、1次キャッシュメモリの当該ブロックを無効化するだけでキャッシュのコヒーレンシを維持できる。また、1次キャッシュメモリの当該ブロックを無効化してSW命令処理を再開することにより、1次キャッシュメモリでキャッシュミスとなり、2次キャッシュメモリユニット350に備えられる2次キャッシュメモリに対してメモリリクエストが出され、2次キャッシュメモリから正しいデータを取り出すことができる。
リプライデータRD17に含まれる付加情報が「2次キャッシュメモリ索引でエラーが検出され、当該ブロックのステータスがクリーンである」を示す場合(すなわち付加情報が「01010」である場合)(S340:No、S342:No、S350:No、S360:Yes、S362:No)、SW命令実行部312は、2次キャッシュメモリに対してインバリッド指示を発行して当該ブロックを無効化した上で、中断していたSW命令処理を再開する(S364、S334)。
2次キャッシュメモリのデータ更新方式がライトバックであるため、当該ブロックのステータスが「クリーン」である場合には、該ブロックのデータと、下位レベルのメモリ(ここではメインメモリ)との対応するデータとが一致する。また、1次キャッシュメモリのデータ更新方式がライトスルーであるため、2次キャッシュメモリの当該ブロックを無効すると、1次キャッシュメモリの対応するブロックも無効化される。そのため、2次キャッシュメモリの当該ブロックを無効化してSW命令処理を再開すると、1次キャッシュメモリと2次キャッシュメモリのいずれもキャッシュミスとなるため、メインメモリにメモリリクエストが発行され、メインメモリから正しいデータを読み出すことが可能である。
リプライデータRD17に含まれる付加情報が「2次キャッシュメモリ索引でエラーが検出され、当該ブロックのステータスがダーティである」を示す場合(すなわち付加情報が「11010」である場合)(S340:No、S342:No、S350:No、S360:Yes、S362:Yes)、SW命令実行部312が2次キャッシュメモリにインバリッド指示を発行して当該ブロックを無効にすると、当該ブロックのデータは、2次キャッシュメモリから追い出されるが、メインメモリに書き戻されてしまう。この場合、エラーのあるデータはメインメモリに反映されてしまうため、SW命令処理を再開しても回復することができなくなってしまう。
そのため、リプライデータRD17に含まれる付加情報が「2次キャッシュメモリ索引でエラーが検出され、当該ブロックのステータスがダーティである」を示す場合(S340:No、S342:No、S350:No、S360:Yes、S362:Yes)、SW命令実行部312は、OSに障害通知を行い、OSに回復処理を委ねる(S370、S380)。
この場合、OSに処理を委ねることで、ジョブのアボート処理やロールバック処理などにより、メインメモリの当該ページを無効化することができ、プロセッサユニット302を「プロセッサチェック」状態にせずに回復できる可能性がある。
本実施の形態のマルチプロセッサシステム300は、情報処理装置100と情報処理装置200を用いて説明した技術を、2次キャッシュメモリを備えたマルチプロセッサシステムに適用したものであり、これらの技術による効果を得ることができる。
以上、実施の形態をもとに本発明を説明した。実施の形態は例示であり、本発明の主旨から逸脱しない限り、上述実施の形態に対して、さまざまな変更、増減、組合せを加えてもよい。これらの変更、増減、組合せが加えられた変形例も本発明の範囲にあることは当業者に理解されるところである。
例えば、マルチプロセッサシステム300において、リプライデータの転送経路(バス340またはバス360)に対して冗長経路を設け、該転送経路上にエラーが検出された場合に、リプライデータの転送経路を冗長経路に切り換えるようにしてもよい。
また、本発明にかかる技術は、2次キャッシュメモリまでを備えたシステムに限らず、3次以上のキャッシュメモリを備えるシステムにも適用することができる。レベルの異なるキャッシュメモリの数が多いほど、本発明にかかる技術による効果をより大きく発揮することができる。
また、リプライデータに含まれる付加情報に応じて行う回復処理も、上述した各回復処理の例に限られることがない。