轉載.Linux三大檔案系統比較

qqmengxue發表於2010-08-31
最具權威的Linux三大檔案系統比較分析報告,來自新墨西哥州的阿爾布開克,Gentoo執行長Daniel Robbins的報告:
[@more@]關於作者
作者作者 Daniel Robbins 住在美國新墨西哥州的阿爾布開克(Albuquerque)。他是 Gentoo Technologies,Inc. 的總裁兼 CEO、 Gentoo Linux(用於 PC 的高階 Linux)的創始人,以及 Portage 系統(Linux 的下一代 移植系統)的創始人。他還是 Macmillan 出版的 Caldera OpenLinux Unleashed、 SuSE Linux Unleashed和 Samba Unleashed 等書籍的作者。Daniel 自小學二年級起就與計算機結下不解之緣,那時他首先接觸的是 Logo 程式語言,並沉溺於 Pac Man 遊戲中。這也許就是他至今仍擔任 SONY Electronic Publishing/Psygnosis 的首席圖形設計師的原因所在。Daniel 喜歡和妻子 Mary 以及他們的女兒 Hadassah 一起共度時光。可透過 與 Daniel 聯絡。

正文:
XFS、ReiserFS 和 ext3 的效能
到目前為止,選擇合適的下一代 Linux 檔案系統一直很簡單。那些只尋求原始效能的人通常傾向於使用 ReiserFS,而那些更關心資料完整性特性的人則首選 ext3。然而,隨著 XFS 的 Linux 版的釋出,事情突然變得令人困惑。尤其是,對於 ReiserFS 是否依然是下一代檔案系統效能方面的佼佼者,人們開始感到疑惑。

最近,我進行了一系列測試,試圖比較 XFS、ReiserFS 和 ext3 在原始效能方面的優劣。在與您分享該結果之前,理解以下事實很重要:該結果只著重比較了在單處理器系統上,系統負載較輕的情況下,常規檔案系統的效能趨勢,它並 不是衡量某一個檔案系統是否比另一個檔案系統“更好”的絕對尺度。儘管如此,我的結果應該可以幫助您形成一些概念,那就是:哪個檔案系統可能最適於某個特定任務。再次宣告,不應該將我的結果視為結論性的;最好的測試總是:在每個檔案系統上執行您的特定應用程式,以觀察它是如何執行的。

結果
在測試中,我發現 XFS 通常是相當快的。在大檔案操作方面,XFS 在所有測試中一直處於領先地位,這是意料之中的,因為其設計者花了數年時間設計和調整它,以便能夠極出色地完成此類任務。我還發現 XFS 有一個單點效能缺陷:它刪除檔案不是很快;在這一方面,ReiserFS 和 ext3 輕易地勝過了它。據 Steve Lord(SGI 的檔案系統軟體總工程師)說,剛編寫完一個補丁來解決該問題,並且不久將可以使用該補丁。


除此以外,XFS 的效能非常接近 ReiserFS,並在大多數測試指標上都超過了 ext3。XFS 最佳表現之一在於:象 ReiserFS 一樣,它不產生不必要的磁碟活動。XFS 設法在記憶體中快取儘可能多的資料,並且,通常僅當記憶體不足時,才會命令將資料寫到磁碟時。當它將資料清倉(flushing)到磁碟時,其它 IO 操作在很大程度上似乎不受影響。相反,在 ext3(“data=ordered”預設方式)下,將資料清倉到磁碟時,將導致許多額外尋道,甚至還會引起某種不必要的磁碟抖動(thrashing)(取決於 IO 負載)。

我的效能和調整測試主要是關於將 RAM 磁碟中未壓縮的核心原始檔 tar 包(tarball)抽取到要測試的檔案系統,然後遞迴地將新原始檔樹複製到同一檔案系統中的一個新目錄中。XFS 對這類任務執行得很好,儘管,最初 XFS 效能比 ReiserFS 略差一點。然而,在調整了測試 XFS 檔案系統的 mkfs.xfs 和 mount 選項以後,當處理諸如在核心原始檔樹中的中等大小的檔案時,XFS 執行效率比 ReiserFS 略好一點。但這不包括刪除操作;至少目前,ReiserFS 和 ext3 刪除檔案要比 XFS 快得多。

