(57)【要約】領域ベースのキャッシュディレクトリを維持するためのシステム、装置、及び方法を開示する。システムは、複数の処理ノードを含み、各処理ノードは、キャッシュサブシステムを含む。また、システムは、キャッシュディレクトリを含み、このキャッシュディレクトリは、システムのさまざまなキャッシュサブシステム間のキャッシュコヒーレンシを管理するのに役立つ。キャッシュディレクトリ内のエントリ数を減らすために、キャッシュディレクトリは、キャッシュラインごとにではなく、領域ごとにコヒーレンシを追跡し、領域は、複数のキャッシュラインを含む。したがって、システムは、領域ベースのキャッシュディレクトリを含み、この領域ベースのキャッシュディレクトリは、システム内の任意のキャッシュサブシステムにキャッシュされる少なくとも１つのキャッシュラインを有する領域を追跡する。キャッシュディレクトリは、参照カウントを各エントリ中に含み、この参照カウントは、領域ごとにキャッシュされるキャッシュラインの総数を追跡する。所与のエントリの参照カウントがゼロになる場合に、キャッシュディレクトリは、所与のエントリを回収する。【選択図】図９
2021507437.tif 000002
【特許請求の範囲】
【請求項１】
複数の処理ノードであって、各処理ノードは１つ以上のプロセッサ、及びキャッシュサブシステムを含む、前記複数の処理ノードと、
メモリと、
キャッシュディレクトリと、を備えるシステムであって、
前記キャッシュディレクトリは、
システムのいずれかのキャッシュサブシステムにキャッシュされる少なくとも１つのキャッシュラインを含むメモリの領域ごとにエントリを維持するように設定され、領域は複数のキャッシュラインを含み、
前記キャッシュディレクトリのエントリごとに参照カウントを維持するように設定され、前記参照カウントは前記システムのいずれかのキャッシュサブシステムにキャッシュされる、対応する領域のキャッシュラインの数を追跡し、
所与のエントリについての参照カウントがゼロに達することに応答して、前記所与のエントリを回収するように設定される、システム。
【請求項２】
前記キャッシュディレクトリは、
第一領域の第一キャッシュラインが前記システムの第一キャッシュサブシステムによってキャッシュされているというインディケーションを受信することに応答して、第一エントリを前記第一領域に割り振るようにさらに設定され、
前記第一エントリの参照カウントを１に初期化するようにさらに設定される、請求項１に記載のシステム。
【請求項３】
前記キャッシュディレクトリは、前記第一領域の第二キャッシュラインが前記システムの第二キャッシュサブシステムによってキャッシュされているというインディケーションを受信することに応答して、前記第一エントリの前記参照カウントをインクリメントするようにさらに設定される、請求項２に記載のシステム。
【請求項４】
前記キャッシュディレクトリは、
領域がプライベートであるか、共有されるかを追跡するようにさらに設定され、
第一領域がプライベートであると決定することに応答して、第一エントリの第一フィールドを中央処理装置有効フィールドとして解釈するようにさらに設定され、前記第一エントリは前記第一領域に対応し、
前記第一領域のステータス中で共有される変更を検出することに応答して、前記第一エントリの前記第一フィールドをクラスタ有効フィールドとして解釈するようにさらに設定される、請求項１に記載のシステム。
【請求項５】
前記キャッシュディレクトリは、
第一アレイを維持して第一粒度でメモリの部分を追跡するようにさらに設定され、
第二アレイを維持して第二粒度でメモリの部分を追跡するようにさらに設定され、前記第二粒度は前記第一粒度よりも細かい粒度であり、
所与のメモリ要求を受信することに応答して、前記第一アレイ及び前記第二アレイへのルックアップを並行して実行するようにさらに設定される、請求項１に記載のシステム。
【請求項６】
前記キャッシュディレクトリは、前記ルックアップが前記第一アレイ及び前記第二アレイの両方にヒットすることに応答して、前記第二アレイのマッチングするエントリから抽出されるデータのみに基づきプローブを生成するようにさらに設定される、請求項５に記載のシステム。
【請求項７】
前記キャッシュディレクトリは、
第一アレイ中のエントリの参照カウントフィールドを監視するようにさらに設定され、
所与の領域についての参照カウントが閾値を上回ったことを検出することに応答して、前記所与の領域をより細かい粒度ごとに追跡し始めるようにさらに設定され、
前記参照カウントが前記閾値を上回ったことを検出した後に、前記所与の領域を標的とするメモリ要求を受信することに応答して第二アレイ中にエントリを作成するようにさらに設定される、請求項１に記載のシステム。
【請求項８】
キャッシュディレクトリ中で、複数のキャッシュラインを含むメモリの領域であって、システムのいずれかのキャッシュサブシステムにキャッシュされる少なくとも１つのキャッシュラインを含むメモリの領域ごとにエントリを維持することと、
前記キャッシュディレクトリのエントリごとに参照カウントを維持することと、
所与のエントリについての参照カウントがゼロに達することに応答して、前記所与のエントリを回収することと、を含み、
前記参照カウントは前記システムのいずれかのキャッシュサブシステムにキャッシュされる、対応する領域のキャッシュラインの数を追跡する、方法。
【請求項９】
第一領域の第一キャッシュラインが前記システムの第一キャッシュサブシステムによってキャッシュされているというインディケーションを受信することに応答して、第一エントリを前記第一領域に割り振ることと、
前記第一エントリの参照カウントを１に初期化することと、をさらに含む、請求項８に記載の方法。
【請求項１０】
前記第一領域の第二キャッシュラインが前記システムの第二キャッシュサブシステムによってキャッシュされているというインディケーションを受信することに応答して、前記第一エントリの前記参照カウントをインクリメントすることをさらに含む、請求項９に記載の方法。
【請求項１１】
領域がプライベートであるか、共有されるかを追跡することと、
第一領域がプライベートであると決定することに応答して、前記第一領域に対応する第一エントリの第一フィールドを中央処理装置有効フィールドとして解釈することと、
前記第一領域のステータス中で共有される変更を検出することに応答して、前記第一エントリの前記第一フィールドをクラスタ有効フィールドとして解釈することと、をさらに含む、請求項８に記載の方法。
【請求項１２】
第一アレイを維持して第一粒度でメモリの部分を追跡することと、
第二アレイを維持して前記第一粒度よりも細かい粒度である第二粒度でメモリの部分を追跡することと、
所与のメモリ要求を受信することに応答して、前記第一アレイ及び前記第二アレイへのルックアップを並行して実行することと、をさらに含む、請求項８に記載の方法。
【請求項１３】
前記ルックアップが前記第一アレイ及び前記第二アレイの両方にヒットすることに応答して、前記第二アレイのマッチングするエントリから抽出されるデータのみに基づきプローブを生成することをさらに含む、請求項１２に記載の方法。
【請求項１４】
第一アレイ中のエントリの参照カウントフィールドを監視することと、
所与の領域についての参照カウントが閾値を上回ったことを検出することに応答して、前記所与の領域をより細かい粒度ごとに追跡し始めることと、
前記参照カウントが前記閾値を上回ったことを検出した後に、前記所与の領域を標的とするメモリ要求を受信することに応答して第二アレイ中にエントリを作成することと、をさらに含む、請求項８に記載の方法。
【請求項１５】
キャッシュディレクトリを備える装置であって、
前記キャッシュディレクトリは、
複数のキャッシュラインを含むメモリの領域であって、複数のキャッシュサブシステムのいずれかにキャッシュされる少なくとも１つのキャッシュラインを含むメモリの領域ごとにエントリを維持するように設定され、
キャッシュディレクトリのエントリごとに参照カウントを維持するように設定され、
所与のエントリについての参照カウントがゼロに達することに応答して、前記所与のエントリを回収するように設定され、
前記参照カウントはいずれかのキャッシュサブシステムにキャッシュされる、対応する領域のキャッシュラインの数を追跡する、装置。
【請求項１６】
前記キャッシュディレクトリは、
第一領域の第一キャッシュラインが前記システムの第一キャッシュサブシステムによってキャッシュされているというインディケーションを受信することに応答して、第一エントリを前記第一領域に割り振るようにさらに設定され、
前記第一エントリの参照カウントを１に初期化するようにさらに設定される、請求項１５に記載の装置。
【請求項１７】
前記キャッシュディレクトリは、前記第一領域の第二キャッシュラインが前記システムの第二キャッシュサブシステムによってキャッシュされているというインディケーションを受信することに応答して、前記第一エントリの前記参照カウントをインクリメントするように設定される、請求項１６に記載の装置。
【請求項１８】
前記キャッシュディレクトリは、
領域がプライベートであるか、共有されるかを追跡するように設定され、
第一領域がプライベートであると決定することに応答して、前記第一領域に対応する第一エントリの第一フィールドを中央処理装置有効フィールドとして解釈するように設定され、
前記第一領域のステータス中で共有される変更を検出することに応答して、前記第一エントリの前記第一フィールドをクラスタ有効フィールドとして解釈するように設定される、請求項１５に記載の装置。
【請求項１９】
前記キャッシュディレクトリは、
第一アレイを維持して第一粒度でメモリの部分を追跡するようにさらに設定され、
第二アレイを維持して前記第一粒度よりも細かい粒度である第二粒度でメモリの部分を追跡するようにさらに設定され、
所与のメモリ要求を受信することに応答して、前記第一アレイ及び前記第二アレイへのルックアップを並行して実行するようにさらに設定される、請求項１５に記載の装置。
【請求項２０】
前記キャッシュディレクトリは、前記ルックアップが前記第一アレイ及び前記第二アレイの両方にヒットすることに応答して、前記第二アレイのマッチングするエントリから抽出されるデータのみに基づきプローブを生成するようにさらに設定される、請求項１９に記載の装置。
【発明の詳細な説明】
【背景技術】
【０００１】
関連技術の説明
コンピュータシステムは、通常は安価で高密度のダイナミックランダムアクセスメモリ（ＤＲＡＭ）チップで形成されるメインメモリを使用する。ただし、ＤＲＡＭチップは、比較的長いアクセス時間を必要とする。パフォーマンスを向上させるために、データプロセッサは、キャッシュとして知られている少なくとも１つのローカルの、高速メモリを通常含む。マルチコアデータプロセッサでは、各データプロセッサコアは、独自の専用のレベル１（Ｌ１）キャッシュを含むことができ、他のキャッシュレベル２（Ｌ２）、レベル３（Ｌ３）など）は、データプロセッサコアによって共有される。
【０００２】
コンピューティングシステム中のキャッシュサブシステムは、データブロックを格納するように設定される高速キャッシュメモリを含む。本明細書に使用される場合、「ブロック」は、隣接しているメモリ位置に格納される１セットのバイトであり、これらは、コヒーレンシ目的のためにユニットとして取り扱われる。本明細書に使用される場合、「キャッシュブロック」、「ブロック」、「キャッシュライン」、及び「ライン」という用語のそれぞれは、置き換えることができる。いくつかの実施形態では、ブロックは、キャッシュ中の割り振り及び割り振り解除のユニットであってもよい。ブロック中のバイト数は、設計上の選択によって異なり、いかなるサイズであってもよい。さらに、「キャッシュタグ」、「キャッシュラインタグ」、及び「キャッシュブロックタグ」という用語のそれぞれは、置き換えることができる。
【０００３】
マルチノードコンピュータシステムでは、さまざまな処理ノードによって使用されているデータのコヒーレンシを維持するために、特別な予防策を講じる必要がある。例えば、プロセッサがある特定のメモリアドレスでデータにアクセスしようとする場合、まずメモリが別のキャッシュに格納されていて、変更されているかどうかを判定する必要がある。このキャッシュコヒーレンシプロトコルを実装するために、キャッシュは、システム全体を通してデータコヒーレンシを維持するためにキャッシュラインのステータスを示す複数のステータスビットを通常含む。一般的なコヒーレンシプロトコルの１つは、「ＭＯＥＳＩ」プロトコルとして知られている。ＭＯＥＳＩプロトコルに従って、各キャッシュラインは、キャッシュラインが変更されている（Ｍ）こと、キャッシュラインが排他的である（Ｅ）、もしくは共有されている（Ｓ）こと、またはキャッシュラインが無効である（Ｉ）ことを示すビットを含む、ラインがあるＭＯＥＳＩ状態を示すステータスビットを含む。所有（Ｏ）状態は、ラインが１つのキャッシュ中で変更されていること、他のキャッシュ中に共有されたコピーがある可能性があること、及びメモリ中のデータが無効であることを示す。
【０００４】
キャッシュディレクトリは、高性能でスケーラブルなシステム中に構築する重要なブロックである。キャッシュディレクトリを使用して、システムによって現在使用中であるキャッシュラインの追跡を続ける。キャッシュディレクトリは、必要な場合にのみメモリ要求またはプローブ要求を実行することにより、メモリ帯域幅、及びプローブ帯域幅の減少の両方を改善する。論理的には、キャッシュディレクトリは、キャッシュコヒーレンスプロトコルを実施するキャッシュラインのホームノードに存在する。キャッシュディレクトリの動作原理は包括的である（すなわち、中央処理装置（ＣＰＵ）キャッシュに存在するラインはキャッシュディレクトリに存在する必要がある）。キャッシュラインベースのディレクトリスキームでは、各キャッシュラインは個別に追跡される。その結果、キャッシュディレクトリのサイズは、コンピューティングシステム中のすべてのＣＰＵキャッシュサブシステムの総容量に比例して増加する。時間の経過とともに、ＣＰＵキャッシュサイズは、大幅に増大している。この増大の結果として、ラインベースのキャッシュディレクトリを維持することは非常に困難になった。
【０００５】
添付図面と共に以下の説明を参照することによって、本明細書で説明される方法及び機構の利点をより良好に理解することができる。
【図面の簡単な説明】
【０００６】
【図１】コンピューティングシステムの一実施形態のブロック図である。
【図２】コア複合体の一実施形態のブロック図である。
【図３】マルチＣＰＵシステムの一実施形態のブロック図である。
【図４】キャッシュディレクトリの一実施形態のブロック図である。
【図５】キャッシュディレクトリの別の実施形態のブロック図である。
【図６】キャッシュディレクトリの別の実施形態のブロック図である。
【図７】キャッシュディレクトリのエントリ内のクラスタ有効フィールドを転用する一実施形態の図解である。
【図８】領域ベースのキャッシュディレクトリを維持するための方法の一実施形態を示す一般化された流れ図である。
【図９】コヒーレントスレーブがＣＰＵからの無効化インディケーションを処理するための方法の一実施形態を示す一般化された流れ図である。
【図１０】キャッシュディレクトリがメモリの第一領域へのアクセスを追跡するための方法の一実施形態を示す一般化された流れ図である。
【図１１】異なる粒度レベルでキャッシュディレクトリのアレイを維持するための方法の一実施形態を示す一般化された流れ図である。
【図１２】マルチアレイキャッシュディレクトリを操作するための方法の一実施形態を示す一般化された流れ図である。
【図１３】キャッシュディレクトリが直近に訪問済みのプライベート領域についてのエントリを伴うデータ構造を維持するための方法の一実施形態を示す一般化された流れ図である。
【図１４】異なる粒度レベルでキャッシュディレクトリのアレイを維持するための方法の一実施形態を示す一般化された流れ図である。
【発明を実施するための形態】
【０００７】
以下の説明では、本明細書に提示される方法及び機構の完全な理解を提供するために、多くの具体的な詳細が述べられている。しかしながら、当業者は、それらの特定の詳細なしにさまざまな実施形態を実施することができることを認識するべきである。いくつかの例では、本明細書で説明されるアプローチを曖昧にすることを回避するために、公知な構造、コンポーネント、信号、コンピュータプログラム命令、及び技術が詳細には示されていない。例示の簡潔性及び明確さのために、図に示される要素は、必ずしも縮尺通りに描かれていないことが認識されよう。例えば、要素のいくつかの寸法は、他の要素に対して拡張されてもよい。
【０００８】
大規模なキャッシュサイズに適合する領域ベースのキャッシュディレクトリスキームを実装するためのさまざまなシステム、装置、方法、及びコンピュータ可読媒体を本明細書に開示する。一実施形態では、システムは、少なくとも複数の処理ノード、メモリ、及びキャッシュディレクトリを含む。各処理ノードは、１つ以上のプロセッサ、及びキャッシュサブシステムを含む。一実施形態では、キャッシュディレクトリは、領域ごとにメモリの部分を追跡するように設定され、各領域は、複数のキャッシュラインを含む。キャッシュディレクトリは、システムのいずれかのキャッシュサブシステムにキャッシュされる少なくとも１つのキャッシュラインを含むメモリの領域ごとにエントリを維持する。また、キャッシュディレクトリは、エントリごとに参照カウントを維持し、参照カウントは、システムのすべてのキャッシュサブシステムにキャッシュされる領域のキャッシュライン数の合計である。キャッシュディレクトリは、所与のエントリについての参照カウントがゼロに達することに応答して、所与のエントリを回収する。
【０００９】
一実施形態では、第一領域の第一キャッシュラインがシステムの第一キャッシュサブシステムによってキャッシュされているというインディケーションを受信することに応答して、キャッシュディレクトリは第一エントリを第一領域に割り振る。また、キャッシュディレクトリは、新しく割り振られた第一エントリの参照カウントを１に初期化する。キャッシュディレクトリは、第一領域の第二キャッシュラインがシステムの第二キャッシュサブシステムによってキャッシュされているというインディケーションを受信することに応答して、第一エントリの参照カウントを２にインクリメントし、第二キャッシュラインは、必ずしも第一キャッシュラインと物理的に異ならない。キャッシュサブシステムによってキャッシュされる第一領域の後続のキャッシュラインごとに、キャッシュディレクトリは、参照カウントをインクリメントする。
【００１０】
一実施形態では、キャッシュディレクトリは、領域がプライベートであるか、共有であるかを追跡する。例えば、キャッシュディレクトリは、第一領域を追跡するための第一エントリを格納する。第一領域がプライベートであるときに、第一エントリの第一フィールドは、１番目の意味を有するものとして解釈される。第一領域が共有されるときに、第一エントリの第一フィールドは、１番目の意味とは異なる２番目の意味を有するものとして解釈される。一実施形態では、第一領域がプライベートであるときに、第一フィールドは、ＣＰＵ有効フィールドとして解釈され、第一領域が共有されるときに、第一フィールドは、クラスタ有効フィールドとして解釈され、クラスタは、特定のグループのＣＰＵを指す。
【００１１】
一実施形態では、キャッシュディレクトリは、第一アレイを維持して第一粒度でメモリの部分を追跡する。キャッシュディレクトリは、第二アレイを維持して第二粒度でメモリの部分を追跡し、第二粒度は、第一粒度よりも細かい粒度である。この実施形態では、キャッシュディレクトリは、所与のメモリ要求を受信することに応答して、第一アレイ及び第二アレイへのルックアップを並行して実行する。キャッシュディレクトリは、ルックアップが第一アレイ及び第二アレイの両方にヒットすることに応答して、第二アレイのマッチングするエントリから抽出されるデータのみに基づき１つ以上のプローブを生成する。
【００１２】
一実施形態では、キャッシュディレクトリは、第一アレイ中のエントリの参照カウントフィールドを監視する。一実施形態では、キャッシュディレクトリは、領域がプライベートから共有に移行したことを検出することに応答して、より細かい粒度ごとに所与の領域を追跡し始める。この実施形態では、キャッシュディレクトリは、領域がプライベートから共有に移行したことを検出した後に、所与の領域を標的とするメモリ要求を受信することに応答して、第二アレイにエントリを作成する。別の実施形態では、キャッシュディレクトリは、所与の領域についての参照カウントがプログラム可能な閾値を上回ったことを検出することに応答して、所与の領域をより細かい粒度ごとに追跡し始める。この実施形態では、キャッシュディレクトリは、参照カウントが閾値を上回ったことを検出した後に、所与の領域を標的とするメモリ要求を受信することに応答して、第二アレイ中にエントリを作成する。一実施形態では、第一アレイは、領域ベースのアレイであり、第二アレイは、ラインベースのアレイである。
【００１３】
ここで図１を参照して、コンピューティングシステム１００の一実施形態のブロック図を示す。一実施形態では、コンピューティングシステム１００は、少なくともコア複合体１０５Ａ〜Ｎ、入力／出力（Ｉ／Ｏ）インタフェース１２０、バス１２５、メモリコントローラ（複数可）１３０、及びネットワークインタフェース１３５を含む。他の実施形態では、コンピューティングシステム１００は、他のコンポーネントを含むことができる、及び／またはコンピューティングシステム１００は、異なって配列されてもよい。一実施形態では、各コア複合体１０５Ａ〜Ｎは、中央処理装置（ＣＰＵ）などの１つ以上の汎用プロセッサを含む。「コア複合体」は本明細書では「処理ノード」または「ＣＰＵ」とも称することができることに留意する。いくつかの実施形態では、１つ以上のコア複合体１０５Ａ〜Ｎは、高度に並列なアーキテクチャを備えるデータ並列プロセッサを含むことができる。データ並列プロセッサの例は、グラフィックスプロセッシングユニット（ＧＰＵ）、デジタルシグナルプロセッサ（ＤＳＰ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、特定用途向け集積回路（ＡＳＩＣ）などを含む。コア複合体１０５Ａ〜Ｎ内の各プロセッサコアは、１つ以上のレベルのキャッシュを有するキャッシュサブシステムを含む。一実施形態では、各コア複合体１０５Ａ〜Ｎは、複数のプロセッサコア間で共有されるキャッシュ（例えば、レベル３（Ｌ３）キャッシュ）を含む。
【００１４】
メモリコントローラ（複数可）１３０は、コア複合体１０５Ａ〜Ｎによってアクセス可能な任意の数及びタイプのメモリコントローラを表す。メモリコントローラ（複数可）１３０は、任意の数及びタイプのメモリデバイス（図示せず）に結合される。例えば、メモリコントローラ（複数可）１３０に結合されるメモリデバイス（複数可）におけるメモリのタイプは、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、ＮＡＮＤフラッシュメモリ、ＮＯＲフラッシュメモリ、強誘電体ランダムアクセスメモリ（ＦｅＲＡＭ）、またはその他のものを含むことができる。Ｉ／Ｏインタフェース１２０は、いずれかの数及びタイプのＩ／Ｏインタフェース（例えば、ペリフェラルコンポーネントインターコネクト（ＰＣＩ）バス、ＰＣＩ−Ｅｘｔｅｎｄｅｄ（ＰＣＩ−Ｘ）、ＰＣＩＥ（ＰＣＩ  Ｅｘｐｒｅｓｓ）バス、ギガビットイーサネット（ＧＢＥ）バス、ユニバーサルシリアルバス（ＵＳＢ））を表す。さまざまなタイプのペリフェラルデバイスは、Ｉ／Ｏインタフェース１２０に結合されてもよい。それらのようなペリフェラルデバイスは、ディスプレイ、キーボード、マウス、プリンタ、スキャナ、ジョイスティック、または他のタイプのゲームコントローラ、メディア記録デバイス、外部記憶装置、及びネットワークインタフェースカードなどを含む（がそれらに限定されない）。
【００１５】
さまざまな実施形態では、コンピューティングシステム１００は、サーバ、コンピュータ、ラップトップ、モバイルデバイス、ゲームコンソール、ストリーミングデバイス、ウェアラブルデバイス、またはさまざまな他のタイプのコンピューティングシステムもしくはデバイスのいずれかであってもよい。コンピューティングシステム１００のコンポーネントの数は、実施形態ごとに変わってもよいことに留意されよう。図１に示された数よりも多い、または少ない各コンポーネントが存在してもよい。また、コンピューティングシステム１００は、図１に示されていない他のコンポーネントを含むことができることに留意されよう。加えて、他の実施形態では、コンピューティングシステム１００は、図１に示された以外の方式において構造化されてもよい。
【００１６】
ここで図２を参照して、コア複合体２００の一実施形態のブロック図を示す。一実施形態では、コア複合体２００は、４つのプロセッサコア２１０Ａ〜Ｄを含む。他の実施形態では、コア複合体２００は、他の数のプロセッサコアを含むことができる。「コア複合体」は本明細書において「処理ノード」または「ＣＰＵ」とも称することができることに留意する。一実施形態では、コア複合体２００のコンポーネントは、コア複合体１０５Ａ〜Ｎ（図１の）内に含まれる。
【００１７】
各プロセッサコア２１０Ａ〜Ｄは、メモリサブシステム（図示せず）から取得されるデータ及びインストラクションを格納するためのキャッシュサブシステムを含む。例えば、一実施形態では、各コア２１０Ａ〜Ｄは、対応するレベル１（Ｌ１）キャッシュ２１５Ａ〜Ｄを含む。各プロセッサコア２１０Ａ〜Ｄは、対応するレベル２（Ｌ２）キャッシュ２２０Ａ〜Ｄを含む、またはそれに結合できる。さらに、一実施形態では、コア複合体２００は、プロセッサコア２１０Ａ〜Ｄによって共有されるレベル３（Ｌ３）キャッシュ２３０を含む。Ｌ３キャッシュ２３０は、ファブリック及びメモリサブシステムへのアクセスのためのコヒーレントマスターに結合される。他の実施形態では、コア複合体２００が他の数のキャッシュを有する、及び／またはさまざまなキャッシュレベルの他のコンフィグレーションを有する、他のタイプのキャッシュサブシステムを含むことができることに留意する。
【００１８】
ここで図３を参照して、マルチＣＰＵシステム３００の一実施形態のブロック図を示す。一実施形態では、システムは、複数のＣＰＵ３０５Ａ〜Ｎを含む。システムあたりのＣＰＵの数は、実施形態ごとに異なることができる。各ＣＰＵ３０５Ａ〜Ｎは、任意の数のコア３０８Ａ〜Ｎをそれぞれ含むことができ、コアの数は、実施形態によって異なる。各ＣＰＵ３０５Ａ〜Ｎは、対応するキャッシュサブシステム３１０Ａ〜Ｎも含む。各キャッシュサブシステム３１０Ａ〜Ｎは、任意の数のレベルのキャッシュ、及び任意のタイプのキャッシュ階層構造を含むことができる。
【００１９】
一実施形態では、各ＣＰＵ３０５Ａ〜Ｎは、対応するコヒーレントマスター３１５Ａ〜Ｎに接続される。本明細書に使用される場合、「コヒーレントマスター」は、相互接続（例えば、バス／ファブリック３１８）を介して流れるトラフィックを処理し、接続されたＣＰＵについてのコヒーレンシを管理するエージェントとして定義される。コヒーレンシを管理するために、コヒーレントマスターは、コヒーレンシ関連のメッセージ及びプローブを受信して処理し、コヒーレントマスターは、コヒーレンシ関連の要求及びプローブを生成する。本明細書において「コヒーレントマスター」は「コヒーレントマスターユニット」とも称することができることに留意する。
【００２０】
一実施形態では、各ＣＰＵ３０５Ａ〜Ｎは、対応するコヒーレントマスター３１５Ａ〜Ｎ及びバス／ファブリック３１８を介して１組のコヒーレントスレーブに結合される。例えば、ＣＰＵ３０５Ａは、コヒーレントマスター３１５Ａ及びバス／ファブリック３１８を介してコヒーレントスレーブ３２０Ａ〜Ｂに結合される。コヒーレントスレーブ（ＣＳ）３２０Ａは、メモリコントローラ（ＭＣ）３３０Ａに結合され、コヒーレントスレーブ３２０Ｂは、メモリコントローラ３３０Ｂに結合される。コヒーレントスレーブ３２０Ａは、キャッシュディレクトリ（ＣＤ）３２５Ａに結合され、キャッシュディレクトリ３２５Ａは、メモリコントローラ３３０Ａを介してアクセス可能なメモリについてシステム３００にキャッシュされるキャッシュラインを有するメモリ領域についてのエントリを含む。キャッシュディレクトリ３２５Ａ、及び他のキャッシュディレクトリのそれぞれは「プローブフィルタ」とも称することができることに留意する。同様に、コヒーレントスレーブ３２０Ｂは、キャッシュディレクトリ３２５Ｂに結合され、キャッシュディレクトリ３２５Ｂは、メモリコントローラ３３０Ｂを介してアクセス可能なメモリについてシステム３００にキャッシュされるキャッシュラインを有するメモリ領域についてのエントリを含む。ＣＰＵごとに２つのメモリコントローラを有する例が一実施形態を示すに過ぎないことに留意する。他の実施形態では、各ＣＰＵ３０５Ａ〜Ｎが２つ以外の他の数のメモリコントローラに接続できることを理解されたい。
【００２１】
ＣＰＵ３０５Ａのコンフィグレーションと同様のコンフィグレーションでは、ＣＰＵ３０５Ｂは、コヒーレントマスター３１５Ｂ及びバス／ファブリック３１８を介してコヒーレントスレーブ３３５Ａ〜Ｂに結合される。コヒーレントスレーブ３３５Ａは、メモリコントローラ３５０Ａを介してメモリに結合され、コヒーレントスレーブ３３５Ａは、キャッシュディレクトリ３４５Ａにも結合され、このキャッシュディレクトリ３４５Ａは、メモリコントローラ３５０Ａを介してアクセス可能なメモリに対応するキャッシュラインのコヒーレンシを管理する。コヒーレントスレーブ３３５Ｂは、キャッシュディレクトリ３４５Ｂに結合され、コヒーレントスレーブ３３５Ｂは、メモリコントローラ３６５Ｂを介してメモリに結合される。また、ＣＰＵ３０５Ｎは、コヒーレントマスター３１５Ｎ及びバス／ファブリック３１８を介してコヒーレントスレーブ３５５Ａ〜Ｂに結合される。コヒーレントスレーブ３５５Ａ〜Ｂは、それぞれキャッシュディレクトリ３６０Ａ〜Ｂに結合され、コヒーレントスレーブ３５５Ａ〜Ｂは、それぞれメモリコントローラ３６５Ａ〜Ｂを介してメモリに結合される。本明細書に使用される場合、「コヒーレントスレーブ」は、対応するメモリコントローラを標的とする受信した要求及びプローブを処理することによってコヒーレンシを管理するエージェントとして定義される。本明細書において「コヒーレントスレーブ」は「コヒーレントスレーブユニット」とも称することができることに留意する。さらに、本明細書に使用される場合、「プローブ」は、コヒーレンシポイントからコンピュータシステム中の１つ以上のキャッシュにパスされ、キャッシュがデータブロックのコピーを含むかどうかを判定し、任意選択でキャッシュがデータブロックを配置する必要がある状態を示すメッセージとして定義される。
【００２２】
コヒーレントスレーブがその対応するメモリコントローラを標的とするメモリ要求を受信するときに、コヒーレントスレーブは、その対応するキャッシュディレクトリへのルックアップを実行して、要求がいずれかのキャッシュサブシステムにキャッシュされる少なくとも１つのキャッシュラインを含む領域を標的とするかどうかを判定する。一実施形態では、システム３００中の各キャッシュディレクトリは、メモリの領域を追跡し、領域は、複数のキャッシュラインを含む。追跡されている領域のサイズは、実施形態ごとに異なることができる。キャッシュラインをより細かい粒度で追跡するのではなく、領域の粒度で追跡することにより、各キャッシュディレクトリのサイズは、縮小する。本明細書において「領域」は「ページ」とも称することができることに留意する。要求がコヒーレントスレーブによって受信されるときに、コヒーレントスレーブは、要求によって標的とされる領域を決定する。次に、この領域についてキャッシュディレクトリのルックアップを実行する。ルックアップの結果がヒットをもたらす場合、コヒーレントスレーブは、ヒットエントリ中で識別されるＣＰＵ（複数可）にプローブを送信する。コヒーレントスレーブによって生成されるプローブのタイプは、ヒットエントリで指定されるコヒーレンシ状態によって決定する。
【００２３】
図３には示されていないが、他の実施形態では、図を不明瞭にすることを回避するために示されていない、バス／ファブリック３１８から他のコンポーネントへの他の接続があってもよいことを理解されたい。例えば、別の実施形態では、バス／ファブリック３１８は、１つ以上のＩ／Ｏインタフェース、及び１つ以上のＩ／Ｏデバイスへの接続を含む。
【００２４】
ここで図４を参照して、キャッシュディレクトリ４００の一実施形態のブロック図を示す。一実施形態では、キャッシュディレクトリ４００は、制御ユニット４０５及びアレイ４１０を含む。アレイ４１０は、任意の数のエントリを含むことができ、エントリの数は、実施形態によって異なる。一実施形態では、アレイ４１０の各エントリは、状態フィールド４１５、セクタ有効フィールド４２０、クラスタ有効フィールド４２５、参照カウントフィールド４３０、及びタグフィールド４３５を含む。他の実施形態では、アレイ４１０のエントリは、他のフィールドを含むことができる、及び／または他の適切な方法で配置できる。
【００２５】
状態フィールド４１５は、領域の集約状態を指定する状態ビットを含む。集約状態は、この特定の領域について最も制限的なキャッシュライン状態の反映である。例えば、所与の領域全体について単一のキャッシュラインのみがダーティである場合でも、所与の領域についての状態は、「ダーティ」として格納される。また、所与の領域全体の単一のキャッシュラインのみが共有される場合でも、所与の領域についての状態は、「共有された」として格納される。
【００２６】
セクタ有効フィールド４２０は、領域内のラインのサブグループまたはセクタに対応するビットベクトルを格納して、細粒度の追跡を提供する。領域内のラインのサブグループを追跡することにより、領域無効化プローブを展開している間に生成される不要な通常のコヒーレンシプローブ及び個々のラインプローブの数を減らすことができる。本明細書に使用される場合、「領域無効化プローブ」は、領域エントリがキャッシュディレクトリから追い出されることに応答してキャッシュディレクトリによって生成されるプローブとして定義される。コヒーレントマスターが領域無効化プローブを受信するときに、コヒーレントマスターは、ローカルＣＰＵによってキャッシュされる領域の各キャッシュラインを無効にする。さらに、トラッカー及びセクタの有効ビットを領域無効化プローブに含み、ＣＰＵキャッシュでのプローブ増幅を低減する。
【００２７】
サブグループの編成、及びセクタ有効フィールド４２０内のビット数は、実施形態によって異なることができる。一実施形態では、２つのラインは、セクタ有効フィールド４２０を使用して特定の領域エントリ内で追跡される。別の実施形態では、各領域エントリ内で他の数のラインを追跡することができる。この実施形態では、セクタ有効フィールド４２０を使用して、領域内で個別に追跡されているパーティションの数を示すことができる。さらに、パーティションは、セクタ有効フィールド４２０に格納されるオフセットを使用して識別できる。各オフセットは、所与の領域内の所与のパーティションの位置を識別する。セクタ有効フィールド４２０、またはエントリの別のフィールドは、所与の領域内のパーティションごとに別個のオーナー及び別個の状態を示すこともできる。
【００２８】
クラスタ有効フィールド４２５は、さまざまなＣＰＵキャッシュクラスタにわたる領域の存在を追跡するためのビットベクトルを含む。例えば、一実施形態では、ＣＰＵは、ＣＰＵのクラスタに一緒にグループ化される。クラスタ有効フィールド４２５に格納されるビットベクトルを使用して、通常のコヒーレンシプローブ及び領域無効化プローブについてのプローブ宛先を減少させる。
【００２９】
参照カウントフィールド４３０を使用して、システムのどこかにキャッシュされる領域のキャッシュラインの数を追跡する。領域への最初のアクセス時に、エントリは、テーブル４１０にインストールされ、参照カウントフィールド４３０は、１に設定される。時間の経過とともに、キャッシュがこの領域からキャッシュラインにアクセスするたびに、参照カウントがインクリメントされる。この領域からキャッシュラインがキャッシュによって追い出される場合、参照カウントは、デクリメントする。最終的に、参照カウントがゼロに達する場合に、エントリは、無効としてマーク付けされ、そのエントリは、別の領域に再利用できる。参照カウントフィールド４３０を利用することにより、領域無効化プローブの発生を減らすことができる。参照カウントフィールド４３０により、エントリがアクティブなサブスクライバのない領域に関連付けられている場合に、ディレクトリエントリを回収することが可能である。一実施形態では、参照カウントが閾値を超えると、参照カウントフィールド４３０は、飽和する可能性がある。通信データについての広く共有されたアクセスパターンを処理するときに、ある程度の精度を犠牲にしながら、プライベートアクセスパターンを処理するのに十分な大きさの値に閾値を設定することができる。タグフィールド４３５は、特定の領域と関連するエントリを識別するために使用されるタグビットを含む。
【００３０】
ここで図５を参照して、キャッシュディレクトリ５００の別の実施形態のブロック図を示す。一実施形態では、キャッシュディレクトリ５００は、領域ベースのアレイ５１０及び補助ラインベースのアレイ５１５に結合される少なくとも制御ユニット５０５を含む。領域ベースのアレイ５１０は、領域ごとにキャッシュされたデータを追跡するためのエントリを含む。一実施形態では、領域ベースのアレイ５１０の各エントリは、コンピューティングシステム（例えば、図３のシステム３００）のキャッシュサブシステムによってキャッシュされる領域のキャッシュラインへのアクセスの数を計数する参照カウントを含む。一実施形態では、所与の領域についての参照カウントが閾値に達するときに、所与の領域は、補助ラインベースのアレイ５１５によってラインごとに追跡され始める。
【００３１】
したがって、一実施形態では、所与の領域に対してキャッシュされるキャッシュラインの数が閾値に達するときに、補助ラインベースのアレイ５１５は、所与の領域の個々のラインへのアクセスを追跡し始める。所与の領域から新しいキャッシュラインにアクセスするたびに、キャッシュラインについて新しいエントリを補助ラインベースのアレイ５１５に作成する。一実施形態では、領域ベースのアレイ５１０及びラインベースのアレイ５１５へのルックアップを並行して実行する。
【００３２】
一実施形態では、閾値より大きい参照カウントを有する共有領域のみを、補助ラインベースのアレイ５１５によってキャッシュラインごとに追跡する。共有領域は、少なくとも２つの異なるＣＰＵのキャッシュサブシステムに格納されるキャッシュラインを含む領域を指す。プライベート領域は、単一のＣＰＵによってのみキャッシュされるキャッシュラインを含む領域を指す。したがって、一実施形態では、閾値より大きい参照カウントを有する共有領域について、ラインベースのアレイ５１５に１つ以上のエントリがある。この実施形態では、プライベート領域について、ラインベースのアレイ５１５にいかなるエントリもない。
【００３３】
ここで図６を参照して、キャッシュディレクトリ６００の別の実施形態のブロック図を示す。一実施形態では、キャッシュディレクトリ６００は、Ｎ個の直近にアクセスされたプライベートページをキャッシュするために、制御ユニット６０５、領域ベースのアレイ６１０、補助ラインベースのアレイ６１５、及び構造６２０を含む。Ｎが実施形態によって異なることができる正の整数であることに留意する。
【００３４】
一実施形態では、構造６２０は、最後のＮ個の訪問済みプライベートページについてのエントリを一時的にキャッシュするためのストレージ位置を含む。制御ユニット６０５が構造６２０中のエントリにマッチングするメモリ要求または無効化要求を受信するときに、制御ユニット６０５は、参照カウントをインクリメントし、またはデクリメントし、アレイ６１０及び６１５の外の、クラスタ有効フィールド及び／またはセクタ有効フィールドなどを変更するように設定される。したがって、アクセスごとにアレイ６１０及び６１５中のエントリを読み出し、これらのエントリに書き込まなければならないというよりもむしろ、最近アクセスされたプライベートページ６２０へのアクセスは、アレイ６１０及び６１５へのアクセスをバイパスすることができる。構造６２０の使用は、これらのプライベートページのためのキャッシュディレクトリ６００への更新を迅速化するのを助けることができる。
【００３５】
一実施形態では、セクタ有効ビットまたはクラスタ有効ビットを変更しないＩ／Ｏトランザクションは、直近にアクセスされたＮ個のプライベートページをキャッシュするための構造６２０から利益を得ることができる。通常、Ｉ／Ｏトランザクションは、所与のエントリについて参照カウントのみを変更し、アレイ６１０または６１５の読み出し及び書き込みを毎回実行するのではなく、代わりに構造６２０を更新することができる。
【００３６】
したがって、構造６２０は、キャッシュディレクトリ６００への効率的なアクセスを可能にする。一実施形態では、着信要求は、アレイ６１０及び６１５へのルックアップを実行する前に、構造６２０のルックアップを実行する。一実施形態では、着信要求をコヒーレントスレーブ（例えば、図３のコヒーレントスレーブ３２０Ａ）の入力キューに割り振っている間、制御ユニット６０５は、構造６２０にヒットまたはミスがあるかどうかを判定する。その後、要求がキューの先頭に達したときに、制御ユニット６０５は、要求が構造６２０中のヒットであるかどうかをすでに知っている。要求が構造６２０中のヒットである場合、アレイ６１０及び６１５へのルックアップを回避することができる。
【００３７】
ここで図７を参照して、キャッシュディレクトリのエントリ中のクラスタ有効フィールドを転用する一実施形態の図解を示す。一実施形態では、エントリ７０５Ａは、キャッシュディレクトリによって追跡されている共有領域に関連するさまざまなフィールドを含む。ステータスフィールド７１０Ａは、対応する領域が共有されていることを示す、共有エンコーディング７１５Ａを格納する。本明細書に使用される場合、「共有」領域は、複数の異なるＣＰＵクラスタによってキャッシュされるキャッシュラインを有する領域を指す。ステータスフィールド７１０Ａが共有エンコーディング７１５Ａを格納するときに、クラスタ有効フィールド７２０Ａは、ＣＰＵクラスタ７２５Ａ〜Ｎのどれが対応する領域のキャッシュラインをキャッシュしているかを示す、ビットベクトルを格納する。この例では、クラスタ有効フィールド７２０Ａは、ＣＰＵを合わせてクラスタ中でグループ化している。一実施形態では、クラスタビット７２５Ａ〜Ｎを１に設定する場合、これは、ＣＰＵのクラスタが領域からの少なくとも１つのキャッシュラインを格納することを示す。その他の場合、クラスタビット７２５Ａ〜Ｎを０に設定する場合、これは、クラスタ中のいずれのＣＰＵも領域からのキャッシュラインを格納しないことを示す。エントリ７０５Ａは、図を不明瞭にすることを回避するために示されない任意の数の他のフィールドをも含むことができる。
【００３８】
クラスタ有効フィールド７２０Ａがプライベート領域でも同じままであった場合、その領域の少なくとも１つのキャッシュラインをキャッシュしていると識別されるクラスタ内のすべてのＣＰＵにプローブを送信する必要がある。むしろ、一実施形態では、領域がプライベートである（すなわち、単一のクラスタによってのみアクセスされる）場合、クラスタ有効フィールドは、オーナー有効フィールドまたはＣＰＵ有効フィールドに転用される。これにより、キャッシュディレクトリが特定の１つのＣＰＵをプライベート領域についてプローブすることが可能である。
【００３９】
したがって、エントリ７０５Ａによって追跡されている領域が共有領域からプライベート領域に移行する場合、エントリ７０５Ｂは、このプライベート領域についてエントリ７０５Ａと比較したフィールドにおける変更を表す。エントリ７０５Ｂに示されるように、ここで、ステータス７１０Ｂは、領域のプライベートステータスを表すために符号化するプライベート７１５Ｂを含む。ステータス７１０Ｂがプライベート７１５Ｂに変更されたことから、ここで以前のクラスタ有効フィールド７２０Ａは、ＣＰＵ有効フィールド７２０Ｂになる。ＣＰＵ有効フィールド７２０Ｂに格納されるビットベクトルの各ビット７３５Ａ〜Ｎは、元のクラスタの単一のＣＰＵを表す。このクラスタの所与のＣＰＵが対応する領域の少なくとも１つのキャッシュラインをキャッシュする場合、特定のＣＰＵ７３５Ａ〜Ｎビットを１に設定する。そうでない場合、クラスタの所与のＣＰＵが領域からいかなるキャッシュラインもキャッシュしない場合、対応するＣＰＵ７３５Ａ〜Ｎビットをゼロに設定する。
【００４０】
クラスタ有効フィールド７２０ＡをＣＰＵ有効フィールド７２０Ｂに変更することにより、領域からのキャッシュラインを有するＣＰＵのみに標的とされる指向性プローブを送出することができる。これは、キャッシュディレクトリによって生成される不要なプローブの数を減らすのに役立つ。一実施形態では、プライベート領域（エントリ７０５Ｂに対応する）を標的とする要求を異なるクラスタから受信する場合、このプライベート領域は、共有領域になる。これが発生するときに、ここで領域が共有されていることから、クラスタ有効フィールド７２０Ａをその通常の動作にリストアする。
【００４１】
ここで図８を参照して、領域ベースのキャッシュディレクトリを維持するための方法８００の一実施形態を示す。考察の目的のために、この実施形態及び図９〜１３の実施形態におけるステップを順次示す。しかしながら、説明される方法のさまざまな実施形態では、説明される要素のうちの１つ以上は同時に実行され、示されるのとは異なる順序で実行され、または全体的に省略されることに留意する。他の追加の要素も必要に応じて実行される。本明細書に記載されるさまざまなシステムまたは装置のいずれも、方法８００を実装するように設定されている。
【００４２】
キャッシュディレクトリは、マルチＣＰＵシステムの任意のキャッシュサブシステムにキャッシュされる少なくとも１つのキャッシュラインを有するメモリの領域を追跡し、各領域は、複数のキャッシュラインを含む（ブロック８０５）。キャッシュディレクトリは、システムのいずれかのキャッシュサブシステムにキャッシュされる少なくとも１つのキャッシュラインを含むメモリの領域ごとにエントリを維持する（ブロック８１０）。キャッシュディレクトリは、キャッシュディレクトリの各エントリについて参照カウントを維持し、参照カウントは、システムのすべてのキャッシュサブシステムにキャッシュされる領域のキャッシュライン数の合計である（ブロック８１５）。キャッシュディレクトリは、所与の領域内のキャッシュラインを標的とするメモリ要求を受信することに応答して、所与の領域の任意のキャッシュラインを備える各ＣＰＵにプローブを送信する（ブロック８２０）。キャッシュディレクトリは、対応する領域のキャッシュラインがＣＰＵによってキャッシュされることに応答して、所与のエントリについて参照カウントをインクリメントする（ブロック８２５）。キャッシュディレクトリは、対応する領域のキャッシュラインがＣＰＵのキャッシュサブシステムから追い出されることに応答して、所与のエントリについて参照カウントをデクリメントする（ブロック８３０）。ブロック８３０後、方法８００は、終了する。
【００４３】
ここで図９を参照して、コヒーレントスレーブがＣＰＵからの無効化インディケーションを処理するための方法９００の一実施形態を示す。コヒーレントスレーブは、所与のＣＰＵが特定のキャッシュラインをもはやキャッシュしていないことを示す無効化インディケーションを所与のＣＰＵから受信する（ブロック９０５）。無効化インディケーションを受信することに応答して、コヒーレントスレーブは、特定のキャッシュラインの領域を決定する（ブロック９１０）。次に、コヒーレントスレーブは、識別された領域についてキャッシュディレクトリのエントリを置く（ブロック９１５）。
【００４４】
次いで、コヒーレントスレーブは、識別された領域について置かれたキャッシュディレクトリのエントリ中の参照カウントをデクリメントする（ブロック９２０）。ここで参照カウントがゼロに等しい（条件ブロック９２５、「はい」肢部）場合、コヒーレントスレーブは、エントリを無効にする（ブロック９３０）。キャッシュディレクトリのエントリなしで領域を標的とするメモリ要求を受信するときに、ここでエントリを再利用して新しいエントリを割り振ることができる。参照カウントがまだゼロより大きい（条件ブロック９２５、「いいえ」肢部）場合、コヒーレントスレーブは、エントリの有効ステータスを維持する（ブロック９３５）。ブロック９３０及び９３５後、方法９００は、終了する。
【００４５】
ここで図１０を参照して、キャッシュディレクトリがメモリの第一領域へのアクセスを追跡するための方法１０００の一実施形態を示す。キャッシュディレクトリは、メモリの第一領域内の第一キャッシュラインへの第一メモリ要求を受信する（ブロック１００５）。第一領域がキャッシュディレクトリにエントリを有さないと判定することに応答して、第一領域について新しいエントリをキャッシュディレクトリに割り振り、新しいエントリについての参照カウントを１に初期化する（ブロック１０１０）。キャッシュディレクトリがいっぱいである場合、キャッシュディレクトリは、既存のエントリを追い出して、新しいエントリを割り振る。キャッシュディレクトリは、任意の適切なエビクションアルゴリズムを利用して、追い出すエントリを決定することができる。次に、キャッシュディレクトリは、メモリの第一領域内の第二キャッシュラインへの第二メモリ要求を受信し、第二キャッシュラインは、必ずしも第一キャッシュラインと物理的に異ならない（ブロック１０１５）。メモリの第一領域への第二メモリ要求を受信することに応答して、メモリの第一領域に対応するエントリについての参照カウントを２にインクリメントする（ブロック１０２０）。ブロック１０２０後、方法１０００は、終了する。メモリの第一領域に対応するエントリについての参照カウントが第一領域内の任意のキャッシュラインへの後続のメモリ要求ごとにインクリメントされることに留意する。また、参照カウントは、第一領域からのキャッシュラインがキャッシュサブシステムから追い出されるたびにデクリメントされる。
【００４６】
ここで図１１を参照して、異なる粒度レベルでキャッシュディレクトリのアレイを維持するための方法１１００の一実施形態を示す。キャッシュディレクトリは、第一アレイにエントリを維持して、第一粒度でメモリのアドレス範囲を追跡する（ブロック１１０５）。一実施形態では、第一粒度は、メモリのページである。一実施形態では、ページは、４キロバイト（ＫＢ）である。他の実施形態では、第一粒度は、他のアドレス範囲のサイズに対応することができる。
【００４７】
キャッシュディレクトリは、第一アレイ中のエントリごとに参照カウントを維持して、システム中のどこかにキャッシュされている領域のキャッシュラインの数を追跡する（ブロック１１１０）。所与のエントリについての参照カウントがプログラム可能な閾値を超える（条件ブロック１１１５、「はい」肢部）場合、キャッシュディレクトリは、対応するアドレス範囲を第二粒度で追跡し始め、第二粒度は、第一粒度よりも細かい粒度である（ブロック１１２０）。一実施形態では、第二粒度は、キャッシュラインに対応する。一実施形態では、キャッシュラインは、６４バイトを含む。他の実施形態では、他のサイズのキャッシュラインを利用することができる。所与のエントリについての参照カウントがプログラム可能な閾値以下である（条件ブロック１１１５、「いいえ」肢部）場合、キャッシュディレクトリは、対応するアドレス範囲を第一粒度で追跡し続ける（ブロック１１２５）。ブロック１１２５後、方法１１００は、ブロック１１１０に戻る。
【００４８】
システムにキャッシュされる対応するアドレス範囲からの新しいキャッシュラインごとに、キャッシュディレクトリは、新しいエントリを第二アレイに割り振り、領域のこの部分を第二粒度で追跡する（ブロック１１３０）。第二アレイがいっぱいである場合、キャッシュディレクトリは、第二アレイからエントリを追い出して、新しいエントリを割り振る。キャッシュディレクトリは、任意の適切なエビクションアルゴリズムを利用して、追い出すエントリを決定することができる。ブロック１１３０後、方法１１００は、ブロック１１１０に戻る。
【００４９】
ここで図１２を参照して、マルチアレイキャッシュディレクトリを操作するための方法１２００の一実施形態を示す。メモリ要求をマルチＣＰＵシステムのマルチアレイキャッシュディレクトリで受信する（ブロック１２０５）。キャッシュディレクトリは、メモリ要求のために第一及び第二アレイの並列ルックアップを実行する（ブロック１２１０）。一実施形態では、第一アレイは、第一粒度でアドレス範囲を追跡し、第二アレイは、第二粒度でアドレス範囲を追跡し、第二粒度は、第一粒度よりも細かい粒度である。ルックアップの結果が第一アレイ及び第二アレイの両方についてヒットをもたらす（条件ブロック１２１５、「はい」肢部）場合、キャッシュディレクトリは、第二アレイからのマッチングするエントリを利用してプローブを生成する（ブロック１２２０）。ルックアップの結果が第一アレイのみにヒットをもたらす（条件ブロック１２２５、「はい」肢部）場合、キャッシュディレクトリは、第一アレイからのマッチングするエントリを利用してプローブを生成する（ブロック１２３０）。ルックアップの結果が第一及び第二アレイの両方へのミスをもたらす（条件ブロック１２２５、「いいえ」肢部）場合、キャッシュディレクトリは、メモリ要求のアドレス範囲について第一粒度で新しいエントリを第一アレイに割り振る（ブロック１２３５）。第一アレイがいっぱいである場合、キャッシュディレクトリは、第一アレイから既存のエントリを追い出すことができる。キャッシュディレクトリは、追い出す既存のエントリを決定するために任意の適切な技法を利用することができる。キャッシュディレクトリが第一アレイから既存のエントリを追い出す場合、キャッシュディレクトリは、対応するアドレス範囲のキャッシュラインを有する１つ以上のＣＰＵに無効化プローブを送信する。ブロック１２２０、１２３０、及び１２３５の後、方法１２００は、終了する。
【００５０】
ここで図１３を参照して、キャッシュディレクトリが直近に訪問済みのプライベート領域についてのエントリを伴うデータ構造を維持するための方法１３００の一実施形態を示す。キャッシュディレクトリは、データ構造を維持して、最後のＮ個のアクセスされたプライベート領域についてエントリをキャッシュする（ブロック１３０５）。Ｎの値は、実施形態によって異なることができる。また、キャッシュディレクトリは、マルチＣＰＵシステムの任意のキャッシュサブシステムにキャッシュされるキャッシュラインを有する領域を追跡するためのエントリを備える１つ以上のアレイを維持する（ブロック１３１０）。
【００５１】
次に、メモリ要求をキャッシュディレクトリで受信する（ブロック１３１５）。メモリ要求を受信することに応答して、キャッシュディレクトリは、最後にアクセスされたＮ個のプライベート領域についてのエントリを備えるデータ構造へのルックアップを実行する（ブロック１３２０）。ルックアップの結果がヒットをもたらす（条件ブロック１３２５、「はい」肢部）場合、キャッシュディレクトリは、マッチングするエントリを利用して１つ以上のキャッシュサブシステムについてプローブを生成する（ブロック１３３０）。また、キャッシュディレクトリは、メインキャッシュディレクトリのアレイ（複数可）へのルックアップをキャンセルする（ブロック１３３５）。ルックアップの結果がミスをもたらす（条件ブロック１３２５、「いいえ」肢部）場合、キャッシュディレクトリは、要求についてメインキャッシュディレクトリのアレイ（複数可）へのルックアップ（複数可）を実行する（ブロック１３４０）。キャッシュディレクトリは、メインキャッシュディレクトリのアレイへのルックアップを処理するためにいずれかの適切な処理プロシージャを利用することができる。ブロック１３３５及び１３４０後、方法１３００は、終了する。
【００５２】
ここで図１４を参照して、異なる粒度レベルでキャッシュディレクトリのアレイを維持するための方法１４００の一実施形態を示す。キャッシュディレクトリは、第一アレイにエントリを維持して、第一粒度でメモリのプライベート領域のアドレス範囲を追跡する（ブロック１４０５）。一実施形態では、第一粒度は、メモリのページである。一実施形態では、ページは、４ＫＢである。他の実施形態では、第一粒度は、他のアドレス範囲のサイズに対応することができる。
【００５３】
キャッシュディレクトリは、プライベート領域のいずれかが共有状態に移行したかどうかを判定する（条件ブロック１４１０）。プライベート領域のいずれかが共有状態に移行した（条件ブロック１４１０、「はい」肢部）場合、キャッシュディレクトリは、対応するアドレス範囲を第二粒度で追跡し始め、第二粒度は、第一粒度よりも細かい粒度である（ブロック１４１５）。一実施形態では、第二粒度は、キャッシュラインに対応する。一実施形態では、キャッシュラインは、６４バイトを含む。他の実施形態では、他のサイズのキャッシュラインを利用することができる。いかなるプライベート領域も共有状態に移行しなかった（条件ブロック１４１０、「いいえ」肢部）場合、キャッシュディレクトリは、対応するアドレス範囲を第一粒度で追跡し続ける（ブロック１４２０）。ブロック１４２０後、方法１４００は、ブロック１４１０に戻る。
【００５４】
システムにキャッシュされる対応するアドレス範囲からの新しいキャッシュラインごとに、キャッシュディレクトリは、新しいエントリを第二アレイに割り振り、領域のこの部分を第二粒度で追跡する（ブロック１４２５）。第二アレイがいっぱいである場合、キャッシュディレクトリは、第二アレイからエントリを追い出して、新しいエントリを割り振る。キャッシュディレクトリは、任意の適切なエビクションアルゴリズムを利用して、追い出すエントリを決定することができる。ブロック１４２５後、方法１４００は、ブロック１４１０に戻る。
【００５５】
さまざまな実施形態では、ソフトウェアアプリケーションのプログラムインストラクションを使用して、本明細書に説明される方法及び／またはメカニズムを実装する。例えば、汎用または特殊目的プロセッサによって実行可能なプログラム命令が企図される。さまざまな実施形態では、そのようなプログラム命令は、高レベルプログラミング言語として表されてもよい。他の実施形態では、プログラム命令は、高レベルプログラミング言語から、バイナリ、中間、または他の形式にコンパイルされてもよい。代わりに、ハードウェアの振る舞いまたは設計を記述したプログラム命令が書き込まれてもよい。そのようなプログラム命令は、Ｃなどの高レベルプログラミング言語によって表されてもよい。代わりに、Ｖｅｒｉｌｏｇなどのハードウェア設計言語（ＨＤＬ）が使用されてもよい。さまざまな実施形態では、プログラム命令は、さまざまな非一時的コンピュータ可読記憶媒体のいずれかに記憶される。記憶媒体は、プログラム実行のためにプログラム命令をコンピューティングシステムに提供するために使用される間にコンピューティングシステムによってアクセス可能である。一般的に言うと、そのようなコンピューティングシステムは、プログラム命令を実行するように構成された少なくとも１つ以上のメモリ及び１つ以上のプロセッサを含む。
【００５６】
上記説明された実施形態が、実装態様の非限定的な例にすぎないことが強調されるべきである。上記の開示を十分に理解したとき、多くの変形形態及び修正形態が、当業者に明らかになるであろう。以下の特許請求の範囲は、全てのそのような変形及び修正を包含すると解釈されることが意図される。
【図１】
2021507437.tif 000003
【図２】
2021507437.tif 000004
【図３】
2021507437.tif 000005
【図４】
2021507437.tif 000006
【図５】
2021507437.tif 000007
【図６】
2021507437.tif 000008
【図７】
2021507437.tif 000009
【図８】
2021507437.tif 000010
【図９】
2021507437.tif 000011
【図１０】
2021507437.tif 000012
【図１１】
2021507437.tif 000013
【図１２】
2021507437.tif 000014
【図１３】
2021507437.tif 000015
【図１４】
2021507437.tif 000016
【国際調査報告】
2021507437.tif 000017
2021507437.tif 000018