UBER、RBER和MTBF的概念

转载自 http://www.ssdfans.com

SSD有几个关键指标来衡量其可靠性:UBER、RBER和MTBF。

UBER: Uncorrectable Bit Error Rate,不可修复的错误比特率;

RBER: Raw Bit Error Rate, 原始比特错误率;

MTBF: Mean Time Between Failure, 平均故障间隔时间。

1. 数据可靠性

我们接着看一下上面的S3710 SSD手册中Reliability(可靠性)项的截图:

image

UBER:Uncorrectable Bit Error Rate,不可修复的错误比特率,一种数据损坏率衡量标准,等于在应用了任意特定的错误纠正机制后依然产生的每比特读取的数据错误数量占总读取数量比(概率)。

为什么SSD要定义UBER?任何一项存储设备产品包括HDD,用户最关心的是数据保存后的读取正确性。试想数据丢失和损坏对客户产生的后果是怎么样的?尤其是企业级用户数据。那如何让用户相信存储设备系统是可靠的呢?UBER指标,描述的是出现数据错误的概率,给用户以直观的概率数据描述错误数据的可能性,当然越低越好。

为什么会产生错误数据,SSD的存储介质是闪存,闪存有天然的数据比特翻转率。主要有以下几种原因导致:

l 擦写磨损(P/E Cycle)

l 读取干扰(Read Disturb)

l 编程干扰(Program Disturb)

l 数据保持发生错误(Data Retention)

虽然SSD主控和固件设计会用纠错码(ECC)的方式(可能还包括其它方式,如RAID),但闪存在某种条件下依然有纠不回来的可能,所以需要有UBER让用户知道数据误码纠不回来的概率参考数据。

闪存原始的比特翻转加上BCH码(一种ECC纠错算法)ECC 校验保护后,可以计算转换到UBER。影响到UBER最核心的是闪存原始的比特错误率,也叫RBER(Raw Bit Error Rate)。图1-23从RBER、ECC编码长度(Code Length)和保护强度(Strength)换算到UBER,从中得出结论:

相同的ECC编码长度,随着保护强度的增长,UBER在降低,呈大幅倍数降低。

image

图1-1 UBER和纠错强度的关系

相同的ECC编码长度和保护强度,RBER越低,UBER也在降低,呈指数降低。

image

图1-2 UBER和RBER的关系

RBER反映的是闪存的质量。所有闪存出厂时都有一个RBER指标,企业级闪存和消费级闪存的RBER显然是不同的,价格当然也有所不同。RBER指标也不是固定不变,如图1-25闪存的错误率会随着使用寿命(PE cycle)增加而增加。为了挑战极限,必须准备好处理每100个bit就有1个坏的情况。

image

图1-3 RBER 和PE的关系

RBER还跟闪存内部结构也有关系。两个相邻闪存块的RBER有可能完全不同,图1-26是单个闪存块里面不同闪存页的RBER分布图。看得出来,Upper Page的RBER比Lower Page要高两个数量级。

image

图1-4 Lower&Upper page RBER

最后回到UBER指标作为结尾,数据的UBER指标的要求对于企业级和消费级SSD各有不同,通常商用企业级和消费级SSD的UBER指标又是多少呢?如表1-9:

表1-9 企业级和消费级SSD UBER值

UBER

企业级(Enterprise)

10-17甚至10-18

消费级(Client)

10-15


2. MTBF

MTBF,即平均故障间隔时间,英文全称是“Mean Time Between Failure”。是衡量一个产品(尤其是电器产品)的可靠性指标。单位为“小时”。它反映了产品的时间质量,是体现产品在规定时间内保持功能的一种能力。具体来说,是指相邻两次故障之间的平均工作时间,也称为平均故障间隔 [1] 。概括地说,产品故障少的就是可靠性高,产品的故障总数与寿命单位总数之比叫“故障率”(Failure rate)。它仅适用于可维修产品。同时也规定产品在总的使用阶段累计工作时间与故障次数的比值为MTBF。磁盘阵列产品一般MTBF不能低于50000小时。

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Uber Golang规范是Uber专门为其Golang代码库制定的一套代码编写指南和规范。以下是Uber Golang规范的主要特点: 命名规范:采用驼峰命名法,遵循Go语言的命名约定。使用有意义且描述性强的名称,避免使用缩写。 包和依赖管理:使用Go的标准工具go mod来管理包和依赖。在代码库的根目录下创建go.mod文件,明确定义需要使用的外部依赖。 代码布局:代码文件应按照功能逻辑进行组织,每个文件夹下应包含一个独立的Go模块。避免使用过深的嵌套文件夹结构。 错误处理:在函数签名中使用`error`类型,以便清晰地表示可能出现的错误。避免使用panic来处理错误,而是使用返回错误信息来处理。 并发:使用Go语言提供的并发原语,如goroutine和channel,来编写并发代码。避免使用传统的同步原语,如互斥锁。 测试:为每个包编写相应的测试代码,测试代码应放在与源代码相同的包中,以便方便进行单元测试。使用`go test`来运行测试。 文档:代码应有清晰的注释,包括每个公共函数和方法的文档注释。注释应使用规范的格式,方便生成文档。 性能优化:在编写代码时要考虑性能,并进行必要的性能优化。可以使用Go的性能分析工具来找出性能瓶颈并进行优化。 此外,Uber Golang规范还提供了关于代码风格、错误处理、日志记录、版本管理和代码重用等方面的指导。遵循这些规范可以使代码更易于理解、维护和扩展,并提高代码库的整体质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值