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 社區提供了一種健壯的、優秀的以及功能豐富的文件系統,並且這種文件系統所具有的可伸縮性能夠滿足最苛刻的存儲需求。






到目前爲止,選擇合適的下一代 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.xfsmount 選項以後,當處理諸如在內核源文件樹中的中等大小的文件時,XFS 執行效率比 ReiserFS 略好一點。但這不包括刪除操作;至少目前,ReiserFS 和 ext3 刪除文件要比 XFS 快得多。
XFS 在哪些方面可以給您提供哪種性能,對於這一點,希望我的測試結果有助於您形成總的概念;我的測試結果顯示,如果需要操作大文件,XFS 文件系統是您最好的選擇。對於小文件和中等大小的文件,如果您使用一些能夠增強性能的選項創建和掛裝 XFS 文件系統的話,它可以與 ReiserFS 匹敵,有時甚至比 ReiserFS 更快。在“data=journal”方式下的 ext3 提供了良好性能,但是它很難獲得一致的性能數據,原因在於,ext3 將先前測試中的數據清倉到磁盤所使用的方式,具有明顯的不規律性,這將導致某種磁盤抖動。




回頁首


在 USENIX '96 上刊載的文章“Scalability in the XFS Filesystem”中(請參閱本文後面的 參考資料),SGI 工程師解釋:他們設計 XFS 的主要思想只有一個,那就是:“考慮大東西”。確實,XFS 的設計消除了傳統文件系統中的一些限制。現在,讓我們研究 XFS 幕後一些有趣的設計特性,正是這些設計特性使這一點成爲可能。
當創建 XFS 文件系統時,底層塊設備被分割成八個或更多個大小相等的線性區域(region)。您可以將它們想象成“塊”(chunk)或者“線性範圍 (range)”,但是在 XFS 術語中,每個區域稱爲一個“分配組”。分配組是唯一的,因爲每個分配組管理自己的索引節點(inode)和空閒空間,實際上,是將這些分配組轉化爲一種文 件子系統,這些子系統正確地透明存在於 XFS 文件系統內。
那麼,XFS 到底爲什麼要有分配組呢?主要原因是,XFS 使用分配組,以便能有效地處理並行 IO。因爲,每個分配組實際上是一個獨立實體,所以內核可以 同時與 多個分配組交互。如果不使用分配組,XFS 文件系統代碼可能成爲一種性能瓶頸,迫使大量需求 IO 的進程“排隊”來使索引節點進行修改或執行其它種類的元數據密集操作。多虧了分配組,XFS 代碼將允許多個線程和進程持續以並行方式運行,即使它們中的許多線程和進程正在同一文件系統上執行大規模 IO 操作。因此,將 XFS 與某些高端硬件相結合,您將獲得高端性能而不會使文件系統成爲瓶頸。分配組還有助於在多處理器系統上優化並行 IO 性能,因爲可以同時有多個元數據更新處於“在傳輸中”。




回頁首


分配組在內部使用高效的 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 可能根本不需要將這些文件全部寫到磁盤。因爲從未給這些文件分配任何塊,所以,也就不必釋放任何塊,甚至根本沒有觸及底層文件系統元數據。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章