只讀緩存的去冗余系統(tǒng)及方法以及緩存的去冗余方法
【專利摘要】本發(fā)明涉及一種只讀緩存的去冗余系統(tǒng)、只讀緩存的去冗余方法和緩存的去冗余方法,所述去冗余系統(tǒng)包括主控模塊、數(shù)據(jù)塊和索引模塊,數(shù)據(jù)塊與索引模塊一一對應(yīng),索引模塊內(nèi)設(shè)有緩存替換信息單元和數(shù)據(jù)地址標(biāo)簽單元,索引模塊內(nèi)還設(shè)有數(shù)據(jù)塊哈希值單元,數(shù)據(jù)地址標(biāo)簽單元內(nèi)設(shè)有多個的數(shù)據(jù)地址標(biāo)簽,同一數(shù)據(jù)地址標(biāo)簽單元中所有的數(shù)據(jù)地址標(biāo)簽在緩存中均指代對應(yīng)的同一數(shù)據(jù)塊。本發(fā)明通過計算比較每個數(shù)據(jù)塊的哈希值,尋找并合并冗余數(shù)據(jù),同時給每個數(shù)據(jù)塊增加了多個數(shù)據(jù)地址標(biāo)簽,以達到對應(yīng)不同數(shù)據(jù)地址的冗余數(shù)據(jù)塊在緩存中共享一個數(shù)據(jù)塊的目的,節(jié)省了緩存的存儲空間。
【專利說明】只讀緩存的去冗余系統(tǒng)及方法以及緩存的去冗余方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及電數(shù)據(jù)存儲及處理【技術(shù)領(lǐng)域】,尤其涉及一種只讀緩存的去冗余系統(tǒng)、只讀緩存的去冗余方法和緩存的去冗余方法。
【背景技術(shù)】
[0002]緩存的數(shù)據(jù)存儲于高速存儲介質(zhì)中,數(shù)據(jù)通常以數(shù)據(jù)塊的形式在緩存中管理,每個數(shù)據(jù)塊需要使用數(shù)據(jù)地址標(biāo)簽來存儲數(shù)據(jù)使用者在訪問低速存儲介質(zhì)時使用的數(shù)據(jù)地址,為了實現(xiàn)高效的緩存替換算法,每個數(shù)據(jù)塊還需要存儲一些緩存替換信息。在典型的緩存設(shè)計中,大部分緩存存儲空間被數(shù)據(jù)塊占用,緩存替換信息和數(shù)據(jù)地址標(biāo)簽只占用少量空間。由于高速存儲介質(zhì)的價格昂貴,緩存的數(shù)據(jù)存儲容量通常遠小于低速存儲介質(zhì),在高速存儲介質(zhì)性能一定的情況下,緩存對系統(tǒng)性能的幫助很大程度上取決于緩存的數(shù)據(jù)存儲容量,因此提高緩存的有效數(shù)據(jù)容量將提高系統(tǒng)的整體性能。
[0003]現(xiàn)有緩存設(shè)計中每個數(shù)據(jù)塊都對應(yīng)于某個訪問低速存儲介質(zhì)時使用的數(shù)據(jù)地址,該地址存儲于緩存的數(shù)據(jù)地址標(biāo)簽中。緩存通過該地址來判斷數(shù)據(jù)使用者需要訪問的數(shù)據(jù)是否已經(jīng)存儲在緩存中,在很多緩存應(yīng)用中,不同數(shù)據(jù)地址標(biāo)簽對應(yīng)的數(shù)據(jù)塊內(nèi)容是相同的,這些為冗余數(shù)據(jù)塊,對于這些冗余數(shù)據(jù)塊,緩存仍然給每個數(shù)據(jù)塊都分配存儲空間,造成了緩存存儲空間的浪費。
【發(fā)明內(nèi)容】
[0004]本發(fā)明所要解決的技術(shù)問題是針對現(xiàn)有技術(shù)存在的上述問題,提供了一種提高緩存有效容量的只讀緩存的去冗余系統(tǒng)、只讀緩存的去冗余方法和緩存的去冗余方法。
[0005]為解決上述問題,本發(fā)明的一種技術(shù)方案是:
[0006]一種只讀緩存的去冗余系統(tǒng),包括主控模塊、若干用于存儲數(shù)據(jù)的數(shù)據(jù)塊和若干用于索引數(shù)據(jù)塊的索引模塊,主控模塊分別與數(shù)據(jù)塊和索引模塊相連,數(shù)據(jù)塊與索引模塊一一對應(yīng),索引模塊內(nèi)設(shè)有用于存儲數(shù)據(jù)塊訪問記錄的緩存替換信息單元和用于存儲低速存儲介質(zhì)上訪問數(shù)據(jù)地址的數(shù)據(jù)地址標(biāo)簽單元,所述索引模塊內(nèi)還設(shè)有用于存儲數(shù)據(jù)塊哈希值的數(shù)據(jù)塊哈希值單元,主控模塊計算數(shù)據(jù)塊的哈希值并將哈希值寫入數(shù)據(jù)塊哈希值單元中存儲,所述數(shù)據(jù)地址標(biāo)簽單元內(nèi)設(shè)有多個的數(shù)據(jù)地址標(biāo)簽,同一數(shù)據(jù)地址標(biāo)簽單元中所有的數(shù)據(jù)地址標(biāo)簽在低速存儲介質(zhì)上指代的數(shù)據(jù)內(nèi)容相同,同一數(shù)據(jù)地址標(biāo)簽單元中所有的數(shù)據(jù)地址標(biāo)簽在緩存中均指代對應(yīng)的同一數(shù)據(jù)塊。
[0007]優(yōu)選地,所述緩存替換信息單元內(nèi)存儲有數(shù)據(jù)塊的訪問記錄和數(shù)據(jù)冗余度,所述數(shù)據(jù)冗余度為數(shù)據(jù)地址標(biāo)簽單元中有效數(shù)據(jù)地址標(biāo)簽的個數(shù)。
[0008]相比較于現(xiàn)有技術(shù),本發(fā)明的只讀緩存的去冗余系統(tǒng)通過計算比較每個數(shù)據(jù)塊的哈希值,尋找并合并冗余數(shù)據(jù),同時給每個數(shù)據(jù)塊增加了多個數(shù)據(jù)地址標(biāo)簽,這些數(shù)據(jù)標(biāo)簽用于存儲數(shù)據(jù)內(nèi)容相同的數(shù)據(jù)塊所對應(yīng)的數(shù)據(jù)使用者在訪問低速存儲介質(zhì)時使用的數(shù)據(jù)地址,以達到對應(yīng)不同數(shù)據(jù)地址的冗余數(shù)據(jù)塊在緩存中共享一個數(shù)據(jù)塊的目的,節(jié)省了緩存的存儲空間。
[0009]本發(fā)明的另一種技術(shù)方案是:
[0010]一種只讀緩存的去冗余方法,所述方法基于上述提及的去冗余系統(tǒng),所述方法包括如下步驟:
[0011]a)主控模塊讀取數(shù)據(jù)時,根據(jù)讀取的訪問數(shù)據(jù)地址,搜索只讀緩存中所有數(shù)據(jù)地址標(biāo)簽單元中的數(shù)據(jù)地址標(biāo)簽,若數(shù)據(jù)地址標(biāo)簽單元中包含所述訪問數(shù)據(jù)地址,則讀取訪問數(shù)據(jù)地址對應(yīng)數(shù)據(jù)塊中的數(shù)據(jù)并將數(shù)據(jù)返回到主控模塊,同時更新緩存替換信息單元中的替換信息,否則,進入步驟b;
[0012]b)從低速存儲介質(zhì)中讀取所述訪問數(shù)據(jù)地址對應(yīng)的訪問數(shù)據(jù)并將數(shù)據(jù)返回到主控模塊,同時主控模塊計算訪問數(shù)據(jù)的哈希值;
[0013]c)將訪問數(shù)據(jù)的哈希值與緩存中所有數(shù)據(jù)塊哈希值單元中的哈希值進行比較,若緩存中包含訪問數(shù)據(jù)的哈希值,則將所述訪問數(shù)據(jù)地址存儲到哈希值相同的索引模塊的數(shù)據(jù)地址標(biāo)簽單元中,同時更新緩存替換信息單元中的替換信息,否則,進入步驟d ;
[0014]d)檢測緩存是否已滿,若緩存未滿,將所述訪問數(shù)據(jù)寫入緩存的數(shù)據(jù)塊中,進入步驟e,否則,根據(jù)緩存替換算法選擇需要被替換的數(shù)據(jù)塊,將訪問數(shù)據(jù)寫入需要被替換的數(shù)據(jù)塊中,進入步驟e;
[0015]e)更新與步驟d中數(shù)據(jù)塊對應(yīng)的索引模塊,將所述訪問數(shù)據(jù)地址存儲到數(shù)據(jù)地址標(biāo)簽單元中,更新緩存替換信息單元中的替換信息,并將步驟b中計算得到的哈希值寫入數(shù)據(jù)塊哈希值單元中存儲。
[0016]優(yōu)選地,所述更新緩存替換信息單元中的替換信息具體為:更新數(shù)據(jù)塊的訪問記錄和數(shù)據(jù)冗余度,所述數(shù)據(jù)冗余度為數(shù)據(jù)地址標(biāo)簽單元中有效數(shù)據(jù)地址標(biāo)簽的個數(shù)。
[0017]優(yōu)選地,所述步驟d中的緩存替換算法具體為:將緩存中所有數(shù)據(jù)塊根據(jù)數(shù)據(jù)冗余度從低到高進行排序,選擇數(shù)據(jù)冗余度相同且數(shù)據(jù)冗余度最低的數(shù)據(jù)塊,采用LRU算法計算出需要被替換的數(shù)據(jù)塊。
[0018]優(yōu)選地,所述哈希值是采用哈希函數(shù)計算得到,哈希函數(shù)為MD5、SHA或SHA256中的一種。
[0019]相比較于現(xiàn)有技術(shù),本發(fā)明的只讀緩存的去冗余方法通過數(shù)據(jù)塊哈希值比較尋找并合并冗余數(shù)據(jù),同時給每個數(shù)據(jù)塊增加了多個數(shù)據(jù)地址標(biāo)簽,這些數(shù)據(jù)標(biāo)簽用于存儲數(shù)據(jù)內(nèi)容相同的數(shù)據(jù)塊所對應(yīng)的數(shù)據(jù)使用者在訪問低速存儲介質(zhì)時使用的數(shù)據(jù)地址,以達到對應(yīng)不同數(shù)據(jù)地址的冗余數(shù)據(jù)塊在緩存中共享一個數(shù)據(jù)塊的目的,節(jié)省了緩存的存儲空間,同時結(jié)合數(shù)據(jù)的冗余度優(yōu)化了緩存替換算法。
[0020]本發(fā)明的再一種技術(shù)方案是:
[0021]一種緩存的去冗余方法,所述方法基于權(quán)利要求1所述的去冗余系統(tǒng),所述方法包括操作類型判斷步驟、讀操作去冗余步驟和寫操作步驟,具體為:
[0022]操作類型判斷步驟:判斷主控模塊的操作類型,若是讀操作,則進入讀操作去冗余步驟,若是寫操作,則進入寫操作步驟;
[0023]讀操作去冗余步驟:根據(jù)讀操作的訪問數(shù)據(jù)地址,判斷訪問數(shù)據(jù)地址是否已保存在只讀緩存或讀寫緩存中,若訪問數(shù)據(jù)地址均不在只讀緩存和讀寫緩存中,則進入步驟A,若訪問數(shù)據(jù)地址已保存在讀寫緩存中存儲,則進入步驟B,若訪問數(shù)據(jù)地址已保存在只讀緩存中,則進入步驟C,否則,返回操作類型判斷步驟;
[0024]寫操作步驟:根據(jù)寫操作的訪問數(shù)據(jù)地址,判斷訪問數(shù)據(jù)地址是否已保存在只讀緩存和讀寫緩存中,若訪問數(shù)據(jù)地址均不在只讀緩存和讀寫緩存中,則進入步驟B,若訪問數(shù)據(jù)地址已保存在讀寫緩存中存儲,則進入步驟B,若訪問數(shù)據(jù)地址已保存在只讀緩存中,則進入步驟D,否則,返回操作類型判斷步驟;
[0025]A)從低速存儲介質(zhì)中讀取所述訪問數(shù)據(jù)地址對應(yīng)的訪問數(shù)據(jù)并將數(shù)據(jù)返回到主控模塊,同時主控模塊計算訪問數(shù)據(jù)的哈希值;將訪問數(shù)據(jù)的哈希值與只讀緩存中所有數(shù)據(jù)塊哈希值單元中的哈希值進行比較,若只讀緩存中包含訪問數(shù)據(jù)的哈希值,則將所述訪問數(shù)據(jù)地址存儲到哈希值相同的索引模塊的數(shù)據(jù)地址標(biāo)簽單元中,同時更新緩存替換信息單元中的替換信息,返回操作類型判斷步驟,否則,進入步驟Al ;
[0026]Al)檢測只讀緩存是否已滿,若緩存未滿,將所述訪問數(shù)據(jù)寫入緩存的數(shù)據(jù)塊中,進入步驟A2,否則,根據(jù)緩存替換算法選擇需要被替換的數(shù)據(jù)塊,將訪問數(shù)據(jù)寫入需要被替換的數(shù)據(jù)塊中,進入步驟A2;
[0027]A2)更新與步驟Al中數(shù)據(jù)塊對應(yīng)的索引模塊,將所述訪問數(shù)據(jù)地址存儲到數(shù)據(jù)地址標(biāo)簽單元中,更新緩存替換信息單元中的替換信息,并將步驟A中計算得到的哈希值寫入數(shù)據(jù)塊哈希值單元中存儲,返回操作類型判斷步驟;
[0028]B)由讀寫緩存處進行讀寫訪問,返回操作類型判斷步驟;
[0029]C)根據(jù)讀取的訪問數(shù)據(jù)地址,讀取訪問數(shù)據(jù)地址對應(yīng)數(shù)據(jù)塊中的數(shù)據(jù)并將數(shù)據(jù)返回到主控模塊,同時更新緩存替換信息單元中的替換信息,返回操作類型判斷步驟;
[0030]D)在只讀緩存中刪除寫操作地址對應(yīng)的數(shù)據(jù)地址標(biāo)簽,返回步驟B。
[0031]優(yōu)選地,所述更新緩存替換信息單元中的替換信息具體為:更新數(shù)據(jù)塊的記錄和數(shù)據(jù)冗余度,所述數(shù)據(jù)冗余度為數(shù)據(jù)地址標(biāo)簽單元中有效數(shù)據(jù)地址標(biāo)簽的個數(shù)。
[0032]優(yōu)選地,所述步驟Al中的緩存替換算法具體為:將緩存中所有數(shù)據(jù)塊根據(jù)數(shù)據(jù)冗余度從低到高進行排序,選擇數(shù)據(jù)冗余度相同且數(shù)據(jù)冗余度最低的數(shù)據(jù)塊,采用LRU算法計算出需要被替換的數(shù)據(jù)塊。
[0033]相比較于現(xiàn)有技術(shù),本發(fā)明的緩存的去冗余方法適用于緩存的讀操作和寫操作,通過讀寫操作的區(qū)分及訪問地址的存儲位置來判斷是否應(yīng)用只讀緩存去冗余方法,針對于只讀緩存,使用數(shù)據(jù)塊哈希值比較尋找并合并冗余數(shù)據(jù),同時給每個數(shù)據(jù)塊增加了多個數(shù)據(jù)地址標(biāo)簽,以達到對應(yīng)不同數(shù)據(jù)地址的冗余數(shù)據(jù)塊在緩存中共享一個數(shù)據(jù)塊的目的,節(jié)省了緩存的存儲空間,同時結(jié)合數(shù)據(jù)的冗余度優(yōu)化了緩存替換算法,針對于讀寫緩存則采用普通緩存方式,該方法尤其適合文件和磁盤等需要支持讀寫操作的緩存。
【專利附圖】
【附圖說明】
[0034]圖1是本發(fā)明只讀緩存的去冗余系統(tǒng)的結(jié)構(gòu)原理框圖。
[0035]圖2是本發(fā)明只讀緩存的去冗余方法的流程圖。
[0036]圖3是本發(fā)明只讀緩存的去冗余方法中一種實例的緩存結(jié)構(gòu)框圖。
[0037]圖4是本發(fā)明緩存的去冗余方法的緩存結(jié)構(gòu)框圖。
[0038]圖5是本發(fā)明緩存的去冗余方法的條件判斷圖?!揪唧w實施方式】
[0039]下面結(jié)合附圖和實施例進一步詳細說明本發(fā)明,但本發(fā)明的保護范圍并不限于此。
[0040]參照圖1,本發(fā)明的只讀緩存的去冗余系統(tǒng),包括主控模塊、若干用于存儲數(shù)據(jù)的數(shù)據(jù)塊和若干用于索引數(shù)據(jù)塊的索引模塊,主控模塊分別與數(shù)據(jù)塊和索引模塊相連,數(shù)據(jù)
塊與索引模塊--對應(yīng),即索引模塊I用于索引數(shù)據(jù)塊I,索引模塊N用于索引數(shù)據(jù)塊N。索
引模塊和數(shù)據(jù)塊存儲于只讀緩存中,用于提高光驅(qū)等只讀設(shè)備的訪問性能。索引模塊內(nèi)設(shè)有緩存替換信息單元、數(shù)據(jù)地址 標(biāo)簽單元和數(shù)據(jù)塊哈希值單元,緩存替換信息單元、數(shù)據(jù)地址標(biāo)簽單元和數(shù)據(jù)塊哈希值單元用于提高只讀緩存的有效容量。
[0041]數(shù)據(jù)塊哈希值單元用于存儲數(shù)據(jù)塊哈希值,主控模塊在讀取訪問時,會計算每個數(shù)據(jù)塊的哈希值并將哈希值寫入與該數(shù)據(jù)塊對應(yīng)的數(shù)據(jù)塊哈希值單元中存儲,通過每個數(shù)據(jù)塊的哈希值可以識別只讀緩存中內(nèi)容相同的冗余數(shù)據(jù)塊。數(shù)據(jù)塊哈希值單元給緩存中每個數(shù)據(jù)塊增加一個字段用于存儲數(shù)據(jù)內(nèi)容的哈希值,哈希值用于快速判斷不同數(shù)據(jù)塊的數(shù)據(jù)內(nèi)容是否相同。哈希值的計算方法可以使用通用的哈希函數(shù)如MD5 (Message DigestAlgorithm MD5)、SHA (Secure HashAlgorithm)等,將大塊的數(shù)據(jù)通過數(shù)學(xué)運算得到一個數(shù)據(jù)量很小的哈希值。比如使用一個256位的二進制數(shù)來存儲一個8K字節(jié)數(shù)據(jù)塊的哈希值,通過哈希值的比較,緩存可以快速的判斷兩個數(shù)據(jù)塊是否包含完全一樣的數(shù)據(jù)。如果兩個數(shù)據(jù)塊的哈希值不同,那么這兩個數(shù)據(jù)塊的數(shù)據(jù)內(nèi)容必然不同,如果兩個數(shù)據(jù)塊的哈希值相同,那么這兩個數(shù)據(jù)塊有很高的概率包含相同的數(shù)據(jù)。根據(jù)實際應(yīng)用的要求,可以選擇是否對哈希值相同的數(shù)據(jù)塊進行完整數(shù)據(jù)比較來確定數(shù)據(jù)內(nèi)容是否相同,如果采用SHA256等用于加密應(yīng)用的哈希函數(shù),兩個不同數(shù)據(jù)塊產(chǎn)生同樣哈希值的概率遠遠小于硬件存儲設(shè)備數(shù)據(jù)出錯的概率,因此對大多數(shù)應(yīng)用將不需要再進行完整數(shù)據(jù)比較。
[0042]數(shù)據(jù)地址標(biāo)簽單元用于存儲低速存儲介質(zhì)上訪問數(shù)據(jù)地址,數(shù)據(jù)地址標(biāo)簽單元內(nèi)設(shè)有多個的數(shù)據(jù)地址標(biāo)簽,同一數(shù)據(jù)地址標(biāo)簽單元中所有的數(shù)據(jù)地址標(biāo)簽在低速存儲介質(zhì)上指代的數(shù)據(jù)內(nèi)容相同,同一數(shù)據(jù)地址標(biāo)簽單元中所有的數(shù)據(jù)地址標(biāo)簽在緩存中均指代對應(yīng)的同一數(shù)據(jù)塊。緩存的每個數(shù)據(jù)塊相對于現(xiàn)有技術(shù)增加了多個數(shù)據(jù)地址標(biāo)簽,這些數(shù)據(jù)標(biāo)簽用于存儲數(shù)據(jù)內(nèi)容相同的數(shù)據(jù)塊所對應(yīng)的數(shù)據(jù)使用者在訪問低速存儲介質(zhì)時使用的數(shù)據(jù)地址。由于數(shù)據(jù)塊的容量通常遠大于數(shù)據(jù)地址標(biāo)簽對存儲空間的占用,并且合并了內(nèi)容相同的冗余數(shù)據(jù)塊,這樣的設(shè)計就能達到對應(yīng)不同數(shù)據(jù)地址的冗余數(shù)據(jù)塊在緩存中共享一個數(shù)據(jù)塊的目的,節(jié)省了緩存的存儲空間。
[0043]緩存替換信息單元用于存儲數(shù)據(jù)塊訪問記錄等,緩存替換信息單元內(nèi)存儲有數(shù)據(jù)塊的訪問記錄和數(shù)據(jù)冗余度,訪問記錄包括訪問頻次、訪問時間等,其中數(shù)據(jù)冗余度為數(shù)據(jù)地址標(biāo)簽單元中數(shù)據(jù)地址標(biāo)簽的有效存儲個數(shù),即存儲的訪問數(shù)據(jù)地址的個數(shù)。根據(jù)緩存替換信息單元的替換信息,優(yōu)化了傳統(tǒng)的緩存替換算法。如果緩存的存儲空間已經(jīng)完全被數(shù)據(jù)塊占用,再分配新的數(shù)據(jù)塊到緩存時就需要用新的數(shù)據(jù)塊替換掉一個原有的數(shù)據(jù)塊,緩存替換算法用于在緩存中選擇相對不重要的數(shù)據(jù)塊作為被替換的對象。使用本發(fā)明提出的去冗余緩存設(shè)計之后,可以根據(jù)數(shù)據(jù)塊的數(shù)據(jù)冗余度來判斷數(shù)據(jù)塊的重要性,數(shù)據(jù)冗余度指某個數(shù)據(jù)塊對應(yīng)的不同數(shù)據(jù)地址的數(shù)量,該值越大,就有越多的地址包含該數(shù)據(jù)塊的數(shù)據(jù),其數(shù)據(jù)冗余度和相對重要性就越高。因此,緩存替換算法需要優(yōu)先選擇冗余度低的數(shù)據(jù)塊作為被替換的對象。
[0044]參照圖1-2,本發(fā)明的一種只讀緩存的去冗余方法,所述方法基于上述提及的去冗余系統(tǒng),所述方法包括如下步驟:
[0045]a)主控模塊讀取數(shù)據(jù)時,根據(jù)讀取的訪問數(shù)據(jù)地址,搜索只讀緩存中所有數(shù)據(jù)地址標(biāo)簽單元中的數(shù)據(jù)地址標(biāo)簽,若數(shù)據(jù)地址標(biāo)簽單元中包含所述訪問數(shù)據(jù)地址,則讀取訪問數(shù)據(jù)地址對應(yīng)數(shù)據(jù)塊中的數(shù)據(jù)并將數(shù)據(jù)返回到主控模塊,同時更新緩存替換信息單元中的替換信息,否則,進入步驟b;
[0046]b)從低速存儲介質(zhì)中讀取所述訪問數(shù)據(jù)地址對應(yīng)的訪問數(shù)據(jù)并將數(shù)據(jù)返回到主控模塊,同時主控模塊計算訪問數(shù)據(jù)的哈希值;
[0047]c)將訪問數(shù)據(jù)的哈希值與緩存中所有數(shù)據(jù)塊哈希值單元中的哈希值進行比較,若緩存中包含訪問數(shù)據(jù)的哈希值,則將所述訪問數(shù)據(jù)地址存儲到哈希值相同的索引模塊的數(shù)據(jù)地址標(biāo)簽單元中,同時更新緩存替換信息單元中的替換信息,否則,進入步驟d ;
[0048]d)檢測緩存是否已滿,若緩存未滿,將所述訪問數(shù)據(jù)寫入緩存的數(shù)據(jù)塊中,進入步驟e,否則,根據(jù)緩存替換算法選擇需要被替換的數(shù)據(jù)塊,將訪問數(shù)據(jù)寫入需要被替換的數(shù)據(jù)塊中,進入步驟e;
[0049]e)更新與步驟d中數(shù)據(jù)塊對應(yīng)的索引模塊,將所述訪問數(shù)據(jù)地址存儲到數(shù)據(jù)地址標(biāo)簽單元中,更新緩存替換信息單元中的替換信息,將緩存中所有數(shù)據(jù)塊根據(jù)數(shù)據(jù)冗余度從低到高進行排序,選擇數(shù)據(jù)冗余度相同且數(shù)據(jù)冗余度最低的數(shù)據(jù)塊,采用LRU(LeastRecently Used)算法計算出需要被替換的數(shù)據(jù)塊,并將步驟b中計算得到的哈希值寫入數(shù)據(jù)塊哈希值單兀中存儲。
[0050]上述步驟中提及的更新緩存替換信息單元中的替換信息具體為:更新數(shù)據(jù)塊的訪問記錄和數(shù)據(jù)冗余度,所述數(shù)據(jù)冗余度為數(shù)據(jù)地址標(biāo)簽單元中有效數(shù)據(jù)地址標(biāo)簽的個數(shù)。其中,哈希值是采用哈希函數(shù)計算得到,哈希函數(shù)為MD5、SHA或SHA256中的一種。
[0051]參照圖3的緩存結(jié)構(gòu)框圖,本發(fā)明的一個比較簡單的應(yīng)用,該應(yīng)用的場景是為只讀光盤驅(qū)動器增加一個高速讀緩存,對于同一數(shù)據(jù)地址,數(shù)據(jù)使用者只對數(shù)據(jù)進行讀取操作。該實例中的低速存儲介質(zhì)指光盤驅(qū)動器,緩存的存儲介質(zhì)使用操作系統(tǒng)管理的動態(tài)內(nèi)存。該實例假設(shè)只讀設(shè)備數(shù)據(jù)訪問的地址為20位,該緩存分為256個緩存區(qū)域,每個緩存區(qū)域包含64個數(shù)據(jù)塊。每個數(shù)據(jù)塊的大小是4K字節(jié),每個數(shù)據(jù)塊哈希值為256位,那么整個緩存的數(shù)據(jù)塊容量總和是64M字節(jié)。數(shù)據(jù)使用者訪問緩存時首先定位緩存區(qū)域,緩存區(qū)域一般由數(shù)據(jù)地址的高8位確定,數(shù)據(jù)地址標(biāo)簽包含數(shù)據(jù)地址的低12位,每個數(shù)據(jù)塊最多可以對應(yīng)四個數(shù)據(jù)地址標(biāo)簽,使用四個數(shù)據(jù)地址標(biāo)簽來存儲該數(shù)據(jù)塊對應(yīng)的訪問數(shù)據(jù)地址。緩存替換信息包括最近最少使用(LRU)算法需要使用的數(shù)據(jù)塊訪問相對時間信息以及數(shù)據(jù)塊的冗余度,數(shù)據(jù)冗余度等于數(shù)據(jù)塊對應(yīng)的有效數(shù)據(jù)地址標(biāo)簽的個數(shù),其值為O至4。在使用緩存替換算法選擇需要被替換的數(shù)據(jù)塊時,首先在數(shù)據(jù)冗余度為O的數(shù)據(jù)塊中使用LRU算法選擇需要被替換的數(shù)據(jù)塊,如果沒有數(shù)據(jù)冗余度為O的數(shù)據(jù)塊,則在數(shù)據(jù)冗余度為I的數(shù)據(jù)塊中選擇,以此類推。這樣的緩存替換算法將優(yōu)先保留數(shù)據(jù)冗余度高的數(shù)據(jù)塊,以便覆蓋更多的數(shù)據(jù)地址,從而提高緩存的有效容量。
[0052]參照圖2-3,本實例只讀緩存的去冗余方法,包括如下步驟:
[0053]a)主控模塊讀取數(shù)據(jù)時,根據(jù)讀取的訪問數(shù)據(jù)地址的高8位確定緩存區(qū)域,搜索緩存區(qū)域中所有數(shù)據(jù)地址標(biāo)簽單元中的數(shù)據(jù)地址標(biāo)簽,若數(shù)據(jù)地址標(biāo)簽單元中包含所述訪問數(shù)據(jù)地址,則讀取訪問數(shù)據(jù)地址對應(yīng)數(shù)據(jù)塊中的數(shù)據(jù)并將數(shù)據(jù)返回到主控模塊,同時更新緩存替換信息單元中的替換信息,否則,進入步驟b;
[0054]b)從低速存儲介質(zhì)中讀取所述訪問數(shù)據(jù)地址對應(yīng)的訪問數(shù)據(jù)并將數(shù)據(jù)返回到主控模塊,同時主控模塊計算訪問數(shù)據(jù)的哈希值;
[0055]c)將訪問數(shù)據(jù)的哈希值與緩存區(qū)域中所有數(shù)據(jù)塊哈希值單元中的哈希值進行比較,若緩存區(qū)域中包含訪問數(shù)據(jù)的哈希值,檢測該哈希值對應(yīng)的數(shù)據(jù)塊已有有效的數(shù)據(jù)地址標(biāo)簽,數(shù)據(jù)地址標(biāo)簽單元中數(shù)據(jù)地址標(biāo)簽是否已滿,若已經(jīng)有四個有效的數(shù)據(jù)地址標(biāo)簽了,則隨機刪除一個已有數(shù)據(jù)地址標(biāo)簽,替換為當(dāng)前訪問數(shù)據(jù)地址,若未滿,則將所述訪問數(shù)據(jù)地址存儲到哈希值相同的索引模塊的數(shù)據(jù)地址標(biāo)簽單元中,同時更新緩存替換信息單元中的替換信息,若緩存中不包含訪問數(shù)據(jù)的哈希值,進入步驟d ;
[0056]d)檢測緩存區(qū)域是否已滿,若緩存未滿,將所述訪問數(shù)據(jù)寫入緩存區(qū)域的數(shù)據(jù)塊中,進入步驟e,否則,根據(jù)緩存替換算法選擇需要被替換的數(shù)據(jù)塊,將訪問數(shù)據(jù)寫入需要被替換的數(shù)據(jù)塊中,進入步驟e;
[0057]e)更新與步驟d中數(shù)據(jù)塊對應(yīng)的索引模塊,將所述訪問數(shù)據(jù)地址存儲到數(shù)據(jù)地址標(biāo)簽單元中,更新緩存替換信息單元中的替換信息,將緩存區(qū)域中所有數(shù)據(jù)塊根據(jù)數(shù)據(jù)冗余度從低到高進行排序,選擇數(shù)據(jù)冗余度相同且數(shù)據(jù)冗余度最低的數(shù)據(jù)塊中,采用LRU算法計算出需要被替換的數(shù)據(jù)塊,并將步驟b中計算得到的哈希值寫入數(shù)據(jù)塊哈希值單元中存儲。
[0058]參照圖4-5,本發(fā)明的另一技術(shù)方案:緩存的去冗余方法,所述方法包括操作類型判斷步驟、讀操作去冗余步驟和寫操作步驟,該方法主要針對硬盤文件緩存,并將硬盤文件緩存區(qū)分為只讀緩存和讀寫緩存兩種。采用該方法進行緩存時,具有如下特點:其一,需要支持對數(shù)據(jù)的寫操作;其二,文件的大小是可變的,而不是固定的大??;其三,數(shù)據(jù)讀取的地址是文件的路徑和文件名而不是一個固定長度的數(shù)據(jù)地址。本文中為了簡化說明,在此設(shè)計實例中我們假設(shè)操作系統(tǒng)可以將文件的路徑和文件名通過一個表格映射為一個20位的地址。
[0059]本發(fā)明的緩存的去冗余方法具體為:
[0060]操作類型判斷步驟:判斷主控模塊的操作類型,若是讀操作,則進入讀操作去冗余步驟,若是寫操作,則進入寫操作步驟;
[0061]讀操作去冗余步驟:根據(jù)讀操作的訪問數(shù)據(jù)地址,判斷訪問數(shù)據(jù)地址是否已保存在只讀緩存或讀寫緩存中,若訪問數(shù)據(jù)地址均不在只讀緩存和讀寫緩存中,則進入步驟A,若訪問數(shù)據(jù)地址已保存在讀寫緩存中存儲,則進入步驟B,若訪問數(shù)據(jù)地址已保存在只讀緩存中,則進入步驟C,否則,返回操作類型判斷步驟;
[0062]寫操作步驟:根據(jù)寫操作的訪問數(shù)據(jù)地址,判斷訪問數(shù)據(jù)地址是否已保存在只讀緩存和讀寫緩存中,若訪問數(shù)據(jù)地址均不在只讀緩存和讀寫緩存中,則進入步驟B,若訪問數(shù)據(jù)地址已保存在讀寫緩存中存儲,則進入步驟B,若訪問數(shù)據(jù)地址已保存在只讀緩存中,則進入步驟D,否則,返回操作類型判斷步驟;
[0063]A)從低速存儲介質(zhì)中讀取所述訪問數(shù)據(jù)地址對應(yīng)的訪問數(shù)據(jù)并將數(shù)據(jù)返回到主控模塊,同時主控模塊計算訪問數(shù)據(jù)的哈希值;將訪問數(shù)據(jù)的哈希值與只讀緩存中所有數(shù)據(jù)塊哈希值單元中的哈希值進行比較,若只讀緩存中包含訪問數(shù)據(jù)的哈希值,則將所述訪問數(shù)據(jù)地址存儲到哈希值相同的索引模塊的數(shù)據(jù)地址標(biāo)簽單元中,同時更新緩存替換信息單元中的替換信息,返回操作類型判斷步驟,否則,進入步驟Al ;
[0064]Al)檢測只讀緩存是否已滿,若緩存未滿,將所述訪問數(shù)據(jù)寫入緩存的數(shù)據(jù)塊中,進入步驟A2,否則,根據(jù)緩存替換算法選擇需要被替換的數(shù)據(jù)塊,將訪問數(shù)據(jù)寫入需要被替換的數(shù)據(jù)塊中,進入步驟A2;
[0065]A2)更新與步驟Al中數(shù)據(jù)塊對應(yīng)的索引模塊,將所述訪問數(shù)據(jù)地址存儲到數(shù)據(jù)地址標(biāo)簽單元中,更新緩存替換信息單元中的替換信息,并將步驟A中計算得到的哈希值寫入數(shù)據(jù)塊哈希值單元中存儲,返回操作類型判斷步驟;
[0066]B)由讀寫緩存處進行讀寫訪問,返回操作類型判斷步驟;
[0067]C)根據(jù)讀取的訪問數(shù)據(jù)地址,讀取訪問數(shù)據(jù)地址對應(yīng)數(shù)據(jù)塊中的數(shù)據(jù)并將數(shù)據(jù)返回到主控模塊,同時更新緩存替換信息單元中的替換信息,返回操作類型判斷步驟;
[0068]D)在只讀緩存中刪除寫操作地址對應(yīng)的數(shù)據(jù)地址標(biāo)簽,返回步驟B。
[0069]其中,更新緩存替換信息單元中的替換信息具體為:更新數(shù)據(jù)塊的訪問記錄和數(shù)據(jù)冗余度,所述數(shù)據(jù)冗余度為數(shù)據(jù)地址標(biāo)簽單元中有效數(shù)據(jù)地址標(biāo)簽的個數(shù)。步驟Al中的緩存替換算法具體為:將緩存中所有數(shù)據(jù)塊根據(jù)數(shù)據(jù)冗余度從低到高進行排序,選擇數(shù)據(jù)冗余度相同且數(shù)據(jù)冗余度最低的數(shù)據(jù)塊中,采用LRU算法計算出需要被替換的數(shù)據(jù)塊。
[0070]參照圖4,本發(fā)明的緩存的去冗余方法的緩存結(jié)構(gòu)框圖,在利用本發(fā)明的方法消除冗余時,把文件分為兩類,第一類是有大量讀操作,但是很少有寫操作的文件,該類文件擁有比較穩(wěn)定的冗余性。比如在硬盤用于存儲多個虛擬機用戶的應(yīng)用軟件時,同一個軟件的文件在不同用戶的存儲空間中實際上包含同樣的內(nèi)容,并且,這些軟件的大部分文件是不需要更改的。第二類文件是有大量的寫操作的文件,比如用戶配置信息等,這類文件通常只有很少的冗余性,并且其內(nèi)容多變,難于在緩存中實現(xiàn)高效的去冗余。基于以上分類,本發(fā)明將第一類文件緩存于本發(fā)明提出的去冗余緩存中,并且只支持讀操作,由圖4中的只讀緩存完成該功能,只讀緩存的設(shè)計與本發(fā)明中只讀緩存的去冗余方法相同。第二類文件緩存于不帶去冗余功能的傳統(tǒng)緩存中,由圖4中的讀寫緩存完成該功能。并且,只讀緩存和讀寫緩存的內(nèi)容具有互斥性,同一數(shù)據(jù)地址的文件只能在兩種緩存中的一個出現(xiàn)。
[0071]本發(fā)明的緩存的去冗余方法適用于緩存的讀操作和寫操作,對于只讀緩存和讀寫緩存都不包括的數(shù)據(jù)按照第一類文件處理,并將其存儲于只讀緩存中,對于有任何寫操作的文件,都按照第二類文件處理,由讀寫緩存完成數(shù)據(jù)訪問。通過讀寫操作的區(qū)分及訪問地址的存儲位置來判斷是否應(yīng)用緩存去冗余方法,針對與只讀緩存,使用數(shù)據(jù)塊哈希值比較尋找并合并冗余數(shù)據(jù),同時給每個數(shù)據(jù)塊增加了多個數(shù)據(jù)地址標(biāo)簽,已達到對應(yīng)不同數(shù)據(jù)地址的冗余數(shù)據(jù)塊在緩存中共享一個數(shù)據(jù)塊的目的,節(jié)省了緩存的存儲空間,同時結(jié)合數(shù)據(jù)的冗余度優(yōu)化了緩存替換算法,針對于讀寫緩存則采用普通緩存方式,該方法尤其適合文件類緩存。
[0072]上述說明中,凡未加特別說明的,均采用現(xiàn)有技術(shù)中的技術(shù)手段。
【權(quán)利要求】
1.一種只讀緩存的去冗余系統(tǒng),包括主控模塊、若干用于存儲數(shù)據(jù)的數(shù)據(jù)塊和若干用于索引數(shù)據(jù)塊的索引模塊,主控模塊分別與數(shù)據(jù)塊和索引模塊相連,數(shù)據(jù)塊與索引模塊一一對應(yīng),索引模塊內(nèi)設(shè)有用于存儲數(shù)據(jù)塊訪問記錄的緩存替換信息單元和用于存儲低速存儲介質(zhì)上訪問數(shù)據(jù)地址的數(shù)據(jù)地址標(biāo)簽單元,其特征在于,所述索引模塊內(nèi)還設(shè)有用于存儲數(shù)據(jù)塊哈希值的數(shù)據(jù)塊哈希值單元,主控模塊計算數(shù)據(jù)塊的哈希值并將哈希值寫入數(shù)據(jù)塊哈希值單元中存儲,所述數(shù)據(jù)地址標(biāo)簽單元內(nèi)設(shè)有多個的數(shù)據(jù)地址標(biāo)簽,同一數(shù)據(jù)地址標(biāo)簽單元中所有的數(shù)據(jù)地址標(biāo)簽在低速存儲介質(zhì)上指代的數(shù)據(jù)內(nèi)容相同,同一數(shù)據(jù)地址標(biāo)簽單元中所有的數(shù)據(jù)地址標(biāo)簽在緩存中均指代對應(yīng)的同一數(shù)據(jù)塊。
2.根據(jù)權(quán)利要求1所述的只讀緩存的去冗余系統(tǒng),其特征在于,所述緩存替換信息單元內(nèi)存儲有數(shù)據(jù)塊的訪問記錄和數(shù)據(jù)冗余度,所述數(shù)據(jù)冗余度為數(shù)據(jù)地址標(biāo)簽單元中有效數(shù)據(jù)地址標(biāo)簽的個數(shù)。
3.一種只讀緩存的去冗余方法,其特征在于,所述方法基于權(quán)利要求1所述的去冗余系統(tǒng),所述方法包括如下步驟: a)主控模塊讀取數(shù)據(jù)時,根據(jù)讀取的訪問數(shù)據(jù)地址,搜索只讀緩存中所有數(shù)據(jù)地址標(biāo)簽單元中的數(shù)據(jù)地址標(biāo)簽,若數(shù)據(jù)地址標(biāo)簽單元中包含所述訪問數(shù)據(jù)地址,則讀取訪問數(shù)據(jù)地址對應(yīng)數(shù)據(jù)塊中的數(shù)據(jù)并將數(shù)據(jù)返回到主控模塊,同時更新緩存替換信息單元中的替換信息,否則,進入步驟b; b)從低速存儲介質(zhì)中讀取所述訪問數(shù)據(jù)地址對應(yīng)的訪問數(shù)據(jù)并將數(shù)據(jù)返回到主控模塊,同時主控模塊 計算訪問數(shù)據(jù)的哈希值; c)將訪問數(shù)據(jù)的哈希值與緩存中所有數(shù)據(jù)塊哈希值單元中的哈希值進行比較,若緩存中包含訪問數(shù)據(jù)的哈希值,則將所述訪問數(shù)據(jù)地址存儲到哈希值相同的索引模塊的數(shù)據(jù)地址標(biāo)簽單元中,同時更新緩存替換信息單元中的替換信息,否則,進入步驟d ; d)檢測緩存是否已滿,若緩存未滿,將所述訪問數(shù)據(jù)寫入緩存的數(shù)據(jù)塊中,進入步驟e,否則,根據(jù)緩存替換算法選擇需要被替換的數(shù)據(jù)塊,將訪問數(shù)據(jù)寫入需要被替換的數(shù)據(jù)塊中,進入步驟e; e)更新與步驟d中數(shù)據(jù)塊對應(yīng)的索引模塊,將所述訪問數(shù)據(jù)地址存儲到數(shù)據(jù)地址標(biāo)簽單元中,更新緩存替換信息單元中的替換信息,并將步驟b中計算得到的哈希值寫入數(shù)據(jù)塊哈希值單元中存儲。
4.根據(jù)權(quán)利要求3所述的只讀緩存的去冗余方法,其特征在于,所述更新緩存替換信息單元中的替換信息具體為:更新數(shù)據(jù)塊的訪問記錄和數(shù)據(jù)冗余度,所述數(shù)據(jù)冗余度為數(shù)據(jù)地址標(biāo)簽單元中有效數(shù)據(jù)地址標(biāo)簽的個數(shù)。
5.根據(jù)權(quán)利要求4所述的只讀緩存的去冗余方法,其特征在于,所述步驟d中的緩存替換算法具體為:將緩存中所有數(shù)據(jù)塊根據(jù)數(shù)據(jù)冗余度從低到高進行排序,選擇數(shù)據(jù)冗余度相同且數(shù)據(jù)冗余度最低的數(shù)據(jù)塊,采用LRU算法計算出需要被替換的數(shù)據(jù)塊。
6.根據(jù)權(quán)利要求3所述的只讀緩存的去冗余方法,其特征在于,所述哈希值是采用哈希函數(shù)計算得到,哈希函數(shù)為MD5、SHA或SHA256中的一種。
7.一種緩存的去冗余方法,其特征在于,所述方法基于權(quán)利要求1所述的去冗余系統(tǒng),所述方法包括操作類型判斷步驟、讀操作去冗余步驟和寫操作步驟,具體為: 操作類型判斷步驟:判斷主控模塊的操作類型,若是讀操作,則進入讀操作去冗余步驟,若是寫操作,則進入寫操作步驟; 讀操作去冗余步驟:根據(jù)讀操作的訪問數(shù)據(jù)地址,判斷訪問數(shù)據(jù)地址是否已保存在只讀緩存或讀寫緩存中,若訪問數(shù)據(jù)地址均不在只讀緩存和讀寫緩存中,則進入步驟A,若訪問數(shù)據(jù)地址已保存在讀寫緩存中存儲,則進入步驟B,若訪問數(shù)據(jù)地址已保存在只讀緩存中,則進入步驟C,否則,返回操作類型判斷步驟; 寫操作步驟:根據(jù)寫操作的訪問數(shù)據(jù)地址,判斷訪問數(shù)據(jù)地址是否已保存在只讀緩存和讀寫緩存中,若訪問數(shù)據(jù)地址均不在只讀緩存和讀寫緩存中,則進入步驟B,若訪問數(shù)據(jù)地址已保存在讀寫緩存中存儲,則進入步驟B,若訪問數(shù)據(jù)地址已保存在只讀緩存中,則進入步驟D, 否則,返回操作類型判斷步驟; A)從低速存儲介質(zhì)中讀取所述訪問數(shù)據(jù)地址對應(yīng)的訪問數(shù)據(jù)并將數(shù)據(jù)返回到主控模塊,同時主控模塊計算訪問數(shù)據(jù)的哈希值;將訪問數(shù)據(jù)的哈希值與只讀緩存中所有數(shù)據(jù)塊哈希值單元中的哈希值進行比較,若只讀緩存中包含訪問數(shù)據(jù)的哈希值,則將所述訪問數(shù)據(jù)地址存儲到哈希值相同的索引模塊的數(shù)據(jù)地址標(biāo)簽單元中,同時更新緩存替換信息單元中的替換信息,返回操作類型判斷步驟,否則,進入步驟Al ; Al)檢測只讀緩存是否已滿,若緩存未滿,將所述訪問數(shù)據(jù)寫入緩存的數(shù)據(jù)塊中,進入步驟A2,否則,根據(jù)緩存替換算法選擇需要被替換的數(shù)據(jù)塊,將訪問數(shù)據(jù)寫入需要被替換的數(shù)據(jù)塊中,進入步驟A2; A2)更新與步驟Al中數(shù)據(jù)塊對應(yīng)的索引模塊,將所述訪問數(shù)據(jù)地址存儲到數(shù)據(jù)地址標(biāo)簽單元中,更新緩存替換信息單元中的替換信息,并將步驟A中計算得到的哈希值寫入數(shù)據(jù)塊哈希值單元中存儲,返回操作類型判斷步驟; B)由讀寫緩存處進行讀寫訪問,返回操作類型判斷步驟; C)根據(jù)讀取的訪問數(shù)據(jù)地址,讀取訪問數(shù)據(jù)地址對應(yīng)數(shù)據(jù)塊中的數(shù)據(jù)并將數(shù)據(jù)返回到主控模塊,同時更新緩存替換信息單元中的替換信息,返回操作類型判斷步驟; D)在只讀緩存中刪除寫操作地址對應(yīng)的數(shù)據(jù)地址標(biāo)簽,返回步驟B。
8.根據(jù)權(quán)利要求7所述的緩存的去冗余方法,其特征在于,所述更新緩存替換信息單元中的替換信息具體為:更新數(shù)據(jù)塊的訪問記錄和數(shù)據(jù)冗余度,所述數(shù)據(jù)冗余度為數(shù)據(jù)地址標(biāo)簽單元中有效數(shù)據(jù)地址標(biāo)簽的個數(shù)。
9.根據(jù)權(quán)利要求8所述的緩存的去冗余方法,其特征在于,所述步驟Al中的緩存替換算法具體為:將緩存中所有數(shù)據(jù)塊根據(jù)數(shù)據(jù)冗余度從低到高進行排序,選擇數(shù)據(jù)冗余度相同且數(shù)據(jù)冗余度最低的數(shù)據(jù)塊,采用LRU算法計算出需要被替換的數(shù)據(jù)塊。
【文檔編號】G06F12/08GK103942161SQ201410168498
【公開日】2014年7月23日 申請日期:2014年4月24日 優(yōu)先權(quán)日:2014年4月24日
【發(fā)明者】高宏亮 申請人:杭州冰特科技有限公司