一个关乎寿命的公式!

戴尔易安信解决方案 2018-04-25

戴尔易安信解决方案

微信号 DellEMC_Enterprise
功能介绍 戴尔易安信解决方案专注于数字化转型中的前沿技术和解决方案,内容涵盖现代化基础架构、云计算、大数据、物联网及AI等,并通过对全球,特别是中国用户的成功实践案例分析和前沿技术解读,助力企业数字化转型,快人一步!

点击“戴尔企业级解决方案”快速订阅



随着SSD技术的发展,越来越多的厂商加入到了SSD产业行列来,伴随着技术的不断成熟价格也是越来越向机械硬盘靠拢,目前在我们很多的服务器和存储里都配置了SSD闪存盘加速性能,但在与客户的沟通中还是有很多客户担心闪存的寿命问题,尤其在读写频繁对稳定性要求较高的核心系统中使用SSD很多用户都非常有顾虑,那么闪存盘的寿命到底怎样是否适合企业级关键应用呢?

本期我们来聊聊SSD寿命的那些事。


SSD之写入放大


首先,在一切开始之前,你必须了解有个东西叫写入放大,由于闪存的运作特性,数据不能像在普通机械硬盘里那样被直接覆盖。当数据第一次写入SSD的时候,由于SSD内所有的颗粒都为已擦除状态,所以数据能够以页为最小单位直接写入进去(一般是4K,参考颗粒资料),SSD上的主控制器,使用了逻辑和物理的映射系统来管理着闪存。


对于单次操作,最简单的例子,比如我要写入一个4KB的数据,最坏的情况就是,一个块里已经没有干净空间了,但是有无效数据可以擦除,所以主控就把所有的数据读出来,擦除块,再加上这个4KB新数据写回去,这个操作带来的写入放大就是: 我实际写4K的数据,造成了整个块(512KB)的写入操作,那就是128倍放大。同时带来了原本只需要简单的写4KB的操作变成读取(512KB),擦(512KB),改写(512KB),造成了延迟大大增加,速度慢是自然了。


SSD之技术保障


再来我们来看看SSD的时间寿命公式:

寿命(年)=( 实际容量(GB) × P/E寿命)/(每天写入容量(GB/天) × 365(天))


从公式上看到,你的固态硬盘能用多少年,完全取决于你的固态硬盘的容量还有你怎么用。先来说说P/E,这代表SSD的擦写,1 P/E就代表SSD的一次擦写。怎么才算一次擦写呢?在这里很多用户有误区,千万不要以为写入和删除一个文件就是一个擦写,如果是这样,你的系统还没装完你的SSD就报废了,当然这不可能是真的。其实一次P/E是指累计写入产品实际容量大小的资料,这才算是一次擦写。打比方说,我的SSD是128G的,寿命是3000 P/E,其实实际容量就是119G,那么我的SSD消耗一次P/E就必须写入119G的资料,用够3000个P/E才算把我的SSD写废。举个例子我平均一天写入256GB的资料,我的SSD的寿命是3000 P/E,那么我的硬盘能用: (119*3000)/(256*365)=3.82(年) ,3.82年看着也不长啊,但其实大多数应用都不会每天产生这么大的数据量,更何况我们的设备中一般都有多块磁盘来组成。另外SSD的寿命也跟闪存芯片有关,目前用作闪存芯片从好到坏分为SLC,eMLC,MLC,TLC。当然闪存芯片越好价格也是越高。


其实闪存的生产厂商早已考虑到用户的担忧并采用多种技术保障SSD的数据安全:


Over-provisioning预留空间

SSD上的OP指的是用户不可操作的容量,大小为实际容量减去用户可用容量,OP区域一般被用于优化操作如:坏块映射和垃圾回收等。


OP一般分三层(见下图):第一层容量固定为SSD标称容量的7.37%,这是因为标称容量采用千进制为单位,而NAND颗粒容量单位为1024进制,两者正好相差约7.37%。这部分空间被默认用于作OP。第二层OP是否存在及容量大小取决于厂商设置。第三层OP是用户在日常使用中可以分配的,像Fusion-IO公司还给其用户提供工具让他们自行调节大小以满足不同的耐用度及性能要求,一般用户也可以自己在初次分区的时候,不把所有的SSD容量都分满来达到相同目的,此处有一点要注意,若非首次分区就留出空间,必须要先进行全盘擦除,否则没有效果。



