重複數據刪除和SSD的互補方法

/*******************************
 * 信息存儲專題課程作業
 * 重複數據刪除技術和SSD技術的互補方法
 *******************************/

摘要

重複數據刪除和SSD是目前存儲領域非常熱門的話題,近幾年來得到了飛速的發展。重複數據刪除由於其較高的計算和索引開銷,容易成爲性能瓶頸,所以一直沒有在主存儲系統中立足。SSD則受限於壽命和可靠性方面的問題,數據中心接受SSD產品的步伐非常緩慢。研究人員發現這兩種技術其實存在互補的可能性,SSD具有重複數據刪除需要的隨機讀寫速度,而重複數據刪除可以有效降低SSD的IO負載。本文分別從這兩個角度介紹了二者互補的解決方案,CAFTL在設備一級攔截重複數據,延長SSD的壽命;ChunkStash使用flash存儲指紋來加快索引的速度,提高了重複數據刪除的吞吐率。

關鍵字:重複數據刪除,flash,SSD

1 緒論

計算、存儲、傳輸是計算機系統面對的三個基本問題,存儲問題作爲其中之一,其重要性不言而喻。但是隨着計算機和互聯網在全球範圍的普及,數據量正經歷着爆炸式的增長。面對這些海量數據,計算機系統如何能保證充足的存儲容量和訪問速度,就成了存儲技術研究人員主要思考的問題。

目前磁盤仍然是構成存儲系統的主流基礎設備,其相對低廉的價格、較高的容量、RAID技術帶來的可靠性等優點,都是其仍然統治着大規模存儲市場的原因。研究人員不斷的挖掘磁盤技術的潛力,目前存儲密度、轉速等性能指標都已接近極限,急需新的技術來提高存儲系統的容量和訪問速度。在這種背景下,重複數據刪除技術和基於flash的固態存儲技術得到了研究人員的廣泛重視。

重複數據刪除是一種無損的壓縮技術,它從數據中刪除掉重複數據來節省存儲空間。重複數據刪除技術的基本原理是將數據按照一定的方法進行分塊,可以是定長分塊,也可以是內容感知的變長分塊,然後使用SHA-1等哈希摘要算法計算每一個數據塊的指紋,再利用指紋來區分不同內容的數據塊,對於相同內容的數據塊就只保存一份數據副本。目前重複數據刪除技術已經成功應用到了數據備份和歸檔系統中。

基於flash的固態存儲設備現在已經非常普及了,使用flash作爲主存的U盤、數碼產品隨處可見。flash作爲半導體存儲器,相比磁盤具有很多的優點,比如更高的隨機讀寫性能、抗震性和低能耗。可以說flash就是爲了取代磁盤而出現的。

近些年來,得益於大量研究人員的努力,重複數據刪除和flash技術都愈發成熟了,理應在更大的舞臺上發揮作用,但是由於它們自身的一些限制,使得推廣的步伐非常緩慢。

1.1 固態存儲技術背景

1.1.1 基於NAND flash芯片的固態存儲設備(SSD)


圖1 三星公司NAND flash的內部結構

目前市場上的大部分SSD採用的都是NAND flash芯片, NAND flash的體系結構如圖1所示[4]。在專業術語中,flash芯片又稱爲die,若干個die組成一個package;每一個die被劃分爲多個plane,每一個plane進一步被劃分爲數以千計的block(注意,這裏的block和磁盤的塊是不同的概念);每一個block由許多page(64-128個)組成;每一個page都包括一塊數據區(通常4KB),和一些備用的存儲空間,備用存儲空間通常作爲元數據區。因爲目前磁盤仍然具有統治地位,大多數操作系統支持的是磁盤的驅動程序,所以在flash芯片之上實現了Flash Translation Layer(FTL),向外提供和磁盤一樣的接口。

flash存儲器支持三種基本操作:讀、編程(寫)和擦除。編程就是寫操作,讀和編程都是以page爲單位的,而擦除是以block爲單位。flash存儲器在技術上有三個嚴格的限制:(1)不能二次編程,也就是對一個page只能編程一次,在下一次編程之前必須對整個block執行擦除操作;(2)不能隨機寫,一個block內的page必須按順序寫;(3)擦除的次數限制,block擦除一定次數就會磨損,通常是10,000到100,000次。

