曹馥源,杨 柳,刘 杨,霍宗亮
(1.中国科学院微电子研究所,北京 100029;2.中国科学院大学,北京 100049)
近年来,NAND闪存以其高密度、高传输速度、低功耗等优点被广泛应用于各类信息存储设备中。NAND闪存制造工艺节点的降低进一步提高了存储密度,降低了单位比特成本。然而,更高的存储密度同时也带来了更加严重的可靠性问题即不断缩小的存储单元所能储存的电子数量也越来越少,闪存单元内获得或者流失部分电子都将引起闪存单元阈值电压的改变,进而改变闪存单元内的数据储存状态,导致数据出错。NAND闪存中存在的错误是由多种效应引起的噪声导致,主要包括编程/擦除噪声、数据保留噪声、读干扰和编程干扰噪声。其中,读干扰和数据保留噪声所引发的可靠性问题在NAND闪存中广泛存在,是NAND闪存错误的主要来源。随着三维堆叠闪存技术的出现和多值存储技术的进一步发展,提升NAND闪存的可靠性已成为国内外科研院所和产业界研究的热点,也成为提升基于NAND闪存的存储产品核心竞争力的关键。改善工艺、器件,优化电路设计和采用可靠性算法是常用的几种提高NAND闪存可靠性的方法。然而,对硬件结构和制造工艺进行调整所需的成本都很高。因此,通过设计更加先进的算法来提升NAND闪存的可靠性就成为一个重要的研究方向。
根据存储单元阈值电压偏移方向,可将NAND闪存中的错误分为左偏和右偏两种类型。两类错误示意图如图1所示。
图1 NAND闪存中的两类错误
随着数据保留时间的增加,NAND闪存单元内存储的电荷会逐渐泄露,导致存储单元阈值电压降低,整体阈值电压分布向左偏移,如图1a)所示。由于读电压通常是固定值,因此读出的数据会发生部分比特位反转,引起数据出错。随着编程/擦除循环次数的增加,NAND闪存保持电荷能力会变得越来越差,数据保留效应所引发的可靠性问题将变得更加严重。
NAND闪存编程干扰和读干扰原理如图2所示。当对NAND闪存页编程时,需在编程的字线上施加编程电压,不需要编程的单元处于图2所示的pass模式,施加一个较小的电压。由于电压所产生的弱编程效应以及相邻字线单元间存在的寄生电容耦合效应,在对NAND闪存字线进行编程时,其他未被编程字线的闪存的阈值电压也随之升高,整体阈值电压分布向右偏移,如图1b)所示,最终引发编程干扰错误。
图2 NAND闪存中的干扰原理
读干扰与编程干扰类似,在进行读操作时,读电压()施加在选定的字线上,其他字线施加一个较小的电压,引发的弱编程效应使得闪存块内未被读取的闪存单元阈值电压升高。当多次读取同一个单元而不进行擦除操作时,会发生读干扰错误。相比于编程干扰,读干扰的较小,每次读操作所产生的阈值偏移比较微弱。然而,NAND闪存单元在擦除前只能进行一次编程,读操作则不受限制。一个单元的读操作次数远大于编程操作的次数,使得读干扰现象在实际应用中更为普遍,已成为影响NAND闪存可靠性的重要因素。
通常采用定期刷新机制来防止数据保留错误的累积,具体方法是:定期将长时间未访问的闪存块中的数据读出,纠错后重新将正确的数据写入新的闪存块中。然而,定期刷新机制会产生额外的编程和擦除操作,从而加速SSD的损耗。因此,Tanakamaru等人提出了一种基于读电压脉冲的数据恢复技术(Data Retention-error Recovery Pulse,DRRP),对发生数据保留错误的单元反复施加读电压脉冲,从而补偿数据保留损失的电荷,在经过1 000次的读电压脉冲后,误码率下降了55%。由于读电压脉冲较低,导致每次注入的电荷数量较少,因此数据恢复需要较多的读脉冲操作次数。
为了提高数据恢复的效率,Ma等人提出使用更高的字线编程干扰电压脉冲(Word-line Program Disturbance,WPD)来对发生数据保留错误的单元进行数据恢复,经过100次编程电压脉冲后,误码率下降了75%。然而,应用DRRP和WPD方法都需要较多的冗余操作,因此这两种方案仅在ECC纠错失败时执行。由于NAND厂商只对外开放读、编程和擦除等基本操作命令,用户无法对单元进行多次编程以及自行调整NAND的操作电压,导致DRRP和WPD方法应用门槛较高。
Ha等人通过对金融、搜索引擎、数据库等以读操作为主的工作负载进行分析研究,发现读操作的逻辑块地址(Logical Block Address,LBA)有着很强的空间集中性,即大量的读操作集中在少数的LBA范围内,这些不断被读取的数据被称为读热数据。在NAND闪存中,这种针对一个闪存页的大量连续读操作将导致读干扰错误的积累。对于读干扰导致的数据误码增加的问题,Kim提出一种与定期刷新类似的方式来缓解读干扰错误,称为读回收。读回收的关键思想是:为每个闪存块设置一个最大读次数,当读次数达到预先设定的阈值后,读回收机制将把该块内的数据重新编程到新块中去。与针对数据保留错误的定期刷新机制类似,读回收也会引发大量的额外读写操作,进而影响SSD的性能。
本文根据编程干扰、读干扰与数据保留效应对NAND闪存阈值电压产生相反方向的偏移现象,结合3D NAND闪存结构特点,提出一种基于干扰补偿的错误缓解算法。该算法可同时缓解读干扰导致的阈值电压左偏和数据保留所引发阈值电压右偏造成的两类数据出错,且仅需要极小的额外读写开销,易于实现。
3D NAND闪存的垂直沟道结构如图3a)所示,一个闪存块由垂直方向的不同层组成,每层包含多条字线,一根字线上所连接的所有单元构成一个闪存页。
图3 3D NAND闪存阵列示意图
由第1节介绍的编程干扰和读干扰原理可知,在对3D NAND闪存某一层的闪存页进行编程操作和读操作时,会对其他层的字线施加一个电压,产生使阈值电压向右偏移的干扰效应,引发干扰错误。
基于3D NAND闪存的多层结构和数据干扰原理,将传统的闪存块以层为单位,分为普通数据存储层和读热数据预留层。如图3b)所示,在3D NAND闪存中预留一层的闪存页用于单独存放读热数据,称为读热数据预留层。通过识别读热数据并定期将其迁移到“冷闪存块”(即长时间未被访问的闪存块)的读热数据预留层中,所产生的编程操作以及大量的读操作可以补充泄露的电荷,以降低NAND闪存的数据保留错误,同时也阻止了读干扰错误的累积。
干扰补偿算法流程如图4所示,在存入数据时,首先对普通数据存储层进行编程操作,通过比较每个闪存页的读次数,可以区分出读热页和读冷页。然而,如果准确记录每个闪存页的所有读操作,将占用相当大的内存空间。为了节约内存开销,根据读热数据LBA分布的空间集中性,可使用一个比特饱和计数器,通过部分记录每个闪存页的读次数就能区分冷热数据,当该闪存页被读请求访问时,计数器值加1。当闪存页被写请求访问时,读计数器置0。闪存块每经历×2次读操作就对块内所有闪存页的读计数器进行检测,若读计数器达到饱和,该闪存页被标记为读热页,然后将块内所有读热页重新编程到冷闪存块内的读热数据预留层。最终修改地址映射表,将原闪存页标记为无效。
图4 干扰补偿算法流程
干扰补偿前后的阈值电压分布示意图如图5所示。在初始阶段,NAND闪存的误码率较低,阈值电压分布如图5a)所示。经一段时间的数据保留后,如图5b)所示,NAND闪存单元的阈值电压分布向左偏移,数据保留错误增多。经过编程干扰和读干扰的电荷补偿,阈值电压将向右移动,如图5c)所示,此时数据保留所导致的错误可被部分缓解。
图5 干扰补偿前后的阈值电压分布示意图
采用开源的固态盘模拟器3Dsim对本文提出的干扰补偿算法进行评估。
3Dsim支持现有3D NAND闪存的主要操作指令,通过运行从实际应用场景中收集的负载踪迹文件(trace),以模拟3D NAND闪存的使用情况。实验采用的芯片是长江存储Gen2256Gb NAND颗粒,该闪存为64层的TLC闪存,每层包含18个闪存页,每个闪存页大小为16 KB。根据实际芯片的参数,在3Dsim中配置SSD仿真参数,具体信息如表1所示。
表1 SSD参数配置信息
为了对本算法的读热数据迁移效果进行评估,本实验选取4种常用的读密集型负载文件,其参数如表2所示。
表2 负载文件信息
实验对比了应用干扰补偿算法和未应用补偿算法两种情况下,单个闪存块最大读次数和热页迁移至冷块后所产生的平均读次数、最大读次数,前者反映了算法对读干扰噪声的抑制作用,后者反映了可用于恢复冷块中数据保留错误的读干扰脉冲次数。
图6为单个闪存块最大读次数的变化情况,通过定期对读热数据进行迁移,4种负载的块最大读次数分别下降了86.6%,87.5%,94.6%和96.8%,有效阻止了读干扰错误的累积。
图6 不同负载下单个闪存块最大读次数
基于4种负载文件仿真,记录了迁移的读热页数量,以及读热页迁移至冷块后所产生的平均读次数和最大读次数,如表3所示。
表3 读热数据迁移结果
根据表3的仿真结果,在实际芯片上测试了本文提出的干扰补偿算法和DRRP技术对数据保留错误的恢复效果。本实验的数据保留通过高温烘烤加速来实现,根据Arrhenius定律计算得出,在125℃烘烤1 h近似等于数据在25℃的常温下存储1年。在编程擦除4 000次、1年的数据保留时间的闪存块中,首先对前63层闪存页进行编程,并记录误码数;然后经过高温烘烤加速后,对第64层闪存页进行编程,来模拟读热数据的迁移;再对64层闪存进行连续读操作,每隔1 000次读操作对闪存块中前63层闪存页的误码数进行一次检测。以1年数据保留后(烘烤后)的误码率为基准,误码率的变化如图7所示。
图7 数据保留时间为1年时,误码率的变化
由图7可知,在经历了50 000次的读操作后,传统的DRRP技术最多只能将1年的数据保留错误降低23%,此后,随着读操作次数的增加,误码率基本不再变化。采用本文提出的干扰补偿算法后,WPD仅对最后一层字线的编程操作所引发的编程干扰,就能将1年的数据保留错误降低39%,这意味着即使在读热数据较少的情况下,该算法依然有较好的错误缓解效果。其中,prxy负载在迁移读热数据至新的闪存块后最多累积了93 210次读操作,此时数据保留所产生的误码率可降低58%,在DRRP和WPD技术的基础上又降低了35%和19%。
由于有效利用了读热数据所产生的读干扰电压脉冲,与DRRP技术和WPD技术相比,本文算法额外开销只有对读热数据的定期迁移所产生的读操作和编程操作,可忽略不计。
基于对NAND闪存中的数据干扰现象以及数据保留现象的分析研究,同时结合3D NAND闪存结构特点,本文提出一种干扰补偿算法。该算法将3D NAND闪存分为读热数据预留层和普通数据存储层,利用读热数据迁移时的编程干扰和迁移后的读干扰电压脉冲,实现对数据保留效应的电荷补偿,同时阻止读干扰效应的累积,提高3D NAND闪存的可靠性。
采用长江存储3D TLC NAND作为实验样本,在3Dsim固态盘模拟器和实际芯片上对干扰补偿算法效果进行了验证。结果表明,在编程擦除4 000次、1年的数据保留时间的条件下,与未应用干扰补偿算法相比,采用本文算法的NAND闪存数据保留误码率降低58%,闪存块最大读次数降低96.8%;与应用DRRP和WPD技术相比,采用本文算法的NAND闪存误码率分别在两者的基础上又降低35%和19%,表明该算法的错误缓解效果优于DRRP和WPD技术,且冗余操作更少,能够有效缓解当前日益严重的NAND闪存可靠性问题。