(57)【要約】  サービスプロバイダのコンピュータシステムは、ユーザによって発行されたスレッドを実行する処理ユニットと、処理ユニットの外部に配置されたランダムアクセスメモリ（ＲＡＭ）キャッシュであって、処理ユニットによってアクセスされたか又はアクセスされるデータを格納するために、処理ユニットに動作可能に結合されたランダムアクセスメモリ（ＲＡＭ）キャッシュと、を含む。処理ユニットは、スレッドが実行されている間のアクセス要求の受信に応じて、スレッドが、サービスプロバイダとユーザとの間に確立されたサービスレベル合意（ＳＬＡ）レベルに従って、ＲＡＭキャッシュにアクセスすることを許可されるかどうかを判定するように、且つスレッドが、ＲＡＭキャッシュ可能である場合に、ＲＡＭキャッシュにアクセスするように構成された制御回路を含む。
2020531950.tif 000002
【特許請求の範囲】
【請求項１】
サービスプロバイダのコンピュータシステムであって、
ユーザによって発行されたスレッドを実行する処理ユニットと、
前記処理ユニットの外部に配置されたランダムアクセスメモリ（ＲＡＭ）キャッシュであって、前記処理ユニットによってアクセスされたか又はアクセスされるデータを格納するために、前記処理ユニットに動作可能に結合されたランダムアクセスメモリ（ＲＡＭ）キャッシュと、
を含み、
前記処理ユニットが、
前記スレッドが実行されている間のアクセス要求の受信に応じて：
前記スレッドが、前記サービスプロバイダと前記ユーザとの間に確立されたサービスレベル合意（ＳＬＡ）レベルに従って、前記ＲＡＭキャッシュにアクセスすることを許可されるかどうかを判定するように、且つ
前記スレッドが、ＲＡＭキャッシュ可能である場合に、前記ＲＡＭキャッシュにアクセスするように構成された制御回路
を含む、コンピュータシステム。
【請求項２】
前記制御回路が、
前記アクセス要求が、前記ＲＡＭキャッシュにアクセスすることを許可される仮想メモリ領域と関係するかどうかを判定するように、且つ
前記アクセス要求が、前記ＲＡＭキャッシュにアクセスすることを許可される仮想メモリ領域と関係する場合に、前記ＲＡＭキャッシュにアクセスするように更に構成される、請求項１に記載のコンピュータシステム。
【請求項３】
前記処理ユニットが、前記スレッドに関連するキャッシング情報を格納するように構成されたレジスタを更に含み、
前記キャッシング情報が、
前記スレッドが、前記ＲＡＭキャッシュにアクセスすることを許可されるかどうか、
前記スレッドの仮想メモリ領域が、前記ＲＡＭキャッシュにアクセスすることを許可されるかどうか、及び
サービス品質（ＱｏＳ）が、前記スレッドに提供されるかどうかを含む、請求項１又は２に記載のコンピュータシステム。
【請求項４】
前記処理ユニットに動作可能に結合されたシステムカーネルであって、前記ユーザによって発行された前記スレッドの受信に応じて：
前記サービスプロバイダと前記ユーザとの間に確立された前記ＳＬＡレベルを検索し、
前記ＳＬＡレベルに基づいてキャッシング情報を判定し、
前記キャッシング情報を記憶ユニットに格納するように構成されたシステムカーネルを更に含む、請求項１〜３のいずれか一項に記載のコンピュータシステム。
【請求項５】
前記システムカーネルによって判定された前記キャッシング情報が、
前記スレッドが、前記ＲＡＭキャッシュにアクセスすることを許可されるかどうか、
前記スレッドの仮想メモリ領域が、前記ＲＡＭキャッシュにアクセスすることを許可されるかどうか、及び
サービス品質（ＱｏＳ）が、前記スレッドが実行されている間に提供されるかどうかを含む、請求項４に記載のコンピュータシステム。
【請求項６】
前記システムカーネルが、
前記サービスプロバイダと前記ユーザとの間に確立された前記ＳＬＡレベルに基づいて、前記ＲＡＭキャッシュにアクセスすることを許可されるメモリ領域の数を判定するように、
前記数に基づいて、ＲＡＭキャッシュ可能である前記スレッドによって消費される少なくとも１つのメモリ領域を複数のメモリ領域から選択するように、且つ
選択の結果を記憶ユニットに格納するように構成される、請求項４に記載のコンピュータシステム。
【請求項７】
前記ＲＡＭキャッシュが、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）キャッシュである、請求項１〜６のいずれか一項に記載のコンピュータシステム。
【請求項８】
前記処理ユニットが、前記ＲＡＭキャッシュに格納された前記データに関連する１つ又は複数のアドレスタグを格納するように構成されたＲＡＭキャッシュタグアレイを含む、請求項１〜７のいずれか一項に記載のコンピュータシステム。
【請求項９】
前記制御回路が、前記スレッドがＲＡＭキャッシュ可能であるかどうかを判定することと同時に、
前記アクセス要求が、ＲＡＭキャッシュヒットか又はＲＡＭキャッシュミスかどうかを判定するために、前記ＲＡＭキャッシュタグアレイをチェックするように、且つ
前記アクセス要求が、ＬＬＣヒットか又はＬＬＣミスかどうかを判定するために、前記処理ユニットのラストレベルキャッシュ（ＬＬＣ）をチェックするように構成される、請求項８に記載のコンピュータシステム。
【請求項１０】
前記処理ユニットが、複数の処理コアを含む、請求項１〜９のいずれか一項に記載のコンピュータシステム。
【請求項１１】
サービスプロバイダのコンピュータシステムにおけるシステムカーネルを操作するための方法であって、前記コンピュータシステムが、処理ユニットと、前記処理ユニットの外部のランダムアクセスメモリ（ＲＡＭ）キャッシュであって、前記処理ユニットに動作可能に結合されたランダムアクセスメモリ（ＲＡＭ）キャッシュと、を含み、前記方法が、
ユーザによって発行されたスレッドを受信することと、
前記サービスプロバイダと前記ユーザとの間に確立されたサービスレベル合意（ＳＬＡ）レベルを検索することと、
前記ＳＬＡレベルに基づいて、前記スレッドが、前記ＲＡＭキャッシュを評価することが許可されるかどうかを判定することと、を含む方法。
【請求項１２】
前記ＳＬＡレベルに基づいて、前記ＲＡＭキャッシュにアクセスすることが許可されるメモリ領域の数を判定することと、
前記数に基づいて、ＲＡＭキャッシュ可能である前記スレッドによって消費される少なくとも１つのメモリ領域を複数のメモリ領域から選択することと、
を更に含む、請求項１１に記載の方法。
【請求項１３】
前記サービスプロバイダと前記ユーザとの間に確立された前記ＳＬＡレベルに基づいて、前記スレッドが実行されている間にサービス品質（ＱｏＳ）が提供されるかどうかを判定することを更に含む、請求項１１又は１２に記載の方法。
【請求項１４】
前記ＲＡＭキャッシュが、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）キャッシュである、請求項１１〜１３のいずれか一項に記載の方法。
【請求項１５】
サービスプロバイダのコンピュータシステムにおける処理ユニットを操作するための方法であって、前記コンピュータシステムが、前記処理ユニットの外部のランダムアクセスメモリ（ＲＡＭ）キャッシュであって、前記処理ユニットに動作可能に結合されたランダムアクセスメモリ（ＲＡＭ）キャッシュを含み、前記方法が、
ユーザによって発行されたスレッドが実行されている間に、アクセス要求を受信することと、
前記スレッドが、前記サービスプロバイダと前記ユーザとの間に確立されたサービスレベル合意（ＳＬＡ）レベルに従って、前記ＲＡＭキャッシュにアクセスすることを許可されるかどうかを判定することと、
前記スレッドが、ＲＡＭキャッシュ可能である場合に、前記ＲＡＭキャッシュにアクセスすることと、
を含む方法。
【請求項１６】
前記アクセス要求が、前記ＲＡＭキャッシュにアクセスすることを許可される仮想メモリ領域と関係するかどうかを判定することと、
前記アクセス要求が、前記ＲＡＭキャッシュにアクセスすることを許可される仮想メモリ領域と関係する場合に、前記ＲＡＭキャッシュにアクセスすることと、
を更に含む、請求項１５に記載の方法。
【請求項１７】
前記スレッドが、ＲＡＭキャッシュ可能であるかどうかを判定することと同時に：
前記アクセス要求が、ＲＡＭキャッシュヒットか又はＲＡＭキャッシュミスかどうかを判定するために、前記処理ユニットに含まれるＲＡＭキャッシュタグアレイをチェックすることと、
前記アクセス要求が、ＬＬＣヒットか又はＬＬＣミスかどうかを判定するために、前記処理ユニットのラストレベルキャッシュ（ＬＬＣ）をチェックすることと、
を更に含む、請求項１５又は１６に記載の方法。
【請求項１８】
前記アクセス要求が、ＬＬＣミス及びＲＡＭキャッシュヒットである場合に、前記ＲＡＭキャッシュにアクセスすることを更に含む、請求項１７に記載の方法。
【請求項１９】
前記アクセス要求が、ＬＬＣミス及びＲＡＭキャッシュミスである場合に、前記処理ユニットに結合されたメインメモリにアクセスすることを更に含む、請求項１７に記載の方法。
【請求項２０】
前記ＲＡＭキャッシュが、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）キャッシュである、請求項１５〜１９のいずれか一項に記載の方法。
【請求項２１】
処理ユニットと、
前記処理ユニットの外部に配置された、且つ前記処理ユニットに動作可能に結合されたランダムアクセスメモリ（ＲＡＭ）キャッシュであって、前記処理ユニットによってアクセスされたか又はアクセスされるデータを格納するキャッシュデータユニットを含むランダムアクセスメモリ（ＲＡＭ）キャッシュと、
を含むコンピューティング装置であって、
前記処理ユニットが、前記ＲＡＭキャッシュにおける前記キャッシュデータユニットに格納された前記データに関連するアドレスタグを格納するキャッシュタグユニットを含むコンピューティング装置。
【請求項２２】
処理ユニットによってアクセスされたか又はアクセスされるデータに関連するアドレスタグを格納するキャッシュタグユニットを含む処理ユニットであって、
前記処理ユニットによってアクセスされたか又はアクセスされる前記データが、前記処理ユニットの外部に配置されたランダムアクセスメモリ（ＲＡＭ）キャッシュに格納される、処理ユニット。
【請求項２３】
サービスプロバイダのコンピュータシステムにおける処理ユニットを操作するための方法であって、前記コンピュータシステムが、前記処理ユニットの外部のランダムアクセスメモリ（ＲＡＭ）キャッシュであって、前記処理ユニットに動作可能に結合されたランダムアクセスメモリ（ＲＡＭ）キャッシュを含み、前記方法が、
ユーザによって発行されたスレッドが実行されている間に、アクセス要求を受信することと、
前記アクセス要求が、前記処理ユニットに含まれるキャッシュタグユニットをチェックすることによって、ＲＡＭキャッシュヒットかどうかを判定することと、
前記アクセス要求がＲＡＭキャッシュヒットである場合に、データにアクセスするために、前記ＲＡＭキャッシュにアクセスすることと、
を含む方法。
【発明の詳細な説明】
【技術分野】
【０００１】
技術分野
[0001]  本開示は、一般にコンピュータアーキテクチャの技術分野に関し、特にサービスレベル合意に基づいたキャッシング用の方法及びシステムに関する。
【背景技術】
【０００２】
背景
[0002]  今日の商用プロセッサ（例えば中央処理装置（ＣＰＵ））は、高スレッドレベル並列性とともに高コンピュータ密度を必要とする作業量をサポートするために、単一ダイ上にますます大きなコアを集積している。しかしながら、ＣＰＵは、メモリ帯域幅の壁に直面している。成長し続けているＣＰＵコアから生み出されるメモリトラフィックをサポートするために必要とされるメモリ帯域幅の量は、ＣＰＵコアが成長しているペースに遅れずについていくことができない。メモリトラフィックを低減する１つの方法は、大きな埋め込みキャッシュをＣＰＵに集積することである。大きなＤＲＡＭキャッシュを組み込むことは、一連の実際的な設計問題を引き起こし、従って、大きな埋め込みキャッシュを管理するためにデバイスを高価にする。
【発明の概要】
【課題を解決するための手段】
【０００３】
概要
[0003]  本開示の実施形態は、サービスプロバイダのコンピュータシステムを提供する。コンピュータシステムは、ユーザによって発行されたスレッドを実行する処理ユニットと、処理ユニットの外部に配置されたランダムアクセスメモリ（ＲＡＭ）キャッシュであって、処理ユニットによってアクセスされたか又はアクセスされるデータを格納するために、処理ユニットに動作可能に結合されたランダムアクセスメモリ（ＲＡＭ）キャッシュと、を含む。処理ユニットは、スレッドが実行されている間のアクセス要求の受信に応じて、スレッドが、サービスプロバイダとユーザとの間に確立されたサービスレベル合意（ＳＬＡ）レベルに従って、ＲＡＭキャッシュにアクセスすることを許可されるかどうかを判定するように、且つスレッドが、ＲＡＭキャッシュ可能である場合に、ＲＡＭキャッシュにアクセスするように構成された制御回路を含む。
【０００４】
[0004]  本開示の実施形態はまた、サービスプロバイダのコンピュータシステムにおけるシステムカーネルを操作するための方法を提供する。コンピュータシステムは、処理ユニットと、処理ユニットの外部のランダムアクセスメモリ（ＲＡＭ）キャッシュであって、処理ユニットに動作可能に結合されたランダムアクセスメモリ（ＲＡＭ）キャッシュと、を含む。方法は、ユーザによって発行されたスレッドを受信することと、サービスプロバイダとユーザとの間に確立されたサービスレベル合意（ＳＬＡ）レベルを検索することと、ＳＬＡレベルに基づいて、スレッドが、ＲＡＭキャッシュを評価することを許可されるかどうかを判定することと、を含む。
【０００５】
[0005]  本開示の実施形態は、サービスプロバイダのコンピュータシステムにおける処理ユニットを操作するための方法を更に提供し、コンピュータシステムは、処理ユニットの外部のランダムアクセスメモリ（ＲＡＭ）キャッシュであって、処理ユニットに動作可能に結合されたランダムアクセスメモリ（ＲＡＭ）キャッシュを含む。方法は、ユーザによって発行されたスレッドが実行されている間に、アクセス要求を受信することと、スレッドが、サービスプロバイダとユーザとの間に確立されたサービスレベル合意（ＳＬＡ）レベルに従って、ＲＡＭキャッシュにアクセスすることを許可されるかどうかを判定することと、スレッドが、ＲＡＭキャッシュ可能である場合に、ＲＡＭキャッシュにアクセスすることと、を含む。
【図面の簡単な説明】
【０００６】
図面の簡単な説明
【図１ａ】[0006]ＣＰＵチップの例示的な構成を概略的に示す。
【図１ｂ】[0006]ＣＰＵチップの例示的な構成を概略的に示す。
【図２】[0007]例示的な処理システムを概略的に示す。
【図３】[0008]例示的な処理システムにおけるメモリアクセス用の例示的なプロセスの流れ図である。
【図４】[0009]例示的な処理システムを概略的に示す。
【図５】[0010]処理システムにおけるメモリアクセス用の例示的なプロセスの流れ図である。
【図６】[0011]開示される実施形態と一致する処理システムを概略的に示す。
【図７】[0012]サービスプロバイダによってユーザに提供されるＳＬＡの幾つかのレベルを定義する例示的な表を示す。
【図８】[0013]開示される実施形態と一致する例示的な処理システムにおけるスレッド割り当て用の例示的なプロセスの流れ図である。
【図９】[0014]開示される実施形態と一致する例示的な処理システムにおけるスレッド実行用の例示的なプロセスの流れ図である。
【発明を実施するための形態】
【０００７】
実施形態の説明
[0015]  ここで、例示的な実施形態が詳細に参照され、それらの実施形態の例が、添付の図面に示されている。以下の説明は、添付の図面に言及するが、相異なる図面における同じ番号は、別段の表明がない限り、同じ又は同様の要素を表す。例示的な実施形態の以下の説明で明らかにされる実装形態は、本発明と一致する全ての実装形態を表すわけではない。代わりに、それらは、添付の特許請求の範囲で列挙されるような本発明に関係する態様と一致する機器及び方法の単なる例である。
【０００８】
[0016]  今日の商用プロセッサ（例えば中央処理装置（ＣＰＵ））は、高スレッドレベル並列性とともに高コンピュータ密度を要求する作業量をサポートするために、単一ダイ上にますます大きなコアを集積している。しかしながら、サーバにおいて提供されるメモリ帯域幅の量は、はるかに低いペースで成長している、サーバにおけるＣＰＵチップ上のピン数によって常に制限されている。全てのコア又はスレッドのスムーズな動作を保つための十分なメモリ帯域幅を提供することは、これらのマルチコアアーキテクチャにおいて依然としてかなりの難問である。
【０００９】
[0017]  メモリ帯域幅問題に取り組む１つの方法は、大きな埋め込みランダムアクセスメモリ（ＲＡＭ）キャッシュをＣＰＵチップ上に集積することである。ＲＡＭキャッシュは、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）キャッシュ、磁気抵抗ランダムアクセスメモリ（ＭＲＡＭ）キャッシュ、抵抗変化型メモリ（ＲｅＲＡＭ）キャッシュ、相変化ランダムアクセスメモリ（ＰＣＲＡＭ）キャッシュ、及び強誘電体ランダムアクセスメモリ（ＦｅＲＡＭ）キャッシュの１つとすることができる。以下の説明において、ＤＲＡＭキャッシュが、例として用いられる。従来のＣＰＵキャッシュが構築されるスタティックランダムアクセスメモリ（ＳＲＡＭ）及びレジスタファイル（ＲＦ）と比較して、ＤＲＡＭは、はるかに高い密度を有し、従って大きな記憶容量を備えたキャッシュを提供することができる。ＤＲＡＭキャッシュは、それ自体のダイ上に存在し、且つＣＰＵチップを形成するためにＣＰＵダイに接続することができる。
【００１０】
[0018]  本明細書で説明される実施形態は、例えばＤＲＡＭキャッシュに関連するハードウェア設計の複雑さを軽減するためのアプローチを開示する。ＤＲＡＭキャッシュアクセスは、サービスレベル合意（ＳＬＡ）によって定義されたアプリケーションにのみ与えられ、それらのアプリケーションがＤＲＡＭキャッシュの利益を享受できるようにするが、一方で、持続可能なレベルにおいてやはりメモリ帯域幅の使用を制限する。
【００１１】
[0019]  図１（ａ）は、３次元（３Ｄ）スタッキング構成を有する例示的なＣＰＵチップ１１０を概略的に示す。ＣＰＵチップ１１０において、ＣＰＵダイ１１２は、ＤＲＡＭダイ１１４上に垂直に積み重ねられる。ＣＰＵダイ１１２及びＤＲＡＭダイ１１４は、複数のシリコン貫通ビア１１６を介して互いに結合される。ＣＰＵダイ１１２及びＤＲＡＭダイ１１４のスタックは、外部装置（図示せず）に結合される複数のピン１２０を有する基板１１８上に配置される。
【００１２】
[0020]  図１（ｂ）は、マルチチップパッケージング（ＭＣＰ）構造を有する例示的なＣＰＵチップ１３０を概略的に示す。ＣＰＵチップ１３０において、ＣＰＵダイ１３２及びＤＲＡＭダイ１３４は、基板１３８上に並んで配置される。ＣＰＵダイ１３２及びＤＲＡＭダイ１３４は、複数のＭＣＰリンク１３６を介して互いに結合される。基板１３８は、外部装置（図示せず）に結合される複数のピン１４０を有する。
【００１３】
[0021]  ＣＰＵチップ上にＤＲＡＭキャッシュを集積することは、ＣＰＵ設計に影響する可能性がある。ＣＰＵチップ上にＤＲＡＭキャッシュを集積することが、ＣＰＵ設計にどのように影響し得るかを理解するために、ＣＰＵチップによってメモリにアクセスするための従来の方法が、第１に説明される。
【００１４】
[0022]  図２は、例示的な処理システム２００を概略的に示す。処理システム２００は、互いに結合された処理ユニット２１０及びＤＲＡＭキャッシュ２５０を含む。処理ユニット２１０及びＤＲＡＭキャッシュ２５０は、ＣＰＵチップ（例えばＣＰＵチップ１１０又は１３０）に含むことができ、ＣＰＵチップにおいて、処理ユニット２１０は、ＣＰＵダイ（例えばＣＰＵダイ１１２又は１３２）に配置され、ＤＲＡＭキャッシュ２５０は、ＣＰＵダイから物理的に分離されたＤＲＡＭダイ（例えばＤＲＡＭダイ１１４又は１３４）に配置される。
【００１５】
[0023]  処理ユニット２１０は、互いに結合された処理コア２２０及びキャッシュ２３０と、処理ユニット２１０の動作を制御する制御回路２４０と、を含む。処理ユニット２１０はまた、処理コア２２０によってアクセスされるデータを格納できるメインメモリ２８０に結合される。キャッシュ２３０及びＤＲＡＭキャッシュ２５０は、メインメモリ２８０に格納されたデータのサブセットを格納する中間バッファとして用いることができる。データのサブセットは、典型的には、処理コア２２０によって最も最近アクセスされたデータであり、且つデータ読み出し動作においてメインメモリ２８０から取得されたデータ、又はデータ書き込み動作においてメインメモリ２８０に格納されるデータを含むことができる。時間的及び空間的位置ゆえに、かかるデータは、処理コア２２０によって再びアクセスされる可能性が高い。
【００１６】
[0024]  キャッシュ２３０は、タグアレイ２３２及びデータアレイ２３４を含む。データアレイ２３４は、処理コア２２０によってアクセスされた（又はアクセスされると思われる）メインメモリ２８０から取得されたデータをそれぞれ格納する複数のデータエントリ２３４ａを含む。タグアレイ２３２は、データアレイ２３４における複数のデータエントリ２３４ａにそれぞれ対応する複数のタグエントリ２３２ａを含む。各タグエントリ２３２ａは、対応するデータエントリ２３４ａにおけるデータのアドレスタグ及び状態情報を格納する。
【００１７】
[0025]  同様に、ＤＲＡＭキャッシュ２５０は、ＤＲＡＭキャッシュタグアレイ２５２及びＤＲＡＭキャッシュデータアレイ２５４を含む。ＤＲＡＭキャッシュデータアレイ２５４は、処理コア２２０によってアクセスされるデータをそれぞれ格納する複数のデータエントリ２５４ａを含む。ＤＲＡＭキャッシュタグアレイ２５２は、ＤＲＡＭキャッシュデータアレイ２５４における複数のデータエントリ２５４ａにそれぞれ対応する複数のタグエントリ２３２ａを含む。ＤＲＡＭキャッシュタグアレイ２５２における各タグエントリ２５２ａは、対応するデータエントリ２３４ａに格納されたデータのアドレスタグ及び状態情報を格納する。
【００１８】
[0026]  図３は、例示的な処理システム（例えば処理システム２００）におけるメモリアクセス用の例示的なプロセス３００の流れ図である。プロセス３００は、ハードウェア（例えば回路、専用論理、プログラマブル論理、マイクロコード等）、ソフトウェア（例えば機能ユニットによって実行される操作）、ファームウェア、又はそれらの組み合わせを含む処理論理によって実行することができる。幾つかの実施形態において、プロセス３００は、処理システムの制御回路（例えば制御回路２４０）によって実行される。代替として、プロセス３００におけるステップの幾つか又は全ては、処理システムにおける他のコンポーネントによって実行されてもよい。
【００１９】
[0027]  ステップ３１０において、制御回路は、処理コア２２０によって発行されたアクセス要求を受信する。アクセス要求は、アドレスタグに関連するメモリ位置からデータを読み出すための読み出し要求、又はアドレスタグに関連するメモリ位置にデータを書き込むための書き込み要求とすることができる。ステップ３１２において、制御回路は、アクセス要求に含まれるアドレスタグをキャッシュタグアレイに格納されたアドレスタグと比較することによって、アドレスタグ及び状態情報を格納するキャッシュ（例えばキャッシュ２３０）におけるキャッシュタグアレイ（例えばタグアレイ２３２）をチェックする。ステップ３１４において、制御回路は、アクセス要求が、キャッシュヒットか又はキャッシュミスかどうかを判定する。キャッシュヒットは、キャッシュが、要求されたデータの有効なコピーを格納している場合に発生し、キャッシュミスは、キャッシュが、要求されたデータの有効なコピーを格納していない場合に発生する。要求が、キャッシュヒットである場合に（ステップ３１４：Yes）、ステップ３１６において、制御回路は、キャッシュデータアレイ（例えばデータアレイ２３４）にアクセスする。アクセス要求が、読み出し要求である場合に、制御回路は、要求されたデータをキャッシュデータアレイから読み出す。アクセス要求が、書き込み要求である場合に、制御回路は、キャッシュデータアレイにデータを書き込む。そうではなく、アクセス要求が、キャッシュミスである場合に（ステップ３１４：No）、ステップ３１８において、制御回路は、アクセス要求に含まれたアドレスタグをＤＲＡＭキャッシュタグアレイに格納されたアドレスタグと比較することによって、ＤＲＡＭキャッシュタグアレイ（例えばＤＲＡＭキャッシュタグアレイ２５２）をチェックする。ステップ３２０において、制御回路は、アクセス要求が、ＤＲＡＭキャッシュヒットか又はＤＲＡＭキャッシュミスかどうかを判定する。ＤＲＡＭキャッシュヒットは、ＤＲＡＭキャッシュが、要求されたデータの有効なコピーを格納している場合に発生し、ＤＲＡＭキャッシュミスは、ＤＲＡＭキャッシュが、要求されたデータの有効なコピーを格納していない場合に発生する。ＤＲＡＭキャッシュヒットが発生した場合に（ステップ３２０：Yes）、ステップ３２２において、制御回路は、ＤＲＡＭキャッシュデータアレイからデータを読み出すか、又はＤＲＡＭキャッシュデータアレイにデータを書き込むために、ＤＲＡＭキャッシュデータアレイ（例えばＤＲＡＭキャッシュデータアレイ２５４）にアクセスする。そうではなく、ＤＲＡＭキャッシュミスが発生した場合に（ステップ３２０：No）、ステップ３２４において、制御回路は、メインメモリからデータを読み出すか、又はメインメモリにデータを書き込むために、メインメモリ（例えばメインメモリ２８０）にアクセスする。ステップ３１６、３２２、又は３２４を完了した後で、制御回路は、プロセス３００を終了する。
【００２０】
[0028]  ３Ｄスタッキング又はＭＣＰ方式で集積されたＤＲＡＭキャッシュを用いると、ＣＰＵが、ＤＲＡＭキャッシュダイ上のＤＲＡＭキャッシュにアクセスする待ち時間は、わずかではない。これは、シリコン貫通ビア（例えばシリコン貫通ビア１１６）又はＭＣＰリンク（例えばＭＣＰリンク１３６）を通るダイ間通信が、含まれるからである。これらの待ち時間は、ＣＰＵダイ上に配置されたラストレベルキャッシュ（ＬＬＣ）にアクセスするより２倍又はそれより更に高くなる可能性がある。ＤＲＡＭキャッシュミスが発生し、ＤＲＡＭキャッシュが、要求されたデータを供給できない場合に、ＣＰＵは、要求されたデータをＣＰＵチップの外部のメインメモリから引き出す必要があり、従って全データ経路は、著しく長くされ、性能を損なう。
【００２１】
[0029]  上記で説明された問題を軽減するために、ＤＲＡＭキャッシュタグアレイは、ＤＲＡＭキャッシュダイ上のＤＲＡＭキャッシュデータアレイとは別にＣＰＵダイ上に配置される。図４は、かかる構成を有する例示的な処理システム４００を概略的に示す。図４に示されているように、処理システム４００は、処理ユニット４１０と、処理ユニット４１０に結合されたＤＲＡＭキャッシュ４５０と、処理ユニット４１０に結合されたメインメモリ４８０と、を含む。処理ユニット４１０及びＤＲＡＭキャッシュ４５０は、ＣＰＵチップ（例えばＣＰＵチップ１１０又は１３０）に含むことができ、その場合に、処理ユニット４１０は、ＣＰＵダイ（例えば、ＣＰＵダイ１１２又は１３２）に配置され、ＤＲＡＭキャッシュ４５０は、ＣＰＵダイから物理的に分離されたＤＲＡＭダイ（例えば、ＤＲＡＭダイ１１４又は１３４）に配置される。処理ユニット４１０は、複数の処理コア４２２と、複数の処理コア４２２にそれぞれ対応してそれらに結合され、且つネットワークオンチップ（ＮｏＣ）４２６に結合された複数のレベル２キャッシュ（Ｌ２Ｃ）と、を含む。加えて、処理ユニット４１０は、ＮｏＣ４２６に結合されたＤＲＡＭキャッシュタグアレイ４２８及びラストレベルキャッシュ（ＬＬＣ）４３０と、制御回路４４０と、を含む。メインメモリ４８０は、処理ユニット４１０によってアクセスされるデータを格納することができる。Ｌ２Ｃ  ４２４、ＬＬＣ  ４３０、及びＤＲＡＭキャッシュ４５０は、メインメモリ４８０に格納されたデータのサブセットを格納する中間バッファとして用いることができる。Ｌ２Ｃ  ４２４のそれぞれ１つは、処理コア４２２の対応する１つによってアクセスされるデータのサブセットを格納する。ＬＬＣ  ４３０は、処理コア４２２のいずれか１つによってアクセスされるデータのサブセットを格納する。
【００２２】
[0030]  ＤＲＡＭキャッシュ４５０は、処理コア４２２によってアクセスされるデータをそれぞれ格納する複数のデータエントリを含むＤＲＡＭキャッシュデータアレイ４５２を含む。処理ユニット４１０に含まれるＤＲＡＭキャッシュタグアレイ４２８は、ＤＲＡＭキャッシュデータアレイ４５２における複数のデータエントリにそれぞれ対応する複数のタグエントリを含む。ＤＲＡＭキャッシュタグアレイ４２８における各タグエントリは、ＤＲＡＭキャッシュデータアレイ４５２における対応するデータエントリに格納されたデータのアドレスタグ及び状態情報を格納する。図４には示されていないが、Ｌ２Ｃ  ４２４及びＬＬＣ  ４３０のそれぞれ１つは、データを格納するデータアレイと、データアレイに格納されたデータのアドレスタグ及び状態情報を格納するタグアレイと、を含むことができる。
【００２３】
[0031]  図５は、処理システム（例えば処理システム４００）におけるメモリアクセス用の例示的なプロセス５００の流れ図である。プロセス５００は、ハードウェア（例えば回路、専用論理、プログラマブル論理、マイクロコード等）、ソフトウェア（例えば機能ユニットによって実行される操作）、ファームウェア、又はそれらの組み合わせを含む処理論理によって実行することができる。幾つかの実施形態において、プロセス５００は、処理システムの制御回路（例えば制御回路４４０）によって実行される。代替として、プロセス５００のステップの幾つか又は全ては、例示的な処理システムの他のコンポーネントによって実行されてもよい。
【００２４】
[0032]  ステップ５１０において、制御回路は、処理コア４２２の１つからアクセス要求を受信する。アクセス要求は、アドレスタグに関連するメモリ位置からデータを読み出すための読み出し要求、又はアドレスタグに関連するメモリ位置にデータを書き込むための書き込み要求とすることができる。ステップ５１２において、制御回路は、アクセス要求が、Ｌ２Ｃキャッシュミスであると判定する。例えば、制御回路は、Ｌ２Ｃ（例えばＬ２Ｃ  ４２４）のそれぞれ１つにおけるタグアレイをチェックし、且つＬ２Ｃのどれも、要求されたデータの有効なコピーを格納していないと判定する。ステップ５１４において、制御回路は、アクセス要求に含まれたアドレスタグをＤＲＡＭキャッシュタグアレイに格納されたアドレスタグと比較することによって、ＤＲＡＭキャッシュタグアレイ（例えばＤＲＡＭキャッシュタグアレイ４２８）をチェックする。同時に、ステップ５１６において、制御回路は、アクセス要求に含まれたアドレスタグをＬＬＣタグアレイに格納されたアドレスタグと比較することによって、ＬＬＣ（例えばＬＬＣ  ４３０）におけるＬＬＣタグアレイをチェックする。換言すれば、ＤＲＡＭキャッシュタグアレイは、ＬＬＣタグアレイのチェック（ステップ５１６）と同時にチェックされる（ステップ５１４）。
【００２５】
[0033]  ステップ５１８において、制御回路は、アクセス要求が、ＬＬＣヒットか又はＬＬＣミスかどうかを判定する。ＬＬＣヒットは、ＬＬＣが、要求されたデータの有効なコピーを格納している場合に発生し、ＬＬＣミスは、ＬＬＣが、要求されたデータの有効なコピーを格納していない場合に発生する。アクセス要求が、ＬＬＣヒットである場合に（ステップ５１８：Yes）、ステップ５２６において、制御回路は、ＬＬＣからデータを読み出すか又はＬＬＣにデータを書き込むためにＬＬＣにアクセスする。
【００２６】
[0034]  アクセス要求が、ＬＬＣミスである場合に（ステップ５１８：No）、ステップ５２０において、制御回路は、アクセス要求が、ＤＲＡＭキャッシュヒットか又はＤＲＡＭキャッシュミスかどうかを判定する。ＤＲＡＭキャッシュヒットは、ＤＲＡＭキャッシュが、要求されたデータの有効なコピーを格納している場合に発生し、ＤＲＡＭキャッシュミスは、ＤＲＡＭキャッシュが、要求されたデータの有効なコピーを格納していない場合に発生する。アクセス要求が、ＤＲＡＭキャッシュヒットである場合に（ステップ５２０：Yes）、ステップ５２４において、制御回路は、ＤＲＡＭキャッシュからデータを読み出すか又はＤＲＡＭキャッシュにデータを書き込むためにＤＲＡＭキャッシュにアクセスする。アクセス要求が、ＤＲＡＭキャッシュミスである場合に（ステップ５２０：No）、ステップ５２２において、制御回路は、メインメモリからデータを読み出すか又はメインメモリにデータを書き込むために、メインメモリ（例えばメインメモリ４８０）にアクセスする。ステップ５２２、５２４、又は５２６を完了した後で、制御回路は、プロセス５００を終了する。
【００２７】
[0035]  プロセス５００において、ＤＲＡＭキャッシュアレイは、ＬＬＣタグアレイのチェック（ステップ５１６）と同時にチェックされる（ステップ５１４）。従って、ＬＬＣミスが検出される時までに、制御回路は、ＤＲＡＭキャッシュが、要求されたデータのコピーを有するか否かを既に知っており、且つＤＲＡＭヒットが検出された場合にＤＲＡＭキャッシュダイにおけるＤＲＡＭキャッシュにアクセスしさえすればよい。しかしながら、ＤＲＡＭキャッシュタグアレイをＣＰＵダイ上に配置することは、ＬＬＣの貴重なスペースを消費する。通常の６４バイトキャッシュラインサイズを用いると、２５６ＭＢのＤＲＡＭキャッシュは、１１ＭＢを超えるタグスペースを必要とすることになり、それは、ＬＬＣのサイズのおよそ１／４である。キャッシュラインは、キャッシュの粒度、即ちキャッシュにおけるデータの最小単位を指す。タグスペースオーバーヘッドを低減する１つの方法は、キャッシュラインサイズを拡大させることである。キャッシュラインサイズを４ＫＢに増加させることは、２５６ＭＢのＤＲＡＭキャッシュのタグスペースオーバーヘッドをたった１００ＫＢに低減することになろう。しかしながら、より大きなキャッシュラインを有することは、次のことを示唆する。即ち、ＤＲＡＭキャッシュミスが発生した場合に、制御回路が、より大きなキャッシュラインを満たすために、メインメモリからより大きなデータ量をフェッチしなければならないことになり、それが、メモリ帯域幅を容易に一杯にすることになることを示唆する。これらの制限ゆえに、商用ＣＰＵベンダーは、ソフトウェアの介入を要求するのみの、ＣＰＵと同じダイ上に形成されたＤＲＡＭキャッシュだけを用いてきており、ソフトウェア透過性の、ハードウェアに管理されたキャッシュとしてはＤＲＡＭキャッシュを用いてこなかった。
【００２８】
[0036]  開示される実施形態において、ソフトウェアハードウェア共同設計アプローチが、ＤＲＡＭキャッシュが直面する設計問題に取り組むために提供される。キャッシュラインサイズが小さい場合に、貴重なＬＬＣスペースを消費するタグアレイ記憶オーバーヘッドを考慮して、開示される実施形態において、大きなＤＲＡＭキャッシュライン（例えば４ＫＢ）が、従来の６４Ｂキャッシュラインに取って代わるために用いられる。前に説明したように、より大きなキャッシュラインサイズを用いると、キャッシュミスは、注意深い制御なしではより高価になる。何故なら、メモリ帯域幅が、容易に一杯にされ得るからである。例えば、キャッシュミスは、４ＫＢデータが、メインメモリからフェッチされることを要求し、それは、メインメモリからの６４の読み出しと等価である。開示される実施形態において、ＤＲＡＭを制御なしとするのではなく、データの或る領域だけが、所定のサービスレベル合意（ＳＬＡ）に従ってＤＲＡＭキャッシュに格納され得るようにされる。ＳＬＡは、サービスプロバイダが提供し且つ受け入れなければならないサービスのレベルを定義する、サービスプロバイダとエンドユーザとの間で確立された契約である。ＳＬＡは、クラウドコンピューティングにおいて用いられる普及した基準である。これは、ＳＬＡにおいて定義された重要なアプリケーションが、ＤＲＡＭキャッシュが提供する性能利益を享受できるようにし、且つより少ないＤＲＡＭキャッシュアクセス及び従ってより少ないミスが生成されるので、メモリトラフィックの総数を低減する。
【００２９】
[0037]  図６は、開示される実施形態と一致する処理システム６００を概略的に示す。処理システム６００は、サービスプロバイダのクラウドベースのサーバに含まれ得る。サーバは、ネットワークを介して、ユーザ装置６９０によってアクセスすることができる。
【００３０】
[0038]  図６に示されているように、処理システム６００は、処理ユニット６１０と、処理ユニット６１０に結合されたＤＲＡＭキャッシュ６５０、システムカーネル６７０、及びメインメモリ６８０と、を含む。メインメモリ６８０は、処理ユニット６１０によってアクセスされるデータを格納することができる。システムカーネル６７０は、処理システム６００の動作を制御することができる。システムカーネル６７０は、処理システム６００上で実行される１つ又は複数のタスク／スレッドの属性を記載するtask_structデータ構造を格納する記憶ユニット６７２を含む。
【００３１】
[0039]  処理ユニット６１０及びＤＲＡＭキャッシュ６５０は、ＣＰＵチップ（例えばＣＰＵチップ１１０又は１３０）に含むことができ、その場合に、処理ユニット６１０は、ＣＰＵダイ（例えばＣＰＵダイ１１２又は１３２）に配置され、ＤＲＡＭキャッシュ６５０は、ＣＰＵダイから物理的に分離されたＤＲＡＭダイ（例えばＤＲＡＭダイ１１４又は１３４）に配置される。処理ユニット６１０は、複数の処理コア６２２と、複数の処理コア６２２にそれぞれ対応してそれらに結合された、且つネットワークオンチップ（ＮｏＣ）６２６に結合された複数のレベル２キャッシュ（Ｌ２Ｃ）６２４と、を含む。加えて、処理ユニット６１０は、ＮｏＣ６２６に結合されたＤＲＡＭキャッシュタグアレイ６２８、ラストレベルキャッシュ（ＬＬＣ）６３０、及びＤＲＡＭキャッシングポリシーエンフォーサ６３２と、制御回路６４０と、を含む。ＤＲＡＭキャッシュ６５０は、ＤＲＡＭキャッシュデータアレイ６５２及びＱｏＳポリシーエンフォーサ６５４を含む。処理コア６２２、Ｌ２Ｃ  ６２４、ＤＲＡＭキャッシュタグアレイ６２８、ＬＬＣ  ６３０、制御回路６４０、ＤＲＡＭキャッシュ６５０、及びＤＲＡＭキャッシュデータアレイ６５２は、図４における処理コア４２２、Ｌ２Ｃ  ４２４、ＤＲＡＭキャッシュタグアレイ４２８、ＬＬＣ  ４３０、制御回路４４０、ＤＲＡＭキャッシュ４５０、及びＤＲＡＭキャッシュデータアレイ４５２とほぼ同じである。従って、これらのコンポーネントの詳細な説明は、繰り返されない。ＤＲＡＭキャッシングポリシーエンフォーサ６３２は、ＤＲＡＭキャッシュ６５０へのアクセスを制御し、その詳細な説明は、以下でより詳細に提供される。
【００３２】
[0040]  図７は、サービスプロバイダにタスク／スレッドを送信するユーザにサービスプロバイダによって提供されるＳＬＡの幾つかのレベルを定義する例示的な表７００を示す。サービスプロバイダは、処理ユニット（例えば処理ユニット６１０）に結合されたＤＲＡＭキャッシュ（例えばＤＲＡＭキャッシュ６５０）を装備された処理システム（例えば処理システム６００）を有する。パブリッククラウド環境において、より高いＳＬＡレベルは、サービスプロバイダによって提供されるより高価なサービスを意味する。同様に、プライベートクラウド又は内部データセンター環境において、最も高いＳＬＡレベルは、重要性の高いタスク及びユーザが直面しているオンラインタスクに通常は与えられる。
【００３３】
[0041]  表７００の列７１０によれば、タスク／スレッドを発行するユーザに関連するＳＬＡレベルは、タスク／スレッドが、ＤＲＡＭキャッシュにアクセスすることを許可されるかどうかを定義することができる。デフォルトによって、即ちＳＬＡレベル０において、タスクは、自らのデータをＤＲＡＭキャッシュに格納することは許可されない。換言すれば、ＳＬＡレベル０を備えたユーザによって発行されたタスクは、ＤＲＡＭキャッシュにアクセスすることができない。より高いＳＬＡレベル（例えばＳＬＡレベル１〜４）において、ＤＲＡＭキャッシュアクセスが許可される。換言すれば、ＳＬＡレベル１〜４のいずれか１つを備えたユーザによって発行されたタスクは、ＤＲＡＭキャッシュにアクセスすることができる。即ち、ＤＲＡＭキャッシュ可能である。
【００３４】
[0042]  表７００の列７２０によれば、ＳＬＡレベルはまた、ＤＲＡＭキャッシュにアクセスすることを許可されるタスク／スレッドのメモリ領域の量を定義することができる。即ち、タスク／スレッドを実行する処理コアが、ＤＲＡＭキャッシュからデータを読み出すか又はＤＲＡＭキャッシュにデータを書き込むことができるかどうかを定義することができる。タスクによって消費される仮想メモリ量は、仮想メモリ領域に更に分割することができる。仮想メモリ領域は、仮想メモリの固定サイズ（例えば１ＭＢ）として定義することができ、それは、物理スペースにおいて一致しているようにも一致していないようにもできる。ＳＬＡレベル２は、タスクのメモリ領域全体が、ＤＲＡＭキャッシュに格納され得るようにするが、ＳＬＡレベル１は、タスクの単一のメモリ領域又は複数のメモリ領域が、ＤＲＡＭキャッシュに格納され得るようにするだけである。幾つかの実施形態において、ＤＲＡＭキャッシュ可能であるメモリ領域の量は、より微細な粒度でさえ定義することができ、それにより、より多くのＳＬＡレベルに対応する。
【００３５】
[0043]  表７００の列７３０によれば、可能にされるメモリ領域の量に加えて、ＳＬＡレベルは、サービス品質（ＱｏＳ）が提供されるかどうかを更に定義することができる。ＱｏＳが提供される場合に、タスクのＤＲＡＭキャッシュ占有量が保証される。例えば、ＱｏＳポリシーエンフォーサ（例えばＱｏＳポリシーエンフォーサ６４５）は、ＤＲＡＭキャッシュ可能であるメモリ領域が、ＤＲＡＭキャッシュに実際にアクセスできることを保証するように構成することができる。ＱｏＳが提供されない場合に、タスクのＤＲＡＭキャッシュ占有量は、保証することができない。これは、今度は、表７００におけるＳＬＡレベル３及び４を定義する。ＳＬＡレベル１とＳＬＡレベル３との間、又はＳＬＡレベル２とＳＬＡレベル４との間の重要な区別は、タスクのＤＲＡＭキャッシュ占有量が保証されるかどうかである。
【００３６】
[0044]  ＳＬＡベースのＤＲＡＭキャッシング制御が、スレッド配置、スレッド実行、及びコンテキストスイッチにそれぞれどのように影響するかが更に説明される。
【００３７】
[0045]  図８は、開示される実施形態と一致する、サービスプロバイダのクラウドベースのサーバの例示的な処理システム（例えば処理システム６００）におけるスレッド割り当て用の例示的なプロセス８００の流れ図である。サーバは、クラウドコンピューティング環境に配置される。プロセス８００は、処理システム６００に含まれるハードウェア（例えば回路、専用論理、プログラマブル論理、マイクロコード等）、ソフトウェア（例えば機能ユニットによって実行される操作）、ファームウェア、又はそれらの組み合わせを含む処理論理によって実行することができる。
【００３８】
[0046]  ステップ８１０において、処理システムは、処理システム上で実行されるスレッドを受信する。スレッドは、ユーザ装置（例えばユーザ装置６９０）によって発行することができる。ステップ８１２において、クラウドコンピューティング環境におけるタスクスケジューラは、スレッドに関連するＤＲＡＭキャッシング関係ＳＬＡデータを検索することができる。ＤＲＡＭキャッシング関係ＳＬＡデータは、サービスプロバイダとユーザ装置のユーザとの間に確立されたＳＬＡレベルと関係させることができる。次に、タスクスケジューラは、スレッド、及びスレッドに関連するＤＲＡＭキャッシング関係ＳＬＡデータをシステムカーネル（例えばシステムカーネル６７０）に転送する。
【００３９】
[0047]  ステップ８１４において、システムカーネルは、ＤＲＡＭキャッシング関係ＳＬＡデータに基づいてＤＲＡＭキャッシング情報を判定する。ＤＲＡＭキャッシング情報は、スレッドが、ＤＲＡＭキャッシュにアクセスすることを許可されるかどうか、スレッドのどれだけの仮想メモリ領域が、ＤＲＡＭキャッシュにアクセスすることを許可されるか、及び／又はスレッドが実行されている間に、ＱｏＳが、提供されるかどうか（ＱｏＳ）を示す情報を含むことができる。
【００４０】
[0048]  ステップ８１６において、システムカーネルは、スレッドの属性を記載するtask_structデータ構造を格納する記憶ユニット（例えば記憶ユニット６７２）にＤＲＡＭキャッシング情報を格納する。例えば、スレッドが、ＤＲＡＭキャッシュにアクセスすることを許可されるかどうかを示す情報は、スレッドに関連するDRAM_Cacheableビットとして格納することができる。スレッドのどれだけの仮想メモリ領域が、ＤＲＡＭキャッシュにアクセスすることを許可されるかどうかを示す情報は、スレッドに関連する１つ又は複数のRegionビットとして格納することができる。ＱｏＳが提供されるかどうかを示す情報は、スレッドに関連するＱｏＳビットとして格納することができる。
【００４１】
[0049]  スレッドによって消費される仮想メモリ領域の一部だけが、ＤＲＡＭキャッシュにアクセスすることを許可されることをＤＲＡＭキャッシング情報が示す場合に、ステップ８１８において、システムカーネルは、どの仮想メモリ領域又はページが、ＤＲＡＭキャッシュにアクセスすることを許可されるかを定義する仮想メモリ領域割り当て情報を判定する。幾つかの実施形態において、システムカーネルは、どのページ又は仮想メモリ領域が、ＤＲＡＭキャッシュにアクセスすることを許可されるかを選択することをスレッド自体に委任することができる。例えば、システムカーネルは、どのページ又は仮想メモリ領域が、ＤＲＡＭキャッシュにアクセスすることを許可されるかをスレッド自体が判定できるように、mprotectシステムコールをスレッドに発行することができる。スレッドは、ＤＲＡＭキャッシュアクセス可能である、処理ユニットによってより頻繁にアクセスされるデータエリア（例えばページ、仮想メモリ領域）を選択することができる。
【００４２】
[0050]  ステップ８２０において、システムカーネルは、仮想メモリ領域割り当て情報を記憶ユニットに格納する。例えば、システムカーネルは、ＤＲＡＭキャッシュにアクセスすることを許可されるページの各１ページに対応するページ表エントリ（ＰＴＥ）の属性セグメントに、専用のビット（例えばPTE_DRAM_Cacheable）を書き込むことができる。ＰＴＥは、システムカーネルの記憶ユニットに格納されるtask_structデータ構造に含むことができる。ステップ８２０を完了した後で、処理システムは、プロセス８００を終了する。
【００４３】
[0051]  スレッドによって消費されるメモリ領域の全てが、ＤＲＡＭキャッシュにアクセスすることを許可される（例えばＳＬＡレベル２又は４）ことをＤＲＡＭキャッシング情報が示す場合に、システムカーネルは、ＤＲＡＭキャッシュにアクセスするための仮想メモリ領域を割り当てる必要がなく、且つどのページをマークするためにもPTE_DRAMビットを用いない。従って、ステップ８１８及び８２０は、その特権レベルを有するユーザによって発行されたスレッド用には省略することができる。
【００４４】
[0052]  図９は、開示される実施形態と一致する、例示的な処理システム（例えば処理システム６００）におけるスレッド実行用の例示的なプロセス９００の流れ図である。プロセス９００は、プロセス８００を実行した後で実行することができる。プロセス９００は、処理システム６００に含まれるハードウェア（例えば回路、専用論理、プログラマブル論理、マイクロコード等）、ソフトウェア（例えば機能ユニットによって実行される操作）、ファームウェア、又はそれらの組み合わせを含む処理論理によって実行することができる。
【００４５】
[0053]  ステップ９１０において、スレッドが、処理システムにおける処理コア（例えば処理コア６２２の１つ）上で実行を開始しようとする前に、処理システムは、スレッドに関連するＤＲＡＭキャッシング情報を検索する。例えば、処理システムにおけるカーネルスケジューラは、スレッドに関連し、且つシステムカーネルの記憶ユニットに格納されたtask_structデータ構造から、ＤＲＡＭキャッシング情報の＜DRAM_Cacheable、Region、ＱｏＳ＞を読み出す。カーネルスケジューラは、スレッドを実行しようとする処理コアの制御レジスタ（ＣＲ）にDRAM_Cacheable及びRegionビットを書き込み、且つ処理コアのマシン状態レジスタ（ＭＳＲ）にＱｏＳビットを書き込む。
【００４６】
[0054]  ステップ９１２において、スレッドが、処理コア上で実行され始める場合に、処理ユニットの制御回路（例えば制御回路６４０）は、処理コアからアクセス要求を受信する。アクセス要求は、アドレスタグに関連するメモリ位置からデータを読み出すための読み出し要求、又はアドレスタグに関連するメモリ位置にデータを書き込むための書き込み要求とすることができる。ステップ９１４において、制御回路は、アクセス要求が、Ｌ２Ｃキャッシュミスであると判定する。例えば、制御回路は、処理コアに対応するＬ２Ｃ（例えばＬ２Ｃ  ６２４の１つ）におけるタグアレイをチェックし、且つＬ２Ｃが、要求されたデータの有効なコピーを格納していないと判定する。
【００４７】
[0055]  ステップ９１６において、制御回路は、現在動作しているスレッドが、ＤＲＡＭキャッシュ可能かどうか、即ちスレッドが、ＤＲＡＭキャッシュにアクセスすることを許可されるかどうかをチェックするために、ＤＲＡＭキャッシングポリシーエンフォーサ（例えばＤＲＡＭキャッシングポリシーエンフォーサ６３２）に問い合わせる。例えば、ＤＲＡＭキャッシングポリシーエンフォーサは、現在動作しているスレッドに関連するCR.DRAM_Cacheableビットを検査する。同時に、ステップ９１８において、制御回路は、アクセス要求に含まれるアドレスタグをＤＲＡＭキャッシュタグアレイに格納されたアドレスタグと比較することによって、ＤＲＡＭキャッシュタグアレイ（例えばＤＲＡＭキャッシュタグアレイ６２８）をチェックする。また同時に、ステップ９２０において、制御回路は、アクセス要求に含まれるアドレスタグをＬＬＣタグアレイに格納されたアドレスタグと比較することによって、ＬＬＣ（例えばＬＬＣ  ６３０）に含まれたＬＬＣタグアレイをチェックする。換言すれば、ＤＲＡＭキャッシングポリシーエンフォーサは、ＬＬＣアクセス（ステップ９２０）及びＤＲＡＭキャッシュタグアレイアクセス（ステップ９１８）によって同時にアクセスされる（ステップ９１６）。
【００４８】
[0056]  ステップ９２２において、制御回路は、現在動作しているスレッドが、ＤＲＡＭキャッシュにアクセスすることを許可されるか、即ちＤＲＡＭキャッシュ可能であるかどうかを判定する。制御回路は、現在動作しているスレッドが、現在動作しているスレッドに関連するCR.DRAM_Cacheableビットに基づいてＤＲＡＭキャッシュ可能かどうかを判定することができ、それは、ステップ９１６でＤＲＡＭキャッシングポリシーエンフォーサによってチェックされる。
【００４９】
[0057]  現在動作しているスレッドが、ＤＲＡＭキャッシュにアクセスすることを許可されない場合に（ステップ９２２：No）、制御回路は、要求されたデータをメインメモリから読み出すか、又は要求されたデータをメインメモリに書き込むために、メインメモリ（例えばメインメモリ６８０）にアクセスするようにステップ９３０に進む。現在動作しているスレッドが、ＤＲＡＭキャッシュにアクセスすることを許可される場合に（ステップ９２２：Yes）、制御回路は、アクセス要求が、ＤＲＡＭキャッシュにアクセスすることを許可される仮想メモリ領域と関係するかどうかを判定するためにステップ９２４に進む。例えば、ＤＲＡＭキャッシングポリシーエンフォーサは、要求されたデータが、ＤＲＡＭキャッシュにアクセスすることを許可される仮想メモリ領域にあるかどうかを判定するために、CR.Region｜PTE.DRAM_Cacheableの結果を検査する。PTE.DRAM_Cacheableは、ＰＴＥのキャッシュされたコピーであり、且つ処理ユニットにおけるトランスレーション・ルックアサイド・バッファ（ＴＬＢ）から供給される。
【００５０】
[0058]  アクセス要求が、ＤＲＡＭキャッシュにアクセスすることを許可されない仮想メモリ領域と関係する場合に（ステップ９２４：No）、制御回路は、要求されたデータをメインメモリから読み出すか、又は要求されたデータをメインメモリに書き込むために、メインメモリにアクセスするようにステップ９３０に進む。アクセス要求が、ＤＲＡＭキャッシュにアクセスすることを許可される仮想メモリ領域と関係する場合に（ステップ９２４：Yes）、制御回路は、アクセス要求が、ＬＬＣヒットか又はＬＬＣミスかどうか（それは、ステップ９２０において、ＬＬＣに含まれるＬＬＣタグアレイをチェックする結果に基づくことができる）を判定するために、ステップ９２６に進む。ＬＬＣヒットは、ＬＬＣが、要求されたデータの有効なコピーを格納している場合に発生し、ＬＬＣミスは、ＬＬＣが、要求されたデータの有効なコピーを格納していない場合に発生する。
【００５１】
[0059]  アクセス要求が、ＬＬＣヒットである場合に（ステップ９２６：Yes）、制御回路は、要求されたデータをＬＬＣから読み出すためか、又は要求されたデータをＬＬＣに書き込むために、ＬＬＣにアクセスするようにステップ９３４に進む。アクセス要求が、ＬＬＣミスである場合に（ステップ９２６：No）、制御回路は、アクセス要求が、ＤＲＡＭキャッシュヒットかどうか（それは、ステップ９１８において、ＤＲＡＭキャッシュタグアレイをチェックする結果に基づくことができる）を判定するために、ステップ９２８に進む。ＤＲＡＭキャッシュヒットは、ＤＲＡＭキャッシュが、要求されたデータの有効なコピーを格納している場合に発生し、ＤＲＡＭキャッシュミスは、ＤＲＡＭキャッシュが、要求されたデータの有効なコピーを格納していない場合に発生する。
【００５２】
[0060]  アクセス要求が、ＤＲＡＭキャッシュヒットである場合に（ステップ９２８：Yes）、制御回路は、要求されたデータをＤＲＡＭキャッシュから読み出すか、又は要求されたデータをＤＲＡＭキャッシュに書き込むために、ＤＲＡＭキャッシュにアクセスするようにステップ９３２に進む。アクセス要求が、ＤＲＡＭキャッシュミスである場合に（ステップ９２８：No）、制御回路は、要求されたデータをメインメモリから読み出すか、又は要求されたデータをメインメモリに書き込むために、メインメモリ（例えばメインメモリ４８０）にアクセスするようにステップ９３０に進む。ステップ９３０、９３２、又は９３４を完了した後で、制御回路は、プロセス９００を終了する。
【００５３】
[0061]  更に、ＳＬＡベースのＤＲＡＭキャッシング制御はまた、コンテキストスイッチに影響し得る。コンテキストスイッチが発生する場合に、即ち処理システムが、新しいスレッドを実行しようとする場合に、カーネルスケジューラは、古いスレッドの＜DRAM_Cacheable、Region、ＱｏＳ＞を記憶ユニットにおけるtask_structデータ構造に書き戻し、且つ新しいスレッドに関連する＜＜DRAM_Cacheable、Region、ＱｏＳ＞をメモリにおけるtask_structデータ構造からロードする。次に、カーネルスケジューラは、新しいスレッドを実行しようとする処理コアのＣＲ及びＭＳＲにこの情報を書き込む。
【００５４】
[0062]  開示される実施形態で説明されるシステム及び方法を用いれば、ＤＲＡＭキャッシュの使用が、ＳＬＡ要件を満たすスレッドに与えられ、ＳＬＡによって定義された重要度が高いタスクが、ＤＲＡＭキャッシュの利益を享受できるようにし、一方で、持続可能なメモリ帯域幅が超過されないことを依然として保証する。
【００５５】
[0063]  現代のＣＰＵは、近くのメモリとして埋め込みＤＲＡＭを用い、それは、メインメモリと比較した場合に、より高速なアクセスを提供する。近くのメモリとしてＤＲＡＭを用いることは、著しい量のソフトウェア介入を要求する可能性がある。これは、メモリの性質が、連続する物理アドレスを用いるために、メモリに割り当てられるデータを必要とするからである。実際に、ＣＰＵ上を走行するアプリケーションにとって、大きな連続する物理メモリを割り当てること、又はデータ割り当て／割り当て解除中に、これらの位置からデータにアクセスすることは容易ではない。対照的に、開示される実施形態は、ソフトウェア透過性である、ハードウェアに管理されたキャッシュとしてＤＲＡＭメモリを用いる。ＤＲＡＭキャッシュ設計コストは、ＤＲＡＭキャッシュの使用を、ＳＬＡに定義されたアプリケーションに制限することを通して軽減される。
【００５６】
[0064]  本発明の他の実施形態は、本明細書の検討及び本明細書で開示される本発明の実行から当業者に明らかになろう。本出願は、本発明の一般原理に従う、且つ当該技術分野における周知又は通例の実践内に入るような本開示からの逸脱を含む本発明のどんな変形、使用、又は適用もカバーするように意図されている。本明細書及び例が、例示としてのみ考えられ、本発明の真の範囲及び趣旨が、以下の特許請求の範囲によって示されることが、意図されている。
【００５７】
[0065]  本発明が、上記で説明された、且つ添付の図面に示された構造に正確に制限されるのではないこと、及び様々な修正及び変更が、本発明の範囲から逸脱せずに行われ得ることが認識されよう。本発明の範囲が、添付の特許請求の範囲だけによって制限されるべきであることが意図されている。
【図１Ａ】
2020531950.tif 000003
【図１Ｂ】
2020531950.tif 000004
【図２】
2020531950.tif 000005
【図３】
2020531950.tif 000006
【図４】
2020531950.tif 000007
【図５】
2020531950.tif 000008
【図６】
2020531950.tif 000009
【図７】
2020531950.tif 000010
【図８】
2020531950.tif 000011
【図９】
2020531950.tif 000012
【国際調査報告】
2020531950.tif 000013
2020531950.tif 000014