爲了克服flash存儲器的這些限制,設計者在FTL這一層爲flash量身定做了很多的技術:(1)間接映射,flash存儲器會保存一張邏輯地址和物理地址的映射表,將上層IO請求的邏輯地址轉換爲物理地址;(2)日誌式的寫操作,按照物理地址順序一個接一個地寫page,如果要向一個邏輯地址寫數據,那麼就將原來的物理page置爲失效,把數據寫到新page,再修改映射表;(3)垃圾回收,定期地回收有很多失效頁的block,先將有效的頁遷移到新的block上,再擦除block;(4)損耗平衡,由於某些熱點數據的修改非常頻繁,會導致某些block過早磨損,所以負載均衡機制會將IO負載均衡到每一個block上;(5)過量存儲空間,爲了幫助垃圾回收和損耗均衡,SSD通常會提供一些額外的存儲空間。

1.1.2 SSD的壽命問題

SSD從最開始出現,人們對它的期望就是磁盤的替代者,但是時至今日,這一理想還遠遠沒有實現。首先,flash的位密度越大,它的可靠性和壽命就越短;其次,傳統的可靠性解決方案RAID,用於SSD並不成功;再次,SSD的壽命始終沒有得到證明。這就解釋了爲什麼SSD仍然只能出現在個人用戶的U盤、數碼產品這樣的應用領域,而商業用戶始終對大規模部署SSD心存疑慮,誰也不希望自己的存儲設備突然就壞掉了。

一塊flash存儲器的壽命主要由兩個因素決定:(1)寫操作負載,顯然寫地越多flash壽終正寢地越快;(2)垃圾回收和損耗均衡機制,它們的實現策略對flash存儲器的壽命會產生巨大的影響。目前大多數的研究工作都將重點放在第二個因素上,很少有人從第一個因素的角度來解決flash的壽命問題。這也是理所當然的,通常認爲存儲設備對IO負載只能逆來順受。而本文的一個重點就是討論如何從設備一級優化寫操作負載。

1.2 重複數據刪除技術背景

1.2.1 背景和基本方法

重複數據刪除技術出現的早期,磁帶庫是備份和歸檔系統的主要存儲介質,原因是備份和歸檔系統對存儲空間的要求特別大,出於經濟的考慮只能選用容量大、價格低廉的磁帶庫。但是隨着磁盤技術的發展,磁盤的容量逐漸趕上了磁帶,而且價格也不斷下降,於是有人提出使用磁盤來存儲備份數據。磁盤相對磁帶的優勢就是支持隨機訪問,這爲重複數據刪除技術的出現奠定了基礎,通過結合磁盤技術和重複數據刪除技術,可以大大節約成本。

一個典型的重複數據刪除技術解決方案的基本步驟是分塊、哈希、查重、存儲和更新。    分塊的功能是按照一定的粒度將數據流切分爲數據塊,最簡單的作法是按照固定的長度進行切分,這樣每一個數據塊是一樣長的,但是這樣分塊方法會出現數據偏移的問題,即增加或刪除一個字節,後面的數據塊將會受到影響。於是就出現了內容感知分塊法,這種方法根據數據的內容進行分塊,通常生成的數據塊是不一樣長的,最典型的就是採用Rabin指紋的分塊算法。

哈希的功能是計算每一個數據塊的指紋,指紋將會作爲數據塊的身份證,伴其終生。最長使用的哈希算法是SHA-1算法,它爲每一個數據塊生成一個20字節的指紋。指紋將會作爲區分數據塊的依據,這麼做的原因是逐個字節比較數據塊的開銷太大了。

查重就是在系統裏查找重複的指紋。重複數據刪除系統會保存一張指紋索引,裏面記錄了所有已存儲數據塊的指紋,索引數據結構的實現有多種選擇,可以採用哈希表和B樹。查重是重複數據刪除系統的關鍵環節,大多數研究人員都將精力放到了這一個環節。

存儲就是將數據塊寫入存儲設備,只有當查重沒有發現重複數據塊纔會執行這一步,如果查重發現系統已經存儲了該數據塊,就會跳過這一步。

更新就是更新指紋索引,只有當查重沒有發現重複數據塊纔會執行這一步,將該指紋插入到索引結構中,如果查重發現系統已經存儲了該指紋,就會跳過這一步。

1.2.2 重複數據刪除的性能問題

