详解SSD可靠性影响因素、原理和解决方法
闪存技术对大家来说,已经不是什么新鲜技术。但每个技术从出现到广泛应用,都需很长的时间跟现有技术进行博弈,最终通过实践才能深得用户的认可。闪存就是一个典型的例子。用户在欣喜闪存高性能的同时,也对可靠性、擦写次数和故障率等问题充满担忧。所以,笔者觉得非常有必要通过以下几点,谈谈闪存这方面的问题,缓解大家的疑虑和担忧。
闪存介质为什么会有擦写寿命的限制?
闪存介质中,保存数据的基本单元被称为Cell。每个Cell通过注入、释放电子来记录不同的数据。电子在Cell中进出,会对Cell产生磨损;随着磨损程度的增加,Cell中的电子出现逃逸的概率会不断增加,进而导致Cell所保存的数据出现跳变。(举个例子,某个Cell最开始保存的二进制数据是10,一段时间后再读取该Cell,二进制数据可能就变成了11)。
因为闪存中保存的数据有一定的概率出现跳变,因此需要配合ECC算法(Error-Correcting Code)来使用。
写入数据时,ECC引擎基于原始数据计算出冗余数据,并将原始数据和冗余数据同时保存。
读取数据时,原始数据和冗余数据一并被读出,并通过ECC引擎检查错误并纠正错误,最终得到正确的原始数据。
闪存所保存的数据出现跳变的数量,随着擦写次数的增加而增加。当擦写次数达到一定的阈值后,闪存中保存的数据出现跳变的数量会增大到ECC引擎无法纠正的程度,进而导致数据无法被读出。这个阈值就是闪存的最大擦写次数。
LDPC算法为什么可以提升闪存的擦写寿命?
闪存所保存的数据,在保存一段时间后,会出现跳变;且出现跳变的数量,随着擦写次数的增加而增加。因此,SSD内部需要有ECC引擎进行数据检错和纠错。
在SSD领域,当前标准的ECC算法是BCH算法(该算法以三位作者的名字首字母命名),可以满足绝大多数SSD的纠错需求。闪存介质所宣称的最大擦写次数,就是基于BCH算法来给出的。
但随着TLC介质和3D NAND的普遍应用,同样的数据块,其寿命末期的出错率将会大大增加,BCH编码的纠错能力显得非常无力,这也使得LDPC纠错算法在SSD领域有了用武之地。
LDPC算法是一个纠错能力很强的算法(相比BCH,可以纠正更多的数据跳变),复杂度较高,最早应用于通信行业。
1963年Gallager的一篇名为<Low Density Parity Check Codes>的论文详细描述了该算法思想,从此LDPC就此诞生,LDPC 编码已经广泛应用于光通信、卫星通信、通信等领域,可以说是一套非常成熟的纠错算法。
SSD的高性能是如何体现的?
存储系统的性能主要体现在两个指标上,一个是IOPS代表每秒存储处理的IO数量,另一个是时延代表存储接收到IO之后处理的速度。
上表为SSD和传统HDD的性能对比,我们可以看出无论从IOPS还是从时延角度SSD均远远好于HDD。
从IOPS角度一块SSD提供的IOPS,需要60块左右高性能HDD才能达到相同的IOPS,但是从时延角度SSD的低时延是HDD无法提供的。
听说SSD写几千次就坏了,这是真的吗?
当然这不是真的。SSD在处理数据写入时,每次都写到新的物理地址,从而使得所有的闪存物理空间被均匀使用。
举个例子,假设一块600GB的SSD,其闪存介质写次数为1万次,那么该SSD可以写入的数据总量达到6PB (600GB*10000)。
而业界对大量企业级硬盘的研究数据显示,应用在企业级环境中的硬盘,整个生命周期的写入数据总量是有限的。假设以单盘写入小于200TB为例,这意味着这块600GB的SSD磁盘,可以使用近十年以上。
所以,即便SSD所采用的闪存介质只能写入几千次或者几万次,但是将闪存做成SSD之后,完全满足企业级应用的需求。
SSD寿命由哪些因素所决定?
SSD的寿命一般是指其所使用的闪存颗粒可以承受的磨损寿命。SSD内部的其他器件不会成为整盘寿命的限制或瓶颈,一般不会成为寿命的短板。为了延长SSD磨损寿命,大多数厂商采用如下方法。
1、提供冗余(Over Provisioning)。举个例子,一块100GB容量的SSD,其内部的闪存颗粒的物理容量是大于100GB,企业级SSD一般可以达到128G或者更多,超出的那部分就被称为冗余。
2、采用较好的部件。如更好的颗粒、更好的控制芯片等。举例,SLC闪存颗粒的最大擦写次数优于MLC,而MLC又优于TLC。
SSD的寿命与所采用的闪存冗余度、颗粒类型和器件也有很大关系,所采用闪存的冗余越大,寿命越长。采用闪存的颗粒类型越好,寿命越长。采用控制芯片纠错能力越强,寿命越长。
SSD寿命并非单纯取决于闪存的类型,而是多个因素综合作用的结果。通过充裕的容量冗余、强力的LDPC纠错算法,可以满足各种企业级应用需求。
导致SSD发生故障的原因一般有哪些?
导致SSD的故障原因主包括闪存介质故障、硬件故障、软件故障等。相比HDD,SSD没有机械部件,因此对运行环境各方面的要求更低,满足HDD正常运行的环境完全可以满足SSD正常运行,并且在如在地铁、舰船等振动环境下,SSD更能发挥其稳定可靠地优势,保持业务稳定运行。
SSD故障后数据是否可以恢复?
SSD和HDD虽然技术原理有所不同,但是在多数故障场景下,可以通过排除故障点,对故障SSD的数据进行部分或全部恢复。这一点上SSD与HDD相类似。
1、当闪存介质失效时,如果SSD内部出现了部分闪存介质失效,进而导致SSD故障,那么此时与HDD内部磁碟发生了物理伤害的情况是类似的,可以对故障部分进行隔离,进而恢复其他数据。
2、当其他硬件失效时,如果SSD出现了除闪存介质之外的其他硬件器件失效,进而导致SSD故障,那么可以通过替换失效的硬件器件,对数据进行部分或全部恢复。
3、当SSD发生软件故障时,软件故障可以通过升级软件来恢复部分或全部数据。
4、针对数据安全擦除,实际上不属于SSD故障。在对SSD执行了全盘安全擦除后,数据无法恢复,SSD的数据安全擦出不必像HDD一样必须物理销毁。
好了,今天的分享到此为止,关于更多闪存深度知识,请参看前期详细总结分享过<Flash闪存颗粒和工艺知识深度解析>文章。另外,笔者对本号涉及的技术做了总结和汇总(20+本打包),请点原文链接或识别小程序获取电子书详细信息。
热文阅读
DDN欲完成连连购,你看好Lustre还是Tintri?
微软System Center架构和存储集成分析
温馨提示:
请搜索“ICT_Architect”或“扫一扫”二维码关注公众号,点击原文链接获取更多技术资料。
Stay hungry Stay foolish
详解SSD可靠性影响因素、原理和解决方法相关推荐
- sort函数怎么用mysql_实例详解sort()函数的原理和使用方法
本文主要为大家分享一篇实例详解sort()函数的原理和使用方法,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧,希望能帮助到大家. sort()方法就是对数组按照一定的条件进行排序. ...
- 2020最全详解DDoS的攻击原理与防御方法
DoS是Denial of Service的简写就是拒绝服务,而DDoS就是Distributed Denial of Service的简写就是分布式拒绝服务,而DRDoS就是Distributed ...
- 详解六大伤硬盘软件及解决方法
一.Bittorrent下载 Bittorrent下载是宽带时代新兴的P2P交换文件模式,各用户之间共享资源,互相当种子和中继站,俗称BT下载.由 于每个用户的下载和上传几乎是同时进行,因此下载的速度 ...
- python3安装mysql模块_Python安装MySQL库详解,步骤及错误的解决方法
前面我们介绍的Python网络爬虫通常将抓取的数据存储至TXT或CSV文件,而当数据量增加之时,就需要将其存储至本地数据库了.Python访问数据库需要对应的接口程序,我们可以把接口程序理解为Pyth ...
- 算法:详解布隆过滤器的原理、使用场景和注意事项@知乎.Young Chen
算法:详解布隆过滤器的原理.使用场景和注意事项@知乎.Young Chen 什么是布隆过滤器 本质上布隆过滤器是一种数据结构,比较巧妙的概率型数据结构(probabilistic data struc ...
- Kubernetes Service详解(概念、原理、流量分析、代码)
Kubernetes Service详解(概念.原理.流量分析.代码) 作者: liukuan73 原文:https://blog.csdn.net/liukuan73/article/details ...
- 详解SYN Flood攻击原理与防范
详解SYN Flood攻击原理与防范 SYN Flood是当前最流行的DoS(拒绝服务攻击)与DDoS(分布式拒绝服务攻击)的方式之一,它是利用TCP协议缺陷,发送大量伪造的TCP连接请求,从而使得被 ...
- 详解Google Authenticator工作原理
详解Google Authenticator工作原理 发表于2014-09-23 08:28| 10060次阅读| 来源CSDN| 16 条评论| 作者伍昆 Google二维码Google Au ...
- linux 卡在grub_详解ubuntu双系统启动时卡死解决办法
ubuntu双系统启动时卡死解决办法(在ubuntu16.04和18.04测试无误) 问题描述: 在安装完ubuntu双系统后,第一次启动ubuntu系统时,卡死在启动界面(或者黑屏),这大概都是由于 ...
最新文章
- 文件读取输出-python
- 双活方案_MySQL业务双活的初步设计方案
- 例说DNS递归/迭代名称解析原理
- imitativesimulate
- 信号与线性系统分析_什么是线性系统?如何辨别控制系统?控制系统基本要求是什么?...
- docker java 不兼容_Apple M1 芯片不支持 Docker?Docker:正在努力适配
- 解决问题的经验-javaweb-第一次-已掌握技术栈大致总结(部分),和相关理解,总结,以及对未来学习方向的规划
- C#委托、事件学习之(二)——简单按钮委托事件
- python i开发工具_Python轻量级开发工具Genay使用
- 京东金融品牌升级,为用户做精准决策,打造金融机构的“第二增长场景”
- linux系统下安装游戏,在Linux系统下安装GameHub来管理所有游戏
- 创建dqn的深度神经网络_深度Q网络(DQN)-II
- js获取ck_JS获取CkEditor在线编辑的内容
- redis/memcached可视化客户端工具TreeNMS
- 计算机报名登录老显示验证码错误是怎么回事,为何登录博客时输入了正确的验证码却总提示验证码错误?...
- Goolgle10个搜索技巧
- 经济学硕士计算机博士,去美国那些大学攻读经济学博士比较好?看完你就清楚了...
- Android锁屏的实现与难点总结
- python项目七:自建公告板
- NetCore开发的分布式文件上传系统
热门文章
- 中国地质大学(北京)地质微生物团队招聘启事
- stm32 cubemx 新建项目一直报错的问题终于解决了
- Hive Thrift Server
- 怀旧服一区和五区服务器位置,魔兽怀旧服战场分组怎么看?怀旧服战场分组一区五区怎么分的?...
- DICOM标准中关于C-Find,运用StudyTime进行查找时无法查找到数据的问题
- nvidia驱动卸载与安装
- 【2023】Kotlin教程 第二篇 面向对象与函数式编程 第15章 数据容器——数组和集合 15.2 集合概述
- 目前免费用可用的天气api接口及失效接口
- Abaqus 固定云图标尺
- Zxing jar的下载地址