【ARM Cache 系列文章 1 -- Cache基础概念学习】

文章目录

    • 1.1 Cache 概念简介
      • 1.1.1 Cache Type
      • 1.1.2 Cache Size
      • 1.1.2 Cache maintenance operations
        • 1.1.2.1 cache invalidate & clean scenario
      • 1.1.3 Cache interaction with memory system
      • 1.1.4 write back/write allocate
        • 1.1.4.1 CPU 读 Cache
        • 1.1.4.2 CPU 写 Cache

下篇文章:ARM Cache 系列文章 2 – Cache Coherence及内存顺序模学习

1.1 Cache 概念简介

1.1.1 Cache Type

Cache 通常按照层级分类,比如常见的L1 Cache/L2 Cache/L3 Cache …
通常L1 Cache 又分为 Icache(instruction cache) 和 Dcache(data cache)。ICache 用于缓存CPU
执行的指令,Dcache 用于缓存cpu 所使用的数据。

1.1.2 Cache Size

以两路组相连缓存(Two-way set associative cache)为例进行 cache size 介绍,
假设 64 Bytes cache size,cache line size 是 8 Bytes。

那么什么是路(way)
我们将 Cache 平均分成多份,每一份就是一路(Way)。因此,两路组相连缓存就是将 Cache平均分成 2 份,每份 32 Bytes。cache 被分成 2 路(Way),每路包含 4 行 cache line。

我们将所有索引一样的cache line组合在一起称之为组(Set)。
【ARM Cache 系列文章 1 -- Cache基础概念学习】_第1张图片
https://aijishu.com/q/1010000000017803

1.1.2 Cache maintenance operations

对Cache 操作主要为两种:
invalidate 和 clean
• invalidate指的是将相应位置的 cache line 状态置为无效(invalid),这时候并不需要真的清除相应位置的cacheline数据。

• clean cacheline意味着将dirty状态的cacheline写入主存,同时清除掉cacheline的dirty比特。通过这种方式可以让cacheline中的数据和主存中的数据一致。

Cache invalid 还可以只针对对应的cache set、way或者对应的地址tag
引用:https://zhuanlan.zhihu.com/p/515450647

具体解释见:
【ARM Cache 系列文章 1 -- Cache基础概念学习】_第2张图片

1.1.2.1 cache invalidate & clean scenario

一个应用cache invalid和clean的典型场景就是DMA。
对于DMA控制器读取的地址空间,需要内核write-back的cache内容对DMA控制器可见,所以需要clean这个cache。

当使用DMA控制器对外部内存写入数据时,为了让这个主存的改动对cache可见,就需要对受影响的cache空间执行invalid。

1.1.3 Cache interaction with memory system

  • 在 disable 或者 enable 指令cache之后,必须执行一条ISB指令,用来flush cpu pipeline。
  • 在 reset之后,必须在做了cache invalidate操作之后才能进行 cache enable操作,因为如果不做invalidate cache的在cache enable之后有可能发生 cache hit, 这个时候 cache中的数据是未知,可能会导致致命问题。
  • 在 disable cache之后必须要 clean cache, 这样才能确保 dirty data 被写入外部存储。
  • 在使能data cache 之前,必须先进行 invalidate 整个data cache, 因为在外部存储中的数据再关闭data cache之后可能被改写,如果没有做 invalidate操作,这时如果cache hit,那么cpu拿到的数据并不是外部存储中最新的数据而是旧数据,这样可能会导致致命问题。
  • 在使能 指令cache同样需要先进行整个 指令cache 的 invalidate 操作。

1.1.4 write back/write allocate

1.1.4.1 CPU 读 Cache

Read Through: 即直接从内存中读取数据;
Read Allocate: 先把数据读取到Cache中,再从Cache中读数据。

1.1.4.2 CPU 写 Cache

(1) 若 hit 命中,有两种处理方式:
cache 的 write-through/write-back policy 是基于 cache 命中的基础上,如果cache 没有命中,是没有意义的:
Write-through: 在数据更新时,把数据同时写入Cache和后端存储。此模式的优点是操作简单;缺点是因为数据修改需要同时写入存储,数据写入速度较慢。

Write-back: 在数据更新时只写入缓存Cache,并使用 dirty 标志位记录 cache 的修改,直到被修改的cache 块被替换时,才把修改的内容写回 main memory。优点是数据写入速度快,因为不需要写存储;缺点是一旦更新后的数据未被写入存储时出现系统掉电的情况,数据将无法找回。

(2) 若 miss,有两种处理方式:
在写失效(write miss)时,即所要写的地址不在 cache tag 中:
Write Allocate: 把要写的地址调入cache 中,再写Cache,后面再通过flush方式写入到内存中。
No-write allocate: 并不将写入地址读入cache,而是直接把要写的数据写入到内存中。

同理,read allocate policy就是当要读的地址不在cache中时,把要读的地址所在的块先从main memory调入cache中,然后再从cache中读。需要注意的是配置成write allocate 和 no write allocate 差异是很大的

下篇文章:ARM Cache 系列文章 2 – Cache Coherence及内存顺序模学习

推荐阅读:
https://aijishu.com/a/1060000000112237
https://blog.csdn.net/student456852/article/details/116853107

你可能感兴趣的:(#,ARM,CPU,Cache,系列,cache,flush,cache,clean,cache,invalidat,cache,size,cache,miss,cache,hit,cache,tag)