闪存问题之Read Disturb

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

闪存存在几个问题,影响着数据可靠性。

首先是擦除次数,闪存擦除次数的增多,会使隔离浮栅极电子的氧化层磨损,绝缘性能变差,最后导致数据出错。具体可参看《你的SSD可以用100年,你造吗?》。

然后是data retention问题,就是随着时间的流逝,存储在闪存中的数据会消失,原因是浮栅极里面的电子跑出来了。电子跑出来的速度是跟擦除次数成正比的,也就是,闪存擦写次数越多,电子跑得越快,也就是数据消失得越快。详情还得看上面文章。

还有就是program disturb和read disturb,顾名思义,就是读写闪存的时候,会影响数据。与data retention不同的是,读写干扰导致的是电子进入浮栅极,而不是浮栅极里面的电子跑出来。不管怎样,浮栅极里面电荷的异常变化,就意味着数据的丢失。读写干扰的影响,也是跟闪存擦写次数息息相关的,你想,擦写次数越多,绝缘性能越差,电子当然也就更容易进入浮栅极。

如题,今天我们先讲读干扰,看看什么是Read Disturb,以及我们有什么办法来对付这种干扰。

记得几年前我们碰到一个问题,就是有客户反映,他们在使用我们SSD的时候,发现Performance过段时间就有一个比较大的drop。后来,经过我们工程师的努力,发现罪魁祸首就是Read Disturb。最后,聪明的工程师完美的解决了这个问题。这个工程师就是Ziv,哈哈。别问我Ziv是谁,我不会告诉你他现在美光。

Read Disturb为什么会导致性能下降?后面再解释。

先看看什么是Read Disturb。

还得先从闪存基本原理开始。

还是这张图,基本存储单元结构图,浮栅极被上下绝缘层(黄色标示)包裹,电荷就存储在里面。牢记这张图,这是闪存的根。

这样的单元,存储着若干个比特的数据,具体取件于闪存类型:SLC一个单元一个比特,MLC一个单元两个比特,TLC一个单元三个比特。一个闪存,就是由很多很多这样的存储单元构成。它不是杂乱无章的摆放,而是按一定规律组织起来的,如下图所示。

闪存由Block组成,是擦除的基本单元。一个Block包含若干个Page,上图以256个Page为例。一个Wordline(上图黄色所示)对应着一个Page或几个Page,取决于SLC, MLC和TLC:对SLC来说,一个WordLine对应一个Page;MLC则对应2个Page,这两个Page是一对:Lower Page 和Upper Page;TLC对应3个Page。(关于上述论断,是按单个Plane来说的,而且是2D闪存的)一个Page有多大,那么WordLine上面就有多少个存储单元(Cell),即有多少个Bitline。上图示例有71488个bitline,表明该闪存Page大小是71488/8 = 8936 bytes。

接下来的讨论,我们以MLC为例。

一个MLC,每个存储单元存储两个比特的数据,一共四个状态。通过往存储单元的浮栅极内注入不同电荷数,来区分四个不同状态。如下图所示:

我们知道,要使一个晶体管导通,在控制极必须加一个大于晶体管阈值电压的控制电压。对浮栅极晶体管来说,往浮栅极里面注入不同数量的电子,将改变晶体管的阈值电压。由于不同的状态有不同的阈值电压,我们可以通过在控制极加不同的参考电压来判断当前存储单元数据。以上图为例,低比特数据代表lower Page数据,高比特数据代表Upper Page数据。 如果我们要读Upper Page数据,要区分0还是1,只需在控制极加个参考电压V2:如果晶体管导通,说明是1 (因为不管11还是10状态,其阈值电压都小于V2);否则就是0 (因为不管01还是00,阈值电压都大于V2)。如果要读取Lower Page数据,要区分0和1的话,就稍微复杂了:我们首先得在控制极加个参考电压V1,如果导通,说明数据是1(因为11状态阈值电压小于V1);如果截止,没有办法说明是0和1,因为10,01,00三个状态阈值电压都比V1大,这个时候我们需要改变控制极的参考电压为V2,再看晶体管的导通状态,如果导通,说明数据是0 (10状态阈值电压小于V2),如果晶体管截止,还是无法判断数据是0和1,因为01和00状态阈值电压都大于V2。这个时候,我们需要再次改变控制极的电压为V3,这个时候,导通说明是1,截止说明数据是0。从中我们看出,读lower page需要尝试多次参考电压,才能获得最后的数据,而读upper page时,只需一次,所以对MLC来说,读lower page和读upper page的时间是有所差异的。

