(57)【要約】投機的プローブメカニズムを実装するためのシステム、装置及び方法が開示される。システムは、複数の処理ノードと、プローブフィルタと、コヒーレントスレーブと、を少なくとも含む。コヒーレントスレーブは、プローブフィルタへの最近のルックアップをキャッシュする初期プローブキャッシュを含む。初期プローブキャッシュは、メモリ領域についてのエントリを含み、領域は、複数のキャッシュラインを含む。コヒーレントスレーブは、メモリ要求を受信したことに応じて、プローブフィルタ及び初期プローブキャッシュへの並列ルックアップを実行する。初期プローブキャッシュへのルックアップが、第１処理ノードを、メモリ要求によってターゲットとされた第１領域の所有者として識別する第１エントリにヒットすると判別したこと、及び、第１エントリの信頼度指標が閾値よりも大きいと判別したことに応じて、初期プローブを第１処理ノードに送信する。【選択図】図４
2021507371.tif 000002
【特許請求の範囲】
【請求項１】
複数の処理ノードと、
前記複数の処理ノードによってキャッシュされるキャッシュラインを追跡するように構成されたプローブフィルタと、
メモリコントローラと、
前記メモリコントローラに接続されたコヒーレントスレーブユニットであって、前記コヒーレントスレーブユニットは、前記プローブフィルタへの最近のルックアップをキャッシュするように構成された初期プローブキャッシュを含み、前記初期プローブキャッシュは、領域ベースでエントリを記憶し、領域は、複数のキャッシュラインを含む、コヒーレントスレーブユニットと、
を備えるシステムであって、
前記コヒーレントスレーブユニットは、
メモリ要求を受信したことに応じて、前記プローブフィルタ及び前記初期プローブキャッシュへの並列ルックアップを実行することと、
前記初期プローブキャッシュのルックアップが第１エントリに一致することに応じて、前記初期プローブキャッシュの前記第１エントリから第１処理ノードの識別子を取得することであって、前記第１エントリは、前記第１処理ノードを、前記メモリ要求によってターゲットとされた第１領域の所有者として識別する、ことと、
前記第１エントリの信頼度指標が閾値よりも大きいと判別したことに応じて、初期プローブを前記第１処理ノードに送信することであって、前記初期プローブは、前記プローブフィルタへのルックアップが完了する前に送信される、ことと、
を行うように構成されている、
システム。
【請求項２】
前記コヒーレントスレーブユニットは、前記キャッシュディレクトリへの前記ルックアップが、前記第１処理ノードを、前記メモリ要求によってターゲットとされたキャッシュラインの所有者として識別すると判別したことに応じて、前記第１エントリの前記信頼度指標を増加させるように構成されている、
請求項１のシステム。
【請求項３】
前記コヒーレントスレーブユニットは、前記プローブフィルタへの前記ルックアップが、異なる処理ノードを、前記メモリ要求によってターゲットとされたキャッシュラインの所有者として識別すると判別したことに応じて、前記第１エントリの前記信頼度指標を低下させるように構成定されている、
請求項２のシステム。
【請求項４】
前記コヒーレントスレーブユニットは、前記初期プローブキャッシュへの前記ルックアップが失敗し、前記プローブフィルタへの前記ルックアップが共有領域に対応するエントリにヒットしたことに応じて、前記メモリ要求についての新たなエントリを前記初期プローブキャッシュに割り当てるように構成されている、
請求項１のシステム。
【請求項５】
前記コヒーレントスレーブユニットは、
前記メモリ要求によってターゲットとされた前記キャッシュラインを含む領域を決定することと、
前記領域のアドレスを、前記初期プローブキャッシュの前記新たなエントリの領域アドレスフィールドに記憶することと、
前記プローブフィルタの一致するエントリから前記キャッシュラインの所有者の識別子（ＩＤ）を抽出することと、
前記ＩＤを、前記初期プローブキャッシュの前記新たなエントリの領域所有者フィールドに記憶することと、
を行うように構成されている、
請求項４のシステム。
【請求項６】
前記第１処理ノードは、
前記初期プローブを受信することと、
データが前記第１処理ノードのキャッシュサブシステムに存在する場合に、前記初期プローブによってターゲットとされた前記データを取得することと、
前記データを要求元の処理ノードに返すことと、
を行うように構成されている、
請求項１のシステム。
【請求項７】
前記第１処理ノードは、
前記初期プローブを受信することと、
データが前記第１処理ノードのキャッシュサブシステムに存在する場合に、前記初期プローブによってターゲットとされた前記データを取得することと、
前記データをバッファリングし、対応する要求プローブを受信するまで待機することと、
を行うように構成されている、
請求項１のシステム。
【請求項８】
メモリ要求を受信したことに応じて、プローブフィルタ及び初期プローブキャッシュへの並列ルックアップを実行することと、
前記初期プローブキャッシュのルックアップが第１エントリに一致することに応じて、前記初期プローブキャッシュの前記第１エントリから第１処理ノードの識別子を取得することであって、前記第１エントリは、前記第１処理ノードを、前記メモリ要求によってターゲットとされた第１領域の所有者として識別する、ことと、
前記第１エントリの信頼度指標が閾値よりも大きいと判別したことに応じて、初期プローブを前記第１処理ノードに送信することであって、前記初期プローブは、前記プローブフィルタへのルックアップが完了する前に送信される、ことと、を含む、
方法。
【請求項９】
前記初期プローブキャッシュへの前記ルックアップが、前記第１処理ノードを、前記メモリ要求によってターゲットとされたキャッシュラインの所有者として識別すると判別したことに応じて、前記第１エントリの前記信頼度指標を増加させることを含む、
請求項８の方法。
【請求項１０】
前記プローブフィルタへの前記ルックアップが、異なる処理ノードを、前記メモリ要求によってターゲットとされたキャッシュラインの所有者として識別すると判別したことに応じて、前記第１エントリの前記信頼度指標を低下させることを含む、
請求項９の方法。
【請求項１１】
前記方法は、前記初期プローブキャッシュへの前記ルックアップが失敗し、前記プローブフィルタへの前記ルックアップが共有領域に対応するエントリにヒットしたことに応じて、前記メモリ要求についての新たなエントリを前記初期プローブキャッシュに割り当てることを含む、
請求項８の方法。
【請求項１２】
前記メモリ要求によってターゲットとされた前記キャッシュラインを含む領域を決定することと、
前記領域のアドレスを、前記初期プローブキャッシュの前記新たなエントリの領域アドレスフィールドに記憶することと、
前記プローブフィルタの一致するエントリから前記キャッシュラインの所有者の識別子（ＩＤ）を抽出することと、
前記ＩＤを、前記初期プローブキャッシュの前記新たなエントリの領域所有者フィールドに記憶することと、を含む、
請求項１１の方法。
【請求項１３】
前記第１処理ノードにおいて、前記初期プローブを受信することと、
データが前記第１処理ノードのキャッシュサブシステムに存在する場合に、前記初期プローブによってターゲットとされた前記データを取得することと、
前記データを要求元の処理ノードに返すことと、を含む、
請求項８の方法。
【請求項１４】
前記第１処理ノードにおいて、前記初期プローブを受信することと、
データが前記第１処理ノードのキャッシュサブシステムに存在する場合に、前記初期プローブによってターゲットとされた前記データを取得することと、
前記データをバッファリングし、対応する要求プローブを受信するまで待機することと、を含む、
請求項８の方法。
【請求項１５】
複数の処理ノードによってキャッシュされるキャッシュラインを追跡するように構成されたプローブフィルタと、
前記プローブフィルタへの最近のルックアップをキャッシュするように構成された初期プローブキャッシュを含むコヒーレントスレーブユニットと、
を備える装置であって、
前記初期プローブキャッシュは、領域ベースでエントリを記憶し、
領域は、複数のキャッシュラインを含み、
前記コヒーレントスレーブユニットは、
メモリ要求を受信したことに応じて、前記プローブフィルタ及び前記初期プローブキャッシュへの並列ルックアップを実行することと、
前記初期プローブキャッシュのルックアップが第１エントリに一致することに応じて、前記初期プローブキャッシュの前記第１エントリから第１処理ノードの識別子を取得することであって、前記第１エントリは、前記第１処理ノードを、前記メモリ要求によってターゲットとされた第１領域の所有者として識別する、ことと、
前記第１エントリの信頼度指標が閾値よりも大きいと判別したことに応じて、初期プローブを前記第１処理ノードに送信することであって、前記初期プローブは、前記プローブフィルタへのルックアップが完了する前に送信される、ことと、
を行うように構成されている、
装置。
【請求項１６】
前記コヒーレントスレーブユニットは、前記キャッシュディレクトリへの前記ルックアップが、前記第１処理ノードを、前記メモリ要求によってターゲットとされたキャッシュラインの所有者として識別すると判別したことに応じて、前記第１エントリの前記信頼度指標を増加させるように構成されている、
請求項１５の装置。
【請求項１７】
前記コヒーレントスレーブユニットは、前記プローブフィルタへの前記ルックアップが、異なる処理ノードを、前記メモリ要求によってターゲットとされたキャッシュラインの所有者として識別すると判別したことに応じて、前記第１エントリの前記信頼度指標を低下させるように構成されている、
請求項１６の装置。
【請求項１８】
前記コヒーレントスレーブユニットは、前記初期プローブキャッシュへの前記ルックアップが失敗し、前記プローブフィルタへの前記ルックアップが共有領域に対応するエントリにヒットしたことに応じて、前記メモリ要求についての新たなエントリを前記初期プローブキャッシュに割り当てるように構成されている、
請求項１５の装置。
【請求項１９】
前記コヒーレントスレーブユニットは、
前記メモリ要求によってターゲットとされた前記キャッシュラインを含む領域を決定することと、
前記領域のアドレスを、前記初期プローブキャッシュの前記新たなエントリの領域アドレスフィールドに記憶することと、
前記プローブフィルタの一致するエントリから前記キャッシュラインの所有者の識別子（ＩＤ）を抽出することと、
前記ＩＤを、前記初期プローブキャッシュの前記新たなエントリの領域所有者フィールドに記憶することと、
を行うように構成されている、
請求項１８の装置。
【請求項２０】
前記コヒーレントスレーブユニットは、前記プローブフィルタへの前記ルックアップが、第２処理ノードを、前記メモリ要求によってターゲットとされたキャッシュラインの所有者として識別するエントリに一致すると判別したことに応じて、要求プローブを前記第２処理ノードに送信するように構成されている、
請求項１５の装置。
【発明の詳細な説明】
【背景技術】
【０００１】
（関連技術の説明）
コンピュータシステムは、一般に、安価で高密度のダイナミックランダムアクセスメモリ（ＤＲＡＭ）チップによって形成されたメインメモリを使用する。しかしながら、ＤＲＡＭチップは、比較的長いアクセス時間を必要とする。パフォーマンスを向上させるために、データプロセッサは、一般に、キャッシュとして知られている少なくとも１つのローカルな高速メモリを含む。マルチコアデータプロセッサでは、各データプロセッサコアは、独自の専用のレベル１（Ｌ１）キャッシュを含むことができ、他のキャッシュ（例えば、レベル２（Ｌ２）、レベル３（Ｌ３））は、データプロセッサコアによって共有される。
【０００２】
コンピューティングシステム内のキャッシュサブシステムは、データのブロックを記憶するように構成された高速キャッシュメモリを含む。本明細書で使用する場合、「ブロック」は、連続するメモリ位置に記憶されたバイトのセットであり、コヒーレンシ目的のためのユニットとして扱われる。本明細書で使用する場合、「キャッシュブロック」、「ブロック」、「キャッシュライン」及び「ライン」という用語の各々は、置き換えることができる。いくつかの実施形態では、ブロックは、キャッシュ内の割り当て及び割り当て解除のユニットであってもよい。ブロック内のバイト数は、設計の選択によって異なり、任意のサイズにすることができる。また、「キャッシュタグ」、「キャッシュラインタグ」及び「キャッシュブロックタグ」という用語の各々は、置き換えることができる。
【０００３】
マルチノードコンピュータシステムでは、異なる処理ノードによって使用されているデータのコヒーレンシを維持するために、特別な予防措置を講じる必要がある。例えば、プロセッサは、特定のメモリアドレスのデータにアクセスしようとする場合、先ず、メモリが別のキャッシュに記憶されており、変更されているかどうかを判別する必要がある。このキャッシュコヒーレンシプロトコルを実装するために、キャッシュは、通常、システム全体を通してデータコヒーレンシを維持するためのキャッシュラインのステータスを示す複数のステータスビットを含む。一般的なコヒーレンシプロトコルの１つは、「ＭＯＥＳＩ」プロトコルとして知られている。ＭＯＥＳＩプロトコルによれば、各キャッシュラインは、キャッシュラインが変更されている（Ｍ）こと、キャッシュラインが排他的である（Ｅ）、キャッシュラインが共有されている（Ｓ）こと、又は、キャッシュラインが無効である（Ｉ）ことを示すビットを含む、ラインが何れのＭＯＥＳＩ状態にあるかを示すステータスビットを含む。所有（Ｏ）状態は、ラインが１つのキャッシュで変更されていること、他のキャッシュに共有コピーが存在する可能性があること、及び、メモリ内のデータが古くなっている（stale）ことを示す。
【０００４】
第１ノードのキャッシュサブシステムから第２ノードのキャッシュサブシステムの間でデータを転送するには、通常、複数の操作が必要であり、各操作は、転送のレイテンシに寄与する。これらの操作は、通常、シリアル方式で実行され、前の操作が終了したときに１つの操作が開始される。
【０００５】
添付図面と併せて以下の説明を参照することによって、本明細書で説明する方法及びメカニズムの利点をより良く理解することができる。
【図面の簡単な説明】
【０００６】
【図１】コンピューティングシステムの一実施形態のブロック図である。
【図２】コア複合体の一実施形態のブロック図である。
【図３】マルチＣＰＵシステムの一実施形態のブロック図である。
【図４】コヒーレントスレーブの一実施形態のブロック図である。
【図５】初期プローブメカニズムを実施する方法の一実施形態を示す一般化されたフロー図である。
【図６】初期プローブを生成する際に使用するために、初期プローブキャッシュ内の領域ベースのエントリを割り当てる方法の一実施形態を示す一般化されたフロー図である。
【発明を実施するための形態】
【０００７】
以下の説明では、本明細書に提示される方法及びメカニズムの十分な理解を提供するために、多くの具体的な詳細が述べられている。しかしながら、当業者は、これらの特定の詳細無しに様々な実施形態を実施することができることを認識すべきである。いくつかの例では、本明細書で説明するアプローチを曖昧にすることを避けるために、周知の構造、コンポーネント、信号、コンピュータプログラム命令及び技術を詳細に示していない。例説明を簡潔及び明瞭にするために、図に示す要素は、必ずしも縮尺通りに描かれていないことが理解されよう。例えば、要素のいくつかの寸法は、他の要素に対して拡張されてもよい。
【０００８】
投機的プローブメカニズムを実装するための様々なシステム、装置、方法及びコンピュータ可読媒体が本明細書に開示される。一実施形態では、システムは、複数の処理ノード（例えば、中央処理装置（ＣＰＵ））と、相互接続ファブリックと、コヒーレントスレーブと、プローブフィルタと、メモリコントローラと、メモリと、を少なくとも含む。各処理ノードは、１つ以上の処理ユニットを含む。各処理ノードに含まれる１つ以上の処理ユニットのタイプ（例えば、汎用プロセッサ、グラフィックス処理ユニット（ＧＰＵ）、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、デジタル信号プロセッサ（ＤＳＰ））は、実施形態毎に及びノード毎に異なってもよい。コヒーレントスレーブは、相互接続ファブリックを介して複数の処理ノードに接続されており、コヒーレントスレーブは、プローブフィルタ及びメモリコントローラにも接続されている。
【０００９】
コヒーレントスレーブは、プローブフィルタへの最近のルックアップをキャッシュする初期プローブキャッシュを含む。一実施形態では、共有ページについてのプローブフィルタへの最近のルックアップは、初期プローブキャッシュにキャッシュされる。ページが共有されているかプライベートかに関する情報は、プローブフィルタのルックアップの一部として利用可能である。一実施形態では、初期プローブキャッシュは、領域ベースでエントリを記憶し、領域は、複数のキャッシュラインを含む。コヒーレントスレーブは、相互接続ファブリックを介して処理ノードからメモリ要求を受信する。コヒーレントスレーブは、ファブリックを介して所定の処理ノードからメモリ要求を受信することに応じて、プローブフィルタ及び初期プローブキャッシュへの並列ルックアップを実行する。初期プローブキャッシュへのルックアップが所定のエントリで一致する場合、コヒーレントスレーブは、領域所有者（region owner）の識別子（ＩＤ）及び信頼度指標を当該所定のエントリから取得する。信頼度指標がプログラム可能な閾値よりも大きい場合、コヒーレントスレーブは、領域所有者として識別された処理ノードに初期プローブを送信する。初期プローブは、プローブフィルタへのルックアップが完了する前に送信されることに留意されたい。これにより、初期プローブが正しいターゲットに送信されるときに、ターゲット処理ノードからデータを取得するレイテンシを短縮するのに役立つ。
【００１０】
プローブフィルタへのルックアップが完了し、このルックアップの結果がヒットをもたらす場合、コヒーレントスレーブは、一致するエントリからキャッシュラインの所有者のＩＤを取得する。メモリ要求のターゲットとなるキャッシュラインの所有者が、初期プローブキャッシュから取得された領域の所有者と一致する場合、コヒーレントスレーブは、初期プローブキャッシュ内の対応するエントリの信頼度指標をインクリメントする。実施形態に応じて、コヒーレントスレーブは、要求プローブ（demand probe）を所有者に送信してもよいし、送信しなくてもよい。初期プローブがターゲット処理ノードに送信され、ターゲットデータが要求ノードに返される場合、コヒーレントスレーブは、要求プローブを送信する必要がない。それ以外の場合、初期のプローブによってターゲットデータが要求ノードのキャッシュサブシステムから引き出される場合、要求プローブをターゲットノードに送信し、このデータを要求ノードに返すことができる。メモリ要求によってターゲットされ、プローブフィルタから取得されたキャッシュラインの所有者が、初期プローブキャッシュから取得された領域の所有者と一致しない場合、コヒーレントスレーブは、初期プローブキャッシュ内の対応するエントリの信頼度指標をデクリメントする。また、コヒーレントスレーブは、要求プローブを正しい処理ノードに送信する。
【００１１】
初期プローブキャッシュへのルックアップが失敗し、プローブフィルタへのルックアップが共有ページ上でヒットした場合、新たなエントリが初期プローブキャッシュに割り当てられる。コヒーレントスレーブは、メモリ要求のターゲットとなるキャッシュラインを含む領域を決定し、当該領域のＩＤを、初期プローブキャッシュ内の新たなエントリの領域所有者フィールドに記憶する。また、コヒーレントスレーブは、信頼度指標フィールド及びＬＲＵフィールドをデフォルト値に初期化する。したがって、同じ領域をターゲットとする後続のメモリ要求がコヒーレントスレーブによって受信されると、初期プローブキャッシュへのルックアップがこの新たなエントリ上でヒットし、信頼度指標フィールドがプログラム可能な閾値よりも大きくなると、初期プローブが、領域所有者として識別されるノードに送られる。
【００１２】
図１を参照すると、コンピューティングシステム１００の一実施形態のブロック図が示されている。一実施形態では、コンピューティングシステム１００は、コア複合体１０５Ａ〜１０５Ｎと、入出力（Ｉ／Ｏ）インタフェース１２０と、バス１２５と、１つ以上のメモリコントローラ１３０と、ネットワークインタフェース１３５と、を少なくとも含む。他の実施形態では、コンピューティングシステム１００は、他のコンポーネントを含むことができ、及び／又は、コンピューティングシステム１００は、異なる構成とすることができる。一実施形態では、各コア複合体１０５Ａ〜１０５Ｎは、中央処理装置（ＣＰＵ）等の１つ以上の汎用プロセッサを含む。「コア複合体」は、本明細書では「処理ノード」又は「ＣＰＵ」とも呼ばれることに留意されたい。いくつかの実施形態では、１つ以上のコア複合体１０５Ａ〜１０５Ｎは、高度に並列なアーキテクチャを有するデータ並列プロセッサを含むことができる。データ並列プロセッサの例は、グラフィックス処理ユニット（ＧＰＵ）、デジタル信号プロセッサ（ＤＳＰ）等を含む。コア複合体１０５Ａ〜１０５Ｎ内の各プロセッサコアは、１つ以上のレベルのキャッシュを有するキャッシュサブシステムを含む。一実施形態では、各コア複合体１０５Ａ〜１０５Ｎは、複数のプロセッサコア間で共有されるキャッシュ（例えば、レベル３（Ｌ３）キャッシュ）を含む。
【００１３】
１つ以上のメモリコントローラ１３０は、コア複合体１０５Ａ〜１０５Ｎによってアクセス可能な任意の数及びタイプのメモリコントローラを表す。メモリコントローラ１３０は、任意の数及びタイプのメモリデバイス（図示省略）に接続されている。例えば、メモリコントローラ１３０に接続されるメモリデバイスのメモリのタイプは、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、ＮＡＮＤフラッシュメモリ、ＮＯＲフラッシュメモリ、強誘電体ランダムアクセスメモリ（ＦｅＲＡＭ）、又は、他のものを含むことができる。Ｉ／Ｏインタフェース１２０は、任意の数及びタイプのＩ／Ｏインタフェース（例えば、周辺機器相互接続（ＰＣＩ）バス、ＰＣＩ拡張（ＰＣＩ−Ｘ）、ＰＣＩＥ（ＰＣＩ  Ｅｘｐｒｅｓｓ）バス、ギガビットイーサネット（登録商標）（ＧＢＥ）バス、ユニバーサルシリアルバス（ＵＳＢ））を表す。様々なタイプの周辺機器をＩ／Ｏインタフェース１２０に接続することができる。このような周辺機器には、ディスプレイ、キーボード、マウス、プリンタ、スキャナ、ジョイスティック、他のタイプのゲームコントローラ、メディア記録デバイス、外部ストレージデバイス、ネットワークインタフェースカード等が含まれる（但し、これらに限定されない）。
【００１４】
様々な実施形態では、コンピューティングシステム１００は、サーバ、コンピュータ、ラップトップ、モバイルデバイス、ゲーム機、ストリーミングデバイス、ウェアラブルデバイス、又は、様々な他のタイプのコンピューティングシステム若しくはデバイスの何れかであってもよい。コンピューティングシステム１００のコンポーネントの数は、実施形態毎に異なってもよいことに留意されたい。各コンポーネントは、図１に示す数より多くてもよいし少なくてもよい。また、コンピューティングシステム１００は、図１に示されていない他のコンポーネントを含むことができることに留意されたい。また、他の実施形態では、コンピューティングシステム１００は、図１に示す以外の方法で構成されてもよい。
【００１５】
図２を参照すると、コア複合体２００の一実施形態のブロック図が示されている。一実施形態では、コア複合体２００は、４つのプロセッサコア２１０Ａ〜２１０Ｄを含む。他の実施形態では、コア複合体２００は、他の数のプロセッサコアを含むことができる。「コア複合体」は、本明細書では「処理ノード」又は「ＣＰＵ」とも呼ばれることに留意されたい。一実施形態では、コア複合体２００のコンポーネントは、（図１の）コア複合体１０５Ａ〜１０５Ｎ内に含まれる。
【００１６】
各プロセッサコア２１０Ａ〜２１０Ｄは、メモリサブシステム（図示省略）から取得されたデータ及び命令を記憶するためのキャッシュサブシステムを含む。例えば、一実施形態では、各コア２１０Ａ〜２１０Ｄは、対応するレベル１（Ｌ１）キャッシュ２１５Ａ〜２１５Ｄを含む。各プロセッサコア２１０Ａ〜２１０Ｄは、対応するレベル２（Ｌ２）キャッシュ２２０Ａ〜２２０Ｄを含むか、これに接続されてもよい。さらに、一実施形態では、コア複合体２００は、プロセッサコア２１０Ａ〜２１０Ｄによって共有されるレベル３（Ｌ３）キャッシュ２３０を含む。Ｌ３キャッシュ２３０は、ファブリック及びメモリサブシステムへのアクセスのためにコヒーレントマスタに接続されている。他の実施形態では、コア複合体２００は、他の数のキャッシュを有する及び／又は様々なキャッシュレベルの他の構成を有する他のタイプのキャッシュサブシステムを含むことができることに留意されたい。
【００１７】
図３を参照すると、マルチＣＰＵシステム３００の一実施形態のブロック図が示されている。一実施形態では、システムは、複数のＣＰＵ３０５Ａ〜３０５Ｎを含む。システム当たりのＣＰＵ数は、実施形態によって変えることができる。各ＣＰＵ３０５Ａ〜３０５Ｎは、任意の数のコア３０８Ａ〜３０８Ｎを含むことができ、コアの数は、実施形態によって変わる。各ＣＰＵ３０５Ａ〜３０５Ｎは、対応するキャッシュサブシステム３１０Ａ〜３１０Ｎも含む。各キャッシュサブシステム３１０Ａ〜３１０Ｎは、任意の数のレベルのキャッシュ、及び、任意のタイプのキャッシュ階層構造を含むことができる。
【００１８】
一実施形態では、各ＣＰＵ３０５Ａ〜３０５Ｎは、対応するコヒーレントマスタ３１５Ａ〜３１５Ｎに接続されている。本明細書で使用する場合、「コヒーレントマスタ」は、相互接続（例えば、バス／ファブリック３１８）を介して流れるトラフィックを処理し、接続されたＣＰＵのコヒーレンシを管理するエージェントとして定義される。コヒーレンシを管理するために、コヒーレントマスタは、コヒーレンシ関連のメッセージ及びプローブを受信して処理し、コヒーレンシ関連の要求及びプローブを生成する。「コヒーレントマスタ」は、本明細書では「コヒーレントマスタユニット」とも呼ばれることに留意されたい。
【００１９】
一実施形態では、各ＣＰＵ３０５Ａ〜３０５Ｎは、対応するコヒーレントマスタ３１５Ａ〜３１５Ｎ及びバス／ファブリック３１８を介してコヒーレントスレーブのセットに接続されている。例えば、ＣＰＵ３０５Ａは、コヒーレントマスタ３１５Ａ及びバス／ファブリック３１８を介してコヒーレントスレーブ３２０Ａ〜３２０Ｂに接続されている。コヒーレントスレーブ（ＣＳ）３２０Ａは、メモリコントローラ（ＭＣ）３３０Ａに接続されており、コヒーレントスレーブ３２０Ｂは、メモリコントローラ３３０Ｂに接続されている。コヒーレントスレーブ３２０Ａは、プローブフィルタ（ＰＦ）３２５Ａに接続されており、プローブフィルタ３２５Ａは、メモリコントローラ３３０Ａを介してアクセス可能なメモリのためにシステム３００にキャッシュされるキャッシュラインを有するメモリ領域のエントリを含む。プローブフィルタ３２５Ａ及び他のプローブフィルタの各々は、「キャッシュディレクトリ」とも呼ばれることに留意されたい。同様に、コヒーレントスレーブ３２０Ｂは、プローブフィルタ３２５Ｂに接続されており、プローブフィルタ３２５Ｂは、メモリコントローラ３３０Ｂを介してアクセス可能なメモリのためにシステム３００にキャッシュされるキャッシュラインを有するメモリ領域のエントリを含む。ＣＰＵ毎に２つのメモリコントローラを有する例は、一実施形態を示すに過ぎないことに留意されたい。他の実施形態では、各ＣＰＵ３０５Ａ〜３０５Ｎが、２つ以外の他の数のメモリコントローラに接続されてもよいことを理解されたい。
【００２０】
ＣＰＵ３０５Ａと同様の構成において、ＣＰＵ３０５Ｂは、コヒーレントマスタ３１５Ｂ及びバス／ファブリック３１８を介してコヒーレントスレーブ３３５Ａ〜３３５Ｂに接続されている。コヒーレントスレーブ３３５Ａは、メモリコントローラ３５０Ａを介してメモリに接続されており、コヒーレントスレーブ３３５Ａは、プローブフィルタ３４５Ａに接続されており、メモリコントローラ３５０Ａを介してアクセス可能なメモリに対応するキャッシュラインのコヒーレンシを管理する。コヒーレントスレーブ３３５Ｂは、プローブフィルタ３４５Ｂに接続されており、コヒーレントスレーブ３３５Ｂは、メモリコントローラ３６５Ｂを介してメモリに接続されている。また、ＣＰＵ３０５Ｎは、コヒーレントマスタ３１５Ｎ及びバス／ファブリック３１８を介してコヒーレントスレーブ３５５Ａ〜３５５Ｂに接続されている。コヒーレントスレーブ３５５Ａ〜３５５Ｂの各々は、プローブフィルタ３６０Ａ〜３６０Ｂに接続されており、コヒーレントスレーブ３５５Ａ〜３５５Ｂの各々は、メモリコントローラ３６５Ａ〜３６５Ｂを介してメモリに接続されている。本明細書で使用する場合、「コヒーレントスレーブ」は、対応するメモリコントローラをターゲットとする受信した要求及びプローブを処理することによってコヒーレンシを管理するエージェントとして定義される。「コヒーレントスレーブ」は、本明細書では「コヒーレントスレーブユニット」とも呼ばれることに留意されたい。さらに、本明細書で使用する場合、「プローブ」は、コンピュータシステムにおいてコヒーレンシポイントから１つ以上のキャッシュに渡され、キャッシュがデータブロックのコピーを含むかどうかを判別し、オプションとして、キャッシュがデータブロックを配置する状態を示すメッセージとして定義される。
【００２１】
コヒーレントスレーブは、その対応するメモリコントローラをターゲットとするメモリ要求を受信すると、対応する初期プローブキャッシュ及び対応するプローブフィルタの並列ルックアップを実行する。一実施形態では、システム３００内の各初期プローブキャッシュは、メモリ領域を追跡し、領域は、複数のキャッシュラインを含む。追跡される領域のサイズは、実施形態によって変わる場合がある。本明細書では、「領域」は、「ページ」とも呼ばれることに留意されたい。コヒーレントスレーブは、要求を受信すると、この要求によってターゲットとされる領域を決定する。次に、この領域について初期プローブキャッシュのルックアップを実行し、並行して、プローブフィルタのルックアップを実行する。初期プローブキャッシュのルックアップは、通常、プローブフィルタのルックアップの前に数サイクル完了する。初期プローブキャッシュのルックアップの結果がヒットになった場合、コヒーレントスレーブは、ヒットエントリで識別される１つ以上のＣＰＵに初期プローブを送信する。これにより、初期プローブキャッシュが正しいターゲットを識別する場合に、データの初期取得が容易になり、メモリ要求を処理することに関連するレイテンシを短縮する。他の実施形態では、図を不明瞭にすることを避けるために、バス／ファブリック３１８から図示されていない他のコンポーネントへの他の接続が存在する場合があることに留意されたい。例えば、別の実施形態では、バス／ファブリック３１８は、１つ以上のＩ／Ｏインタフェース、及び、１つ以上のＩ／Ｏデバイスへの接続を有する。
【００２２】
図４を参照すると、コヒーレントスレーブ４００の一実施形態のブロック図が示されている。一実施形態では、コヒーレントスレーブ４００のロジックは、（図３）システム３００のコヒーレントスレーブ３２０Ａ〜３２０Ｂ，３３５Ａ〜３３５Ｂ，３５５Ａ〜３５５Ｂに含まれている。コヒーレントスレーブ４００は、プローブフィルタ４１５及び初期プローブキャッシュ４２０に接続された制御ユニット４１０を含む。制御ユニット４１０は、相互接続ファブリック及びメモリコントローラにも接続されている。制御ユニット４１０は、ハードウェア及び／又はソフトウェアの任意の適切な組み合わせを使用して実装されてもよい。制御ユニット４１０は、相互接続ファブリックを介して様々なＣＰＵからメモリ要求を受信するように構成されている。制御ユニット４１０によって受信されるメモリ要求は、コヒーレントスレーブ４００に接続されたメモリコントローラを介してメモリに伝達される。一実施形態では、制御ユニット４１０が所定のメモリ要求を受信すると、制御ユニット４１０は、初期プローブキャッシュ４２０及びプローブフィルタ４１５の並列ルックアップを実行する。
【００２３】
一実施形態では、初期プローブキャッシュ４２０は、共有領域についてのプローブフィルタ４１５への最近のルックアップの結果をキャッシュするように構成されている。例えば、受信したメモリ要求に対してプローブフィルタ４１５のルックアップを実行すると、ルックアップから取得された情報の一部が保持され、初期プローブキャッシュ４２０に記憶される。例えば、キャッシュラインの所有者のＩＤがプローブフィルタ４１５のルックアップから取得され、このキャッシュラインが入る領域のアドレスについてのエントリが初期プローブキャッシュ４２０に生成される。このキャッシュラインをキャッシュしているノードは、初期プローブキャッシュ４２０の新たなエントリに領域所有者として記憶される。
【００２４】
概して、初期プローブキャッシュ４２０は、メモリの領域内では、全てのキャッシュラインについて共有動作が同じである可能性が高いという原則に基づいて動作する。換言すれば、コヒーレントスレーブ４００が、第１領域内の第１キャッシュラインについての指向性プローブを生成してノード４４５に送信する場合、第１領域内の第２キャッシュラインについての指向性プローブをノード４４５に送信する確率も高い。初期プローブキャッシュ４２０は、プローブフィルタ４１５よりも小さく高速であることから、初期プローブキャッシュ４２０は、プローブフィルタ４１５のルックアップが完了するよりも早く、ターゲットノードに対して投機的に初期プローブを起動するようになる。初期プローブの起動から利益を得るワークロードの一例は、プロデューサコンシューマシナリオ（producer consumer scenario）であり、プロデューサが領域内のラインに記憶した後に、コンシューマがこれらのラインから読み出す。領域内の全てのラインについて、ホームノードは、プローブを起動して、プロデューサから最新のデータを得るようになる。
【００２５】
本明細書で使用する場合、「指向性プローブ」は、プローブフィルタ４１５へのルックアップに基づいて生成されたプローブを指し、このプローブは、メモリ要求によってターゲットとされるキャッシュラインの所有者に送信される。「初期プローブ」は、初期プローブキャッシュ４２０へのルックアップに基づいて生成されるプローブを指し、このプローブは、メモリ要求によってターゲットとされるキャッシュラインの領域の所有者として識別されるノードに送信される。初期プローブが指向性プローブと異なる１つの点は、初期プローブが誤ったターゲットに送信される可能性があることである。また、初期プローブは、指向性プローブよりも数クロックサイクル早く送信されるため、初期プローブが正しいターゲットに送信されると、メモリ要求の処理のレイテンシを短縮するのに役立つ。
【００２６】
一実施形態では、初期プローブキャッシュ４２０の各エントリは、領域アドレスフィールドと、領域所有者フィールドと、信頼度指標フィールドと、最低使用頻度（ＬＲＵ）フィールドと、を含む。コヒーレントスレーブ４００は、要求を受信すると、要求の領域アドレスに対して初期プローブキャッシュ４２０のルックアップを実行し、要求によってターゲットとされるキャッシュラインに対してプローブフィルタ４１５の並列ルックアップを実行する。初期プローブキャッシュ４２０のルックアップの結果がヒットとなった場合、コヒーレントスレーブ４００は、一致するエントリから信頼度指標を取得する。信頼度カウンタがプログラム可能な閾値を超えた場合、領域所有者をターゲットとする初期プローブを起動させる。そうではなく、信頼度カウンタがプログラム可能な閾値以下である場合、コヒーレントスレーブ４００は、初期プローブが起動するのを抑制し、代わりに、プローブフィルタ４１５へのルックアップの結果を待機する。
【００２７】
後の時点で、プローブフィルタ４１５へのルックアップが完了すると、プローブフィルタ４１５へのルックアップの結果によって初期プローブキャッシュ４２０が更新される。共有領域の領域アドレスについてのエントリが初期プローブキャッシュ４２０に存在しない場合、ＬＲＵフィールドに基づいて既存のエントリがエビクションされることによって、新たなエントリが初期プローブキャッシュ４２０に生成される。領域アドレスについてのエントリが初期プローブキャッシュ４２０に既に存在する場合、このエントリについてのＬＲＵフィールドが更新される。プローブフィルタ４１５から取得されたキャッシュラインターゲットが、初期プローブキャッシュ４２０のエントリで識別される領域所有者と同じ場合、信頼度指標がインクリメントされる（すなわち、１だけ増加される）。プローブフィルタ４１５から取得されたキャッシュラインターゲットが、初期プローブキャッシュ４２０のエントリで識別される領域所有者と同じでない場合、信頼度指標がデクリメント（すなわち、１だけ減少される）又はリセットされる。
【００２８】
初期プローブがコヒーレントスレーブ４００によって起動すると、プローブフィルタ４１５のルックアップ後に生成される対応する要求プローブを、実施形態に応じて異なる方法で処理することができる。一実施形態では、初期プローブが正しいターゲットに対するものである場合、要求プローブが起動しない。この実施形態では、初期プローブは、データをターゲットから取得し、要求ノードに返す。一方、初期プローブが誤ったターゲットに送信される場合、要求プローブは、正しいターゲットに送信される。別の実施形態では、初期プローブが、ターゲットのキャッシュサブシステムからデータを引き出した後に、このデータが、一時バッファに記憶される。このデータは、要求プローブが到達する前にタイマーが期限切れになった場合に、ドロップされる可能性がある。この実施形態では、要求プローブは、初期プローブの後に起動され、キャッシュサブシステムから引き出されるデータを要求ノードに転送する。
【００２９】
図５を参照すると、初期プローブメカニズムを実装する方法５００の一実施形態が示されている。説明のために、この実施形態及び図６の実施形態におけるステップは、順番に示されている。しかしながら、説明する方法の様々な実施形態では、説明する要素のうち１つ以上が、同時に実行され、図示した順序とは異なる順序で実行され、又は、完全に省略されてもよいことに留意されたい。必要に応じて、他の追加の要素も実行される。本明細書で説明する様々なシステム又は装置の何れも、方法５００を実施するように構成されている。
【００３０】
コヒーレントスレーブユニットは、メモリ要求を受信したことに応じて、プローブフィルタ及び初期プローブキャッシュへの並列ルックアップを実行する（ブロック５０５）。プローブフィルタへのルックアップが完了する前に、コヒーレントスレーブユニットは、初期プローブキャッシュへのルックアップが、メモリ要求によってターゲットとされた第１領域の所有者として第１処理ノードを識別するエントリに一致すると判別したことに応じて、初期プローブを第１処理ノードに送信する（ブロック５１０）。この説明のために、初期プローブキャッシュ内で一致するエントリの信頼度指標が、プログラム可能な閾値よりも大きいと仮定する。プローブフィルタへのルックアップによって、第１処理ノードを、メモリ要求によってターゲットとされたキャッシュラインの所有者として識別した場合（条件ブロック５１５：Ｙｅｓ）、初期プローブキャッシュ内で一致するエントリ内の信頼度指標がインクリメントされ、ＬＲＵフィールドが更新される（ブロック５２０）。実施形態に応じて、オプションとして、要求プローブを第１処理ノードに送信することができる（ブロック５２５）。
【００３１】
プローブフィルタへのルックアップによって、異なる処理ノードが、メモリ要求によってターゲットとされたキャッシュラインの所有者として識別された場合（条件ブロック５１５：Ｎｏ）、初期プローブキャッシュ内で一致するエントリ内の信頼度指標がデクリメントされ、ＬＲＵフィールドが更新される（ブロック５３０）。また、オプションとして、初期プローブキャッシュ内で一致するエントリ内の領域所有者フィールドが正しい処理ノードに更新される（ブロック５３５）。さらに、要求プローブが正しい処理ノードに送信される（ブロック５４０）。ブロック５２５，５４０の後に、方法５００は終了する。
【００３２】
図６を参照すると、初期プローブを生成する際に使用するために、領域ベースのエントリを初期プローブキャッシュに割り当てる方法６００の一実施形態が示されている。受信したメモリ要求についての初期プローブキャッシュへのルックアップは、既存のエントリと一致しないが、プローブフィルタへのルックアップは、共有領域についての既存のエントリと一致する（ブロック６０５）。初期プローブキャッシュのルックアップ及びプローブフィルタのルックアップは、コヒーレントスレーブユニットによって並行して実行されることに留意されたい。初期プローブキャッシュのルックアップが失敗していること、及び、プローブフィルタへのルックアップがヒットしていることに応じて、要求プローブが、プローブフィルタ内で一致するエントリによって識別されたターゲットに送信される（ブロック６１０）。また、メモリ要求によってターゲットとされた領域を決定する（ブロック６１５）。次に、メモリ要求の領域についての新たなエントリが、初期プローブキャッシュに割り当てられる（ブロック６２０）。任意の適切なエビクションアルゴリズムを利用して、何れのエントリをエビクションして新たなエントリ用のスペースを生成するかを決定することができる。新たなエントリの信頼度指標がデフォルト値に設定され、新たなエントリのＬＲＵフィールドが初期化される（ブロック６２５）。要求プローブによってターゲットとされたノードのＩＤは、初期プローブキャッシュ内の新たなエントリの領域所有者フィールドに記憶される（ブロック６３０）。したがって、この領域をターゲットとする将来のメモリ要求について、初期プローブキャッシュ内のこの新たなエントリに基づいて、初期プローブが同じノードに送信される。ブロック６３０の後に、方法６００は終了する。
【００３３】
様々な実施形態では、ソフトウェアアプリケーションのプログラム命令を使用して、本明細書で説明する方法及び／又はメカニズムを実施する。例えば、汎用プロセッサ又は専用プロセッサによって実行可能なプログラム命令が考えられる。様々な実施形態では、このようなプログラム命令を、高レベルプログラミング言語として表すことができる。他の実施形態では、プログラム命令を、高レベルプログラミング言語からバイナリ、中間又は他の形式にコンパイルすることができる。或いは、ハードウェアの動作又は設計を記述するプログラム命令を書き込むことができる。このようなプログラム命令は、Ｃ言語等の高レベルプログラミング言語によって表すことができる。或いは、Ｖｅｒｉｌｏｇ等のハードウェア設計言語（ＨＤＬ）を使用することもできる。様々な実施形態では、プログラム命令は、様々な非一時的なコンピュータ可読記憶媒体の何れかに記憶される。記憶媒体は、使用中にコンピューティングシステムによってアクセス可能であり、プログラム実行のためにプログラム命令をコンピューティングシステムに提供する。一般に、このようなコンピューティングシステムは、少なくとも１つ以上のメモリと、プログラム命令を実行するように構成された１つ以上のプロセッサと、を含む。
【００３４】
上述した実施形態は、実装の非限定的な例に過ぎないことを強調しておきたい。上記の開示が十分に理解されれば、当業者には多くの変形及び修正が明らかになるであろう。以下の特許請求の範囲は、かかる変形及び修正の全てを包含すると解釈されることを意図している。
【図１】
2021507371.tif 000003
【図２】
2021507371.tif 000004
【図３】
2021507371.tif 000005
【図４】
2021507371.tif 000006
【図５】
2021507371.tif 000007
【図６】
2021507371.tif 000008
【国際調査報告】
2021507371.tif 000009
2021507371.tif 000010
2021507371.tif 000011