理解SSA的难点在于 SSA如何避免对SIT/NAT区域零星的写。这需要深入理解SSA 自身和相关的数据结构和协作关系。

data/node 根据数据冷热分区

分区的数据以log/journal 的形式落盘

每种类型当前写的segment/block 信息都记录在 内存cursegments 中

记录方式是 f2fs_summary_block , 这个数据结构里面包含f2fs_journal 信息,还有记录所管理的segment中的各个block 在parent node中的offset。

code data 的f2fs_jouranl
里面包含资源管理信息: sit journal 对应code/warm data (普通类型的文件)

hot data的f2fs_journal
包含新建立的indoe 信息: nat journal 对应 hot data (directroy 类型)

为了避免零星的写,cursgements中的数据一起写到SSA 区域

check point的时候,把内存中cursegment中sit/nat journal entry信息写回到NAT/SIT 区域。

(下面有空贴上相关数据结构和代码)

问题:

  • 写到SSA的区域的sit/nat journal entry信息是否落盘后IO才返回?还是说等page cache kdflush 刷下去?掉电会丢数据?只陈诺做个checkpoint之前的数据不会丢?