はじめに
スマホ用のSoCでは、L3 Cache と System Level Cache の2種類の Cache を搭載しています。
下記のXの投稿では、
の die shot があります。
では、SLCが 5MB+5MB = 10MB 搭載されています。
- Snapdragon 8 Elite Gen5
には、SLC が 8MB 搭載されています。
今回は、L3 Cache と System Level Cache の違いについてみていきます。
Grok 4 Fast Beta さんに聞いてみる
ARMのL3キャッシュとSystem Level Cache(SLC)の関係と詳細
ARMアーキテクチャでは、キャッシュ階層はL1(コアごとのプライベートキャッシュ)、L2(コアまたはクラスタ共有)、L3(クラスタ共有の最終レベルキャッシュ)で構成されます。これらの中で、L3キャッシュとSystem Level Cache(SLC)は密接に関連しており、特にDynamIQアーキテクチャで統合的に扱われます。以下で関係性と詳細を説明します。
L3キャッシュの概要
- 目的と構造: L3キャッシュは、ARMプロセッサのクラスタ(例: Cortex-Aシリーズのコア群)内で複数のコアが共有するオプションの最終レベルキャッシュです。主にメモリアクセス遅延を低減し、キャッシュヒット率を向上させるために使用されます。DynamIQ Shared Unit(DSU)内で実装され、動的な割り当てポリシーをサポートします。
- サイズと共有: 典型的なサイズは数MB(例: 4MB〜16MB)で、クラスタ内の全コアが共有。キャッシュラインサイズは通常64バイトまたは128バイトです。パーティショニング機能により、特定のプロセスがキャッシュを独占しないよう制御可能です。
- 特徴: 排他的(exclusive)ポリシーを採用し、L1/L2キャッシュのデータを重複せず保持することでスペースを効率化。被害者キャッシュ(victim cache)として機能する場合もあり、L2からのエビクションされたデータを保持します。
System Level Cache(SLC)の概要
- 目的と構造: SLCはARMが導入したシステム全体の最終レベルキャッシュで、CPUクラスタだけでなくGPUやDSPなどのアクセラレータとも共有されます。主にSoC(System-on-Chip)で使用され、ヘテロジニアスコンピューティング(CPU+GPU)のパフォーマンスを向上させるために設計されています。メモリボトルネックを緩和し、キャッシュスタッシュ(cache stashing)技術によりアクセラレータが直接L3にアクセス可能。
- サイズと共有: サイズはSoCにより異なり、Apple M1では8MBなど。システム全体で共有され、キャッシュラインサイズはL2と同様(例: 128バイト)。インデックスマッピングは物理アドレスの上位ビットを使用し、疑似ランダム置換ポリシーを採用。
- 特徴: CPUのL1/L2に対して排他的(データ重複なし)で、GPUキャッシュに対して包含的(inclusive、GPUデータがSLCに含まれる)。これにより、CPU-GPU間のコヒーレンシを維持しつつ、スペースを最適化します。
L3キャッシュとSLCの関係
- 統合的な実装: ARMのDynamIQアーキテクチャでは、L3キャッシュがSLCとして機能します。つまり、クラスタ内の共有L3が拡張され、システムレベル(CPUクラスタ間やアクセラレータ共有)でSLCとなります。従来のL2共有を超え、L3をシステム全体の最終防衛線として位置づけています。
- 違いのポイント:
- 使用例: Apple MシリーズSoCではSLCがL3として実装され、CPUのL2(12MB)より小さい8MBでexclusiveに動作。Qualcomm SnapdragonやNXP i.MXでも同様のDynamIQ L3/SLCが用いられます。
利点と課題
- 利点: システム全体のキャッシュ効率向上により、電力消費を抑えつつパフォーマンスを高めます。特にモバイル/エッジデバイスで有効。
- 課題: 共有性が高いため、キャッシュ占有攻撃(occupancy attacks)などのセキュリティ脅威が増大。ARMはパーティショニングで緩和を推奨。
これらの詳細はARMの公式ドキュメントや研究論文に基づきます。より具体的なSoC(例: Cortex-A78)については、ARM Developerサイトを参照してください。
整理すると
になっている。
- L3 Cache は、inclusive cache
- System Level Cache は、exclusive cache
になっています。
L3 Cacheの内容は、System Level Cacheには含まれていないようです。
なるほど、なので、
の System Level Cache のサイズは、同じ 10MB で、L3 Cache が
のように、System Level Cache よりも多くても問題ないんですね。
おわりに
今まで、System Level Cache がどんな感じになっているのかを、まじめに調べていなかったので、整理できてよかったです。
L3 Cache は、DSU (DynamIQ Shared Unit) にあり、System Level Cache は内部の interconnect にあるんですね。