(57)【要約】【課題】キャッシュの機能を高める。【解決手段】プロセッサ(102)をメインメモリ(106)に動作可能に結合させるためのキャッシュ(104)が提供された。前記キャッシュは、キャッシュメモリ(108)と、該キャッシュメモリに動作可能に結合されたキャッシュコントローラ(110)とを含む。前記キャッシュメモリか又は前記メインメモリに適合されることとなるメモリリクエストを、受け取るよう前記キャッシュコントローラが構成される。追加的には、キャッシュ活動情報を処理することによって、少なくとも１つの前記メモリリクエストが、前記キャッシュメモリをバイパスさせられるように、前記キャッシュコントローラが構成される。【選択図】図１
2008117388.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサ（１０２）をメインメモリ（１０６）に動作可能に結合させるためのキャッシュ（１０４）であって、
キャッシュメモリ（１０８）と、
前記キャッシュメモリ（１０８）に動作可能に結合されたキャッシュコントローラ（１１０）であって、該キャッシュメモリ（１０８）か又は前記メインメモリ（１０６）に適合されたメモリリクエストを受け取るよう構成された、キャッシュコントローラ
とを備え、
キャッシュ活動情報を処理することによって、前記メモリリクエストのうちの少なくとも１つが、前記キャッシュメモリ（１０８）をバイパスさせられるように、前記キャッシュコントローラ（１１０）が更に構成されていることからなる、キャッシュ。
【請求項２】
前記キャッシュメモリ（１０８）内に保持されていない、キャッシュラインの読み出しリクエストか又は書き込みリクエストと、前記キャッシュメモリ（１０８）内に変更されずに保持されている、キャッシュラインの読み出しリクエスト、とのうちの１つを、前記少なくとも１つのメモリリクエストが含むことからなる、請求項１に記載のキャッシュ。
【請求項３】
前記キャッシュメモリ（１０８）内の有効で変更されたキャッシュラインのライン書き込みに対する書き込みリクエストと、前記キャッシュメモリ（１０８）内の有効で変更されていないキャッシュラインに対する書き込みリクエスト、とのうちの１つを、前記少なくとも１つのメモリリクエストが含み、前記キャッシュコントローラ（１１０）は、前記書き込みリクエストに応答して前記キャッシュメモリ（１０８）内の前記キャッシュラインを無効にするよう構成されている、請求項１に記載のキャッシュ。
【請求項４】
前記キャッシュメモリ（１０８）内に保持されていないキャッシュラインに対する読み出しリクエストを、前記少なくとも１つのメモリリクエストが含み、前記キャッシュコントローラ（１１０）が、前記読み出しリクエストに応答して、
前記読み出しリクエストを、前記メインメモリ（１０６）に送り、
前記キャッシュメモリ（１０８）内のキャッシュライン記憶域を、前記キャッシュラインに割り当て、
前記メインメモリ（１０６）から前記キャッシュラインを受け取り、
前記キャッシュラインを前記プロセッサ（１０２）に向けて送り、及び、
前記キャッシュラインが前記キャッシュメモリ（１０８）内に格納されていないことを指示するために、前記割り当てられたキャッシュライン記憶域に関連付けられたキャッシュタグを更新する
ように構成されていることからなる、請求項１に記載のキャッシュ。
【請求項５】
前記キャッシュコントローラ（１１０）が、前記キャッシュメモリ（１０８）の過負荷状態を検出するか又は予測するよう更に構成されている、請求項１に記載のキャッシュ。
【請求項６】
プロセッサをメインメモリに動作可能に結合させるキャッシュを動作させるための方法（２００）であって、
前記キャッシュのキャッシュメモリか又は前記メインメモリに適合されることになるメモリリクエストを受け取り（２０２）、及び、
前記キャッシュの活動情報を処理することによって、前記メモリリクエストのうちの少なくとも１つが、前記キャッシュメモリをバイパスさせられる（２０４）
ことを含むことからなる、方法。
【請求項７】
前記キャッシュメモリ内に保持されていないキャッシュラインの読み出しリクエストか又は書き込みリクエスト（４０２）と、前記キャッシュメモリ内において変更されずに保持されているキャッシュラインの読み出しリクエスト（４０６）、とのうちの１つを、前記少なくとも１つのメモリリクエストが含むことからなる、請求項６に記載の方法。
【請求項８】
前記キャッシュメモリ内の有効で変更されたキャッシュラインのライン書き込みに対する書き込みリクエスト（４１６）と、前記キャッシュメモリ内の有効で変更されていないキャッシュラインに対する書き込みリクエスト（４１０）、とのうちの１つを、前記少なくとも１つのメモリリクエストが含み、前記方法が、前記書き込みリクエスト（４１０、４１６）に応答して、前記キャッシュメモリ内の前記キャッシュラインを無効にすること（４１４、４２０）を更に含むことからなる、請求項６に記載の方法。
【請求項９】
前記キャッシュメモリ内に保持されていないキャッシュラインに対する読み出しリクエスト（５０２）を前記少なくとも１つのメモリリクエストが含み、前記方法が、前記読み出しリクエスト（５０２）に応答して、
前記読み出しリクエストを、前記メインメモリに送り（５０４）、
前記キャッシュメモリ内のキャッシュライン記憶域を、前記キャッシュラインに割り当て（５０６）、
前記メインメモリから前記キャッシュラインを受け取り（５０８）、
前記キャッシュラインを前記プロセッサに向けて送り（５１０）、及び、
前記キャッシュラインが前記キャッシュメモリ内に格納されていないことを指示するために、前記割り当てられたキャッシュライン記憶域に関連付けられたキャッシュタグを更新する（５１８）
ことを更に含むことからなる、請求項６に記載の方法。
【請求項１０】
前記キャッシュメモリの過負荷状態を検出することか又は予測することを更に含むことからなる、請求項６に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、キャッシュに関し、特にプロセッサをメインメモリに動作可能に結合させるキャッシュに関する。
【背景技術】
【０００２】
コンピュータシステムは、プロセッサがメインメモリ内のデータにアクセスすることに一般に関連した明らかな時間遅延か又はレイテンシを低減させることにより、コンピューティング性能とスループットとを改善するために、キャッシュを頻繁に利用する。このようなコンピュータシステムは、１つか又は複数のキャッシュを用いる可能性があり、それらキャッシュは各々、キャッシュコントローラのような制御ロジックと共にキャッシュメモリを含む。一般には、キャッシュメモリの各々はメインメモリよりも小さく且つより高速であり、その結果、プロセッサは、キャッシュメモリによるデータのコピーに対し、メインメモリによるデータよりも、より迅速に且つ即座にアクセスすることができる。この目的を達成するために、コンピュータシステムは、システムプロセッサの最高メモリアクセス速度（すなわち、「要求レート（demand rate）」）を処理するのに十分なアクセス帯域幅を提供するメモリを有したキャッシュを頻繁に用いる。
【０００３】
典型的には、異なるタイプのプロセッサ仕事量は、異なる要求レートを要する。キャッシュが、その関連したプロセッサの最大要求レートを処理するように設計されていない場合には、キャッシュメモリに対してアクセスするための多くのリクエストが、ある期間の間、キュー（待ち行列）に入れられる必要がある。メモリリクエストが高速で継続する場合には、キューに入れられたメモリアクセスのうちのいくつかに対する結果としてのレイテンシがメインメモリへの直接アクセスに関連したレイテンシよりも長いレベルにまでおそらく、アクセスキューの長さが増長する。結果として、それらの期間の間、キャッシュが実際にはメモリアクセスレイテンシを延長させ、従って、コンピュータシステム内における性能障害となる。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
こうした、性能における低下を防止するために、キャッシュは、典型的には、上述のように最大要求レートを処理するように設計され、提供するためにキャッシュメモリが必要とする広いアクセス帯域幅に起因して、該キャッシュが、複雑なキャッシュ設計と、相応の高価なキャッシュメモリとを頻繁に含む可能性がある。更には、いくつかのシステムにおいて、必要な帯域幅を提供するキャッシュをシステム設計者が実装することを、集積回路（ＩＣ）ピン配列、プリント回路基板（ＰＣＢ）レイアウト、熱特性、設計の複雑性、製品化までの時間、及び製造コストのような様々な物理的制約か又は設計上の制約が、妨げる可能性があり、従って、設計者を、コンピュータシステム内おいて、キャッシュの実装を先行するより他に完全に手がない状態にする。
【課題を解決するための手段】
【０００５】
本発明の一実施例は、プロセッサ（１０２）をメインメモリ（１０６）に動作可能に結合させるためのキャッシュ（１０４）であって、キャッシュメモリ（１０８）と、前記キャッシュメモリ（１０８）に動作可能に結合されたキャッシュコントローラ（１１０）であって、該キャッシュメモリ（１０８）か又は前記メインメモリ（１０６）に適合されたメモリリクエストを受け取るよう構成された、キャッシュコントローラとを備え、キャッシュ活動情報を処理することによって、前記メモリリクエストのうちの少なくとも１つが、前記キャッシュメモリ（１０８）をバイパスさせられるように、前記キャッシュコントローラ（１１０）が更に構成されることからなる、キャッシュである。
【発明の効果】
【０００６】
キャッシング機能を高めることができる。
【実施例】
【０００７】
図１は、本発明の一実施形態、すなわち、コンピュータシステム１００内において用いられるキャッシュ１０４を示す。ここで、該キャッシュは、プロセッサ１０２をメインメモリ１０６に結合させる。キャッシュ１０４は、キャッシュメモリ１０８と、該キャッシュメモリ１０８に動作可能に結合されたキャッシュコントローラ１１０とを含み、キャッシュメモリ１０８か又はメインメモリ１０６に適合される（又はキャッシュメモリ１０８か又はメインメモリ１０６によって条件が満たされる）、プロセッサ１０２から等のメモリリクエストを、受け取るよう構成される。キャッシュコントローラ１１０はまた、キャッシュ活動情報（キャッシュアクティビティ情報）を処理することによって、メモリリクエストのうちの少なくとも１つが、キャッシュメモリ１０８をバイパスさせられるように構成される。
【０００８】
同様に、図２は、図１のキャッシュ１０４のようなキャッシュを動作させる方法２００のフローチャートを提供する。まず最初に、キャッシュのキャッシュメモリか又はメインメモリに適合されることになる（又はキャッシュメモリか又はメインメモリによって条件が満足される）メモリリクエストが受け取られる（動作２０２）。キャッシュの活動情報が処理されることによって、メモリリクエストのうちの少なくとも１つが、キャッシュメモリをバイパスさせられる（動作２０４）。
【０００９】
図３において、本発明の別の実施形態のブロック図、すなわち、コンピュータシステム３００内において用いられるキャッシュ３０４が示されている。キャッシュ３０４は、プロセッサ３０２とメインメモリ３０６とを動作可能に結合する。オプションで、少なくとも１つの上位キャッシュ３２０が、プロセッサ３０２とキャッシュ３０４とを結合させることができる。キャッシュ３０４をメインメモリ３０６に結合させる１つか又は複数の下位キャッシュ（図示せず）を、他の実施形態に含めることができる。別の実施形態において、プロセッサ３０２か又は別のプロセッサかのいずれかに結合される、キャッシュ３０４と同じレベルに存在する（又は常駐する）他のキャッシュが、コンピュータシステム３００内に存在することが可能である。
【００１０】
キャッシュ３０４は、メインメモリ３０６内に存在する（又は常駐する）データの一部のコピーを格納するよう構成されたキャッシュメモリ３０８を含む。キャッシュメモリ３０８は、典型的には、キャッシュラインのうちのあるグループとして編成され、該キャッシュラインの各々は、メインメモリ３０６における多数の連続したアドレス指定可能な位置のコピーを格納することができる。キャッシュラインタグに対するランダムアクセスを可能にするキャッシュタグアレイ３１６もまた、キャッシュ３０４内に提供される。各タグは、キャッシュメモリ３０８内のキャッシュラインに関連付けられており、メインメモリ３０６のいずれの位置がその特定のキャッシュラインにおいて格納されているかを示す。
【００１１】
キャッシュ３０４はまた、キャッシュ３０４のいくつかの機能を制御するキャッシュコントローラ３１０も含む。例えば、キャッシュコントローラ３１０は、キャッシュタグアレイ３１６によってキャッシュメモリ３０８の各キャッシュラインの状態を追跡し続ける。例えば、無効なキャッシュラインは、目下有効なデータを保持していないキャッシュラインである。有効で変更されていないキャッシュラインは、メインメモリ３０６内における対応するデータに一致するデータのコピーを保持するが、有効で変更されたキャッシュラインは、キャッシュライン内のデータがメインメモリ３０６内における対応するデータにもはや一致しないように更新されている。この場合には、別のキャッシュか又はプロセッサがメインメモリ３０６からそのデータを読み出す前に、キャッシュライン内のデータが、メインメモリ３０６内に書き戻されなければならない。
【００１２】
キャッシュコントローラ３１０はまた、キャッシュメモリ３０８とシステム３００の他の部分とを含むアクセス活動（又はアクセス作用、又はアクセス機能）に基づいて、キャッシュメモリ３０８内の各キャッシュラインの状態を変更する。例えば、キャッシュコントローラ３１０が、有効で変更されたキャッシュラインをパージ（purge）し、次いで、該キャッシュラインをメインメモリ３０６へと書き戻して、別のキャッシュラインのためにキャッシュメモリ３０８内における場所を空ける場合には、該キャッシュコントローラ３１０は、そのキャッシュラインの状態を、有効且つ変更された状態から、無効に変化させる。典型的には、キャッシュコントローラ３１０は、変更・所有・排他・共有・無効状態（ＭＯＥＳＩ：Modified-Owned-Exclusive-Shared-Invalid）プロトコルのような所定のキャッシュコヒーレンシプロトコルに従って、キャッシュラインの状態変化を制御する。これらのキャッシュライン状態か又は他のキャッシュライン状態を含む他のキャッシュコヒーレンシプロトコルを、他の実施形態において利用することもできる。メインメモリ３０６の同じメモリアドレスの各コピーが、キャッシュ３０４内とコンピュータシステム３００の他のキャッシュ内とで同じ値を保持し、その結果、システム３００のアドレス空間全体が、全体を通して一定のままとなるということを保証するために、キャッシュコヒーレンシプロトコルの使用が役立つ。
【００１３】
図３において、キャッシュコントローラ３１０はまた、キャッシュタグキュー３１２も含む。該キャッシュタグキュー３１２は、キャッシュ３０４による処理を待っているキャッシュタグの先入れ先出し（ＦＩＦＯ）待ち行列として主に動作する。より具体的には、キャッシュメモリ３０８内のデータに対する、プロセッサ３０２からか又は上位キャッシュ３２０からの各アクセスリクエストが、キャッシュタグに関連付けられる。キャッシュコントローラ３１０は、キュー内の各キャッシュタグを取得し、タグアレイ３１６内において対応するタグを検索する。一致が見出された場合には、リクエストされたデータの有効なコピーが、キャッシュメモリ３０８内に存在し、そのキャッシュラインを使用して、該リクエストが、処理されることが可能となる。一致が見出されない場合には、該リクエストされたデータは、典型的には、メインメモリ３０６を用いてアクセスされなければならない。
【００１４】
メモリの読み出し及び書き込みリクエストを処理することに加えて、キャッシュコントローラ３１０はまた、キャッシュ３０４をプロセッサ３０２にか又は上位キャッシュ３２０に結合させるバス３１８のような接続されたバス上の活動を「スヌープする（又は探る：snoop）」、すなわち監視することができる。他のキャッシュも結合されることが可能であるメインメモリ３０６にキャッシュ３０４を結合させる第２のバス３２２を、類似の手法でスヌープすることもできる。スヌープすることにより、キャッシュメモリ３０８内のキャッシュラインの状態に影響を及ぼす可能性のある、コンピュータシステム３００による他のメモリアクセス活動（又は作用）を、キャッシュコントローラ３１０が検出することができる。この同じ目的のために、キャッシュコントローラ３１０はまた、コンピュータシステム３００の様々な構成要素によるブロードキャストメッセージを送出し且つ受け取ることができる。別の実施形態において、キャッシュコントローラ３１０は、システム３００のキャッシュ間で共有されるキャッシュコヒーレンシディレクトリ（図３内には図示せず）にアクセスすることができ、その結果、システム３００内の各キャッシュラインの状態を、該ディレクトリによって各キャッシュに対して知らせることが可能である。
【００１５】
キャッシュコントローラ３１０はまた、キャッシュメモリ３０８の過負荷状態を検出するようにか又は予測するように構成された制御モジュールとして作用するキャッシュメモリ過負荷検出モジュール３１４を含む。このような過負荷の検出か又は予測に基づいて、制御モジュール３１４がキャッシュコントローラ３１０に指示することによって、１つか又は複数の到来するメモリリクエストが、キャッシュメモリ３０８をバイパスさせられて、メインメモリ３０６へと導かれる。制御モジュール３１４を、キャッシュコントローラ３１０内において組み込むことができるか、又はキャッシュコントローラ３１０によってアクセスされるよう構成された別個の回路として実装することができる。
【００１６】
一実施形態において、消費されているキャッシュメモリ３０８によって提供される最大帯域幅の量か又は割合を示す任意の情報とすることが可能であるキャッシュ活動情報によって、キャッシュメモリ３０８の過負荷を制御モジュール３１４が検出するか又は予測する。例えば、制御モジュール３１４は、キャッシュメモリ３１８をプロセッサ３０２にか又は上位キャッシュ３２０に結合させるバス３１８の一部分を監視して、任意のフリーのバスサイクルが利用可能であるかどうかを決定することができる。利用可能でない場合には、キャッシュメモリ３０８の利用は、その最大の耐えうるレベルにおいてか又はその付近とすることができる。別の実施形態において、例えばプロセッサ３０２からの読み出し動作か或いはプロセッサ３０２又はメインメモリ３０６からのデータ更新動作を保持するキャッシュタグキュー３１２の長さを制御モジュール３１４が監視して、キャッシュメモリ３０８が、キュー３１２によって受け取られているメモリリクエストに、遅れずについて行くことができるかどうかを決定することができる。一実施例において、読み出し動作リクエストとデータ更新動作リクエストとが、データ読み出しキュー及びデータ更新キューのような別個のキャッシュタグキュー３１２内に保持される。キュー３１２内において待機しているアクティブなリクエストの数がより多くなればなるほど、キャッシュメモリ３０８は、それらのリクエストを処理することを更に滞らせ、該リクエストの各々が処理される前に更に長く待つ必要がある。他の実施形態において、制御モジュール３１４は、キャッシュ３０４の動作の他の態様か又は特性を監視して、キャッシュ活動情報をもたらすこともできる。
【００１７】
更に、キャッシュ活動情報を処理して、監視された値の最大値か或いは稼働平均（又は移動平均）のような１つか又は複数のキャッシュ活動統計値を生成することができる。例えば、１つのキャッシュ活動統計値は、最後の１分間にわたって平均化されたキャッシュタグキュー３１２の長さの稼働平均とすることができる。別のキャッシュ活動統計値は、最後の３０秒間にわたるキャッシュメモリ３０８に結合されたバス３１８の利用の最大値とすることができる。多くの他のタイプの統計値もまた生成することができる。別の例において、様々なキャッシュ活動情報の統計値を組み合わせて、キャッシュメモリ３０８が過負荷である（従って、プロセッサ３０２、上位キャッシュ３２０か、又はコンピュータシステム３００の別の構成要素から受け取られている１つか又は複数のメモリリクエストの処理が遅延される）か又はまもなく過負荷となるかどうかに関する指示をもたらすことができる。
【００１８】
一般には、キャッシュ活動情報か又は統計値が、ある所定レベルに達すると、制御モジュール３１４は、キャッシュメモリ３０８が過負荷状態であるか又は過負荷状態になるであろうこと、及び１つか又は複数の到来するリクエストがその時点でキャッシュメモリ３０８をバイパスするべきであるということを推定することができる。一例において、キャッシュメモリ３０８をバイパスする読み出しリクエストを、メインメモリ３０６に直接ルーティングすることができ、その結果、キャッシュメモリ３０８は、データがその中に保持されているとしても、該リクエストを処理しない。別の例において、キャッシュメモリ３０８内に存在しない、メインメモリ３０６から読み出されているデータを含むデータ更新リクエストは、該データがキャッシュメモリ３０８に格納されないようにキャッシュメモリ３０８をバイパスすることができる。更に、プロセッサ３０２によって提供されたデータによって発生するデータ更新リクエストは、キャッシュメモリ３０８をバイパスして、メインメモリ３０６に直接書き込まれることが可能である。到来する十分なリクエストが、キャッシュメモリ３０８をバイパスして、過負荷状態が緩和されていることをキャッシュ活動情報か又は統計値が示すと考えると、制御モジュール３１４は、将来のメモリリクエストがキャッシュメモリ３０８をバイパスする必要がないことを指示することができ、従って、キャッシュ３０４を、動作のより通常のモードに戻すことができる。一実施形態において、キャッシュメモリ３０８をバイパスすることを開始するために用いられる所定レベルは、バイパスモードをディセーブルにするために使用されるレベルと同じレベルとすることができる。別の実施形態において、バイパスすることをディセーブルにするために使用されるレベルは、バイパスを開始するために使用される所定レベルよりも低い値とすることができる。その場合には、バイパスモードをイネーブル及びディセーブルにするために２つの異なる統計上の又は情報のレベルを使用することによって、キャッシュメモリ３０８の活動の一時的な急増か又は低下に応答して、キャッシュ３０４内における通常モードとバイパスモードとの間での不必要な又は不当なスイッチンングを、結果として、ある形のヒステリシスを備えた制御モジュール３１４によって、防ぐことができる。
【００１９】
キャッシュコヒーレンシを維持するために、幾つかの実施形態は、キャッシュラインの現在の（目下の）状態を考慮することができる。該キャッシュラインの現在の状態が、キャッシュタグアレイ３１６内のタグ参照によって頻繁に判断されて、該キャッシュラインを含むメモリリクエストが、キャッシュメモリ３０８をバイパスすることが可能であるかどうかが決定される。図４は、リクエストされたキャッシュラインの現在の状態に提供されるこうした決定を行わせるための方法４００を示す。一例において、キャッシュコントローラ３１０によって、概して、キャッシュメモリ３０８内に目下保持されていないキャッシュラインに対する任意の読み出し又は書き込みリクエスト（動作４０２）が、キャッシュメモリ３０８をバイパスすることが可能にされる（動作４０４）。リクエスト内に含まれるデータが、後のリクエストのためのアクセスレイテンシを改善するためにキャッシュメモリ３０８内において利用可能とならないことになるが、キャッシュメモリ３０８をバイパスすることが、別様にはキャッシュメモリ３０８の帯域幅の過負荷となる可能性のあるものを低減させることとなる。更には、リクエストに関連付けられたデータのコピーが、キャッシュメモリ３０８内に格納されることにはならないため、そのデータに関してキャッシュコヒーレンシ問題が発生しない。
【００２０】
キャッシュメモリ３０８内において保持された、有効で、且つ変更されていない、すなわち「クリーン（clean）」な、キャッシュラインの読み出し又は書き込みリクエストに関して、類似の状況が当てはまる。読み出しリクエストの場合（動作４０６）には、メインメモリ３０６内とキャッシュメモリ３０８内とにおけるデータコピーが一致するので、キャッシュコヒーレンシを維持させながら、関連付けられたデータを、メインメモリ３０６から読み出して、リクエストを行っているプロセッサ３０２か又は上位キャッシュ３２０に直接送ることができる（動作４０８）。同様に、有効で且つ変更されていないキャッシュラインの書き込みを含む書き込みリクエストの場合には（動作４１０）、該書き込みリクエストは、キャッシュメモリ３０８をバイパスすることができる（動作４１２）。追加的には、キャッシュコントローラ３１０は、キャッシュメモリ３０８内に格納された対応するキャッシュラインを、そのデータがメインメモリ３０６にちょうど書き込まれたばかりのデータにはもはや一致しない可能性があるため、無効にする（動作４１４）。
【００２１】
有効であるが、変更されている、すなわち「ダーティ（dirty）な」、キャッシュラインをメモリリクエストが含む場合には、キャッシュライン内における全てのデータが書き込まれることとなる完全なライン書き込みを含む書き込みリクエスト（動作４１６）のみが、キャッシュメモリ３０８をバイパスすることができ（動作４１８）、従って、関連付けられたデータがメインメモリ３０６内に直接的に書き込まれる。その場合には、キャッシュタグアレイ３１６内における影響を受けたキャッシュラインに関連付けられたキャッシュタグを更新することによって、キャッシュコントローラ３１０はまたキャッシュメモリ３０８内のキャッシュラインを無効にする（動作４２０）。別様には、メモリリクエストが、ダーティ且つ有効なキャッシュラインの読み出しか又は部分的な書き込みである場合には、キャッシュメモリ３０８をバイパスすることが利用可能ではない（動作４２２）。より具体的には、キャッシュメモリ３０８をバイパスすることを、このような読み出しリクエストが可能にされる場合には、プロセッサ３０２か又は上位キャッシュ３２０に送られるデータは、キャッシュメモリ３０８内の更新されたデータラインに一致しないこととなる。部分的な書き込みリクエストが、キャッシュメモリ３０８をバイパスすることを可能にされて、メインメモリ３０６に直接送られる場合には、キャッシュメモリ３０８内における対応するキャッシュラインにおける変更されたデータの全てが、メインメモリ３０６内において上書きされたかどうかを、キャッシュコントローラ３１０は知らない。結果として、そのキャッシュライン内におけるメインメモリ３０６内のデータは、プロセッサ３０２か又は上位キャッシュ３２０によって理解されるので、データの真の状態を表さないこととなる可能性がある。
【００２２】
幾つかのコンピュータシステム３００において、キャッシュ３０４と、上位キャッシュ３２０と、プロセッサ３０２と、コンピュータシステム３００の他の構成要素との間の伝達量を低減するために、キャッシュ包括性（cache-inclusiveness）が用いられる。キャッシュ包括性は、典型的には、図３の上位キャッシュ３２０のような上位キャッシュの有効な内容が、キャッシュ３０４のような次のより下位のキャッシュに複製されることを必要とする。結果として、ネゴシエーションの量、従って、キャッシュレベル間の伝達量が大幅に低減され、そのため、他のメモリリクエストのために、キャッシュ３０４を上位キャッシュ３２０に結合させるバス３１８のようなシステム３００のバスのうちの幾つかにわたって、幾つかの利用可能な帯域幅が解放される。
【００２３】
本発明の実施形態のキャッシュコントローラ３１０は、１つか又は複数のキャッシュラインがキャッシュメモリ３０８内に割り当てられるが、そのキャッシュライン内における対応するデータは有効でないということを指示することにより、キャッシュ包括性をサポートすることができる。図５は、キャッシュバイパス機能を提供している間、キャッシュ包括性を維持するための方法５００を提供する。例えば、キャッシュメモリ３０８内において保持されないキャッシュラインの場合に、上位キャッシュ３２０がメモリ読み出しリクエストをキャッシュ３０４に転送する場合（動作５０２）には、キャッシュコントローラ３１０は、該リクエストをメインメモリ３０６に送って（動作５０４）、キャッシュメモリ３０８内にキャッシュラインを割り当てる（動作５０６）こととなる。キャッシュコントローラ３１０が、キャッシュラインに対応するリクエストされたデータをメインメモリ３０６から受け取ると（動作５０８）、キャッシュコントローラ３１０は、上位キャッシュ３２０によってそのキャッシュラインをプロセッサ３０２に向けて送ることができる（動作５１０）。キャッシュコントローラ３１０はまた、次いで、読み出しリクエストがキャッシュメモリ３０８をバイパスすべきかどうかを判定することができる（動作５１２）。バイパスすべきでない場合には、キャッシュコントローラ３１０は、メインメモリ３０６から戻されたデータを、キャッシュメモリ３０８の割り当てられたキャッシュライン内へと格納することができ（動作５１４）、従って、キャッシュタグアレイ３１６内において適切なタグを更新することができる（動作５１６）。バイパスすべきである場合には、データが、キャッシュメモリ３０８内の関連付けられたキャッシュライン内に格納されていないが、代りに上位キャッシュ３２０に格納されていることを指示するために、キャッシュコントローラ３１０は、割り当てられたキャッシュラインに対してキャッシュタグアレイ３１６を、代りにマークする（印付ける）ことができる（動作５１８）。この方法を用いることにより、キャッシュ３０４は、キャッシュ包括性の下で要求されるように上位キャッシュ３２０に格納されたデータの全ての内容の指示を依然として保持する一方で、キャッシュメモリ３０８の予測されたか又は検出された過負荷を緩和させるために依然としてキャッシュメモリ３０８をバイパスする。
【００２４】
一実施形態において、キャッシュコントローラ３１０は、ある特定のメモリリクエスト分類に関連付けられるメモリリクエストをバイパスするよう構成される。例えば、キャッシュコントローラ３１０が、キャッシュメモリ３０８の過負荷状態を予測するか又は検出するある期間の間、キャッシュコントローラ３１０は、バイパスモードの場合に利用可能な全てのメモリリクエストに対して、あるタイプのデータについてか又はあるプログラムからのメモリリクエストに関して、キャッシュメモリ３０８をバイパスさせることができる。こうした機能は、例えば、他のものと比較されたあるタイプのデータをキャッシュすることからコンピュータシステム３００がより利益を得る場合に、有益な可能性がある。更には、メモリリクエストの一部のみを、メインメモリ３０６に直接導くことにより、キャッシュメモリ３０８上における負荷をかなり低減することができ、従って、キャッシュ３０４が、非バイパスモードにおいて他のメモリリクエストを正常に処理することが可能となる。
【００２５】
この特定の実施形態の下において、メモリリクエストを、命令に対するリクエストとデータに対するリクエストとに分類するなどのように、多くの方法において分類することができる。更に、そのデータリクエストを、ローカルデータリクエストとリモートデータリクエストとに更に分類することができる。ローカルデータは、対称型マルチプロセッサ（ＳＭＰ：symmetric multi-processor）システムのようなマルチプロセッサシステムのプロセッサ３０２の付近に配置されたメインメモリ３０６の一部内において格納されるデータとすることができる一方で、リモートデータは、別のプロセッサによって識別されたメインメモリ３０６の一部内に格納されることが可能である。メモリリクエストを、メインメモリ３０６内におけるリクエストされたデータのアドレスによって分類することもでき、その結果、ある範囲内におけるデータに対するメモリリクエストは、キャッシュメモリ３０８によって処理されるが、その他の範囲のデータに対するメモリリクエストは、キャッシュメモリ３０８をバイパスすることになる。
【００２６】
上述のように、本発明の様々な実施形態によって、１つか又は複数のメモリリクエストがキャッシュメモリをバイパスするように導かれ、該リクエストがメインメモリに直接ルーティングされることを、キャッシュが可能になる。一実施形態において、キャッシュに関連付けられたキャッシュコントローラは、その対応するキャッシュメモリの過負荷が予測されるか又は検出される時に、このバイパスモードを用いる。バイパスモードの実施において、コンピュータシステムの性能が、キャッシュを実装していないシステムに関連付けられた性能レベルより下にまで低下しないように、キャッシュコントローラは、キャッシュメモリの仕事量を低減させる。この機能によって、より低速のキャッシュメモリを用いた、より低コスト、より低性能のキャッシングシステムが、コンピュータシステム内に組み込まれることが可能となる一方で、システム性能の十分な向上を依然として提供する。更に、設計上の制約か又は物理的制約が、これまでキャッシュの使用を妨げていたシステム内に、キャッシュシステムを組み込むことができる。従って、本明細書内において検討されたシステム及び方法の下における十分な利点のために、より低速のキャッシュメモリを利用することができる一方で、一実施形態において、全てのメモリリクエストと、スヌープ要求と、キャッシュを制御すること及びキャッシュコヒーレンシを維持することが含められた他のタスクとに対して、最大システム仕事量の条件下において応答されるように、キャッシュコントローラと関連付けられたタグアレイとが設計されることを、保証することによって、キャッシング機能を高めることができる。
【００２７】
本明細書内において本発明のいくつかの実施形態が説明されてきたが、本発明の範囲によって包含される他の実施形態も可能である。例えば、本発明のいくつかの実施形態が、図３内に示された特定のコンピュータシステムアーキテクチャに関連して上記に説明されたが、上述のＳＭＰシステムのようなマルチプロセッサ方式を含む多くの他のコンピュータアーキテクチャも、本発明の様々な態様から利益を得ることができる。例えば、本発明の様々な実施形態を実施しつつ、プロセッサの数、キャッシュの数、キャッシュレベルの数、及び他のパラメータのような、コンピュータシステムの様々な特性を、変更することができる。追加的には、本明細書内において説明されたキャッシュが、コンピュータシステム内において用いられる一方で、専用処理システム、組込み処理システム、及びそれらに類似したもの等の任意のタイプの処理システムについてのキャッシュに本発明の実施形態を組み込むことができる。本発明の更なる実施例を生成するために、一実施形態の態様を、それらの代替の実施形態の態様と組み合わせることができる。従って、本発明は特定の実施形態のコンテキストにおいて説明されてきたが、そのような説明は、例示のために提供され、限定のためではない。従って、本発明の正当な範囲は、添付の特許請求の範囲によってのみ定められる。
【図面の簡単な説明】
【００２８】
【図１】本発明の一実施形態によるキャッシュを用いるコンピュータシステムのブロック図である。
【図２】プロセッサをメインメモリに動作可能に結合させるためのキャッシュを動作させるための本発明の一実施形態による一方法のフローチャートである。
【図３】本発明の別の実施形態によるキャッシュを用いるコンピュータシステムのブロック図である。
【図４】本発明の別の実施形態による、図３のキャッシュのキャッシュメモリをバイパスすることをメモリリクエストが可能にされるかどうかを決定するための一方法のフローチャートである。
【図５】本発明の別の実施形態による、バイパス機能を提供している間、図３のキャッシュにおけるキャッシュ包括性を維持するための一方法のフローチャートである。
【符号の説明】
【００２９】
１０２  プロセッサ
１０４  キャッシュ
１０６  メインメモリ
１０８  キャッシュメモリ
１１０  キャッシュコントローラ
【図１】
2008117388.tif 000003
【図２】
2008117388.tif 000004
【図３】
2008117388.tif 000005
【図４】
2008117388.tif 000006
【図５】
2008117388.tif 000007