重複數據刪除的邏輯雖然簡單,但是存在的問題卻不少,最引人關注的就是磁盤瓶頸問題。查重的關鍵是系統保存的指紋索引,如果採用SHA-1算法和8KB的平均塊長,那麼指紋和數據的比例大約是1:400,那麼8TB的數據會產生20GB的指紋。重複數據刪除的目的就是節約成本,那麼用RAM來存儲指紋無疑違背了這一原則,通常的作法就是使用磁盤來存儲指紋索引。於是系統每接收一個數據塊,都需要去訪問磁盤中的指紋索引,而且極有可能導致多次磁盤IO,因爲不論是哈希表還是B樹,都不可能保證一次找到想要的數據。最壞的情況就是指紋索引根本沒有該指紋,而系統不得不訪問B樹的高度次磁盤,更可悲的是這完全是無用功。

當存儲成爲性能瓶頸,最常用的作法有二:(1)使用速度更快的存儲設備替代原有的存儲設備;(2)使用體系結構的辦法,用容量較小但速度更快的存儲設備構建緩存。現在大多數的研究者採用的是第二種辦法,考慮到SHA-1是隨機性非常高的算法,指紋將會隨機地分佈在索引的各個位置,局部性很差導致了緩存的低命中率,所以設計一個優秀的緩存並不是一件容易的事情,好在現在已經有了非常成熟的解決方案。本文的一個重點是討論如何使用第一種方法來解決性能問題。

目前重複數據刪除技術已經被廣泛應用到備份和歸檔領域,但是在主存儲系統,如文件系統、虛擬機等應用場景,仍然舉步維艱。據我所知,只有ZFS和opendedup文件系統採用了重複數據刪除技術,而且更多的是實驗性質。原因就是重複數據刪除對系統的性能影響太大,不僅僅是前文提到的寫性能,而且讀性能也受到了影響,原因是經過重複數據刪除之後的數據是離散分佈在磁盤上的,使得文件系統的緩存不能發揮作用。

2 利用重複數據刪除技術提高SSD的壽命

SSD的壽命問題是其還不能取代磁盤的重要原因,寫密集型應用會加速SSD的損毀,IO負載是由上層應用決定,除了儘量避免SSD用於寫密集型應用以外,還可以考慮如何從設備一級來減少IO負載。正如前文介紹的,重複數據刪除技術可以發現IO負載中的重複數據,如果要寫的數據已經存儲在SSD了,那麼就可以避免這一次寫操作。但是重複數據刪除技術會帶來大量的計算開銷,如果將其放在SSD讀寫的關鍵路徑上,無疑對性能會產生嚴重的影響,下面介紹的CAFTL針對這些問題進行了研究。

2.1 CAFTL的重複數據刪除

CAFTL[1]的全稱是Content-Aware Flash Translation Layer,顧名思義就是要在FTL這一層攔截寫入重複數據的IO請求。CAFTL在設計時面臨的最大的挑戰就是SSD本身的計算、內存資源十分有限以及非常高的性能要求。因此CAFTL從一開始就不準備追求完美的重刪率,採用了in-line和out-of-line相結合的方式,在IO負載很重的情況下,將重複數據刪除排除在關鍵路徑之外,從而保證系統的性能。

因爲文件系統的IO負載存在很多小寫請求,備份系統常用的變長分塊並不適合CAFTL的應用場景,所以CAFTL採用的是定長的分塊方法,將數據塊定爲page大小,這種設定非常自然,因爲flash的讀寫都是以page爲單位的。

圖2展示了CAFTL處理寫請求的流程,(1)寫請求的數據會被放到緩存中,(2)計算數據的指紋,(3)查找fingerprint store對指紋進行查重,(4)如果發現匹配的指紋,就更新映射表,將寫請求的邏輯地址映射到匹配數據塊的物理地址,(5)如果沒有發現匹配的指紋,照常寫入數據。

fingerprint store就是CAFTL的指紋索引,由於flash內存有限,再考慮到大部分指紋其實都沒有機會發生匹配,CAFTL並不保存完整的指紋索引,而是保存發生匹配最多的熱門指紋。如圖所示,指紋索引被分爲多個segment,segment又由bucket鏈表組成,bucket的每一個條目保存的信息是{?ngerprint, (location, hotness)},其中hotness表示這個指紋的熱度(也就是引用數)。通過摸運算,指紋被映射到某個segment中,然後依次查找每一個bucket。

 

圖2 CAFTL處理寫請求的流程

