(57)【要約】領域ベースのキャッシュディレクトリスキームにおけるプライベート領域へのアクセスを加速するシステム、装置及び方法が開示されている。システムは、複数の処理ノードと、１つ以上のメモリデバイスと、ノードのキャッシュサブシステム間のキャッシュコヒーレンスを管理するための１つ以上の領域ベースのキャッシュディレクトリと、を含む。領域ベースのキャッシュディレクトリは、キャッシュラインベースではなく領域ベースでコヒーレンスを追跡する。領域は、複数のキャッシュラインを含む。単一のノードのみによってアクセスされる領域のキャッシュディレクトリエントリは、そのノードにローカルにキャッシュされる。これらのエントリの参照カウントの更新は、キャッシュディレクトリに更新を送信するのではなく、ローカルに行われる。第２のノードが第１のノードのプライベート領域にアクセスすると、その領域が共有されると見なされ、この領域のエントリは、第１のノードからキャッシュディレクトリに転送される。【選択図】図６
2021527283.tif 000002
【特許請求の範囲】
【請求項１】
複数の処理ノードであって、前記複数の処理ノードの各処理ノードは、１つ以上のプロセッサと、キャッシュサブシステムと、を備える、複数の処理ノードと、
１つ以上のメモリデバイスと、
１つ以上の領域ベースのキャッシュディレクトリであって、各領域ベースのキャッシュディレクトリは、少なくとも２つの異なる処理ノードによってキャッシュされたキャッシュラインを有するメモリの共有領域を追跡するように構成されている、領域ベースのキャッシュディレクトリと、を備えるシステムであって、
前記複数の処理ノードの各処理ノードは、
対応する領域ベースのキャッシュディレクトリから、所定の領域がプライベートであるという指標を受信したことに応じて、前記所定の領域のキャッシュラインを分離するために、前記処理ノードによるアクセスの数を追跡するための参照カウントフィールドを有するエントリを維持するように構成されており、プライベート領域は、単一の処理ノードのみによってアクセスされる、
システム。
【請求項２】
各処理ノードは、前記参照カウントフィールドが０より大きい間、前記対応する領域ベースのキャッシュディレクトリに通知することなく、前記エントリの前記参照カウントフィールドへの更新を実行するように構成されている、
請求項１のシステム。
【請求項３】
各処理ノードは、前記対応する領域ベースのキャッシュディレクトリから、前記領域のキャッシュラインが別の処理ノードによってキャッシュされたという通知を受信したことに応じて、前記エントリの前記参照カウントフィールドを、前記対応する領域ベースのキャッシュディレクトリに送信し、前記エントリを無効化するように構成されている、
請求項２のシステム。
【請求項４】
前記１つ以上の領域ベースのキャッシュディレクトリの各領域ベースのキャッシュディレクトリは、前記共有領域のキャッシュラインを分離するために、前記複数の処理ノードによるアクセスの数を追跡する各共有領域のエントリを維持するように構成されており、共有領域は、少なくとも２つの処理ノードによってアクセスされる、
請求項１のシステム。
【請求項５】
前記１つ以上の領域ベースのキャッシュディレクトリのうち第１の領域ベースのキャッシュディレクトリは、
所定の領域のキャッシュラインが第１の処理ノードによってキャッシュされたという指標を受信したことに応じてルックアップを実行し、
前記ルックアップがミスしたことに応じて、前記第１の処理ノードに通知を送信して、前記所定の領域に対するローカル領域ベースのキャッシュディレクトリエントリを前記第１の処理ノードに維持させるように構成されている、
請求書４のシステム。
【請求項６】
前記第１の領域ベースのキャッシュディレクトリは、
前記ルックアップがヒットであることに応じて、一致するエントリが、前記所定の領域がプライベートであると示すかどうかを判別し、
前記一致するエントリが、前記所定の領域がプライベートであると示すと判別したことに応じて、前記一致するエントリで識別された第２の処理ノードに対して、前記所定の領域が現在共有されているという通知を送信するように構成されている、
請求項５のシステム。
【請求項７】
前記第１の領域ベースのキャッシュディレクトリは、
前記第２の処理ノードが、前記通知を受信し、前記参照カウントを前記領域ベースのキャッシュディレクトリに送信したことに応じて、前記第２の処理ノードから前記参照カウントを受信し、
前記参照カウントをインクリメントして、前記一致するエントリに記憶するように構成されている、
請求項６のシステム。
【請求項８】
少なくとも２つの異なる処理ノードによってキャッシュされたキャッシュラインを有するメモリの共有領域を、１つ以上の領域ベースのキャッシュディレクトリによって追跡することと、
対応する領域ベースのキャッシュディレクトリから、所定の領域がプライベートであるという指標を受信したことに応じて、前記所定の領域のキャッシュラインを分離するために、前記処理ノードによるアクセスの数を追跡する参照カウントフィールドを有するエントリを、複数の処理ノードの各処理ノードによって維持することと、を含み、
プライベート領域は、単一の処理ノードのみによってアクセスされる、
方法。
【請求項９】
前記参照カウントフィールドが０より大きい間、前記対応する領域ベースのキャッシュディレクトリに通知することなく、各処理ノードによって、前記エントリの前記参照カウントフィールドへの更新を実行することをさらに含む、
請求項８の方法。
【請求項１０】
前記対応する領域ベースのキャッシュディレクトリから、前記領域のキャッシュラインが別の処理ノードによってキャッシュされたという通知を受信したことに応じて、各処理ノードによって、前記エントリの前記参照カウントフィールドを、前記対応する領域ベースのキャッシュディレクトリに送信することと、前記エントリを無効化することと、をさらに含む、
請求項９の方法。
【請求項１１】
前記共有領域のキャッシュラインを分離するために、前記複数の処理ノードによるアクセスの数を追跡する各共有領域のエントリを、各領域ベースのキャッシュディレクトリによって維持することをさらに含み、
共有領域は、少なくとも２つの処理ノードによってアクセスされる、
請求項８の方法。
【請求項１２】
所定の領域のキャッシュラインが第１の処理ノードによってキャッシュされたという指標を受信したことに応じて、第１の領域ベースのキャッシュディレクトリによってルックアップを実行することと、
前記ルックアップがミスしたことに応じて、前記第１の領域ベースのキャッシュディレクトリによって、前記第１の処理ノードに通知を送信して、前記所定の領域に対するローカル領域ベースのキャッシュディレクトリエントリを前記第１の処理ノードに維持させることと、をさらに含む、
請求項１１の方法。
【請求項１３】
前記ルックアップがヒットであることに応じて、前記第１の領域ベースのキャッシュディレクトリによって、一致するエントリが、前記所定の領域がプライベートである示すかどうかを判別することと、
前記所定の領域がプライベートであると判別したことに応じて、前記第１の領域ベースのキャッシュディレクトリによって、前記一致するエントリで識別された第２の処理ノードに対して、前記所定の領域が現在共有されているという通知を送信することと、をさらに含む、
請求項１２の方法。
【請求項１４】
前記第２の処理ノードが、前記通知を受信し、参照カウントを前記第１の領域ベースのキャッシュディレクトリに送信したことに応じて、前記第１の領域ベースのキャッシュディレクトリによって、前記第２の処理ノードから前記参照カウントを受信することと、
前記第１の領域ベースのキャッシュディレクトリによって、前記参照カウントをインクリメントして、前記一致するエントリに記憶することと、をさらに含む、
請求項１３の方法。
【請求項１５】
複数の処理ノードであって、各処理ノードは、１つ以上のプロセッサと、キャッシュサブシステムと、を備える、複数の処理ノードと、
複数のノードベースのキャッシュディレクトリであって、各領域ベースのキャッシュディレクトリは、少なくとも２つの異なる処理ノードによってキャッシュされたキャッシュラインを有するメモリの共有領域を追跡するように構成されている、ノードベースのキャッシュディレクトリと、を備える装置であって、
第１の処理ノードは、対応する領域ベースのキャッシュディレクトリから、第１の領域が前記第１の処理ノードのみによってアクセスされているという指標を受信したことに応じて、前記第１の領域のキャッシュラインを分離するために、前記第１の処理ノードによるアクセスの数を追跡する参照カウントフィールドを有するエントリを維持するように構成されている、
装置。
【請求項１６】
前記第１の処理ノードは、前記参照カウントフィールドが０より大きい間、前記対応する領域ベースのキャッシュディレクトリに通知することなく、前記エントリの前記参照カウントフィールドへの更新を実行するように構成されている、
請求項１５の装置。
【請求項１７】
前記第１の処理ノードは、前記対応する領域ベースのキャッシュディレクトリから、前記第１の領域のキャッシュラインが別の処理ノードによってキャッシュされたという通知を受信したことに応じて、前記エントリの前記参照カウントフィールドを、前記対応する領域ベースのキャッシュディレクトリに送信し、前記エントリを無効化するように構成されている、
請求項１６の装置。
【請求項１８】
前記複数の領域ベースのキャッシュディレクトリの各領域ベースのキャッシュディレクトリは、前記共有領域のキャッシュラインを分離するために、前記複数の処理ノードによるアクセスの数を追跡する各共有領域のエントリを維持するように構成されており、共有領域は、少なくとも２つの処理ノードによってアクセスされる、
請求項１５の装置。
【請求項１９】
前記複数の領域ベースのキャッシュディレクトリのうち第１の領域ベースのキャッシュディレクトリは、
第２の領域のキャッシュラインが前記第１の処理ノードによってキャッシュされたという指標を受信したことに応じてルックアップを実行し、
前記ルックアップがミスしたことに応じて、前記第１の処理ノードに通知を送信して、前記第２の領域に対するローカル領域ベースのキャッシュディレクトリエントリを前記第１の処理ノードに維持させるように構成されている、
請求項１８の装置。
【請求項２０】
前記第１の領域ベースのキャッシュディレクトリは、
前記ルックアップがヒットであることに応じて、一致するエントリが、前記第２の領域がプライベートであると示すかどうかを判別し、
前記一致するエントリが、前記所定の領域がプライベートであると示すと判別したことに応じて、前記一致するエントリで識別された第２の処理ノードに対して、前記所定の領域が現在共有されているという通知を送信するように構成されている、
請求項１９の装置。
【請求項２１】
前記第１のノードベースのキャッシュディレクトリは、前記所定の領域の全てのキャッシュラインがエビクトされたという無効化プローブへの応答を受信したことに応じて、前記所定の領域の第２のエントリを無効化するように構成されている、
請求項１９の装置。
【発明の詳細な説明】
【背景技術】
【０００１】
（関連技術の説明）
コンピュータシステムは、通常、安価で高密度のダイナミックランダムアクセスメモリ（ＤＲＡＭ）チップで形成されたメインメモリを使用する。しかしながら、ＤＲＡＭチップは、比較的長いアクセス時間に悩まされる。パフォーマンスを向上させるために、データプロセッサには、通常、キャッシュとして知られるローカルな高速メモリが少なくとも１つ含まれる。マルチコアデータプロセッサでは、各データプロセッサコアは、専用のレベル１（Ｌ１）キャッシュを有することができ、他のキャッシュ（例えばレベル２（Ｌ２）、レベル３（Ｌ３））は、データプロセッサコアによって共有される。
【０００２】
コンピューティングシステムのキャッシュサブシステムには、データブロックを記憶する高速キャッシュメモリが含まれている。本明細書中で用いられる場合、「ブロック」は、隣接するメモリ位置に記憶されたバイトのセットであり、これらは、一貫性の目的のための単位として扱われる。本明細書中で用いられる場合、「キャッシュブロック」、「ブロック」、「キャッシュライン」及び「ライン」の各々の用語は、交換可能である。一部の実装では、ブロックを、キャッシュ内の割当て及び割当解除の単位にすることもできる。ブロック内のバイト数は、設計の選択に応じて異なる。
【０００３】
マルチノードコンピュータシステムでは、様々な処理ノードで使用されているデータのコヒーレンシを維持するために、特別な対策を講じなくてはならない。例えば、プロセッサが特定のメモリアドレスのデータにアクセスしようとする場合、プロセッサは、先ず、メモリが別のキャッシュに記憶されており、変更されているかどうかを判断しなければならない。このキャッシュコヒーレンシプロトコルを実装するために、キャッシュには、通常、システム全体でデータコヒーレンシを維持するためにキャッシュラインのステータスを示す複数のステータスビットが含まれている。一般的なコヒーレンシプロトコルの１つは、「ＭＯＥＳＩ」プロトコルとして知られている。ＭＯＥＳＩプロトコルによれば、各キャッシュラインには、ラインが何れのＭＯＥＳＩ状態にあるかを示すステータスビットが含まれている。これらには、キャッシュラインが変更されている（Ｍ）こと、キャッシュラインが排他的（Ｅ）若しくは共有されている（Ｓ）こと、又は、キャッシュラインが無効である（Ｉ）ことを示すビットが含まれている。所有（Ｏ）状態は、ラインが１つのキャッシュにおいて変更されたこと、他のキャッシュに共有コピーが存在し得ること、及び、メモリ内のデータが失効している（stale）ことを示す。
【０００４】
キャッシュディレクトリは、高性能でスケーラブルなシステムにおける主要な構成要素である。キャッシュディレクトリは、システムで現在使用されているキャッシュラインを追跡するために使用される。キャッシュディレクトリは、必要な場合にのみメモリ要求又はプローブ要求を実行することによって、メモリ帯域幅及びプローブ帯域幅削減の両方を向上させる。論理的には、キャッシュディレクトリは、キャッシュコヒーレンスプロトコルを実施するキャッシュラインのホームノードに存在する。キャッシュディレクトリの動作原理は包括的である（すなわち、中央処理装置（ＣＰＵ）キャッシュに存在するラインは、キャッシュディレクトリに存在しなければならない）。キャッシュラインベースのディレクトリスキームでは、各キャッシュラインが個別に追跡される。したがって、キャッシュディレクトリのサイズは、コンピューティングシステム内の全てのＣＰＵキャッシュサブシステムの合計容量に比例して増加する必要がある。ＣＰＵキャッシュサイズの合計は、メモリ技術が向上するにつれて急激に増加する傾向がある。したがって、ラインベースのキャッシュディレクトリスキームは、ＣＰＵキャッシュサイズの急激な増加に対応することが不可能である。
【０００５】
添付図面と併せて以下の説明を参照することによって、本明細書に記載される方法及びメカニズムの利点をより良く理解することができる。
【図面の簡単な説明】
【０００６】
【図１】コンピューティングシステムの一実施形態のブロック図である。
【図２】コアコンプレックス（core complex）の一実施形態のブロック図である。
【図３】マルチＣＰＵシステムの一実施形態のブロック図である。
【図４】領域ベースのキャッシュディレクトリの一実施形態のブロック図である。
【図５】プライベート領域ベースのキャッシュディレクトリエントリの一実施形態の図である。
【図６】領域ベースのキャッシュディレクトリスキームにおけるプライベート領域へのアクセスを加速する方法の一実施形態を示す一般化されたフロー図である。
【図７】領域ベースのキャッシュディレクトリを維持する方法の一実施形態を示す一般化されたフロー図である。
【図８】領域ベースのキャッシュディレクトリエントリを管理する方法の一実施形態を示す一般化されたフロー図である。
【発明を実施するための形態】
【０００７】
以下の説明では、本明細書に提示される方法及びメカニズムの十分な理解をもたらすために、多数の具体的な詳細が記載されている。しかしながら、当業者は、これらの具体的な詳細無しに様々な実施形態が実施され得ることを認識すべきである。場合によっては、本明細書に記載されるアプローチを曖昧にすることを回避するために、周知の構造、構成要素、信号、コンピュータプログラム命令及び技術が詳細に示されていない。説明を簡単且つ明確にするために、図に示される要素が必ずしも縮尺通りに描かれていないことが理解されるであろう。例えば、いくつかの要素の寸法は、他の要素に対して誇張される場合がある。
【０００８】
領域ベースのキャッシュディレクトリスキームにおいて、プライベート領域へのアクセスを加速するシステム、装置及び方法が開示されている。システムは、複数の処理ノードを含み、各処理ノードは、キャッシュサブシステムを含む。また、システムは、１つ以上のメモリデバイスと、ノードのキャッシュサブシステム間のキャッシュコヒーレンシの管理に役立つ１つ以上の領域ベースのキャッシュディレクトリと、を含む。キャッシュディレクトリ内のエントリの数を減らすために、キャッシュディレクトリは、コヒーレンシを、キャッシュラインベースではなく領域ベースで追跡する。領域は、複数のキャッシュラインを含む。単一のノードによってのみアクセスされるプライベート領域のキャッシュディレクトリエントリは、そのノードでローカルにキャッシュされる。これらのエントリの参照カウントの更新は、キャッシュディレクトリに更新を送信するのではなく、ローカルに行われる。第２のノードが第１のノードのプライベート領域にアクセスすると、その領域が共有されると見なされ、この領域のエントリは、第１のノードからキャッシュディレクトリに転送される。
【０００９】
図１を参照すると、コンピューティングシステム１００の一実施形態のブロック図が示されている。一実施形態では、コンピューティングシステム１００は、少なくとも、コアコンプレックス１０５Ａ〜１０５Ｎと、入力／出力（Ｉ／Ｏ）インターフェース１２０と、バス１２５と、メモリコントローラ（複数可）１３０と、ネットワークインターフェース１３５と、を含む。他の実施形態では、コンピューティングシステム１００は、他の構成要素を含み、及び／又は、コンピューティングシステム１００は、異なるように構成されている。一実施形態では、各コアコンプレックス１０５Ａ〜１０５Ｎは、中央処理装置（ＣＰＵ）等の１つ以上の汎用プロセッサを含む。「コアコンプレックス」は、本明細書では「処理ノード」又は「ＣＰＵ」と呼ばれ得ることに留意されたい。いくつかの実施形態では、１つ以上のコアコンプレックス１０５Ａ〜１０５Ｎは、高並列アーキテクチャを備えたデータ並列プロセッサを含む。データ並列プロセッサの例として、グラフィックスプロセッシングユニット（ＧＰＵ）、デジタルシグナルプロセッサ（ＤＳＰ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、特定用途向け集積回路（ＡＳＩＣ）等が挙げられる。コアコンプレックス１０５Ａ〜１０５Ｎ内の各プロセッサコアは、１つ以上のレベルのキャッシュを備えたキャッシュサブシステムを含む。一実施形態では、各コアコンプレックス１０５Ａ〜１０５Ｎは、複数のプロセッサコア間で共有されるキャッシュ（例えば、レベル３（Ｌ３）キャッシュ）を含む。
【００１０】
メモリコントローラ（複数可）１３０は、コアコンプレックス１０５Ａ〜１０５Ｎによってアクセス可能な任意の数及びタイプのメモリコントローラを表す。メモリコントローラ（複数可）１３０は、任意の数及びタイプのメモリデバイス（図示省略）に連結されている。例えば、メモリコントローラ（複数可）１３０に連結されるメモリデバイス（複数可）内のメモリのタイプは、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、ＮＡＮＤフラッシュメモリ、ＮＯＲフラッシュメモリ、強誘電体ランダムアクセスメモリ（ＦｅＲＡＭ）等を含むことができる。Ｉ／Ｏインターフェース１２０は、任意の数及びタイプのＩ／Ｏインターフェース（例えば、ＰＣＩ（Peripheral Component Interconnect）バス、ＰＣＩ−Ｘ（PCI-Extended）、ＰＣＩＥ（PCI Express）バス、ギガビットイーサネット（登録商標）（ＧＢＥ）バス、ユニバーサルシリアルバス（ＵＳＢ））を表す。様々なタイプの周辺デバイスが、Ｉ／Ｏインターフェース１２０に連結されている。そのような周辺デバイスには、ディスプレイ、キーボード、マウス、プリンタ、スキャナ、ジョイスティック又は他のタイプのゲームコントローラ、メディア記録デバイス、外部ストレージデバイス、ネットワークインターフェースカード等が含まれるが、これらに限定されない。
【００１１】
様々な実施形態において、コンピューティングシステム１００は、サーバ、コンピュータ、ラップトップ、モバイルデバイス、ゲームコンソール、ストリーミングデバイス、ウェアラブルデバイス、又は、他の様々なタイプのコンピューティングシステム若しくはコンピューティングデバイスである。コンピューティングシステム１００の構成要素の数は、実施形態毎に異なることに留意されたい。他の実施形態では、図１に示す数よりも多い又は少ないコンポーネントが存在する。また、他の実施形態では、コンピューティングシステム１００は、図１に示されていない他のコンポーネントを含み、及び／又は、他の方法で構成されることに留意されたい。
【００１２】
図２を参照すると、コアコンプレックス２００の一実施形態のブロック図が示されている。一実施形態では、コアコンプレックス２００は、４つのプロセッサコア２１０Ａ〜２１０Ｄを含む。他の実施形態では、コアコンプレックス２００は、他の数のプロセッサコアを含む。「コアコンプレックス」は、本明細書では「処理ノード」又は「ＣＰＵ」と呼ばれ得ることに留意されたい。一実施形態では、コアコンプレックス２００の構成要素は、（図１の）コアコンプレックス１０５Ａ〜１０５Ｎ内に含まれている。
【００１３】
各プロセッサコア２１０Ａ〜２１０Ｄは、メモリサブシステム（図示省略）から取得されたデータ及び命令を記憶するためのキャッシュサブシステムを含む。例えば、一実施形態では、各コア２１０Ａ〜２１０Ｄは、対応するレベル１（Ｌ１）キャッシュ２１５Ａ〜２１５Ｄを含む。一実施形態では、各プロセッサコア２１０Ａ〜２１０Ｄは、対応するレベル２（Ｌ２）キャッシュ２２０Ａ〜２２０Ｄを含むか、それに結合されている。さらに、一実施形態では、コアコンプレックス２００は、プロセッサコア２１０Ａ〜２１０Ｄによって共有されるレベル３（Ｌ３）キャッシュ２３０を含む。この実施形態では、Ｌ３キャッシュ２３０は、ファブリック及びメモリサブシステムにアクセスするためにコヒーレントマスターに結合されている。他の実施形態では、コアコンプレックス２００は、他の数のキャッシュ、及び／又は、異なるキャッシュレベルの他の構成を備える他のタイプのキャッシュサブシステムを含むことに留意されたい。
【００１４】
一実施形態では、プライベート領域ベースのキャッシュディレクトリエントリ２４０は、Ｌ３キャッシュ２３０内に記憶されている。別の実施形態では、プライベート領域ベースのキャッシュディレクトリエントリ２４０は、コアコンプレックス２００に結合されたコヒーレントマスター（図示省略）に記憶されている。他の実施形態では、プライベート領域ベースのキャッシュディレクトリエントリ２４０は、コアコンプレックス２００内の他の場所又はコアコンプレックス２００の外部に記憶されている。
【００１５】
プライベート領域ベースのキャッシュディレクトリエントリ２４０内の各エントリは、コアコンプレックス２００のコア２１０Ａ〜２１０Ｄの何れかによってアクセスされる少なくとも１つのキャッシュラインを有するプライベート領域を追跡する。本明細書で用いられる場合、「プライベート領域」という用語は、コンピューティングシステム全体の単一の処理ノードにのみキャッシュされたキャッシュラインを有する領域として定義される。所定の領域のキャッシュラインがＬ１キャッシュ２１５Ａ〜２１５Ｄに割り当てられている場合、所定の領域に関するＣＰＵキャッシュディレクトリ２４０のルックアップが実行される。所定の領域に関するプライベート領域ベースのキャッシュディレクトリエントリ２４０にエントリが既に割り当てられている場合、一致するエントリの参照カウントがインクリメントされる。所定の領域に関するプライベート領域ベースのキャッシュディレクトリエントリ２４０のルックアップがミスである場合、ミスという表示が、対応する領域ベースのキャッシュディレクトリ（図示省略）に送信される。対応する領域ベースのキャッシュディレクトリが、所定の領域がプライベート領域である（すなわち、所定の領域に対してキャッシュされたキャッシュラインを有する他の処理ノードがない）ことを示すメッセージで応答した場合、新たなエントリが、プライベート領域ベースのキャッシュディレクトリエントリ２４０内の所定の領域に割り当てられる。
【００１６】
Ｌ１キャッシュ２１５Ａ〜２１５Ｄ又はＬ２キャッシュ２２０Ａ〜２２０Ｄ内の所定のキャッシュラインがコヒーレンシプローブによってエビクト又は無効化され、プライベート領域ベースのキャッシュディレクトリエントリ２４０が、この所定のキャッシュラインの領域のエントリを有する場合、このエントリの参照カウントがデクリメントされる。エントリの参照カウントが０になると、このエントリが無効としてマークされ、再利用することができる。また、プライベート領域ベースのキャッシュディレクトリエントリ２４０の参照カウントが０になると、領域ベースのキャッシュディレクトリに通知が送信される。このメッセージの受信に応じて、領域ベースのキャッシュディレクトリ内の対応するエントリが無効化される。
【００１７】
図３を参照すると、マルチＣＰＵシステム３００の一実施形態のブロック図が示されている。一実施形態では、システムは、複数のＣＰＵ３０５Ａ〜３０５Ｎを含む。システム当たりのＣＰＵの数は、実施形態毎に異なる。各ＣＰＵ３０５Ａ〜３０５Ｎは、任意の数のコア３０８Ａ〜３０８Ｎを含み、コアの数は、実施形態によって異なる。各ＣＰＵ３０５Ａ〜３０５Ｎは、対応するキャッシュサブシステム３１０Ａ〜３１０Ｎも含む。各キャッシュサブシステム３１０Ａ〜３１０Ｎは、任意の数のレベルのキャッシュ及び任意のタイプのキャッシュ階層構造を含む。
【００１８】
一実施形態では、各キャッシュサブシステム３１０Ａ〜３１０Ｎは、プライベート領域ベースのキャッシュディレクトリエントリ３１２Ａ〜３１２Ｎを含む。例えば、キャッシュサブシステム３１０Ａは、任意の数のプライベート領域ベースのキャッシュディレクトリエントリ３１２Ａを含み、各プライベート領域ベースのキャッシュディレクトリエントリは、ＣＰＵ３０５Ａのみによってアクセスされた対応する領域の情報を記憶する。例えば、ＣＰＵ３０５Ａが、キャッシュサブシステム３１２Ａ内の所定の領域に関するキャッシュラインをキャッシュし、所定の領域がプライベートである場合、所定の領域に関するキャッシュディレクトリエントリがキャッシュサブシステム３１２Ａによって維持される。キャッシュディレクトリエントリは、所定の領域内でＣＰＵ３０５Ａによってアクセスされたキャッシュラインの数を追跡する。後のある時点で所定の領域が共有される（すなわち、別のＣＰＵ３０５Ｂ〜３０５Ｎが所定の領域にアクセスする）場合、エントリ３１２Ａからの参照カウントが、対応するキャッシュディレクトリに送信され、エントリ３１２Ａが破棄される。他のキャッシュサブシステム３１０Ｂ〜３１０Ｎは、各々のプライベート領域の情報を記憶するプライベート領域ベースのキャッシュディレクトリエントリ３１２Ｂ〜３１２Ｎを含む。一実施形態では、ＣＰＵ３０５Ａは、プライベート領域キャッシュディレクトリエントリ３１２Ａのローカルキャッシュされたコピーを更新する場合、対応するキャッシュディレクトリへのライトスルーを実行する。これにより、ＣＰＵ３０５Ａは、対応するキャッシュディレクトリが既に同期されているので、ローカルキャッシュディレクトリエントリ３１２Ａを置換する場合に、ローカルキャッシュディレクトリエントリ３１２Ａを破棄することができるようになる。例えば、一実施形態では、ローカルストレージエリアからの容量のエビクションに応じて、ローカルキャッシュディレクトリエントリ３１２Ａの置換が行われる。
【００１９】
一実施形態では、各ＣＰＵ３０５Ａ〜３０５Ｎは、対応するコヒーレントマスター３１５Ａ〜３１５Ｎに接続されている。別の実施形態では、ＣＰＵベースのキャッシュディレクトリ３１２Ａ〜３１２Ｎは、各々のＣＰＵ３０５Ａ〜３０５Ｎのキャッシュ階層に記憶されるのではなく、コヒーレントマスター３１５Ａ〜３１５Ｎに記憶される。本明細書で用いられる場合、「コヒーレントマスター」は、相互接続（例えば、バス／ファブリック３１８）上を流れるトラフィックを処理し、接続されているＣＰＵのコヒーレンシを管理するエージェントとして定義される。コヒーレンシを管理するために、コヒーレントマスターは、コヒーレンシ関連のメッセージ及びプローブを受信して処理し、コヒーレントマスターは、コヒーレンシ関連の要求及びプローブを生成する。本明細書では、「コヒーレントマスター」を「コヒーレントマスターユニット」とも呼ばれ得ることに留意されたい。
【００２０】
一実施形態では、各ＣＰＵ３０５Ａ〜３０５Ｎは、対応するコヒーレントマスター３１５Ａ〜３１５Ｎ及びバス／ファブリック３１８を介して、一対のコヒーレントスレーブに結合される。例えば、ＣＰＵ３０５Ａは、コヒーレントマスター３１５Ａ及びバス／ファブリック３１８を介して、コヒーレントスレーブ３２０Ａ〜３２０Ｂに結合される。他の実施形態では、バス／ファブリック３１８は、図を曖昧にすることを回避するために図示されていない他の構成要素への接続を含む。例えば、別の実施形態では、バス／ファブリック３１８は、１つ以上のＩ／Ｏインターフェース及び１つ以上のＩ／Ｏデバイスへの接続を含む。
【００２１】
コヒーレントスレーブ（ＣＳ）３２０Ａは、メモリコントローラ（ＭＣ）３３０Ａに結合されており、コヒーレントスレーブ３２０Ｂは、メモリコントローラ３３０Ｂに結合されている。コヒーレントスレーブ３２０Ａは、領域ベースのキャッシュディレクトリ（ＣＤ）３２５Ａに結合されており、領域ベースのキャッシュディレクトリ３２５Ａは、メモリコントローラ３３０Ａを介してアクセス可能なメモリに対する、システム３００にキャッシュされたキャッシュラインを有するメモリ領域のエントリを含む。領域ベースのキャッシュディレクトリ３２５Ａ及び他の領域ベースのキャッシュディレクトリ３２５Ｂ，３４５Ａ〜３４５Ｂ，３６０Ａ〜３６０Ｂの各々は、「プローブフィルタ」とも呼ばれ得ることに留意されたい。コヒーレントスレーブ３２０Ｂは、領域ベースのキャッシュディレクトリ３２５Ｂに結合されており、領域ベースのキャッシュディレクトリ３２５Ｂは、メモリコントローラ３３０Ｂを介してアクセス可能なメモリに対する、システム３００にキャッシュされたキャッシュラインを有するメモリ領域のエントリを含む。ＣＰＵ当たり２つのメモリコントローラを有する例は、一実施形態を示すに過ぎないことに留意されたい。他の実施形態では、各ＣＰＵ３０５Ａ〜３０５Ｎは、２つ以外の他の数のメモリコントローラに接続することができることを理解されたい。
【００２２】
ＣＰＵ３０５Ａの構成と同様の構成において、ＣＰＵ３０５Ｂは、コヒーレントマスター３１５Ｂ及びバス／ファブリック３１８を介してコヒーレントスレーブ３３５Ａ〜３３５Ｂに結合されている。コヒーレントスレーブ３３５Ａは、メモリコントローラ３５０Ａを介してメモリに結合されており、コヒーレントスレーブ３３５Ａは、領域ベースのキャッシュディレクトリ３４５Ａにも結合されており、メモリコントローラ３５０Ａを介してアクセス可能なメモリに対応するキャッシュラインのコヒーレンシを管理する。コヒーレントスレーブ３３５Ｂは、領域ベースのキャッシュディレクトリ３４５Ｂに結合されており、コヒーレントスレーブ３３５Ｂは、メモリコントローラ３６５Ｂを介してメモリに結合されている。また、ＣＰＵ３０５Ｎは、コヒーレントマスター３１５Ｎ及びバス／ファブリック３１８を介してコヒーレントスレーブ３５５Ａ〜３５５Ｂに結合されている。コヒーレントスレーブ３５５Ａ〜３５５Ｂは、領域ベースのキャッシュディレクトリ３６０Ａ〜３６０Ｂに結合されており、コヒーレントスレーブ３５５Ａ〜３５５Ｂは、メモリコントローラ３６５Ａ〜３６５Ｂを介してメモリに結合されている。本明細書で用いられる場合、「コヒーレントスレーブ」は、対応するメモリコントローラをターゲットとする受信要求及びプローブを処理することによってコヒーレンシを管理するエージェントとして定義される。本明細書では、「コヒーレントスレーブ」を「コヒーレントスレーブユニット」とも呼ぶことができることに留意されたい。さらに、本明細書で用いられる場合、「プローブ」は、キャッシュがデータブロックのコピーを有するかどうかを判別し、オプションで、キャッシュがデータブロックを配置する状態を示すために、コヒーレンシポイントからコンピュータシステム内の１つ以上のキャッシュに渡されるメッセージとして定義される。
【００２３】
コヒーレントスレーブは、その対応するメモリコントローラをターゲットとするメモリ要求を受信すると、その対応する領域ベースのキャッシュディレクトリにルックアップを実行して、その要求が、キャッシュサブシステムの何れかにキャッシュされた少なくとも１つのキャッシュラインを有する領域をターゲットとするかどうかを判別する。一実施形態では、システム３００内の各領域ベースのキャッシュディレクトリ３２５Ａ〜３２５Ｂ，３４５Ａ〜３４５Ｂ，３６０Ａ〜３６０Ｂは、メモリの領域を追跡する。領域は、複数のキャッシュラインを含む。追跡される領域のサイズは、実施形態毎に異なり得る。キャッシュラインのより細かな粒度ではなく、領域の粒度で追跡することによって、各領域ベースのキャッシュディレクトリ３２５Ａ〜３２５Ｂ，３４５Ａ〜３４５Ｂ，３６０Ａ〜３６０Ｂのサイズが削減される。本明細書では、「領域」を「ページ」と呼ぶこともできることに留意されたい。コヒーレントスレーブが要求を受信すると、コヒーレントスレーブは、要求のターゲットとなる領域を判別する。次に、この領域に対する領域ベースのキャッシュディレクトリのルックアップが実行される。ルックアップの結果がヒットの場合、コヒーレントスレーブは、ヒットエントリで識別されたＣＰＵ（複数可）にプローブを送信する。コヒーレントスレーブによって生成されるプローブのタイプは、ヒットエントリによって指定されたコヒーレンシ状態に依存する。
【００２４】
図４を参照すると、領域ベースのキャッシュディレクトリ４００の一実施形態のブロック図が示されている。一実施形態では、（図３の）領域ベースのキャッシュディレクトリ３２５Ａ〜３２５Ｂ，３４５Ａ〜３４５Ｂ，３６０Ａ〜３６０Ｂは、領域ベースのキャッシュディレクトリ４００に示す機能を含む。一実施形態では、領域ベースのキャッシュディレクトリ４００は、制御ユニット４０５と、アレイ４１０と、を含む。アレイ４１０は、任意の数のエントリを含み、エントリの数は、実施形態によって異なる。一実施形態では、アレイ４１０の各エントリは、プライベート／共有ステータスフィールド４１５と、状態フィールド４２０と、セクター有効フィールド４２５と、クラスタ有効フィールド４３０と、参照カウントフィールド４３５と、タグフィールド４４０と、を含む。他の実施形態では、アレイ４１０のエントリは、他のフィールドを含み、図示したフィールドのうち１つ以上を省略し、及び／又は、他の適切な方法で構成されている。
【００２５】
プライベート／共有ステータスフィールド４１５は、対応する領域がプライベートであるか共有されるかを示す。プライベート領域は、単一の処理ノード又は単一のデバイスのみによってアクセスされる。言い換えると、プライベート領域からのキャッシュラインは、単一の処理ノード又は単一のデバイスのみによってキャッシュされる。共有領域は、２つ以上の処理ノード又はデバイスによってアクセスされる。言い換えると、共有領域からのキャッシュラインは、複数の処理ノード又はデバイスによってキャッシュされる。領域がプライベートである場合、その領域の参照カウントフィールド４３５は、その領域にアクセスしている処理ノード又はデバイスによってローカルに維持される。領域が共有される場合、キャッシュディレクトリが、その領域の参照カウントフィールド４３５を維持する。領域がプライベート状態と共有状態との間で遷移する場合、参照カウントフィールド４３５は、ノード又はデバイスとキャッシュディレクトリとの間で転送される。
【００２６】
状態フィールド４２０は、領域の集約状態を指定する状態ビットを含む。一実施形態では、集約状態は、この特定の領域の最も制限的なキャッシュライン状態を反映している。例えば、所定の領域全体の単一のキャッシュラインのみがダーティである場合であっても、所定の領域の状態が「ダーティ」として記憶される。また、所定の領域全体の単一のキャッシュラインのみが共有される場合であっても、所定の領域の状態が「共有される」として記憶される。
【００２７】
セクター有効フィールド４２５は、細粒度の追跡（fine grained tracking）を提供するために、領域内のラインのサブグループ又はセクターに対応するビットベクトルを記憶する。サブグループの構成及びセクター有効フィールド４２５のビット数は、実施形態によって異なる。一実施形態では、セクター有効フィールド４２５を用いて、特定の領域エントリ内で２つのラインが追跡される。別の実施形態では、他の数のラインが各領域エントリ内で追跡される。この実施形態では、セクター有効フィールド４２５は、領域内で個別に追跡されているパーティションの数を示すために用いられる。さらに、パーティションは、セクター有効フィールド４２５に記憶されているオフセットを用いて識別される。各オフセットは、所定の領域内の所定のパーティションの位置を識別する。セクター有効フィールド４２５又はエントリの別のフィールドは、所定の領域内の各パーティションの個別のオーナー及び別個の状態を示す。クラスタ有効フィールド４３０は、様々なＣＰＵキャッシュクラスタに亘る領域の存在を追跡するためのビットベクトルを含む。例えば、一実施形態では、ＣＰＵは、ＣＰＵのクラスタにグループ化される。クラスタ有効フィールド４３０に記憶されているビットベクトルは、通常のコヒーレンシプローブ、及び、領域無効化プローブのプローブ宛先を低減するために用いられる。
【００２８】
参照カウントフィールド４３５は、システムの何れかでキャッシュされる領域のキャッシュラインの数を追跡するために用いられる。領域への最初のアクセス時に、エントリがテーブル４１０にインストールされ、その領域への最初のアクセスを行った処理ノード又はデバイスが、その領域に対する参照カウントフィールド４３５を、ローカルに維持されるエントリに維持する。参照カウントフィールド４３５は、領域への最初のアクセス時に１に設定される。同じ処理ノード又はデバイスがこの領域からキャッシュラインにアクセスする毎に、参照カウントがインクリメントされる。領域がプライベートのままである限り、これらのアクセスは、ローカルに維持されるエントリの参照カウントを更新するだけでよく、キャッシュディレクトリに通知を送信する必要がない。このことは、ファブリックで送信されるプローブトラフィックの量を低減するのに役立つ。この領域からのキャッシュラインが、同じ処理ノード又はデバイスのキャッシュによってエビクトされるか、コヒーレンシプローブによって無効化されると、参照カウントがデクリメントされる。最終的に、参照カウントが０に達すると、同じ処理ノード又はデバイスがキャッシュディレクトリに通知し、エントリが無効としてマークされ、当該エントリを別の領域において再利用できるようになる。別の処理ノード又はデバイスが領域からキャッシュラインにアクセスし、領域がプライベートから共有に移行する場合、キャッシュディレクトリは、領域に関する参照カウントフィールド４３５の管理を開始する。タグフィールド４４０は、特定の領域に関連するエントリを識別するために用いられるタグビットを含む。
【００２９】
図５を参照すると、プライベート領域ベースのキャッシュディレクトリエントリ５００の一実施形態が示されている。一実施形態では、（図３の）プライベート領域ベースのキャッシュディレクトリエントリ３１２Ａ〜３１２Ｎの各エントリは、プライベート領域ベースのキャッシュディレクトリエントリ５００に示すように構造化されている。一実施形態では、プライベート領域ベースのキャッシュディレクトリエントリ５００は、少なくとも、状態フィールド５０５と、参照カウントフィールド５１０と、タグフィールド５１５と、を含む。状態フィールド５０５は、領域のステータス（例えば、ダーティ、共有、有効、無効等のコヒーレンシ状態）を指定する状態ビットを含む。一実施形態では、ステータスは、この特定の領域の最も制限的なキャッシュライン状態を表すように指定される。参照カウントフィールド５１０は、ノード又はデバイスによってキャッシュされる、領域の様々なキャッシュラインの数を追跡する。タグフィールド５１５は、特定の領域に関連するエントリを識別するために用いられるタグビットを含む。他の実施形態では、プライベート領域ベースのキャッシュディレクトリエントリ５００は、他のフィールドを含み、及び／又は、他の適切な方法で構成されている。
【００３０】
一実施形態では、デバイスは、１つ以上のプライベート領域ベースのキャッシュディレクトリエントリ５００をローカルに記憶して、キャッシュディレクトリ内でミスしているとわかっている「無効」のコヒーレンシ状態を有する領域へのアクセスを加速する。例えば、メモリ内にコンテンツを生成するＩ／Ｏデバイス又はダイレクトメモリアクセス（ＤＭＡ）デバイスは、新たに生成されたコンテンツが記憶されているメモリの領域に関する複数のプライベート領域ベースのキャッシュディレクトリエントリ５００を記憶する。デバイスによる所定の領域への最初の書き込みは、状態が「無効」に設定された対応するプライベート領域ベースのキャッシュディレクトリエントリ５００を生成し、デバイスによる所定の領域へのその後の書き込みは、このエントリ５００にヒットする。プライベート領域コヒーレンシ状態が無効な領域への書き込みでは、ローカルストレージのみが必要であり、キャッシュディレクトリへのライトスルー更新が必要ない。さらに、このような場合、参照カウントの更新が必要ない。むしろ、ローカルストレージは、キャッシュディレクトリ内でミスするとわかっている書き込みを加速するために単に用いられている。このようにして、ディレクトリのルックアップによるレイテンシが減少し、スループットが向上する。
【００３１】
図６を参照すると、領域ベースのキャッシュディレクトリスキームにおけるプライベート領域へのアクセスを加速する方法６００の一実施形態が示されている。説明目的のために、この実施形態のステップ及び図７〜図８のステップが順番に示されている。しかしながら、説明する方法の様々な実施形態では、説明する要素の１つ以上が、同時に実行され、図示した順序と異なる順序で実行され、又は、完全に省略されることに留意されたい。他の追加の要素も必要に応じて実行される。本明細書に記載される様々なシステム又は装置の何れも、方法６００を実施するように構成されている。
【００３２】
制御ユニットは、コンピューティングシステム内の任意の場所でキャッシュされたキャッシュラインを有するメモリ領域を追跡する（ブロック６０５）。制御ユニットは、アクセスが行われた領域毎に、領域がプライベート（すなわち、単一のノード又はデバイスのみが領域にアクセスしている）か共有される（すなわち、２つ以上のノード又はデバイスが領域にアクセスしている）かを追跡する（条件付きブロック６１０）。領域が共有される場合（条件付きブロック６１０：「共有」）、領域ベースのキャッシュディレクトリは、領域のキャッシュディレクトリエントリを維持する（ブロック６１５）。ブロック６１５の後に、方法６００はブロック６０５に戻る。領域がプライベートである場合（条件付きブロック６１０：「プライベート」）、制御ユニットは、領域にアクセスしているノード又はデバイスに対して、領域のキャッシュディレクトリエントリを維持するようにメッセージを送信する（ブロック６２０）。領域のキャッシュラインに対するアクセス、エビクション又は無効化の検出に応じて、キャッシュディレクトリエントリへの更新が、ノード又はデバイスによって実行される（ブロック６２５）。その後、別のデバイス又はノードが領域にアクセスした場合（条件付きブロック６３０：「はい」）、領域ベースのキャッシュディレクトリの制御ユニットは、ノード又はデバイスからキャッシュディレクトリエントリを取得する（ブロック６３５）。そうではなく、領域への他のデバイス又はノードによるアクセスが検出されない場合（条件付きブロック６３０：「いいえ」）、キャッシュディレクトリエントリは、ノード又はデバイスに残る（ブロック６４０）。ブロック６３５，６４０の後に、方法６００はブロック６０５に戻る。一実施形態では、方法６００は、アクセスが行われたメモリ空間の各領域に対して実行されることに留意されたい。
【００３３】
図７を参照すると、領域ベースのキャッシュディレクトリを維持する方法７００の一実施形態が示されている。領域ベースのキャッシュディレクトリは、所定の領域のキャッシュラインが第１のデバイスによってキャッシュされているという指標を受信する（ブロック７０５）。この説明の目的のために、これは、第１のデバイスによってキャッシュされている所定の領域の第１のキャッシュラインであると想定される。言い換えると、所定の領域のキャッシュラインが第１のデバイスによってキャッシュされる前に、第１のデバイスは、そのキャッシュサブシステム内に所定の領域の他のキャッシュラインを有していなかった。実施形態に応じて、第１のデバイスは、ノード、Ｉ／Ｏデバイス又は別のタイプのデバイスであってもよい。指標を受信したことに応じて、所定の領域に対するルックアップが、領域ベースのキャッシュディレクトリによって実行される（ブロック７１０）。ルックアップがヒットである場合に（条件付きブロック７１５：「ヒット」）、一致するエントリが、所定の領域がプライベートであるという指標を記憶しているのであれば（条件付きブロック７２０：「はい」）、領域ベースのキャッシュディレクトリは、所定の領域の少なくとも１つのキャッシュラインをキャッシュしているとして、一致するエントリ内で識別された第２のデバイスに対して、所定の領域が現在共有されるという通知を送信する（ブロック７２５）。ルックアップがヒットである場合、所定の領域が少なくとも２つの異なるデバイス間で現在共有されていることを意味する。この場合、領域ベースのキャッシュディレクトリは、所定の領域のキャッシュディレクトリエントリを維持し、デバイスは、キャッシュされている所定の領域の追加のキャッシュライン、又は、所定の領域のエビクト若しくは無効化されたキャッシュラインの領域ベースのキャッシュディレクトリに更新を送信する。
【００３４】
通知の受信に応じて、第２のデバイスは、参照カウントを、所定の領域に対するそのローカルエントリから領域ベースのキャッシュディレクトリに送信し、次に、第２のデバイスは、所定の領域に対するそのローカルエントリを破棄する（ブロック７３０）。或いは、別の実施形態では、第２のデバイスは、プライベートエントリを破棄するのではなく、所定の領域のプライベートエントリを無効化する。領域ベースのキャッシュディレクトリは、第２のデバイスから参照カウントを受信し、領域ベースのキャッシュディレクトリは、参照カウントをインクリメントし、新たな参照カウントを領域ベースのキャッシュディレクトリのエントリに記憶する（ブロック７３５）。また、領域ベースのキャッシュディレクトリは、所定の領域が共有されるという指標を、一致するエントリに記憶する（ブロック７４０）。
【００３５】
ルックアップがミスである場合（条件付きブロック７１５：「いいえ」）、領域ベースのキャッシュディレクトリは、所定の領域が第１のデバイスのプライベート領域であるという指標を記憶する（ブロック７４５）。また、領域ベースのキャッシュディレクトリは、第１のデバイスに通知を送信して、第１のデバイスに、所定の領域のローカルキャッシュディレクトリエントリを維持させる（ブロック７５０）。後の時点で別のデバイスが所定の領域にアクセスした場合、領域ベースのキャッシュディレクトリは、第１のデバイスから参照カウントを取得し、所定の領域のエントリの維持を開始する。ブロック７４０，７５０の後に、方法７００は終了する。一致するエントリが、所定の領域が共有されるという指標を記憶している場合（条件付きブロック７２０：「いいえ」）、領域ベースのキャッシュディレクトリは、一致するエントリの参照カウントをインクリメントする（ブロック７５５）。ブロック７５５の後に、方法７００は終了する。
【００３６】
図８を参照すると、領域ベースのディレクトリエントリを管理する方法８００の一実施形態が示されている。デバイスは、メモリの所定の領域のキャッシュラインをエビクト又は無効化する（ブロック８０５）。様々な実施形態において、デバイスは、処理ノード、Ｉ／Ｏデバイス又は他のタイプのデバイスであってもよい。所定の領域のキャッシュラインをエビクト又は無効化したことに応じて、デバイスは、所定の領域に対するローカル領域ベースのキャッシュディレクトリエントリがあるかどうかを判別する（条件付きブロック８１０）。言い換えると、デバイスは、条件付きブロック８１０において、所定の領域がプライベートである（すなわち、領域ベースのキャッシュディレクトリエントリがデバイスでローカルに記憶されている）か、共有される（すなわち、領域ベースのキャッシュディレクトリエントリが、領域ベースのキャッシュディレクトリによって維持されている）かを判別している。
【００３７】
所定の領域に対する領域ベースのキャッシュディレクトリエントリがデバイスにローカルに記憶されている場合（条件付きブロック８１０：「はい」）、デバイスは、ローカルに記憶されている領域ベースのキャッシュディレクトリエントリの参照カウントをデクリメントする（ブロック８１５）。デクリメント後に参照カウントが０に等しい場合（条件付きブロック８２０：「はい」）、デバイスは、エントリを破棄し、領域ベースのキャッシュディレクトリに通知を送信する（ブロック８２５）。そうではなく、エントリの参照カウントが０より大きい場合（条件付きブロック８２０：「いいえ」）、デバイスは、エントリを維持し続け、デバイスは、領域ベースのキャッシュディレクトリへの通知の送信を見送る（ブロック８３０）。ブロック８３０の後に、方法８００は終了する。デバイスが、所定の領域についてローカルに記憶された領域ベースのディレクトリエントリがない場合（条件付きブロック８１０：「いいえ」）、デバイスは、エビクション又は無効化の指標を、領域ベースのキャッシュディレクトリに送信する（ブロック８３５）。ブロック８３５の後に、方法８００は終了する。
【００３８】
様々な実施形態では、ソフトウェアアプリケーションのプログラム命令を使用して、本明細書に記載された方法及び／又はメカニズムを実施する。例えば、汎用プロセッサ又は専用プロセッサによって実行可能なプログラム命令が考えられる。様々な実施形態において、そのようなプログラム命令は、高水準プログラミング言語によって表すことができる。他の実施形態では、プログラム命令は、高水準プログラミング言語からバイナリ、中間又は他の形式にコンパイルされてもよい。或いは、ハードウェアの動作又は設計を記述するプログラム命令を書き込むことができる。このようなプログラム命令を、Ｃ等の高水準のプログラミング言語によって表すことができる。或いは、Ｖｅｒｉｌｏｇ等のハードウェア設計言語（ＨＤＬ）を使用することができる。様々な実施形態では、プログラム命令は、様々な非一時的なコンピュータ可読記憶媒体の何れかに記憶される。記憶媒体は、プログラム実行のためにプログラム命令をコンピューティングシステムに提供するために、使用中にコンピューティングシステムによってアクセス可能である。一般的に、このようなコンピューティングシステムは、少なくとも１つのメモリと、プログラム命令を実行することができる１つ以上のプロセッサと、を含む。
【００３９】
上記の実施形態は、実装態様の非限定的な例に過ぎないことを強調しておきたい。上記の開示が十分に認識されると、当業者には多数の変形及び修正が明らかになるであろう。以下の特許請求の範囲は、このような変形及び修正の全てを包含すると解釈されることが意図されている。
【図１】
2021527283.tif 000003
【図２】
2021527283.tif 000004
【図３】
2021527283.tif 000005
【図４】
2021527283.tif 000006
【図５】
2021527283.tif 000007
【図６】
2021527283.tif 000008
【図７】
2021527283.tif 000009
【図８】
2021527283.tif 000010
【国際調査報告】
2021527283.tif 000011
2021527283.tif 000012