苗 杰
國家計算機(jī)網(wǎng)絡(luò)應(yīng)急技術(shù)處理協(xié)調(diào)中心江蘇分中心
ext2和ext3文件系統(tǒng)在發(fā)展中遇到越來越多的擴(kuò)展性問題,隨之產(chǎn)生了ext4文件系統(tǒng)。btrfs曾被稱為是下一代Linux文件系統(tǒng),其目標(biāo)是為了取代Linux平臺的ext3文件系統(tǒng)。btrfs加入了目前ext3、ext4并未支持的功能,如支持快照功能、具有COW特性(Copy-on-write)、支持創(chuàng)建子卷,以及在線調(diào)整文件系統(tǒng)大小等一系列新功能。
btrfs具有extent特性、BTree結(jié)構(gòu)、SSD優(yōu)化、COW特性、校驗和、快照功能、創(chuàng)建子卷、內(nèi)建磁盤陣列、延遲分配、內(nèi)聯(lián)文件、目錄索引、預(yù)分配和壓縮、修改文件系統(tǒng)大小、文件系統(tǒng)轉(zhuǎn)化以及debug功能等新特性。本節(jié)主要介紹其中如下幾種新特性。
btrfs采用了基于extent的文件存儲來減少元數(shù)據(jù)開銷,ext4也采用extent的技術(shù)來對文件進(jìn)行存儲。與ext4不同的是,btrfs將所有文件的元數(shù)據(jù)保存在一個BTree中,而ext4針對每個文件,則單獨用一個BTree來保存元數(shù)據(jù)。
btrfs內(nèi)部所有元數(shù)據(jù)都采用BTree管理,相比于ext4采用線性表來存儲目錄文件,則擁有良好的可擴(kuò)展性。btrfs內(nèi)部不同的元數(shù)據(jù)由不同的Tree管理。在superblock中由指針指向這些BTree的根。
btrfs是一種COW(copy-on-write)文件系統(tǒng),btrfs在普通操作中不會直接覆蓋數(shù)據(jù),而是將元數(shù)據(jù)和數(shù)據(jù)的新值寫到別的地方,然后在文件系統(tǒng)中指向新的位置,這就提供了強(qiáng)大的一致性和完整性保證。而ext4可以看成是一種overwrite文件系統(tǒng),當(dāng)更新數(shù)據(jù)時,直接對原來的數(shù)據(jù)內(nèi)容進(jìn)行更新。圖1是btrfs進(jìn)行單一數(shù)據(jù)COW操作示意圖。
圖1 COW示意圖
A是FS Tree的根節(jié)點,若對元數(shù)據(jù)C進(jìn)行更新,此時并不會立即更新C。Btrfs首先將元數(shù)據(jù)插入一個新分配的block C’中,并修改上層節(jié)點B,使其指向新的block C’;修改B也將引發(fā)COW,依此類推,引發(fā)一個連鎖反應(yīng),直到最頂層的 root A。整個過程結(jié)束,節(jié)點A’變成了FS Tree的根節(jié)點。Btrfs修改superblock 使其指向A’。圖1僅顯示了更新單一元數(shù)據(jù)COW過程,但文件系統(tǒng)中很多操作需要更新多個不同的元數(shù)據(jù)。利用COW 事務(wù)能保證文件系統(tǒng)一致性,且系統(tǒng)重啟后不需要執(zhí)行fsck,因為superblock要么指向A,要么指向A’,無論哪個都是一致的數(shù)據(jù)。
btrfs采 用checksum技 術(shù) 來保證數(shù)據(jù)的可靠性,btrfs在讀取數(shù)據(jù)的同時會讀取其相應(yīng)的checksum,采用單獨的checksum tree來管理數(shù)據(jù)塊的校驗和,將checksum和checksum保護(hù)的數(shù)據(jù)塊分離開,從而提供更嚴(yán)格的保護(hù)。ext2/ext3并沒有提供校驗和特性,對磁盤數(shù)據(jù)完全信任。而ext4采用日志校驗和特性來提高文件系統(tǒng)的可靠性,對數(shù)據(jù)部分并未提供校驗和保護(hù)措施。由于硬件原因,從磁盤上讀出的數(shù)據(jù)可能會出錯,即使數(shù)據(jù)從磁盤讀出正確,也很難保證數(shù)據(jù)在網(wǎng)絡(luò)上安全傳輸。
系統(tǒng)中往往存在大量的小文件,比如幾百個字節(jié)甚至更小。如果為其分配單獨的數(shù)據(jù)block,便會引起內(nèi)部碎片,浪費磁盤空間。btrfs將小文件的內(nèi)容保存在元數(shù)據(jù)中,不再額外分配存放文件數(shù)據(jù)的磁盤塊。改善了內(nèi)部碎片問題,也增加了文件的訪問效率。
圖2 為btrfs采用inline file的示意圖。假設(shè)現(xiàn)在有文件file1,大小15B,file2 大小為1MB。在BTree中存在一個葉子節(jié)點,葉子節(jié)點中的extent1 metadata,extent2 metadata 分別用來表示file1和file2的磁盤使用空間。采用inline file,btrfs將大小為15 B的file1直接內(nèi)嵌在元數(shù)據(jù)extent1 metadata后面。而對于大小1MB的file2,采用普通的extent表示方法,由extent2 metadata指向一段extent,存放file2。若對file1采用如綠色虛線表示,指向一個extent,由于file1僅有15 B,剩余空間便成了碎片。
圖2 內(nèi)聯(lián)文件示意圖
采用inline file技術(shù),讀file1時只需讀取extent1 metadata的block,而對于file2則先讀取extent2 metadata,再讀取其指向的extent,這便減少了磁盤IO。得益于inline file技術(shù),btrfs處理小文件的效率非常高,也避免了磁盤碎片問題。
btrfs文件系統(tǒng)支持對磁盤的預(yù)分配,由于所有空間都是一次分配,因而更有可能使用連續(xù)的磁盤空間,所以能夠有效減少磁盤碎片。在將數(shù)據(jù)寫入磁盤之前進(jìn)行壓縮,有時能夠大大減少磁盤IO的次數(shù),提升IO效率。btrfs內(nèi)置壓縮功能,從2.6.39內(nèi)核開始默認(rèn)采用lzo算法來進(jìn)行壓縮和解壓,zlib算法則在2.6.39內(nèi)核版本之前作為默認(rèn)壓縮解壓算法。然而當(dāng)壓縮使能后,整個文件系統(tǒng)下的所有文件都將被壓縮。
下面主要從如下幾點對btrfs和ext4進(jìn)行性能對比分析。
(1)對比btrfs和ext4創(chuàng)建不同大小文件系統(tǒng)的性能,其測試結(jié)果如表1所示。
表1 創(chuàng)建文件系統(tǒng)性能對比
表1 的圖形效果如圖3所示。
圖3 創(chuàng)建文件系統(tǒng)性能對比
btrfs創(chuàng)建文件系統(tǒng)時,無論磁盤空間大小,僅創(chuàng)建文件系統(tǒng)的元數(shù)據(jù),使用磁盤空間時再進(jìn)行格式化。而ext4在創(chuàng)建文件系統(tǒng)時,不僅創(chuàng)建文件系統(tǒng)元數(shù)據(jù),還會對磁盤進(jìn)行格式化。因此創(chuàng)建文件系統(tǒng)時,ext4比btrfs需要更長的時間。
(2)對比btrfs和ext4刪除不同大小文件的性能,其測試結(jié)果如表2所示。
表2 的圖形效果如圖4所示。
表2 刪除文件性能對比
圖4 刪除文件性能對比
btrfs具有目錄索引技術(shù),相比ext4刪除文件,btrfs刪除文件時會同時刪除文件的目錄索引,額外刪除文件的目錄索引需要時間開銷,這是造成btrfs刪除文件的性能比ext4差的原因。
(3)對比btrfs和ext4文件拷貝的性能,其測試結(jié)果如表3所示。
表3 的圖形效果如圖5所示。
圖5 文件拷貝性能對比
表3 文件拷貝性能對比
當(dāng)對目錄下的大量文件進(jìn)行拷貝時,btrfs是順序讀取文件進(jìn)行拷貝,而ext4是通過hash方法,文件讀取的效率不如順序讀取,因此btrfs的文件拷貝性能更優(yōu)。
(4)對比btrfs和ext4文件讀寫性能,利用iozone測試工具得到的結(jié)果如表4所示。
表4 文件讀寫性能對比
表4 的圖形效果如圖6所示。
圖6 文件讀寫性能對比
從上述數(shù)據(jù)可以看出,btrfs文件的隨機(jī)讀寫性能明顯優(yōu)于ext4。由于btrfs的預(yù)讀寫緩存大小為4MB,而ext4的預(yù)讀寫緩存大小為128KB,這可能是導(dǎo)致btrfs隨機(jī)讀寫性能優(yōu)于ext4的原因。
本節(jié)主要對btrfs新增的COW功能和壓縮功能進(jìn)行了性能測試,主要驗證了是否開啟新功能對讀寫性能帶來的影響并進(jìn)行了測試分析。
(1)對比btrfs的COW功能是否開啟對讀寫性能的影響,其測試結(jié)果如表5所示。
表5 COW功能對讀寫性能影響
表5 的圖形效果如圖7所示。
圖7 COW功能對讀寫性能影響
從上述結(jié)果可以看出btrfs開啟COW功能雖會涉及元數(shù)據(jù)操作,但并未對讀寫性能帶來較大影響。
(2)對比btrfs采用不同壓縮算法對讀寫性能的影響,其測試結(jié)果如表6所示。
表6 不同壓縮算法性能對比
表6 的圖形效果如圖8所示。
圖8 不同壓縮算法讀寫性能對比
btrfs文件系統(tǒng)默認(rèn)掛載項并未選擇壓縮算法,若要選擇zlib或lzo壓縮算法,則需要添加相應(yīng)的掛載參數(shù)。從實驗結(jié)果看出zlib和lzo壓縮算法均能大幅提升文件的讀寫效率。
本文首先簡要介紹了btrfs文件系統(tǒng)一些功能特性,并對比分析了btrfs與ext4文件系統(tǒng)在創(chuàng)建文件系統(tǒng)、刪除文件、拷貝文件、讀寫文件方面的性能差異。從實驗數(shù)據(jù)可以看出btrfs在創(chuàng)建文件系統(tǒng)、拷貝文件以及隨機(jī)讀寫文件性能明顯優(yōu)于ext4,但刪除文件性能比ext4差。btrfs具有的COW機(jī)制對讀寫性能并未造成明顯影響,選擇btrfs的zlib和lzo算法可以大幅提升文件的讀寫性能。btrfs作為新一代文件系統(tǒng)具有良好的功能特性,目前其僅在Fedora33中成為默認(rèn)的文件系統(tǒng),后期有望在Linux平臺得到廣泛使用。