日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

F2FS源码分析-1.1 [F2FS 元数据布局部分] F2FS文件系统的总体结构

發布時間:2023/12/31 windows 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 F2FS源码分析-1.1 [F2FS 元数据布局部分] F2FS文件系统的总体结构 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

F2FS源碼分析系列文章

主目錄
一、文件系統布局以及元數據結構
  • 總體結構
  • Superblock區域
  • Checkpoint區域
  • Segment Infomation Table區域(SIT)
  • Node Address Table區域(NAT)
  • Segment Summary Area區域(SSA)
  • 二、文件數據的存儲以及讀寫
    三、文件與目錄的創建以及刪除(未完成)
    四、垃圾回收機制
    五、數據恢復機制
    六、重要數據結構或者函數的分析

    F2FS總體介紹

    F2FS全稱為Flash Friendly File System,是專門為flash設備設計的一個日志結構型文件系統(Log-structured File System, LFS)。相對于傳統的日志結構型文件系統,F2FS在wandering tree和gc的高時間開銷等問題,有一定的改進和優化。

    • wandering tree問題: 傳統的LFS,在文件數據被更新或者寫入到日志的末端的時候,指向文件數據保存地址的直接指針指針會被更新(flash設備的異地更新特性),同時指向這個直接指針的間接指針也會更新,然后保存間接指針的inode、inode blockmap等結構也需要更新,這樣就導致了頻繁metadata的更新。這種問題稱為wandering tree問題。

    • 高gc開銷問題: 由于LFS對于修改的數據是執行異地更新的特性,因此數據更新到一個新地址后,舊地址的回收和再利用的過程稱為垃圾回收過程(GC),這個過程會導致不可預期的高延遲,對于用戶感知有很大影響。

    F2FS系統特性

    F2FS的基本數據單位

  • block: F2FS的數據存儲的基本單位是block,大小為4KB,整個flash設備被格式化為多個block組成的結構。很多數據結構也被設計為4KB的大小,這是因為很多flash設備單次IO的讀寫都是基于4KB的倍數進行。
  • segment: segment是管理block的結構,一個segment的大小是512個block,也就是2MB。
  • section: 默認情況下一個segment等于一個section,section是GC的基本操作單位,每次GC都會從section中選出特定的segment進行回收。F2FS將section分為了6類,分別是hot-node,warm-node,cold-node,hot-data,warm-data,cold-data,hot->cold表示了數據的從高到低的修改頻率,通過不同類型的section,進行gc的時候可針對使用hot的section進行gc,以降低gc的時間開銷。
  • zone: 默認情況一個zone等于一個section,與物理設備有關,大部分情況下用不上。
  • LFS異地更新特性

    F2FS是一個Log-structured File System(LFS),因此會使用異地更新策略。我們可以i用一個簡單的例子去說明什么是異地更新。假設有一個文件,它的文件數據保存在物理地址100的位置中,此時用戶對文件內容進行更新:

    非LFS: 使用就地更新策略,將更新后的數據寫入到物理地址100中。

    LFS: 使用異地更新策略,首先會分配一個新的物理地址101,然后將數據寫入新物理地址101中,接著將文件指針指向新的物理地址101,最后將舊的物理地址100進行回收再利用。

    這種設計的好處是:

  • 可以將隨機寫轉換為順序寫以獲得更好的性能提升;
  • flash的顆粒program壽命是有限的,通過LFS的異地更新特性,可以自帶磨損均衡。
  • 但是LFS也有一些缺點,一個最明顯的缺點是F2FS要對舊的物理地址進行回收,這個過程稱為垃圾回收過程(GC),不適當的GC時機會影響到系統的性能表現;另外一個缺點是LFS極端情況的安全性不像JFS(journal file system)那么好,因為LFS依賴Checkpoint保證一致性,但是Checkpoint不是每次寫入數據都會進行(帶來很大的開銷),而是隔一段時間才會進行一次Checkpoint,因此可能在Checkpoint之前系統宕機,會帶來部分數據的丟失。

    Multi-head Logging特性

    Log區域指的是文件系統中用于分配free block(空閑的且沒有寫入數據的block)的區域,例如F2FS的一個文件需要寫入新數據,它就要去Log區域請求free block,然后再將數據寫入這個free block中。傳統的LFS往往會維護一個大的日志區域,一切數據的分配都從這個大的日志區域中進行處理,而F2FS則根據數據的訪問冷熱特性差異,維護了6個Log區域,分別是:

    • HOT NODE區域:給目錄的direct node使用,因為打開目錄、讀取目錄是最頻繁的操作。
    • WARM NODE區域:給普通文件的direct node使用
    • COLD NODE區域:給indirect node使用,一般而言只有較大的文件才會使用到這個log區域。
    • HOT DATA區域:給目錄的數據使用,目錄數據記錄了當前目錄有多少個子文件、子文件夾。
    • WARM DATA區域:給普通文件的數據使用,常規的fwrite/write函數寫入的數據都是在這里分配。
    • COLD DATA區域:給不頻繁修改的數據使用,如多媒體文件(多為只讀文件),或者用戶指定的只讀文件,如GC產生寫的數據(gc會挑熱度最低的數據)。

    注: direct node、indirect node的概念和作用會在第二章的第一節進行介紹。

    F2FS的閃存設備物理區域布局

    通過mkfs.f2fs工具,可以將整個flash設備格式化成特定的格式。整個存儲設備區域被F2FS格式化為6個區域,分別是Superblock,Checkpoint,Segment Info Table,Node Address Table,Segment Summary Area,以及Main Area。前5個區域總稱為元數據區域(Metadata Area),保存的是跟F2FS直接相關的元信息,而最后一個區域是保存文件數據的主要區域,主要保存了node數據、文件data數據、目錄數據。它們的作用分別是:

    Superblock: 記錄整個文件系統的分區信息,包括一共有多少個block,使用了多少block這些最基本同時也是最重要的信息。F2FS在掛載的時候,會創建一個內存數據結構struct f2fs_sb_info,然后從設備的Superblock區域讀取相關數據。

    Checkpoint: 記錄了上次卸載F2FS的時刻,系統的block、node等分配狀態(如當前free block分配了到哪個位置),用于給下次掛載F2FS的時候,復原整個系統的block、node的分配狀態。在F2FS的運行過程中,F2FS會定時將當前的block、node分配狀態寫入Checkpoint區域,用于由于F2FS被關閉/崩潰時恢復數據。Checkpoint在內存中對應的數據結構是struct f2fs_checkpoint。

    Segment Information Table(SIT): 保存了每一個segment的信息,例如這個segment已經分配了多少個block、哪一個block正在使用,哪一個block是無效的需要回收。通過這些信息去管理已經被使用了的block和未使用的block,使系統可以合理分配block。每一個segment都對應了一個segment number(segno),系統可以通過segno快速地查詢到該segment的分配信息。SIT在內存中對應的數據結構是struct f2fs_sm_info。

    Node Address Table(NAT): 建立了一張表保存了每一個node的物理地址信息。F2FS的每一個node都有一個node id(nid),系統可以通過nid在NAT找到對應node的物理地址,從而在閃存設備讀取出來。NAT在內存中對應的數據結構是struct f2fs_nm_info。

    Segment Summary Area(SSA): 這個區域主要保存了jounal(SIT/NAT臨時的修改信息)以及summary(記錄了邏輯地址和物理地址關系的結構,主要用與GC)。SSA區域在內存中沒有專門的數據結構。

    Main Area: Main Area被4KB大小的block所填充,這些block可以分配給文件的data或者文件的node,是F2FS的主要數據保存區域。

    總結

    以上是生活随笔為你收集整理的F2FS源码分析-1.1 [F2FS 元数据布局部分] F2FS文件系统的总体结构的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。