Raspberry Pi3 (BMC2837)のキャッシュ設定を調査


2017年7月、Raspberry Pi3のキャッシュメモリはどんな構造になっているか興味があり調べてみました。

先日、Raspberry Pi2のキャッシュについて調査しました。キャッシュの基本的な説明と調査方法については、こちらのブログを参照してください。

Raspberry Pi2 (BCM2836)のキャッシュ設定を調査

Raspberry Pi3のキャッシュ構成は?

公式サイトのドキュメントをみると、Raspberry Pi3は、Broadcom社のBCM2837というチップを使用しています。



Broadcom BCM2837

Broadcom BCM2837


This is the Broadcom chip used in the Raspberry Pi 3, and in later models of the Raspberry Pi 2. The underlying architecture of the BCM2837 is identical to the BCM2836. The only significant difference is the replacement of the ARMv7 quad core cluster with a quad-core ARM Cortex A53 (ARMv8) cluster.


BCM2837チップは、Raspberry Pi3とそれ以降のRaspberry Pi2で使用しています。
唯一の大きな違いは、ARMv7クアッドコアクラスタをクアッドコアARM Cortex A53(ARMv8)クラスタに置き換えることです。

今まで知りませんでしたが、Raspberry Pi3と同じ Cortex-A53を搭載しているRaspberry Pi2があるそうです。




4つのCPUコア内部に命令キャッシュ(L1 I-Cache)とデータキャッシュ(L1 D-Cache)があり、メモリとの間に統合キャッシュ(L2 Cache)があります。

ARMサイトの「Cortex-A53 MPCore Technical Reference Manual」を参考にします。

Cortex-A53 Manual

Cortex-A53 Manual

L1 memory system


6.1. About the L1 memory system

The L1 memory system consists of separate instruction and data caches. The implementer configures the instruction and data caches independently during implementation, to sizes of 8KB, 16KB, 32KB, or 64KB.

The L1 Instruction memory system has the following key features:
・Instruction side cache line length of 64 bytes.
・2-way set associative L1 Instruction cache.
・128-bit read interface to the L2 memory system.

Data side cache line length of 64 bytes.
・4-way set associative L1 Data cache.
・256-bit write interface to the L2 memory system.
・128-bit read interface to the L2 memory system.
・Read buffer that services the Data Cache Unit (DCU), the Instruction Fetch Unit (IFU) and the TLB.
・64-bit read path from the data L1 memory system to the datapath.
・128-bit write path from the datapath to the L1 memory system.
・Support for three outstanding data cache misses.
・Merging store buffer capability. This handles writes to: Device memory, Normal Cacheable memory, Normal Non-cacheable memory.
・Data side prefetch engine.

L1メモリシステムは、独立した命令キャッシュとデータキャッシュで構成しています。実装時に、命令キャッシュとデータキャッシュをそれぞれ 8KB、16KB、32KB、64KBのサイズに構成できます。


L2 memory system


7.1. About the L2 Memory system

The L2 memory system consists of an:

● Integrated Snoop Control Unit (SCU), connecting up to four cores within a cluster. The SCU also has duplicate copies of the L1 Data cache tags for coherency support. The L2 memory system interfaces to the external memory system with either an AMBA 4 ACE bus or an AMBA 5 CHI bus. All bus interfaces are 128-bits wide.

● Optional tightly-coupled L2 cache that includes:
・Configurable L2 cache size of 128KB, 256KB, 512KB, 1MB and 2MB.
・Fixed line length of 64 bytes.
・Physically indexed and tagged cache.
・16-way set-associative cache structure.
・Optional ACP interface if an L2 cache is configured.
・Optional ECC protection.






pi@pi3:~ $ uname -a
Linux pi3 4.9.34-v7+ #1013 SMP Sun Jun 25 17:06:40 BST 2017 armv7l GNU/Linux

pi@pi3:~ $ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description:    Raspbian GNU/Linux 8.0 (jessie)
Release:        8.0
Codename:       jessie

キャッシュ情報を参照する cacheinfo.c は、下記ブログで作成したプログラムコードを使用します。

Raspberry Pi2 (BCM2836)のキャッシュ設定を調査



# insmod cachemod.ko


# dmesg |tail -6
[  120.615337] Start Cache Info 
[  120.615357] CTR reg=84448004
[  120.615375] CLIDR reg=0a200023
[  120.615383] CCSIDR  DATA L1 CACHE 700fe01a
[  120.615391] CCSIDR  INST L1 CACHE 201fe00a
[  120.615400] CCSIDR  UNIF L2 CACHE 703fe07a


# rmmod cachemod


Cache Type Register

CTR(Cache Type Register)を参照すると 0x84448004 となりました。


  • CWG : Cache Write-Back granule. Log2 of the number of words of the maximum size of memory that can be overwritten as a result of the eviction of a cache entry that has had a memory location in it modified
  • ERG : Exclusives Reservation Granule. Log2 of the number of words of the maximum size of the reservation granule that has been implemented for the Load-Exclusive and Store-Exclusive instructions
  • DminLine : Log2 of the number of words in the smallest cache line of all the data and unified caches that the processor controls
  • L1Ip : L1 instruction cache policy. Indicates the indexing and tagging policy for the L1 instruction cache
  • IminLine : Log2 of the number of words in the smallest cache line of all the instruction caches that the processor controls
