F2FS论文部分翻译:

2.关于F2FS的设计和实现

 

2.1盘内布局

F2FS论文部分翻译:

F2FS的磁盘上数据结构是精心布置,以匹配底层NAND闪存的组织和管理方式。如图1所示,F2FS将整个卷分成固定大小的段。这个段是F2FS中的一个基本管理单元,被用于确定初始文件系统元数据布局。

一个section由连续的段组成,并且zone由一系列section组成。这些单位是

在日志和清洁过程中非常重要,将会在第2.4节和第2.5节中讨论。

F2FS将整个卷分成六个区域:

•Superblock(SB)具有基本分区信息和F2FS的默认参数,在格式化时生成且不可更改。

•检查点(CP)保存文件系统状态、对于有效的NAT/SIT集合的位图(见下文),孤立inode列表以及当前活动段的摘要条目。一个成功的“检查点包”应存储一致的给定时间点的F2FS状态-突然断电事件后的恢复点(第2.7节)。CP区跨两个段(#0和#1)存储两个检查点包:一个用于最后一个稳定版本,另一个用于中间(过时的)版本。

•段信息表(SIT)包含段信息,如有效块的数量以及“Main”区域中所有块有效性的位图(见下文)。检索SIT信息以选择受害者段并在清洗过程中识别其中的有效块(第2.5节)。

•节点地址表(NAT)是找到主区域中存储的所有“节点块”的块地址表。

•段摘要区域(SSA)存储代表主区域中所有块所有者信息的摘要条目,例如父索引节点编号及其节点/数据偏移。SSA条目在清除时迁移有效块之前标识父节点块。

•主区域充满4KB块。每个块都被分配和输入为节点或数据。节点块包含数据块的索引或节点,而数据块包含目录或用户文件数据。注意,section不会同时存储数据和节点块。

鉴于以上磁盘上的数据结构,让我们来演示如何执行文件查找操作。假设文件“/dir/file”,F2FS执行以下步骤:(1) 它通过NAT获得根节点的块来得到根节点;(2)在根inode块中,它从数据块中搜索名为dir的目录条目并获取其inode号;(3)它通过NAT将检索到的inode编号转换为物理位置;(4)它通过读取相应的块得到dir的inode;(5)在dir inode中,它标识名为file的目录条目,最后,获得通过对文件重复步骤(3)和(4)对文件进行索引。

可以通过相应的文件结构获得的索引从主区域检索实际数据。

 

2.2 文件结构

 

最初的LFS引入了inode映射来将inode编号转换为磁盘上的位置。相比之下,F2FS扩展了inode映射的“节点”来定位更多的索引块。每个节点块都有一个唯一的标识号“节点ID”。通过使用节点ID作为索引,NAT服务于所有节点块的物理位置。节点块表示三种类型之一:inode、direct和indirect节点。Inode节点块包含文件的元数据,如文件名、索引节点号、文件大小、atime和dtime。直接节点块包含数据块地址,而间接节点块具有定位其他节点块的节点id。

F2FS论文部分翻译:

 

如图2所示,基于F2FS 利用基于指针的直接和间接节点块文件索引以消除更新传播(即“游荡树”问题[27])。在传统的LFS设计中,如果叶数据被更新,则其直接间接索引块将递归更新。然而,F2FS只更新了一个直接节点块及其NAT条目,有效地解决了游荡树问题。例如,当4KB数据被附加到8MB到4GB的文件中时,LFS递归地更新两个指针块,而F2FS只更新一个直接节点块(不考虑缓存效果)。对于大于4GB的文件,LFS会更新一个指针块(总共三个),而F2FS仍然只更新一个。

 

一个inode节点块包含指向文件数据块的直接指针、两个单间接指针、两个双间接指针和一个三间接指针。F2FS支持内联文件和内联拓展属性,它们在inode块本身中嵌入小型数据或扩展属性。内联减少了空间需求并提高了I/O性能。请注意,许多系统具有小文件和少量扩展属性。默认情况下,如果小于3692字节,F2FS将**数据内联。在inode块中保留200个字节,用于存储扩展属性。

 

2.3 目录结构

 

在F2FS中,4KB目录条目(“dentry”)块由位图和一对插槽和名字数组组成。位图显示每个插槽是否有效。一个插槽携带一个散列值、索引节点号、文件名称的长度和文件类型(如普通文件、目录和符号链接)。目录文件构造多级哈希表来有效管理大量条目。

当F2FS在目录中查找给定的文件名时,它首先计算文件名的哈希值。然后,它从0级递增地遍历构造的哈希表,直到inode中记录的最大分配级别。在每一层中,它扫描一桶两个或四个条目,导致O(log(#of dentry))复杂性。为了更快地找到条目,它按顺序比较了位图,哈希值和文件名。

当首选大目录时(例如,在服务器环境),用户可以将F2FS初始化为许多dentry分配空间。在较低级别使用较大的哈希表时,F2FS更快地到达目标dentry。