ubifs扩展性分析

  文件系统的可扩展性,主要考察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--

时间: 2024-10-11 10:50:57

ubifs扩展性分析的相关文章

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

第 6 章:扩展性设计 6.1 扩展机制 考虑用不包含任何虚成员或受保护的成员的非密封类来为框架提供扩展性.这种方法所提供的扩展性广受用户欢迎,而且它的开销也不高. 考虑将受保护的成员用于高级的定制方案. 要在对安全性.文档及兼容性进行分析时,把非密封类中受保护的成员当做公有成员那样来对待. 考虑使用回调函数来允许用户向框架提供自定义的代码供框架执行. 考虑使用事件来允许用户对框架的行为进行定制,这样就不需要用户对面向对象设计有深入的了解. 要优先使用事件,而不是简单的回调函数,其原因在于广大开

服务的扩展性

在编写一个应用时,我们常常考虑的是该应用应该如何实现特定的业务逻辑.但是在逐渐发展出越来越多的用户后,这些应用常常会暴露出一系列问题,如不容易增大容量,容错性差等等.这常常会导致这些应用在市场的拓展过程中无法快速地响应用户的需求,并最终失去商业上的先机. 通常情况下,我们将应用所具有的用来避免这一系列问题的特征称为非功能性需求.相信您已经能够从字面意义上理解这个名词了:功能性需求用来提供对业务逻辑的支持,而非功能性需求则是一系列和业务逻辑无关,却可能影响到产品后续发展的一系列需求.这些需求常常包

服务的扩展性(如何创建具有可扩展性的服务实例,缓存以及数据库)

转自:http://www.cnblogs.com/loveis715/p/5097475.html 在编写一个应用时,我们常常考虑的是该应用应该如何实现特定的业务逻辑.但是在逐渐发展出越来越多的用户后,这些应用常常会暴露出一系列问题,如不容易增大容量,容错性差等等.这常常会导致这些应用在市场的拓展过程中无法快速地响应用户的需求,并最终失去商业上的先机. 通常情况下,我们将应用所具有的用来避免这一系列问题的特征称为非功能性需求.相信您已经能够从字面意义上理解这个名词了:功能性需求用来提供对业务逻

扩展性

服务的扩展性 在编写一个应用时,我们常常考虑的是该应用应该如何实现特定的业务逻辑.但是在逐渐发展出越来越多的用户后,这些应用常常会暴露出一系列问题,如不容易增大容量,容错性差等等.这常常会导致这些应用在市场的拓展过程中无法快速地响应用户的需求,并最终失去商业上的先机. 通常情况下,我们将应用所具有的用来避免这一系列问题的特征称为非功能性需求.相信您已经能够从字面意义上理解这个名词了:功能性需求用来提供对业务逻辑的支持,而非功能性需求则是一系列和业务逻辑无关,却可能影响到产品后续发展的一系列需求.

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

本系列会介绍OpenStack 企业私有云的几个需求: 自动扩展(Auto-scaling)支持 多租户和租户隔离 (multi-tenancy and tenancy isolation) 混合云(Hybrid cloud)支持 主流硬件支持.云快速交付 和 SLA 保证 大规模扩展性支持 私有云外围环境支持(包括支持CDN .商业SDN控制器.防火墙和VPN/专线等) 向上扩展性(PaaS 和 SaaS 等支撑) 企业数据中心IT环境支持(包括裸金属/Bare metal.F5 .GPU.跨

高扩展性网站的50条原则

<高扩展性网站的50条原则>,利用一天半的时间快速浏览总结的电子书,对网站的建设有一个原则性的把握,书中提到的大部分原则现在已成为互联网行业的共识,但并不妨碍我们重新整理分类,从全局层面把控高扩展性网站的建设思路,文中的每一条尽管高度凝练,但都值得细细品味.完成于2015年6月11日11:02:19. (一)化简方程 不要过度设计:基于成本的考虑,只设计能满足要求的系统即可,过于理想化的设计不利于系统的维护与成本控制: 设计时考虑扩展性:设计20倍的容量,实现3倍的容量,部署1.5倍的容量,即

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

1. 什么是可扩展的应用程序?1 2. 松耦合(ioc)2 3. 接口的思考 2 4. 单一用途&模块化,小粒度化2 5. 组合(Composition),而不是继承(inheritance) 2 6. Ocp原则开闭原则2 7. Plugin系统2 8. 流程扩展工作流系统,流程自定义2 9. Ui扩展 html53 10. 数据独立性3 11. 脚本与hotdeploy3 12. 表处理扩展if else (数据与数据处理相互分离)3 13. 系统被扩展的几种形式(方法级别,模块级别)3 1

监控开发之如何开发简单高性能扩展性强的监控系统

关于如何快速开发一套属于自己的运维监控系统. 记得刚入行的时候,对于监控方面,用的是nagios和cacti,现在大多数中小公司好多都开始搞zabbix了,熟悉zabbix的人,知道他的性能的瓶颈其实主要还是在数据库上,尤其是zabbx_server 针对数据库一些不高效逻辑的查询和写入引起的. 同事针对zabbix开发也搞了半年了,和他交流了下,有很多的想法. zabbix 有些查询完全可以从缓存里面取值,比如redis.memcached,不用非要从数据库里面来搞个消耗性能的大查询,有些监控

数据库扩展性设计:使用二进制解决一条记录关联多个状态的问题

程序开发中,经常遇到一条记录有多个状态位,比如一条商品,他属于热门,新品,特卖.我们的数据库如何设计呢? 一般有几种方法 (1)建立关联表 关联表字段:关系Id,商品Id,属性Id 查询:使用关联表的方式,查询某属性的商品. 程序:写入时,写商品表和关联表: (2)将多个属性存在一个字段中,用|分割 状态存储在一个字段中,比如某条商品属于热卖,新品和特卖,则字段存储的值:01|02|03 SQL查询:使用like 程序处理:(1)取值需要先将01,02,03分割,再处理.(2)写入需要先将01,