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


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

developer.arm.com

msyksphinz.hatenablog.com

Cache Stashing (続き)

DataPullメカニズム

DataPull メカニズムは、Snoop レスポンスを通して Read リクエストを暗示する方法である。 DataPull は、他のスヌープには適用されず、Snoop Requestを隠すことにのみ適用される。

DataPull リクエストを受け取るRN-Fは、DataPull を使うか、別のRead Requestを送るかを選択できる。 RN-FがDataPullを要求しないことを選択した場合、RN-Fはスヌープに応答し、キャッシュ・ラインを取得するために後でRead Requestを送ることができる。

DataPull で許可されるすべてのSnoopレスポンスについては、AMBA 5 CHIアーキテクチャ仕様を参照のこと。

このセクションでは、DataPull メカニズムを利用するRF-Fが、Stashingトランザクションの一部としてデータを受け取るプロセスについて説明する。DataPull の完全なトランザクションフローは以下の通りである:

1. HN-FはStashing Snoopを発行し、Snoop FlitのDoNotDataPull フィールドを0 に設定する。 これは、RN-FのスタッシュターゲットがDataPullを要求できることを示す。

2. DoNotDataPull = 0を受信したRN-Fは、そのSnoop応答でDataPull を要求することを選択できる。 この例では、RN-FはDataPull を要求することを選択する。

3. RN-Fは、応答フリットに2つのフィールドを設定することにより、DataPullを要求する:

  • DataPull フィールドは1に設定される。
  • DBIDフィールドには、読み取りデータを返すために使用される TxnID が入力される。

4. RN-Fは読み取りデータを受信する。

5. RN-F は HN-F に CompAck メッセージを発行する。

この図では、システム例には以下が含まれる:

  • リクエストを発行する1つのRN-D
  • Stash TargetとしてRN-Fが1人
  • HN-F
  • SN-F

この例における完全なトランザクションフローは以下の通りである:

  1. RN-DはStashOnceUnique RequestをHN-Fに発行する。 StashNID フィールドの値は、RN-F1が Stash Target であることを示す。
  2. HN-FはStash Requestを受け入れる。
  3. HN-Fは以下を発行する:
    • SN-F への ReadNoSnp Request
    • SnpStashUnique SnoopをRN-F1へ
  4. HN-FはRN-DにCompletion応答を送信する。
  5. RN-F1はStash Hintを受け入れる。
  6. RN-F1はSnpStashUniqueSnpResp_I_Read DataPull リクエストで応答する。 SnpResp_I_Read 応答は暗黙のRead Requestをシグナリングする。 DBID フィールドはトランザクションIDをY として設定する。
  7. SN-F はキャッシュ・ラインを HN-F に返す。
  8. HN-Fはキャッシュ・ラインをRN-F1に転送する:
    • TxnID = Y である。
    • DBID = Z
  9. RN-F1は、TxnID = Zの完了確認応答をHN-Fに発行する。

この例では

  • 1台のRN-Dノード
  • 2つのRN-Fノード RN-F1とRN-F2。 RN-F2は、Stash Requestが送信されたときにキャッシュ・ラインを保持する。
  • 1つのHN-Fノード

この例のトランザクションの流れは以下の通りである:

1. RN-DはWriteUniquePtlStash リクエストをHN-Fに発行する。 スタッシュターゲットはRN-F1である。

2. HN-FはStash Requestを受け入れる。

3. HN-FはDBIDResp をRN-Dに返す。

4. HN-FはRN-F2に対してSnpCleanInvalid Snoopを生成する。 これは、RN-F2がキャッシュ・ラインと、SnpUniqueStash を隠し場所ターゲットRN-F1に保持しているからである。

5. RN-F2はキャッシュ・ラインを無効にする。

6. RN-F2 は Dirty データを含む Snoop Response を HN-F に返す。

7. RN-F1 は暗黙の Read Request で Snoop Response を発行する。 DBIDフィールドは、隠しデータのTxnIDY として設定する。

8. HN-FはSnoops応答を受信する。

9. HN-FはRN-Dに完了応答を発行する

10. RN-DはStash Requestの書き込みデータをHN-Fに送る。 HN-Fは書き込みデータとSnoop応答からのデータの両方を持つ。 HN-Fはキャッシュ・ラインに新しいデータを作成する。

11. NH-Fはキャッシュ・ラインの所有権をRN-F1に送る。 応答フィールドは以下の通りである:

  • TxnID = Y
  • DBID = Z

12. RN-F1はCompAck レスポンスをTxnID = Zで送信する。




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

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