1、AXI 协议定义了memory和外设slave的transaction 属性,通过ARCACHE和AWCACHE信号来指定。控制:
1)transaction progresses如何通过system?
2)system-level cache 如何处理transaction
xact_type有:READ、WRITE、IDLE、COHERENT和DATA_STREAM几种,如果打开cache的情况下,xact_type要设为COHERENT,同时设置coherent_xact_type
AXI CACHE类型有如下:
ACE比AXI 增加了如下信号和通道:
1)信号:
ARDOMAIN 【1:0】 :00--Non-Shareable 01--Inner Shareable 10:Outer Sharable 11--System ,当AXCACHE的cache bit为0时,ARDOMAIN只能为11 level;AXCACHE【3:2】 不为零时,不能用11 level;
ARSNOOP【3:0】:
ARBAR【1:0】:00--Normal access(respecting barrier), 01---Memory barrier 10--Normal access(ignoring barrier) 11:Synchronization barrier
2、CAche 一致性基础了解
1)目的:以最低的cost 提高性能
2)Cache bouncing:多个线程频繁修改一个字段时候,这个字段的cacheline会不停同步到各个核上(在核间弹来弹去),cache一致性是硬件锁来实现的,cache bouncing是一种隐式的全局竞争。
缺点:
对于频繁修改的变量,会导致开销陡增;
False sharing:还会使访问同一个cacheline中不常修改的变量也变慢,这个现象是false sharing.避免可以通过:按照cacheline对齐来避免(不理解)。
- 为什么要cache?
缓解cpu和主存ddr之间的矛盾,cpu太快了,如果访问cache只要几个纳秒,而访问主存,需要几百个cycle,在微秒级别。
局部性原理:
时间局部性:访问到的数据,下一个时间还会再访问;
空间局部性:访问数据的相邻数据可能被访问;
- cache 写方式
Write through:每次CPU修改的cache中内容,会立即更新到内存;
缺点:每次写都会有总线事务,会引起竞争,虽然高一致性,但是效率低。
Write back:写回,cpu修改cache内容,不会立刻更新到内存,而是到一定时机才会更新到内存中去。
写失效:当一个cpu修改了数据,若其他cpu有该数据,则通知其无效;
写更新:当一个cpu修改了数据,若其他cpu有数据,通知其更新。
- MESI协议(mesi协议采用的是写失效 write invalidate)
M:modify修改,E:exclusive独占,s:shared,I:invalid失效
Cache操作:
LR:local read,读取本地cache中数据;
LW:local write,将数据写到本地cache;
RR:remote read,读取内存中数据;
RW:remote write,将数据写通到主存;
疑问:对于多核单个cpu,每个核心有一个L1cache,外部有一个L2 cache(控制器),cpu内部如何做cache的一致性?外部又如何做cache的一致性?
3、AXDomain 属性
AxDomain三根信号线描述了shareable属性,具有相同属性的master之间,需要进行cache一致性操作。
更多推荐
AXI协议理解
发布评论