剖析 ext4

 

Linux 內核的每次發行都伴隨一些驚喜,今年 12 月份發行的 2.6.28 也不例外。這個發行版是首個穩定的 ext4 文件系統(它還包含其他出色的特性,比如正在開發的 Btrfs)。這個下一代擴展文件系統提供更好的伸縮性、可靠性和許多新功能。ext4 的伸縮性如此之大,以致最大的文件系統所用的磁盤空間將達到 100 萬 TB。

擴展文件系統的簡史

虛擬文件系統交換

VFS 是一個從上層文件系統用戶提取底層文件系統細節的層。在提取過程中,VFS 允許在特定 Linux 系統上同時支持多文件系統。

第一個受 Linux 支持的文件系統是 Minix 文件系統。這個文件系統有嚴重的性能問題,因此出現了另一個針對 Linux 的文件系統,即擴展文件系統。第 1 個擴展文件系統(ext1)由 Remy Card 設計,並於 1992 年 4 月引入到 Linux 中。ext1 文件系統是第一個使用虛擬文件系統(VFS)交換的文件系統。虛擬文件系統交換是在 0.96c 內核中實現的,支持的最大文件系統爲 2 GB。

第 2 個擴展文件系統(ext2)也是由 Remy Card 實現的,並於 1993 年 1 月引入到 Linux 中。它借鑑了當時文件系統(比如 Berkeley Fast File System [FFS])的先進想法。ext2 支持的最大文件系統爲 2TB,但是 2.6 內核將該文件系統支持的最大容量提升到 32TB。

閱讀 Tim Jones 在 developerWorks 上發表的其他文章

第 3 個擴展文件系統(ext3)是 Linux 文件系統的重大改進,儘管它在性能方面遜色於某些競爭對手。ext3 文件系統引入了日誌 概念,以在系統突然停止時提高文件系統的可靠性。雖然某些文件系統的性能更好(比如 Silicon Graphics 的 XFS 和 IBM® Journaled File System [JFS]),但 ext3 支持從使用 ext2 的系統進行就地(in-place)升級。ext3 由 Stephen Tweedie 實現,並於 2001 年 11 月引入。

今天,我們已經擁有第 4 個擴展文件系統(ext4)。ext4 在性能、伸縮性和可靠性方面進行了大量改進。最值得一提的是,ext4 支持 1 EB 的文件系統。ext4 是由 Theodore Tso(ext3 的維護者)領導的開發團隊實現的,並引入到 2.6.19 內核中。目前,它在 2.6.28 內核中已經很穩定(到 2008 年 12 月爲止)。

ext4 從競爭對手那裏借鑑了許多有用的概念。例如,在 JFS 中已經實現了使用區段(extent)來管理塊。另一個與塊管理相關的特性(延遲分配)已經在 XFS 和 Sun Microsystems 的 ZFS 中實現。

在 ext4 文件系統中,您可以發現各種改進和創新。這些改進包括新特性(新功能)、伸縮性(打破當前文件系統的限制)和可靠性(應對故障),當然也包括性能的改善。


功能

ext4 引入了大量新功能,但最重要的是與 ext3 的向後和向前兼容性,以及在時間戳上的改進。這些改進立足於提高未來的 Linux 系統的性能。

向後和向前兼容性

由於 ext3 是 Linux 上最受歡迎的文件系統之一,因此應該能夠輕鬆遷移到 ext4。爲此,ext4 被設計爲在 extent 方面具有向後和向前兼容性(參見圖 1)。ext4 與 ext3 是向前兼容的,這樣就可以將 ext3 文件系統掛載爲 ext4 文件系統。爲了充分利用 ext4 的優勢,必須實現文件系統的遷移,以轉換和利用新的 ext4 格式。您還可以將 ext4 掛載爲 ext3(向後兼容),但前提是 ext4 文件系統不能使用區段(將在性能小節對其進行討論)。


圖 1. ext4 的向後和向前兼容性
ext4 的向後和向前兼容性
 

