自适应替换缓存算法

时间:2015-06-05 16:46:39

标签: algorithm caching cloud policies page-replacement

我正在尝试实现Adaptative Replacement Cache算法,但是,我正在阅读文献,我无法理解算法。任何人都可以解释我的算法? 我看到它使用两个列表L1表示频率,L2表示新近度。但T1,B1和T2,B2为L1和L2列表,我无法理解。

本文中的

ftp://paranoidbits.com/ebooks/Outperforming%20LRU%20with%20an%20Adaptive%20Replacement%20Cache.pdf我看到了这些信息。

2 个答案:

答案 0 :(得分:9)

我想强调一些关键的想法,并帮助你跟进论文的叙述。这应该有助于你发展一些关于ARC的直觉。

我们从大小为 c 的LRU缓存开始。除了页面缓存之外,我们还维护一个大小为 c 缓存目录 T ,它只是一个元数据数组,描述了缓存。例如,页面元数据包含存储介质中页面的物理地址。

现在,请注意LRU不具有扫描抗性。如果进程提取了一系列 c 页面,则缓存中的每个页面都将被逐出。这不是非常有效,我们希望能够针对新近度和频率进行优化。

关键理念#1:将缓存拆分为2个列表: T1 T2 T1 包含最近使用的页面, T2 包含常用页面。这是抗扫描的,因为扫描会导致 T1 被清空,但 T2 基本上不受影响。

当缓存已满时,算法必须选择从 T1 T2 中驱逐受害者。请注意,这些列表不必具有相同的大小,并且我们可以根据访问模式智能地将更多缓存提供给最近的页面或频繁页面。你可以在这里发明自己的启发式。

关键理念#2:保留额外的历史记录。让 B1 B2 分别跟踪来自 T1 T2 的被驱逐页面的元数据。如果我们在 T1 中发现许多缓存未命中,这些缓存未命中 B1 ,我们会对驱逐感到遗憾,并将更多缓存提供给 T1 。< / p>

ARC保留一个 p 号码,以便在 T1 T2 之间拆分缓存。

关键想法#3:在 T1 中的缓存未命中以及 B1 中的命中时,ARC增加 p \frac{|B_2|}{|B_1|}。这是“delta”或“后悔率”,它将 B1 中的命中概率与 B2 中命中的概率进行比较,假设均匀分布所有页面。

答案 1 :(得分:3)

T1和T2保存正在缓存的实际数据。 T1保存已经引用一次的所有数据(页面)。 T2保存已被引用2次或更多次的页面。 B1是一个重影列表,用于记住曾经在T1缓存中的哪些页面。 B2是相同的,仅适用于T2缓存。当您将T1和B1一起添加时,您将获得一组(称为L1)对已被或当前被缓存的页面的引用,因为它们被引用一次。 L2也是如此,只有它包含至少两次引用哪些页面的引用。

T1和T2共享一组固定大小的插槽(每个插槽可以容纳一页),我们使用B1和B2来决定如何在T1和T2之间共享这些插槽。这就是ARC自适应的原因 - 自动调整谁获得最多的插槽。如果B1拥有对同一页面的多个引用,则意味着我们不允许T1长时间保持其页面,并且应该允许更多的时隙来对抗此问题。 B2也是如此。

我不会尝试在这里解释整个算法,但这至少是我对ARC列表的理解。