F2FS 基础知识一
整個磁盤區域被F2FS設計為6個區域,分別是Superblock,Checkpoint,Segment Info Table,Node Address Table,Segment Summary Area,以及Main Area。前5個區域總稱為元數據區域,保存的是跟F2FS直接相關的元信息,而最后一個區域是保存文件數據的主要區域。
元數據區域的主要作用是維持F2FS的一致性,然而頻繁地修改元數據區域的數據會帶來性能下降,也會導致磁盤壽命的減少,因此F2FS給每個區域在內存中創建了一個專門的數據結構用于管理這些信息,并且在適當的時候再寫入磁盤,從而提高性能,減少頻繁的IO。
它們的作用分別是:
Superblock: 記錄整個文件系統的分區信息,包括一共有多少個block,使用了多少block這些最基本同時也是最重要的信息。Superblock的初始化是讀取經由mkfs.f2fs格式化的設備的原始信息。Superblock在內存中對應的結構是struct f2fs_sb_info。
Checkpoint: CP保存了一些當前正在使用的block,node等信息,并且在適當的時候,更新元數據區域信息。當系統突然重啟等情況下,保證F2FS的一致性。Checkpoint在內存中對應的數據結構是struct curseg_info以及struct f2fs_checkpoint。
Segment Information Table(SIT): 保存了每一個segment的信息,例如這個segment使用了多少個block,然后是哪一個block被使用了,通過這些信息去管理已經被使用了的block和未使用的block,使系統可以合理分配block。SIT在內存中對應的數據結構是struct f2fs_sm_info。
Node Address Table(NAT): 建立一張表保存了每一個Node的地址信息,這些node的具體數據保存在Main Area,當需要尋找某一個Node時候,通過NAT確認Node的地址,然后將讀取這個地址將Node的信息返回給調用者。NAT在內存中對應的數據結構是struct f2fs_nm_info。
Segment Summary Area(SSA): 這個區域主要保存了jounal(SIT/NAT的臨時修改信息)以及summary(記錄了邏輯頁和物理頁關系的結構)。用于提供臨時存放journal以及根據物理頁索引邏輯頁的功能。SSA區域在內存中沒有專門的數據結構。
Main Area: Main Area被4KB大小的block所填充,這些block可以分配給文件的data或者文件的node,是F2FS的主要數據保存區域。
Blocks->Segment->Section→Zone
1、Blocks:F2FS文件系統的所有塊大小都是4KB;
(1)F2FS文件系統的所有塊大小都是4KB,F2FS 代碼隱式地將塊大小鏈接到系統的頁大小,因而F2FS不可能在更大的頁的系統上運行,如 IA64 和 PowerPC。
(2) 塊地址是32位的,最大文件系統是2^(32+12) Bytes,也就是16TB(完全大于當前的 NAND flash 設備的大小)。
2、Segments:
連續的Blocks集合成Segments,一個Segment的大小是512個Blocks(2MB),每個Segment都有一個
Segment Summary Block元數據結構,描述了Segment 中的每個Block的所有者(該塊所屬的文件及塊
在文件內的偏移)。Segment Summary主要用于在執行Cleaning操作時識別哪些Blocks中的數據需要轉
移到新的位置,以及在轉移之后如何更新Blocks的索引信息。一個Block就可以完全存儲512個Blocks的
summary信息,每個blocks都有一個1 bit的額外空間用于其它目的。
2MB是最合適的Segment大小,太大不合適,太小又會造成存儲summary信息的Block空間浪費;
2.1 Segment Sunmmary Area (SSA)
SSA 中包含許多 summary 項, summary 項中包含存儲在 Main 區域的所有數據和節點塊( node blocks)的所有者信息。
3、Sections
(1) 連續的Segments集合成Section。Section中具有的segments個數是任意的,但是要滿足是2的冪;默認情況下,一個Section大小等同于一個Segment(2^0 Segments);
(2) 一個Section對應log structuring的一個區域“region”,log在使用下一個Section之前,通常要從頭到尾將當前的Section填滿數據;
(3) 清理器Cleaner一次處理一個Section;
(4) 在F2FS中,任意時刻都有6個“打開的”Sections用于將各種不同種類的數據(元數據、數據)分別寫入到各個Sections中,實現數據分離。這樣便允許文件內容(數據)與其索引信息(節點,node)分離,允許F2FS文件系統根據各種啟發式方法將Sections劃分成三類:即“hot”、“warm”、“cold”。例如,目錄數據被當做hot來對待,使其與文件數據分離,存放到“hot”Section中。Cold數據是指那些很長時間內都不會改變的數據,因而裝滿Cold數據的Section就不需要執行Clean操作。對于hot節點(索引信息節點),一般更新很快,一段時間之后,裝滿 hot 節點的Section中的有效數據(alive data)就會很少,因而選擇這樣的Section進行Clean操作開銷就很小(因為要轉移的數據很少)。
4、Zone
(1) 連續的Sections集合成Zone。一個Zone可以包含任意整數個Sections。默認是一個Zone中包含一個Section;
(2) 設置Zone的唯一目的是盡可能將6個打開的Sections位于Flash設備的不同的子設備中。理論上,Flash設備通常是由一組相互完全獨立的子設備構成,每個子設備都可單獨地處理I/O請求,不同子設備可并行處理I/O請求;如果Zone的大小與子設備大小對齊,6個打開的Sections可并行寫入,充分利用設備的特性;
(3) Zone構成了F2FS的“主要(main)”區域。
5、Meta Area
F2FS有一個“meta”區域,包含了各種不同的元數據(如之前提到的segment summary),這一部分不是采用標準的log-structured流水線方式管理,因而更多的工作留給了FTL去做。有三種方法管理對“meta”區域的寫操作:
a) 第一,有少量的只讀數據(超級塊)從來都不是在文件系統創建的時候立即寫入;
b) 第二,對Segment Summary Block 簡單采取本地更新的方法。這種本地更新可能導致文件系統奔潰后數據塊“修正”內容的不確定性,但對segment summary來說這都不是問題,segment summary blocks中的數據在使用前要進行有效性驗證,如果有任何信息丟失的可能,它都將會在恢復進程中從其他source中恢復。
c) 第三種方法,分配需求空間兩倍大小的空間,使得每個block都有兩個不同的位置:一個Primary,一個Secondary,任意時刻,兩個位置的block僅有一個是live狀態。因而LFS的Copy-On-Write需求就可以通過向non-live位置的block寫入更新后的block內容并且更新記錄哪個位置的block是live狀態的方式簡單實現。對于元數據來說,這種技術是實現快照功能的主要實現方法。當創建一個Checkpoint的時候,F2FS執行少量的Journaling更新到最后的組(last group),這在一定程度上減輕了FTL的工作。
6、Superblock (SB):
It is located at the beginning of the partition, and there exist two copies to avoid file system crash. It contains basic partition information and some default parameters of f2fs與其他文件系統不同,F2FS 清晰地區分出傳統超級塊中的只讀部分(Superblock,SB)和可修改部分
(Checkpoint,CP),存放在兩個單獨的數據結構(BP 和 CP)中。
F2FS 的 f2fs_super_block 存儲在設備的第二個塊中,僅包含只讀數據,稱為超級塊 Superblock (SB) 。
一旦文件系統創建,SB 的信息就不會再改變,SB 描述了文件系統有多大、Segment 有多大、Section有多大、
Zone 有多大以及分配了多少空間給各個部分的“元數據”區域以及其他少量的細節信息。
SB 位于文件系統分區的開頭,有兩個備份以避免文件系統 crash 無法恢復的情況發生。它包含基本的分區
信息和默認的 F2FS 參數。
7、Checkpoint (CP):
It contains file system information, bitmaps for valid NAT/SIT sets, orphan inode lists, and summary entries of current active segments.文件系統超級塊中的可寫信息,如空閑空間總量、下一個將要寫入數據的Segment的地址以及其他可更改
信息存儲在 f2fs_checkpoint 中,稱為 Checkpoint (CP)。“Checkpoint”是一種元數據類型,允許使用兩個位置
(two-location)方法實現 copy-on-write——有兩個相鄰的 Segments,每個都存儲一個 Checkpoint,但僅有一個
是當前有效使用的。Checkpoint 包含一個版本號,因而當文件系統掛載的時候,兩個Checkpoint 都被讀取,但
是使用的是僅有較高的版本號的Checkpoint 作為有效使用的Checkpoint。
Checkpoint 包含文件系統信息,有效NAT/SIT集的位圖(bitmaps),Orphan inodes 的列表,以及當前有效 Segments 的 Summary 項。
8、Segment Information Table (SIT):
It contains segment information such as valid block count and bitmap for the validity of all the blocks.SIT 為每個 Segment 存儲74字節的信息且與 Segment Summaries 分離,因為它修改的頻率更高。它主要
用來跟蹤哪些數據塊仍然是有效的(有效塊個數以及數據塊有效性 bitmap),因而當 Segment 中無有效塊時,就
可以回收該 Segment,或者當該 Segment 中有效數據塊很少的時候進行 clean 操作。
9、Node Address Table (NAT):
It contains summary entries which contains the owner information of all the data and node blocks stored in Main area. 它包含摘要條目,包含存儲在主區域中的所有數據和節點塊的所有者信息。存儲在 Main 區域的所有節點(inode 和 索引節點)數據塊的塊地址表。
所有的節點(node)塊由 NAT 映射,這意味著每個 node 的位置由 NAT 表來轉換。考慮 wandering tree 問題,F2FS 使用這種節點映射索引方式可以切斷由于葉子節點修改操作引起的節點更新傳播問題,如下圖兩個所示,其中圖(1)是傳統 LFS 文件系統 wandering tree 結構葉子節點修改所引起的所有需要修改的節點(紅勾表示);圖(2)是傳統 F2FS 文件系統采用 NAT 數據結構后葉子節點修改所引起的所有需要修改的節點(紅勾表示);
10、Main Area
It contains file and directory data including their indices.Log區域(數據區域)——Main Area
Main Area 包含文件和目錄結構以及它們的索引數據。
11、At runtime, F2FS manages six active logs inside “Main” area: Hot/Warm/Cold node
and Hot/Warm/Cold data:
- Hot node contains direct node blocks of directories. - Warm node contains direct node blocks except hot node blocks. - Cold node contains indirect node blocks - Hot data contains dentry blocks - Warm data contains data blocks except hot and cold data blocks - Cold data contains multimedia data or migrated data blocks12、元數據更新
當需要對 NAT 或 SIT 更新的時候,F2FS 并不是立即執行更新,而是將其存儲(緩存)在內存中,直到下一個 Checkpoint 寫入的時候才會真正更新NAT 或 SIT。如果更新相對很少,那這些更新就不會寫到它們最終的位置,而是以日志的方式記錄到Segment Summary Blocks 中的一些備用空間中,通常與Segment Summary Blocks 的更新同時寫入。如果Segment Summary Blocks 需要更新的總量足夠少,甚至沒有寫請求,SIT、NAT 和 SSA都與Checkpoint 一起以日志方式記錄更新。因而當 F2FS 留下一些工作給 FTL 處理的時候,F2FS 試圖友好地并且僅執行它不得不做的隨機塊更新。當 F2FS 需要做隨機塊更新的時候,它同時執行多個隨機塊的更新,這樣可以減輕 FTL 的負擔。
13、地址對齊
為了避免文件系統和 flash 存儲之間不對齊,F2FS 使 CP 的起始塊地址與 Segment 大小對齊。同時,F2FS 使 Main Area 的起始塊地址與 Zone 的大小對齊,這通過在 SSA 中預留一些 Segments 來實現對齊。
14、F2FS文件系統元數據管理
F2FS 采用 Checkpoint 機制維護文件系統的一致性。在掛載文件系統的時候,F2FS 首先嘗試通過掃描 CP 區域找到最新的有效的 Checkpoint。為減少掃描時間, CP僅使用兩個備份,其中一個備份中包含的是最新的有效數據。這種兩個備份,且僅有一個包含最新版本有效數據的技術也稱為 shadow copy 機制。除了 CP,NAT 和 SIT 也采用 shadow copy 機制保證數據一致性。
為保持文件系統一致性,每個 CP 指向有效的 NAT 和 SIT 備份,如下圖所示
元數據區域包含以下幾種元數據:
(1) NAT —— Node Address Table
(2) SSA —— Segment Summary Area
(3) SB —— Superblock
(4) CP —— Checkpoint
(5) SIT —— Segment Information Table
F2FS同時維護6個日志,每個日志的存儲單位是Sections,但是默認的情況下Section大小與segment大小是相同的2MB,所以你看到的代碼就是以segment為單位進行日志處理的。邏輯結構Section的想法要結合SSD或Flash設備的特性來看,以Section為單位主要是考慮到一種"對齊機制",因為SSD的不同的Die是可以并行讀寫的,因而只要保證6個日志要寫入的數據在6個不同的Die上,那么6個log就可以并行寫入了,提升了處理速度。如果不是按這種“對齊”處理的話,就會出log之間的阻塞等待,增加了處理延時。
SSD的Die是不是最小的并行寫入單元,我這邊不是太確定了,很早之前看過的東西,不是它就是另外一個叫做Plane的單元。總結
以上是生活随笔為你收集整理的F2FS 基础知识一的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: STS下载和安装
- 下一篇: IE工程师应该如何规划职业发展?-优思学