story · 2022年06月14日

cache学习系列4:cache的分配、替换和写策略

在cache的相关操作中,cache控制器需要根据需求做出许多不同的选择。例如:

  • 分配策略

是否需要将数据从主存中分配到cache中;

  • 替换策略

组相联cache中,所有的way都已经有填充数据了,miss时决定替换掉哪一个way的cacheline;

  • 写策略

cache收到处理器内核的写请求时,相应的cache行为,例如是否先写到cache中,等到实在有必要时再写入到主存中。

分配策略

当处理器内核对cache发起读写访问时,如果该访问的请求数据不在cache中时,cache控制器必须决定是否要将数据linefill到cache中,并将相应的tag也linefill到cache中 。

  • read allocate

仅在读cache时分配cacheline。如果是写请求并且cache miss,则直接将数据写入到主存中,cache不受影响。

  • write allocate

更准确的说法应该是读写分配策略,在cache读或者cache写,并且miss时为该数据分配cacheline。该分配策略通常与处理器内核write-back写策略配合使用 。

替换策略

基于前面提到的分配策略,当cache未命中时,cache控制器必须为该数据分配一个cacheline。被选择的cacheline就是victim。如果victim包含有效的dirty数据,则必须先将该cacheline的内容写入主存,然后才能将新数据linefill到victim cacheline。整个替换的过程称为eviction。

替换策略控制着victim选择的过程,从备选的cache line中选择哪个cache line的策略。

  • Round-robin替换策略

会有一个victim counter,然后进行周期循环,选择相应的cache line,重点是实现公平性 。

  • Pseudo-random替换策略

随机选择一个cacheline进行替换。

  • Least Recently Used(LRU)替换策略

用于替换最近最少使用的cacheline。

写策略

当处理器内核执行store指令时,会对写入的地址执行cacheline的hit-miss check 。如果cache写 hit,cache会有两种选择 。

  • Write-through

这意味着cache和主存保持一致。由于在cache hit时直接对主存进行写入操作,相同的内存区域可能被频繁更新,Write-through策略通常比write-back策略要慢 。当然,目前写入不会直接写入到主存,会通过在cache和主存之间插入write buffer来隐藏往主存写数据的latency。如果我们预期不会马上访问这个数据,建议可以采用Write-through策略,不要将该数据填入到cache中 。

  • Write-back

在这种情况下,只对cache执行写操作,而不是直接对主存执行写操作。这意味着cache和主存中可以包含不同的数据。cache保存较新的数据,而主存保存包含较旧的数据 。

为了标记这些cacheline的新旧状态,每一个cacheline都有一个相关的dirty比特。当发生cache数据更新而不写入主存时,就会设置脏位。如果cache后来需要evict设置了dirty比特的cacheline,就需要将该cache line的数据写入主存。使用write-back写策略的可以显著减少对外部内存的访问,从而提高性能并节省功耗。但是,如果系统中有其他IP可以同时访问相同地址内存,则必须考虑cache一致性问题。

作者:验证哥布林
来源:芯片验证工程师

推荐阅读

更多数字IC设计技术干货等请关注数字芯片实验室专栏。添加极术小姐姐(微信:aijishu20)微信可申请加入IC设计交流群。
推荐阅读
关注数
12320
内容数
221
前瞻性的眼光,和持之以恒的学习~
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息