赞
踩
先确定一下allocate的概念,就是在cache miss的时候,去内存中读写数据过程中给这个数据分配cacheLine并存储到cache。
其中write-allocate可以分为两种情况:
以上两种fill cacheline的过程适用于不同的情况,第一种适用于写数据不是整个cacheLine大小,由于和内存交互的最小单元是cacheLine,所以只能先读整个cacheLine,这个过程称为读改写。
显然第二种就属于完全替换整个cacheLine的情况,当然完全替换整个cacheLine也可以采用第一种方式。
必须要分清的是read trans miss对应的是read allocate;而write trans miss对应的是write allocate,即使write miss后allocate的cacheLine的fill可能需要从内存中读数据。
上表是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中查找,
在miss后读取内存的过程中,对读回的数据处理又分了两类
而默认情况下都是使用read allocate的cache【无论是write-back还是write-through】
常用的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的场景。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。