ubifs总体设计分析

1.     设计需求

flash设备区别与一般的块设备,有如下特点:

  • 存在坏块
  • 使用寿命较短
  • 存储介质不稳定
  • 读写速度慢
  • 不支持随机访问(nand)
  • 只能通过擦除将0改成1
  • 最小读写单位为page or sub-page
  • 便宜

ubifs文件系统是为flash存储设备设计的文件系统。在存储设备上高效地管理文件是存储设备文件系统的主要目标,这个目标可以从可用性、可靠性、可扩展性、性能等多个维度进行度量。

2.     需求分析

基于可用性、可靠性、可扩展性、性能这4个需求属性展开的分析如下。其中可用性分超级块操作、文件操作和目录操作;可靠性分掉电保护、坏块管理、磨损均衡,错误预测、冗余校验和冗余备份;可扩展性分node和LEB;读写性能分缓存、压缩和异地更新。
其中坏块管理、磨损均衡、错误预测等功能由UBI子系统实现,UBIFS不予关心。后面会就这4个维度展开专题详细介绍。

3.     对象模型设计

UBIFS有32个文件,41个公共数据对象,其中ubifs_info有近300个字段。而且基于性能和扩展性的考虑,ubifs对象采用了多种数据结构描述:如B+树、RB树、优先队列、链表、数组。总体复杂度高,对象关系复杂。
我们不妨通过分析ubifs的关键路径--写操作,来分析ubifs的设计决策。ubifs层位于通用块层和ubi层之间,通用块层的核心对象是inode和super_block,ubi层的核心对象是LEB。写操作就是要根据inode,进过ubifs层的处理,找到ubi层的LEB,并把数据写入到存储介质上。首先构造ubifs的核心对象ubifs_node,ubifs_node一诞生,就面临如下几个问题:
1)     如何构建ubifs_node组织结构;
2)     如何根据inode创建ubifs_node;
3)     如何通过inode找到ubifs_node;
4)     如何通过ubifs_node找到LEB;
5)     如何给ubifs_node分配LEB;

前3个问题,ubifs通过构造TNC B+树来解决,后2个问题通过LPT B+树来解决。这也是ubifs的另外2个核心对象。B+树的优点是查找快速,但是B+树的更新往往会导致从根节点到目标叶节点路径上所有节点的更新。如何管理TNC和LPT树又有几个问题需要解决:
1)     构造问题:树根节点如何找到;树中间节点和叶节点如何存储到介质上;
2)     读问题:树节点如何根据各种目的进行快速索引;
3)     写问题:树节点如何安全快速地进行添加、更新、删除等操作;

由于TNC和LPT树的规模、目的差异都很大,以上的几个问题的解决方法也不尽相同,后面再分专题进行介绍。其核心对象模型和对象关系设计如下。其中细线条代表关联关系,粗线条代表组合关系,黑色代表内存对象,红色代表flash对象,即需要写入flash的数据。

从对象模型中可以基本看出,UBIFS文件系统利用了vfs层、页缓存层和通用块层,但不进过io调度层,其在系统中的位置和系统的层次结构介绍如下:

a)     vfs层核心对象file;
b)     页缓存层核心对象address_space;
c)     通用块层核心数据对象super_block,inode;
d)     ubifs层核心数据对象ubifs_info。

其中ubifs_info主要维护三个对象:LPT、TNC和journal,其主要字段解释如下:

  • nroot: LPT的对象树;
  • lpt_cnext:用于提交LPT更新的对象链表;
  • lpt_heap:用于分配LEB的对象优先队列;
  • buds:node位置信息对象;
  • jheads:日志对象;
  • zroot:node的对象树(TNC);
  • cnext:用于提交node更新的对象链表;

4.     对象持久化设计

ubifs文件系统对设备空间的划分如下,其中log、LPT、orphan、main区的具体大小取决于flash的物理大小: 

4.1 super block area

super block 使用LEB0,其描述的文件系统基本信息,如index tree fanout, default compression type (zlib or LZO), log area size等等。由格式化工具在格式化时写入,对ubifs只读。

