主文件系統 vs 二級文件系統 (EMC篇)

文主要基於FAST11和FAST12的兩篇論文:A study of practical deduplication和Characteristics of backup workloads in production systems。前者來自微軟,主要分析的是用於主存儲系統的文件系統;後者來自EMC,分析的是用於二級存儲系統(如備份、歸檔)的文件系統。兩篇論文共同的特點是實驗的數據集都非常龐大,因此分析的結果對於系統設計具有參考價值。而且從數據中我們也可以發現主存儲系統和二級存儲系統在使用方式等方面有很多區別。

再來看看EMC的實驗。

1. 實驗方法

作者的實驗分爲兩部分,第一部分分析超過10000臺的EMC Data Domain存儲系統上傳的autosupport,從這些信息中可以抽取出文件統計數據、系統容量等系統元數據,這部分實驗分析了文件系統的總體趨勢,特點是廣度;第二部分分析部分系統中的數據快照,包括塊一級的元數據(指紋等),這部分實驗分析了存儲系統更多細節,特點是深度。

Data Domain存儲系統會定期向EMC反饋autosupport報告,這些報告可以幫助技術支持檢測和檢查系統的潛在問題。EMC每天能收到超過1萬份這樣報告,這些數據對於分析二級存儲系統的特徵非常有幫助。作者收集了一個禮拜的autosupport,從中排除了使用時間少於3個月或者使用空間不到2.5%的系統,剩下的超過1萬個系統的年齡從3個月到7年都有。

第二部分實驗數據來自幾個重刪存儲系統,這些重刪存儲系統採用的是DDFS(見FAST2008)架構。作者收集了每個文件和數據塊的元數據,包括數據塊的大小、指紋、子塊大小、子塊指紋,文件的大小、修改時間、指紋序列,數據塊在磁盤的分佈。收集這些數據的目的之一就是分析不同系統配置對吞吐率和壓縮率的影響,因爲系統已經是按8KB平均塊長分塊的,所以無法再次分塊,所以作者把每個8KB塊分成平均長度爲1KB的子塊,並計算子塊指紋,方便之後研究平均塊長對系統的影響。利用這些元數據可以整理出每個文件的詳細元數據,文件元數據包括該文件的數據塊元數據(指紋,大小,位置等)序列。分析寫負載時,可以將文件按修改時間排序,輸入模擬器仿真系統的運行,分析重刪和緩存的效率。分析讀負載時,順序讀取一串指紋,分析完成操作需要讀取多少個容器。

因爲作者實驗的存儲系統是DDFS,只能獲得指紋的快照,而不能獲得數據塊的快照,重新分塊是不現實的,所以作者採取了一些策略來測試塊長對重刪率的影響。在數據收集階段,每讀取一個塊(平均塊長8KB),都進一步切爲平均1KB的子塊,實驗可以用1KB子塊合成2KB或4KB子塊、用8KB塊合成更大的塊,從而近似分析不同塊長對重刪率的影響。具體合併算法:通常系統對塊長有最大值和最小值的限制,合併時先選擇最少的塊數達到最小值要求,然後確定一個數字N,這個數字是不超過最大值要求所能追加的最大塊數,最後就是要在這N個塊確定一個斷點,作者是選擇值最大的指紋作爲斷點。作者的實驗表明這種算法能近似模擬出塊長對重刪的影響,誤差不大。

2. 文件系統元數據

圖1 文件大小

圖1是文件大小的統計情況,並且同時給出了微軟的實驗結果(藍色)方便比較。二級文件系統的文件幾乎比主文件系統大三個數量級,這是必然的,因爲大多數備份系統會把文件打包成類似tar文件的格式。這降低了文件級重刪的性能,但增加了數據流的局部性。注意到很大部分二級文件系統的存儲空間被大文件(數百GB)佔用,主文件系統針對小文件的優化策略,如把數據直接放到inode,在二級文件系統就沒什麼用了。

圖2 文件和目錄的統計數據

