闪存数据保存期和完整性技术

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

爱情的期限有多久?对很多人来说,最希望的是百年好合。

悟空说:“曾经有一段真挚的感情摆在我的面前,我没有珍惜,直到失去后才后悔莫及,人世间的痛苦莫过于此,如果再给我一次机会的话,我会对那个女孩说我爱你,如果非要在这段感情加上一个期限,我希望是一万年。”

一万年很久吗?对于仙人来说,一万年太短。最近热播的电视剧《三生三世,十里桃花》里面,墨渊上神对白浅的单相思历经三生三世,总共超过7万年。

看完别人的感情期限,我们再来聊聊现实一点的:存储的数据能保存多久?

图是现藏于甘肃省博物馆的西汉天水放马滩地图,1986年甘肃天水放马滩5号汉墓出土,其用纸是目前世界上最早的纸。根据考古专家的断定,这是一张为西汉文帝或景帝(公元前179年—前143年)时期的纸质地图。到现在已经经过了两千多年,变的残破不全。

image

图1-1 世界上最早的纸

在刘慈欣的小说《三体》中提到,即使是刻在岩石上的巨型文字,经过几千万年的沧海桑田,也会找不到踪迹。

所以,任何存储技术,存储的数据都不能永远保存,有个保持时间。闪存中,数据保存时间的问题叫做Data Retention。到了期限,数据就会出错,标志就是从闪存读出来的数据无法用ECC纠错成功。我们知道闪存一般有以下错误:

l 电气问题:比如虚焊或者芯片故障,导致正常命令无法执行或者数据错误率异常高。这种都在闪存或固态硬盘出厂测试时被发现。

l 读、写、擦失败:基本命令执行失败,通过状态位可以读到结果。这些在芯片使用过程中也有可能发生,但是概率非常小。

l ECC纠错失败:其实就是数据错误率太高,超过了纠错算法的纠错能力。Data Retention是其中一个元凶。

闪存存储的机理是通过量子隧道效应,电子跃迁到浮栅层并留在那里。随着时间的流逝,电子还是有一定概率离开浮栅层,回到沟道里面,离开的电子多了有可能导致写过的单元读出来结果跟擦除过的一样,数据就出错了。Data Retention和浮栅层下面的氧化层厚度有关,毕竟,氧化层越厚,电子离开的概率越小。有研究说氧化层厚度如果是4.5nm,那么理论上数据可以保存10年。

SSDFans微信群里有一位大牛群友蔡宇(Yu Cai)博士,他曾经在Carnegie Mellon University读博士,专门研究闪存纠错,后来去LSI做这方面研发。阿呆这次根据他的一篇论文《Data Retention in MLC NAND Flash Memory:Characterization, Optimization, and Recovery》来介绍他对闪存数据保存的分析。

image

图1-2 浮栅晶体管a.本征电场 b.TAT效应

图是一个闪存基本单元浮栅晶体管的截面图。最上面是控制层,中间是浮栅层,浮栅上面是多晶硅氧化层,下面是隧道氧化层。控制电压很高的时候,会产生量子隧穿效应,电子从衬底Substrate出发,穿过隧道氧化层,进入浮栅保存起来,就完成了写操作,充电了。反之,在控制层加很强的负电压,电子就从浮栅量子隧穿,回到衬底,这个操作叫做擦除。不过,控制层不加电压的时候,在氧化层依然有一个电场产生,叫做本征电场,它是由浮栅里面的电子产生的。在这个电场的作用下,电子会从浮栅慢慢泄露,泄漏的多了,数据就会发生错误。从写入操作,到电子慢慢泄漏,直到数据出错,这个期限叫做数据保存期,在SLC时代,这个时间很久,有好几年,但是到了TLC时代,就不到一年,有的只有几个月。

那为什么闪存用的越久,数据保存越短呢?这要怪一个效应:Trap-assisted tunneling (TAT)。看看图3-55中的b,我们知道隧道氧化层是绝缘的,但是随着闪存的使用,历经很多次的擦写,氧化层和浮栅层的爱情终于要走到终点了,因为经过这么年风风雨雨,氧化层老了,有不少通过它的电荷被滞留下来,绝缘体有了导电性。这下,电荷从浮栅跑的就更快了。所以,闪存擦写次数越多,数据保存时间就越短。到最后额定擦写次数快到的时候,比如3000次,刚写的数据很容易出错。

不过,氧化层并不是总是在截留电荷,有时候它拦截的电荷也会离开,叫做Charge de-trapping。只不过离开的既有正电荷,也有负电荷,所以对阈值电压的影响是双向的。

那么,怎么解决Data Retention的问题?总不能让用户的数据放个几个月或者几年就丢了吧。一般固态硬盘会采用Read Scrub技术,或者叫数据巡检、扫描重写技术等等不同的称呼。

如果你对存储技术有所了解,那么当你看到Scrub这个词的时候,首先肯定想到的是Sun公司开发的大名鼎鼎的ZFS(Zettabyte File System)文件系统。ZFS的设计者发现,有很多用户的数据长期没有读过,更别说被重写了。即使是数据读取频繁的数据库应用,也存在长期不被访问的数据,它们寂寞的躲在安静的角落,长期无人问津。但是,不管什么类型的磁盘,总是会有概率发生比特翻转,导致数据出错,等你需要这份数据的时候,错误有可能比较严重,根本恢复不出原样了。在ZFS文件系统中,每个数据块都有自己的校验码Checksum,只要被读了,就可以通过Checksum发现数据是否出错了,提前对出错的数据块进行纠错。所以,ZFS提供了一个功能叫Scrub,对文件系统进行扫描,提前发现那些出错的数据,并纠错重写。

固态硬盘的Read Scrub技术跟ZFS类似,在固态硬盘不忙的时候,按照一定的算法,扫描全盘,如果发现某个闪存页翻转比特数量超过一定阈值,就重写数据到新的地方。这样做的好处是避免数据放太久,导致比特翻转数量超过ECC算法的纠错能力,从而能减少ECC不可纠错误。

闪存数据完整性

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

l ECC纠错

l RAID数据恢复

l 重读(Read Retry)

l 扫描重写技术(Read Scrub)

l 数据随机化

下面来详细解释每一种技术实现方法。

查看更多内容,扫描下图二维码,阅读原著和以上大图。

_wechat_thumb2_thumb_thumb_thumb_thumb_thumb_thumb_thumb_thumb_thumb_thumb_thumb

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

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