(57)【要約】順序付けされた要求についてのキャンセル及びリプレイメカニズムを実装するためのシステム、装置及び方法を開示する。システムは、少なくとも、順序付けマスター、メモリコントローラ、メモリコントローラに結合されるコヒーレントスレーブ、ならびに順序付けマスター及びコヒーレントスレーブに結合される相互接続ファブリックを含む。順序付けマスターは、メモリへのパス上のコヒーレントスレーブに転送される書き込み要求を生成する。コヒーレントスレーブは、無効にするプローブをすべての処理ノードに送信した後に、書き込み要求によって標的とされるデータのキャッシュされたコピーのすべてが無効にされたときに、書き込み要求がグローバルに可視であるインジケーションを順序付けマスターに送信する。グローバルに可視なインジケーションを受信することに応答して、順序付けマスターは、タイマーを開始する。すべてのより古い要求がグローバルに可視になる前にタイマーが期限切れになる場合、書き込み要求をキャンセルしてリプレイし、ファブリック中での前進を確保し、潜在的なデッドロックシナリオを回避する。【選択図】図５
2021509207.tif 000002
【特許請求の範囲】
【請求項１】
順序付けマスターユニットと、
コヒーレントスレーブユニットと、
前記コヒーレントスレーブユニットに結合されるメモリコントローラと、
前記順序付けマスターユニット及び前記コヒーレントスレーブユニットに結合される相互接続ファブリックと、
を備えるシステムであって、
対応するデータなしで、書き込み要求を前記順序付けマスターユニットから前記コヒーレントスレーブユニットに送信することと、
前記順序付けマスターユニットによって、前記書き込み要求がグローバルに可視であるインジケーションを前記コヒーレントスレーブユニットから受信することに応答して、タイマーを開始することと、
少なくとも１つのより古い要求がまだグローバルに可視ではない間に期限切れになる前記タイマーに応答して前記書き込み要求をキャンセルすることと、
前記書き込み要求をキャンセルすることに応答して、前記順序付けマスターユニットから前記コヒーレントスレーブユニットに前記書き込み要求を再送信することによって前記書き込み要求をリプレイすることと、を行うように構成される、システム。
【請求項２】
前記順序付けマスターユニットは、前記書き込み要求を識別するキャンセルインジケーションを前記コヒーレントスレーブユニットに送信することによって前記書き込み要求をキャンセルするように構成される、請求項１に記載のシステム。
【請求項３】
前記順序付けマスターユニットは、前記タイマーが期限切れになる前にすべてのより古い要求がグローバルに可視であることに応答して、前記書き込み要求の前記データに加えて、前記より古い要求がコミットされることができるインジケーションを前記コヒーレントスレーブユニットに送信するようにさらに構成される、請求項１に記載のシステム。
【請求項４】
前記順序付けマスターユニットは、書き込み要求についてのコミットインジケーションを経時的順序で提供するように構成される、請求項１に記載のシステム。
【請求項５】
前記コヒーレントスレーブユニットは、アドレスマッチング要求を経時的順序で実行するようにさらに構成される、請求項４に記載のシステム。
【請求項６】
前記コヒーレントスレーブユニットは、前記書き込み要求がキャンセルされることに応答して、プローブ応答を介して受信したいずれかの変更されたデータをメモリに書き戻すように構成される、請求項１に記載のシステム。
【請求項７】
前記順序付けマスターユニットは、前の要求がグローバルに順序付けされるようになるのを待機することなく、要求を前記相互接続ファブリックに発行するようにさらに構成される、請求項１に記載のシステム。
【請求項８】
対応するデータなしで、書き込み要求を順序付けマスターユニットからコヒーレントスレーブユニットに送信することと、
前記順序付けマスターユニットによって、前記書き込み要求がグルーバルに可視であるインジケーションを前記コヒーレントスレーブユニットから受信することに応答して、タイマーを開始することと、
少なくとも１つのより古い要求がまだグローバルに可視ではない間に期限切れになる前記タイマーに応答して前記書き込み要求をキャンセルすることと、
前記書き込み要求をキャンセルすることに応答して、前記順序付けマスターユニットから前記コヒーレントスレーブユニットに前記書き込み要求を再送信することによって前記書き込み要求をリプレイすることと、を備える、方法。
【請求項９】
前記書き込み要求を識別するキャンセルインジケーションを前記コヒーレントスレーブユニットに送信することによって前記書き込み要求をキャンセルすることをさらに備える、請求項８に記載の方法。
【請求項１０】
前記タイマーが期限切れになる前にすべてのより古い要求がグローバルに可視であることに応答して、前記書き込み要求の前記データに加えて、前記より古い要求がコミットされることができるインジケーションを前記コヒーレントスレーブユニットに送信することをさらに備える、請求項８に記載の方法。
【請求項１１】
書き込み要求についてのコミットインジケーションを経時的順序で提供することをさらに備える、請求項８に記載の方法。
【請求項１２】
アドレスマッチング要求を経時的順序で実行することをさらに備える、請求項１１に記載の方法。
【請求項１３】
前記書き込み要求がキャンセルされることに応答して、プローブ応答を介して受信したいずれかの変更されたデータをメモリに書き戻すことをさらに備える、請求項８に記載の方法。
【請求項１４】
前の要求がグローバルに順序付けされるようになるのを待機することなく、要求を前記相互接続ファブリックに発行することをさらに備える、請求項８に記載の方法。
【請求項１５】
順序付けマスターユニットと、
コヒーレントスレーブユニットと、
を備える装置であって、
対応するデータなしで、書き込み要求を前記順序付けマスターユニットから前記コヒーレントスレーブユニットに送信することと、
前記順序付けマスターユニットによって、前記書き込み要求がグローバルに可視であるインジケーションを前記コヒーレントスレーブユニットから受信することに応答して、タイマーを開始することと、
少なくとも１つのより古い要求がまだグローバルに可視ではない間に期限切れになる前記タイマーに応答して前記書き込み要求をキャンセルすることと、
前記書き込み要求をキャンセルすることに応答して、前記順序付けマスターユニットから前記コヒーレントスレーブユニットに前記書き込み要求を再送信することによって前記書き込み要求をリプレイすることと、を行うように構成される、前記装置。
【請求項１６】
前記順序付けマスターユニットは、前記書き込み要求を識別するキャンセルインジケーションを前記コヒーレントスレーブユニットに送信することによって前記書き込み要求をキャンセルするように構成される、請求項１５に記載の装置。
【請求項１７】
前記順序付けマスターユニットは、前記タイマーが期限切れになる前にすべてのより古い要求がグローバルに可視であることに応答して、前記書き込み要求の前記データに加えて、前記より古い要求がコミットされることができるインジケーションを前記コヒーレントスレーブユニットに送信するようにさらに構成される、請求項１５に記載の装置。
【請求項１８】
前記順序付けマスターユニットは、書き込み要求についてのコミットインジケーションを経時的順序で提供するように構成される、請求項１５に記載の装置。
【請求項１９】
前記コヒーレントスレーブユニットは、アドレスマッチング要求を経時的順序で実行するように構成される、請求項１８に記載の装置。
【請求項２０】
前記順序付けマスターユニットは、前の要求がグローバルに順序付けされるようになるのを待機することなく、要求を前記相互接続ファブリックに発行するようにさらに構成される、請求項１５に記載の装置。
【請求項２１】
前記書き込み要求によって標的とされるデータのキャッシュされたコピーのすべてが無効にされたときに、前記書き込み要求は、グローバルに可視である、請求項１に記載のシステム。
【請求項２２】
前記書き込み要求によって標的とされるデータのキャッシュされたコピーのすべてが無効にされたときに、前記書き込み要求は、グローバルに可視である、請求項８に記載の方法。
【請求項２３】
前記書き込み要求によって標的とされるデータのキャッシュされたコピーのすべてが無効にされたときに、前記書き込み要求は、グローバルに可視である、請求項１５に記載の装置。
【発明の詳細な説明】
【背景技術】
【０００１】
関連技術の説明
ペリフェラルコンポーネントインターコネクトエクスプレス（ＰＣＩｅ）は、信頼性のあるデータ転送のために高帯域幅相互接続プロトコルを提供する高速シリアルコンピュータ拡張バス規格である。メモリ、入力／出力（Ｉ／Ｏ）、及びコンフィグレーションデータなどのさまざまなタイプのデータは、ＰＣＩｅインタフェースを通過することができる。ＰＣＩｅ帯域幅は、新しい世代のＰＣＩｅ規格によって増加し続ける。例えば、ＰＣＩｅ４．０の拡張速度モード（ＥＳＭ）は、最大２５ギガビット毎秒（Ｇｂｐｓ）の速度でデータを転送することができる。加えて、メモリチャネル数を増加させることは、より高いデータレートを維持するために必要とされる。ＰＣＩｅ、及びＣＰＵストアインストラクション動作などの他の規格は、すべてのより古い書き込みがプロセッサまたはＩ／Ｏエージェントによって観察されるまで、より新しい書き込みが他のプロセッサまたはＩ／Ｏエージェントによって観察されることができないように「順序付け」される書き込みを一般に要求する。この順序付けを達成するために、メモリチャネル間でスイッチングすることは、要求がグローバルに順序付けされるようになるのを待機してデッドロックを回避することを要求する。要求がグローバルに順序付けされるのを待機することは、順序付けされたピーク帯域幅の有意な低下につながる。
【０００２】
添付図面と共に以下の説明を参照することによって、本明細書で説明される方法及び機構の利点をより良好に理解することができる。
【図面の簡単な説明】
【０００３】
【図１】コンピューティングシステムの一実施形態のブロック図である。
【図２】コア複合体の一実施形態のブロック図である。
【図３】マルチＣＰＵシステムの一実施形態のブロック図である。
【図４】マスターの一実施形態のブロック図である。
【図５】キャンセル及びリプレイメカニズムを実装する方法の一実施形態を示す一般化された流れ図である。
【図６】キャンセル及びリプレイメカニズムを実装する方法の別の実施形態を示す一般化された流れ図である。
【図７】コンピューティングシステムについてのデッドロックシナリオの一実施形態のブロック図である。
【発明を実施するための形態】
【０００４】
以下の説明では、本明細書に提示する方法及び機構の完全な理解を提供するために、多くの具体的な詳細が述べられている。しかしながら、当業者は、様々な実施形態がそれらの特定の詳細なしに実施されることができることを認識するべきである。いくつかの例では、本明細書で説明されるアプローチを曖昧にすることを回避するために、公知な構造、コンポーネント、信号、コンピュータプログラム命令、及び技術が詳細には示されていない。例示の簡潔性及び明確さのために、図に示される要素は、必ずしも縮尺通りに描かれていないことが認識されよう。例えば、要素のいくつかの寸法は、他の要素に対して強調される場合がある。
【０００５】
本明細書では、順序付けされた帯域幅についてのキャンセル及びリプレイメカニズムを実装するためのさまざまなシステム、装置、方法、及びコンピュータ可読媒体を開示する。一実施形態では、システムは、少なくとも複数の処理ノード（例えば、中央処理装置（ＣＰＵ））、順序付けマスター、相互接続ファブリック、コヒーレントスレーブ、プローブフィルタ、メモリコントローラ、及びメモリを備える。各処理ノードは、１つ以上の処理ユニットを含む。各処理ノードに含まれる、処理ユニット（複数可）のタイプ（例えば、汎用プロセッサ、グラフィックスプロセッシングユニット（ＧＰＵ）、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、デジタルシグナルプロセッサ（ＤＳＰ））は、実施形態ごとに、またノードごとに異なることができる。順序付けマスターは、書き込みが順序付けされることを要求するＣＰＵまたはＩ／Ｏデバイス（ＰＣＩｅルート複合体のような）に関係があり、この順序付けを分散ファブリック内に確保することを担当する。コヒーレントスレーブは、相互接続ファブリックを介して順序付けマスターに結合され、コヒーレントスレーブは、プローブフィルタ及びメモリコントローラにも結合される。
【０００６】
一実施形態では、順序付けマスターは、メモリへのパス上のコヒーレントスレーブに転送される書き込み要求を生成する。コヒーレントスレーブは、標的とされたデータのコピーをキャッシュする処理ノードに無効にするプローブを送出した後に、書き込み要求によって標的とされるデータのキャッシュされたコピーのすべてが無効にされたときに、書き込み要求がグローバルに可視であるインジケーションを順序付けマスターに送信する。グローバルに可視なインジケーションを受信することに応答して、順序付けマスターは、タイマーを開始する。すべてのより古い要求がグローバルに可視になる前にタイマーが期限切れになる場合、書き込み要求をキャンセルしてリプレイする。いくつかの実施形態では、書き込み要求とのアドレス依存関係を有するいかなるより新しい要求もキャンセルし、リプレイする。本明細書に使用される場合、書き込み要求は、標的とされたデータのキャッシュされたコピーのすべてが無効にされたときに「グローバルに可視」であると記述される。
【０００７】
ここで図１を参照して、コンピューティングシステム１００の一実施形態のブロック図を示す。一実施形態では、コンピューティングシステム１００は、少なくともコア複合体１０５Ａ〜Ｎ、入力／出力（Ｉ／Ｏ）インタフェース１２０、バス１２５、メモリコントローラ（複数可）１３０、及びネットワークインタフェース１３５を含む。他の実施形態では、コンピューティングシステム１００は、他のコンポーネントを含むことができる、及び／またはコンピューティングシステム１００は、異なって配列されてもよい。一実施形態では、各コア複合体１０５Ａ〜Ｎは、中央処理装置（ＣＰＵ）などの、１つ以上の汎用プロセッサを含む。「コア複合体」が本明細書において「処理ノード」または「ＣＰＵ」とも称されることができることに留意する。いくつかの実施形態では、１つ以上のコア複合体１０５Ａ〜Ｎは、高度並列アーキテクチャを有するデータ並列プロセッサを含むことができる。データ並列プロセッサの例は、グラフィックスプロセッシングユニット（ＧＰＵ）、デジタルシグナルプロセッサ（ＤＳＰ）、及びその他のものを含む。コア複合体１０５Ａ〜Ｎ内の各プロセッサコアは、１つ以上のレベルのキャッシュを有するキャッシュサブシステムを含む。一実施形態では、各コア複合体１０５Ａ〜Ｎは、複数のプロセッサコア間で共有されているキャッシュ（例えば、レベル３（Ｌ３）キャッシュ）を含む。
【０００８】
メモリコントローラ（複数可）１３０は、コア複合体１０５Ａ〜Ｎによってアクセス可能ないずれかの数及びタイプのメモリコントローラを表す。メモリコントローラ（複数可）１３０は、いずれかの数及びタイプのメモリデバイス（図示せず）に結合される。例えば、メモリコントローラ（複数可）１３０に結合されるメモリデバイス（複数可）におけるメモリのタイプは、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、ＮＡＮＤフラッシュメモリ、ＮＯＲフラッシュメモリ、または強誘電体ランダムアクセスメモリ（ＦｅＲＡＭ）などを含むことができる。Ｉ／Ｏインタフェース１２０は、いずれかの数及びタイプのＩ／Ｏインタフェース（例えば、ｐｅｒｉｐｈｅｒａｌ  ｃｏｍｐｏｎｅｎｔ  ｉｎｔｅｒｃｏｎｎｅｃｔ（ＰＣＩ）バス、ＰＣＩ−Ｅｘｔｅｎｄｅｄ（ＰＣＩ−Ｘ）、ＰＣＩＥ（ＰＣＩ  Ｅｘｐｒｅｓｓ）バス、ギガビットイーサネット（ＧＢＥ）バス、ユニバーサルシリアルバス（ＵＳＢ））を表す。様々なタイプのペリフェラルデバイスは、Ｉ／Ｏインタフェース１２０に結合されてもよい。そのようなペリフェラルデバイスは、ディスプレイ、キーボード、マウス、プリンタ、スキャナ、ジョイスティック、または他のタイプのゲームコントローラ、メディア記録デバイス、外部記憶装置、及びネットワークインタフェースカードなどを含む（がそれらに限定されない）。
【０００９】
様々な実施形態では、コンピューティングシステム１００は、サーバ、コンピュータ、ラップトップ、モバイルデバイス、ゲームコンソール、ストリーミングデバイス、ウェアラブルデバイス、または様々な他のタイプのコンピューティングシステムもしくはデバイスのいずれかであってもよい。コンピューティングシステム１００のコンポーネントの数は、実施形態ごとに変わってもよいことに留意されよう。図１に示された数よりも多い、または少ない各コンポーネントが存在してもよい。また、コンピューティングシステム１００が図１に示されていない他のコンポーネントを含むことができることに留意する。加えて、他の実施形態では、コンピューティングシステム１００は、図１に示された以外の方式において構造化されてもよい。
【００１０】
ここで図２を参照して、コア複合体２００の一実施形態のブロック図を示す。一実施形態では、コア複合体２００は、４つのプロセッサコア２１０Ａ〜Ｄを含む。他の実施形態では、コア複合体２００は、他の数のプロセッサコアを含んでもよい。「コア複合体」が本明細書において「処理ノード」または「ＣＰＵ」とも称されることができることに留意する。一実施形態では、コア複合体２００のコンポーネントをコア複合体１０５Ａ〜Ｎ（図１の）内に含む。
【００１１】
各プロセッサコア２１０Ａ〜Ｄは、メモリサブシステム（図示せず）から取得されるデータ及びインストラクションを格納するためにキャッシュサブシステムを含む。例えば、一実施形態では、各コア２１０Ａ〜Ｄは、対応するレベル１（Ｌ１）のキャッシュ２１５Ａ〜Ｄを含む。各プロセッサコア２１０Ａ〜Ｄは、対応するレベル２（Ｌ２）のキャッシュ２２０Ａ〜Ｄを含む、またはこれに結合されることができる。加えて、一実施形態では、コア複合体２００は、プロセッサコア２１０Ａ〜Ｄによって共有されているレベル３（Ｌ３）のキャッシュ２３０を含む。Ｌ３のキャッシュ２３０は、ファブリック及びメモリサブシステムへのアクセスのために順序付けマスターに結合される。他の実施形態では、コア複合体２００が他の数のキャッシュを有する、及び／またはさまざまなキャッシュレベルの他のコンフィグレーションを有する、他のタイプのキャッシュサブシステムを含むことができる。
【００１２】
ここで図３を参照して、マルチＣＰＵシステム３００の一実施形態のブロック図を示す。一実施形態では、システムは、複数のＣＰＵ３０５Ａ〜Ｎを含む。システムあたりのＣＰＵ数は、実施形態ごとに異なることができる。各ＣＰＵ３０５Ａ〜Ｎは、いずれかの数のコア３０８Ａ〜Ｎをそれぞれに含むことができ、コア数は実施形態によって異なる。各ＣＰＵ３０５Ａ〜Ｎは、対応するキャッシュサブシステム３１０Ａ〜Ｎをも含む。各キャッシュサブシステム３１０Ａ〜Ｎは、いずれかの数のレベルのキャッシュ、及びいずれかのタイプのキャッシュ階層構造を含むことができる。
【００１３】
一実施形態では、各ＣＰＵ３０５Ａ〜Ｎは、対応する順序付けマスター３１５Ａ〜Ｎに接続される。本明細書に使用される場合、「順序付けマスター」は、相互接続（例えば、バス／ファブリック３１８）経由で流れるトラフィックを処理するエージェントとして定義される。さまざまな実施形態では、順序付けマスターは、ＣＰＵコヒーレントマスター、入力／出力（Ｉ／Ｏ）マスター、または完全に順序付けされた書き込みメモリ要求を必要とするいずれかのクライアントについてのマスターであることができる。一実施形態では、順序付けマスターは、接続されたＣＰＵについてのコヒーレンシを管理するコヒーレントエージェントである。コヒーレンシを管理するために、順序付けマスターは、コヒーレンシ関連のメッセージ及びプローブを受信して処理し、コヒーレンシ関連の要求及びプローブを生成する。「順序付けマスター」が本明細書において「順序付けマスターユニット」とも称されることができることに留意する。
【００１４】
一実施形態では、各ＣＰＵ３０５Ａ〜Ｎは、対応する順序付けマスター３１５Ａ〜Ｎ及びバス／ファブリック３１８を介して１組のコヒーレントスレーブに結合される。例えば、ＣＰＵ３０５Ａは、順序付けマスター３１５Ａ及びバス／ファブリック３１８を介してコヒーレントスレーブ３２０Ａ〜Ｂに結合される。本明細書に使用される場合、「マスター」は、要求を生成するコンポーネントとして定義され、「スレーブ」は、要求を処理するコンポーネントとして定義される。コヒーレントスレーブ（ＣＳ）３２０Ａは、メモリコントローラ（ＭＣ）３３０Ａに結合され、コヒーレントスレーブ３２０Ｂは、メモリコントローラ３３０Ｂに結合される。コヒーレントスレーブ３２０Ａは、プローブフィルタ（ＰＦ）３２５Ａに結合され、プローブフィルタ３２５Ａは、メモリコントローラ３３０Ａを介してアクセス可能なメモリについてシステム３００にキャッシュされるキャッシュラインを含むメモリ領域についてのエントリを含む。プローブフィルタ３２５Ａ、及び他のプローブフィルタのそれぞれが「キャッシュディレクトリ」とも称されることができることに留意する。同様に、コヒーレントスレーブ３２０Ｂは、プローブフィルタ３２５Ｂに結合され、プローブフィルタ３２５Ｂは、メモリコントローラ３３０Ｂを介してアクセス可能なメモリについてシステム３００にキャッシュされるキャッシュラインを含むメモリ領域についてのエントリを含む。ＣＰＵあたり２つのメモリコントローラを含む例が一実施形態を示すにすぎないことに留意する。他の実施形態では、各ＣＰＵ３０５Ａ〜Ｎが２つに加え、他の数のメモリコントローラに接続されることができることを理解されたい。
【００１５】
バス／ファブリック３１８は、ルート複合体３５５を介してエンドポイント３６０に結合される順序付けマスター３１５Ｐにも結合される。順序付けマスター３１５Ｐは、入力／出力（Ｉ／Ｏ）エンドポイントからバス／ファブリック３１８への接続を提供する、いずれかの数の順序付けマスターを表す。ルート複合体３５５は、Ｉ／Ｏ階層のルートであり、ＣＰＵ３０５Ａ〜Ｎ及びメモリをエンドポイント３６０などのＩ／Ｏシステムに（バス／ファブリック３１８及び順序付けマスター３１５Ｐを介して）結合する。エンドポイント３６０は、直接に、またはスイッチ（図示せず）を介して、ルート複合体３５５に結合される、いずれかの数及びタイプのペリフェラル（例えば、Ｉ／Ｏデバイス、ネットワークインタフェースコントローラ、ディスクコントローラ）を表す。一実施形態では、エンドポイント３６０は、ＰＣＩｅ相互接続リンクを介してルート複合体３５５に結合される。いずれかの数の他のエンドポイントも、ルート複合体３５５に結合されることができ、いくつかの実施形態は、バス／ファブリック３１８に取り付けられる独立した順序付けマスター３１５Ｐに複数のルート複合体３５５をインスタンス化することができる。加えて、他の実施形態では、図を不明瞭にすることを回避するために示されない、バス／ファブリック３１８から他のコンポーネントへの他の接続があることができることに留意する。例えば、別の実施形態では、バス／ファブリック３１８は、いずれかの数の他のＩ／Ｏインタフェース及びＩ／Ｏデバイスへの接続を含む。
【００１６】
ＣＰＵ３０５Ａのコンフィグレーションと同様のコンフィグレーションでは、ＣＰＵ３０５Ｎは、順序付けマスター３１５Ｎ及びバス／ファブリック３１８を介してコヒーレントスレーブ３３５Ａ〜Ｂに結合される。コヒーレントスレーブ３３５Ａは、メモリコントローラ３５０Ａを介してメモリに結合され、コヒーレントスレーブ３３５Ａは、プローブフィルタ３４５Ａにも結合され、メモリコントローラ３５０Ａを介してアクセス可能なメモリに対応するキャッシュラインのコヒーレンシを管理する。コヒーレントスレーブ３３５Ｂは、プローブフィルタ３４５Ｂに結合され、コヒーレントスレーブ３３５Ｂは、メモリコントローラ３６５Ｂを介してメモリに結合される。本明細書に使用される場合、「コヒーレントスレーブ」は、対応するメモリコントローラを標的とする受信した要求及びプローブを処理することによってコヒーレンシを管理するエージェントとして定義される。本明細書では「コヒーレントスレーブ」が「コヒーレントスレーブユニット」とも称されることができることに留意する。加えて、本明細書に使用される場合、「プローブ」は、コンピュータシステムにおいてコヒーレンシポイントから１つ以上のキャッシュにパスされるメッセージとして定義され、このメッセージは、キャッシュがデータブロックのコピーを含むかどうかを判定し、任意選択で、キャッシュがデータブロックを置く状態を示す。
【００１７】
一実施形態では、所与の順序付けマスター３１５は、読み出し及び書き込みメモリ要求を対応するＣＰＵ３０５またはエンドポイント３６０から受信するように構成される。「書き込みメモリ要求」は、本明細書では「書き込み要求」または「書き込み」とも称されることができる。同様に、「読み出しメモリ要求」は、本明細書では「読み出し要求」または「読み出し」とも称されることができる。所与の順序付けマスター３１５が書き込み要求を対応するＣＰＵ３０５またはエンドポイント３６０から受信するときに、所与の順序付けマスター３１５は、対応するデータなしで、標的とされたメモリコントローラ及びメモリデバイスのコヒーレントスレーブに書き込み要求を伝達するように構成される。所与の順序付けマスター３１５は、データなしで、書き込み要求を書き込みコマンドとして標的とされたコヒーレントスレーブに送信している間に、書き込みデータをバッファリングする。
【００１８】
書き込み要求がグローバルに可視であるインジケーションをコヒーレントスレーブから所与の順序付けマスター３１５が受信するときに、所与の順序付けマスター３１５は、書き込み要求についてのタイマーを開始する。一実施形態では、グローバルに可視であるインジケーションは、標的完了メッセージである。タイマーが期限切れになる前に所与の順序付けマスター３１５のキューに入れられる、より古い未処理の要求のすべてが既にグローバルに可視である場合、所与の順序付けマスター３１５は、書き込み要求がコミットする準備ができているインジケーションをコヒーレントスレーブに送信する。一実施形態では、書き込み要求がコミットする準備ができているインジケーションは、ソース完了（またはＳｒｃＤｏｎｅ）メッセージである。
【００１９】
タイマーが期限切れになったときに少なくとも１つのより古い要求がまだグローバルに可視ではない場合、所与の順序付けマスター３１５は、書き込み要求をキャンセルする。次いで、所与の順序付けマスター３１５は、書き込み要求をコヒーレントスレーブに再送信することによって、書き込み要求をリプレイする。タイマーが期限切れになったときに書き込み要求をキャンセルしてリプレイすることによって、より古い要求がまだグローバルに可視ではない場合、これは、システム３００におけるデッドロックを防止するのに役立つ。また、キャンセル及びリプレイメカニズムにより、前の要求がグローバルに順序付けされるようになるのを待機することなく、順序付けマスター３１５Ａ〜Ｎがファブリック３１８上に読み出し及び書き込み要求を発行することが可能である。
【００２０】
ここで図４を参照して、順序付けマスター４００の一実施形態のブロック図を示す。一実施形態では、順序付けマスター３１５Ａ〜Ｎ（図３の）は、順序付けマスター４００のロジックを含む。順序付けマスター４００は、少なくとも制御ユニット４１０、要求キュー４２０、及び書き込みデータバッファ４３０を含む。制御ユニット４１０は、要求キュー４２０、書き込みデータバッファ４３０、メモリ要求を受信するためのローカルＣＰＵ（図示せず）または１つ以上のエンドポイント（複数可）、及びメモリ要求をいずれかの数のコヒーレントスレーブに伝達するための相互接続ファブリック（図示せず）に結合される。制御ユニット４１０は、ソフトウェア、ハードウェア、及び／またはファームウェアのいずれかの適切な組み合わせを使用して実装されてもよい。
【００２１】
一実施形態では、制御ユニット４１０がメモリ要求をローカルＣＰＵまたはエンドポイントから受信するときに、制御ユニット４１０は、要求について要求キュー４２０にエントリを作成する。一実施形態では、要求キュー４２０の各エントリは、タイマーフィールド、要求タイプフィールド、アドレスフィールド、グローバルな可視フィールド、及び任意選択で１つ以上の他のフィールドを含む。制御ユニット４１０は、受信した要求を対応するコヒーレントスレーブに転送するように構成される。書き込み要求について、制御ユニット４１０は、コヒーレントスレーブにデータなしで書き込みコマンドを送信するように構成される。書き込み要求がグローバルに可視であるインジケーションをコヒーレントスレーブから制御ユニット４１０が受信するときに、制御ユニット４１０は、要求キュー４２０中のエントリと関連するタイマーを開始する。一実施形態では、参照クロックを利用して、タイマーを所与のエントリ中でデクリメントする。参照クロックのクロック周波数は、実施形態によって異なることができる。
【００２２】
一実施形態では、要求キュー４２０は、それらが受信された順序で要求を格納する。換言すれば、要求キュー４２０におけるこれらの要求は、最も古いものから最も新しいものへの順に格納され、これらのエントリは、最後のエントリが占有されるときに要求キュー４２０の開始にラップアラウンドする。この実施形態では、第一ポインタは、最も新しいエントリを指すことができ、第二ポインタは、最も古いエントリを指すことができる。別の実施形態では、要求キュー４２０のエントリは、他のエントリと比較した相対的な経過時間を示す経過時間フィールドを含むことができる。他の実施形態では、未処理の要求の相対的な経過時間を追跡するための他の技法が可能であり、企図される。
【００２３】
所与の書き込み要求のエントリについてのタイマーが期限切れになり、グローバルに可視ではない少なくとも１つのより古い要求がある場合、制御ユニット４１０は、書き込み要求をキャンセルするように構成される。一実施形態では、制御ユニット４１０は、キャンセルビットが設定されているソース完了（またはＳｒｃＤｏｎｅ）メッセージをコヒーレントスレーブに送信することによって、書き込み要求をキャンセルする。他の実施形態では、制御ユニット４１０は、他のタイプのメッセージまたは信号を利用して、書き込み要求をキャンセルすることができる。加えて、制御ユニット４１０は、キャンセルされた書き込み要求とアドレス依存関係を有する（すなわち、同じアドレスを標的とする）かどうかを確認するためにチェックする。いくつかの実施形態では、いずれかのより新しい要求がキャンセルされている書き込み要求とアドレス依存関係を有する場合、制御ユニット４１０は、これらのより新しい要求をもキャンセルする。書き込み要求（及び任意選択で、いずれかのより新しい依存要求）をキャンセルした後に、制御ユニット４１０は、書き込み要求（及び任意選択で、いずれかのより新しい依存要求）をコヒーレントスレーブに再送信することによって、書き込み要求（及び任意選択で、いずれかのより新しい依存要求）をリプレイする。
【００２４】
ここで図５を参照して、キャンセル及びリプレイメカニズムを実装するための方法５００の一実施形態を示す。説明のために、この実施形態でのステップ、及び図６のステップを順次示す。しかしながら、記載される方法の様々な実施形態において、記載される要素のうちの１つ以上を同時に実行する、示されるものと異なる順に実行する、または完全に省略することに留意する。また他の追加の要素も要望通りに実行される。本明細書に記載される様々なシステムまたは装置のいずれかは、方法５００を履行するように構成されている。
【００２５】
順序付けマスターは、対応するデータなしで、相互接続ファブリックを介してコヒーレントスレーブに書き込み要求を伝達する（ブロック５０５）。この要求を受信することに応答して、コヒーレントスレーブは、書き込み要求によって標的とされるデータのいかなるキャッシュされたコピーも無効にする無効化要求を処理ノードに送出する（ブロック５１０）。上述されるように、さまざまな実施形態では、プローブフィルタは、データのコピーをキャッシュしているノードまたはデバイスを示すエントリを含む。プローブ応答を処理ノードから受信すること（例えば、キャッシュラインの無効化を確認すること、及び／または任意の変更されたデータを返すことのいずれも）に応答して、コヒーレントスレーブは、書き込み要求がここでグローバルに可視であるというインジケーションを順序付けマスターに送信する（ブロック５１５）。一実施形態では、書き込み要求がここでグローバルに可視であるというインジケーションは、標的完了（またはＴｇｔＤｏｎｅ）メッセージである。
【００２６】
書き込み要求がここでグローバルに可視であるというインジケーションをコヒーレントスレーブから受信することに応答して、順序付けマスターは、書き込み要求についてのタイマーを開始する（ブロック５２０）。タイマーの持続時間は、実施形態によって異なることができる。いくつかの実施形態では、タイマーの持続時間は、プログラム可能である。タイマーが期限切れになる前に書き込み要求よりも古い要求のすべてがグローバルに可視である（条件ブロック５２５、「はい」肢部）場合に、順序付けマスターは、書き込み要求がコミットされることができるインジケーションをデータに加えてコヒーレントスレーブに送信する（ブロック５３０）。一実施形態では、このインジケーションは、書き込み要求のデータも含むソース完了（またはＳｒｃＤｏｎｅ）メッセージである。次いで、コヒーレントスレーブは、書き込み要求をコミットする（ブロック５３５）。本明細書に使用される場合、書き込み要求を「コミットする」ことは、書き込み要求のデータをメモリ中の標的とされた位置に書き込むこととして定義される。一実施形態では、コヒーレントスレーブは、１つ以上の処理ノードからプローブ応答を介して受信したいずれかの変更されたデータと書き込み要求のデータをマージする。ブロック５３５後、方法５００は終了する。
【００２７】
タイマーが期限切れになる前に書き込み要求よりも古い要求のいずれかがグローバルに可視ではない（条件ブロック５２５、「いいえ」肢部）場合に、順序付けマスターは、書き込み要求をキャンセルする（ブロック５４０）。一実施形態では、順序付けマスターは、キャンセルビットが設定されているソース完了（またはＳｒｃＤｏｎｅ）メッセージを送信することによって、書き込み要求をキャンセルする。次いで、順序付けマスターは、書き込み要求をコヒーレントスレーブに再送信することによって、書き込み要求をリプレイする（ブロック５４５）。また、コヒーレントスレーブは、プローブ応答を介して受信した、いずれかの変更されたデータを任意選択で書き戻す（ブロック５５０）。ブロック５５０後、方法５００は終了する。
【００２８】
ここで図６を参照して、キャンセル及びリプレイメカニズムを実装するための方法６００の別の実施形態を示す。少なくとも１つのより古い要求がグローバルに可視になる前に期限切れになるタイマーに起因して書き込み要求をキャンセルする（ブロック６０５）。書き込み要求がキャンセルされることに応答して、順序付けマスターは、いずれかのより新しい要求がキャンセルされた書き込み要求とアドレス依存関係を有するかどうか（条件ブロック６１０）を確認するためにチェックする。いずれかのより新しい要求がキャンセルされている書き込み要求とアドレス依存関係を有する（条件ブロック６１０、「はい」肢部）場合、順序付けマスターは、キャンセルされた書き込み要求にアドレス依存関係を有するより新しい要求（複数可）をもキャンセルする（ブロック６１５）。次に、順序付けマスターは、書き込み要求、及び書き込み要求にアドレス依存関係を有するキャンセルされたより新しい要求（複数可）をリプレイする（ブロック６２０）。ブロック６２０後、方法６００は終了する。いかなるより新しい要求もキャンセルされている書き込み要求とアドレス依存関係を有さない（条件ブロック６１０、「いいえ」肢部）場合、順序付けマスターは、この書き込み要求のみをリプレイする（ブロック６２５）。ブロック６２５後、方法６００は終了する。
【００２９】
ここで図７を参照して、コンピューティングシステム７００についてのデッドロックシナリオの一実施形態のブロック図を示す。一実施形態では、順序付けマスターは、経時的順にそれらの書き込みについてのコミットインジケーションを提供することが要求され、コヒーレントスレーブは、経時的順にアドレスマッチング要求を実行することが要求される。順序付けマスター７１０及び順序付けマスター７１５がバックツーバック書き込みを発行する一例をテーブル７４０が示すことは、この実施形態のコンテキスト内にある。テーブル７４０に示されるように、順序付けマスター７１０は、書き込みＢを後に伴う書き込みＡを発行し、順序付けマスター７１５は、書き込みＡを後に伴う書き込みＢを発行する。この考察の目的のために、アドレスＡ（Ａへの書き込みによって標的とされる）がコヒーレントスレーブ７２５に属し、アドレスＢ（Ｂへの書き込みによって標的とされる）がコヒーレントスレーブ７３０に属すると仮定する。また、この考察の目的のために、Ａ及びＢへの書き込みがファブリック７２０で交差すると仮定する。本明細書に使用される場合、「交差する」１組の書き込みについて、この１組のうちのより新しい書き込みがこの１組のうちのより古い書き込みよりも早くコヒーレントスレーブに達することを意味する。例えば、一実施形態では、順序付けマスター７１０がコヒーレントスレーブ７３０により近く、順序付けマスター７１５がコヒーレントスレーブ７２５により近いことから、書き込みは、ファブリック７２０で交差することができる。
【００３０】
テーブル７４５に示されるタイミングに従い書き込み要求をコヒーレントスレーブ７２５及びコヒーレントスレーブ７３０が受信する場合、この結果は、システム７００に対してデッドロックをもたらす。テーブル７２５に示されるように、コヒーレントスレーブ７２５は、順序付けマスター７１０によるＡへの書き込みを後に伴う、順序付けマスター７１５によるＡへの書き込みを受信する。また、コヒーレントスレーブ７３０は、順序付けマスター７１５によるＢへの書き込みを後に伴う、順序付けマスター７１０によるＢへの書き込みを受信する。その結果、これらの要求のタイミングに基づき、コヒーレントスレーブ７２５は、順序付けマスター７１５によるＡへの書き込みについて標的完了メッセージを発行するが、Ａへの書き込みは、順序付けマスター７１５中でより新しい動作である。順序付けマスター７１５は、コヒーレントスレーブ７３０でのアドレス依存関係に起因してブロックされるそのＢへの書き込みについて標的完了メッセージを受信するまで、コミットインジケーションを与えることができない。また、コヒーレントスレーブ７３０は、順序付けマスター７１０によるＢへの書き込みについて標的完了メッセージを発行するが、このＢへの書き込みは、順序付けマスター７１０中でより新しい動作である。順序付けマスター７１０は、コヒーレントスレーブ７２５でのアドレス依存関係に起因してブロックされるそのＡへの書き込みについて標的完了メッセージを受信するまで、コミットインジケーションを与えることができない。より新しいトランザクションを順序付けマスター７１０及び７１５の両方でキャンセルしてリプレイすることにより、このシナリオによって起こるデッドロックを解除する。
【００３１】
さまざまな実施形態において、ソフトウェアアプリケーションのプログラムインストラクションを使用して、本明細書に記載される方法及び／またはメカニズムを実装する。例えば、汎用または特殊目的プロセッサによって実行可能なプログラム命令が企図される。さまざまな実施形態において、そのようなプログラム命令は、高水準のプログラミング言語によって表現されることができる。他の実施形態では、プログラム命令は、高レベルプログラミング言語から、バイナリ、中間、または他の形式にコンパイルされてもよい。代替に、プログラム命令は、ハードウェアの動作または設計を記述するように書き込まれることができる。このようなプログラム命令をＣなどの高水準のプログラミング言語によって表現することができる。代替に、Ｖｅｒｉｌｏｇなどのハードウェア設計言語（ＨＤＬ）を使用することができる。さまざまな実施形態において、プログラム命令は、さまざまな非一時的なコンピュータ可読記憶媒体のいずれかに格納される。記憶媒体は、プログラム実行のためにプログラム命令をコンピューティングシステムに提供するために使用される間にコンピューティングシステムによってアクセス可能である。一般的に言うと、そのようなコンピューティングシステムは、プログラム命令を実行するように構成された少なくとも１つ以上のメモリ及び１つ以上のプロセッサを含む。
【００３２】
上記説明された実施形態が、実装態様の非限定的な例にすぎないことが強調されるべきである。上記の開示を十分に理解したとき、多くの変形形態及び修正形態が、当業者に明らかになるであろう。以下の特許請求の範囲は、全てのそのような変形及び修正を包含すると解釈されることが意図される。
【図１】
2021509207.tif 000003
【図２】
2021509207.tif 000004
【図３】
2021509207.tif 000005
【図４】
2021509207.tif 000006
【図５】
2021509207.tif 000007
【図６】
2021509207.tif 000008
【図７】
2021509207.tif 000009
【国際調査報告】
2021509207.tif 000010
2021509207.tif 000011
2021509207.tif 000012