以下の内容はhttps://msyksphinz.hatenablog.com/entry/2025/03/14/040000より取得しました。


キャッシュコヒーレンスを管理するバスプロトコルの勉強 (13. キャッシュ・スタッシングについて)

developer.arm.com

msyksphinz.hatenablog.com

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の基本的なトランザクションの流れは以下のとおりである:

  1. RNがRequest Channel上でCache Stash Requestを発行する。
  2. Cache Stash RequestはHN-Fに転送される。
  3. HN-Fは次のいずれかを実行できる:
    • Cache Stash Request を無視する。 RN-FはStashing Snoopをキャッシュしないバージョンとして扱う。
    • 要求を受け入れ、RN-Fにスヌープを生成する。応答したRN-Fはキャッシュ・ラインをキャッシュにフェッチする。
  4. キャッシュのターゲットにされた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はStashLPID Cache State Requestの値を使用する。StashLPID が指定されない場合(StashLPIDValid = 0 )、StashedデータはRN-F内の共有キャッシュに置かれるかもしれない。
  • DoNotDataPull: このフィールドが1に設定されている場合、スタッシュ・ターゲットはDataPull を要求できないため、DataPull メカニズムを使用できない。



以上の内容はhttps://msyksphinz.hatenablog.com/entry/2025/03/14/040000より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14