当前位置:   article > 正文

cache读写策略(write-back/through)与分配策略(allocate)_cache 的writeback

cache 的writeback

1.allocate

先确定一下allocate的概念,就是在cache miss的时候,去内存中读写数据过程中给这个数据分配cacheLine并存储到cache。

其中write-allocate可以分为两种情况:

  • 先读要改写数据对应的cacheLine大小的数据回来,存储到新分配的cacheLine上,然后将要修改的写数据更新到cacheLine中
  • 直接分配cacheLine,将数据存储到该cacheLine

以上两种fill cacheline的过程适用于不同的情况,第一种适用于写数据不是整个cacheLine大小,由于和内存交互的最小单元是cacheLine,所以只能先读整个cacheLine,这个过程称为读改写

显然第二种就属于完全替换整个cacheLine的情况,当然完全替换整个cacheLine也可以采用第一种方式。

必须要分清的是read trans miss对应的是read allocate;而write trans miss对应的是write allocate,即使write miss后allocate的cacheLine的fill可能需要从内存中读数据。

2.cache的读策略与read allocate

上表是ArmV8架构手册给出的memType及mem属性,在cacheability中cacheable为何只有write-Through Cacheable和Write-Back Cacheable而没有提到read的属性呢?

我们在说write-Through和write-back cache的时候,并不是说该cache不能支持读trans,而是因为默认情况下write-through和write-back的cache的读策略都是一样的。

对于cacheable的trans,读首先要在cache中查找

  • 如果hit,那么就得到所需的数据
  • 如果miss就去内存中读取

在miss后读取内存的过程中,对读回的数据处理又分了两类

  • read allocate :就是将读回的数据分配一个cacheLine存储在cache中
  • read non-allocate:读回的数据直接给master使用,而不在cache中缓存

而默认情况下都是使用read allocate的cache【无论是write-back还是write-through】

3.cache的写策略与write allocate

常用的cache写策略是write-back和write-through,Arm目前也支持这两种回写策略,还有其他的策略不在这里体现。

既然是cacheable的写trans,首先到cache中查找,若:

Hit时:

write-through:将写数据更新到cacheLine,同时将该Dirty的cacheLine写到内存中

write-back:直接将数据更新到cacheLine,并不立即写到内存中去,在该cacheLine被逐出cache时,写到内存中。

miss时,按照allocate分为两种情况:

write allocate :此时在cache中分配一个cacheLine(fill cacheLine过程见本文第一章),然后按照hit的情况,分write-back和write-through回写数据

write non-allocate:此时无论write-back还是write-through都是直接将数据写往内存中。

ARM的cache和mem零散记录(属性)-CSDN博客这边博客中提到的write stream mode就是典型的使用write non-allocate的场景。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/525797
推荐阅读
相关标签
  

闽ICP备14008679号