ARM技术论坛
直播中

laisvl

9年用户 1144经验值
私信 关注
[经验]

浅析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一致性问题。

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

更多回帖

发帖
×
20
完善资料,
赚取积分