考慮一下CAFTL的修改問題,IO請求修改一個page的數據,傳統SSD只需要讓舊page失效,將新數據寫到新page再修改映射表。但是CAFTL需要查看是否有其它邏輯地址(LBA)被映射到這個舊page的物理地址(PBA),這就需要遍歷整個映射表。因此CAFTL設計了二重映射機制,引入了虛擬地址(VBA)的概念,增加了二級映射表,表的每一個條目的信息是{PBA, reference},這裏的reference指的是指紋的引用數,注意reference是4字節的,而hotness是1字節的,大於255的引用數都是一樣的熱度。指向同一個PBA的LBA將會改爲指向一個VBA,再由VBA映射到PBA。考慮到31位地址可以尋址2G個page,相當於8TB數據,這對於目前的SSD已經足夠了,CAFTL將32位地址的第一位用於區分PBA和VBA。如果要修改一個LBA的數據,先判斷映射到的目標地址是PBA還是VBA,如果是VBA就不將舊page置爲失效,而是將其引用次數減1。

2.2 in-line重複數據刪除的性能優化

flash自身的資源是非常有限的,而重複數據刪除對計算資源和內存資源的需求很大。圖3是緩存大小對CAFTL讀寫性能影響,橫座標是11種不同的IO負載,縱座標是相對於普通FTL的性能影響,當flash的內存很少時,重複數據刪除對性能的影響比較嚴重,因爲大量的寫請求會因爲不能得到緩存而被阻塞。圖4是處理器對CAFTL讀性能的影響,因爲SSD的寫是異步的,寫入緩存就是寫入成功,精確測量什麼時候真正寫入flash比較困難,所以通過測試讀性能從側面反映讀被寫阻塞了。可以說兩個測試反映的都是緩衝區被填滿後導致IO請求阻塞。針對這個問題,CAFTL採取了幾個優化方法。

 
圖3 緩存對CAFTL的影響

 

圖4 哈希計算速度對性能的影響

CAFTL通過取樣法減少指紋的計算。在文件系統的應用場景下,重複數據量並不是很多,這意味着大多數的指紋計算都是在“浪費”時間。因此CAFTL將若干個page組成一個抽樣元組,從中取一個page計算指紋,如果這個指紋能在指紋索引中查到,說明這個元組中很有可能存在大量重複數據,反之則認爲其中重複數據很少。CAFTL的抽樣方法是對元組中每一個page讀取前四個字節並轉換爲數字,選擇值最大的page爲樣本。這種做法的理論依據是Broder定律[5],即兩個集合最大或最小的元素相同的概率等於兩個集合相似度。抽樣法會丟失部分重刪率,但對性能的改進比較顯著。

預哈希技術,CAFTL爲每一個page額外計算和存儲一個4字節的CRC32校驗碼。因爲CRC32的計算速度比SHA-1要快得多,所以在計算page的指紋之前先計算CRC32校驗碼,如果不能在指紋索引中查找到此校驗碼,就可以肯定其指紋也不在指紋索引裏,從而避免SHA-1計算。

動態切換,當IO負載很高的時候,就關閉in-line重複數據刪除。CAFTL通過觀察緩存的使用情況來判斷當前的IO負載,如果緩存所剩無幾就關閉in-line重複數據刪除,反之則開啓in-line重複數據刪除。

2.3 CAFTL的out-of-line重複數據刪除

由於CAFTL對性能的要求很苛刻, out-of-line的重複數據刪除幾乎成爲必然的選擇,在系統空閒的時候進行重複數據刪除可以避開IO請求的關鍵路徑。

上文介紹的in-line重複數據刪除會遺漏一些重複的數據,並且存在一些page沒有計算指紋,out-of-line重複數據刪除的工作就是找出“漏網之魚”。out-of-line重複數據刪除的工作原理比較簡單,CAFTL掃描flash的元數據,找出未計算指紋的page,給它們補上SHA-1指紋並判斷是否重複。

3 利用flash技術解決重複數據刪除的磁盤瓶頸問題

flash的隨機讀性能和順序讀性能一樣出色,從這點看無疑非常適合存儲重複數據刪除技術的指紋索引,因爲指紋索引是一個讀密集型的數據結構。但是flash也有缺點,其隨機寫性能比順序寫要低很多,而且flash的寫以page爲單位而且不能二次編程,這就導致小寫成爲flash的問題,而索引更新恰恰都是隨機寫和小寫。下面就介紹一種揚長避短的解決方案:Chunk Metadata Store on Flash(ChunkStash)。

3.1 ChunkStash的體系結構