4.2 master node area

master area使用LEB1和LEB2,两个LEB相互备份。这个是为了恢复着想,因为有两种情况会导致主节点损坏或丢失。第一种情况就是当主节点正在被写入的时候突然断电;第二种情况是可能是flash介质自身损坏。有了两个备份的LEB,就可以根据情况去恢复。

master area保存着commit number、root index lnum和offset、start log lnum和offset、start index lnum和offset、root lpt lnum 等信息,每次提交时会更新master area上这些信息。

4.3 log area

上面我们提到了UBIFS中这样的树状结构是保存在flash中,那么就带来了一个问题,每次更新文件,相应的文件信息和数据都会发生变化,那么这颗树种的结点也会发生变化。而我们知道NANDFLASH的特点,每次重新写入之前必须擦除,可见这样频繁的操作带来的是效率的低下。为了降低片上树结点频繁的更新,UBIFS中创建了log区,按日志形式记录树节点的位置信息leb:offs修改,然后一次提交到main区上,这样就降低了更新的频率。

存于log的节点类型为UBIFS_REF_NODE,其flash的表示为ubifs_ref_node,内存的表示为ubifs_bud,主要记录node的位置信息leb:offs。ubifs_bud按RB树组织,以lnum为key。

mount时会扫描log区,读出bud并重新索引。这个过程叫回放(replay)。umount时会把bud提交到log区。

4.4 lpt area

LPT主要用对对LEB的分配、回收、状态查询(free、dirty、index、etc.)。

我们上面提到了log area的目的,就是降低数据的更新频率。但是数据如何更新呢?也就是说,这些新添加的数据写往何处?所以必须对flash中每一个块的空间使用情况有一个了解,这就是LPT(LEB properties tree)的目的。LPT也是B+树,单比index tree小很多,其主要包含三个重要的参数:free space、dirty space 和index or data。

mount时,判断如果lpt_sz(nnode, pnode所占大小)大于一个LEB,自动使能big_lpt 模式和垃圾回收功能。

LPT区只在提交时更新。

4.5 orphan area

link数为0的inode节点,这个inode号被添加到一个orphan RB-tree

commit时,孤儿树中新孤儿被写到orphan area, mount时会扫描orphan区,删除orphan节点。

4. 6 main area

文件系统的数据和索引节点,作为B+树的index node存储在main区。 具体结构如下:

5.     参考资料

linux kernel 2.6.32

—— 完 ——

时间: 2024-11-01 21:10:23

ubifs总体设计分析的相关文章

ABP开发框架前后端开发系列---(1)框架的总体介绍

ABP是ASP.NET Boilerplate的简称,ABP是一个开源且文档友好的应用程序框架.ABP不仅仅是一个框架,它还提供了一个最徍实践的基于领域驱动设计(DDD)的体系结构模型.学习使用ABP框架也有一段时间了,一直想全面了解下这个框架的整个来龙去脉,并把想把它使用历程整理成一个系列出来,不过一直没有下笔来写这篇文章的开篇,就是希望能够深入了解,再深入了解一些,希望自己能够理解透彻一些,不能误人子弟,也不想和网上千篇一律的翻译官网的内容,官网的英文介绍也已经很详细了,于是我觉得还是以实际

基于MVC4+EasyUI的Web开发框架形成之旅--框架总体界面介绍

在前面介绍了一些关于最新基于MVC4+EasyUI的Web开发框架文章,虽然Web开发框架的相关技术文章会随着技术的探讨一直写下去,不过这个系列的文章,到这里做一个总结,展示一下整体基于MVC4+EasyUI的界面效果,让大家对这款Web开发框架有一个形象的了解,界面设计以及相关思路可以借鉴提高,也可以对相关的内容进行相互探讨,共同提高. 技术特点:整个Web开发框架,界面部分采用较新的技术,包括MVC4,最新版本的EasyUI,以及zTree树形控件.Uploadify文件上传组件等模块,另外

Oracle体系结构总体概述

