文件系统的可扩展性,主要考察flash规模变大时对文件系统性能的影响,主要考察指标有:
  • mount时间
  • 访问时间
  • 检查修复时间
  • 最大文件大小
  • 最大文件系统大小
  • 最大文件个数
 
mount时间
          相较jffs2需要扫描全部flash,ubifs利用log+bud日志结构,log区大小和bud大小通过DEFAULT_MAX_JNL(32M)的限制,将mount时间复杂度控制在O(1),时间大为缩短。ubifs mount流程请参照《ubifs性能优化分析》相关小节。但是需要注意的是ubi attach时间复杂度是O(n),与flash大小成线性关系,是主要的时间瓶颈,这个问题可以通过ubi的fastmap feature(2.6.32内核上还是experiential feature)得到解决。
 
访问时间
          访问时间的可扩展性在2个方面:存储位置的查找更新和存储对象的查找更新,分别介绍如下:
          采用LPT B+ 树按使用情况组织管理逻辑块,其查找和更新时间复杂度为O(logmN),
          采用list管理全free或dirty的逻辑块,其查找时间复杂度进一步优化为O(1),
          采用heap管理部分free或dirty的逻辑块,其更新时间复杂度为O(longN),查找时间复杂度进一步优化为O(1),
          采用TNC B+ 树按索引管理组织逻辑块,文件位置查找和更新时间复杂度为O(logmN)
综上所述,ubifs的访问时间复杂度为O(logmN)。
 
检查修复时间
          ubifs在mount时自动完成检查修复,各区的检查修复手段如下:
          superblock区:大小固定,只占用1个逻辑块,且只读的,理论上不会损坏。只检查,但不修复;时间复杂度为O(1);
          master区:大小固定,只占用2个逻辑块;A,B2区内容相互备份,进行检查修复;时间复杂度为O(1)。
          log区:为了便于快速检查是否存在重复的(lnum, offs)bud信息或者快速找到指定lnum的bud,bud采用有序rb tree组织,其index为lnum,其查找和更新时间复杂度为O(logN),而且log+bud日志结构通过DEFAULT_MAX_JNL(32M)的上限限制,即N具有上限。
          LPT区:无修复动作。因为lprops与逻辑块成线性关系,其检查时间复杂度也为O(n),为了不影响mount时间,所以检查功能(dbg_check_lprops)也默认关闭。
          orphan区:orphan区本身无修复检查。但是对于unclean umount,会利用orphan区删除孤儿节点。因为orphan区的逻辑块个数固定(为1或2个),所以存于orphan区的孤儿节点的个数固定,其遍历的时间复杂度为O(1)。
          main区:检查因为有log+bud的日志保护,所以ubifs不检查扫描main区下的index tree。
综上所述,ubifs的检查修复时间复杂度为O(1)。
 
最大文件大小
          ubifs本身无限制,受限于文件系统大小等其他限制
 
