Read Disturb Errors in MLC NAND Flash Memory: Characterization, Mitigation, and Recovery 论文精读


摘要

 NAND闪存的可靠性会随着内存的缩减和每个单元被编程的比特数的增加而下降。导致这种可靠性降低的一个关键因素是读干扰,其中对一行单元的读会影响同一块不同行中未读flash单元的阈值电压。这种干扰可能会将这些未读单元的阈值电压转换到与最初编程不同的逻辑状态,从而导致读取错误,损害闪存持久性。

 在公开文献中,本文首次对最先进的2Y-nm (即20-24 nm) MLC NAND闪存芯片上的读扰误差进行了实验表征。我们的研究结果表明(1)阈值电压漂移幅度与读操作次数相关,(2)表明程序/擦除周期数和保留时间如何影响读干扰引起的错误率,(3)确定降低通过电压水平可以减少读干扰的影响并延长闪存寿命。特别地,我们发现读干扰误差的概率随着更高的磨损和更高的通过电压水平而增加。
 我们利用这些发现开发了两种新技术。第一种技术通过在每个块基础上动态调整直通电压来减轻读干扰误差。我们的评估使用了真实的工作负载跟踪,显示这种技术平均增加了21%的闪存持久性。第二种技术通过识别和概率性地纠正易受读扰错误影响的单元,从以前不可纠正的闪存错误中恢复。我们的评估表明,这种恢复技术将原始误码率降低了36%。


一、Introduction

 NAND闪存目前作为一种存储设备被广泛使用,由于其容量不断增加,已被纳入从移动设备、客户端计算机到数据中心存储的系统中。闪存容量的增加主要是由进取型晶体管缩放和多层单元(MLC)技术驱动的,其中一个闪存单元可以存储超过一位的数据。然而,随着容量的增加,闪存受到不同类型的电路级噪声的影响,极大地影响了其可靠性。这些噪声包括程序/删除循环噪声[2,3],cell to cell程序干扰噪声[2,5,8],保留噪声[2,4,6,7,23,24]和读取干扰噪声[11,14,24,33]。在所有这些类型的噪声中,读干扰噪声在过去对MLC NAND闪存的研究较少,目前还没有公开文献对读干扰现象进行描述和分析。
 这种忽视的一个原因是,在以前的flash技术中,读扰导致的错误的发生率很低。在单电平单元(SLC)闪光中,读干扰错误只会在平均读取100万次到一个闪存块后才会出现[10,14]。即使引入了MLC flash,第一代MLC设备预计在读取100,000次后会出现读取干扰错误[10,15]。由于进程缩放的结果,一些现代的MLC flash设备在仅20,000次读取后就容易出现读取干扰错误,随着持续缩放,这个数字预计会进一步下降[10,15]。在当前的工作负载中,读操作在flash块之间的不均匀分布会加剧这些读干扰错误的暴露,在这种情况下,某些flash块会经历高度的时间局域性,因此会更快地超过导致读干扰错误的读计数。
 读干扰错误是flash架构的固有结果。在每个闪存单元内,根据单元所代表的逻辑值,将数据存储为单元的阈值电压。在对单元进行读操作期间,将读参考电压加到与该电池相对应的晶体管上。如果这个读参考电压高于电池的阈值电压,晶体管就被打开。在一个闪存块中,来自不同闪存页的多个单元的晶体管被捆绑在一起作为一个单一的位线,它连接到一个单一的输出线。每个位行一次只读取一个单元。为了读取一个单元(即,确定它是打开还是关闭),未被读取单元的晶体管必须保持在上,以允许被读取单元的值传播到输出。这需要晶体管用一个直通电压供电,这个读参考电压保证高于任何存储的阈值电压。虽然这些其他单元没有被读取,但这种高通电压会诱发电隧穿,从而将这些未读单元的阈值电压转移到更高的值,从而在读取操作中干扰相邻页面的单元内容。当我们缩小闪光电池的尺寸时,晶体管的氧化物变得更薄,这反过来增加了隧穿效应。随着每个读操作都有一个增加的隧道效应,它需要更少的读操作到邻近的页面,未读的闪存单元成为干扰(即,转移到更高的阈值电压),并进入一个不同的逻辑状态。
 鉴于闪存读取干扰误差的灵敏度不断提高,本文的目标是(1)开发一个全面的理解读干扰错误SOTA MLC NAND闪存存储,通过执行此类错误的实验表征在现有商业2Y-nm(即20 - 24海里)闪存芯片,和(2)开发机制,可以忍受读干扰错误,利用我们从读干扰误差表征中获得的见解。我们的定量表征的主要发现是:

  • 读干扰对阈值电压分布和原始误码率的影响随着读取相邻页面的次数和一个块上程序/删除周期的次数而增加(第3.2和3.3节)。
  • 由于读干扰,具有较低阈值电压的单元更容易受到错误的影响(第3.2节)。
  • 随着通过电压的降低,(1)每个读操作的读干扰效应变小,但(2)读误差会增加,因为允许读值通过未读单元的能力降低(第3.4、3.5和3.6节)。
  • 如果一个页面最近被写入,在ECC校正能力内的一个显著的裕度是未使用的(即,页面仍然可以容忍更多的错误),这使得页面的通过电压被安全地降低(第3.7节)
     我们利用这些对读干扰效应与通电压(Vpass)关系的研究,设计了两种降低读干扰影响的机制。首先,我们提出了一种名为Vpass Tuning的低成本动态机制,它为每个块找到保持数据正确性的最低通电压。Vpass Tuning通过利用较低的Vpass降低读干扰错误计数(第4节)这一发现来延长闪存持久性。第二,我们提出读干扰恢复(RDR),一种机制,利用不同单元对读干扰的敏感性差异来扩展纠错码(ECC)的有效校正能力。RDR概率性地识别和纠正易受读干扰错误影响的单元(第5节)。

