論文閱讀 Prefetch-aware fingerprint cache management for data deduplication systems

論文連接 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

選擇器維護了幾個計數器:

  • total 記錄了全部被 prefetch 的 fingerprint 個數。
  • use_over_once,記錄了cache中全部被 hit 超過一次的 fingerprint 的個數
  • unused,記錄了被 prefetch 的,可是沒有被使用的 fingerprint 的個數。
  • Use_only_once 記錄了只被使用過一次的 fingerprint 的個數。
  • hit_evice_buf 記錄了一個main cache miss 在 evicted 中被 hit 的個數。

選擇器主要的 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 去評價系統。

相關文章
相關標籤/搜索