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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > windows >内容正文

windows

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

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

F2FS源碼分析系列文章

主目錄
一、文件系統(tǒng)布局以及元數(shù)據(jù)結(jié)構(gòu)
  • 總體結(jié)構(gòu)
  • Superblock區(qū)域
  • Checkpoint區(qū)域
  • Segment Infomation Table區(qū)域(SIT)
  • Node Address Table區(qū)域(NAT)
  • Segment Summary Area區(qū)域(SSA)
  • 二、文件數(shù)據(jù)的存儲(chǔ)以及讀寫
    三、文件與目錄的創(chuàng)建以及刪除(未完成)
    四、垃圾回收機(jī)制
    五、數(shù)據(jù)恢復(fù)機(jī)制
    六、重要數(shù)據(jù)結(jié)構(gòu)或者函數(shù)的分析

    F2FS總體介紹

    F2FS全稱為Flash Friendly File System,是專門為flash設(shè)備設(shè)計(jì)的一個(gè)日志結(jié)構(gòu)型文件系統(tǒng)(Log-structured File System, LFS)。相對(duì)于傳統(tǒng)的日志結(jié)構(gòu)型文件系統(tǒng),F2FS在wandering tree和gc的高時(shí)間開銷等問(wèn)題,有一定的改進(jìn)和優(yōu)化。

    • wandering tree問(wèn)題: 傳統(tǒng)的LFS,在文件數(shù)據(jù)被更新或者寫入到日志的末端的時(shí)候,指向文件數(shù)據(jù)保存地址的直接指針指針會(huì)被更新(flash設(shè)備的異地更新特性),同時(shí)指向這個(gè)直接指針的間接指針也會(huì)更新,然后保存間接指針的inode、inode blockmap等結(jié)構(gòu)也需要更新,這樣就導(dǎo)致了頻繁metadata的更新。這種問(wèn)題稱為wandering tree問(wèn)題。

    • 高gc開銷問(wèn)題: 由于LFS對(duì)于修改的數(shù)據(jù)是執(zhí)行異地更新的特性,因此數(shù)據(jù)更新到一個(gè)新地址后,舊地址的回收和再利用的過(guò)程稱為垃圾回收過(guò)程(GC),這個(gè)過(guò)程會(huì)導(dǎo)致不可預(yù)期的高延遲,對(duì)于用戶感知有很大影響。

    F2FS系統(tǒng)特性

    F2FS的基本數(shù)據(jù)單位

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

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

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

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

    這種設(shè)計(jì)的好處是:

  • 可以將隨機(jī)寫轉(zhuǎn)換為順序?qū)懸垣@得更好的性能提升;
  • flash的顆粒program壽命是有限的,通過(guò)LFS的異地更新特性,可以自帶磨損均衡。
  • 但是LFS也有一些缺點(diǎn),一個(gè)最明顯的缺點(diǎn)是F2FS要對(duì)舊的物理地址進(jìn)行回收,這個(gè)過(guò)程稱為垃圾回收過(guò)程(GC),不適當(dāng)?shù)腉C時(shí)機(jī)會(huì)影響到系統(tǒng)的性能表現(xiàn);另外一個(gè)缺點(diǎn)是LFS極端情況的安全性不像JFS(journal file system)那么好,因?yàn)長(zhǎng)FS依賴Checkpoint保證一致性,但是Checkpoint不是每次寫入數(shù)據(jù)都會(huì)進(jìn)行(帶來(lái)很大的開銷),而是隔一段時(shí)間才會(huì)進(jìn)行一次Checkpoint,因此可能在Checkpoint之前系統(tǒng)宕機(jī),會(huì)帶來(lái)部分?jǐn)?shù)據(jù)的丟失。

    Multi-head Logging特性

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

    • HOT NODE區(qū)域:給目錄的direct node使用,因?yàn)榇蜷_目錄、讀取目錄是最頻繁的操作。
    • WARM NODE區(qū)域:給普通文件的direct node使用
    • COLD NODE區(qū)域:給indirect node使用,一般而言只有較大的文件才會(huì)使用到這個(gè)log區(qū)域。
    • HOT DATA區(qū)域:給目錄的數(shù)據(jù)使用,目錄數(shù)據(jù)記錄了當(dāng)前目錄有多少個(gè)子文件、子文件夾。
    • WARM DATA區(qū)域:給普通文件的數(shù)據(jù)使用,常規(guī)的fwrite/write函數(shù)寫入的數(shù)據(jù)都是在這里分配。
    • COLD DATA區(qū)域:給不頻繁修改的數(shù)據(jù)使用,如多媒體文件(多為只讀文件),或者用戶指定的只讀文件,如GC產(chǎn)生寫的數(shù)據(jù)(gc會(huì)挑熱度最低的數(shù)據(jù))。

    注: direct node、indirect node的概念和作用會(huì)在第二章的第一節(jié)進(jìn)行介紹。

    F2FS的閃存設(shè)備物理區(qū)域布局

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

    Superblock: 記錄整個(gè)文件系統(tǒng)的分區(qū)信息,包括一共有多少個(gè)block,使用了多少block這些最基本同時(shí)也是最重要的信息。F2FS在掛載的時(shí)候,會(huì)創(chuàng)建一個(gè)內(nèi)存數(shù)據(jù)結(jié)構(gòu)struct f2fs_sb_info,然后從設(shè)備的Superblock區(qū)域讀取相關(guān)數(shù)據(jù)。

    Checkpoint: 記錄了上次卸載F2FS的時(shí)刻,系統(tǒng)的block、node等分配狀態(tài)(如當(dāng)前free block分配了到哪個(gè)位置),用于給下次掛載F2FS的時(shí)候,復(fù)原整個(gè)系統(tǒng)的block、node的分配狀態(tài)。在F2FS的運(yùn)行過(guò)程中,F2FS會(huì)定時(shí)將當(dāng)前的block、node分配狀態(tài)寫入Checkpoint區(qū)域,用于由于F2FS被關(guān)閉/崩潰時(shí)恢復(fù)數(shù)據(jù)。Checkpoint在內(nèi)存中對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)是struct f2fs_checkpoint。

    Segment Information Table(SIT): 保存了每一個(gè)segment的信息,例如這個(gè)segment已經(jīng)分配了多少個(gè)block、哪一個(gè)block正在使用,哪一個(gè)block是無(wú)效的需要回收。通過(guò)這些信息去管理已經(jīng)被使用了的block和未使用的block,使系統(tǒng)可以合理分配block。每一個(gè)segment都對(duì)應(yīng)了一個(gè)segment number(segno),系統(tǒng)可以通過(guò)segno快速地查詢到該segment的分配信息。SIT在內(nèi)存中對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)是struct f2fs_sm_info。

    Node Address Table(NAT): 建立了一張表保存了每一個(gè)node的物理地址信息。F2FS的每一個(gè)node都有一個(gè)node id(nid),系統(tǒng)可以通過(guò)nid在NAT找到對(duì)應(yīng)node的物理地址,從而在閃存設(shè)備讀取出來(lái)。NAT在內(nèi)存中對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)是struct f2fs_nm_info。

    Segment Summary Area(SSA): 這個(gè)區(qū)域主要保存了jounal(SIT/NAT臨時(shí)的修改信息)以及summary(記錄了邏輯地址和物理地址關(guān)系的結(jié)構(gòu),主要用與GC)。SSA區(qū)域在內(nèi)存中沒(méi)有專門的數(shù)據(jù)結(jié)構(gòu)。

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

    總結(jié)

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

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。