除了兼容性特性之外,您還可以逐步地將 ext3 文件系統遷移到 ext4。這意味着沒有移動的舊文件可以保留 ext3 格式,但新的文件(或已被複制的舊文件)將採用新的 ext4 數據結構。您可以通過這種方式在線將 ext3 文件系統遷移到 ext4 文件系統。

提高時間戳分辨率和擴展範圍

令人驚訝的是,ext4 之前的擴展文件系統的時間戳都是以秒爲單位的。這已經能夠應付大多數設置,但隨着處理器的速度和集成程度(多核處理器)不斷提升,以及 Linux 開始向其他應用領域發展(比如高性能計算),基於秒的時間戳已經不夠用。ext4 設計時間戳時考慮到未來的發展,它將時間戳的單位提升到納秒。ext4 給時間範圍添加了兩個位,從而讓時間壽命再延長 500 年。


伸縮性

文件系統未來發展的一個重要方面就是伸縮性,即根據需求進行伸縮的能力。ext4 以多種方式現實了強大的伸縮性,它的伸縮性超越了 ext3,並且在文件系統元數據管理方面開闢了新領域。

突破文件系統的限制

ext4 的一個明顯差別就是它支持更大的文件系統、文件和子目錄。ext4 支持的最大文件系統爲 1 EB(1000 PB)。雖然根據今天的標準這個文件系統已經非常巨大,但存儲空間的消費會不斷增長,因此 ext4 必須考慮到未來的發展。ext4 支持最大 16 TB 的文件(假設由 4KB 的塊組成),這個容量是 ext3 的 8 倍。

最後,ext4 也擴展了子目錄的容量,將其從 32KB 擴展到無窮大。這是極端情況,我們還需要考慮文件系統的層次結構,因爲它的最大存儲容量爲 1 EB。此外,目錄索引也優化爲類似於散列 B 樹結構,因此儘管限制更加多,但 ext4 支持更快的查找。

區段

ext3 分配空間的方式是其主要缺點之一。ext3 使用空閒空間位映射來分配文件,這種方式不是很快,並且伸縮性不強。ext3 的格式對小文件而言是很高效的,但對於大文件則恰恰相反。ext4 使用區段取代 ext3 的機制,從而改善了空間的分配,並且支持更加高效的存儲結構。區段 是一種表示一組相鄰塊的方式。使用區段減少了元數據,因爲區段維護關於一組相鄰塊的存儲位置的信息(從而減少了總體元數據存儲),而不是一個塊的存儲位置的信息。

ext4 的區段採用分層的方法高效地表示小文件,並且使用區段樹高效地表示大文件。例如,單個 ext4 inode 有足夠的空間來引用 4 個區段(每個區段表示一組相鄰的塊)。對於大文件(包括片段文件),一個 inode 能夠引用一個索引節點,而每個索引節點能夠引用一個葉節點(引用多個區段)。這種持續的區段樹爲大文件(尤其是分散的文件)提供豐富的表示方式。這些節點還包含自主檢查機制,以阻止文件系統損壞帶來威脅。


性能

衡量一個新文件系統的最重要指標就是它的根本性能。這常常是最難實現的指標,因爲當文件系統變得龐大並且要求實現高可靠性時,將會以損害性能爲代價。但是,ext4 不僅解決了伸縮性和可靠性,它還提供各種改善性能的方法。

文件級預分配

某些應用程序,比如數據庫或內容流,要求將文件存儲在相鄰的塊上(利用相鄰塊的讀優化和最大化讀的命令-塊比率)。儘管區段能夠將相鄰塊劃分爲片段,但另一種更強大的方法是按照所需的大小預分配比較大的相鄰塊(XFS 以前就是採用這種方法)。ext4 通過一個新的系統調用來實現這個目的,這個調用將按照特定的大小預分配並初始化文件。然後,您就可以寫入必要的數據,併爲數據提供不錯的讀性能。

延遲塊分配

