文件系统的可扩展性,主要考察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. win7下python3.4 ImportError: No module named 'MySQLdb'错误解决方法

    首先,安装PyMySQL C:\Users\fnngj>python -m pip install PyMySQL 执行以下命令会报错: ImportError: No module named ...

  2. ASP.NET MVC中ViewData、ViewBag和TempData

    1.ViewData 1.1 ViewData继承了IDictionary<string, object>,因此在设置ViewData属性时,传入key必须要字符串型别,value可以是任 ...

  3. 重温WCF之WCF抛出异常的处理SOAP Fault(十二)

    1.(服务端)抛出和(客户端)捕获SOAP Fault 当我们需要客户端获取到WCF服务端的抛出的异常的时候,使用FaultException类 WCF类库在System.ServiceModel命名 ...

  4. ExcelReport第二篇:ExcelReport源码解析

    导航 目   录:基于NPOI的报表引擎——ExcelReport 上一篇:使用ExcelReport导出Excel 下一篇:扩展元素格式化器 概述 针对上一篇随笔收到的反馈,在展开对ExcelRep ...

  5. EChart使用简单介绍

    Echart是百度研发团队开发的一款报表视图JS插件,功能十分强大,使用内容做简单记录:(EChart下载地址 http://echarts.baidu.com/download.html) 1.ti ...

  6. VS2013 当前不会命中断点,还没有为该文档加载任何符号

    方法一: 把ie的 调试 打开,然后调试的时候 会问你 是在新示例中打开 还是 当前示例,你选择当前的就行了.还有 建议你用 ie8.0的 开发者工具 调试  非常舒服 我已经 早就不用debuger ...

  7. annotation-config 和 component-scan 的区别

    <context:annotation-config> 和 <context:component-scan>是Spring Core里面的两个基础概念,每个使用者都有必要理解怎 ...

  8. golang debug with LiteIDE

    golang 的调试比较麻烦,debug stop into 无法跳转到自己写的代码,但是能够跳转到系统提供的代码. 以下是简单的测试代码: package main import ( "f ...

  9. 关于RTP负载类型及时间戳介绍

    转自:http://www.360doc.com/content/11/1018/13/1016783_157133781.shtml 首 先,看RTP协议包头的格式: 前12个字节在每一个RTP p ...

  10. 报错:1130-host ... is not allowed to connect to this MySql server 开放mysql远程连接 不使用localhost

    执行如下命令报错 mysql -uroot -h${hostIp} -p Enter password:********* ERROR (HY000): Host '$hostIp' is not a ...