最大文件系统大小
          取决于block的个数限制(int block_cnt)和大小限制(#define UBIFS_BLOCK_SIZE  4096),最大2^32 * 4K = 16T
 
最大文件个数
          取决于inode的限制。最多支持2^32 个文件(#define MAX_INUM 0xFFFFFFFF)
 
--EOF--
 

ubifs扩展性分析的更多相关文章

  1. OpenStack 企业私有云的若干需求(6):大规模扩展性支持

    本系列会介绍OpenStack 企业私有云的几个需求: 自动扩展(Auto-scaling)支持 多租户和租户隔离 (multi-tenancy and tenancy isolation) 混合云( ...

  2. 《.NET 设计规范》第 6 章:扩展性设计

    第 6 章:扩展性设计 6.1 扩展机制 考虑用不包含任何虚成员或受保护的成员的非密封类来为框架提供扩展性.这种方法所提供的扩展性广受用户欢迎,而且它的开销也不高. 考虑将受保护的成员用于高级的定制方 ...

  3. MySQL - 扩展性 3 负载均衡:眼花缭乱迷人眼

    负载均衡的基本思路很简单: 在一个服务器集群中尽可能地的平均负载量. 基于这个思路,我们通常的做法是在服务器前端设置一个负载均衡器.负载均衡器的作用是将请求的连接路由到最空闲的可用服务器上.如图 1, ...

  4. MySQL - 扩展性 1 概述:人多未必力量大

    我们应该接触过或者听说过数据库的性能瓶颈问题.对于一个单机应用而言,提升数据库性能的最快路径就是氪金 - 买更高性能的数据库服务器,只要钱到位,性能不是问题. 但是当系统性能增加到一定地步时,你会发现 ...

  5. 设计模式如何提升 vivo 营销自动化业务扩展性 | 引擎篇01

    在<vivo 营销自动化技术解密 |开篇>中,我们从整体上介绍了vivo营销自动化平台的业务架构.核心业务模块功能.系统架构和几大核心技术设计. 本次带来的是系列文章的第2篇,本文详细解析 ...

  6. Atitit.兼具兼容性和扩展性的配置方案attilax总结

    Atitit.兼具兼容性和扩展性的配置方案attilax总结 文件配置法1 Jdbc多数据源文件配置发1 Bat文件配置法1 改进的文件配置法(采用类似i18n技术) 推荐1 使用自动化pc_id的方 ...

  7. Atitit.软件架构高扩展性and兼容性原理与概论实践attilax总结

    Atitit.软件架构高扩展性and兼容性原理与概论实践attilax总结 1. 什么是可扩展的应用程序?1 2. 松耦合(ioc)2 3. 接口的思考 2 4. 单一用途&模块化,小粒度化2 ...

  8. 使用Lua脚本语言开发出高扩展性的系统,AgileEAS.NET SOA中间件Lua脚本引擎介绍

    一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...

  9. jetbrick,新一代 Java 模板引擎,具有高性能和高扩展性

    新一代 Java 模板引擎,具有高性能和高扩展性. <!-- Jetbrick Template Engineer --> <dependency> <groupId&g ...

随机推荐

  1. js 闭包原理理解

    问题?什么是js(JavaScript)的闭包原理,有什么作用? 一.定义 官方解释:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分. 很显然 ...

  2. Python内置的HTTP协议服务器SimpleHTTPServer

    [root@ok 6FE5-D831]# python -m SimpleHTTPServer 一条命令,HTTP服务就搭起来了!!! 方便朋友下载,自己的文件!!

  3. HTML5学习之文件操作(九)

    之前我们操作本地文件都是使用flash.silverlight或者第三方的activeX插件等技术,由于使用了这些技术后就很进行跨平台的处理,另外就是让我们的web应用依赖了第三方的插件,而不是很独立 ...

  4. C#委托(Action、Func、predicate)

    Predicate 泛型委托:表示定义一组条件并确定指定对象是否符合这些条件的方法.此委托由 Array 和 List 类的几种方法使用,用于在集合中搜索元素. public delegate boo ...

  5. hdu 3695:Computer Virus on Planet Pandora(AC自动机,入门题)

    Computer Virus on Planet Pandora Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 256000/1280 ...

  6. 初识SQL Server Integration Service

    SSIS(SQL Server Integration Service)是Microsoft 从SQL Server2005 以后发布的,现在一直跟随每个SQL server版本.它是Microsof ...

  7. 连接SQL Server执行SQL语句

    public static DataTable GetData() { string Connect = ConfigurationManager.AppSettings["Connecti ...

  8. 卸载已经安装的rpm包

    两个关键点: 1.如果提示有xxx.rpm包已经被installed了,那么先用rpm -e  --nodeps xxx来卸载 2.如果存在多个版本的话,用rpm -e --allmatches来卸载 ...

  9. Sublime Text 3 安装Go语言相关插件gosublime

    1.打开Sublime Text,使用快捷键 ctrl+` (左上角Tab键上方,Esc键下方)或者使用菜单 View > Show Console menu,此时将出现Sublime Text ...

  10. C#联通新版验证码识别的实现

    以前写了篇 联通充值卡自动充值的实现,最近发现联通官网改版了,随便看了下发现新版的验证码和以前的不同,发了点时间研究了下他的识别码,它现在的验证码如下 现在将识别步骤说下 1,转换灰度图片 2,清除2 ...