近似最优缓存替换算法

缓存替换算法有很多种,FIFO是最简单的,LRU是最常用的,最优缓存替换算法则是命中率最佳的。因为我们无法预知数据的未来访问模式,通常最优替换算法是无法实现的。然而数据恢复则是例外:在备份的过程中,我们已经知道数据恢复的顺序。既然如此,何不通过最优缓存替换算法进一步改善命中率。

数据去重原型系统destor里面已经实现了LRU缓存,并且工作得还不错,尽管如此,我仍然想看看最优替换算法能获得怎样的效果。

1.种子文件


备份的过程中,我记录下container的访问顺序,称之为种子文件,每个种子代表访问一个container。种子文件会作为最优替换算法的输入。

2.滑动窗口

如果我们一次性读取整个种子文件,就可以看到恢复作业的整个未来,据此执行替换,我们就实现了最优缓存替换算法。然而种子文件可能很大,一次性分析需要较多内存和时间,因此引入“滑动窗口”概念。

滑动窗口是一段固定长度的种子,替换算法只参考窗口内的未来决定替换谁。每处理完一个种子,滑动窗口移动一格。



此算法可认为是近似最优缓存替换算法,当窗口的大小等于整个种子文件时,进化为最优缓存替换算法。窗口的大小时算法的一个可调参数。

3.与LRU相比

  • 相同的内存,可以获得更高命中率;
  • 相同的命中率,使用更少的内存。

4.实验





这是linux源码和vmdk的实验结果,窗口大小是1000,纵坐标是实际读取的container数量。近似最优替换算法比LRU整体要更好,优势逐渐扩大。在后期作业中,节约比例超过10%。

posted on 2013-09-10 16:22  OpenNaive  阅读(1304)  评论(0编辑  收藏  举报

导航