IBM的顺序流预取算法SARC的思考与困惑

本文详细介绍了IBM的顺序流预取算法SARC的实现原理,包括命中策略、预取部分及替换策略。通过理解算法的工作流程,读者能够深入掌握如何在缓存管理中有效提升数据访问效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SARC为IBM的顺序流预取算法。现在想实现这个算法,但是最大的困惑是如何才能保证替换线程可以很好的完成任务。

该Cache算法中的元素是以块(页面)为元素进行存储的。

1.RANDOM 命中

将该元素放到RANDOM的MRU端

2.SEQ命中

调整参数,然后放到MRU端,并重新计算SeqCount。

若SeqCount(i-1)=0 SeqCount(i)=1

3.两个链表都未命中

3.1 x-1在缓存中,

如果块号为x-1已经达到了阈值,预取出x,x+m,并放入到SEQ中。

否则放入到RANDOM,更新SeqCount=SeqCount(x-1)+1

3.2如果x-1未在缓存中,则设置SeqCount(x)=1


预取部分的实现


替换部分的实现

这个算法是需要预先为cache申请空间的,因为如果不预先申请空间,FreeQ的长度就会一直为0, 然后会将刚刚放入到里面的元素evict掉,length=1,但是此时又有新的请求要读页面,那么length又等于0。但是如果刚开始给FreeQ的长度设置为2000,为系统预留内存空间2G(块大小为1M),FreeQThreshold=5 ,那么在最开始的时候SARC里面的块就不会被无辜替换了。直到空间都消耗完了,length<5的时候,这时会调用替换算法替换出较早的页面或者自适应的替换掉SEQ中超过desire长度的部分。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值