圖2是關於文件數和目錄數的統計數據,與主文件系統相比,二級文件系統的文件數和目錄數都少很多。(c)顯示二級文件系統單個目錄內包含更多的文件。

圖3 文件年齡

圖3顯示了二級文件系統的年齡分佈,均值是20天,顯然比主文件系統的年齡要小得多,這是因爲備份文件通常有一個保留時限,到達時限就會刪除。20天的平均壽命暗示這個保留時間通常是40天左右。

圖4 文件系統代謝速率

圖4顯示了文件系統數據的代謝速率,即一個時間週期內釋放和寫入的數據佔總存儲數據的比例。平均每週大約21%的存儲數據會被釋放和寫入,高代謝速率與圖3的文件年齡相應,體現了備份系統具有保留期限的特性。高代謝速率給我們的啓示是:二級文件系統不僅要提供足夠的寫吞吐率,而且釋放空間也要足夠快,像flash這種擦除性能很差的存儲設備可能不適合備份工作負載。重複數據刪除技術可以緩解這個問題。

圖5 寫負載比例

圖5是二級文件系統的讀負載佔總IO的比例,未統計垃圾回收和數據複製(容災備份)的IO,可見數據保護系統絕大多數IO都是寫。50%的系統寫操作佔90%以上,只有20%的系統讀操作多於寫。由於未統計數據複製中的讀操作,這幅圖低估了讀操作,然而由於數據複製既需要從源端讀數據也要向目標端寫數據,這不會改變寫操作的主宰地位。主文件系統中,讀操作差不多是寫的兩倍。


圖6 數據複製

爲了容災備份,很多備份系統會將備份數據進行復制傳輸到遠方,80%的系統至少會複製一部分備份數據。圖6說的是過去7天時間裏,寫入二級文件系統的數據有多少會被複制,平均值是100%。有一些系統的數據超過了100%,可能有幾個原因,比如數據被複制到多個目的地。如此高的複製率,增加了對讀性能的要求,也就是說備份系統不僅要提供足夠的寫性能,讀性能也不能落下。

圖7 存儲空間利用率

圖7將二級文件系統的存儲利用率與主文件系統的存儲利用率進行了比較,顯示二級文件系統的利用率更高,平均有60~70%的利用率,而主文件系統只有30~40%的利用率。利用率的差別從側面反映了兩種系統設計目標的差異:雖然在兩種環境中性能和容量都很重要,二級文件系統更強調有效利用存儲資源,而主文件系統更強調性能。

3. 重複數據刪除

微軟的論文對主文件系統的重複數據進行了評估,域爲1的情況下平均能刪除40%的數據,而域爲Whole Set的情況下能刪除70%左右的數據。EMC的論文則對二級文件系統的重複數據進行了測試。

圖8 重複數據

圖8顯示了二級文件系統的重刪率(重刪前存儲量/重刪後存儲量),平均值爲10.9,而主文件系統只有1.7(域爲1的情況)或者3(域爲Whole Set的情況)。

上面的實驗是廣泛地分析二級文件系統的特點,接下來則涉及更多細節,包括塊長對重刪率的影響以及讀寫緩存效率。

表1 用於分析的數據集。

表1中,Class B意思是備份,LT-B意思是Long Term Backup。Update Freq.可以是MF(Monthly Full,每月一次全備份),WF(Weekly Full),DF(Daily Full)或者DI(Daily Incremental)。Dedup Ratio和1-Wk Dedup.分別代表累計重刪率和一週重刪率。MedAge表示文件年齡的中間值,正好一半的文件年齡小於(大於)這個值。這些數據集的大小從4-5TB到200TB(重刪前大小),重刪率從2.2到14。重刪率最小的數據集是database2,其策略是每天一次全備份,然而備份保留時間只有3天。

表2 合併子塊的有效性