另一個基於文件大小的優化是延遲分配。這種性能優化延遲磁盤上的物理塊的分配,直到塊被刷入到磁盤時才進行分配。這種優化的關鍵是延遲物理塊的分配,直到需要在磁盤上寫這些物理塊時纔對其進行分配並寫到相鄰的塊。這類似於持久化預分配,惟一的區別是文件系統會自動執行這項任務。不過如果預先知道文件的大小時,持久化預分配是更好的選擇。

多個塊分配

這是最後一個與相鄰塊相關的優化,即針對 ext4 的塊分配器。在 ext3 中,塊分配器的工作方式是每次分配一個塊。當需要分配多個塊時,非相鄰塊中可能存在相鄰的數據。ext4 使用塊分配器修復了這個問題,它能夠在磁盤上一次分配多個塊。與前面其他優化一樣,這個優化在磁盤上收集相關的數據,以實現相鄰讀優化。

多個塊分配的另一個方面是分配塊時需要的處理量。記住,ext3 一次只分配一個塊。在最簡單的情況下,每個塊的分配都要有一個調用。如果一次分配多個塊,對塊分配器的調用就會大大減少,從而加快分配並減少處理量。


可靠性

ext4 文件系統可能會擴展得比較大,這將導致可靠性問題。但 ext4 通過許多自主保護和自主修復機制來解決這個問題。

執行文件系統日誌校驗和

和 ext3 一樣,ext4 也是一個日誌文件系統。日誌記錄 就是通過日記(磁盤上相鄰區域的專門循環記錄)記錄文件系統的變更的過程。因此,根據日誌對物理存儲執行實際變更更加可靠,並且能夠確保一致性,即使在操作期間出現系統崩潰或電源中斷。這樣做可以減少文件系統損壞的機率。

但是即使進行日誌記錄,如果日誌出現錯誤仍然會導致文件系統損壞。爲了解決這個問題,ext4 對日誌執行校驗和,確保有效變更能夠在底層文件系統上正確完成。在 參考資料 小節可以找到其他關於日誌記錄(ext4 的重要部分)的資料。

ext4 支持根據用戶需求採用多種模式的日誌記錄。例如,ext4 支持 Writeback 模式,它僅記錄元數據;或 Ordered 模式,它記錄元數據,但寫爲元數據的數據是從日誌中寫入的;或 Journal 模式(最可靠的模式),它同時記錄元數據和數據。注意,雖然 Journal 模式是確保文件系統一致的最佳選擇,但它也是最慢的,因爲所有數據都要經過日誌。

在線磁盤碎片整理

儘管 ext4 添加一些特性來減少文件系統的碎片(比如將相鄰塊分配爲區段),但隨着系統使用時間的增加,碎片是難以完全避免的。因此出現了在線碎片整理工具,它們可以對文件系統和單個文件執行碎片整理,從而改善性能。在線碎片整理程序是一個簡單的工具,它將文件複製到引用相鄰區段的新 ext4 inode。

在線碎片整理還可以減少檢查文件系統所需的時間(fsck)。ext4 將未使用的塊組標記到 inode 表中,並讓 fsck 進程忽略它們以加快檢查速度。當操作系統因內部損壞(隨着文件系統變大,這是不可避免的)而檢查文件系統時,ext4 的設計方式將能夠提高總體可靠性。


結束語

針對 Linux 的擴展文件系統有着漫長而豐富的歷史 — 從 1992 年首次引入 ext1 到 2008 年引入 ext4。ext4 是首個專門爲 Linux 設計的文件系統,並且事實證明它是高效、穩定、強大的文件系統。ext4 隨着文件系統研究的深入而不斷髮展,並且借鑑其他新文件系統的先進思想(比如 XFS、JFS、Reiser 和 IRON 容錯文件系統技術)。儘管目前預測 ext5 將會是什麼樣子還爲時過早,但有一點是很明確的,它將主導企業級 Liunx 系統。


 

參考資料

學習

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