效能總結
XFS 在哪些方面可以給您提供哪種效能,對於這一點,希望我的測試結果有助於您形成總的概念;我的測試結果顯示,如果需要操作大檔案,XFS 檔案系統是您最好的選擇。對於小檔案和中等大小的檔案,如果您使用一些能夠增強效能的選項建立和掛裝 XFS 檔案系統的話,它可以與 ReiserFS 匹敵,有時甚至比 ReiserFS 更快。在“data=journal”方式下的 ext3 提供了良好效能,但是它很難獲得一致的效能資料,原因在於,ext3 將先前測試中的資料清倉到磁碟所使用的方式,具有明顯的不規律性,這將導致某種磁碟抖動。

XFS 設計
在 USENIX '96 上刊載的文章“Scalability in the XFS Filesystem”中(請參閱本文後面的 參考資料),SGI 工程師解釋:他們設計 XFS 的主要思想只有一個,那就是:“考慮大東西”。確實,XFS 的設計消除了傳統檔案系統中的一些限制。現在,讓我們研究 XFS 幕後一些有趣的設計特性,正是這些設計特性使這一點成為可能。

分配組(allocation groups)簡介
當建立 XFS 檔案系統時,底層塊裝置被分割成八個或更多個大小相等的線性區域(region)。您可以將它們想象成“塊”(chunk)或者“線性範圍(range)”,但是在 XFS 術語中,每個區域稱為一個“分配組”。分配組是唯一的,因為每個分配組管理自己的索引節點(inode)和空閒空間,實際上,是將這些分配組轉化為一種檔案子系統,這些子系統正確地透明存在於 XFS 檔案系統內。

分配組與可伸縮性
那麼,XFS 到底為什麼要有分配組呢?主要原因是,XFS 使用分配組,以便能有效地處理並行 IO。因為,每個分配組實際上是一個獨立實體,所以核心可以 同時與多個分配組互動。如果不使用分配組,XFS 檔案系統程式碼可能成為一種效能瓶頸,迫使大量需求 IO 的程式“排隊”來使索引節點進行修改或執行其它種類的後設資料密集操作。多虧了分配組,XFS 程式碼將允許多個執行緒和程式持續以並行方式執行,即使它們中的許多執行緒和程式正在同一檔案系統上執行大規模 IO 操作。因此,將 XFS 與某些高階硬體相結合,您將獲得高階效能而不會使檔案系統成為瓶頸。分配組還有助於在多處理器系統上最佳化並行 IO 效能,因為可以同時有多個後設資料更新處於“在傳輸中”。

B+ 樹無處不在
分配組在內部使用高效的 B+ 樹來跟蹤主要資料,譬如空閒空間的範圍和索引節點。實際上,每個分配組使用 兩棵 B+ 樹來跟蹤空閒空間;一棵樹按空閒空間的大小排序來儲存空閒空間的範圍,另一棵樹按塊裝置上起始物理位置的排序來儲存這些區域。XFS 擅長於迅速發現空閒空間區域,這種能力對於最大化寫效能很關鍵。

當對索引節點進行管理時,XFS 也是很有效的。每個分配組在需要時以 64 個索引節點為一組來分配它們。每個分配組透過使用 B+ 樹來跟蹤自己的索引節點,該 B+ 樹記錄著特定索引節點號在磁碟上的位置。您會發現 XFS 之所以儘可能多地使用 B+ 樹,原因在於 B+ 樹的優越效能和極大的可擴充套件性。

日誌記錄
當然,XFS 也是一種日誌記錄檔案系統,它允許意外重新引導後的快速恢復。象 ReiserFS 一樣,XFS 使用邏輯日誌;即,它不象 ext3 那樣將文字檔案系統塊記錄到日誌,而是使用一種高效的磁碟格式來記錄後設資料的變動。就 XFS 而言,邏輯日誌記錄是很適合的;在高階硬體上,日誌經常是整個檔案系統中爭用最多的資源。透過使用節省空間的邏輯日誌記錄,可以將對日誌的爭用降至最小。另外,XFS 允許將日誌儲存在另一個塊裝置上,例如,另一個磁碟上的一個分割槽。這個特性很有用,它進一步改進了 XFS 檔案系統的效能。

