5.由于core改写了数据,就导致cache的一致性问题,怎么解决?什么时候解决?
6.是不是先通知其他core数据或指令被修改了,然后过一段时间数据才能更新?就是先发现数据更新了,等一段这个更新才能传过来
9.Instruction cache speculative memory accesses
什么是预测存取?对cache有什么影响?和指令的分支预测有什么关系?
0.相关博客推荐
深度学习arm cache系列--一篇就够了_刷cache机制-CSDN博客
1.arm的mem type
类型和属性都有什么含义 什么情况下使用,也就是每个属性是为了解决什么问题?
属性中non-execute是什么含义
1.1 Memory attributes和type
ARMV8定义了mem的type和属性【相关内容都可以在ArmV8的架构参考手册中找到】:
ARM把mem分为了两大类,分别是Device和Normal mem。简单理解Device就是外设的映射空间;Normal就是常见的DDR。
无论是Device还是normal mem都有两类共同的属性:
【直接理解mem的属性比较奇怪,应该是这段mem对应存储的数据在传输过程中的共享性和可缓存性】
- shareability(共享性和cache的一致性有关)
- Cacheability(缓存性和写ddr有关)
对于Device mem还有其特殊的属性:
- Gathering 或者non Gathering (G or nG)。这个特性表示对多个memory的访问是否可以合并,如果是nG,表示处理器必须严格按照代码中内存访问来进行,不能把两次访问合并成一次。例如:代码中有2次对同样的一个地址的读访问,那么处理器必须严格进行两次read transaction。
- Re-ordering (R or nR)。这个特性用来表示是否允许处理器对内存访问指令进行重排。nR表示必须严格执行program order。
- Early Write Acknowledgement (E or nE)。PE访问memory是有问有答的(更专业的术语叫做transaction),对于write而言,PE需要write ack操作以便确定完成一个write transaction。为了加快写的速度,系统的中间环节可能会设定一些write buffer。nE表示写操作的ack必须来自最终的目的地而不是中间的write buffer。
1.1.1 mem的Cacheability
cacheable属性是对某一个或某段内存地址空间数据的传输来讲的,non-cacheable就表示这段空间的数据在传输过程中是不能经过cache的,或者说它的数据是不会在任何cache上的。
device mem就属于这种类型的memory。那么这种类型的memory虽然不用考虑一致性问题,但是要考虑读写顺序问题。
cacheable的trans包括两种类型:
- write-back
- write-through
需要说明的是无论write-back还是write-through都有cache一致性问题。
1.1.2 mem的Shareability
首先需要明确的是 Shareability属性是指的某一内存地址是否可以被多个master访问。被多个master访问就存在一致性的问题。
在ARMv8中定义了三种Shareability domain
- Non-shareable:该domain只包含一个master;该段内存只给一个特定的核使用
- Inner Shareable:该domain包含了几个master;意味着Inner Shareable的内存只可以在此域共享
- Outer Shareable:该domain包含了Inner domain和其它master;意味着此内存可以被Inner Shareable和Outer Shareable域共享
这里的inner和outer的划分,是可以配置定义的。outer shareable domain可以包含多个inner domain。 而一个outer domian内的inner domian的内存空间是不能为outer所共享,但是outer domian的内存空间可以被内部的所有inner domain共享。
由上面Note第一条可知,device为non-cacheable,所以device mem都是outer shareable domian
在同一个shareability domain内,数据是要保持一致性的。
ArmV8的架构参考手册DDI0487J_a_a-profile_architecture_reference_manual.pdf给出了Inner和Outer Shareable Normal memory定义:
仔细对比上面两段话就可以发现inner和outer只是一个区域划分的问题,对于domian内部的observers来说要求是一样的。
1.1.3 device memory的特殊属性
简单提一下device mem的定义:
上面的定义说Device memory是不能被推测性的读。是把被外设内存映射的区域赋为Device