緩存算法和緩存策略的介紹

緩存算法:緩存法通過設計良好的數據分塊、預取、順序預取、緩存替換等算法來提高對緩存內容的命中率。緩存算法可以分爲基於訪問時間的策略、基於訪問頻率的策略、訪問時間與頻率兼顧策略、時間距離分佈策略等類型。另有基於數據訪問模式、基於VoD系統架構的策略等。

緩存策略:緩存策略主要三方面:①緩存什麼內容;②何時進行緩存;③當緩存空間已滿時如何進行替換,即緩存替換算法。

對於第二方面,大部分緩存算法使用預取策略來提前將部分磁盤數據放入緩存,以進一步減少磁盤I/O,加大緩存命中率。通過記錄、分析以往的數據請求模式來預測將來可能被請求到的數據段,將訪問可能性大的數據段放入緩存。

相比於其他應用,VoD視頻點播存在很強的順序數據訪問模式:即在用戶不進行VCR操作的情況下,對整個影片文件的各部分依次順序訪問,訪問過的數據很少再次進行訪問。此種數據訪問模式是在設計VoD緩存算法時必須要考慮的。所以順序預取方式適用於VoD系統。

緩存策略的數據塊分割:

首部緩存和分塊緩存策略普遍應用於VoD影片文件。首部緩存將影片文件開始的一部分放入緩存以減小點播用戶的啓動延遲,對於影片文件其他部分的訪問需要直接讀取磁盤

分塊緩存通過將影片文件切分成小塊,以塊爲單位進行緩存操作。分塊緩存分爲定長分塊與變長分塊。定長分塊將文件切分爲大小相同的塊,變長分塊如文獻[1],變長算法是基於影片文件越靠後的部分被訪問的概率越低的推斷,將文件按照首尾位置分塊,各塊大小按指數遞增。

但以上定長與變長分塊均忽略了兩點:①影片文件會存在一些“熱點片段”而這些熱點片段並不均處於影片首部;②同一影片內“熱點片段”的熱度會隨着時間不斷改變,不同影片的熱度也隨時間不斷變化。

需設計良好的算法自適應影片熱點的不同位置與變化。

緩存策略的分類:

由於不同系統的數據訪問模式不盡相同,同一種緩存策難以在各種數據訪問模式下均取得滿意性能,

研究人員提出不同緩存策略以適應不同需求。緩存策略可分爲以下幾類:

基於訪問時間:此類算法按各緩存項的被訪問時間來組織緩存隊列,決定替換對象。如LRU。

基於訪問頻率:此類算法用緩存項的被訪問頻率來組織緩存。如LFU、LRU-2、2Q、LIRS。

訪問時間與頻率兼顧:通過兼顧訪問時間與頻率,使得在數據訪問模式變化時緩存策略仍有較好性能。如FBR、LRFU、ALRFU。多數此類算法具有一個可調或自適應參數,通過該參數的調節使緩存策略在基於訪問時間與頻率間取得一定平衡。

基於訪問模式:某些應用有較明確的的數據訪問特點,進而產生與其相適應的緩存策略。如專爲VoD系統設計的A&L緩存策略,同時適應隨機、順序兩種訪問模式的SARC策略。

基於訪問時間的緩存策略:LRU (LeastRecentlyUsed)是一種應用廣泛的緩存算法。該算法維護一個緩存項隊列,隊列中的緩存項按每項的最後被訪問時間排序。當緩存空間已滿時,將處於隊尾,即刪除最後一次被訪問時間距現在最久的項,將新的區段放入隊列首部。

但LRU算法僅維護了緩存塊的訪問時間信息,沒有考慮被訪問頻率等因素,在某些訪問模式下無法獲得理想命中率。例如對於VoD系統,在沒有VCR操作的情況下,數據被由前至後順序訪問,已訪問過的數據不會被再次訪問。所以LRU算法將最新被訪問的數據最後被替換不適用於VoD系統。

基於訪問頻率的緩存策略:

