Chrome/Chromium 驱逐算法究竟是如何工作的?

Chrome/Chromium 驱逐算法究竟是如何工作的?

Chromium 磁盘缓存文档状态:

目前,我们有一个简单的最近最少使用算法,该算法一旦超过某个限制就会开始删除旧条目,还有第二个算法在驱逐条目之前考虑重用和年龄。

然而,当我在 Chrome 中测试一个有重复请求的网站时,我注意到当缓存已满时,一个 5 MB 的大文件会不断从缓存中被逐出,而较小的文件则会被保留在缓存中。

关于缓存驱逐的文档是否有误,或者对该行为还有其他解释吗?

答案1

解释很简单:Chrome(ium)不是使用“简单的最近最少使用算法”。

检查 Chromium 源文件 内存缓存.cpp 在其最后找到这行代码,其中包含打印出缓存的调试例程:

printf("LRU-SP lists in eviction order (Kilobytes decoded, Kilobytes encoded, Access count, Referenced, isPurgeable, wasPurged):\n");

LRU-SP 算法最早在论文中描述 LRU-SP:一种用于 Web 缓存的大小调整和流行度感知的 LRU 替换算法,在第二十四届年度国际计算机软件和应用程序会议上发表。

该算法的描述在文章中给出 各流行的网络浏览器采用什么样的缓存替换策略?,由 Felix Gessert 贡献:

LRU-SP 扩展了经典的最近最少使用 (LRU) 算法,将不同的对象大小 (1) 考虑在内。不考虑不同的延迟 (2)。LRU-FP 是 PSS(金字塔选择方案)的扩展。LRU-SP 算法的工作原理如下:

  • 每个对象 x 被分配到一个类:在此处输入图片描述
  • 每个类维护一个单独的 LRU 列表

  • 每次请求缓存对象时,它可能会根据上述公式更改类

  • 当需要替换对象时,该算法会查看每个 LRU 列表中最近最少使用(即最旧)的对象,并选择具有最小在此处输入图片描述 其中 R 是自上次获取缓存对象以来对该缓存对象的请求数

(1)恢复缓存

(2)LRU-SP:一种用于 Web 缓存的大小调整和流行度感知的 LRU 替换算法

我猜测,在您的情况下,公式“大小/访问次数”给出了一个很大的值,因为这是一个只访问过一次的大文件,所以这个 5 MB 的文件是第一个被驱逐的候选文件。

相关内容