天天看點

XFS 簡介

FS 最初是由 Silicon Graphics,Inc. 于 90 年代初開發的。那時,SGI

發現他們的現有檔案系統(existing filesystem,EFS)正在迅速變得不适應當時激烈的計算競争。為解決這個問題,SGI

決定設計一種全新的高性能 64 位檔案系統,而不是試圖調整 EFS在先天設計上的某些缺陷。是以,XFS 誕生了,并于 1994 年随 IRIX

5.3 的釋出而應用于計算。它至今仍作為 SGI 基于 IRIX 的産品(從工作站到超級計算機)的底層檔案系統來使用。現在,XFS 也可以用于

Linux。XFS 的 Linux 版的到來是激動人心的,首先因為它為 Linux

社群提供了一種健壯的、優秀的以及功能豐富的檔案系統,并且這種檔案系統所具有的可伸縮性能夠滿足最苛刻的存儲需求。

XFS 簡介

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 檔案系統的 <code>mkfs.xfs</code> 和 <code>mount</code> 選項以後,當處理諸如在核心源檔案樹中的中等大小的檔案時,XFS 執行效率比 ReiserFS 略好一點。但這不包括删除操作;至少目前,ReiserFS 和 ext3 删除檔案要比 XFS 快得多。

性能總結

XFS 在哪些方面可以給您提供哪種性能,對于這一點,希望我的測試結果有助于您形成總的概念;我的測試結果顯示,如果需要操作大檔案,XFS

檔案系統是您最好的選擇。對于小檔案和中等大小的檔案,如果您使用一些能夠增強性能的選項建立和挂裝 XFS 檔案系統的話,它可以與

ReiserFS 匹敵,有時甚至比 ReiserFS 更快。在“data=journal”方式下的 ext3

提供了良好性能,但是它很難獲得一緻的性能資料,原因在于,ext3

将先前測試中的資料清倉到磁盤所使用的方式,具有明顯的不規律性,這将導緻某種磁盤抖動。

XFS 簡介
XFS 簡介
XFS 簡介
XFS 簡介

回頁首

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

性能,因為可以同時有多個中繼資料更新處于“在傳輸中”。

XFS 簡介
XFS 簡介
XFS 簡介
XFS 簡介

B+ 樹無處不在

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

當對索引節點進行管理時,XFS 也是很有效的。每個配置設定組在需要時以 64 個索引節點為一組來配置設定它們。每個配置設定組通過使用 B+

樹來跟蹤自己的索引節點,該 B+ 樹記錄着特定索引節點号在磁盤上的位置。您會發現 XFS 之是以盡可能多地使用 B+ 樹,原因在于 B+

樹的優越性能和極大的可擴充性。

XFS 簡介
XFS 簡介
XFS 簡介
XFS 簡介

日志記錄

當然,XFS 也是一種日志記錄檔案系統,它允許意外重新開機後的快速恢複。象 ReiserFS 一樣,XFS 使用邏輯日志;即,它不象

ext3 那樣将文字檔案系統塊記錄到日志,而是使用一種高效的磁盤格式來記錄中繼資料的變動。就 XFS

而言,邏輯日志記錄是很适合的;在高端硬體上,日志經常是整個檔案系統中争用最多的資源。通過使用節省空間的邏輯日志記錄,可以将對日志的争用降至最小。

另外,XFS 允許将日志存儲在另一個塊裝置上,例如,另一個磁盤上的一個分區。這個特性很有用,它進一步改進了 XFS 檔案系統的性能。

象 ReiserFS 一樣,XFS 隻對中繼資料進行日志記錄,并且在寫中繼資料之前,XFS

不采取任何專門的預防措施來確定将資料儲存到磁盤。這意味着,使用 XFS(就象使用

ReiserFS)時,如果發生意外的重新開機,則最近修改的資料有可能丢失。然而,XFS 日志有兩個特性使得這個問題不象使用 ReiserFS

時那麼常見。

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

現在,關于資料丢失問題本身,該怎麼辦呢?通常,使用 XFS 時,該問題被最小化了,原因在于以下事實:XFS 通常比 ReiserFS

更頻繁地将暫挂中繼資料更新寫到磁盤,尤其是在磁盤高頻率活動期間。是以,如果發生死鎖,那麼,最近中繼資料修改的丢失,通常比使用 ReiserFS

時要少。當然,這不能徹底解決不及時寫資料塊的問題,但是,更頻繁地寫中繼資料也确實促進了更頻繁地寫資料。

XFS 簡介
XFS 簡介
XFS 簡介
XFS 簡介

延遲配置設定

研究一下 延遲配置設定這個 XFS 獨有的特性,然後我們将結束關于 XFS 的技術概述。正如您可能知道的,術語 配置設定(allocation)是指:查找空閑空間區域并用于存儲新資料的過程。

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

通過延遲配置設定,XFS 赢得了許多機會來優化寫性能。到了要将資料寫到磁盤的時候,XFS 能夠以這種優化檔案系統性能的方式,智能地配置設定空閑空間。尤其是,如果要将一批新資料添加到單一檔案,XFS 可以在磁盤上配置設定一個 單一、相鄰區域來儲存這些資料。如果 XFS 沒有延遲它的配置設定決定,那麼,它也許已經不知不覺地将資料寫到了多個非相鄰塊中,進而顯著地降低了寫性能。但是,因為 XFS 延遲了它的配置設定決定,是以,它能夠一下子寫完資料,進而提高了寫性能,并減少了整個檔案系統的碎片。

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

[url]http://oss.sgi.com/projects/xfs/[/url]

XFS 簡介

繼續閱讀