LFU (LeastFrequentlyUsed)按每個緩存塊的被訪問頻率將緩存中的各塊排序,當緩存空間已滿時,替換掉緩存隊列中訪問頻率最低的一項。與LRU的缺點類似, LFU僅維護各項的被訪問頻率信息,對於某緩存項,如果該項在過去有着極高的訪問頻率而最近訪問頻率較低,當緩存空間已滿時該項很難被從緩存中替換出來,進而導致命中率下降。

LRU-2[2, 3]算法記錄下每個緩存頁面最後兩次被訪問的時間。替換頁面時替換掉倒數第二次訪問時間距現在最久的一項。

在IRM (IndependentReferenceModel)訪問模式下,LRU-2有着最好的預期命中率,由於LRU-2算法要維護一個優先級隊列,所以該算法複雜度爲logN(N爲緩存隊列中緩存項的數量)。

2Q[4](2 Queues)使用LRU隊列替換了LRU-2中的優先級隊列,將算法時間複雜度由logN降爲常數,且維護緩存項的各信息所需空間比LRU-2小。

LIRS[5](Low Inter-ReferenceRecency Set)維護一個變長的LRU隊列,該隊列的LRU端爲最近至少被訪問過2次的第Llirs項(Llirs爲算法參數)。LIRS算法在IRM訪問模式下可以獲得很高的命中率,但對於SDD訪問模式效率明顯下降。

對於VoD系統,基於訪問頻率的策略可以捕捉到熱點影片片段,使得對熱點片段的大量請求免於進行緩慢的磁盤I/O。但影片熱點會隨時間不斷變化,且此類策略無法利用VoD的順序訪問模式,所以純粹以訪問頻率爲度量來進行替換操作不適合VoD系統。

兼顧訪問時間與頻率:

FBR[6](Frequency Based Replacement)維護一個LRU隊列,並將該隊列分爲New、Middle、Old三段。對隊列中的每一緩存項均維護一個計數值。當緩存中的一項被命中時,被命中的緩存項被移至New段的MRU端,如果該項原本位於Old或Middle段,則其計數值加1,原位於New段則計數值不變。當進行替換操作時,刪除Old段計數值最小的一項(LRU端)。

LRFU[7](LeastRecently FrequentlyUsed)爲每一個緩存項維護一個權值C(x),其初始值爲0, C(x)按以下公式變化。

在t時刻, C(x) =1+2-λC(x): x被訪問到2-λC(x) : x未被訪問進行替換操作時,C(x)值最小的一項被刪除。當時, LRFU算法行爲類似於LFU;而當時,該算法行爲逼近LRU算法。該算法通過選用合適的λ值來獲得時間與頻率因素的平衡。

LRFU雖然通過一個值來兼顧訪問時間與頻率因素,但由於值固定,當訪問模式變化時,該算法無法做出相應的調整而造成性能下降。ALRFU[8](Adaptive LRFU)在此方面對LRFU進行了改進。通過對數據訪問模式的歷史進行監控,ALRFU動態調整值來適應數據訪問模式的改變,表現出比LRFU更好的適應性。

基於訪問模式的緩存策略:

文獻[9]針對VoD系統的特點提出A&L算法。該算法通過記錄每個緩存項的歷史訪問時間與訪問數量來估計該項的未來被訪問頻率。以該頻率值爲度量,在進行緩存替換時替換掉該值最小的一項。由於該算法考慮了VoD系統的數據訪問特點,所以廣泛應用於VoD系統。

但A&L算法通過直接計算緩存區段生成以來的總的訪問數量、頻率來生成緩存權值,沒有考慮VoD影片的訪問熱點會隨時間不斷變化。當某些緩存區段歷史訪問頻率較高但最近訪問頻率下降時,仍保持較大權值,影響新的熱點片段的緩存,無法適應影片熱點的動態變化。

IBM提出的SARC[10]是針對於大型服務器的緩存算法,可在隨機訪問與順序訪問的數據訪問模式下做出動態適應。SARC通過將隨機訪問與順序訪問分爲兩個隊列分別管理來實現對兩種不同訪問模式的適應。並通過分析緩存大小-命中率的仿真試驗數據曲線,得出對隨機隊列與順序隊列項分別進行替換的代價函數。當進行緩存替換時,通過兩隊列的代價函數來對代價小的隊列進行替換。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章