JP3627037B2 - キャッシュ・コヒーレンシを維持する方法及びコンピュータ・システム - Google Patents
キャッシュ・コヒーレンシを維持する方法及びコンピュータ・システム Download PDFInfo
- Publication number
- JP3627037B2 JP3627037B2 JP09745798A JP9745798A JP3627037B2 JP 3627037 B2 JP3627037 B2 JP 3627037B2 JP 09745798 A JP09745798 A JP 09745798A JP 9745798 A JP9745798 A JP 9745798A JP 3627037 B2 JP3627037 B2 JP 3627037B2
- Authority
- JP
- Japan
- Prior art keywords
- cache
- sector
- cache line
- line
- state
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0811—Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0815—Cache consistency protocols
- G06F12/0831—Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Description
【0001】
【発明の属する技術分野】
本発明は、一般にはコンピュータ・システムに関し、具体的にはスヌープ操作を上流であるより上位レベルのキャッシュに転送する必要があるかどうかを判断するキャッシュ・コヒーレンシ・プロトコルに係わる。
【0002】
【従来の技術】
従来のマルチプロセッサ・コンピュータ・システム10の基本構造を図1に示す。コンピュータ・システム10は、いくつかの処理装置(以下「プロセッサ」とも称する)を有することができ、そのうちの2つの処理装置12a及び12bが図示されている。処理装置は、入出力(I/O)装置14(表示モニタ、キーボード、グラフィカル・ポインタ(マウス)、永続記憶装置(ハード・ディスク)など)、処理装置がプログラム命令を実行するために使用するメモリ・デバイス16(ランダム・アクセス・メモリ、またはRAM)、及び、コンピュータに最初に電源を入れたときに周辺装置の1つ(通常は永続記憶装置)からオペレーティング・システムを探し出してロードすることを主な目的とするファームウェア18を含む様々な周辺装置に接続されている。処理装置12a及び12bは、汎用相互接続線またはバス20、あるいはダイレクト・メモリ・アクセス・チャネル(図示せず)を含む様々な手段によって周辺装置と通信する。コンピュータ・システム10は、たとえばモデムやプリンタなどに接続するためのシリアル・ポートやパラレル・ポートなど、図示されていない多くの追加の構成要素を有することができる。当業者ならさらに、図1のブロック図に図示されている構成要素と共に使用可能な他の構成要素もあることがわかるであろう。たとえば、ビデオ表示モニタを制御するためにディスプレイ・アダプタを使用したり、メモリ16にアクセスするためにメモリ・コントローラを使用することができる。コンピュータは3個以上の処理装置を有することもできる。
【0003】
対称マルチプロセッサ(SMP)コンピュータでは、すべての処理装置は一般に同じである。すなわち、すべての処理装置が命令及びプロトコルの共通のセットまたはサブセットを使用して動作し、一般に同じアーキテクチャを有する。典型的なアーキテクチャは図1に示す通りである。処理装置は、複数のレジスタと、コンピュータを動作させるためにプログラム命令を実行する実行ユニットとを含むプロセッサ・コア22を含む。処理装置の例としては、インターナショナル・ビジネス・マシーンズ・コーポレイション(IBM)が販売するPowerPCTMプロセッサがある。処理装置は、高速メモリ・デバイスを使用して実装された命令キャッシュ24やデータ・キャッシュ26などの1つまたは複数のキャッシュも有することができる。キャッシュは、メモリ16から値をロードする長いステップを回避することによって処理を高速化することを目的として、プロセッサによって繰り返しアクセスされる可能性がある値を一時的に記憶するために一般に使用される。これらのキャッシュは、単一の集積チップ28上にプロセッサ・コアと一体にパッケージされているときは、「オンボード」キャッシュと呼ばれる。各キャッシュには、プロセッサ・コアとキャッシュ・メモリとの間のデータの転送を管理するキャッシュ・コントローラ(図示せず)が付随している。
【0004】
処理装置は、オンボード(一次)キャッシュ24及び26をサポートするため二次キャッシュ(L2)と呼ばれるキャッシュ30などの追加のキャッシュを備えることができる。言い換えると、キャッシュ30はメモリ16とオンボード・キャッシュとの間の媒介として機能し、オンボード・キャッシュよりもはるかに大量の情報(命令及びデータ)を記憶することができるが、アクセス・ペナルティは長い。たとえば、キャッシュ30は、256キロバイトまたは512キロバイトの記憶容量を有するチップとすることができ、プロセッサは64キロバイトの合計記憶容量を持つオンボード・キャッシュを有するIBM PowerPCTM604シリーズのプロセッサとすることができる。キャッシュ30はバス20に接続され、メモリ16からプロセッサ・コア22への情報のロードはすべてキャッシュ30を介して行わなければならない。図1には二次キャッシュ階層しか図示されていないが、多くのレベル(L3、L4、など)の直列接続されたキャッシュを備えたマルチレベル・キャッシュ階層を設けることもできる。
【0005】
SMPコンピュータでは、コヒーレントなメモリ・システムを備えること、すなわち、すべてのプロセッサについて各個別の記憶場所への書込みが何らかの順序で順次化されるようにすることが重要である。たとえば、値1、2、3、4をとるように1シーケンスの操作によってメモリ内の場所が変更されるものとする。キャッシュ・コヒーレント・システムでは、すべてのプロセッサが、所与の場所への書込みを前記の順序で行われるように守る。しかし、1つの処理要素がその記憶場所への書込みをミスすることがある。その記憶場所を読み取る所与の処理要素が1、3、4というシーケンスに遭遇し、値2に加えられた更新を読取り損なうことがある。これらの特性を実装するシステムを「コヒーレント」と言う。実質的には、すべてのコヒーレンシ・プロトコルはキャッシュ・ブロックのサイズの粒度に対してのみ作用する。すなわち、コヒーレンシ・プロトコルはデータの移動と書込み許可をキャッシュ・ブロック単位で制御し、個々の記憶場所ごとに別々に制御するわけではない。
【0006】
当業者に周知の、キャッシュ・コヒーレンシを実現するためのプロトコル及び技法がいくつかある。コヒーレンシを維持するためのそれらのすべての機構の中心にあるのは、プロトコルによって、所与の時点で所与の記憶場所(キャッシュ・ブロック)への書込みを行うことができる「許可」を1つのプロセッサだけが持てるようにするという必要条件である。この必要条件の結果として、処理要素が記憶場所への書込みを試みるときは常に、まず、その場所への書込みを行いたいということを他のすべての処理要素に通知し、他のすべての処理要素から許可を受け取ってから書込みを行わなければならない。重要な問題は、書込みが行われる前に開始プロセッサがシステム内の他のすべてのプロセッサに書込みを通知しなければならないということである。さらに、ブロックが所与の処理装置の一次キャッシュ内にある場合、そのブロックはその処理装置の二次キャッシュ及び三次キャッシュにも存在する。この特性は包含と呼ばれ、当業者には周知である。以下では、本発明に関係するキャッシュにこの包含の原理が適用されるものとする。
【0007】
システムにおけるキャッシュ・コヒーレンシを実現するために、プロセッサは共通の汎用相互接続線(すなわちバス20)を介して通信する。プロセッサは、記憶場所の読取りまたは書込みを行いたいことを示すメッセージをこの相互接続線で渡す。相互接続線上に操作が送り込まれると、他のすべてのプロセッサはその操作を「スヌープ」(監視)し、それらのキャッシュの状態が要求された操作を行うことができる状態であるかどうかを決定し、できる場合にはどのような条件下で行えるかを決定する。バス・トランザクションを受け入れ、メモリ・コヒーレンシを維持するためにスヌープとフォローアップ処置を必要とするいくつかのバス・トランザクションがある。スヌープ操作は、特定のバス信号のアサートによって生成される適格なスヌープ要求の受信によってトリガされる。
【0008】
この通信は、キャッシュを備えたシステムでは、メモリの所与のブロックの最も最近の有効コピーがシステム・メモリ16からシステム内の(前述のような)1つまたは複数のキャッシュに移動している可能性があるために必要なものである。プロセッサ(たとえば12a)がそのプロセッサのキャッシュ階層内にない記憶場所にアクセスを試みた場合、その記憶場所の実際の(現行)値が入っているブロックの正しいバージョンは、システム・メモリ16内にあるか、または別の処理装置(たとえば処理装置12b)内の1つまたは複数のキャッシュ内にある可能性がある。正しいバージョンがシステム内の他の1つまたは複数のキャッシュにある場合、システム・メモリではなく、システム内のその1つまたは複数のキャッシュから正しい値を入手する必要がある。
【0009】
たとえば、プロセッサ(たとえば12a)がメモリ内の記憶場所を読み取ろうと試みる場合を考えてみる。プロセッサはまず、そのプロセッサ自体の一次キャッシュ(24または26)をポーリングする。そのブロックが一次キャッシュにない場合、要求は二次キャッシュ(30)に転送される。そのブロックが二次キャッシュにない場合、それより下位のキャッシュがあればその下位キャッシュ(たとえば三次キャッシュ)に要求が転送される。ブロックがその下位キャッシュにもない場合、要求は処理のために汎用相互接続線(20)上に流される。汎用相互接続線上に操作が流されると、他のすべての処理装置がその操作をスヌープし、それぞれのキャッシュにそのブロックがあるかどうかを判断する。処理装置によって要求されたそのデータのブロックを所与の処理装置がその一次キャッシュ内に持っており、そのデータが変更されている場合、包含の原理により二次キャッシュ及びそれより下位レベルのキャッシュもそのブロックのコピーを持っている(しかし、そのプロセッサのキャッシュ内のコピーが変更されているためそれらのコピーは陳腐化している可能性がある)。したがって、処理装置の下位レベルのキャッシュ(たとえば三次キャッシュ)がこの読取り操作をスヌープした場合、要求されたブロックがより上位レベルのキャッシュ内にあり、変更されていると判断する。これが起こると、三次キャッシュは、その記憶場所の実際の値がメモリ階層の最上部の一次キャッシュ内にあり、開始処理装置の読取り要求の処理に使用できるようにするためにそれを取り出さなければならないため、その操作を後でもう一度「再試行」しなければならないことをその処理装置に対して通知するメッセージを汎用相互接続線上に送る。
【0010】
開始処理装置からの要求が再試行されると、前出の三次キャッシュは一次キャッシュから変更されたデータを取り出し、本発明の要旨には関係のない実現上の細目に依存して、それを三次キャッシュまたはメイン・メモリあるいはその両方で使用可能にするプロセスを開始する。より上位のキャッシュからブロックを取り出すために、三次キャッシュはキャッシュ間接続を介してより上位のキャッシュにメッセージを送り、ブロックの取り出しを要求する。これらのメッセージが処理装置のキャッシュ階層を上方に伝播して一次キャッシュに達すると、このブロックはキャッシュ階層を下方に移動し、最下位レベル(三次キャッシュまたはメイン・メモリ)に達するので、ここで開始処理装置からの要求を処理することができるようになる。
【0011】
開始処理装置は、最終的に読取り要求を汎用相互接続線上に再提示する。しかし、この時点で処理装置の一次キャッシュから変更されたデータが取り出されており、開始プロセッサからの読取り要求は満たされることになる。この事例を一般に「スヌープ・プッシュ」と呼ぶ。汎用相互接続線上で読取り要求がスヌープされ、それによって処理装置が「ブロック」を階層の最下部まで「プッシュ」して、開始処理装置によって行われた読取り要求が満たされる。
【0012】
留意すべき重要な点は、処理装置がブロックの読取りまたは書込みを行いたい場合、キャッシュ・コヒーレンシを維持するために、この処理装置はその希望をシステム内の残りの処理装置に伝えなければならないことである。これを実現するために、キャッシュ・コヒーレンシ・プロトコルは、キャッシュ階層の各レベル内の各ブロックに、ブロックの現在の「状態」を示す状況標識を関連づける。この状態情報を使用して、汎用相互接続線とキャッシュ間接続線上のメッセージ・トラフィックを少なくするコヒーレンシ・プロトコルにおける特定の最適化が可能になる。この機構の一例として、処理装置が読取りを実行するとき、この処理装置はその読取りが後で再試行されなければならないかどうかを示すメッセージを受け取る。この読取り操作が再試行されない場合、メッセージには、通常、他の処理装置にもまだそのブロックのアクティブ・コピーがあるかどうかをこの処理装置が判断することができるようにする情報も含まれる(これは、他の最下位キャッシュにそれらのキャッシュが再試行しない読取りについて「共用」または「非共用」標識を提供させることによって行われる)。したがって、処理装置は、システム内の他の処理装置がブロックのコピーを持っているかどうかを判断することができる。他の処理装置がブロックのアクティブ・コピーを持っていない場合、読取り側処理装置はそのブロックの状態を「排他的」とマークする。ブロックが排他的とマークされた場合、システム内の他の処理装置にはそのブロックのコピーが存在しないために、読取り側処理装置は、最初にシステム内の他の処理装置と通信することなく、そのブロックへの書き込みを後で行うことができる。したがって、一般に、処理装置は読み書きの意図を相互接続線上に流してからでなくても、メモリ内の記憶場所を対象とする読取りまたは書込みを行うことができる。しかし、これは他の処理装置がそのブロックに関心がないことがコヒーレンシ・プロトコルによって保証された場合にのみ起こる。
【0013】
上述のキャッシュ・コヒーレンシ技法は、「MESI」と呼ばれる特定のプロトコルで実施され、これを図2に示す。このプロトコルでは、キャッシュ・ブロックは、「M」(変更済み)、「E」(排他的)、「S」(共用)、または「I」(無効)の4つの状態のうちの1つを取ることができる。MESIプロトコルでは、各キャッシュ項目(たとえば32バイト・セクタ)は、項目がとることができる4つの状態のうちの状態を示す2ビットを持つ。状態は、要求プロセッサが求める項目の初期状態及びアクセスのタイプに応じて変化することができ、要求プロセッサのキャッシュ内の項目について特定の状態が設定される。たとえば、セクタが「変更済み」状態の場合、アドレスされたセクタは変更されたセクタを持っているキャッシュ内でのみ有効であり、変更されたデータはまだシステム・メモリに書き戻されていない。セクタが「排他的」の場合、それはそのセクタのみにあり、システム・メモリと整合している。セクタが「共用」の場合、そのキャッシュ内と少なくとも1つの他のキャッシュ内で有効であり、すべての共用セクタはシステム・メモリと整合している。最後に、セクタが無効な場合、アドレスされたセクタはキャッシュ内にないことを示す。図2に示すように、セクタが「変更済み」、「共用」、または「無効」状態のいずれかである場合、特定のバス・トランザクションに応じて状態間を移行することができる。「排他的」状態のセクタは他のいずれの状態にも移行することができるが、セクタはまず「無効」になってからでなければ「排他的」になることができない。
【0014】
プロセッサの高速化したときにSMPパフォーマンスを維持する際の難点の一つは、システム・メモリ・バスの負荷の増大である。その影響を緩和する1つの方法は、バス幅と、1回のトランザクションごとのデータ伝送量(伝送バースト・サイズ)を増やすことである。残念ながら、この伝送サイズはシステムのキャッシュ・ライン・サイズとコヒーレンシ・サイズになり、ほとんどの縮小命令セット・コンピュータ(RISC)プロセッサがそうであるように、キャッシュ制御命令がある場合にはソフトウェア・モデルに影響を与える。ソフトウェアへの影響を防止するために、プロセッサとシステム・バスの間にセクタ化キャッシュが実装される。セクタ化キャッシュはメモリ及びシステム伝送サイズと同じライン・サイズを持ち、セクタ・サイズはプロセッサ・キャッシュ・ライン・サイズと同じである。この構成によって、ソフトウェア影響問題は解決されるが、包含性とコヒーレンシを維持しようとする下位レベルのキャッシュについてはいくつかの設計上の問題が生じる。
【0015】
第1に、より上位のキャッシュ(一次)が、アロケート・アンド・ゼロ命令と呼ぶ特定の命令(PowerPCTM命令セットの「DCBZ」)を実行するときは常に、メモリから古いデータをフェッチせずにそれ自体のキャッシュに入っているデータを変更する(ゼロにする)。この操作は、一般に新しいプロセスにメモリ領域を割振りし直すときに行われる。下位レベル・キャッシュもそれ自体のキャッシュ・ラインを割り振り、ゼロにする必要があるが、下位レベルのキャッシュはより大きなキャッシュ・ラインを有する。このプロシージャを実施する従来の方法は、メモリからより大きなラインを読取り、次にそのプロセッサ・キャッシュ・ラインに対応する部分をゼロにするものである。しかしこの手法は、いずれにしても再割り振りしようとしているメモリからのデータの読み取りを回避するという操作の目的全体を損なう。さらに、プロセッサは、きわめて短い期間に、追加のキャッシュ・ラインのアロケート・アンド・ゼロを行う可能性が高く、そしてこれらのキャッシュ・ラインが下位レベルのキャッシュ内のより大きなキャッシュ・ラインの残りの部分に入ることがある(もっとも、下位レベルのキャッシュはそうであると呈示することができない)。したがって、第1の問題は、上位レベルの(たとえば一次)キャッシュ内では有効であるが下位レベルのキャッシュ(たとえば二次または三次)ではまだ有効になっていないセクタを追跡することである。
【0016】
第2の問題は、たとえばグラフィック・デバイス・ドライバ(ビデオ表示モニタなど)などによって一般的に使用されるキャッシュ可能ライトスルー操作を効率的にサポートする方法である。この場合、大量のデータが参照されることが多いが、変更される量はわずかに過ぎない。変更されたデータはプロセッサの外部にあるグラフィック装置に適時に見えるようになる必要があり、したがってキャッシュ可能ライトスルー・プロトコルが使用される。このプロトコルは、包含を維持するために、変更されたデータを含むラインをすべてのレベルのキャッシュで割り振る必要があるが、キャッシュの整合性を維持するのに部分ライン書込み機能(コストがかかる複雑な機能)を必要とすることになるライトスルー操作のため、または、ラインを次に参照するときにラインを再度フェッチする必要があるためパフォーマンスに悪影響を与えることになる書き込み時のラインのフラッシュと無効化のために、実施が複雑になる。
【0017】
したがって、無用なバス操作を回避するために、そのレベルで未定義のまま、所与のキャッシュ・レベルの上流でキャッシュラインが割り振られて有効であることを示す方法を考案することが望ましい。さらに、そのような上流の変更済みセクタに対するスヌープ・ヒットが発生するまれな場合をこの方法によって効率的に処理することができればさらに有利であろう。
【0018】
【発明が解決しようとする課題】
したがって、本発明の目的は、セクタ化された下位レベル・キャッシュを有するマルチプロセッサ・システムにおいてキャッシュ・コヒーレンシを維持する改良された方法を提供することである。
【0019】
本発明の他の目的は、キャッシュ・ラインに対するゼロ割振り操作のパフォーマンスを向上させる方法を提供することである。
【0020】
【課題を解決するための手段】
上記の目的は、マルチプロセッサ・コンピュータ・システムにおけるキャッシュ・コヒーレンシを維持する方法であって、一般に、第1の値を処理装置の第1のレベルのキャッシュ(以下「L1キャッシュ」と表記)内のキャッシュ・ライン・ブロックと、処理装置の第2のレベルのキャッシュ(以下「L2キャッシュ」と表記)内のキャッシュ・ラインのセクタとにロードするステップと、処理装置のL1キャッシュ内のキャッシュ・ライン・ブロック内の値を変更するステップと、L2キャッシュ内のキャッシュ・ラインが上流のL1キャッシュで変更されたことをL2キャッシュで表示するステップとを含む方法で達成される。この表示は、L2キャッシュ内のキャッシュ・ラインのセクタを変更せずに行われる。この方法は、処理装置のL1キャッシュのキャッシュ・ライン・ブロックをゼロ化するアロケート・アンド・ゼロ(DCBZ)命令に応答して実行することができる。前記表示するステップは、L2キャッシュ内のキャッシュ・ライン内の複数のセクタのうちのどのセクタが、変更されたL1キャッシュ内のキャッシュ・ライン・ブロックに対応するかを示す表示を含む。L2キャッシュ内のキャッシュ・ラインが2つのセクタしか持たない実施例では、どのセクタが変更されたか、またはL1キャッシュのキャッシュ・ラインに対していずれかのキャッシュ可能ライトスルー操作が実行されたかどうかを示すために3つの新しい状態を設ける。この新しいプロトコルでは、無用なバス操作を実行せずに、より上位のレベルで有効であるセクタを正しく追跡することができ、キャッシュ可能ライトスルー操作がより効率的にサポートされる。
【0021】
【発明の実施の形態】
本発明は、図1のシステムのようなマルチプロセッサ・システムにおいてキャッシュ・コヒーレンシを維持する方法を対象とするが、本発明は必ずしも従来のコンピュータ・システムではないコンピュータ・システムにも適用可能である。すなわち、コンピュータ・システムは図1に図示されていない新しいハードウェア構成要素を含んでいたり、既存の構成要素のための新規な相互接続アーキテクチャを有していてもよい。したがって、当業者なら、本発明は図に示す汎用システムには限定されないことがわかるであろう。
【0022】
次に図3を参照すると、本発明のキャッシュ・コヒーレンシ・プロトコルの一実施例を示す状態図が図示されている。このプロトコルは、図2に示す従来技術のMESIプロトコルと同じ4つの状態(変更済み、排他的、共用、及び無効)を含む点ではMESIプロトコルと類似しているが、以下で詳述する上流の未定義セクタの3つの新しい「U」状態も含む。この新しいプロトコルを本明細書では「U−MESI」プロトコルと呼ぶ。従来技術のプロトコルと同様に、この4つのM−E−S−I状態は、要求プロセッサが求める項目の初期状態とアクセスのタイプに基づいて変化することができる。この4つの状態が変化する方式は、従来技術のMESIプロトコルと一般には同じであるが、以下で述べるような異なる点がある。
【0023】
図の実施例では、U−MESIプロトコルは2つのセクタを備えたキャッシュ・ラインを有するキャッシュに合わせて適合化されている。この実施例では、(1)2つのセクタのうちの第1のセクタ(「奇数」セクタ)が変更される場合、(2)2つのセクタのうちの第2のセクタ(「偶数」セクタ)が変更される場合、及び(3)どちらのセクタも変更されない場合(両方ともキャッシュ可能ライトスルー読み取り操作の結果として共用される)の3つの事例が可能であるため3つの「U」状態がある。本明細書では、これらの状態のうちの第1の状態を「UMI」と呼び、第2の状態を「UIM」と呼び、第3の状態を「USS」と呼ぶ。U−MESIプロトコルのこの実施例では、各キャッシュ項目は項目がとることができる7つの状態(従来の4つの状態と、3つの新しい「U」状態)のうちの1つの状態を示す3ビットを有する。キャッシュ・ライン内の3つ以上のセクタがある場合は、追加の「U」状態(及びキャッシュ項目内の追加のビット)が必要になる。
【0024】
表1に、最上位(L1)操作にかかわるキャッシュ遷移を示す。
【表1】
【0025】
表1の第1項では、L1キャッシュのキャッシュ・ライン内の偶数セクタ(第2のセクタ)に対してDCBZ操作(書込みタイプの操作)が行われると、それに対応する「I」(無効)状態のより下位レベルのキャッシュが「UIM」に遷移する。すなわち、第2のセクタだけが変更済みとして示される。表1の第2項では、L1キャッシュのキャッシュ・ライン内の奇数セクタ(第1のセクタ)に対してDCBZ操作が行われると、それに対応する「I」(無効)状態のより下位のキャッシュが「UMI」に遷移する。すなわち、第1のセクタだけが変更済みとして示される。
【0026】
同じラインの奇数セクタに前にDCBZ操作が行われ、それに対応するより下位のキャッシュが「UMI」状態であるときに偶数セクタにDCBZ操作が行われるか(表1の第3項)、または同じラインの偶数セクタに前にDCBZ操作が行われ、対応するより下位のキャッシュが「UIM」状態のときに第2のセクタに対してDCBZ操作が行われた場合(表1の第4項)、下位レベルのキャッシュは「M」(変更済み)状態に状態遷移して、そのライン全体が変更されたことを示す。しかし、所与のラインのセクタについて前に1つのDCBZだけが行われ、下位レベルのキャッシュのそのラインが「UIM」または「UMI」状態であり、他方の(無効)セクタに対して「読取り」または「変更を意図した読取り」(RWITM)操作を受ける場合、下位レベルのキャッシュ・ラインは「I」(無効)になり、変更されたセクタ(Mセクタ)はより上位のキャッシュからフラッシュされる(表1の第5項)。
【0027】
表1の第6項で、対象ブロックに対するL1「ヒット」が発生し、より下位のキャッシュが「USS」状態の場合、それらはその状態のままである。すなわち、無効であるかのように扱われ、キャッシュされない。ブロックに対してキャッシュ可能/ライトスルー読取り操作が行われた場合(表1の第7項)であって、より下位のキャッシュが対応する「I」(無効)状態のブロックを持っている場合、それらのキャッシュは「USS」状態に遷移する。最後に、表1の第8項に示すように、上記で示されていない他のすべてのL1操作は通常の遷移を受ける。すなわち従来技術のMESIプロトコルに従う。
【0028】
表2に、システム・バス・スヌープ・トランザクションが「U」状態のキャッシュにどのように影響するかを示す。
【表2】
【0029】
「U」状態では、キャッシュは処置を行わなければならないと認識しているが、スヌープを上流に転送して適切な処置を判断しなければならない。表2には、「U」状態の1つに対するスヌープ・ヒットが発生するまれな場合だけが示されている。これらの状況では、より下位のキャッシュは上流キャッシュの内容をフラッシュして「I」(無効)状態に移行し、「再試行」応答を出す。ただし、「USS」状態に対する読取りスヌープ・ヒットが起こった場合は、コヒーレンシ応答は「共用」になる。
【0030】
上述のU−MESIプロトコルによって、前述の問題が両方とも解決される。すなわち、無用なバス操作を実行せずにより上位のレベルで有効なセクタが追跡され、キャッシュ可能ライトスルー操作が効率的にサポートされる。その結果、メモリ帯域幅が増大し、アドレス帯域幅が解放されると共に、バイト書込みが可能になる。
【図面の簡単な説明】
【図1】従来技術のマルチプロセッサ・コンピュータ・システムのブロック図である。
【図2】従来技術のキャッシュ・コヒーレンシ・プロトコル(MESI)を示す状態図である。
【図3】本発明のキャッシュ・コヒーレンシ・プロトコルを示す状態図である。
【符号の説明】
12 処理装置
14 入出力装置
16 システム・メモリ
18 ファームウェア
20 バス
22 プロセッサ・コア
24 一次キャッシュ
30 二次キャッシュ
【発明の属する技術分野】
本発明は、一般にはコンピュータ・システムに関し、具体的にはスヌープ操作を上流であるより上位レベルのキャッシュに転送する必要があるかどうかを判断するキャッシュ・コヒーレンシ・プロトコルに係わる。
【0002】
【従来の技術】
従来のマルチプロセッサ・コンピュータ・システム10の基本構造を図1に示す。コンピュータ・システム10は、いくつかの処理装置(以下「プロセッサ」とも称する)を有することができ、そのうちの2つの処理装置12a及び12bが図示されている。処理装置は、入出力(I/O)装置14(表示モニタ、キーボード、グラフィカル・ポインタ(マウス)、永続記憶装置(ハード・ディスク)など)、処理装置がプログラム命令を実行するために使用するメモリ・デバイス16(ランダム・アクセス・メモリ、またはRAM)、及び、コンピュータに最初に電源を入れたときに周辺装置の1つ(通常は永続記憶装置)からオペレーティング・システムを探し出してロードすることを主な目的とするファームウェア18を含む様々な周辺装置に接続されている。処理装置12a及び12bは、汎用相互接続線またはバス20、あるいはダイレクト・メモリ・アクセス・チャネル(図示せず)を含む様々な手段によって周辺装置と通信する。コンピュータ・システム10は、たとえばモデムやプリンタなどに接続するためのシリアル・ポートやパラレル・ポートなど、図示されていない多くの追加の構成要素を有することができる。当業者ならさらに、図1のブロック図に図示されている構成要素と共に使用可能な他の構成要素もあることがわかるであろう。たとえば、ビデオ表示モニタを制御するためにディスプレイ・アダプタを使用したり、メモリ16にアクセスするためにメモリ・コントローラを使用することができる。コンピュータは3個以上の処理装置を有することもできる。
【0003】
対称マルチプロセッサ(SMP)コンピュータでは、すべての処理装置は一般に同じである。すなわち、すべての処理装置が命令及びプロトコルの共通のセットまたはサブセットを使用して動作し、一般に同じアーキテクチャを有する。典型的なアーキテクチャは図1に示す通りである。処理装置は、複数のレジスタと、コンピュータを動作させるためにプログラム命令を実行する実行ユニットとを含むプロセッサ・コア22を含む。処理装置の例としては、インターナショナル・ビジネス・マシーンズ・コーポレイション(IBM)が販売するPowerPCTMプロセッサがある。処理装置は、高速メモリ・デバイスを使用して実装された命令キャッシュ24やデータ・キャッシュ26などの1つまたは複数のキャッシュも有することができる。キャッシュは、メモリ16から値をロードする長いステップを回避することによって処理を高速化することを目的として、プロセッサによって繰り返しアクセスされる可能性がある値を一時的に記憶するために一般に使用される。これらのキャッシュは、単一の集積チップ28上にプロセッサ・コアと一体にパッケージされているときは、「オンボード」キャッシュと呼ばれる。各キャッシュには、プロセッサ・コアとキャッシュ・メモリとの間のデータの転送を管理するキャッシュ・コントローラ(図示せず)が付随している。
【0004】
処理装置は、オンボード(一次)キャッシュ24及び26をサポートするため二次キャッシュ(L2)と呼ばれるキャッシュ30などの追加のキャッシュを備えることができる。言い換えると、キャッシュ30はメモリ16とオンボード・キャッシュとの間の媒介として機能し、オンボード・キャッシュよりもはるかに大量の情報(命令及びデータ)を記憶することができるが、アクセス・ペナルティは長い。たとえば、キャッシュ30は、256キロバイトまたは512キロバイトの記憶容量を有するチップとすることができ、プロセッサは64キロバイトの合計記憶容量を持つオンボード・キャッシュを有するIBM PowerPCTM604シリーズのプロセッサとすることができる。キャッシュ30はバス20に接続され、メモリ16からプロセッサ・コア22への情報のロードはすべてキャッシュ30を介して行わなければならない。図1には二次キャッシュ階層しか図示されていないが、多くのレベル(L3、L4、など)の直列接続されたキャッシュを備えたマルチレベル・キャッシュ階層を設けることもできる。
【0005】
SMPコンピュータでは、コヒーレントなメモリ・システムを備えること、すなわち、すべてのプロセッサについて各個別の記憶場所への書込みが何らかの順序で順次化されるようにすることが重要である。たとえば、値1、2、3、4をとるように1シーケンスの操作によってメモリ内の場所が変更されるものとする。キャッシュ・コヒーレント・システムでは、すべてのプロセッサが、所与の場所への書込みを前記の順序で行われるように守る。しかし、1つの処理要素がその記憶場所への書込みをミスすることがある。その記憶場所を読み取る所与の処理要素が1、3、4というシーケンスに遭遇し、値2に加えられた更新を読取り損なうことがある。これらの特性を実装するシステムを「コヒーレント」と言う。実質的には、すべてのコヒーレンシ・プロトコルはキャッシュ・ブロックのサイズの粒度に対してのみ作用する。すなわち、コヒーレンシ・プロトコルはデータの移動と書込み許可をキャッシュ・ブロック単位で制御し、個々の記憶場所ごとに別々に制御するわけではない。
【0006】
当業者に周知の、キャッシュ・コヒーレンシを実現するためのプロトコル及び技法がいくつかある。コヒーレンシを維持するためのそれらのすべての機構の中心にあるのは、プロトコルによって、所与の時点で所与の記憶場所(キャッシュ・ブロック)への書込みを行うことができる「許可」を1つのプロセッサだけが持てるようにするという必要条件である。この必要条件の結果として、処理要素が記憶場所への書込みを試みるときは常に、まず、その場所への書込みを行いたいということを他のすべての処理要素に通知し、他のすべての処理要素から許可を受け取ってから書込みを行わなければならない。重要な問題は、書込みが行われる前に開始プロセッサがシステム内の他のすべてのプロセッサに書込みを通知しなければならないということである。さらに、ブロックが所与の処理装置の一次キャッシュ内にある場合、そのブロックはその処理装置の二次キャッシュ及び三次キャッシュにも存在する。この特性は包含と呼ばれ、当業者には周知である。以下では、本発明に関係するキャッシュにこの包含の原理が適用されるものとする。
【0007】
システムにおけるキャッシュ・コヒーレンシを実現するために、プロセッサは共通の汎用相互接続線(すなわちバス20)を介して通信する。プロセッサは、記憶場所の読取りまたは書込みを行いたいことを示すメッセージをこの相互接続線で渡す。相互接続線上に操作が送り込まれると、他のすべてのプロセッサはその操作を「スヌープ」(監視)し、それらのキャッシュの状態が要求された操作を行うことができる状態であるかどうかを決定し、できる場合にはどのような条件下で行えるかを決定する。バス・トランザクションを受け入れ、メモリ・コヒーレンシを維持するためにスヌープとフォローアップ処置を必要とするいくつかのバス・トランザクションがある。スヌープ操作は、特定のバス信号のアサートによって生成される適格なスヌープ要求の受信によってトリガされる。
【0008】
この通信は、キャッシュを備えたシステムでは、メモリの所与のブロックの最も最近の有効コピーがシステム・メモリ16からシステム内の(前述のような)1つまたは複数のキャッシュに移動している可能性があるために必要なものである。プロセッサ(たとえば12a)がそのプロセッサのキャッシュ階層内にない記憶場所にアクセスを試みた場合、その記憶場所の実際の(現行)値が入っているブロックの正しいバージョンは、システム・メモリ16内にあるか、または別の処理装置(たとえば処理装置12b)内の1つまたは複数のキャッシュ内にある可能性がある。正しいバージョンがシステム内の他の1つまたは複数のキャッシュにある場合、システム・メモリではなく、システム内のその1つまたは複数のキャッシュから正しい値を入手する必要がある。
【0009】
たとえば、プロセッサ(たとえば12a)がメモリ内の記憶場所を読み取ろうと試みる場合を考えてみる。プロセッサはまず、そのプロセッサ自体の一次キャッシュ(24または26)をポーリングする。そのブロックが一次キャッシュにない場合、要求は二次キャッシュ(30)に転送される。そのブロックが二次キャッシュにない場合、それより下位のキャッシュがあればその下位キャッシュ(たとえば三次キャッシュ)に要求が転送される。ブロックがその下位キャッシュにもない場合、要求は処理のために汎用相互接続線(20)上に流される。汎用相互接続線上に操作が流されると、他のすべての処理装置がその操作をスヌープし、それぞれのキャッシュにそのブロックがあるかどうかを判断する。処理装置によって要求されたそのデータのブロックを所与の処理装置がその一次キャッシュ内に持っており、そのデータが変更されている場合、包含の原理により二次キャッシュ及びそれより下位レベルのキャッシュもそのブロックのコピーを持っている(しかし、そのプロセッサのキャッシュ内のコピーが変更されているためそれらのコピーは陳腐化している可能性がある)。したがって、処理装置の下位レベルのキャッシュ(たとえば三次キャッシュ)がこの読取り操作をスヌープした場合、要求されたブロックがより上位レベルのキャッシュ内にあり、変更されていると判断する。これが起こると、三次キャッシュは、その記憶場所の実際の値がメモリ階層の最上部の一次キャッシュ内にあり、開始処理装置の読取り要求の処理に使用できるようにするためにそれを取り出さなければならないため、その操作を後でもう一度「再試行」しなければならないことをその処理装置に対して通知するメッセージを汎用相互接続線上に送る。
【0010】
開始処理装置からの要求が再試行されると、前出の三次キャッシュは一次キャッシュから変更されたデータを取り出し、本発明の要旨には関係のない実現上の細目に依存して、それを三次キャッシュまたはメイン・メモリあるいはその両方で使用可能にするプロセスを開始する。より上位のキャッシュからブロックを取り出すために、三次キャッシュはキャッシュ間接続を介してより上位のキャッシュにメッセージを送り、ブロックの取り出しを要求する。これらのメッセージが処理装置のキャッシュ階層を上方に伝播して一次キャッシュに達すると、このブロックはキャッシュ階層を下方に移動し、最下位レベル(三次キャッシュまたはメイン・メモリ)に達するので、ここで開始処理装置からの要求を処理することができるようになる。
【0011】
開始処理装置は、最終的に読取り要求を汎用相互接続線上に再提示する。しかし、この時点で処理装置の一次キャッシュから変更されたデータが取り出されており、開始プロセッサからの読取り要求は満たされることになる。この事例を一般に「スヌープ・プッシュ」と呼ぶ。汎用相互接続線上で読取り要求がスヌープされ、それによって処理装置が「ブロック」を階層の最下部まで「プッシュ」して、開始処理装置によって行われた読取り要求が満たされる。
【0012】
留意すべき重要な点は、処理装置がブロックの読取りまたは書込みを行いたい場合、キャッシュ・コヒーレンシを維持するために、この処理装置はその希望をシステム内の残りの処理装置に伝えなければならないことである。これを実現するために、キャッシュ・コヒーレンシ・プロトコルは、キャッシュ階層の各レベル内の各ブロックに、ブロックの現在の「状態」を示す状況標識を関連づける。この状態情報を使用して、汎用相互接続線とキャッシュ間接続線上のメッセージ・トラフィックを少なくするコヒーレンシ・プロトコルにおける特定の最適化が可能になる。この機構の一例として、処理装置が読取りを実行するとき、この処理装置はその読取りが後で再試行されなければならないかどうかを示すメッセージを受け取る。この読取り操作が再試行されない場合、メッセージには、通常、他の処理装置にもまだそのブロックのアクティブ・コピーがあるかどうかをこの処理装置が判断することができるようにする情報も含まれる(これは、他の最下位キャッシュにそれらのキャッシュが再試行しない読取りについて「共用」または「非共用」標識を提供させることによって行われる)。したがって、処理装置は、システム内の他の処理装置がブロックのコピーを持っているかどうかを判断することができる。他の処理装置がブロックのアクティブ・コピーを持っていない場合、読取り側処理装置はそのブロックの状態を「排他的」とマークする。ブロックが排他的とマークされた場合、システム内の他の処理装置にはそのブロックのコピーが存在しないために、読取り側処理装置は、最初にシステム内の他の処理装置と通信することなく、そのブロックへの書き込みを後で行うことができる。したがって、一般に、処理装置は読み書きの意図を相互接続線上に流してからでなくても、メモリ内の記憶場所を対象とする読取りまたは書込みを行うことができる。しかし、これは他の処理装置がそのブロックに関心がないことがコヒーレンシ・プロトコルによって保証された場合にのみ起こる。
【0013】
上述のキャッシュ・コヒーレンシ技法は、「MESI」と呼ばれる特定のプロトコルで実施され、これを図2に示す。このプロトコルでは、キャッシュ・ブロックは、「M」(変更済み)、「E」(排他的)、「S」(共用)、または「I」(無効)の4つの状態のうちの1つを取ることができる。MESIプロトコルでは、各キャッシュ項目(たとえば32バイト・セクタ)は、項目がとることができる4つの状態のうちの状態を示す2ビットを持つ。状態は、要求プロセッサが求める項目の初期状態及びアクセスのタイプに応じて変化することができ、要求プロセッサのキャッシュ内の項目について特定の状態が設定される。たとえば、セクタが「変更済み」状態の場合、アドレスされたセクタは変更されたセクタを持っているキャッシュ内でのみ有効であり、変更されたデータはまだシステム・メモリに書き戻されていない。セクタが「排他的」の場合、それはそのセクタのみにあり、システム・メモリと整合している。セクタが「共用」の場合、そのキャッシュ内と少なくとも1つの他のキャッシュ内で有効であり、すべての共用セクタはシステム・メモリと整合している。最後に、セクタが無効な場合、アドレスされたセクタはキャッシュ内にないことを示す。図2に示すように、セクタが「変更済み」、「共用」、または「無効」状態のいずれかである場合、特定のバス・トランザクションに応じて状態間を移行することができる。「排他的」状態のセクタは他のいずれの状態にも移行することができるが、セクタはまず「無効」になってからでなければ「排他的」になることができない。
【0014】
プロセッサの高速化したときにSMPパフォーマンスを維持する際の難点の一つは、システム・メモリ・バスの負荷の増大である。その影響を緩和する1つの方法は、バス幅と、1回のトランザクションごとのデータ伝送量(伝送バースト・サイズ)を増やすことである。残念ながら、この伝送サイズはシステムのキャッシュ・ライン・サイズとコヒーレンシ・サイズになり、ほとんどの縮小命令セット・コンピュータ(RISC)プロセッサがそうであるように、キャッシュ制御命令がある場合にはソフトウェア・モデルに影響を与える。ソフトウェアへの影響を防止するために、プロセッサとシステム・バスの間にセクタ化キャッシュが実装される。セクタ化キャッシュはメモリ及びシステム伝送サイズと同じライン・サイズを持ち、セクタ・サイズはプロセッサ・キャッシュ・ライン・サイズと同じである。この構成によって、ソフトウェア影響問題は解決されるが、包含性とコヒーレンシを維持しようとする下位レベルのキャッシュについてはいくつかの設計上の問題が生じる。
【0015】
第1に、より上位のキャッシュ(一次)が、アロケート・アンド・ゼロ命令と呼ぶ特定の命令(PowerPCTM命令セットの「DCBZ」)を実行するときは常に、メモリから古いデータをフェッチせずにそれ自体のキャッシュに入っているデータを変更する(ゼロにする)。この操作は、一般に新しいプロセスにメモリ領域を割振りし直すときに行われる。下位レベル・キャッシュもそれ自体のキャッシュ・ラインを割り振り、ゼロにする必要があるが、下位レベルのキャッシュはより大きなキャッシュ・ラインを有する。このプロシージャを実施する従来の方法は、メモリからより大きなラインを読取り、次にそのプロセッサ・キャッシュ・ラインに対応する部分をゼロにするものである。しかしこの手法は、いずれにしても再割り振りしようとしているメモリからのデータの読み取りを回避するという操作の目的全体を損なう。さらに、プロセッサは、きわめて短い期間に、追加のキャッシュ・ラインのアロケート・アンド・ゼロを行う可能性が高く、そしてこれらのキャッシュ・ラインが下位レベルのキャッシュ内のより大きなキャッシュ・ラインの残りの部分に入ることがある(もっとも、下位レベルのキャッシュはそうであると呈示することができない)。したがって、第1の問題は、上位レベルの(たとえば一次)キャッシュ内では有効であるが下位レベルのキャッシュ(たとえば二次または三次)ではまだ有効になっていないセクタを追跡することである。
【0016】
第2の問題は、たとえばグラフィック・デバイス・ドライバ(ビデオ表示モニタなど)などによって一般的に使用されるキャッシュ可能ライトスルー操作を効率的にサポートする方法である。この場合、大量のデータが参照されることが多いが、変更される量はわずかに過ぎない。変更されたデータはプロセッサの外部にあるグラフィック装置に適時に見えるようになる必要があり、したがってキャッシュ可能ライトスルー・プロトコルが使用される。このプロトコルは、包含を維持するために、変更されたデータを含むラインをすべてのレベルのキャッシュで割り振る必要があるが、キャッシュの整合性を維持するのに部分ライン書込み機能(コストがかかる複雑な機能)を必要とすることになるライトスルー操作のため、または、ラインを次に参照するときにラインを再度フェッチする必要があるためパフォーマンスに悪影響を与えることになる書き込み時のラインのフラッシュと無効化のために、実施が複雑になる。
【0017】
したがって、無用なバス操作を回避するために、そのレベルで未定義のまま、所与のキャッシュ・レベルの上流でキャッシュラインが割り振られて有効であることを示す方法を考案することが望ましい。さらに、そのような上流の変更済みセクタに対するスヌープ・ヒットが発生するまれな場合をこの方法によって効率的に処理することができればさらに有利であろう。
【0018】
【発明が解決しようとする課題】
したがって、本発明の目的は、セクタ化された下位レベル・キャッシュを有するマルチプロセッサ・システムにおいてキャッシュ・コヒーレンシを維持する改良された方法を提供することである。
【0019】
本発明の他の目的は、キャッシュ・ラインに対するゼロ割振り操作のパフォーマンスを向上させる方法を提供することである。
【0020】
【課題を解決するための手段】
上記の目的は、マルチプロセッサ・コンピュータ・システムにおけるキャッシュ・コヒーレンシを維持する方法であって、一般に、第1の値を処理装置の第1のレベルのキャッシュ(以下「L1キャッシュ」と表記)内のキャッシュ・ライン・ブロックと、処理装置の第2のレベルのキャッシュ(以下「L2キャッシュ」と表記)内のキャッシュ・ラインのセクタとにロードするステップと、処理装置のL1キャッシュ内のキャッシュ・ライン・ブロック内の値を変更するステップと、L2キャッシュ内のキャッシュ・ラインが上流のL1キャッシュで変更されたことをL2キャッシュで表示するステップとを含む方法で達成される。この表示は、L2キャッシュ内のキャッシュ・ラインのセクタを変更せずに行われる。この方法は、処理装置のL1キャッシュのキャッシュ・ライン・ブロックをゼロ化するアロケート・アンド・ゼロ(DCBZ)命令に応答して実行することができる。前記表示するステップは、L2キャッシュ内のキャッシュ・ライン内の複数のセクタのうちのどのセクタが、変更されたL1キャッシュ内のキャッシュ・ライン・ブロックに対応するかを示す表示を含む。L2キャッシュ内のキャッシュ・ラインが2つのセクタしか持たない実施例では、どのセクタが変更されたか、またはL1キャッシュのキャッシュ・ラインに対していずれかのキャッシュ可能ライトスルー操作が実行されたかどうかを示すために3つの新しい状態を設ける。この新しいプロトコルでは、無用なバス操作を実行せずに、より上位のレベルで有効であるセクタを正しく追跡することができ、キャッシュ可能ライトスルー操作がより効率的にサポートされる。
【0021】
【発明の実施の形態】
本発明は、図1のシステムのようなマルチプロセッサ・システムにおいてキャッシュ・コヒーレンシを維持する方法を対象とするが、本発明は必ずしも従来のコンピュータ・システムではないコンピュータ・システムにも適用可能である。すなわち、コンピュータ・システムは図1に図示されていない新しいハードウェア構成要素を含んでいたり、既存の構成要素のための新規な相互接続アーキテクチャを有していてもよい。したがって、当業者なら、本発明は図に示す汎用システムには限定されないことがわかるであろう。
【0022】
次に図3を参照すると、本発明のキャッシュ・コヒーレンシ・プロトコルの一実施例を示す状態図が図示されている。このプロトコルは、図2に示す従来技術のMESIプロトコルと同じ4つの状態(変更済み、排他的、共用、及び無効)を含む点ではMESIプロトコルと類似しているが、以下で詳述する上流の未定義セクタの3つの新しい「U」状態も含む。この新しいプロトコルを本明細書では「U−MESI」プロトコルと呼ぶ。従来技術のプロトコルと同様に、この4つのM−E−S−I状態は、要求プロセッサが求める項目の初期状態とアクセスのタイプに基づいて変化することができる。この4つの状態が変化する方式は、従来技術のMESIプロトコルと一般には同じであるが、以下で述べるような異なる点がある。
【0023】
図の実施例では、U−MESIプロトコルは2つのセクタを備えたキャッシュ・ラインを有するキャッシュに合わせて適合化されている。この実施例では、(1)2つのセクタのうちの第1のセクタ(「奇数」セクタ)が変更される場合、(2)2つのセクタのうちの第2のセクタ(「偶数」セクタ)が変更される場合、及び(3)どちらのセクタも変更されない場合(両方ともキャッシュ可能ライトスルー読み取り操作の結果として共用される)の3つの事例が可能であるため3つの「U」状態がある。本明細書では、これらの状態のうちの第1の状態を「UMI」と呼び、第2の状態を「UIM」と呼び、第3の状態を「USS」と呼ぶ。U−MESIプロトコルのこの実施例では、各キャッシュ項目は項目がとることができる7つの状態(従来の4つの状態と、3つの新しい「U」状態)のうちの1つの状態を示す3ビットを有する。キャッシュ・ライン内の3つ以上のセクタがある場合は、追加の「U」状態(及びキャッシュ項目内の追加のビット)が必要になる。
【0024】
表1に、最上位(L1)操作にかかわるキャッシュ遷移を示す。
【表1】
【0025】
表1の第1項では、L1キャッシュのキャッシュ・ライン内の偶数セクタ(第2のセクタ)に対してDCBZ操作(書込みタイプの操作)が行われると、それに対応する「I」(無効)状態のより下位レベルのキャッシュが「UIM」に遷移する。すなわち、第2のセクタだけが変更済みとして示される。表1の第2項では、L1キャッシュのキャッシュ・ライン内の奇数セクタ(第1のセクタ)に対してDCBZ操作が行われると、それに対応する「I」(無効)状態のより下位のキャッシュが「UMI」に遷移する。すなわち、第1のセクタだけが変更済みとして示される。
【0026】
同じラインの奇数セクタに前にDCBZ操作が行われ、それに対応するより下位のキャッシュが「UMI」状態であるときに偶数セクタにDCBZ操作が行われるか(表1の第3項)、または同じラインの偶数セクタに前にDCBZ操作が行われ、対応するより下位のキャッシュが「UIM」状態のときに第2のセクタに対してDCBZ操作が行われた場合(表1の第4項)、下位レベルのキャッシュは「M」(変更済み)状態に状態遷移して、そのライン全体が変更されたことを示す。しかし、所与のラインのセクタについて前に1つのDCBZだけが行われ、下位レベルのキャッシュのそのラインが「UIM」または「UMI」状態であり、他方の(無効)セクタに対して「読取り」または「変更を意図した読取り」(RWITM)操作を受ける場合、下位レベルのキャッシュ・ラインは「I」(無効)になり、変更されたセクタ(Mセクタ)はより上位のキャッシュからフラッシュされる(表1の第5項)。
【0027】
表1の第6項で、対象ブロックに対するL1「ヒット」が発生し、より下位のキャッシュが「USS」状態の場合、それらはその状態のままである。すなわち、無効であるかのように扱われ、キャッシュされない。ブロックに対してキャッシュ可能/ライトスルー読取り操作が行われた場合(表1の第7項)であって、より下位のキャッシュが対応する「I」(無効)状態のブロックを持っている場合、それらのキャッシュは「USS」状態に遷移する。最後に、表1の第8項に示すように、上記で示されていない他のすべてのL1操作は通常の遷移を受ける。すなわち従来技術のMESIプロトコルに従う。
【0028】
表2に、システム・バス・スヌープ・トランザクションが「U」状態のキャッシュにどのように影響するかを示す。
【表2】
【0029】
「U」状態では、キャッシュは処置を行わなければならないと認識しているが、スヌープを上流に転送して適切な処置を判断しなければならない。表2には、「U」状態の1つに対するスヌープ・ヒットが発生するまれな場合だけが示されている。これらの状況では、より下位のキャッシュは上流キャッシュの内容をフラッシュして「I」(無効)状態に移行し、「再試行」応答を出す。ただし、「USS」状態に対する読取りスヌープ・ヒットが起こった場合は、コヒーレンシ応答は「共用」になる。
【0030】
上述のU−MESIプロトコルによって、前述の問題が両方とも解決される。すなわち、無用なバス操作を実行せずにより上位のレベルで有効なセクタが追跡され、キャッシュ可能ライトスルー操作が効率的にサポートされる。その結果、メモリ帯域幅が増大し、アドレス帯域幅が解放されると共に、バイト書込みが可能になる。
【図面の簡単な説明】
【図1】従来技術のマルチプロセッサ・コンピュータ・システムのブロック図である。
【図2】従来技術のキャッシュ・コヒーレンシ・プロトコル(MESI)を示す状態図である。
【図3】本発明のキャッシュ・コヒーレンシ・プロトコルを示す状態図である。
【符号の説明】
12 処理装置
14 入出力装置
16 システム・メモリ
18 ファームウェア
20 バス
22 プロセッサ・コア
24 一次キャッシュ
30 二次キャッシュ
Claims (2)
- メモリ・デバイスと、前記メモリ・デバイスに接続されたバスと、前記バスに接続された複数の処理装置とを備え、前記処理装置の各々が少なくとも第1のレベルのキャッシュ(以下「L1キャッシュ」と表記)及び第2のレベルのキャッシュ(以下「L2キャッシュ」と表記)を含んでいるキャッシュ階層を有し、各処理装置内のL1キャッシュがL2キャッシュの上流に設けられ、L1キャッシュが複数のL1キャッシュ・ラインを有し、L2キャッシュが複数のL2キャッシュ・ラインを有し、L1キャッシュの各L1キャッシュ・ライン及びL2キャッシュの各L2キャッシュ・ラインがそれぞれ複数のセクタを有し、L2キャッシュの各L2キャッシュ・ラインの各セクタがそれぞれL1キャッシュの各L1キャッシュ・ラインの各セクタに対応しうるマルチプロセッサ・コンピュータ・システム内でキャッシュ・コヒーレンシを維持する方法であって、
一の処理装置において、
該処理装置上で実行される特定の命令に応答して、前記メモリ・デバイスからのデータを読み取ることなく、L1キャッシュ内の一のL1キャッシュ・ラインの一のセクタの値をゼロに変更するステップと、
値が変更された前記一のL1キャッシュ・ラインの前記一のセクタに対応するL2キャッシュ内のセクタを有するL2キャッシュ・ラインの状態を指示するステップであって、該L2キャッシュ・ラインが、該L2キャッシュ・ラインには有効な値がない状態でかつ該L2キャッシュ・ラインの各セクタの少なくとも一つのセクタに対応する前記一のL1キャッシュ・ラインの少なくとも一つのセクタが存在し該セクタには有効な値が格納されている状態であることを示す上流未定義状態であることを指示するステップを含み、
前記指示するステップが、前記一のL1キャッシュ・ラインにアクセスする要求に関する他の処理装置からの照会が前記バス上でスヌープされることに応答して、前記一のL1キャッシュ・ラインの前記一のセクタの内容をL1キャッシュからフラッシュするとともに、前記L2キャッシュ・ラインの状態を前記上流未定義状態から無効状態に遷移させるステップを含む、マルチプロセッサ・コンピュータ・システム内でキャッシュ・コヒーレンシを維持する方法。 - メモリ・デバイスと、
前記メモリ・デバイスに接続されたバスと、
前記バスに接続された複数の処理装置とを備え、
前記処理装置の各々が少なくとも第1のレベルのキャッシュ(以下「L1キャッシュ」と表記)及び第2のレベルのキャッシュ(以下「L2キャッシュ」と表記)を含んでいるキャッシュ階層を有し、各処理装置内のL1キャッシュがL2キャッシュの上流に設けられ、L1キャッシュが複数のL1キャッシュ・ラインを有し、L2キャッシュが複数のL2キャッシュ・ラインを有し、L1キャッシュの各L1キャッシュ・ライン及びL2キャッシュの各L2キャッシュ・ラインがそれぞれ複数のセクタを有し、L2キャッシュの各L2キャッシュ・ラインの各セクタがそれぞれL1キャッシュの各L1キャッシュ・ラインの各セクタに対応しうるものであり、
前記処理装置の各々が、
該処理装置上で実行される特定の命令に応答して、前記メモリ・デバイスからのデータを読み取ることなく、L1キャッシュ内の一のL1キャッシュ・ラインの一のセクタの値をゼロに変更する手段と、
値が変更された前記一のL1キャッシュ・ラインの前記一のセクタに対応するL2キャッシュ内のセクタを有するL2キャッシュ・ラインの状態を指示する手段であって、該L2キャッシュ・ラインが、該L2キャッシュ・ラインには有効な値がない状態でかつ該L2キャッシュ・ラインの各セクタの少なくとも一つのセクタに対応する前記一のL1キャッシュ・ラインの少なくとも一つのセクタが存在し該セクタには有効な値が格納されている状態であることを示す上流未定義状態であることを指示する手段を備え、
前記指示する手段が、前記一のL1キャッシュ・ラインにアクセスする要求に関する他の処理装置からの照会が前記バス上でスヌープされることに応答して、前記一のL1キャッシュ・ラインの前記一のセクタの内容をL1キャッシュからフラッシュするとともに、前記L2キャッシュ・ラインの状態を前記上流未定義状態から無効状態に遷移させる手段を含む、コンピュータ・システム。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US08/839545 | 1997-04-14 | ||
US08/839,545 US6374330B1 (en) | 1997-04-14 | 1997-04-14 | Cache-coherency protocol with upstream undefined state |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH10301849A JPH10301849A (ja) | 1998-11-13 |
JP3627037B2 true JP3627037B2 (ja) | 2005-03-09 |
Family
ID=25280022
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP09745798A Expired - Fee Related JP3627037B2 (ja) | 1997-04-14 | 1998-04-09 | キャッシュ・コヒーレンシを維持する方法及びコンピュータ・システム |
Country Status (3)
Country | Link |
---|---|
US (2) | US6374330B1 (ja) |
JP (1) | JP3627037B2 (ja) |
CN (1) | CN1142502C (ja) |
Families Citing this family (53)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6345339B1 (en) * | 1998-02-17 | 2002-02-05 | International Business Machines Corporation | Pseudo precise I-cache inclusivity for vertical caches |
US6378048B1 (en) * | 1998-11-12 | 2002-04-23 | Intel Corporation | “SLIME” cache coherency system for agents with multi-layer caches |
US6526480B1 (en) * | 1998-12-10 | 2003-02-25 | Fujitsu Limited | Cache apparatus and control method allowing speculative processing of data |
US6636950B1 (en) * | 1998-12-17 | 2003-10-21 | Massachusetts Institute Of Technology | Computer architecture for shared memory access |
US6918009B1 (en) * | 1998-12-18 | 2005-07-12 | Fujitsu Limited | Cache device and control method for controlling cache memories in a multiprocessor system |
US6502171B1 (en) * | 1999-08-04 | 2002-12-31 | International Business Machines Corporation | Multiprocessor system bus with combined snoop responses explicitly informing snoopers to scarf data |
US6324617B1 (en) | 1999-08-04 | 2001-11-27 | International Business Machines Corporation | Method and system for communicating tags of data access target and castout victim in a single data transfer |
US6343347B1 (en) | 1999-08-04 | 2002-01-29 | International Business Machines Corporation | Multiprocessor system bus with cache state and LRU snoop responses for read/castout (RCO) address transaction |
US6343344B1 (en) | 1999-08-04 | 2002-01-29 | International Business Machines Corporation | System bus directory snooping mechanism for read/castout (RCO) address transaction |
US6349367B1 (en) | 1999-08-04 | 2002-02-19 | International Business Machines Corporation | Method and system for communication in which a castout operation is cancelled in response to snoop responses |
US6321305B1 (en) | 1999-08-04 | 2001-11-20 | International Business Machines Corporation | Multiprocessor system bus with combined snoop responses explicitly cancelling master allocation of read data |
US6338124B1 (en) | 1999-08-04 | 2002-01-08 | International Business Machines Corporation | Multiprocessor system bus with system controller explicitly updating snooper LRU information |
US6353875B1 (en) | 1999-08-04 | 2002-03-05 | International Business Machines Corporation | Upgrading of snooper cache state mechanism for system bus with read/castout (RCO) address transactions |
US6754779B1 (en) * | 1999-08-23 | 2004-06-22 | Advanced Micro Devices | SDRAM read prefetch from multiple master devices |
US6321306B1 (en) * | 1999-11-09 | 2001-11-20 | International Business Machines Corporation | High performance multiprocessor system with modified-unsolicited cache state |
US6345344B1 (en) * | 1999-11-09 | 2002-02-05 | International Business Machines Corporation | Cache allocation mechanism for modified-unsolicited cache state that modifies victimization priority bits |
US6349369B1 (en) * | 1999-11-09 | 2002-02-19 | International Business Machines Corporation | Protocol for transferring modified-unsolicited state during data intervention |
US6345343B1 (en) * | 1999-11-09 | 2002-02-05 | International Business Machines Corporation | Multiprocessor system bus protocol with command and snoop responses for modified-unsolicited cache state |
US6374333B1 (en) * | 1999-11-09 | 2002-04-16 | International Business Machines Corporation | Cache coherency protocol in which a load instruction hint bit is employed to indicate deallocation of a modified cache line supplied by intervention |
US6345342B1 (en) * | 1999-11-09 | 2002-02-05 | International Business Machines Corporation | Cache coherency protocol employing a read operation including a programmable flag to indicate deallocation of an intervened cache line |
US6405289B1 (en) * | 1999-11-09 | 2002-06-11 | International Business Machines Corporation | Multiprocessor system in which a cache serving as a highest point of coherency is indicated by a snoop response |
US6810467B1 (en) * | 2000-08-21 | 2004-10-26 | Intel Corporation | Method and apparatus for centralized snoop filtering |
US7069391B1 (en) * | 2000-08-30 | 2006-06-27 | Unisys Corporation | Method for improved first level cache coherency |
US6865645B1 (en) | 2000-10-02 | 2005-03-08 | International Business Machines Corporation | Program store compare handling between instruction and operand caches |
US6757785B2 (en) | 2001-11-27 | 2004-06-29 | International Business Machines Corporation | Method and system for improving cache performance in a multiprocessor computer |
EP1552396B1 (en) * | 2002-10-04 | 2013-04-10 | Callahan Cellular L.L.C. | Data processing system having a hierarchical memory organization and method for operating the same |
US7380059B2 (en) | 2003-05-16 | 2008-05-27 | Pillar Data Systems, Inc. | Methods and systems of cache memory management and snapshot operations |
US7168070B2 (en) * | 2004-05-25 | 2007-01-23 | International Business Machines Corporation | Aggregate bandwidth through management using insertion of reset instructions for cache-to-cache data transfer |
US7536513B2 (en) * | 2005-03-31 | 2009-05-19 | International Business Machines Corporation | Data processing system, cache system and method for issuing a request on an interconnect fabric without reference to a lower level cache based upon a tagged cache state |
US7512742B2 (en) * | 2006-01-17 | 2009-03-31 | International Business Machines Corporation | Data processing system, cache system and method for precisely forming an invalid coherency state indicating a broadcast scope |
GB2442984B (en) * | 2006-10-17 | 2011-04-06 | Advanced Risc Mach Ltd | Handling of write access requests to shared memory in a data processing apparatus |
US8117400B2 (en) * | 2006-10-20 | 2012-02-14 | Freescale Semiconductor, Inc. | System and method for fetching an information unit |
US8924653B2 (en) * | 2006-10-31 | 2014-12-30 | Hewlett-Packard Development Company, L.P. | Transactional cache memory system |
US8078803B2 (en) | 2008-01-30 | 2011-12-13 | Qualcomm Incorporated | Apparatus and methods to reduce castouts in a multi-level cache hierarchy |
US8218811B2 (en) | 2007-09-28 | 2012-07-10 | Uti Limited Partnership | Method and system for video interaction based on motion swarms |
US9047197B2 (en) * | 2007-10-23 | 2015-06-02 | Oracle America, Inc. | Non-coherent store instruction for fast inter-strand data communication for processors with write-through L1 caches |
US8131953B2 (en) * | 2007-12-17 | 2012-03-06 | International Business Machines Corporation | Tracking store ordering hazards in an out-of-order store queue |
US8112604B2 (en) | 2007-12-17 | 2012-02-07 | International Business Machines Corporation | Tracking load store ordering hazards |
US8423721B2 (en) | 2008-04-30 | 2013-04-16 | Freescale Semiconductor, Inc. | Cache coherency protocol in a data processing system |
US8706974B2 (en) * | 2008-04-30 | 2014-04-22 | Freescale Semiconductor, Inc. | Snoop request management in a data processing system |
US8762652B2 (en) * | 2008-04-30 | 2014-06-24 | Freescale Semiconductor, Inc. | Cache coherency protocol in a data processing system |
JP5482197B2 (ja) | 2009-12-25 | 2014-04-23 | 富士通株式会社 | 演算処理装置、情報処理装置及びキャッシュメモリ制御方法 |
US20110202727A1 (en) * | 2010-02-18 | 2011-08-18 | Qualcomm Incorporated | Apparatus and Methods to Reduce Duplicate Line Fills in a Victim Cache |
US9274971B2 (en) | 2012-11-27 | 2016-03-01 | International Business Machines Corporation | Low latency data exchange |
EP2946296A4 (en) * | 2013-01-17 | 2016-11-16 | Xockets Ip Llc | DELIBRATION PROCESSOR MODULES FOR CONNECTING TO A SYSTEM MEMORY |
US9684603B2 (en) * | 2015-01-22 | 2017-06-20 | Empire Technology Development Llc | Memory initialization using cache state |
US9892039B2 (en) * | 2015-04-21 | 2018-02-13 | Oracle International Corporation | Non-temporal write combining using cache resources |
US20180095884A1 (en) * | 2016-09-30 | 2018-04-05 | Intel Corporation | Mass storage cache in non volatile level of multi-level system memory |
US10620846B2 (en) * | 2016-10-26 | 2020-04-14 | ScaleFlux, Inc. | Enhancing flash translation layer to improve performance of databases and filesystems |
CN106502920B (zh) * | 2016-11-08 | 2019-09-24 | 郑州云海信息技术有限公司 | 一种基于mesi的缓存方法、装置和处理器 |
US10282296B2 (en) * | 2016-12-12 | 2019-05-07 | Intel Corporation | Zeroing a cache line |
EP3889787B1 (en) * | 2016-12-12 | 2023-11-01 | Intel Corporation | Apparatuses and methods for a processor architecture |
CN114297100B (zh) * | 2021-12-28 | 2023-03-24 | 摩尔线程智能科技(北京)有限责任公司 | 用于缓存的写策略调整方法、缓存装置及计算设备 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
ATE170642T1 (de) * | 1990-06-15 | 1998-09-15 | Compaq Computer Corp | Mehrstufeneinschluss in mehrstufigen cache- speicherhierarchien |
US5671391A (en) * | 1994-01-10 | 1997-09-23 | Ncr Corporation | Coherent copyback protocol for multi-level cache memory systems |
US5715428A (en) * | 1994-02-28 | 1998-02-03 | Intel Corporation | Apparatus for maintaining multilevel cache hierarchy coherency in a multiprocessor computer system |
US5577227A (en) * | 1994-08-04 | 1996-11-19 | Finnell; James S. | Method for decreasing penalty resulting from a cache miss in multi-level cache system |
US5623632A (en) * | 1995-05-17 | 1997-04-22 | International Business Machines Corporation | System and method for improving multilevel cache performance in a multiprocessing system |
US5740400A (en) * | 1995-06-05 | 1998-04-14 | Advanced Micro Devices Inc. | Reducing cache snooping overhead in a multilevel cache system with multiple bus masters and a shared level two cache by using an inclusion field |
US5737751A (en) * | 1996-03-26 | 1998-04-07 | Intellectual Business Machines Corporation | Cache memory management system having reduced reloads to a second level cache for enhanced memory performance in a data processing system |
US5778422A (en) * | 1996-04-04 | 1998-07-07 | International Business Machines Corporation | Data processing system memory controller that selectively caches data associated with write requests |
US5787469A (en) * | 1996-09-06 | 1998-07-28 | Intel Corporation | System and method for exclusively writing tag during write allocate requests |
US5787478A (en) * | 1997-03-05 | 1998-07-28 | International Business Machines Corporation | Method and system for implementing a cache coherency mechanism for utilization within a non-inclusive cache memory hierarchy |
-
1997
- 1997-04-14 US US08/839,545 patent/US6374330B1/en not_active Expired - Fee Related
- 1997-12-17 US US08/992,788 patent/US6021468A/en not_active Expired - Fee Related
-
1998
- 1998-03-23 CN CNB981056814A patent/CN1142502C/zh not_active Expired - Fee Related
- 1998-04-09 JP JP09745798A patent/JP3627037B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
US6021468A (en) | 2000-02-01 |
US6374330B1 (en) | 2002-04-16 |
JPH10301849A (ja) | 1998-11-13 |
CN1142502C (zh) | 2004-03-17 |
CN1196530A (zh) | 1998-10-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3627037B2 (ja) | キャッシュ・コヒーレンシを維持する方法及びコンピュータ・システム | |
JP3888769B2 (ja) | データ供給方法及びコンピュータ・システム | |
US5943684A (en) | Method and system of providing a cache-coherency protocol for maintaining cache coherency within a multiprocessor data-processing system | |
US5940856A (en) | Cache intervention from only one of many cache lines sharing an unmodified value | |
JP3254433B2 (ja) | 再試行されるスヌープ・ヒットに対してコヒーレンシ状態を最終的な状態に向かって進める方法 | |
US5715428A (en) | Apparatus for maintaining multilevel cache hierarchy coherency in a multiprocessor computer system | |
US5325504A (en) | Method and apparatus for incorporating cache line replacement and cache write policy information into tag directories in a cache system | |
US5946709A (en) | Shared intervention protocol for SMP bus using caches, snooping, tags and prioritizing | |
US6345342B1 (en) | Cache coherency protocol employing a read operation including a programmable flag to indicate deallocation of an intervened cache line | |
US5963974A (en) | Cache intervention from a cache line exclusively holding an unmodified value | |
JP3714617B2 (ja) | キャッシュ階層で首尾一貫性を維持する方法、コンピュータ・システム、及び処理ユニット | |
US5940864A (en) | Shared memory-access priorization method for multiprocessors using caches and snoop responses | |
US6321306B1 (en) | High performance multiprocessor system with modified-unsolicited cache state | |
US5943685A (en) | Method of shared intervention via a single data provider among shared caches for SMP bus | |
US6574714B2 (en) | Efficient instruction cache coherency maintenance mechanism for scalable multiprocessor computer system with write-back data cache | |
US6615321B2 (en) | Mechanism for collapsing store misses in an SMP computer system | |
US5996049A (en) | Cache-coherency protocol with recently read state for data and instructions | |
US7464227B2 (en) | Method and apparatus for supporting opportunistic sharing in coherent multiprocessors | |
US6658536B1 (en) | Cache-coherency protocol with recently read state for extending cache horizontally | |
EP0976047A1 (en) | Read operations in multiprocessor computer system | |
US6484241B2 (en) | Multiprocessor computer system with sectored cache line system bus protocol mechanism | |
US6615320B2 (en) | Store collapsing mechanism for SMP computer system | |
US6553462B2 (en) | Multiprocessor computer system with sectored cache line mechanism for load and store operations | |
JPH11328027A (ja) | キャッシュ・コヒ―レンスを維持する方法及びコンピュ―タ・システム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20040401 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20041116 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20071217 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20081217 Year of fee payment: 4 |
|
LAPS | Cancellation because of no payment of annual fees |