f2fs解析(四)f2fs的extent特性
extent的意思是“程度”,但是我还是搞不清楚要如何把“程度”和我理解的extent联系到一起。
文件的偏移和page-cache的映射关系体现在address space 中的一颗基数树上;当基数树中的page真正落盘时,f2fs也有自己的block分配算法去存储这个page;当数据真正落盘之后,文件的逻辑偏移和其真正的block之间的关系是通过inode以及各级dnode构成的索引来建立的。如果我每次查看文件的索引都是通过读各级索引去得到最终数据块的block地址也是蛮慢的,所以索引的关系最好还是放在内存里面管理,extent就是为了完成这个功能。
extent特性通过一棵红黑树来管理文件的地址空间(记不记得虚拟内存管理中的vm_struct_area是如何管理的?),比如文件第0-第8196字节的位置映射到第123、124个block,那么extent红黑树中就会有一个节点表示[0,8196)区间的映射关系!但是如果第123个字节发生了改变,那么根据f2fs的原理,第0-4096的位置就要写到别的块去了,此时extent红黑树中原来的节点[0,8196)就要分裂成【0,4096),【4096,8192)中去了,因为extent红黑树中的每一个节点必须保证被映射的区域,即磁盘空间的位置是连续的。
f2fs解析(四)f2fs的extent特性的更多相关文章
- Android Bitmap 全面解析(四)图片处理效果对比 ...
对比对象: UIL Volley 官方教程中的方法(此系列教程一里介绍的,ImageLoader的处理方法和官方的差不多) -------------------------------------- ...
- Fixflow引擎解析(四)(模型) - 通过EMF扩展BPMN2.0元素
Fixflow引擎解析(四)(模型) - 通过EMF扩展BPMN2.0元素 Fixflow引擎解析(三)(模型) - 创建EMF模型来读写XML文件 Fixflow引擎解析(二)(模型) - BPMN ...
- Spring Security 解析(四) ——短信登录开发
Spring Security 解析(四) -- 短信登录开发 在学习Spring Cloud 时,遇到了授权服务oauth 相关内容时,总是一知半解,因此决定先把Spring Security ...
- Mybatis源码解析(四) —— SqlSession是如何实现数据库操作的?
Mybatis源码解析(四) -- SqlSession是如何实现数据库操作的? 如果拿一次数据库请求操作做比喻,那么前面3篇文章就是在做请求准备,真正执行操作的是本篇文章要讲述的内容.正如标题一 ...
- Sentinel源码解析四(流控策略和流控效果)
引言 在分析Sentinel的上一篇文章中,我们知道了它是基于滑动窗口做的流量统计,那么在当我们能够根据流量统计算法拿到流量的实时数据后,下一步要做的事情自然就是基于这些数据做流控.在介绍Sentin ...
- Java 面试知识点解析(四)——版本特性篇
前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...
- f2fs解析(七)node管理器中的 free_nid 结构体
除了node_info之外, node管理器中还有还有个重要的数据结构: struct free_nid { struct list_head list; /* for free node id li ...
- f2fs解析(六)
f2fs中有对一个bitmap进行操作的函数,感觉很巧妙,和大家分享一下: 1333 static inline void f2fs_change_bit(unsigned int nr, char ...
- f2fs解析(五)什么叫做compacted summary
f2fs中普通的summary是长这样的:每一个段的SSA block中,前半部分是这个段的SSA,然后对于HOT_DATA以及COLD_DATA段,存放是的是nat journal 和 sit jo ...
随机推荐
- 【读书笔记】iOS-读取文本文件
一,文本文件的内容. 二,工程目录 三,ViewController.m - (void)viewDidLoad { [super viewDidLoad]; // Do any additional ...
- IOS开发中(null)与<null>的处理
不小心在开发过程中,得到了(null)以及<null>的返回值,找了好长时间只找到了一个关于<null>的. 由于要根据返回值进行判断,做出必要反应,因此必须知道返回值所代表的 ...
- 优于CoreData的Realm数据库基础教程
Realm 是一个跨平台的移动数据库引擎,于 2014 年 7 月发布,准确来说,它是专门为移动应用所设计的数据持久化解决方案之一. Realm 可以轻松地移植到您的项目当中,并且绝大部分常用的功能( ...
- 读书笔记-Autonomous Intelligent Vehicles(一)
Autonomous intelligent vehicles have to finish the basic procedures: perceiving and modeling environ ...
- JDBC增删查改(使用配置文件)
JDBCDemo2.java package com.zhangbz.jdbc; import java.sql.Connection; import java.sql.ResultSet; impo ...
- iOS之UI--辉光动画
前言:学习来自YouXianMing老师的博客:<辉光UIView的category>以及YouXianMing老师的github源码:< GlowView > 而我个人 ...
- Objective-C之代理设计模式小实例
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
- json数组和List转换
package hb; import java.util.Date; public class Person { String id; int age; String name; Date birth ...
- 配置gitlab gerrit jenkins
配置gerrit 在gerrit创建jenkins用户 把jenkins用户加入Non-Interactive的组中 Projects -> List -> All-Projects Pr ...
- LightSpeed 的Left Join Bug解决方案
在使用LightSpeed对数据库进行Left Join或Right Join操作时,经常会报一些匪夷所思的异常. 明明表没有问题,表面上语句写的也没问题,可总是报错.看分析器里的SQL就知道了,是L ...