Linux 内核中使用哪些页面替换算法来进行操作系统文件缓存?

Linux 内核中使用哪些页面替换算法来进行操作系统文件缓存?

Linux 使用内存中未使用的部分进行文件缓存,并在需要时清理空间。

我的问题是它如何选择受害者页面进行替换?有多种算法(LRU、FIFO、LFU 和随机替换)

我想知道 1)Linux 内核中使用什么页面替换算法来进行操作系统文件缓存?

2)如果可能的话,我想知道Linux内核随着时间的推移它是如何演变的。我认为考虑到趋势的“合理”变化,其算法和实现可能会随着时间的推移而改变。我怎样才能找到那些?我需要阅读内核源代码吗?

答案1

Linux 内存管理(“MM”)似乎确实有点神秘且难以追踪。

Linux 文献在内存管理方面大量提到了 LRU(最近最少使用)。我没有注意到提到的任何其他术语。

我发现一个有趣的介绍(前四段)本文在无与伦比的 LWN.net 上。它解释了如何在虚拟内存实践中实现基本的 LRU。阅读。

真正的 LFU(最不常用)替换对于虚拟内存来说并不实用。当mmap()用于访问文件缓存页面时,内核无法计算页面的每次读取- 例如,这是大多数程序加载到内存中的方式。性能开销会太高。


为了超越这个简单的概念,这里有一个关于 Linux 版本 2.6.28-32 的设计概要:

http://linux-mm.org/PageReplacementDesign

它表明 Clock-PRO 用于文件页面。上面有一张原始纸。有一个老时钟PRO的描述在 LWN.net 上,再次包含一些实际的实现细节。显然,Clock-PRO“试图超越 LRU 方法”,其变体“在大多数系统中使用”。它似乎更加重视频率。

Linux-mm还有另一个在Linux中实现Clock-PRO的设计文档。这个并没有谈论它被合并;它是书面几个月前,LWN 发表了一篇有关它的文章。 http://linux-mm.org/ClockProApproximation

最近的描述是 Linux 只是“使用了一些想法”来自 Clock-PRO,实际上是“混合了许多不同的算法,并进行了一些修改以捕捉极端情况和各种优化”

上述引用已回答了一个问题阿德里安·麦克梅纳明。麦克梅纳明继续完成了硕士项目2011年,测试基于“工作集模型”的Linux页面替换修改。它包括 Linux 页面替换的简要描述。 “LRU 的变体”被命名为“用于数据库管理的 2Q [双队列]方法”,提供了许多参考文献,并且有一个图表说明了两个队列之间的移动和其他状态转换。他还将 Linux 描述为使用 CLOCK-PRO 的部分实现。

我预计 LRU 概念,而不是你提到的其他可能性,是从一开始就建立的。最重要的变化是引入了基于 Clock-PRO 的功能,即更加重视频率。

2013 年,Linux 获得了“基于崩溃检测的文件缓存大小调整”。这可能也与问题相关。

相关内容