ARMv8 のメモリ属性と属性 (メモリの種類と属性) の概要を説明する記事

ARMv8 では、メモリを通常のメモリとデバイス メモリの 2 種類に分けます。通常のメモリはシステム内のほとんどのメモリに適しており、デバイス メモリは周辺機器が使用するメモリに適しています。

1. 通常のメモリ

通常のメモリ タイプのプロパティは、システム内のほとんどのメモリに適用されます。これは、このアーキテクチャにより、ハードウェアがこれらの場所へのアクセス許可に関係なく、これらの場所への投機的なデータ読み取りアクセスを実行できることを意味します。ノーマルメモリへのアクセス順序を保証するには、メモリバリア命令:DMBを使用する必要があります。

1.1 共有可能な通常メモリ

通常のメモリ アドレスには、次のいずれかの共有性属性を含めることができます。

内部共有可能、内部内部共有可能の共有領域に適用されます。

外部共有可能。内部共有可能および外部共有可能の共有領域に適用されます。

共有不可。

1.1.1 内部共有可能プロパティと外部共有可能プロパティ

ARM アーキテクチャは、システムを一連の内部および外部の共有可能な属性領域に抽象化します。

各内部共有ドメインには、グループの各メンバーに対してデータの一貫性があり、データ アクセスのためにグループのメンバーによって作成された内部共有可能属性を使用するために使用される一連のオブザーバーが含まれています。

各外部共有ドメインには、グループの各メンバーに対してデータの一貫性があり、グループのメンバーによって作成された外部共有可能属性を使用したデータ アクセスに使用される一連のオブザーバーが含まれています。

また、次のようなプロパティもあります。

各オブザーバーは、内部共有ドメインのメンバーにすぎません。

各オブザーバーは、単一の外部共有ドメインのみのメンバーになれます。

内部共有可能ドメイン内のすべてのオブザーバーは、常に同じ外部共有可能ドメインのメンバーになります。

これは、内部共有可能ドメインが外部共有可能ドメインのサブセットであることを意味しますが、適切なサブセットである必要はありません。

キャッシュ不可能な場所へのすべてのデータ アクセスは、すべてのオブザーバーに対してデータの一貫性があるため、キャッシュ不可能な場所は常に外部共有可能とみなされます。内部共有ドメインは、単一のハイパーバイザーまたはオペレーティング システムによって制御される PE の集合であることが想定されます。

システム内に 2 つのプロセッサ クラスタがある場合は、次のことを確認する必要があります。

各クラスター内では、プロセッサーのデータ キャッシュおよび統合キャッシュから、内部共有可能属性を持つすべてのメモリ位置へのデータ アクセスは透過的です。

ただし、Inner Shareable プロパティのみが存在する場合、2 つのクラスター間のデータ アクセス中に一貫性を維持するためにキャッシュは必要ありません。外部共有可能プロパティの場合、データの一貫性が必要です。

このようなシステムでは、内部共有可能プロパティの場合、各クラスターは異なる共有可能ゾーンにありますが、外部共有可能プロパティの場合、サブシステム内のすべてのコンポーネントは同じ共有可能ゾーン内にあります。

1 つのシステムにこのようなサブシステムが 2 つ実装される場合があり、1 つのサブシステムのデータ キャッシュと統合キャッシュが他のサブシステムからのアクセスに対して不透明である場合、システムには 2 つの外部共有可能領域があります。

共有可能な通常メモリの場合、ロード排他命令とストア排他命令は、同じ共有ドメイン内の複数のオブザーバ (複数のコア) によるアクセスの可能性を考慮します。

1.2 共有不可能な通常メモリ

ノーマル メモリ領域の場合、共有不可能なノーマル メモリは、単一の CPU によってのみアクセスできるノーマル メモリの一部です。共有不可能な通常メモリでは、メモリがキャッシュ不可能でない限り、複数のオブザーバーによるデータ アクセスの一貫性を確保するためにハードウェアは必要ありません。

非共有メモリの場合、他のオブザーバがこのメモリ システムを共有する場合、ソフトウェアはキャッシュ メンテナンス関連の命令を使用して、複数のオブザーバ間のデータ通信におけるキャッシュの一貫性の問題を保証する必要があります。さらに、メモリ処理の順序を保証するには、追加のメモリ バリア操作が必要です。

また、非共有メモリについては、Load-Exclusive 命令と Store-Exclusive 命令をサポートするかどうかにおいて、複数のオブザーバ アクセスの可能性が考慮され、特定の実装 IMPLEMENTATION DEFINED で定義されます。

1.3 通常メモリのキャッシュ可能属性

外部共有可能、内部共有可能、および非共有可能のプロパティに加えて、各ノーマル メモリにはキャッシュ プロパティが割り当てられます。

ライトスルー キャッシュ可能。ライトバック キャッシュ可能。

キャッシュ不可。

キャッシュ属性は、メモリ領域の共有ドメインの外側にあるオブザーバに一貫性制御メカニズムを提供します。場合によっては、ライトスルー キャッシュまたはキャッシュ不可能領域を使用すると、ハードウェア コヒーレンシ メカニズムやキャッシュ メンテナンスを使用するプログラムを使用するよりも、一貫性を制御する優れたメカニズムが提供される場合があります。この目的のために、アーキテクチャでは、キャッシュ不可能なキャッシュ メモリまたはライトスルー キャッシュ メモリに次の特性があることが必要です。