四、缓解:调节通过电压

 在第三节中,我们对读干扰现象做了一些新的观察。我们现在提出了Vpass调优,这是一种新技术,通过调优每个闪存块的直通电压(Vpass),利用这些观察结果来减轻NAND闪存读干扰误差。其关键思想是通过尽可能减少(Vpasss-Vth)来减少读干扰错误的数量,其中Vth是存储在闪存单元中的值。我们的机制用降低Vpass时引入的读错误来抵消读干扰错误,但这些读错误可以使用ECC校正能力中未使用的部分加以校正。

4.1动机

 NAND闪存通常使用ECC来纠正每个页面中一定数量的原始比特错误,如我们在第3.7节中讨论的那样。只要错误总数不超过ECC的纠错能力,就可以纠正错误并成功读取数据。当数据的保留年龄较低时,我们发现数据的保留错误率(以及整体的原始误码率)远低于高保留年龄时的数据保留错误率(见图12),导致未使用的ECC校正能力显著增强。
 图13提供了一个夸张的插图,说明这个未使用的ECC能力如何在保留期间(即刷新间隔)变化。在每个保留期的开始,没有保留错误或读干扰错误,因为数据刚刚恢复。在这些情况下,大量未使用的ECC能力允许我们设计一个积极的读干扰缓解机制,因为我们可以安全地引入可纠正的错误。通过减少读干扰,我们可以减少每个读干扰的影响,从而降低刷新间隔结束时累积的读干扰错误总数。这种读干扰错误计数的减少导致在每个刷新间隔结束时错误计数峰值降低,如图13中黑实线和红色虚线之间的距离所示。由于flash一生是由数据错误的数量(例如,当错误的总数超过了ECC校正功能,flash设备已经达到了其生命的结束),降低错误计数峰值可以通过延长这些峰值耗尽ECC校正能力之前的时间来延长寿命。

4.2 机制概述

 当块的保存时间较低时,通过放宽Vpass来降低flash读干扰误差,从而最大限度地降低读干扰的影响。回想第3节,减少Vpass有两个主要的影响:(1)如果Vpass低于位行上任何单元的Vth,读操作可能会失败;(2)降低Vpass可以显著降低每次读操作的读干扰效应。如果我们在一个块具有较低的保留年龄时(这很有可能不会导致不可纠正的读错误,因为在较低的保留年龄时,有大量未使用的ECC校正能力)大幅度降低Vpass,那么当块达到较高的保留年龄时,累积的读干扰错误就会最小。这使得读取干扰产生不可纠正错误的可能性大大降低,从而导致整体闪存寿命的提高。
 为了减小读干扰的影响,我们建议学习每个块的最小通过电压,这样就可以用ECC正确读取块内的所有数据。我们的学习机制在工作时,每天都被触发。Vpass调优可以在flash控制器中完全实现,它有两个组件:

  • 它首先找出ECC裕度M的大小(即ECC中未使用的校正能力),可以利用它来容忍每个块的额外读错误。为了做到这一点,我们的机制会发现原始误码数最多的页面。
  • 一旦它知道可用的裕度M,我们的机制就会在每个块的基础上校准通过电压Vpass,以找到引入不超过M额外原始误差的Vpass的最低值(第4.4节)。

