Avatar
🐲

Organizations

3 results for 文件系统
  • 最近读完了老师给我的LOFS文件系统,但由于这篇论文说的比较简略,我找到了它的详细版本,本文简要介绍一下我对这个ELOFS文件系统的理解
    ELOFS 文件系统 Created Wed, 05 Oct 2022 23:46:09 +0800
  • F2FS是一个Linux文件系统,适用于闪存设备,论文的实验结果表明F2FS要比EXT4的性能好很多。
    F2FS 文件系统 Created Fri, 30 Sep 2022 15:04:21 +0800
  • Abstract F2FS是一个Linux文件系统,适用于闪存设备,论文的实验结果表明F2FS要比EXT4的性能好很多。 1. Introduction 闪存的使用很广泛,服务器系统也开始使用闪存。但是闪存有几个局限性:需要先擦后写、需要按顺序写入被擦除的块、每个擦除块的写入周期有限。 随着存储需求的增长,多个闪存芯片通过一个专门的控制器连接。在控制器上运行的固件,通常称为FTL(闪存转换层),可以解决NAND闪存的限制,并且提供一个通用的块设备抽象。 闪存在某些条件下,例如对固态硬盘的频繁随机写入会引起底层介质的内部碎片,并降低固态硬盘的持续性能。但是随机写入是非常普遍的,甚至已经成为了一种负担,例如FaceBook随机写入比顺序写入多150%,WebBench随机写入比顺序写入多80%。频繁的随机写入和刷新操作会严重增加闪存设备的I/O延迟,并降低设备的使用寿命。 随机写入的不利影响可以通过日志结构文件系统(LFS)方法或写时复制(copy on write)来减少。传统的HDD文件系统设计策略尽管是有益的,但并没有完全利用和优化NAND闪存介质的使用。 F2FS是第一个公开和广泛使用的文件系统,它从头开始设计,通过通用块接口优化闪存设备的性能和寿命。 2. Design and Implementation of F2FS 2.1 On-Disk Layout F2FS 将整个卷划分为固定大小的segment。连续几个segment组成一个section,连续几个section组成一个zone。 F2FS将整个卷分成六个区域:超级块(Super Block)、检查点(Check Point)、段落信息表(Segment Information Table)、节点地址表(Node Address Table)、段落摘要区(Segment Summary Area)、主区域(Main Area),如下图所示。 根据以上的磁盘结构,假设要查找路径为dir/file的文件,步骤如下: 查找NAT获得根节点所在的块; 在根节点的数据块中查找dir目录项,获得节点号; 通过NAT将节点号转换为物理地址; 获得名为dir的节点; 在dir节点中查找file目录项,重复3和4最终得到文件节点。 2.2 File Structure F2FS采用节点结构来定位更多的索引块。每个节点块都有一个唯一的节点ID,使用节点ID作为索引。节点块可分为:inode、直接节点和间接节点。inode包含了文件的元数据,直接节点包含了数据的块地址,间接节点包含了其他节点块的节点ID。 F2FS使用基于指针的文件索引与直接和间接节点块来消除Wandering Tree问题,直接节点指向Block address,间接节点指向NAT的表项,当数据块变更后,直接节点也需要变更,但是间接节点不需要,因为间接节点不直接指向直接节点,而是指向NAT表项,如图所示,这样就避免了Wandering Tree问题。 2.3 Directory Structure 在F2FS中,一个4KB的目录条目(dentry)块由一个位图和两个包含成对的槽和名字的数组组成。位图指示每个槽是否有效,一个槽包含了一个哈希值、inode号、文件名的长度和文件类型。一个目录文件构建一个多级哈希表来管理大量的dentry。 当在目录中查找一个文件时,先计算出文件名的哈希值,然后遍历这个多级哈希表,在每级中扫描一个由2个或4个dentry块组成的bucket,这样就可以有log2N的时间复杂度。 2.4 Multi-head Logging F2FS保持六个主要的日志区,从而最大限度地发挥冷热数据分离的效果。F2FS为节点和数据块定义了三个级别的温度:热、温和冷。 如下图所示,直接节点和存放目录的数据块是热的,间接节点是冷的。 通过清理移动的数据块、被用户标记为 “冷 “的数据块、多媒体文件数据这三种数据块被认为是冷的。 默认情况下,F2FS激活了六个开放的写入日志,用户可以在安装时将写入流的数量调整为两个或四个,不同的数量会影响数据分离的效果。 FTL算法根据数据和 “日志闪存块 “之间的关联性,主要分为块关联、集关联和完全关联。日志闪存块可以专门用于单个数据闪存块(块关联),用于所有数据闪存块(完全关联),或者用于一组连续的数据闪存块(集关联)。F2FS使用多头记录的方式并行写入节点和数据块,而关联式FTL会将分离的块(在文件系统层面)混合到同一个闪存块中。为了避免这种错位,F2FS将活动日志映射到不同的区域,以在FTL中分离它们。 2.5 Cleaning 清理是一个回收分散的和无效的块的过程,一旦底层存储容量被填满,清理就会不断发生,这样就会影响F2FS的持续性能。在F2FS中,清理是以段为单位进行的。 F2FS有前台清理和后台清理,前台清理只有在没有足够空闲部分时才会触发,而后台清理则会定期唤醒。清理过程分为三步: 确定要清理的部分。LFS中有两个策略:贪婪(greedy)和成本效益(cost-benefit),贪婪策略选择一个有效块数最少的部分,前台清理采用贪婪策略,这种策略控制了迁移有效块的开销。后台清理采用成本效益策略,成本效益策略根据利用率和"年龄"来选择要清理的部分。 识别和迁移有效块。在第一步中选择了一个区段后,要快速识别出这个区段的有效块,F2FS通过在SIT中为每个区段维护的有效性位图来确定所有有效块,然后从SSA信息中检索出包含其索引的父节点块,如果这些块是有效的,F2FS将它们迁移到其他空闲的日志中。 在后台清理时,F2FS并没有实际的I/O迁移,而是把有效块加载到页面缓存,标记为脏块,让内核工作线程稍后将其刷入存储。这种延迟迁移减轻了对前台I/O活动的性能影响,而且还允许小的写操作被合并。
    F2FS 文件系统 Created Fri, 30 Sep 2022 15:04:21 +0800