Caffeine - Performance - Efficiency

效率

Least Recently Used 是一种流行的剔除策略,它简单且在通用场景下有良好的命中率。然而,在典型的工作负载中,LRU并不是最优的,并且在诸如全扫描的情况下命中率可能很差。以下各节对经过广泛评估的最佳替代(策略)进行了比较。为简洁起见,仅讨论执行时间复杂度为O(1)的前三个策略。这不包括基于时钟的策略,该策略以最坏情况下O(n)时间复杂度为代价,以便更易于并发实现。

Caffeine使用Window TinyLfu策略,因为它命中率高且内容占用量少。

自适应替换缓存(Adaptive Replacement Cache)

ARC 使用一个队列来(保存)查看一次的条目,一个队列来(保存)查看多次的条目,非常驻队列(保存)正在被监控的剔除条目。队列的最大大小根据工作负载模式和缓存的有效性进行动态调整。

该策略易于实施,但需要将缓存大小加倍才能保留剔除的key。它也已经获得专利,没有IBM的许可协议不得使用。

LIRS(Low Inter-reference Recency Set)

LIRS通过参照新近度(IRR)来组织块,并将条目分组为低参照新近度(LIR)和高参照新近度(HIR)。LIR最好保留在缓存中,剔除的HIR条目可以保留为非常驻HIR条目。这允许在缓存丢失后不久将非常住HIR条目提升为LIR条目。

该策略实施起来很复杂,并且仅当 缓存的大小增加到三倍以保留剔除key时 才能实现其最大效率。

Window TinyLfu

W-TinyLfu使用小型的准入LRU,如果(条目)被TinyLfu准入策略接受,则将其剔除到较大的分段LFU。TinyLfu依靠频率草图(frequency sketch) 来概率性的估计条目的历史使用情况。当条目显示新近爆发时,窗口将使该策略具有较高的命中率,否则将被拒绝。窗口与主空间的大小使用爬山优化算法进行自适应。此配置使缓存能够以较低的开销来估计条目的频率和新近度。

此实现使用4为CountMinSketch,以每个缓存条目为8字节的速度增长以确保准确性。与ARC和LIRS不同,此策略不保留剔除key。

模拟

将剔除策略与Bélády’s理论上限的最佳策略进行比较。描述了所有评估跟踪的子集以提供一系列工作负载。

Wikipedia

WikiBench提供了向Wikipedia发出的所有用户请求的10%的痕迹。
在这里插入图片描述

Glimpse

此跟踪由LIRS算法的作者提供,并具有循环访问模式。
在这里插入图片描述

Database

此跟踪由ARC算法的作者提供,并被描述为“在商业站点上运行的数据库服务器,该服务器在商业数据库之上运行ERP应用程序。”
在这里插入图片描述

Search

该跟踪由ARC算法的作者提供,并被描述为“大型商业搜索引擎响应各种Web搜索请求而发起的磁盘读取访问”。
在这里插入图片描述

OLTP

此跟踪由ARC算法的作者提供,并且“在一个小时内包含对CODASYL数据库的引用”。
在这里插入图片描述

Adaptivity (自适应性)

该工作负载在新近度偏斜的轨迹(Corda)和频率偏斜的轨迹(5x Lirs’loop)之间转换。 这表明W-TinyLfu具有重新配置自身的能力。
在这里插入图片描述

结论

Window TinyLfu提供接近最佳的命中率,并且与ARC和LIRS竞争。 它在保持简单的同时做到了这一点,不需要非常驻条目,并且占用的内存少。 该策略对各种工作负载的LRU进行了实质性改进,使其成为通用缓存的不错选择。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值