论文连接 https://link.springer.com/article/10.1007/s11704-017-7119-0算法
这篇论文试图解决的问题是在cache 环节以前,prefetch-cache 进来的可能无关的 fingerprint 形成的cache pollution问题,便可能把没有用的 fingerprint 换入 cache,形成 cache 污染的问题。spring
这篇论文的贡献:提出了一种新的针对 prefetch 进来的 fingerprint 替换策略,而且提出了一种 adaptive 的方法,针对不一样的 fingerprint 有与其对应的替换策略,提升了 deduplication throughput 和 deduplication ratio. 本文并非试图提出一种新的对 fingerprint 如何进行 prefetch 的方法,而是针对不一样种类的,已经作过了 prefetch 操做的 fingerprint,针对他们不一样的种类,作不一样的replacement。同时,这种 replacement policy 并不和 LRU 等 policy 相冲突,反而能够和以前的 LRU policy 相结合。框架
具体方法框架如图所示:
ide
细节:针对一个被 prefetch 的 fingerprint 分为了两大类,一类是 accurate 的fingerprint,一类是 inaccurate 的fingerprint。accurate 的 fingerprint 是说那些prefetch 进 cache 以后,hit 了超过不止一次的 fingerprint,反之则是 inaccurate。对于 inaccurate fingerprint 又能够划分为不一样的种类,有 Unused prefetched fingerprint,used only once fingerprint,mixed pattern fingerprint,针对这三种不一样的 fingerprint,提出了不一样的替换策略,分别是 PreCache-UNU, PreCache-UOO,PreCache-MIX。不一样的替换策略都有不一样的假设,天然也有不一样的操做。fetch
PreCache-UNU 预测全部新被 prefetch 的 fingerprint 都不会被用到(distant future)因此应该直接要被 LRU 算法替换出去(evicted quickly)针对这些 fingerprint,采用的方法是把他们直接移动到 LRU queue 的尾端,这样当 LRU 进行替换的时候,他们就是第一批被替换出去的 fingerprint。若是这些被认为是 UNU 的fingerprint 被使用了(即这个时候咱们错误的划分了 fingerprint)那么根据 LRU 的规则他们也会被放到 head 端,这就是没有直接把这些 fingerprint 剔除的缘由。ui
PreCache-UOO 预测全部的新的被 prefetch 的 fingerprint 只会被使用一次,而后就不会被使用。因此,他把这些 fingerprint 放在 LRU 队列的 head 端,而且当这些 fingerprint 被 hit 的时候,并不会从新调整他们的位置。(由于预测他们只会被使用一次,若是调整了他们的位置,就和传统的并没有差异)。针对一些被 prefetch 进 cache,而且较长时间没有被使用,到快被替换出去的时候才被hit了一次,而后又不会被 hit 的fingerprint 而言,这种策略可以很快的将他们替换出去(由于并无调整他们的位置)。idea
PreCache-MIX 给全部的 fingerprint 一个统一的策略,放在 LRU 队列的 tail 端,而且即便命中也不会调整位置。blog
同时,还存在一个问题,针对一个 fingerprint,如何把它进行分类,如何去选择一个适合他的替换策略。提出了一种动态适应的选择器,能够根据预测的历史结果,动态选择合适的策略去替换不一样的 fingerprint。队列
选择器的功能:针对一个 fingerprint,去预测这个 fingerprint 是属于 accurate 仍是 inaccurate 的,若是是 inaccurate 的,那么是 UNU 的,仍是 UOO 的,仍是 MIX 的。get
选择器维护了几个计数器:
选择器主要的 idea:根据历史信息来预测。
每一个种类都有一个对应的判别阈值和公式去决定这个 prefetch 的 fingerprint 是不是对应的种类。
效果评估: 在 BLC 和 SiLO 这两个系统的基础上加入了 PreCache 算法,使用的数据是 Kernel,MacOS 和 Homes 三种。BLC 系统表明的是 exact deduplication 系统,SiLO 系统表明的是 near exact deduplication 系统,针对两个不一样的系统,采起的评价指标也不同。BLC 中,由于 fingerprint 没法彻底被存入cache,因此使用 look up index 的次数去评价系统,而 SiLO 由于 采用的是 sample feature 的方式,因此使用 deduplication ratio 去评价系统。