4.3 识别可用ECC裕度

 为了计算可用的ECC裕度M,我们的机制必须首先大约发现错误计数最高的页面。虽然如果每天都执行,在每个块中找到准确的最高错误数的页面会非常困难,但我们可以在活动时间静态地识别每个块中大约有最多错误数的页面。Flash设备通常表现出两种类型的错误:基于动态因素(如保留,读干扰)的错误和基于静态因素(如过程变化)的错误。在一个块中,根据动态因素,错误的数量可能会有很小的变化,因为块中的所有页面都有相似的保留时间和相似的读干扰计数和P/E周期。此外,现代闪存设备内部随机化它们的数据,以提高耐久性并加密它们的内容[9,18],这导致跨页面存储的数据值相似。因此,缓解机制可以简化为在每个块中识别出由于静态因素(因为这些因素在设备生命周期内保持相对恒定)而出现最多错误的页面,我们称其为预测的最坏情况页面。
 活动完成后,我们通过将伪随机生成的数据编程到块中的每个页面,从而静态地找到预测的最坏情况页面,然后立即读取页面以找到错误计数,因为之前的错误分析工作已经完成了[2]。(每当读取页面时,ECC都会提供错误计数。)对于每个块,我们记录具有最高错误计数的页面的页数。
 虽然在flash设备制造后,我们只能为每个块找到一个预测的最坏情况页面,但我们的机制仍然必须每天计算这个页面中的错误数量,以考虑由于动态因素而不断增加的错误数量。通过对该页执行一次读取操作,并读取ECC提供的错误计数(每天一次),它可以获得错误计数,我们将其定义为最大估计误差(MEE)。
 由于我们只估计了最大错误数,而没有找到准确的最大错误数,并且由于新的保留和读干扰错误在一天内出现,我们在计算中保守地保留了20%的备用ECC校正能力。因此,如果ECC可纠正的最大原始比特错误数为C,我们计算出一个块的可用ECC余量为M = (1-0.2)*C- MEE。

4.4 调节 通过电压

 我们机制的第二部分确定了引入不超过M原始比特错误的最大Vpass减少。一般的Vpass识别过程需要三个步骤:

  • 步骤1:积极地将Vpass减少到Vpass-delta,delta是Vpass可以改变的最小分辨率。
  • 步骤2:将新的Vpass应用到块中的所有单词行。计算0读取页面的数量(即,位行数被错误关闭,如3.6节所述),记为N .如果N<=M(回想一下,M是额外的可用ECC校正裕度),读取错误导致这个Vpass值由ECC可以纠正,所以我们重复步骤1和2来进一步减少Vpass。如果N>M,这意味着我们过于积极地减少了Vpass,所以我们继续步骤3,回滚到一个可接受的Vpass值。
  • 步骤3:将Vpass增加到Vpass+delta,验证引入的读错误能够被ECC纠正(即N<=M),如果验证失败,则重复步骤3,直到读错误减小到可接受的范围。

 在实践中,实现可以大大简化,因为错误速率变化相对较慢(如Sec 3.7)。在为期七天的刷新间隔的过程中,我们的机制必须每天执行两种行动:

  • 动作1:当一个块没有刷新时,我们的机制每天检查一次Vpass是否应该增加,以适应由于动态因素(例如,保留错误,读干扰错误)而缓慢增加的错误数量。
  • 动作2:刷新块时,在上一个刷新间隔内累积的所有保留错误和读干扰错误都会被纠正。此时,我们的机制检查Vpass可以降低多少。

 对于动作1,错误数随时间的增加足够低,我们每天最多只需要增加一次Vpass(见图12)。当块不刷新时,我们跳过步骤1的识别过程,错误的数量并没有减少,且仅执行步骤2和3,比较的错误数量N利用当前Vpass和使用Vpass+delta,因此需要每天不超过2读取/块。

 对于动作2,我们最多需要回滚动作1中在上一个刷新间隔中所增加的所有Vpass,因为静态因素导致的错误数量不能减少。由于动作1在6天内每天执行,我们只需要将Vpass从其当前值降低至多6次,这就要求我们执行步骤1和2的次数不超过6次,然后可能会执行步骤3一次。在最坏的情况下,只需要7次读取。

 我们的机制对每个包含有效数据的块重复Vpass识别过程,以学习我们可以使用的最小通过电压。这使得它能够适应不同区块的最大阈值电压的变化,这是由许多因素导致的,如工艺变化和保留年龄的变化。它还每天重复整个Vpass学习过程,以适应保留损失导致的阈值电压变化[5,8]。因此,闪存驱动器中所有块的直通电压可以连续微调,以减少读取干扰,从而提高闪存的整体寿命。

  • 回退机制。在一些极端的情况下,在调优之间积累的额外错误超过了我们未使用的错误纠正能力的20%,如果我们继续使用主动调优的Vpass,错误将无法纠正。如果出现这种情况,我们提供了一种回退机制,它只使用默认的直通电压(Vpass = 512)来正确读取页面,因为Vpass调优不会破坏存储的数据。

总结

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值