本發(fā)明屬于計(jì)算機(jī)云存儲(chǔ)技術(shù)領(lǐng)域,具體涉及云環(huán)境下基于重復(fù)數(shù)據(jù)的緩存方法。
背景技術(shù):
在計(jì)算機(jī)系統(tǒng)中,緩存的引入能對(duì)CPU和磁盤(pán)的讀寫(xiě)性能進(jìn)行協(xié)調(diào)處理,從而提升系統(tǒng)整體性能。當(dāng)某一硬件要讀取數(shù)據(jù)時(shí),緩存通過(guò)一定的方式提前存儲(chǔ)硬件所需的數(shù)據(jù)。緩存主要通過(guò)局部性原理來(lái)實(shí)現(xiàn),可以分為時(shí)間局部性和空間局部性。
在處理器高速發(fā)展的情況下,緩存同樣需要面對(duì)材料和成本的問(wèn)題,處理器的性能以每18個(gè)月翻一倍的速度在增長(zhǎng),而緩存在性能和速度上的增長(zhǎng)僅僅為每年10%左右,緩存性能的高低已成為整個(gè)計(jì)算機(jī)工業(yè)快速發(fā)展的主要瓶頸之一。
大部分情況下,計(jì)算機(jī)工業(yè)界解決緩存問(wèn)題一直采用的是增加緩存容量。但隨著硬件加工技術(shù)已經(jīng)接近物理極限,單純依靠提高單位面積上晶體管數(shù)量的方式來(lái)提升緩存性能已經(jīng)舉步維艱。因此設(shè)計(jì)出先進(jìn)的管理方法,最大程度的挖掘現(xiàn)有硬件設(shè)備的潛在性能,成為一個(gè)研究重點(diǎn)。涌現(xiàn)出了大量?jī)?yōu)秀的緩存替換算法。
隨著大數(shù)據(jù)的到來(lái),網(wǎng)絡(luò)環(huán)境已從原本的純文件數(shù)據(jù)到現(xiàn)在的多媒體環(huán)境。這將導(dǎo)致用戶的數(shù)據(jù)的訪問(wèn)模式和習(xí)慣發(fā)生改變。公認(rèn)的類Zipf分布的數(shù)據(jù)訪問(wèn)模式主要適用于文本數(shù)據(jù)主導(dǎo)網(wǎng)絡(luò)存儲(chǔ)的情況;所以,隨著現(xiàn)有的網(wǎng)絡(luò)模型的改變,Zipf分布模式已經(jīng)越來(lái)越不符合用戶的真實(shí)數(shù)據(jù)訪問(wèn)方式。隨著大量學(xué)者的研究,發(fā)現(xiàn)SE(Stretched Exponential)分布比Zipf分布更符合大數(shù)據(jù)時(shí)代用戶的數(shù)據(jù)訪問(wèn)特性。在SE分布的數(shù)據(jù)訪問(wèn)模式下,大量的數(shù)據(jù)訪問(wèn)分散在并不經(jīng)常訪問(wèn)的數(shù)據(jù)中,集中的熱訪問(wèn)數(shù)據(jù)占比越來(lái)越少,傳統(tǒng)的緩存系統(tǒng)在不擴(kuò)充容量的情況下,命中率變得越來(lái)越低。所以在這種情況下經(jīng)典的傳統(tǒng)替換算法已經(jīng)無(wú)法滿足云存儲(chǔ)環(huán)境的要求。如果能進(jìn)一步深入挖掘潛在性能,提出一種更適合的緩存替換算法,提高緩存的命中率,將是增強(qiáng)CPU利用率、提高云存儲(chǔ)服務(wù)性能的一個(gè)重要途徑。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)現(xiàn)有技術(shù)的缺陷和迫切需求,本發(fā)明目的在于,提出一種云環(huán)境下基于重復(fù)數(shù)據(jù)的緩存方法,該方法將文件拆分為多個(gè)數(shù)據(jù)塊進(jìn)行存儲(chǔ),對(duì)于重復(fù)數(shù)據(jù)塊進(jìn)行重刪處理,由此提高了緩存空間的利用率。
一種云環(huán)境下基于重復(fù)數(shù)據(jù)的緩存方法,具體為:將文件分為多個(gè)數(shù)據(jù)塊,以數(shù)據(jù)塊的方式加載于緩存中,重復(fù)的數(shù)據(jù)塊只加載一次。
進(jìn)一步地,
在加載數(shù)據(jù)塊的同時(shí)還構(gòu)建:
用于記錄加載文件哈希值的文件級(jí)哈希映射表;
用于記錄加載的數(shù)據(jù)塊哈希值、數(shù)據(jù)塊大小、數(shù)據(jù)塊在文件中的起始位置信息的元數(shù)據(jù)文件,元數(shù)據(jù)文件以文件哈希值命名;
記錄數(shù)據(jù)塊哈希值和引用次數(shù)的元數(shù)據(jù)屬性表;所述引用次數(shù)的定義為:緩存中某數(shù)據(jù)塊被多個(gè)文件同時(shí)擁有,所涉及的文件總數(shù)被定義為該數(shù)據(jù)塊的引用次數(shù)。
進(jìn)一步地,
該方法包括以下步驟:
1)記欲加載的文件為T(mén);
2)根據(jù)文件T的哈希值查詢文件級(jí)哈希映射表以判定該文件是否已被緩存,若未緩存,則進(jìn)入步驟3),否則結(jié)束;
3)將T的文件哈希值增加至文件級(jí)哈希列表,將文件T包含的數(shù)據(jù)塊信息增加至元數(shù)據(jù)文件;
4)將文件T中的數(shù)據(jù)塊按照如下方式加載于內(nèi)存中:
41)將文件T的文件哈希值添加至文件級(jí)哈希映射表;
42)根據(jù)文件哈希值找到該文件對(duì)應(yīng)的元數(shù)據(jù)文件,元數(shù)據(jù)文件包括該文件的所有分塊數(shù)據(jù)塊信息。
43)從元數(shù)據(jù)文件中讀取某一數(shù)據(jù)塊的哈希值;
44)根據(jù)數(shù)據(jù)塊哈希值在元數(shù)據(jù)屬性表查詢是否已緩存該數(shù)據(jù)塊,若未緩存,則進(jìn)入步驟45);若已緩存,然后繼續(xù)讀取下一數(shù)據(jù)塊,返回步驟43),直到文件T的所有數(shù)據(jù)塊處理完畢;
45)將數(shù)據(jù)塊加載于緩存中,在元數(shù)據(jù)屬性表中添加新加載的數(shù)據(jù)塊哈希值,其對(duì)應(yīng)的引用次數(shù)初始化為1,然后繼續(xù)讀取下一數(shù)據(jù)塊,返回步驟43),直到文件T的所有數(shù)據(jù)塊處理完畢。
進(jìn)一步地,該方法還包括以下步驟:
在所述步驟45)之前,還判定緩存是否已滿,若滿,則從緩存中選取文件刪除,將刪除的文件哈希值從文件級(jí)哈希映射表移除,將刪除文件涉及的數(shù)據(jù)塊引用次數(shù)減1,如果引用次數(shù)為0,刪除數(shù)據(jù)塊,進(jìn)入步驟45);若未滿,直接進(jìn)入步驟45);
所述從緩存中選取文件刪除的選取原則是:選取重復(fù)比例Dup最低的文件刪除,所述重復(fù)比例定義為:統(tǒng)計(jì)文件中有多少個(gè)數(shù)據(jù)塊與其它文件具有相同的數(shù)據(jù)塊;用相同數(shù)據(jù)塊的個(gè)數(shù)除以這個(gè)文件的數(shù)據(jù)塊總數(shù)得到重復(fù)比例。
進(jìn)一步地,
所述步驟3)還初始化文件T的訪問(wèn)次數(shù)frequent和訪問(wèn)時(shí)間recency為空;
所述44)根據(jù)數(shù)據(jù)塊哈希值在元數(shù)據(jù)屬性表查詢是否已緩存該數(shù)據(jù)塊,若未緩存,則進(jìn)入步驟45);若已緩存,文件T的訪問(wèn)次數(shù)frequent加1,文件T的訪問(wèn)時(shí)間recency更新為當(dāng)前時(shí)間,然后繼續(xù)讀取下一數(shù)據(jù)塊,返回步驟43),直到文件T的所有數(shù)據(jù)塊處理完畢;
所述步驟45)將數(shù)據(jù)塊加載于緩存中,文件T的訪問(wèn)次數(shù)frequent加1,文件T的訪問(wèn)件recency更新為當(dāng)前時(shí)間,然后繼續(xù)讀取下一數(shù)據(jù)塊,返回步驟43),直到文件T的所有數(shù)據(jù)塊處理完畢。
進(jìn)一步地,
在所述步驟45)之前,還判定緩存是否已滿,若滿,則從緩存中選取文件刪除,將刪除的文件哈希值從文件級(jí)哈希映射表移除,將刪除文件涉及的數(shù)據(jù)塊引用次數(shù)減1則進(jìn)入步驟46);若未滿,直接進(jìn)入步驟45);
所述從緩存中選取文件刪除的選取原則是:綜合考慮文件的重復(fù)比例Dup、訪問(wèn)次數(shù)和訪問(wèn)時(shí)間,文件的重復(fù)比例Dup越低、文件訪問(wèn)次數(shù)越低、文件訪問(wèn)時(shí)間越近則文件選取刪除的可能性越高。
本發(fā)明的有益技術(shù)效果體現(xiàn)在:
本發(fā)明對(duì)緩存系統(tǒng)的緩存數(shù)據(jù)項(xiàng)進(jìn)行了分析,通過(guò)利用相似數(shù)據(jù)項(xiàng)中相同的數(shù)據(jù)塊來(lái)實(shí)現(xiàn)在緩存中數(shù)據(jù)塊的重復(fù)數(shù)據(jù)刪除,從而提高緩存空間的利用率;進(jìn)一步地,研究文件間的重復(fù)塊的規(guī)律,提出一種基于重復(fù)比例考量的緩存替換算法,提高緩存命中率,最終提高緩存系統(tǒng)的效率。
附圖說(shuō)明
圖1為Zipf和SE數(shù)據(jù)的訪問(wèn)分布圖;
圖2為本發(fā)明緩存原理示意圖;
圖3為本發(fā)明緩存方法流程圖。
具體實(shí)施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。此外,下面所描述的本發(fā)明各個(gè)實(shí)施方式中所涉及到的技術(shù)特征只要彼此之間未構(gòu)成沖突就可以相互組合。
圖2給出了本發(fā)明緩存原理示意圖。本發(fā)明將文件分為多個(gè)數(shù)據(jù)塊,以數(shù)據(jù)塊的方式加載于緩存中,對(duì)于重復(fù)的數(shù)據(jù)塊做刪除處理。在圖2中,顯示了4個(gè)文件f1、f2、f3和f4,這4個(gè)文件被分成11個(gè)數(shù)據(jù)塊,用不同的圖案進(jìn)行了分別標(biāo)記;不同文件間,數(shù)據(jù)塊圖案相同的表示是重復(fù)數(shù)據(jù)塊。緩存層右邊的表示實(shí)際在緩存中存儲(chǔ)的數(shù)據(jù)塊,將相同的數(shù)據(jù)塊刪除,只保存一份數(shù)據(jù)。在圖中可以看出,原本的11個(gè)數(shù)據(jù)塊在實(shí)際的存儲(chǔ)中只需要存儲(chǔ)6個(gè)數(shù)據(jù)塊,這樣將大大的提高緩存的利用率。
緩存文件的預(yù)處理過(guò)程就是對(duì)輸入的文件進(jìn)行分塊處理并計(jì)算哈希。
對(duì)文件的分塊處理有兩種方法:定長(zhǎng)分塊和變長(zhǎng)分塊。定長(zhǎng)分塊的方法實(shí)現(xiàn)起來(lái)簡(jiǎn)單方便快速,不用消耗多少計(jì)算機(jī)的計(jì)算資源。變長(zhǎng)分塊的方法實(shí)現(xiàn)起來(lái)就比前者困難,且要消耗更多的計(jì)算資源,但是卻能找到更多的重復(fù)塊,能更好的提高重刪的效果。
在本系統(tǒng)中,優(yōu)選變長(zhǎng)分塊的方式,實(shí)驗(yàn)中用到的一種具體實(shí)施方式是基于內(nèi)容可變長(zhǎng)度分塊(CDC)算法。通過(guò)各方面的綜合考慮,實(shí)驗(yàn)中將數(shù)據(jù)塊的大小限定在4KB到64KB之間。在存儲(chǔ)時(shí),需要額外的存儲(chǔ)空間來(lái)存儲(chǔ)每個(gè)數(shù)據(jù)塊元數(shù)據(jù)信息;如果將數(shù)據(jù)塊的大小限定到低于4KB的話,相對(duì)于設(shè)定為大于4KB,分塊后將會(huì)產(chǎn)生更多的數(shù)據(jù)塊,這樣就需要更多的額外空間來(lái)存儲(chǔ)數(shù)據(jù)塊的元數(shù)據(jù)信息,而且會(huì)對(duì)元數(shù)據(jù)信息的管理帶來(lái)更大的負(fù)擔(dān);而如果將數(shù)據(jù)塊的大小限定到大于64KB的話,對(duì)文件進(jìn)行分塊后產(chǎn)生的數(shù)據(jù)塊將會(huì)很大,可能使一個(gè)文件只會(huì)切分成幾個(gè)數(shù)據(jù)塊;這樣,文件間數(shù)據(jù)塊重復(fù)的可能性就將降低。
對(duì)文件和所得數(shù)據(jù)塊采用哈希算法計(jì)算得到哈希值,哈希值相同則表示對(duì)應(yīng)的兩數(shù)據(jù)塊是重復(fù)數(shù)據(jù)塊。作為示例,使用SHA1算法對(duì)文件和文件分塊后的數(shù)據(jù)塊求哈希,得到一個(gè)160bit的字符串,將文件和文件分塊后的數(shù)據(jù)塊計(jì)算哈希得到的字符串命名為file_gcid與block_gcid,它們來(lái)作為文件和數(shù)據(jù)塊的唯一標(biāo)識(shí)符。
建立存有文件哈希值的文件級(jí)哈希映射表,文件級(jí)哈希映射表可存儲(chǔ)于緩存中。
對(duì)每一個(gè)文件,當(dāng)進(jìn)行分塊后,將這個(gè)文件的數(shù)據(jù)塊哈希值、數(shù)據(jù)塊的大小、數(shù)據(jù)塊在文件中的起始位置作為元數(shù)據(jù)信息記錄到元數(shù)據(jù)文件中。元數(shù)據(jù)文件采用文件哈希值命名,可存儲(chǔ)于內(nèi)存中。
在對(duì)數(shù)據(jù)文件進(jìn)行緩存時(shí),如果緩存中某數(shù)據(jù)塊被多個(gè)文件同時(shí)擁有,其所涉及的文件總數(shù)被定義為數(shù)據(jù)塊的引用次數(shù)。在內(nèi)存中構(gòu)建有元數(shù)據(jù)屬性表,元數(shù)據(jù)屬性表中包含已緩存數(shù)據(jù)塊哈希值和引用次數(shù)。
在上述數(shù)據(jù)塊重刪緩存方法的基礎(chǔ)上,本發(fā)明提出了一種緩存替換方法。本發(fā)明緩存替換方法主要考慮數(shù)據(jù)塊的重復(fù)比例,以此作為篩選標(biāo)準(zhǔn),選出被替換的文件。
所述的重復(fù)比例是指當(dāng)一個(gè)文件被分塊后,統(tǒng)計(jì)這些分塊信息,確定這個(gè)文件中有多少個(gè)塊與存儲(chǔ)系統(tǒng)其它文件具有相同的數(shù)據(jù)塊;用相同數(shù)據(jù)塊的個(gè)數(shù)除以這個(gè)文件的整個(gè)數(shù)據(jù)塊數(shù)得到的就是重復(fù)比例Dup。在文件預(yù)處理的時(shí)候就會(huì)統(tǒng)計(jì)文件中有多少個(gè)塊與存儲(chǔ)系統(tǒng)其它文件具有相同的數(shù)據(jù)塊,進(jìn)而計(jì)算得到重復(fù)比例Dup。
將緩存中的數(shù)據(jù)塊按照訪問(wèn)時(shí)間的先后順序記錄在一個(gè)鏈表中,每次獲取到新的元數(shù)據(jù)時(shí)在鏈表尾插入,新插入數(shù)據(jù)的時(shí)間信息即為文件的recency的值。Dup指當(dāng)一個(gè)文件被分塊后,統(tǒng)計(jì)這些分塊信息,確定這個(gè)文件中有多少個(gè)塊與其它文件具有相同的是數(shù)據(jù)塊,用相同塊數(shù)除以這個(gè)文件的整個(gè)塊數(shù)得到的就是重復(fù)比例。Dup是一個(gè)百分比數(shù)值。Frequent記錄文件在緩存中的訪問(wèn)次數(shù),當(dāng)訪問(wèn)一個(gè)文件中時(shí),如果文件在緩存中則frequent+1,如果文件不再緩存中的時(shí)候使frequent=1,重新計(jì)算。
如圖3所示,本發(fā)明緩存方法具體為:
1)記欲加載的文件為T(mén);
2)根據(jù)T的文件哈希值查詢文件級(jí)哈希映射表以判定該文件是否被緩存,若未查到,則進(jìn)入步驟3),否則結(jié)束;
3)將T的文件哈希值增加至文件級(jí)哈希列表,將該文件T包含的數(shù)據(jù)塊信息增加至元數(shù)據(jù)文件,初始化文件T的訪問(wèn)次數(shù)frequent和recency為空;
4)將文件T中的數(shù)據(jù)塊按照如下方式加載于內(nèi)存中:
41)將文件T的文件哈希值添加至文件級(jí)哈希映射表,記錄文件T的Dup;
42)根據(jù)文件哈希值找到該文件對(duì)應(yīng)的元數(shù)據(jù)文件,元數(shù)據(jù)文件包括該文件的所有分塊數(shù)據(jù)塊信息。
43)從元數(shù)據(jù)文件中讀取某一數(shù)據(jù)塊的哈希值;
44)根據(jù)數(shù)據(jù)塊哈希值在元數(shù)據(jù)屬性表查詢是否已緩存該數(shù)據(jù)塊,若未緩存,則進(jìn)入步驟45);若已緩存,文件T的訪問(wèn)次數(shù)frequent加1,文件T的recency更新為當(dāng)前時(shí)間,然后繼續(xù)讀取下一數(shù)據(jù)塊,返回步驟43),直到文件T的所有數(shù)據(jù)塊處理完畢;
45)判定緩存是否已滿,若滿,則進(jìn)入步驟46);若未滿,進(jìn)入步驟47);
46)從緩存中選取文件刪除,將刪除的文件哈希值從文件級(jí)哈希映射表移除,將刪除文件涉及的數(shù)據(jù)塊引用次數(shù)減1;如果引用次數(shù)為0,刪除數(shù)據(jù)塊;
47)將數(shù)據(jù)塊加載于緩存中,文件T的訪問(wèn)次數(shù)frequent加1,文件T的recency更新為當(dāng)前時(shí)間,在元數(shù)據(jù)屬性表中添加新加載的數(shù)據(jù)塊哈希值,其對(duì)應(yīng)的引用次數(shù)初始化為1,然后繼續(xù)讀取下一數(shù)據(jù)塊,返回步驟43),直到文件T的所有數(shù)據(jù)塊處理完畢。
所述步驟46)選取刪除文件的原則是:
根據(jù)緩存中已有文件的重復(fù)比例dup進(jìn)行選取。重復(fù)比例Dup越高說(shuō)明這個(gè)文件與別的文件重復(fù)的數(shù)據(jù)塊越多;當(dāng)這個(gè)文件被選取存入緩存中時(shí)節(jié)約的緩存空間可能越多,使該文件選取刪除的可能性越低。
進(jìn)一步地,可再考慮最近被訪問(wèn)的次數(shù)Frequency,F(xiàn)requency越高說(shuō)明數(shù)據(jù)被訪問(wèn)的局部性越強(qiáng),使文件被選取刪除的可能性越低。
進(jìn)一步,還可再考慮最近被訪問(wèn)的時(shí)間recency,recency時(shí)間越近說(shuō)明數(shù)據(jù)被訪問(wèn)的局部性越強(qiáng),使文件被選取刪除的可能性越低。
在具體選擇時(shí),可以僅僅考量重復(fù)比例Dup,也可以將上述三個(gè)參數(shù)按照重復(fù)比例Dup、被訪問(wèn)的次數(shù)Frequency、最近被訪問(wèn)的時(shí)間recency的先后順序逐一判定選取,也可以通過(guò)譬如加權(quán)求和方式得到一個(gè)權(quán)值,依據(jù)權(quán)值大小進(jìn)行判定選取。
若采用加權(quán)求和,三個(gè)參數(shù)的量綱不同,首先就需要進(jìn)行歸一化處理,使它們統(tǒng)一到0到1之間。重復(fù)比例Dup取值在0到1之間,無(wú)需再歸一化處理;通過(guò)緩存空間大小和數(shù)據(jù)集文件大小的比例設(shè)定了一個(gè)訪問(wèn)頻率的最大值max,frequent歸一化處理為frequent/max;當(dāng)frequent大于max,frequent處理為1;文件的recency的歸一化處理方式是:設(shè)現(xiàn)在被訪問(wèn)的文件的時(shí)間為a,這個(gè)文件上次被訪問(wèn)的時(shí)間為b,在整個(gè)緩存中取其中最久遠(yuǎn)被訪問(wèn)的文件時(shí)間為c,recency的歸一化結(jié)果為(b-c)/(a-c)。其次,對(duì)三個(gè)參數(shù)賦予權(quán)值,權(quán)值為經(jīng)驗(yàn)值,通過(guò)實(shí)驗(yàn)方式調(diào)整確定的;最后,加權(quán)求和得到一個(gè)評(píng)估值,將緩存中所有的文件的評(píng)估值進(jìn)行排序,取出其中值最小的文件,刪除文件。從緩存中刪除選取的文件,將刪除文件的信息移除文件級(jí)哈希映射表,將刪除文件的數(shù)據(jù)塊信息移除元數(shù)據(jù)屬性表;
為了測(cè)試算法的性能,設(shè)計(jì)的緩存系統(tǒng)包括三層,應(yīng)用層,緩存層和磁盤(pán)層。應(yīng)用層用于接收用戶的請(qǐng)求,并將請(qǐng)求傳遞給中間的緩存;緩存層用于數(shù)據(jù)的存儲(chǔ),這中間包括兩階段的操作,一個(gè)是緩存文件的預(yù)處理過(guò)程,另一個(gè)是緩存數(shù)據(jù)塊的替換管理過(guò)程;磁盤(pán)層是用于存儲(chǔ)全部的數(shù)據(jù)文件。在趨于SE分布的用戶數(shù)據(jù)訪問(wèn)模式的云存儲(chǔ)環(huán)境下,本發(fā)明對(duì)緩存系統(tǒng)的緩存數(shù)據(jù)項(xiàng)進(jìn)行了分析,通過(guò)利用相似數(shù)據(jù)項(xiàng)中相同的數(shù)據(jù)塊來(lái)實(shí)現(xiàn)在緩存中數(shù)據(jù)塊的重復(fù)數(shù)據(jù)刪除,從而提高緩存空間的利用率;并研究文件間的重復(fù)塊的規(guī)律,采用基于重復(fù)比率考慮的緩存替換算法,提高緩存命中率,最終提高緩存系統(tǒng)的效率。
實(shí)例:
1)收集數(shù)據(jù)集。實(shí)驗(yàn)中的數(shù)據(jù)集為apk文件。有8877個(gè)apk類型文件,數(shù)據(jù)集大小為126GB,文件平均大小為16M。
2)獲得數(shù)據(jù)分塊和收集數(shù)據(jù)指紋。對(duì)每一個(gè)輸入的apk文件,通過(guò)使用CDC變長(zhǎng)分塊算法對(duì)這個(gè)文件進(jìn)行切分;將切分好的數(shù)據(jù)塊使用SHA1算法求哈希;將求到的哈希值、數(shù)據(jù)塊的大小、數(shù)據(jù)塊在文件中的起始位置作為元數(shù)據(jù)信息記錄到元數(shù)據(jù)文件中。
3)獲取實(shí)驗(yàn)所需的trace。實(shí)驗(yàn)中的trace獲取至迅雷公司,來(lái)源于用戶通過(guò)迅雷app下載數(shù)據(jù)的真實(shí)trace。實(shí)驗(yàn)中截取了其中六個(gè)小時(shí)trace,通過(guò)其中的網(wǎng)址信息下載了app文件。通過(guò)對(duì)原始trace的提取和分析,得到了對(duì)應(yīng)apk文件格式的trace。通過(guò)實(shí)驗(yàn)發(fā)現(xiàn)該trace符合zipf分布;通過(guò)數(shù)學(xué)的方法合成了符合SE分布的trace。這兩種trace分別命名為apk-Zipf和apk-SE。
4)確定CIH緩存替換算法的三個(gè)要素最近訪問(wèn)時(shí)間(recency)、被訪問(wèn)的頻率(frequency)、在存儲(chǔ)系統(tǒng)中的重復(fù)數(shù)(dupnum)的權(quán)值。在這里,由于這三個(gè)參數(shù)的量綱不同,這里就需要進(jìn)行歸一化處理,使它們統(tǒng)一到0到1之間。
5)緩存系統(tǒng)文件的訪問(wèn)過(guò)程。根據(jù)用戶訪問(wèn)數(shù)據(jù)的文件名查詢文件級(jí)哈希表來(lái)判斷該文件是否被緩存,如果被緩存則同時(shí)獲取該文件的文件哈希,通過(guò)文件哈希獲得該文件的數(shù)據(jù)塊哈希構(gòu)成,最終根據(jù)數(shù)據(jù)塊哈希讀取數(shù)據(jù)塊內(nèi)容,同時(shí)更新該數(shù)據(jù)塊所屬文件的參數(shù):frequency和recency;如果查詢文件時(shí)未在緩存系統(tǒng)中查到,即文件未命中,緩存系統(tǒng)則將該文件的哈希添加到文件級(jí)哈希表中,同時(shí)獲取該文件的元數(shù)據(jù)文件,緩存系統(tǒng)根據(jù)該文件的數(shù)據(jù)塊哈希查詢緩存系統(tǒng)已有的數(shù)據(jù)塊元數(shù)據(jù)判斷該數(shù)據(jù)塊是否被緩存,如果在緩存系統(tǒng)則直接讀取數(shù)據(jù)塊內(nèi)容并更新其所屬文件的參數(shù)值,否則,緩存系統(tǒng)將從存儲(chǔ)系統(tǒng)中讀取該數(shù)據(jù)塊,讀取新數(shù)據(jù)塊時(shí)需要判斷緩存空間是否已滿,如果緩存空間已滿,則需要通過(guò)替換算法移除一個(gè)文件,同時(shí)移除該數(shù)據(jù)塊的元數(shù)據(jù)以及其影響到的文件的元數(shù)據(jù),初始化新載入緩存系統(tǒng)的數(shù)據(jù)塊所屬文件的參數(shù)值,其中frequency初始化為1,recency從緩存系統(tǒng)的鏈表中讀取,Dup的值則從緩存系統(tǒng)的數(shù)據(jù)庫(kù)中讀取,如果緩存空間未滿,則可直接載入該數(shù)據(jù)塊并初始化其數(shù)據(jù)塊元數(shù)據(jù)。
6)用步驟3中的兩種trace模擬文件的訪問(wèn)序列來(lái)模擬用戶對(duì)緩存系統(tǒng)的對(duì)文件的訪問(wèn)過(guò)程,計(jì)算緩存系統(tǒng)的文件命中率。從計(jì)算結(jié)果可知,當(dāng)使用的緩存空間越大,數(shù)據(jù)集的重復(fù)度越高的時(shí)候,CIH算法的效果將越好
本領(lǐng)域的技術(shù)人員容易理解,以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。