本篇包括三个部分:1)f2fs 文件表示方法; 2)NAT详细介绍;3)f2fs文件读写过程;4)

下面详细阐述f2fs读写的过程。

管理数据位置关键的数据结构是node,node包括三种:inode、直接node、间接node。其中inode记录了文件的基本信息,包括访问权限、文件大小、修改时间等,也有索引的功能;直接node和间接node单纯负责索引。F2fs的inode中有923个直接数据块索引,2个一级索引,2个二级索引,1个三级索引,文件的逻辑表示如下图:

inode中有923个索引项,直接node、间接node中都是有1018个索引项。

通过上图,inode中923个直接数据块索引能够索引到××K的数据,

2个一级索引能够索引到

2个二级索引能够索引到

1个三级索引能够索引到

因此,f2fs支持单文件最大3.94T,

上面介绍了f2fs三种node之间是如何配合索引文件的,但是有一个非常重要的细节:间接node的索引项记录nid号(与NAT相关),直接node的索引项中直接记录数据块地址。拿图(一)中的三级索引部分为例:

其中node block 1) 2)属于间接node,索引项中为nid号,3)和4)属于直接node,索引项中为数据块的地址。这种设计是为了解决Log-structured 文件系统中雪崩树问题,其中nid号是NAT表的下标。

f2fs文件系统中,NAT表是和文件存储强相关的一个数据结构,非常重要。因此,这篇文章的第二部分,我们就详细说说NAT表,包括它的作用以及f2fs是如何管理NAT表的。

NAT表位于元数据区,可以认为是一个大数组,数据下标是nid,每一个表项记录着一个node块的信息,包括该node块属于哪一个inode,以及该node块在磁盘上的地址。

还是以图(一)中的三级索引部分为例,我们发现,整个索引过程的真相应该是这样的:

这和图一相比已经面目全非了,图一更宏观,本图粒度更细。

到这里我们基本上可以明白f2fs为什么可以削弱雪崩树的影响了:当图中数据块因为数据变脏导致异地更新时,它的直接索引2)也会变脏,但是由于2)是一个直接索引,是node块,信息是在NAT中管理,所以只需要在NAT中update下2)的新地址就好了!这样3)中对应的索引项根本就不用变,因为3)的索引项指向的东西在NAT里呢!

这一机制有效杜绝了雪球越滚越大!但是,这种类似于”二级指针“的方法,会带来一定程度的性能开销,所以f2fs的NAT信息在内存中以链表+基数树的方式维护,以加快查找、update过程。

好了,到这里NAT的作用基本清楚了,后面读写文件的过程还会涉及nat的操作。下面介绍下NAT的存储方式:

元数据区中有两份NAT,两份NAT在元数据区中以segment的粒度交叉存放(假设每个NAT表有3个segment):

之所以准备两份NAT,是因为f2fs中有两份snapshot,NAT是和文件存储强相关的元数据,因此两份。但是两份snapshort和两份NAT之间并不是一一对应关系,如上图,并不是说第一份快照对应的NAT数据就完全存储在图中NAT0(或者NAT1)中。它是通过一个bitmap,完成NAT在block粒度上的映射:

好了,把NAT介绍完毕后,我们对f2fs文件的索引有了新的认识,下面介绍文件的读写过程:

1)首先在VFS层,

上面介绍了f2fs文件的逻辑表示,下面看f2fs源码中是如何