在上图中,如果我们把00和01状态调换一下,如下图所示:

如果我们还是读lower Page数据。首先,我们在控制极加个参考电压V1,如果晶体管导通,说明数据是1;如果截止,这个时候我们在控制极直接加参考电压V3,如果导通,说明是0,因为不管10还是00,低比特都是0;如果截止,就是1。我们最多经过两次电压尝试就把数据区分出来了,比前面少了一次电压尝试。有些闪存厂家采取前面那种编码方式,而有些闪存厂家采取后面那种编码方式。所以,不同商家的闪存特性存在差异。

注意到上面那个Vpass了吗?那是导通电压,就是说,不管你当前浮栅极里面电荷多少,阈值电压多少,在控制极加上Vpass,该晶体管总是导通的。

有了这么多铺垫,我们来看一下我们是如何读取一个page数据的。

如上图所示,先看左边(a)部分,如果我们要读取一个Block当中的某个Page,需要在其它所有Wordline控制极上加一个Vpass电压,这样保证了其它晶体管都是导通的;对被读取的Page,需要在其所在Wordline的控制极上加参考电压Vref,可能加一次参考电压就能把数据读出来,也可能需要几次,具体做法如前面描述。

再看右半部分(b)。读操作时,衬底加电压是0,读取的page,控制极上的电压是Vref,而对其他Page,控制极上加的电压是Vpass。问题来了,由于其他Page上加了一个Vpass,相对来说是一个比较大的电压,这样就会在浮栅极和衬底形成一个较强的电场,可能就把一些电子吸入浮栅极,有点轻微Program的意思。随着该Block上Page数据读的次数越来越多,无辜的page(没有被读到的)中的浮栅极电子进入越来越多,导致里面数据状态发生变化,也就意味着数据出错。

这就是Read Disturb。同一个block上page读,自己没事,导致其他没有被读的page数据出错。在此,我代表ssdfans全体成员,强烈谴责这种损人利己的行为!!

Read Disturb会导致浮栅极进入电子,跟Data Retention浮栅极电子流失不同。由于有额外的电子进入,会导致晶体管阈值电压右移(Data Retention问题导致阈值电压左移),如下图所示:

由于晶体管阈值电压偷偷的发生了变化(变大了),闪存内部逻辑如果还是按照之前的参考电压加在控制极上,然后去判断数据的话,肯定会发生误判,也就是读到错误的数据。

阈值电压右移的速度,也就是Read Disturb影响数据的程度,一方面与你读该Block上数据的次数有关,读的越多,右移越多,影响越大,另一方,还跟你block的擦除次数有关,擦写次数越多,绝缘效果越差,电子进入浮栅极就越容易,read Disturb的影响也就越大。

那么,闪存使用者如何对付Read Disturb呢?

一般做法就是记录每个Block读的次数,赶在这个数值达到阈值(闪存厂家提供)之前,把block上所有的数据刷新一遍(读出来,擦除,然后在写回),或者把数据搬到别的地方。回到开头那个问题,Read Disturb为什么会导致SSD性能下降?就是因为一个Block上的数据读的次数太多了,固件需要赶在UECC出现之前,把整个Block数据刷新或者搬移,占用底层带宽,导致Host读写性能下降。

还有人研究发现,减小Vpass可以缓解Read Disturb。因为Vpass变小,电场减弱,吸入电子的能力减弱,能缓解read Disturb影响。一方面,现在闪存厂商都没有开放调Vpass电压的接口给用户;另一方面,过低的Vpass会导致读失败。该方法只能缓解,不能从源头上杜绝Read Disturb的影响。

我的建议是,能减少闪存读的次数就尽量减少读的次数,比如尽量把数据放缓存(SSD或者host缓存),但不管怎样,都要实现数据刷新或者数据转移机制,因为,你的闪存迟早会碰到Read Disturb问题。

抛砖引玉,在此也希望同行分享一下你们是如何对付Read Disturb的。

 

参考文章flash-read-disturb-errors_dsn15

 

 

 


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

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