三生三世,闪存数据能保持多久?

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

 

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

 

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

 

 

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

 

 

看完别人的感情期限,我们再来聊聊现实一点的:闪存的数据能保存多久?这个保存期限叫做Data Retention,数据出错的标志就是从NAND Flash读出来的数据无法用ECC纠错成功。我们知道NAND Flash一般有以下错误:

  • 电气问题:比如虚焊或者芯片故障,导致正常命令无法执行或者数据错误率异常高。这种都在NAND或SSD出厂测试时被发现。
  • Read/Program/Erase失败:基本命令执行失败,通过status可以读到状态。这些在芯片使用过程中也有可能发生,但是概率非常小。
  • ECC纠错失败:其实就是数据错误率太高,超过了纠错算法的纠错能力。这种错是Data Retention错误,在所有错误中发生概率最高。

 

NAND数据保存出错的原因是随着时间流逝产生的电荷泄露。有一种防止数据保存出错的技术叫做动态刷新,就是定期对数据进行读扫描,如果发现错误率较高,但在纠错能力以内,就纠正错误,把数据写到新的地方。不过这样做有三个缺点,一个是增加写放大,缩短了SSD寿命,另一个是后台读写影响了用户使用的性能。另外对功耗要求高的消费级SSD要求在用户没有读写时,SSD就要休眠,所以也没机会扫描数据了,如果强行扫描就增加了功耗。

 

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

 

 

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

 

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

 

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

 

那阈值电压是个什么东东呢?通过控制电压的调整,在Source和Drain之间会产生一条导电沟道,能导通的最小控制电压叫做阈值电压Vth。而阈值电压跟浮栅层电荷数量有关,电荷越多,阈值电压越大。MLC就是根据浮栅里面电子的多少,把阈值电压分为4个状态,来表示2bit数据。第一个状态就是啥都没写,如下图是后三种状态。这是蔡大侠做的实验,把NAND擦了8000次,然后写数据,放了四十天。为什么要擦8000次呢,因为这时候NAND比较脆弱了,数据保存错误表现得很明显。分别在不同时间段去查看阈值电压的分布(要想知道阈值电压的测量方法请加nanoarch为好友,加ssdfans微信群请教蔡大侠,或者去翻他的论文)。

 

 

通过这张图,蔡大侠发现了几个秘密:

1. 随着时间流逝,P2和P3的电压慢慢变小。下面这张图是三个状态平均电压的变化曲线,很明显,P2和P3一直在下降。这是为什么?因为P2和P3的时候,浮栅层电子比较多,导致本征电压比较大,电荷流失快。

 

2. 随着时间流逝,三个状态的峰变宽了。下面的图是阈值电压的方差,方差越大,意味着变化越大,可以看出,方差一直在增长。这有两个原因,一个之前说的,氧化层拦截的电荷会有可能离开,有正有负,阈值电压也受影响;其二,由于工艺原因,每个Flash浮栅晶体管都是不一样的,尽管浮栅层电子一直在流失,有的流失快,有的慢,导致大家的电压慢慢分开。

3. 阈值电压高的状态电压偏移的更快。可以理解,阈值电压越高,浮栅层电子越多,本征电压越大,流失电子越快。

 

我们来看看MLC的读流程。首先我们来问一个问题:为什么NAND写数据要随机化?因为随机化之后,fig.2 中的四个状态是相同概率的,所以相邻两个状态的电压分布可以充分隔离。反之,可以想象分布多的状态比较宽,少的比较窄。

 

MLC一个晶体管存储了两个bit,分别是低位的LSB和高位的MSB,读的时候,先以P1和P2中间为参考电压,获得LSB数据,接着根据LSB结果,以P0和P1或P2和P3中间为参考电压,获得MSB数据。由于电压分布随时间发生偏移,所以如下图,最佳参考电压也慢慢下降。而且P2和P3的中间电压比P1和P2的中间电压下降快。

 

所以在NAND使用过程中,如果一直以一套电压标准读所有数据,就有可能出错。如下图,数据放了28天后有一个自己最佳参考电压,但是分别拿其他时间的最佳电压去读28天的数据,相隔越远,数据错误率RBER(Raw Bit Error Rate)越高。最后是用28天数据最佳电压都的结果,错误率最低,和0天的相比,差了4.6倍。

 

 

这就是NAND厂商提供Read Retry机制的原因,读出错之后通过换一套电压去重读,是有可能恢复数据的。通过重读的机制,可以延长NAND Flash的使用寿命。如下图,假设所有的数据写完放了7天后读,在不同的擦写次数P/E Cycle时分别用0-7天的最佳参考电压去读,可以看出,用7天的最佳参考电压读可以最晚达到ECC纠错能力的极限。相比最差的0天参考电压,可以延长1万次!

 

 

那么,不同Page和Block的数据保存期一样吗?根据蔡大侠的研究,同一个Block里面的Page有着同样的数据保存期,差别基本在一天以内。而不同Block的数据保存期差别很大。所以蔡大侠提出了一个算法:不用传统的Read Retry,而是每天和每次上电对每个Block的最后一个Page进行采样,获得最佳参考电压。之后如果发生读错误,就从这个最佳参考电压开始重读,之后电压依次降低。这样减少了重读的次数,提升纠错速度。

 

另外,这种方法还能提升ECC纠错速度。为什么?且听下回分解。

 

参考:

Yu Cai等,Data Retention in MLC NAND Flash Memory: Characterization, Optimization, and Recovery

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

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