SSD数据完整性技术介绍

原创内容,转载请注明:  [http://www.ssdfans.com]  谢谢!

闪存(Flash)的一个特性就是,随着闪存的使用以及数据存储时间的变长,存储在闪存里面的数据容易发生比特翻转,出现随机性错误。这个问题随着闪存制程的变小越发严重。因此,使用闪存作为存储介质的SSD,需要采用一些数据完整性的技术来确保用户数据可靠不丢失。

  • ECC纠错

SSD控制器上面都有ECC纠错模块,有些闪存内部也集成了ECC纠错模块。常用闪存ECC纠错算法有BCH(Bose,Ray-Chaudhuri与Hocquenghem三位大神名字首字母)和LDPC(Low Density Parity Check Code)等。目前市面上很多SSD控制器上采用的是BCH,但LDPC正成为趋势 。(读者可自行百度两者优劣势)

用户数据最终都是写在闪存的页(Page)上面,闪存的页空间除了用户空间,还有额外的预留空间,这部分空间可以用来写ECC校验数据。用户数据大小固定,需要更强的纠错能力,就需要更多的ECC空间。因此,纠错强度受限于闪存页的预留空间。越多的预留空间就能提供越强的ECC纠错能力。

目前绝大多数SSD都采用静态ECC纠错方案,即ECC纠错单元(用户数据)和ECC校验数据大小在整个SSD生命周期都是固定的,也就是说纠错能力始终保持不变。由于闪存在使用初期,内部发生比特翻转的概率小,而随着闪存的使用,出错概率逐渐变大。因此,有些SSD开始采用动态ECC纠错方案:开始使用更少的纠错码 ,这样在闪存的页里面可以存储更多的用户数据;随着SSD的使用,纠错能力需要加强,用户数据在闪存页里面占的比例变小,纠错码所占比例变大。动态ECC纠错方案就是随着SSD的使用,SSD动态调整其ECC纠错能力。动态ECC纠错有什么好处?如果开始使用更少的ECC校验数据,那么每个页能写入的用户数据就更多,相当于SSD拥有更多的OP (Over Provisioning) ,减小了写放大;同时,在数据从控制器写入或者读取闪存的通道上,用户数据越多,ECC校验数据越小,带宽利用率高。

其实,动态ECC不仅体现在随着时间的推移ECC纠错能力会发生变化,而且体现在SSD的闪存位置上每个Die甚至每个Page有不同的纠错能力。在SSD闪存阵列里,有些Die可能质量好点,有些Die可能质量差点,好的Die可以用更少的ECC纠错代码,相反,差的Die就需要更强的ECC纠错;对MLC来说,Lower Page相对Upper Page来说更稳定一些,因此可以使用弱一些的ECC保护,相反,Upper Page则需要更强的ECC保护.

  • RAID数据恢复

当闪存中数据比特发生反转的个数超出ECC纠错能力范围后,ECC纠错就无能为力了。在一些企业级,以及越来越多的客户级SSD上,都在使用RAID纠错技术。类似磁盘阵列,SSD内部本质就是一个闪存阵列,所以可以借鉴磁盘阵列技术来确保数据的完整性。SSD的RAID一般采用RAID5:

 

以上图为例,某个SSD的闪存阵列由5个Die构成,Die0-3存储的是用户数据,Die P则存储校验数据,为Die0,Die1,Die2和Die3数据之异或和。假设Die 1上出现ECC不可纠的错误,那么可以通过读取Die0,Die2,Die3和Die P对应位置上的数据,然后做个异或和,就能恢复出Die 1上的数据。

采用RAID5的SSD,它只能恢复单个ECC不可纠的数据,如果出现多个ECC不可纠的错误,它也无能为力。

由于采用了冗余纠错技术,它需要额外的空间来存储冗余数据(校验数据),因此必然会牺牲用户空间,正应了一句话:天下没有不要钱的午餐!

  • 重读(Read Retry)

闪存中的存储单元,由于受内部或者外部环境的影响,导致单元内部电压会发生平移,如下图所示:

上图以MLC为例,每个存储单元存储两个比特的数据,一共有四种状态。当四个状态的电压分布发生平移后,如果还是采用之前的参考电压去读取的话,就可能会读取数据失败。使用重读技术后,我们可以不断改变参考电压,来尝试找到可以读出数据的电压点,直到正确读出数据。理论上,只要这四个状态的电压分布没有发生重叠,就可以通过重读恢复数据。

  • 扫描重写技术

这是一种防祸于未然的技术。SSD固件周期性的对写入到闪存的数据进行读取,获得比特翻转的信息,当某些数据内部发生比特翻转的个数达到一定阈值后,这些数据会被重写,从而能减少ECC不可纠错误。

  • 数据随机化

闪存是通过控制栅施加电压来存储数据,对某些写入的数据样式很敏感,不断的输入全0或者全1,很容易导致闪存内部电量不均衡,从而造成信号抗干扰性下降,导致这些数据在闪存中可靠性变差。因此,SSD控制器或者闪存内部都有数据随机化模块,它对用户写入的数据加入扰码,使最终写入闪存的数据0和1基本保持均衡,减小数据发生比特翻转的概率。

  • 磨损平衡

闪存都有擦除次数限制。闪存会随着擦除次数的增多而变得越来越不可靠。因此,SSD应该保持闪存中每个块(Block)写均衡,不要抓住几个块拼命写,然后把它寿命耗尽。关于磨损平衡,可参看《SSD基本工作原理

分类目录 SSD, 技术文章.
扫一扫二维码或者微信搜索公众号ssdfans关注(添加朋友->点最下面的公众号->搜索ssdfans),可以经常看到SSD技术和产业的文章(SSD Fans只推送干货)。
ssdfans微信群介绍
技术讨论群 覆盖2000多位中国和世界华人圈SSD以及存储技术精英
固件、软件、测试群 固件、软件和测试技术讨论
异构计算群 讨论人工智能和GPU、FPGA、CPU异构计算
ASIC-FPGA群 芯片和FPGA硬件技术讨论群
闪存器件群 NAND、3D XPoint等固态存储介质技术讨论
企业级 企业级SSD、企业级存储
销售群 全国SSD供应商都在这里,砍砍价,会比某东便宜20%
工作求职群 存储行业换工作,发招聘,要关注各大公司招聘信息,赶快来
高管群 各大SSD相关存储公司高管和创始人、投资人

想加入这些群,请微信扫描下面二维码,或搜索nanoarchplus,加阿呆为微信好友,介绍你的昵称-单位-职务,注明群名,拉你进群。SSD业界需要什么帮助,也可以找阿呆聊。