Cortex-A510——Cache

Cortex-A510——Cache

小狼@http://blog.csdn.net/xiaolangyangyang


1、M7 Cache基本参数

ARM Cortex-A510系列Cache参数如下:

Cache Level:L1/L2/L3/SLC
L1 ICache/DCache
    size:64K、32K
    cache-line:4B、64B、512B
L2 Cache
    size:1M、512K、256K
    cache-line:16B
L3 Cache
    size:16M
    cache-line:128B
SLC Cache
    size:4M * 4
    cache-line:64B

2、Cortex-A510 Cache组织结构

        以cache-size为32k,cache-line为32Byte为例:

  • 组相连(常用结构):4-way,256-set
  • 直接映射:相当于1-way,1024-set的组相连
  • 全相连:相当于1024-way,1-set的组相连

3、组相连

        如果一个数据可以放在n个line,则称这个Cache是n路组相连的Cache(n-wayset-associativeCache),如下图所示为4-way,4-set的Cache。

组相连结构图

组相连映射图

  • offset:确定cache-line中数据位置,offset为图中Word+Byte
  • set:确定way中cache-line位置,即哪个组,如果数据被缓存,则V标志为1;
  • tag:确定cache中way的位置,如果数据被缓存,tag中保存有地址信息,与处理器地址进行比对;
  • V:cache-line有效标记;
  • D:脏数据标记。

组相连映射硬件逻辑图

4、VIVT/VIPT/PIPT

        VIVT(Virtual Index Virtual Tag):使用虚拟地址Index域和虚拟地址Tag域
        多个VA可能映射到同一PA,导致多个cache line组(VA不同,index域不同,查找到的cache 组则不同)映射到同一物理地址,这种现象叫做cache alias(高速缓存别名)。一旦一个VA到PA的映射关系改变,cache内容将会写回物理内存。此时,由于物理内存内容的变化需要同步到cache,就需要clean和invalidate(这两个操作结合起来就叫做flush)其余同名cache line,导致系统性能下降。
        VIPT(Virtual Index Physical Tag):使用虚拟地址Index域和物理地址Tag域
        如果index域位于地址的bit0~bit11(因为linux kernel以4KB(12bit位宽)大小为页面进行物理内存管理),就不会引起cache alias,否则还是会引起该问题。因为对于一个页面来说,虚拟地址和物理地址的低12bit是完全一样的,如果index域位于bit0~bit11,此时VIPT等价于PIPT。
        PIPT(Physical Index Physical Tag):使用物理地址Index域和物理地址Tag域
        就不会存在cache alias问题,但是结构更复杂。ARM Cortex-A系列处理器使用的是PIPT方式。

5、Cache硬件替换策略

        常用策略有:PLRUNRUFifo、Round-Robin

6、Cache一致性

        MESI协议:

  • M:这行数据有效,数据已被修改,和内存中的数据不一致,数据只存在于该高速缓存中
  • E:这行数据有效,数据和内存中数据一致,数据只存在于该高速缓存中
  • S:这行数据有效,数据和内存中数据一致,多个高速缓存有这行数据的副本
  • I:这行数据无效

7、Cache操作指令

8、Cache寄存器

9、Cache-Tag格式及获取

        可以向Data Cache Tag Read Operation Register写入way、set,然后读取Data Register 1和Data Register 0寄存器得到Cache Tag信息

cache-tag格式

DR0[4]和DR1[31:30]解析出MESI

10、提高Cache命中率

  • 优化数据访问模式,是得数据的访问更加局部化、减少Cache Miss的次数;
  • 合理配置Cache的大小和映射方式,以满足特定应用程序的需求;
  • 使用高效的替换算法,如LRU(Least Resently Used),以最大程度地保留对最近访问数据的缓存;
  • 避免频繁的写入操作,尽可能地延迟写操作以提高写入命中率。

11、疑问

  1. Cache的内部组织架构是怎么样的?能否画出一个cache的layout图?什么是set,way?
  2. 直接映射,全关联和组相联之间有什么区别?优缺点是啥?
  3. 重名问题是怎么发生的?
  4. 同名问题是怎么发生的?
  5. VIPT会不会发生重名问题?
  6. 什么是inner shareability 和outer shareability?怎么区分?
  7. 什么是PoU?什么是PoC?
  8. 什么是cache一致性?业界解决cache一致性都有哪些方法?
  9. MESI状态转换图,我看不懂。
  10. 什么cache伪共享?怎么发生的,如何避免?
  11. DMA和cache为啥会有cache一致性问题?
  12. 网卡通过DMA收数据和发数据,应该怎么操作cache?
  13. 对于self-modifying code,怎么保证data cache和指令cache的一致性问题?

Cache知识记录
Arm64 Cache
Linux内存管理:ARM64体系结构与编程之cache(3):cache一致性协议(MESI、MOESI)、cache伪共享

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值