FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

AMBA5 の CHI (Coherence Hub Interface)についての調査 (5. キャッシュ状態とコヒーレンスプロトコル)

developer.arm.com

developer.arm.com

CHIのコヒーレンスプロトコルについて

キャッシュラインの取りうる状態

キャッシュラインの状態の種類は、以下のようになっている。

状態 説明 補足?
I (Invalid) キャッシュラインはキャッシュ中に存在していない Invalid状態?
UC (Unique Clean) キャッシュラインはキャッシュ中に存在しており、更新されていない。
同じキャッシュラインは他のキャッシュに存在していない
スヌープに対するレスポンスとして、Homeノードに対してレスポンスする必要がある。
Exclusive状態?
UCE (Unique Clean Empty) キャッシュラインはキャッシュ中に存在している。
同じキャッシュラインはほかのキャッシュに存在していない
どのデータバイトもValidではない
スヌープに対するレスポンスとして、Homeノードに対してレスポンスする必要がある。
UD (Unique Dirty) キャッシュラインはほかのキャッシュには存在していない
メモリに対してキャッシュラインは更新されてる。
スヌープに対するレスポンスとして、Homeノードに対してレスポンスする必要がある。
Modified状態?
UDP (Unique Dirty Partial) キャッシュラインはほかのキャッシュには存在していない
メモリに対してキャッシュラインは一部更新されている。
キャッシュラインは吐き出されると、次のレベルのメモリに対してマージされる必要がある。
スヌープに対するレスポンスとして、Homeノードに対してレスポンスする必要がある。
SC (Shared Clean) キャッシュラインは他のキャッシュにも存在している可能性がある。
キャッシュラインはメモリに対して更新されている可能性がある。
メモリに対する掃き出しの責任を負う必要がない。
Shared状態?
SD (Shared Dirty) キャッシュラインは他のキャッシュにも存在している可能性がある。
キャッシュラインはメモリに対して更新されている可能性がある。
メモリに対する掃き出しの際、データを次のレベルのメモリに受け渡す責任を持つ。
Owner状態?

リクエストの種類

リクエス 説明
Read Requests データをリクエスタに返す。
システム中の他のエージェントに対してデータが移動される可能性がある。
キャッシュ状態は更新される可能性がある。
他のキャッシュの状態も更新される可能性がある。
Dataless Requests データはリクエスタに返されない。
システム中の他のエージェントに対してデータが移動される可能性がある。
キャッシュ状態は更新される可能性がある。
他のキャッシュの状態も更新される可能性がある。
Write RequestsとCombined Write Requets リクエスタからデータを移動する
システム中の他のエージェントに対してデータが移動される可能性がある。
キャッシュ状態は更新される可能性がある。
他のキャッシュの状態も更新される可能性がある。
Atomic Requests リクエスタからデータを移動する
いくつかのリクエストに関しては、リクエスタにデータレスポンスが返される。
システム中の他のエージェントに対してデータが移動される可能性がある。
キャッシュ状態は更新される可能性がある。
他のキャッシュの状態も更新される可能性がある。
Other Requests システム中でデータの移動は発生しない
分散仮想メモリ(DVM: Distributed Virtual Memory)メンテナンスなどの補助として使用される。
以降のRead Requestに対するメモリコントローラのウォームアップに使用される。

インターコネクト間のプロトコルフローについて

次に、CHIのプロトコルフローについて見ていく。

Read Transaction flows

Read transactions with DMT and without snoops

DMTというのはDirect Memory Transferであるということを思い出しておく。つまりリクエスタの要求に対して、データはHomeノードを介さず直接変換される。

  1. RN-FがHN-FにReadリクエストを送る
  2. HN-FがSN-FにReadリクエストを送る
    • ReadリクエストのIDフィールドは送られるデータレスポンスをベースにしている。データはリクエスタもしくはHN-Fに返される。
  3. SN-FはデータレスポンスをRN-Fに直接返信する
  4. 最初のリクエストがReadSharedの場合、RN-FはHN-FにCompAckを送信する。
f:id:msyksphinz:20210815231655p:plain

この図を見てわかる通り、RN-Fのキャッシュラインの状態はI(Invalid)からUC(Unique Clean)状態になる。