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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

f2fs学习笔记 - 1. f2fs概述

發布時間:2023/12/31 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 f2fs学习笔记 - 1. f2fs概述 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 前言

本文主要從總體的角度來了解f2fs,嘗試回答下面的幾個問題來靠近它,這幾個問題包括:

  • f2fs是什么?
  • 為何引入f2fs?
  • f2fs如何工作?

2. f2fs是什么?

F2FS (Flash Friendly File System) 是專門針對SSD、eMMC、UFS等閃存設備設計的文件系統。基于LFS,同時解決了LFS的一些問題。由三星工程師Jaegeuk Kim于2012年10月發布到Linux社區,并于2012年12月進入Linux 3.8 內核主線,初始 版本包含22個patch。初始版本kernel 3.8(2012年)的代碼量為1萬多行,22個提交,截止到kernel 5.8-rc2(2020年)的代碼量為4萬多行,2899個提交。

3. LFS特點


LFS最大的特點是以日志的形式將對文件的修改順序寫入磁盤,化隨機寫入為順序寫入,如上創建文件file1,file2,創建目錄dir1,dir2,對于FFS會有10次的隨機寫入,而對于LFS將以日志的方式一次從內存中寫入, 同時也要寫入inode map,inode map記錄了每個inode所在的block地址,索引為inode號,inode map所在的block地址被記錄在F2FS的CP區域。

Flash memory的特點
(1)Out-place 更新 (非in-place更新)
(2)隨機寫入會增加GC垃圾回收開銷
(3)順序寫入速率高于隨機寫入速率
LFS的特點
(1)Out-place更新
(2)大量的采用順序寫入
因此LFS對Flash memory是友好的文件系統 ,而f2fs基于LFS,因此也是對flash友好的文件系統

LFS的不足:
(1)針對HDD進行優化的文件系統布局
(2)仍然存在Wandering Tree(雪崩)問題
(3)沒有進行冷熱數據分離
(4)磁盤高利用率的情況下垃圾回收成本高

4. f2fs解決了哪些問題?

采用falsh友好的文件系統布局



解決了Wandering Tree(雪崩)問題


傳統的LFS索引結構,由于異地更新在修改文件數據時會引發直接或間接node以及inode和inode map的一系列修改,稱為wandering tree問題

F2FS索引結構,通過引入NAT,保存所有node的信息,間接node不再指向直接node,而是指向NAT區,解決了wandering tree問題

使用Multi-head log,同時將冷熱數據分離


main area分為node block和data block
將node block和data block進行冷熱分離
有效減少GC cost

node block與data block分離, 冷熱數據分離,將不同數據存放到不同的zone中,有利于FTL進行GC垃圾回收,如上圖,假設zone對應flash中的一個block,則zone-aware allocation可以做到冷熱數據分配到不同的zone,也就分配到不同的flash block中

采用自適應的log方式

  • Normal logging
    追加式logging,只會向clean segment寫入
    如果沒有空閑空間,需要執行GC操作
    GC操作會帶來隨機讀和順序寫開銷
  • Thread logging
    向dirty的segment寫入
    不需要GC操作
    會引起隨機寫入
  • Normal logging與thread logging的切換
    當空閑空間低于閥值(e.g.k=5% )將采用thread logging,否則采用normal logging

5. f2fs是如何工作的?

f2fs文件讀取(/File)

  • Setp 1首先通過superblock獲取root inode號(==nid,假設為3),通過NAT獲取root inode所在的node block地址
  • Setp 2 通過root inode找到root目錄的data block地址
  • Setp 3 通過文件名File遍歷每一個entry,找到File對應的inode號,通過inode號(==nid)查NAT
  • Setp 4 通過NAT找到File的inode所在的node block地址,它存儲了File的direct node的nid(假設為7)

  • Setp 5 通過file的inode找到direct node的nid(假設為7),通過查找NAT,找到direct node的node block地址
  • Setp 6 File的direct node中保存著File的data block的地址,根據這些data block地址就可以讀取到File的數據

F2FS GC垃圾回收

  • GC回收分為foreground gc和background gc
    當沒有足夠空閑的segment(一般是小于reserved segments)時將啟動foreground gc
    當系統沒有進行IO操作時,將啟動background gc thread,回收的時間間隔會根據invalid blocks的多少進行調整
    foreground gc采用greedy算法,只考慮dirty invalid blocks數目; background gc采用cost-benefit算法,還考慮了segment的修改時間

  • Cost-benefit算法
    cost_benefit = (1 - u) / 2u * age
    u: 表示valid block在該section中的比例
    1-u: 表示對這個section進行gc后的收益
    2u: 表示對這個section的GC的開銷,讀取Valid block(1個u)然后寫入到到新的segment(再1個u)
    age: 表示上一次修改距離現在的時間差
    NOTE:cost_benefit值越大表示越值得回收

F2FS checkpoint

Checkpoint執行的操作:

  • 將page cache中的dirty node和dentry block flush到磁盤;
  • Suspend凍結文件系統操作,如create,unlink,mkdir等
  • 文件系統元數據NAT, SIT, SSA寫入磁盤各自區域;
  • 寫checkpont pack部分,主要包括:
    Header和footer checkpoint page;
    NAT bitmap和SIT bitmap
    NAT journal和SIT journal
    Active segments的summary blocks
    Orphan blocks
  • F2FS recovery


    step 1 創建dir1, file1, file2

    step 2 觸發checkpoint,此時數據與元數據保持一致性狀態

    step 3 更新file2, 并將記錄file2更新數據塊號的new file2 node作fsync mark標記


    step 4 此時更新的new file2后并沒有執行checkpoint,發生了斷電,數據和元數據不一致

    step 5 執行修復,首先通過roll-back,找到最新的穩定的checkpoint pack版本


    step 6 比較file2 node和new file2 node中所記錄的data block塊號是否相等,如果不相等將執行roll-forward恢復

    step 6 執行新的checkpoint

    參考文檔

    Lee et. al, F2FS: A New File System for Flash Storage, FAST ’15
    Linux/Document/filesystems/f2fs.txt
    F2FS技術拆解
    F2FS源碼分析-1.3 [F2FS 元數據布局部分] Checkpoint結構
    f2fs系列文章——sit/nat_version_bitmap
    http://www.ssdfans.com/?p=5135 greedy和cost-and-benefit
    https://github.com/jasonactions/f2fs-initial f2fs初始版本注釋

    總結

    以上是生活随笔為你收集整理的f2fs学习笔记 - 1. f2fs概述的全部內容,希望文章能夠幫你解決所遇到的問題。

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