圖5所示爲ChunkStash[2]的體系結構,一共由三部分組成:RAM存儲區,flash存儲區和磁盤存儲區。ChunkStash的磁盤存儲區是一個container容器,如圖6所示,這部分的設計採用的是Data Domain的設計方案[3],爲了保護數據和指紋的局部性,所有的數據塊都用container進行封裝存儲在磁盤上,container包括數據區(1024個數據塊)和元數據區(64KB),數據區存儲着數據塊,元數據區存儲了數據塊的指紋、偏移、長度等元數據信息,container都是不可修改,內存中會有一個container緩衝區,當寫滿時就給container貼上“封條”寫到磁盤去,如此既保護了數據的局部性也避免了磁盤小寫。flash存儲區存放container元數據區的副本,取代了磁盤中的指紋索引,爲了避免隨機寫和小寫,flash都是按順序寫的,而且和磁盤的container容器同步更新,一個container的元數據區是64KB,所以flash每次都是順序寫16個page(如果page是4KB的話)。RAM中的數據結構是最複雜的,也是ChunkStash的關鍵,Chunk Metadata Write Buffer是container緩衝區的元數據部分,Metadata Cache是指紋緩存,每次訪問flash中的指紋就將其所屬container的所有指紋都讀入指紋緩存中,有效減少訪問flash的次數,由於flash中的指紋是根據數據塊的邏輯順序存儲的,必須在內存中對它建立索引方便查找,Hash Table Index就是爲此設計的,它的結構比較複雜,可以將其看成是指紋索引的摘要。

 

圖5 ChunkStash體系結構


圖6 Container容器

圖7是ChunkStash重複數據刪除的流程圖。當一個數據塊到達系統,首先會在指紋緩存中查找,如果未命中就繼續在container緩衝區中找,仍未找到則再查找哈希表定位其在flash中可能的位置,最後如果是新數據塊就加入container緩衝區。
 

圖7 流程圖

3.2 爲ChunkStash設計的哈希表

由於flash中的指紋按照數據塊的邏輯順序存儲,必須爲其建立索引,不然查重就得順序遍歷指紋庫了。ChunkStash在內存中保存了一張哈希表來索引flash中的指紋庫,這張哈希表的設計目標是每當指紋緩存未命中,最多隻需要訪問一次flash就可以判斷指紋是否存在。哈希表的結構如圖7所示,哈希表的每個條目需要6個字節。

 

圖8 哈希表結構

哈希表使用的關鍵技術是cuckoo hashing。傳統的解決哈希衝突的方法有線性探測和拉鍊法,線性探測會增加查詢哈希表的時間,而拉鍊法佔用較多內存。cuckoo hashing爲每個鍵(在ChunkStash中就是指紋)分配n個候選位置,如果新來的鍵x的n個位置都被佔了,那麼就強迫其中一個位置的鍵y讓出位置,y再在自己的剩餘n-1個位置中找位置,依次類推直到所有鍵都找到位置。但是爲y重新分配位置可能又會導致一系列重新分配,甚至產生死鎖,所以系統只會嘗試固定次數的重新分配,實在不行就把鍵放入輔助鏈表。這樣查找哈希表的最壞情況是搜索n個位置加上輔助鏈表,研究表明,輔助鏈表的長度非常小。

ChunkStash的哈希表使用n個哈希函數h1,……,hn計算n個候選位置。要獲得指紋的候選位置,就分別計算h1(x),……,hn(x),候選位置就是計算結果低位取模。圖8中,compact key signature是指紋的摘要,取自哈希函數計算結果的高位,pointer是指向flash的指針。查找哈希表的過程是這樣的:計算指紋x的第k個候選位置,即hk(x)的低位取模,再將哈希表中這個位置存儲的簽名和hk(x)的高位比較,如果不匹配就查找下一個候選位置,如果匹配就根據pointer找到flash中完整的指紋,如果完整的指紋也匹配就查找成功了,如果未匹配就表示查找失敗,將指紋插入這個位置,併爲這個位置的原指紋尋找其他的候選位置。

另外,在最壞的情況下,查詢一次哈希表需要計算n個哈希函數,這是可以優化的。有研究表明兩個哈希函數可以模擬多個哈希函數:

hi (x)=g1 (x)+i*g2 (x)

因此,在cuckoo hashing中使用較多的哈希函數並不會造成額外的開銷。

3.3 ChunkStash性能評價

