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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

f2fs解析(一)f2fs如何解决wandering tree

發布時間:2023/12/13 综合教程 50 生活家
生活随笔 收集整理的這篇文章主要介紹了 f2fs解析(一)f2fs如何解决wandering tree 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

wandering tree問題是log-structured 文件系統(LFS) 特有的一個問題,因為LFS的臟數據是追加更新的,所以如果一個數據塊變臟了,那么那個數據塊的直接索引塊、間接索引塊都會變臟(因為索引的地址變臟)。F2FS是如何解決這個問題呢?

我們知道F2FS中main area中共有兩種類型的block:NODE和DATA,其中NODE存儲文件的元數據,DATA存儲文件實際的數據。其中NODE類型的block包括三類元數據:inode,直接dnode,間接dnode。其中直接dnode的每一個表項指向的是一個DATA block的地址,而間接dnode的每一個表項指針指向的NAT表中的一個表項

這是F2FS解決wandering tree問題的關鍵F2FS引入了NAT(node address table),其中每個表項的結構是:

struct f2fs_nat_entry {
    __u8 version;       /* latest version of cached nat entry */
    __le32 ino;     /* inode number */
    __le32 block_addr;  /* block address */
} __packed;

NAT表是個大數組,每個數組元素就是上面的f2fs_nat_entry。引入NAT表項是F2FS解決wandering tree問題的關鍵,因為這樣每當有數據塊更新的之后,只有與其直接相關的dnode才會變臟,各間接dnode是不會變臟的。怎么實現的?

上面說到,直接dnode的表項指向的是DATA block的地址,所以DATA page變臟了之后,DATA block就要變更了,所以被殃及的直接dnode當然也臟嘍。但是注意,此時火勢并不會蔓延到間接dnode上,因為間接dnode表項指針指的并不是直接dnode的block地址,而是NAT表中的一個表項,所以NAT就像防火槍一樣防止了tree任意滋生:你只要把NAT中相應的block_addr域給更新掉就可以了,我間接dnode的指針還是指向這個NAT表項,不變!巧妙!

有興趣的同學可以研究下C++中虛函數的實現,與此處異曲同工。

總結

以上是生活随笔為你收集整理的f2fs解析(一)f2fs如何解决wandering tree的全部內容,希望文章能夠幫你解決所遇到的問題。

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