オブザーバーが特定のレベルのキャッシュ内のメモリ システムにアクセスすると、そのレベルのキャッシュのライトスルー キャッシュまたはキャッシュ不可能なメモリ位置への完全な書き込みは、そのレベルのキャッシュの外でメモリ システムにアクセスするすべてのオブザーバーに表示されます。 . 明示的なキャッシュのメンテナンスを必要とせずに表示されます。

レベル キャッシュの外側のメモリ システムにアクセスするオブザーバーによって完了されるレベル キャッシュにはキャッシュできません

メモリ位置への書き込みは、明示的なキャッシュ メンテナンスを必要とせずに、そのレベルでキャッシュ内のメモリ システムにアクセスするすべてのオブザーバに表示されます。

キャッシュ不可能な通常のメモリ アクセスの場合、DMB 命令は、単一のペリフェラルまたは実装定義サイズのメモリ ブロックへのすべてのアクセスに Barrier-ordered-before 関係を導入します。

通常のメモリの場合、Arm アーキテクチャは、キャッシュの 2 つの概念レベル (内部キャッシュと外部キャッシュ) に対して独立して定義されるキャッシュ プロパティを提供します。これらの概念レベルのキャッシュと実装された物理レベルのキャッシュの関係は実装で定義されており、内部共有ドメインと外部共有ドメイン間の境界とは区別できます。

内部とは、最も内側のキャッシュ、つまり PE に最も近いキャッシュを指し、常に最下位レベルのキャッシュが含まれます。

[内部キャッシュ] プロパティで制御されるキャッシュは、[外部キャッシュ] プロパティで制御されるキャッシュの外側に配置することはできません。

特定の実装では、外部キャッシュがない場合があります。たとえば、L1、L2、および L3 を備えた 3 レベルのキャッシュ アーキテクチャでは、3 つのキャッシュは内部キャッシュである可能性がありますが、外部キャッシュはありません。L1 が内部キャッシュ、L2 と L3 が外部キャッシュになることもあります。

 Information Direct: Linux カーネル ソース コード テクノロジ学習ルート + ビデオ チュートリアル カーネル ソース コード

Learning Express: Linux カーネル ソース コード メモリ チューニング ファイル システム プロセス管理 デバイス ドライバー/ネットワーク プロトコル スタック

2. デバイスメモリ

デバイス メモリ タイプ属性は、その場所へのアクセスによって副作用が発生する可能性があるメモリの場所を定義します。また、ロードによって返される値は、実行されたロードの数に応じて変化する可能性があります。通常、デバイス メモリ属性は、メモリ マップされたペリフェラルおよび同様の場所に使用されます。

デバイスのメモリ領域は通常、USB uart やその他のモジュールなどの一部の周辺機器に使用されます。まず第一に、それは非キャッシュ可能です。つまり、キャッシュは使用できず、メモリに直接アクセスできます。データは保存されるだけです。これにより、データの一意性と正確性を確保できます。第 2 に、ペリフェラルのメモリ相互作用には一般に高いタイミング要件があるため、読み取りおよび書き込み操作も限られた時間内に完了する必要があります。さらに、キャッシュを使用しないことに加えて、デバイス メモリへのアクセスには、投機的アクセスなどの他のメモリ アクセスの最適化が適用されない場合があります。全体として、これはペリフェラルによって使用されるメモリ属性であり、ペリフェラルのメモリ相互作用は、次の条件を満たす必要があります: タイムリー、効率的、および正確:

投機的なデータ アクセスは、デバイス メモリ属性を持つメモリ位置に対しては許可されません。これは、デバイス メモリ タイプへのすべてのメモリ アクセスは、プログラムの単純な順次実行によって生成される必要があることを意味します。

デバイス メモリ タイプのメモリ位置への書き込みは、限られた時間内に完了します。

デバイス メモリ タイプのメモリ位置から読み取られた戻り値が、オブザーバへの明示的なメモリ書き込みの影響なしに変更された場合、その変更は、限られた時間内でシステム内のすべてのオブザーバに対してグローバルに監視される必要もあります。このような変更は、ステータス情報を保持する周辺の場所で発生する可能性があります。

デバイスのメモリ位置へのデータ アクセスは、システム内のすべてのオブザーバーに対して一貫しているため、外部共有可能とみなされます。

デバイス メモリ属性を持つメモリ位置をキャッシュに割り当てることはできません。

どのデバイス メモリ タイプのアクセスでも、DMB 命令を使用して、単一のペリフェラルまたは指定されたサイズのメモリ ブロックへのすべてのアクセスに Barrier-ordered-before 関係を導入します。

メモリ位置が非整列メモリ アクセスをサポートできない場合、メモリ位置への非整列アクセスにより、変換の最初の段階で位置合わせエラーが生成され、その位置がデバイスとして定義されます。

ハードウェアは、そのメモリ位置がすべての例外レベルで実行禁止としてマークされていない限り、デバイス メモリ属性を持つメモリ位置からの投機的命令フェッチをブロックしません。

原作者:アームセレクション

おすすめ

転載: blog.csdn.net/youzhangjing_/article/details/132881927