![](https://img-blog.csdnimg.cn/c3aafd7c75ee4b36bba2be1a069aabfb.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
ARM Cache
文章平均质量分 95
ARM cache
SOC罗三炮
嵌入式软件开发,ARM CPU架构研究,某厂芯片SOC系统验证工程师
展开
-
ARM如何利用PMU(Performance Monitor Unit)量化L3 cache的cache eviction(估算cache eviction的概率)
L3D_CACHE_REFILL事件里基本包含了写入cache(L1、L2或者L3)的操作,而L3D_CACHE_WB事件则是将cache line从cache 中写回到下一级内存中的操作。换句话说,通过L3D_CACHE_REFILL事件,PMU可以统计出从cache获取数据,进行cache line填充的次数。通过L3D_CACHE_WB可以知道从cache(L1、L2或者L3)中的dirty cache line写回到L3的下一级内存的次数。L3 cache的cache eviction(cache原创 2024-03-06 22:09:45 · 1374 阅读 · 1 评论 -
以ARM Cortex-A55/A53为例分析 L1/L2/L3 cache所支持的写策略(write-back/wirte-through,写通和写回)
Cortex-A53处理器的L1 data cache以及L2 cache都不支持Write-Through策略,当处理器访问内存类型为Write-Through的数据时,这些数据并不会经过L1 data cache和L2。至于L1 instruction cache,对于指令数据,处理器只是读取,并不会写,所以cache 的写策略对指令缓存不起作用。同Cortex-A53一样,其CCSIDR的WT状态位也始终为0,说明**对Cortex-A55 来讲,它的任何级别的cache(L1/L2/L3)都不支持原创 2024-02-26 00:20:09 · 3887 阅读 · 0 评论 -
如何利用好cache写出高性能的代码(Make your programs run faster by better using cache )
笔者在学习cache时总结了一些在软件层面充分利用cache,来写出高性能代码方法。如何利用好cache写出高性能的C代码一,当线性访问数据(需要遍历数据结构)时,使用数组(arrays)而不是链表(Linked lists)二,经常使用的变量应该放在一起声明定义,(Variables you access often together should be close to one-another in memory)三,内存对齐:优化访问结构体或者类数组四,高效地访问矩阵(二维数组)Access原创 2023-10-12 23:31:33 · 3256 阅读 · 1 评论 -
ARMv8如何读取cache line中MESI 状态以及Tag信息(tag RAM & dirty RAM)并以Cortex-A55示例
本文以Cortex-A55处理器为例,通过访问 处理器中的内部存储单元(tag RAM和dirty RAM),来读取cache line 中的MESI信息。Cortex-A55提供了一种通过读取一些系统寄存器,来访问Cache 和 TLB使用的一些内部存储单元(internal memory)的机制。这个功能可以探查出当缓存中的数据与主存中的数据不一致时存在的问题。此外,AArch64模式和AArch32模式的读取方式不同:当处理器处于AArch64模式时,先通过一些只写(write-only)寄存器原创 2023-10-02 15:47:28 · 5078 阅读 · 0 评论 -
缓存一致性(cache coherency)解决方案:MESI 协议状态转换详解
M,Modified, Unique Dirty((UD), 只存在于当前cache中(unique),并且该cache line上的数据与下一级存储单元中的数据不同(dirty)。换言之,cache line中最新的数据位于当前cache,其他cache中没有备份 ,cache line中的内容与主存中的不一致。E,Exclusive, Unique Clean(UC),数据只存在于当前cache line中,并且为clean的。cache中cache line中的数据于主存中的一致,并且其他core中原创 2023-09-29 22:17:37 · 4030 阅读 · 0 评论 -
ARMv8如何读取cache line中MOESI 状态以及Tag信息(tag RAM & dirty RAM)
本文以Cortex-A53处理器为例,通过访问 处理器中的内部存储单元(tag RAM和dirty RAM),来读取cache line 中的MOESI信息。Cortex-A53提供了一种通过读取一些系统寄存器,来访问Cache 和 TLB使用的一些内部存储单元的机制。这个功能可以探查出当缓存中的数据与主存中的数据不一致时存在的问题。原创 2023-03-19 16:46:52 · 12577 阅读 · 0 评论 -
ARMv8-缓存一致性(cache coherency)解决方案:MOESI protocol
ARMv8架构使用 MOESI 协议来维护在多个core之间的数据一致性,MOESI 协议描述了 L1 Data Cache中的一个共享的cache line的状态可以是:MOESIData Cache Unit (DCU)会将cache line的 MOESI状态信息保存在tag RAM和 dirty RAM中。原创 2023-03-12 17:30:56 · 8406 阅读 · 3 评论 -
ARM 中缓存维护策略:Allocate policy(读分配/写分配),Write policy(写通/写回)以及replacement policy基础知识
针对不同的使用场景,有不同的cache 策略来影响cache的操作。缓存策略使我们能够描述何时应该将一个cache line写入给data cache,以及当执行store指令并发生cache hit时应该发生什么。原创 2023-09-09 12:47:55 · 4468 阅读 · 0 评论 -
组相联cache如何快速实现cache line eviction并使用PMU events验证
cache controler 是一个管理cache 内存的硬件结构,实际上它的绝大部分行为对程序来说都是不可见的。它会自动地将代码指令或者数据从主存中搬运到cache中,响应CPU读写内存的请求,并将它们转化成对cache以及外部内存的操作:cache controler收到CPU对某个地址进行读写的请求时,它会先检查这个地址是否存在cache中,这个动作称为cache look-up(缓存查找)。原创 2023-09-03 20:07:11 · 3931 阅读 · 1 评论 -
Cache Maintenance-通过VA对cache进行clean和invalidate操作-汇编程序详解
/ 获取cache line的掩码,假设line size为64(0b1000000)字节,减1操作后,X4的值为0b111111。,十进制为4,所以一个cache line 的大小为 2^4 = 16 words,为16个字,换成字节为:64字节(1 word = 4 bytes)。// 由于一个字节对应一个地址,地址加上一个cache line的字节数,相当于指向下一个 cache line的地址。// 清除基址X0的前6位,相当于对其取整,使得基址能够整除cache line大小的字节数(64),原创 2021-08-06 09:15:59 · 1837 阅读 · 0 评论 -
Cache Maintenance-关于cache 清除(invalidate)和清理(clean)操作的基础知识
有时候,软件很有必要去clean或者invalidate 缓存,这种情况通常是:外部内存的内容已经被改变,而cache中还是以前的数据,所以很有必要移除cache中陈旧的数据。 MMU相关的活动,比如: 改变了内存的访问权限 改变了缓存策略(WB、WT等) 改变了虚拟地址(VA)到物理地址(PA)的映射关系 需要同步指令缓存(I-Cache)和数据缓存(D-Cache)Cache相关的操作清除操作-invalidate-使数据失效invalidate操作主要是针对 ca.原创 2021-07-30 17:33:10 · 13617 阅读 · 0 评论 -
Cache Maintenance-通过set/way对cache进行clean和invalidate操作-汇编代码详解
对于cache清理清除操作不熟悉的同学可以先看看上面相关的基础知识。原创 2021-08-02 14:09:31 · 3941 阅读 · 7 评论 -
关于cache maintenance 操作的四个寄存器(CTR,CLIDR,CSSELR,CCSIDR)解析
ARMv8缓存识别寄存器(identification registers)描述了由在PE上执行的缓存维护指令影响的实现缓存。原创 2021-07-31 18:06:40 · 3716 阅读 · 2 评论 -
图解直接映射(Direct mapped)、全相联(Fully-associative)和组相联(Set-associative)cache缓存基本原理
直接映射优缺点- 优点: 硬件实现简单,成本低.- 缺点: 灵活性差。每个主存块只有一个固定的行可以存放,因此即便cache中有大量空闲cache line可用,某个cache line上的data仍可能被替换出去。如果cache容量比较小,则非常容易发生冲突,频繁替换(cache trashing),效率大大降低。- 适用范围:直接映射方式一般用于大容量的cache中。全相联映射优缺点- 优点: 全相联映射方式比较灵活,主存的地址可以映射到Cache的任一cache line原创 2023-09-21 05:00:00 · 14753 阅读 · 9 评论 -
ARMv8 cache的包含策略inclusive 和 exclusive之间的区别以及Cortex-A55示例详解
Inclusive cache: L2包含了所有的L1里的所有有效数据。Exclusive cache: L1 和L2 的数据互斥,同样的一份数据不能同时存在于L1和L2。原创 2023-09-24 15:11:04 · 5729 阅读 · 3 评论