一、概述
F2FS是Flash Friendly File System的簡稱。該文件系統是由韓國三星電子公司于2012年研發,只提供給運行Linux內核的系統使用,這種文件系統對于NAND閃存類存儲介質是非常友好的。并且F2FS是專門為基于 NAND 的存儲設備設計的新型開源 flash 文件系統。特別針對NAND 閃存存儲介質做了友好設計。F2FS 于2012年12月進入Linux 3.8 內核。目前,F2FS僅支持Linux操作系統。
根據內部幾何結構和閃存管理機制(FTL),閃存存儲設備有很多不同的屬性,所以F2FS的設計者增加了多種參數,不僅用于配置磁盤布局,還可以選擇分配和清理算法,優化性能(并行IO提高性能)
F2FS早期開發者為Jaegeuk Kim,當時是三星員工,但是三星自家的機器沒有直接使用F2FS,而是CM開源ROM組有做相關的適配。后來這個開發者被MOTO挖走,于是我們見到了用F2FS的MOTO X系列。后來又去了華為,故而有了全線F2FS的EMUI5.0,號稱流暢度提升20%華為的P9和Mate9都使用F2FS,流暢度明顯提升。當然F2FS倒沒什么版權糾紛,Linux體系下的東西自然遵守開源協定。
對于F2FS,官方文檔和其他博主大都從原理和代碼的角度來分析,我今天會從實戰橫向對比EXT4文件系統的視角,帶你感受真實的F2FS!
二、F2FS架構
F2FS文件系統的數據結構說明:
F2FS使用三種node:inode,直接node,間接node。F2FS分配4KB的空間給一個inode,其中包括929個數據塊索引指針,兩個一級索引塊(直接node)指針,兩個二級索引塊(間接node)指針,以及一個三級索引塊(二級間接node)指針。
一個一級索引塊包含1018個數據塊指針,一個二級索引塊包含1018個一級索引塊指針,一個三級索引塊包含1018個二級索引塊指針。可以索引到一個文件的最大大小是:
4 KB * (929 + 2*1018 + 2*1018*1018 + 1018*1018*1018) := 3.94 TB
F2FS文件系統的標準磁盤布局:
F2FS文件系統的數據結構(node結構):
三、F2FS和EXT4文件系統比較
碎片整理
EXT4文件系統:按照EXT文件系統的作者所說的,在分區的空余空間在2%以上的情況下EXT分區是不會產生碎片的。
F2FS文件系統:為管理磁盤上的大的連續的空間以便快速寫入數據,使用Segment Cleaner從重度碎片化的Segment中轉移出有效信息,然后將該Segment清理干凈用于后續寫入數據。
占用空間
通過DiskInfo可以明確的顯示,當Data分區的文件系統格式分別為EXT4和F2FS時所占空間的大小對比:從Android系統的角度來看,相同的安卓ROM包,在F2FS文件系統下占用閃存的容量會多一些。
F2FS文件系統在每一個文件索引節點塊中包含了如下f2fs_inode和node_footer。其中f2fs_inode結構中的數據索引區又存在923個數據塊指針,每個指針對應一個大小為4KB的數據塊,但是在通常情況下系統文件索引并不需要用到所有數據塊,在最極端情況下文件大小為4KB時,只需要用到一個數據塊,剩下的數據塊則處于閑置狀態,這就造成了存儲容量在一定程度上的空間浪費,也就是同樣一部手機,在相同的安卓系統中,F2FS文件系統下,閃存容量的占用會相對高一些。
數據恢復
數據恢復機制和數據寫入磁盤的方式密切相關。對于Linux系統,其頁緩存機制采用推遲寫入的方式寫入數據,在內存中被標記為臟的頁并不會立即寫回磁盤,以確保系統的性能。因此,存在于內存頁中的數據在系統發生意外情況時就會丟失。
對于一種情況,即sync操作時發生在數據寫入磁盤后而在元數據寫入磁盤前的系統意外,其數據已經寫入磁盤但由于沒有索引而無法找回,而F2FS提供了相應的恢復機制找回這些文件數據。
集成情況
現在不管是手機或者其他Android設備集成F2FS比較普遍,但是早期為了兼容性和性能,會把data分區使用F2FS,而系統和緩存都還是EXT4,這樣F2FS只會影響到第三方應用一段時間內首次讀寫文件時的速度,這只是使用流暢度的一部分而已。此外比較重要的系統和較小的緩存分區仍采用EXT4。
讀寫速度左邊EXT4文件系統, 右邊F2FS文件系統
連續讀寫:
二者的連續讀寫性能沒有太大的變化。
隨機讀寫:
F2FS比EXT4的隨機讀取性能提升了25%左右;但是隨機寫入速度,F2FS比EXT4文件系統有了飛躍的提升,隨機寫入性能提升了三倍還多。
由于隨機寫入的性能大大提升了,在類似軟件安裝和系統重啟中,要大量寫入小文件的情況下,F2FS文件系統下有非常喜人的變化。
四、性能測試
使用工具AdroBench.apk和安兔兔測試
不同場景測試
-
操作系統
+關注
關注
37文章
7095瀏覽量
124969 -
開源
+關注
關注
3文章
3615瀏覽量
43492 -
數據結構
+關注
關注
3文章
573瀏覽量
40607
原文標題:橫向對比EXT4,帶你感受真實的Linux文件系統F2FS
文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
用于管理文件方法和數據結構案例分析
基于Buildroot的Linux系統構建之根文件系統
嵌入式Linux啟動時間優化的秘密之二文件系統

Linux平臺/proc虛擬文件系統詳解

FATfs文件系統解析
嵌入式文件系統μC/FS的日志使用
怎樣將RK3399中data文件系統分區的格式由原先的f2fs格式變至ext4格式呢
Linux虛擬文件系統實現技術探討

STM32F10x_3.5版固件的模塊、數據結構和索引、文件列表等資料

可以了解的Linux 文件系統結構

Debian可以從F2FS根文件系統運行了
事務性日志結構文件系統的設計及實現

評論