象 ReiserFS 一樣,XFS 只對後設資料進行日誌記錄,並且在寫後設資料之前,XFS 不採取任何專門的預防措施來確保將資料儲存到磁碟。這意味著,使用 XFS(就象使用 ReiserFS)時,如果發生意外的重新引導,則最近修改的資料有可能丟失。然而,XFS 日誌有兩個特性使得這個問題不象使用 ReiserFS 時那麼常見。

使用 ReiserFS 時,意外重新引導可能導致最近修改的檔案中包含先前刪除檔案的部分內容。除了資料丟失這個顯而易見的問題以外,理論上,這還可能引起安全性威脅。相反,當 XFS 日誌系統重新啟動時,XFS 確保任何未寫入的資料塊在重新引導時 置零。因此,丟失塊由空位元組來填充,這消除了安全性漏洞 ― 這是一種好得多的方法。

現在,關於資料丟失問題本身,該怎麼辦呢?通常,使用 XFS 時,該問題被最小化了,原因在於以下事實:XFS 通常比 ReiserFS 更頻繁地將暫掛後設資料更新寫到磁碟,尤其是在磁碟高頻率活動期間。因此,如果發生死鎖,那麼,最近後設資料修改的丟失,通常比使用 ReiserFS 時要少。當然,這不能徹底解決不及時寫資料塊的問題,但是,更頻繁地寫後設資料也確實促進了更頻繁地寫資料。

延遲分配
研究一下 延遲分配這個 XFS 獨有的特性,然後我們將結束關於 XFS 的技術概述。正如您可能知道的,術語 分配(allocation)是指:查詢空閒空間區域並用於儲存新資料的過程。

XFS 透過將分配過程分成兩個步驟來處理。首先,當 XFS 接收到要寫入的新資料時,它在 RAM 中記錄暫掛事務,並只在底層檔案系統上 保留適當空間。然而,儘管 XFS 為新資料保留了空間,但 它卻沒有決定將什麼檔案系統塊用於儲存資料,至少現在還沒決定。XFS 進行拖延,將這個決定延遲到最後可能的時刻,即直到該資料真正寫到磁碟之前作出。

透過延遲分配,XFS 贏得了許多機會來最佳化寫效能。到了要將資料寫到磁碟的時候,XFS 能夠以這種最佳化檔案系統效能的方式,智慧地分配空閒空間。尤其是,如果要將一批新資料新增到單一檔案,XFS 可以在磁碟上分配一個 單一、相鄰區域來儲存這些資料。如果 XFS 沒有延遲它的分配決定,那麼,它也許已經不知不覺地將資料寫到了多個非相鄰塊中,從而顯著地降低了寫效能。但是,因為 XFS 延遲了它的分配決定,所以,它能夠一下子寫完資料,從而提高了寫效能,並減少了整個檔案系統的碎片。

在效能上,延遲分配還有另一個優點。在要建立許多“短命的”臨時檔案的情況下,XFS 可能根本不需要將這些檔案全部寫到磁碟。因為從未給這些檔案分配任何塊,所以,也就不必釋放任何塊,甚至根本沒有觸及底層檔案系統後設資料。

結束語
我希望您喜歡閱讀這篇關於 XFS(Linux 的、功能強大的下一代檔案系統之一)的效能和技術特徵的文章。在下一篇文章中,我們再見,那時我將向您展示如何設定 XFS,並在您的系統上執行它。在下一篇文章中,我們還將研究 XFS 的一些高階特性,譬如 ACL 和擴充套件屬性。那麼我們下次見!

注:當檔案系統存在/boot分割槽時,並使用XFS檔案系統可能無法使用Grub引導,只能使用Lilo來引導系統,因XFS目前不支援Grub引導模式。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10130206/viewspace-1037640/,如需轉載,請註明出處,否則將追究法律責任。

相關文章