Cache Stashing
Cache Stashingは、システム内の特定のキャッシュ内にデータをインストールするメカニズムである。 CHI-Bはシステム・パフォーマンスを向上させるためにこの機能を導入した。 Cache Stashingメカニズムは、将来使用されるポイントの近くにキャッシュ・ラインを割り当てることで、システム・パフォーマンスを向上させる。
通常、Cache Stash RequestはRN-IおよびRN-Dノードによって開始される。 Cache Stash Requestは、システム内の特定のキャッシュ内に特定のキャッシュ・ラインをインストールするよう提案するものであり、強制的なアクションではない。 Cache Stash Request を受信した Device は、その Request を無視することができる。
CHI は主に 2 種類のCache Stashingをサポートする。
- 書き込みデータを含むStash Transaction
- データなしのStash Transaction
Cache Stashingの両方の形式は、異なるキャッシュ・レベルをターゲットにすることができる。
トランザクションの流れ
Cache Stashingの基本的なトランザクションの流れは以下のとおりである:
- RNがRequest Channel上でCache Stash Requestを発行する。
- Cache Stash RequestはHN-Fに転送される。
- HN-Fは次のいずれかを実行できる:
- Cache Stash Request を無視する。 RN-FはStashing Snoopをキャッシュしないバージョンとして扱う。
- 要求を受け入れ、RN-Fにスヌープを生成する。応答したRN-Fはキャッシュ・ラインをキャッシュにフェッチする。
- キャッシュのターゲットにされたRN-Fは、Stashing Snoopと呼ばれる特定のタイプのSnoop Requestを受け取る。
RN-Fは以下のことができる:
DataPullメカニズムを使用して、関連するキャッシュラインに対する読み取り要求として動作するスヌープ応答を提供する。DataPullなしでスヌープレスポンスを提供し、そのキャッシュ・ラインに対して別の読み取りリクエストを発行する。- Cache Stashingのヒントを無視して、キャッシュ・ラインをフェッチせずにスヌープ応答を提供する
Stashing Snoop Requests
すべてのCache Stash RequestはHN-Fノードに送信される。 HN-FがCache Stash Requestを処理するとき、ターゲットRN-FへのStashing Snoop Requestを生成する。
CHIは4つの異なるStashing Snoop Requestを定義し、それぞれが最初のCache Stash Transactionに対応する。 これらのリクエストの詳細は以下の表である:
| Cache Stash Transaction | HN-FによるSnoop Request | RN-Fのアクション |
|---|---|---|
WriteUniquePtlStash |
SnpUniqueStash |
キャッシュ・ラインを無効にし、ダーティな場合はデータを返す(書き込みデータ付き) |
WriteUniqueFullStassh |
SnpMakeInvalidStash |
キャッシュ・ラインが存在する場合は無効にする(書き込みデータ付き) |
StashOnceShared |
SnpStashShared |
キャッシュラインに対して共有リクエストを行う(データなし) |
StashOnceUnique |
SnpStashUnique |
将来の書き込み(データなし)に備えて、キャッシュ・ラインに対して一意な要求を行う。 |
キャッシュスタッシング制御フィールド
CHI はCache Stashingのために、リクエスト、スヌープ、レスポンス、データ・フリットに制御フィールドを追加する。これらのフィールドは以下の情報を示している:
- キャッシュターゲットのNodeID
- L2キャッシュのような、RN-F内部の特定の論理プロセッサキャッシュ
DataPullメカニズムが使用されるかどうか。
リクエスト・フリットはCache Stash Requestに以下のフィールドを使用する:
StashNIDはキャッシュターゲットのノードIDを保持する。 RN-Fがスタッシュのターゲットとして選ばれた場合、StashNIDフィールドにはRN-FのノードIDが入力される。StashNIDValid: もしStashNIDフィールドがスタッシュ時に使用されるべきであれば、StashNIDValidは1になる。StashLPIDは、RN-F内の論理プロセッサIDを指定する。 このフィールドは、L2 キャッシュのような低レベルのキャッシュをスタッシュターゲットとして指定することができる。StashLPIDValid. もしStashLPIDフィールドがスタッシュ時に使用されるべきであれば、StashLPIDValidは1になる。
Snoop Flitには以下のフィールドも含まれる:
StashLPIDおよびStashLPIDValid: Cache Stash RequestがStashLPIDが有効であることを示した場合(StashLPIDValid = 1)、SnoopはStashLPIDCache State Requestの値を使用する。StashLPIDが指定されない場合(StashLPIDValid = 0)、StashedデータはRN-F内の共有キャッシュに置かれるかもしれない。DoNotDataPull: このフィールドが1に設定されている場合、スタッシュ・ターゲットはDataPullを要求できないため、DataPullメカニズムを使用できない。