Wear leveling磨损平衡

Flash Chip存在“写磨损”的问题,当某个单元长时间被反复擦写时(比如Oracle Redo),不仅会造成写入的性能问题,而且会大大缩短Flash memory的使用寿命。


Wear leveling依赖于SSD中的一部分保留空间,基本原理是在Flash Chip中设置了两个block pool,一个是free block pool (空闲池) ,一个是数据池(data block pool )。


当需要改写某个page时(如果写入原有位置,必须先擦除整个block,然后才能写入数据) ,并不写入原有位置(不需要擦除的动作) ,而是从空闲池中取出新的block,将现有的数据和需要改写的数据合并为新的block,一起写入新的空白block,原有的block被标识为invalid状态(等待被擦除回收) ,新的block则进入数据池。


后台任务会定时从数据池中取出无效数据的block,擦除后回收到空闲池中。这样做的好处在于,一是不会反复擦写同一个block,二是写入的速度会比较快(省略了擦除的动作)。


BBM(Bad Block Management)坏块管理

不管WL算法如何高明,在使用中都会碰到一个头痛的问题,那就是坏块,所以一个SSD必须要有坏块管理机制。何谓坏块?一个闪存块里包含有不稳定的地址,不能保证读/写/擦时数据的准确性。



一般来说闪存出厂都包含坏块,不过厂商有个最小有效块值(NvB-minimum number of valid blocks),以Intel的34nm MLC L63B来说,1个die上4,096个块里至少要有3,936个块是好的。从这上面可以知道,虽然出厂的闪存可能有坏块,但是厂商保证在正常的生命周期里,好块数量不会低于3936个块。而且每个die的第一个块地址(00h)在出厂时是必须保证完好的。闪存出厂前都会被执行擦除操作,厂商会在出货前会把坏块标记出来,这样坏块管理软件就能靠监测标记来制作坏块表。由于在使用中会产生坏块,所以SSD的主控在每次写入/擦除/复制等操作后都要检查块的状态以建立新的坏块表。 当坏块表创建后,主控会把坏块表保存在某个好的块里,每次重启后,主控会从那个块里把表调用进缓存(RAM)里。坏块表中定义的地址是不能被访问的,所以当系统想去访问这个块的地址时,FTL会重新把它映射到好的块地址上去。


块的替换: 在闪存的生命周期中,坏块会逐渐增多。闪存设备上有个状态寄存器,它的作用就是检测操作是否正确完成。当进行写入或擦除操作,状态寄存器检测到错误时,即可判定当前的块为坏块。鉴于闪存的写入是以页为单位操作的,操作时可能影响到整个块里其它页的数据,所以当状态寄存器发现写入出现错误时,坏块管理程序就能够用好的块替换这个坏块,重新在新的好块里写入这个数据,并把检测到的坏块里其余的有效页数据全部复制到新的块里去,标记老的块为坏块,更新坏块表里的地址,把原本坏块的地址重新映射到新的好块里。


SSD之全面保修


最后关于SSD磁盘的保修,一般硬盘厂商会提供3年或者5年的有限保修,但有些情况硬盘厂商是不予保修的,如物理损坏,盘体被拆除等,特别是强调SSD硬盘写入次数如果达到设计上限,也就是说保修不涵盖在设备达到其最大写寿命后所发生的问题。但如果您使用DELL Compellent系列的存储就不会为此担心,DELL现在将Compellent系统中的SSD完全纳入整个系统的保修期内,也就是说不管CML里面的SSD硬盘是否达到写入次数限制,DELL都会提供保修,保修期跟随整机,DELL的此保修范围还适用于已购买DELL Compellent存储阵列闪存的现有客户,包含SC4020、SC9000等的SC系列存储。


经过以上的介绍您是不是对SSD的使用越来越有信心,快去购买SSD加速您的应用吧!

做技术的朋友可能有过类似这样的感觉——每天都会遇到新的问题,或者学到新的知识。然而一个人的时间和精力毕竟有限,不是所有的岗位都能做到总是亲力亲为,每人最擅长的领域也各不相同。为了使工程师自己踩过的坑、那些实用的心得体会也能给大家带来帮助,把经验记录和分享出来就显得尤为可贵,这就是我们开设《工程师笔记》专栏的目的。