f2fs源码分析之文件读写过程的更多相关文章

  1. MyBatis 源码分析 - 映射文件解析过程

    1.简介 在上一篇文章中,我详细分析了 MyBatis 配置文件的解析过程.由于上一篇文章的篇幅比较大,加之映射文件解析过程也比较复杂的原因.所以我将映射文件解析过程的分析内容从上一篇文章中抽取出来, ...

  2. Yii2 源码分析 入口文件执行流程

    Yii2 源码分析  入口文件执行流程 1. 入口文件:web/index.php,第12行.(new yii\web\Application($config)->run()) 入口文件主要做4 ...

  3. Spring Ioc源码分析系列--Bean实例化过程(一)

    Spring Ioc源码分析系列--Bean实例化过程(一) 前言 上一篇文章Spring Ioc源码分析系列--Ioc容器注册BeanPostProcessor后置处理器以及事件消息处理已经完成了对 ...

  4. Spring源码分析之`BeanFactoryPostProcessor`调用过程

    前文传送门: Spring源码分析之预启动流程 Spring源码分析之BeanFactory体系结构 本文内容: AbstractApplicationContext#refresh前部分的一点小内容 ...

  5. Spring Ioc源码分析系列--Bean实例化过程(二)

    Spring Ioc源码分析系列--Bean实例化过程(二) 前言 上篇文章Spring Ioc源码分析系列--Bean实例化过程(一)简单分析了getBean()方法,还记得分析了什么吗?不记得了才 ...

  6. tomcat8 源码分析 | 组件及启动过程

    tomcat 8 源码分析 ,本文主要讲解tomcat拥有哪些组件,容器,又是如何启动的 推荐访问我的个人网站,排版更好看呦: https://chenmingyu.top/tomcat-source ...

  7. MyBatis 源码分析 - SQL 的执行过程

    * 本文速览 本篇文章较为详细的介绍了 MyBatis 执行 SQL 的过程.该过程本身比较复杂,牵涉到的技术点比较多.包括但不限于 Mapper 接口代理类的生成.接口方法的解析.SQL 语句的解析 ...

  8. Tornado源码分析 --- 静态文件处理模块

    每个web框架都会有对静态文件的处理支持,下面对于Tornado的静态文件的处理模块的源码进行分析,以加强自己对静态文件处理的理解. 先从Tornado的主要模块 web.py 入手,可以看到在App ...

  9. Spark 源码分析 -- task实际执行过程

    Spark源码分析 – SparkContext 中的例子, 只分析到sc.runJob 那么最终是怎么执行的? 通过DAGScheduler切分成Stage, 封装成taskset, 提交给Task ...

随机推荐

  1. ASP.NET控件绑定数据源

    DataList/GridView/Repeater DataSet表示数据集,其中包含表,约束和表之间的关系.与现有数据源的交互通过DataAdapter来控制. 源代码示例: SqlDataAda ...

  2. 实验12:Problem I: 成绩排序

    Home Web Board ProblemSet Standing Status Statistics   Problem I: 成绩排序 Problem I: 成绩排序 Time Limit: 1 ...

  3. 其他图片和webP之间相互转换

    WebP 是谷歌研发出来的一种图片数据格式,它是一种支持有损压缩和无损压缩的图片文件格式,派生自图像编码格式 VP8.根据 Google 的测试,无损压缩后的 WebP 比 PNG 文件少了 45% ...

  4. 【读书笔记】iOS网络-运行循环

    运行循环是由类NSRunLoop表示的,有些线程可以让操作系统唤醒睡眠的线程以管理到来的事件,而运行循环则是这些线程的基本组件.运行循环是这样一种循环,可以在一个周期内调度任务并处理到来的事件.iOS ...

  5. 将tomcat源码导入eclipse

    前言: 写完了socket小应用的原始版本,中间还有好多预想的功能没有实现,在写的过程中也发现了很多问题.因为前面有粗略的看过tomcat实现原理解析,知道tomcat其实也是纯java写的web服务 ...

  6. CoreAnimation-06-CAKeyframeAnimation

    概述 简介 CAKeyframeAnimation又称关键帧动画 CAKeyframeAnimation是抽象类CAPropertyAnimation的子类,可以直接使用 通过values与path两 ...

  7. CoreAnimation-04-核心动画必备基础

    概述 简介 核心动画提供了一组非常强大的动画API,通过该组API可以高效的实现绝大部分绚丽的动画效果 注意事项 核心动画的操作在子线程中执行,不会阻塞主线程 核心动画直接作用与CALayer对象上, ...

  8. SQL 在表中随机取数据

    在一张10万行产品表(Product)中,随机取10条数据的几种方式: SET STATISTICS IO ON SELECT TOP 10 ID FROM dbo.Product(NOLOCK) W ...

  9. MongoDB 的 GridFS 详细分析

    GridFS简介 GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件. http://www.mongodb.org/display/DOCS/GridFS http://www.m ...

  10. DEV 财务货币格式单元格

    在用友金蝶等财务软件中,经常需要输入货币类型的数据, 那么这种输入框要如何制作呢? 扩展DataGridView 的功能  出自在天空飞翔博客 http://www.cnblogs.com/micha ...