通過flash和RAM相結合的方式存儲指紋索引,ChunkStash避免flash的隨機寫操作的同時,充分利用了flash的隨機讀性能。圖9是ChunkStash和Data Domain設計方案Zhu08-BDB的比較,Zhu08-BDB在內存中用Bloom Filter過濾指紋索引中不存在的指紋,磁盤中用數據庫保存完整指紋索引。縱座標是備份吞吐率,橫座標表示兩次完全備份,第一次重複數據較少,第二次重複數據很多。比較Zhu08-BDB-HDD和ChunkStash-SSD可以看出SSD對於性能的提高是非常明顯的。實驗還測試了ChunkStash的哈希表的效率,Zhu08-BDB-SSD表示將數據庫存儲在SSD中,比較Zhu08-BDB-SSD和ChunkStash-SSD可以看出哈希表的效率要比Bloom Filter高得多。

但是應該看到ChunkStash的高效是必然,因爲不僅flash的成本要比磁盤高得多,而且其哈希表使用的RAM也比Bloom Filter多得多。每一個指紋需在哈希表佔6字節,而平均塊長爲8KB、總數據量爲8TB的數據集有1G個指紋,再考慮到哈希表的裝載因子不可能是1,其實際消耗的內存空間還會更大。
 

圖9 ChunkStash和DDFS的性能比較

4 總結

重複數據刪除技術和flash存儲器都是在存儲學界討論非常熱門的技術,但由於各自存在的侷限性,都未能在更多的場景中扮演更重要的角色。

重複數據刪除技術能夠節省大量的存儲和帶寬資源,但是同時帶來大量的計算和索引開銷,不能勝任對性能要求比較苛刻的場景。虛擬機是一個應用重複數據刪除的理想領域,因爲多個虛擬機之間經常安裝相同的系統軟件和應用,虛擬機磁盤鏡像之間會存在大量重複數據,目前雖然已有研究人員進行了實驗,但爲了降低性能影響,大多采用了定長分塊和out-of-line重複數據刪除,使得重複數據刪除不能發揮最大的作用。在文件系統中也存在可觀的重複數據,文件系統的負載中讀請求佔據了很大的比例,而重複數據刪除技術會將文件的數據分散在磁盤,使得緩存失效,導致大量磁盤隨機讀,所以鮮有文件系統提供對重複數據刪除技術的支持,opendedup是其中的佼佼者。

SSD是以磁盤取代者的姿態出現在公衆視野的,但目前來看,由於壽命和可靠性等方面的原因,要想徹底顛覆磁盤的地位仍然任重道遠。flash芯片屬於半導體存儲器,具有容量較大、沒有機械運動、能耗低、高效的隨機訪問等特點,但是其有限的擦除次數導致SSD的壽命較短。儘管SSD生產商宣稱SSD能夠支持數年的日常使用,關於SSD壽命的問題仍然討論地非常激烈,SSD仍然有待證明自己。

研究人員發現二者之間其實存在互補的關係,SSD可以提供重複數據刪除需要的隨機訪問速度,而重複數據刪除可以通過降低SSD的IO負載來延長其壽命,於是近年來關於二者相互作用的研究越來越多。重複數據刪除技術要想在文件系統等領域獲得一席之地,一定需要像flash這樣的新型存儲期間的支持;而flash要想進軍數據中心,而不僅僅是存在於玩具之中,也需要重複數據刪除這樣的技術來幫忙。

CAFTL和ChunkStash在這方面做了很好的嘗試。通過in-line和out-of-line相結合的方式,以及一些優化策略,CAFTL把性能影響降低了很多,但是它的重刪率也受到了很大的影響。爲了避免flash不擅長的隨機寫和小寫,ChunkStash在flash中存儲了指紋庫,內存中用壓縮的指紋索引檢索指紋庫,這樣可以達到很高的性能,但是消耗較多內存,導致成本很高。

參考文獻

[1] Feng Chen, Tian Luo, Xiaodong Zhang. CAFTL: A Content-Aware Flash Translation Layer Enhancing the Lifespan of Flash Memory based Solid State Drives. In Proceedings of FAST’11.
[2] DEBNATH, B. , SENGUPTA, S. , AND LI, J. ChunkStash Speeding up Inline Storage Deduplication using Flash Memory. In Proceedings of USENIX’10.
[3] ZHU, B. , LI, K. , AND PATTERSON, H. Avoiding the Disk Bottleneck in the Data Domain Deduplication File System. In Proceedings of FAST’08.
[4] AGRAWAL, N. , PRABHAKARAN, V. , WOBBER, T. , DAVIS, J. D. , MANASSE, M. , AND PANIGRAHY, R. Design tradeoffs for SSD performance. In Proceedings of USENIX’08.
[5] A. Z. Broder. On the resemblance and containment of documents. In Proceedings of SEQUENCES ’97.


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