默认块分配
在运行时,F2FS在“Main Area”区域管理6个活跃的log,分别是Hot/Warm/Cold node log和Hot/Warm/Cold data logs:
(1) Hot node contains direct node blocks of directories.
(2) Warm node contains direct node blocks except hot node blocks.
(3) Cold node contains indirect node blocks
(4) Hot data contains dentry blocks
(5) Warm data contains data blocks except hot and cold data blocks
(6) Cold data contains multimedia data or migrated data blocks
根据数据所属的类型,利用对应的log分配的空间将数据写入该空间
空闲空间管理
LFS有两种机制用于空闲空间管理:Threaded log和copy-and-compaction。Copy-and-compaction机制就是log-structured文件系统中常常提到的cleaning操作,Copy-and-compaction机制非常适用于具有非常好的连续写性能的设备,但是该机制的cleaning操作开销对性能影响很大。相反,Threaded log机制的弊端是要承受随机写,但是不需要cleaning过程。F2FS采用混合机制,其中Copy-and-compaction机制是默认采取的机制。但是F2FS会根据文件系统的状态(在没有足够的clean的segments )动态地更改为Threaded log机制。
为了使F2FS与底层的flash存储设备对齐,F2FS在以section为单位的存储单元中分配一个segment,F2FS期望section的大小与FTL中的垃圾回收单元的大小一致。此外,至于FTL中的映射粒度,F2FS尽可能从不同的Zone中分配每个(上述6个)活跃的log的section,因为FTL可以将活跃的log中的数据根据其映射粒度(并行)写到分配的单元中。
文件系统空间写满的处理
传统文件系统中如果没有剩余空间,直接返回错误就行。而对于Log-structured文件系统则没有这么潇洒地简单返回错误的处理机制,因为没有空闲块并不表示已使用的块上的数据都有效,在clean操作后又会释放出空闲块。通常一个比较有意义的做法是为Log-structured文件系统提供过量的空间,使得总是有空闲的Section用于cleaning操作中的有效数据的拷贝存储。
FTL恰好利用这种方法,提供过量空间用于“cleaning”以及用于替换高度损耗造成的坏块。FTL在内部处理过量空间,因而当F2FS开始用完空间的时候,它本质上放弃了整个log-structured的理念,只是随机地在其可以写入的地方写入数据。但此时,Inode和索引块仍然会仔细认真对待(不是随意写),有少量的过量空间用于它们的写入。但是对于数据只能采取本地更新,或是写入任意能找到的空闲块中。这样,可以预见的是当F2FS变满的时候,性能会下降,这与大多数的文件系统表现一样。
充分利用F2FS
F2FS的一个难处在于F2FS的shapes (即Sections和Zones)需要针对特定的flash设备及其FTL进行设置,而设备的厂商一般都对其FTL如何工作是保密的。F2FS也要求flash设备舒适地具有6个或更多可并行写入的“打开的”区域,这对三星的flash设备来说没有问题,但是对于其他厂商的设备就难说了。如果参数调整的不好(“打开的”区域不能实现并行写入),F2FS的性能可能就会大大下降。