本文从网上找了一张介绍oracle体系结构图,用于总体的描述oracle的体系结构 1 oracle数据库主要有数据文件database和数据库实例instance组成.用户通过用户进程链接到server process.在数据库启动的时候,需要依赖于参数文件parameter file,如果我们的数据库是归档模式的话,oracle数据库会把 redo log files 写入到 archived log files,避免redo log files 被覆盖 2 instance 介绍 数据库启

XCOM2中敌对生物设计分析(Aliens篇)

Aliens Aliens作为游戏设定中入侵的外星人,有各式外貌及奇特的战斗方式,掌握一些高能科技或利用精神力量进行攻击 Sectoid 使用灵能战斗的外星人,并无高级版本,初级便会使用精神控制,生命值较少. 能力:精神控制 召唤僵尸 眩晕目标(闪光弹效果,移动力.命中率大幅降低,无法使用部分能力) 恐慌目标 AI行为模式及策略:防御型 1.选择离玩家单位一定距离的掩体躲避 2.优先使用灵能(召唤僵尸优先级最大) 3.极少使用主武器 设计分析: Aliens中最基础的,定位偏向于“杂兵”的单位,

总体和样本

#一日一词# 总体:指在某种共性的基础上由许多个别事物结合起来的整体.简言之总体是我们要调查或统计某一现象全部数据的集合.比如调查国内教师薪水情况中全中国的所有教师,调查某一高中高三学生成绩分布中所有的该校高三学生.(也是有一定范围的) 三大特点: ①同质性(共性)②大量性 ③差异性 总体可分为两大类: 有限总体:指总体单位数有限而可以计数的总体(如全国人口普查) 无限总体:指总体单位数无限不可以计数的总体(如在检验某种新工艺是否真正能够改善产品的性能的问题中) 样本 从总体中抽取出一部分单位,

ubifs概述

UBIFS无排序区块图像文件系统(Unsorted Block Image File System, UBIFS)是用于固态存储设备上,并与LogFS相互竞争,作为JFFS2的后继文件系统之一.真正开始开发于2007年,并于2008年10月第一次加入稳定版本于Linux核心2.6.27版. 由IBM.nokia工程师Thomas Gleixner.Artem Bityutskiy等人于2006年发起,致力于开发性能卓越.扩展性高的FLASH专用文件系统,以解决嵌入式环境下以FLASH作为MTD设

ubifs物理存储

Ubifs通过ubi管理MTD设备,ubi的LEB随机映射PEB,其本身占用一部分PEB,具体文件存储情况分析如下. 1. Ubi中不管是是逻辑块号还是物理块号都是从0开始的.一般情况下,Nandflash开始处存放bootloader和linux,这样LEB与PEB间存在一个偏移,此偏移由ubifs起始位置确定. 2. Ubi管理整个flash(属于ubi部分的flash),ubi分区在ubi flash区域之上分配.从MTD层看,整个ubi属于同一mtd分区. 3. 在ubi中,每个PEB第

飞达资讯App总体介绍及关系架构图

飞达资讯App总体介绍: 下图为飞达资讯App的关系架构图: 该App关系架构图所需的图片云盘链接地址:http://pan.baidu.com/s/1gfHIe4b 提取密码:x1nr 该App的云盘下载地址:http://pan.baidu.com/s/1eS8WGXs 提取密码:5eqe 由于作者水平有限和时间仓促,该App可能存在一些疏漏和不当之处,敬请读者批评指正. 作者联系方式: 电话:15223328653,QQ:2099904576,邮箱:[email protected]

JDK源码分析之集合01总体框架

集合类是java提供的工具类,主要包括List.Set.Map和vector等类型.所有的集合相关类都位于java.util.*内. 集合类的总体框架图如下图所示: 对总体框架的说明: 集合框架中最顶层的接口有Iterator.Collection和Map三个.其中Itireator是所有迭代器需要实现的接口,Collection是所有的线性结构集合所要实现的接口,Map是所有的非线性集合所要实现的接口,元素以Key.value的形式保存. Collection下层中包含了Queue.List和