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


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

developer.arm.com

Coherent Hub Interface(CHI)は、ACE(AXI Coherency Extensions)プロトコルを進化させたものである。

このガイドでは、CHIプロトコルの最初の3つの問題を紹介し、CHIの一般的な概要を提供し、いくつかの機能について詳しく説明します。

Introduction to CHI

このセクションでは、CHIの最初の3つの問題の基本概念を紹介する:

CHIネットワークのトポロジ

  • リング・トポロジ: 各コンポーネントが他の2つのコンポーネントに直接接続し、すべてのコンポーネントが互いに通信できるリングを形成する。 リング・トポロジーは中規模システムに最適である。
  • メッシュ・トポロジ:リングに比べ、メッシュにはトランザクションが目的地に到達するためのパスが多く含まれるため、トランザクションの移動時間が短縮される。メッシュ・トポロジーは大規模システムに最適である。
  • クロスバー接続: このトポロジでは、すべてのノードが可能な限りすべてのノードに接続できる。クロスバ・トポロジーは小規模システムに最適である。

次の図は、CHIプロトコルを実装できるさまざまなタイプのトポロジーを示している:

CHIプロトコルの種類

CHIプロトコルには現在5つの問題がある:

  • CHI-A仕様は、CHIプロトコルの最初のリリースである。 輻輳を軽減する機能を持つトランスポート層を提供する。

CHI-A仕様はCHIの基本的な動作を記述している。 この仕様には以下が含まれる:

  • 新しいチャネルの定義、CHI用語、コンポーネントの命名
  • リクエスト、スヌープフィルタ、キャッシュ状態遷移の例
  • トランザクション順序、排他アクセス、分散仮想メモリ(DVM)操作のルール

CHI-BはCHI-Aを拡張したものであるが、CHI-Aとの直接の後方互換性はない。 以下のようなArmv8.1およびArmv8.2システム拡張をサポートする機能が追加されている:

  • 物理アドレス幅の拡大
  • アトミック・トランザクション
  • DVMのVMID拡張
  • チャネル・フィールド、トランザクション構造、信頼性、可用性、保守性(RAS)機能の説明
  • メモリとSnoopのアクセスレイテンシを減少させるDirect Memory TransferとDirect Cache Transfer機能

CHI-CはCHI-Bのマイナーな拡張である。 この拡張は主にリクエストハザードの寿命を短縮する機能を追加する。 CHI-Cはまた、完了アクノレッジの時間を短縮する2つのオペコードを追加し、これらのオペコードをサポートするためにプロトコルを変更する。

CHIキャッシュライン状態

CHIはACEと同様のコヒーレンシ・モデルを使用し、スヌープ・フィルターとスヌープ・スケーリングのためのディレクトリ・ベースのシステムのサポートを追加している。

CHIはまた、キャッシュ・ステートを定義するためにACEと同じ用語を使用し、パーシャル・キャッシュ・ライン・ステートとエンプティ・キャッシュ・ライン・ステートを追加している。 キャッシュ・ライン状態の用語は次のとおりである:

  • キャッシュ・ラインがローカル・キャッシュに存在するかどうか: Valid/Invalid
  • キャッシュ・ラインがValidの場合、UniqueまたはSharedのいずれかでなければならない:
    • Unique: キャッシュラインがこのキャッシュにのみ存在し、他のリクエスタのローカルキャッシュには存在しないことを意味する。
    • Shared: キャッシュラインがこのキャッシュに存在し、他のリクエスタのローカルキャッシュに存在するかしないかを意味する。
  • キャッシュ行がValidの場合、CleanかDirtyのどちらかでなければならない:
    • Clean: キャッシュがメインメモリを更新する責任を負わないことを意味する。
    • Dirtyは、キャッシュ・ラインがメインメモリに対して変更されたことを意味する。 この行がこのキャッシュから追い出されるとき、リクエスタはメインメモリが更新されるか、システム内の別のコンポーネントにDirtyの責任が渡されることを保証しなければならない。
  • キャッシュ・ラインはPartialとEmptyの状態になることができる:

    • Empty: 空のキャッシュ行には有効なデータが1バイトもありませんが、その行の所有権はまだリクエスターに属している。
    • 部分的なキャッシュ・ラインは、状態は更新されているが有効なバイトがまだ書き込まれていないため、またはすべてのバイトが書き込まれているが状態が更新されていないためである。この状態の行がスヌープされたときに与えられるレスポンスには、さらに制限がある。
  • 次の図に示すように、これらの用語を組み合わせて7つのキャッシュ・ライン状態を説明する:

  • Invalid: キャッシュ・ラインがキャッシュに存在しない。
  • Unique Dirty: このキャッシュ・ラインはこのキャッシュにのみ存在し、メインメモリに対して変更される。この状態では、その行はすでにUnique状態であるため、Requesterはキャッシュ行への書き込みを実行できる。 スヌープがそれを指示した場合、キャッシュラインはリクエスタに転送されなければならない。
  • Unique Dirty Partial: このキャッシュ・ラインはこのキャッシュにのみ存在し、メインメモリに対して変更されたものとみなされる。 このキャッシュ・ラインは、有効なバイトを持つことができる。 この状態では、そのラインはすでに Unique 状態であるため、リクエスタはキャッシュ・ラインへの書き込みを実行できる。 スヌープに応答して、スヌープによって指示された場合でも、キャッシュラインを元のリクエスタに直接転送することはできない。
  • Shared Dirty: このキャッシュ・ラインはメイン・メモリに対して変更されており、この特定のキャッシュはメイン・メモリを更新する責任を持つ。 キャッシュ・ラインは Shared であるため、1 つ以上のローカル・キャッシュに存在する可能性があるが、これは保証されない。キャッシュ・ラインが複数のキャッシュに存在する場合、これらのキャッシュはこのラインを Shared Clean 変更することになる。
  • Unique Clean: キャッシュ・ラインはメイン・メモリに対して変更されておらず、単一のローカル・キャッシュにのみ存在する。 他のキャッシュに通知することなく変更することができる。
  • Unique Clean Empty: キャッシュ・ラインはこのキャッシュにのみ存在するが、有効なバイトはない。 キャッシュ・ラインは他のキャッシュに通知することなく変更できる。 snoopがその行を要求した場合、その行はHomeに返されたり、元の要求者に直接転送されたりしてはならない。
  • Shared Clean: キャッシュ・ラインは1つ以上のローカル・キャッシュに保持されている可能性がある。その行はメイン・メモリに対して変更されているかもしれないが、このキャッシュは、Evictionにその行をメモリに書き戻す責任はない。



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

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