作者首先做了實驗來驗證合併子塊模擬不同塊長方法的合理性。表2中兩個數據集來自早起的研究(Tradeoffs in scalable data routing for deduplication clusters. in FAST 2011。EMC的人在FAST發paper和玩一樣,淚奔啊!),和表1無相關性。表2顯示Workstation數據集,合併子塊的重刪率稍高;而Email數據集,合併子塊大約低4~7%。證明了這種方法可以近似描述塊長對重刪率的影響。值得注意的是,作者計算重刪率時加入了元數據開銷,所以重刪率和原文略有不同。

圖9 塊長對重刪率的影響

圖9是塊長對重刪率的影響,爲了清晰,只畫出了表1中的四個數據集。對於大多數數據集,每次將塊長減半,能得到20~40%的重刪率提升,這與過去的研究基本吻合;但是減半塊長也意味着元數據開銷增加,如1KB塊長的重刪率都比2KB要差,這種情況下元數據開銷減少了10~20%的重刪率。較大的數據塊理所當然也會減少重刪率,事實上這種情況下database1數據集幾乎沒有重刪率。

重刪系統的瓶頸通常是查找重複數據塊,設計高效的緩存是解決瓶頸的關鍵。因此作者用實驗去驗證了DDFS提到的數據流局部性,以及緩存大小(32MB到1TB)和緩存單元(塊、容器)對(讀/寫)緩存命中率的影響。

圖10 (讀/寫)緩存命中率


最簡單的緩存策略是塊級LRU算法,但是大多數數據塊在一次備份或恢復只會出現一次,這就導致只有當緩存比一次備份/恢復作業的數據集大時,纔會有理想的命中率。數據流局部性(如DDFS,Sparse Index)可以用來改善命中率,即每次讀取一個數據塊的指紋(寫操作)或者數據(讀操作),就將該數據塊附近的數據塊指紋/數據一併預取到內存,爲了實現這個算法,就要將重刪後的數據塊按照其在數據流中的順序打包存放在磁盤上。

圖10(a)顯示了寫操作的緩存命中率,塊級LRU的緩存單元是數據塊,而數據流局部性算法的緩存單元是容器(4MB)。注意當數據塊不存在時,也會導致未命中,所以命中率的最大值是重刪率的倒數。使用32MB的緩存,塊級LRU算法能命中5~40%,只有緩存非常大時才能獲得理想的命中率。而利用數據流局部性的緩存即使在32MB的小緩存下,也能達到優秀的命中率。

圖10(b)是讀操作的緩存命中率。注意,讀操作緩存需要緩存的是數據塊,而寫操作只需要緩存指紋,導致同樣大小的緩存,讀操作緩存只能容納更少的條目。使用數據流局部性算法獲得的命中率比寫操作的要高,這是因爲讀操作不存在由於新數據塊導致的未命中。塊級LRU算法需要數TB的緩存才能達到較高命中率。綠線顯示的壓縮區域指的是DDFS中常規壓縮算法的作用單元,通常是128KB(通常包含10幾個數據塊),在6個數據集中和局部性算法性能相仿,但是另外2個數據集則命中率不高,這是因爲這兩個數據集在壓縮區域級碎片化嚴重,而由於容器級更大,碎片沒這麼嚴重。

4. 總結

和主文件系統相比,二級文件系統的文件更大,年齡更小,數量更少,目錄層次簡單。二級文件系統必須不斷消化主文件系統的數據,受容量限制就必須刪除舊的數據,這種高代謝速度要求二級文件系統維持很高的寫吞吐率和垃圾回收速率。根據Kryder定理,每10年主存儲系統容量漲100倍,而磁盤容量、帶寬資源增長卻相對較慢,面對這種挑戰,重複數據刪除等數據壓縮技術成爲了各大數據保護廠商的必然選擇。

一般情況下,二級文件系統對寫性能的要求比讀性能要高,而主文件系統則反之。但是爲了保證儘快恢復數據和容災備份,二級文件系統也需要足夠的讀性能。優化讀性能要求磁盤按順序存儲數據,而重複數據刪除可能會惡化碎片情況(作者的實驗卻沒有體現出這一點,至少容器級的緩存受碎片影響不大)。

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