Field Value Function
CWG 0x4 Cache Write-Back granule size is 16 words
ERG 0x4 Exclusive reservation granule size is 16 words
DminLine 0x4 Smallest data cache line size is 16 words
L1Ip b10 Virtually Indexed Physically Tagged (VIPT)
IminLine 0x4 Smallest instruction cache line size is 16 words

Cache Level ID Register

CLIDR(Cache Level ID Register)を参照すると 0x0a200023 となりました。


  • LoUU : Indicates the Level of Unification Uniprocessor for the cache hierarchy
  • LoC : Indicates the Level of Coherency for the cache hierarchy
  • LoUIS : Indicates the Level of Unification Inner Shareable for the cache hierarchy
  • Ctype3 : Indicates the type of cache if the processor implements level 3 cache
  • Ctype2 : Indicates the type of cache if the processor implements level 2 cache
  • Ctype1 : Indicates the type of cache implemented at level 1
Field Value Function
LoUU 0x1 L2 cache
LoC 0b010 L2 cache coherency
LoUIS 0b001 L2 cache
Ctype3 0b000 L3 cache not implemented.
Ctype2 0b100 Unified instruction and data caches.
Ctype1 0b011 Separate instruction and data caches

Level1 キャッシュは、分離した命令キャッシュとデータキャッシュがあります。Level2キャッシュは、命令とデータを統合したキャッシュがあります。

Cache Size Selection Register

CSSELR(Cache Size Selection Register)は、CCSIDR(Cache Size ID Register)を選択します。


Field Value Function
Level Cache level of required cache
0b000 Level 1
0b001 Level 2
InD Instruction not Data bit
0 Data or unified cache
1 Instruction cache


  • Level 1 Data Cache
  • Level 1 Instruction Cache
  • Level 2 Unified Cache

Cache Size ID Register

CCSIDR(Cache Size ID Register)を参照すると、以下のようになりました。

Cache Selection Value
Level 1 Data Cache 700fe01a
Level 1 Instruction Cache 201fe00a
Level 2 Unified Cache 703fe07a




Field Value Function
WT Indicates support for Write-Through
0 Cache level does not support Write-Throug
1 Cache level supports Write-Through
WB Indicates support for Write-Back
0 Cache level does not support Write-Back
1 Cache level supports Write-Back
RA Indicates support for Read-Allocation
0 Cache level does not support Read-Allocation
1 Cache level supports Read-Allocation
WA Indicates support for Write-Allocation
0 Cache level does not support Write-Allocation
1 Cache level supports Write-Allocation
NumSets Indicates the number of sets in cache – 1
Associativity Indicates the associativity of cache – 1
LineSize Indicates the cache line
0b001 8 words per line
0b010 16 words per line

Level 1 Data Cache は、WB,RA,WA をサポートしています。

Field Value Function
NumSets 0x7F 128 sets
Associativity 0x03 4-ways
LineSize 0x2 16 words per line

Level 1 Data Cacheのサイズは、Line Size(16word) × sets(128) × ways(4) = 32KB となります。

Level 1 Instruction Cache は、RA をサポートしています。

Field Value Function
NumSets 0x0FF 256 sets
Associativity 0x01 2-ways
LineSize 0x2 16 words per line

Level 1 Instruction Cacheのサイズは、Line Size(16word) × sets(256) × ways(2) = 32KB となります。

Level 2 Unified Cache は、WB,RA,WA をサポートしています。

Field Value Function
NumSets 0x1FF 512 sets
Associativity 0x0F 16-ways
LineSize 0x2 16 words per line

Level 2 Unified Cacheのサイズは、Line Size(16word) × sets(512) × ways(16) = 512KB となります。



Cache種別 BCM2836(Pi2) BCM2837(Pi3)
L1 Data Line Size(16word)
Line Size(16word)
L1 Inst Line Size(8word)
Line Size(16word)
L2 Unified Line Size(16word)
Line Size(16word)


L1命令キャッシュ 比較

L1命令キャッシュ 比較

L1命令キャッシュは、Line Sizeが倍の16wordになりましたが、セット数が半分の256になりました。

L2統合キャッシュ 比較

L2統合キャッシュ 比較



Raspberry Pi3のRaspbian OSのキャッシュメモリ構造を調べました。

  • Level 1 Data Cacheは、16wordライン長で4-Way 128セットアソシアティブ構造で32KB搭載しています。
  • Level 1 Instruction Cacheは、16wordライン長で2-Way 256セットアソシアティブ構造で32KB搭載しています。
  • Level 2 Unified Cacheは、16wordライン長で16-Way 512セットアソシアティブ構造で512KB搭載しています。


Raspberry Pi2 (BMC2836)と Raspberry Pi3 (BMC2837)で最適化実装するとき、両者に同じ手法が効率的に働くのでしょうか?またの機会に考えてみます。