固态存储系统中的数据管理的制作方法

文档序号:6351428阅读:165来源:国知局
专利名称:固态存储系统中的数据管理的制作方法
固态存储系统中的数据管理
本发明一般地涉及固态存储系统中的数据管理。提供了用于控制数据存储过程(具体地说,错误校正(EC)编码数据的存储)以及其他数据管理操作的方法和装置。
固态存储器是使用电子电路(一般是集成电路(IC))而非常规磁性或光学介质(例如盘或磁带)来存储数据的非易失性存储器。诸如闪存器件之类的固态存储器件(SSD)目前正革命性地改变数据存储领域。相较于常规存储器件,这些器件因为缺少移动部件而较稳定,且与硬盘驱动器(HDD)相比,这些器件提供更大的带宽、更节约的功耗以及更好的随机I/O (输入/输出)性能。在SSD中,存储器被组织成存储区或“块”,每个区皆包含一组可写入数据的存储位置。(以下将参照基于NAND的闪存器件来描述SSD的许多工作特性。然而,将理解,类似原理亦适用于其它类型的SSD15Mf^n,闪存被组织成许多包含数据写入位置的存储块(称为“页”)。典型闪存页的大小是4kB,且典型闪存块包括64个闪存页(因此为256kB)。读取与写入操作逐页执行,而擦除操作仅可以逐块执行。仅可在成功擦除闪存块后才能写入数据。自闪存单元将一个页读到闪存裸片中的数据缓冲器一般需要15到25微秒。将一个页写入闪存单元需要约200微秒,而擦除闪存块正常需要约2毫秒。由于擦除一个块所需的时间比读取或写入一个页的时间长得多,因此将使用称为“写入非到位(write out of place)”的写入方案来改进写入吞吐量与延迟。使用此方案时,不会在闪存存储器中在原位置更新已存储的数据页,而是将更新后的页写入另一个可用闪存页,并在存储为每个页的一部分的元数据中,设置一个有效性标志,以将关联的旧闪存页标记为无效。写入非到位方案以及其它闪存存储特征需要执行某些“清扫”操作以用于闪存存储器的内部管理。例如,在更新页并使旧页无效时,需要后续过程以消除无效数据,并释放存储位置给新输入数据。此内部管理过程一般称为“垃圾收集(garbage collection)”。垃圾收集过程包括选择已使用的闪存块,以及自该块恢复所有仍有效的数据。有效数据页被复制到闪存存储器中的另一个位置,接着擦除该块。垃圾收集通常根据块所包含的无效页的数量来选择这些块。然而,垃圾收集与块擦除亦可作为其它内部管理过程的一部分执行,这些过程包括在固态存储器内移动数据。此类内部管理过程的一个实例是耗损均衡(wear-leveling)。此过程解决闪存的耗损特性。具体而言,在其存储完整性开始降低前,闪存具有有限数量的写入-擦除循环。耗损均衡程序旨在在所有可用闪存块间平均分布写入-擦除循环,以避免不平均的耗损,进而延长整体寿命。具体而言,耗损均衡功能根据写入-擦除循环计数,掌管选择新数据应写入的块,以及在闪存内移动已存储的数据,以释放具有较低循环计数的块,并平均耗损数据放置与内部管理操作一般由闪存存储器附带的专用控制装置(称为闪存控制器)执行。闪存控制器在总体上管理闪存内的数据、控制所有内部管理操作、以及在控制器存储器内维护地址元数据,以追踪闪存存储器中数据的位置。具体而言,闪存控制器运行中间软件层(称为“LBA-PBA (逻辑块地址-物理块地址)”映射)(亦称为“闪存解译层(FTL)”或“LPN-FPN (逻辑页码-闪存页码)地址映射”)。此层以地址映射的方式维护元数据,所述地址映射将与来自上层(例如存储系统中的文件系统或主机)的输入数据块关联的逻辑地址映射到闪存上的物理地址(闪存页码)。此软件层隐藏闪存擦除前写入的复杂性,并支持透明的数据写入与更新而无需擦除操作的介入SSD中执行的内部管理功能导致所谓的“写入放太”。写入放大的发生是因为数据在存储器内部移动,导致数据写入操作的总数相比于SSD所收到的原始数据写入请求的数量而被放大。写入放大是限制固态存储器件的随机写入性能与写入持久寿命的重要问题之一。另ー个关键问题是错误性能。通过在写入単元级别增加冗余而在SSD中执行错误校正(EC)编码。具体而言,为写入每个页的输入数据或页内的每个区段的输入数据计算EC码,且此EC码与输入数据一起记录在该页或该区段内。此编码允许在各个数据页内从错误中恢复。然而,固态存储系统可采用额外的EC编码防止器件级别的故障。通过以RAID(独立设备冗余阵列)阵列的方式管理器件集合来执行此编码,如通常HDD存储系统使用的那样。在美国专利申请公开号 US 2008/0320214A1 以及 http://www. storagenewsletter, com/news/flash/sandforce-ssd-controllers 处的“启动 Sandforce 的 SSD 控制器”中讨论了采用类似RAID保护的SSD系统。在一种情况下,存储系统可使用多个SSD,每个SSD与管理其本身的逻辑存储的控制器一同工作,如上述的那样。可接着以类似RAID阵列的方式在更高级别管理SSD的集合。将參照附图的图I描述此类系统的基本操作原理。图I是ー个示意性的类似RAID的基于SSD的存储系统I的方块图。在此系统中,多个SSD 2在存储控制器3下工作,存储控制器3负责处理来自主机的读/写请求。每个SSD 2管理其内部存储器4中的数据,已如上述。一般而言,存储器4可包括ー个或多个存储通道,每个通道具有一个或多个芯片或许多芯片封装,其中每个芯片可包括ー个或多个固态存储裸片。在存储控制器3中,主机LBA (逻辑块地址)空间被逻辑地分区,且将每个逻辑块的一个区段分配给相应SSD 2。在此阶段増加冗余,进而得以增加RAID奇偶校验。具体而言,存储控制器3对每个输入主机数据块(对应于给定主机(“全局”)LBA)进行错误校正编码,且产生的RAID奇偶校验被添加到主机数据块。编码有奇偶校验的块接着被控制器3分成“単元数据块”。每个单元数据块在已分配単元LBA ULBA)下供应给相应SSD 2以便存储。SSD集合中,全局LBA (gLBA)到uLBA的映射由控制器3记录在gLBA_uLBA映射表中。每个SSD存储其相应单元数据块,并像往常一般将物理存储位置记录在uLBA-PBA映射表中。作为此过程的結果,RAID码字分布在SSD 2阵列间,如图中阴影区域所示。这提供了额外级别的EC编码以避免SSD级别的故障。在每个SSD 2内,局部控制器执行存储器4的内部管理,已如上述,但在此架构中,此功能及uLBA到PBA的随后重新映射对存储控制器3而目是透明的。图I例示所谓的“外部RAID”配置,其中RAID码字跨多个SSD,因此亦跨多个控制器。除了外部RAID或替代外部RAID,还可采用“内部RAID”系统。内部RAID在SSD控制器内实现。在此控制器中,LBA空间被逻辑地分区,且将每个逻辑块的ー个区段分配给整个存储空间的不同子单元。再次添加冗余以允许添加内部RAID奇偶校验,以将内部RAID码字分区并分布在子単元的集合中。具体而言,将内部RAID码字分区成子単元数据块,且每个子単元数据块在各个子单元的地址空间中分配有子単元LBA (SuLBA)0 LBA到suLBA的映射由控制器记录在LBA-suLBA地址映射中。每个子単元数据块接着被存储到物理存储位置处的相应存储子单元,其位置记录在该单元的suLBA-PBA映射表中。此过程提供EC编码,以避免SSD中子単元级别的故障。如外部RAID系统那样,控制器在每个存储子单元内独立执行内部管理(垃圾收集、耗损均衡等),使此功能与suLBA到PBA的随后重新映射得以在比逻辑块级别处的RAID编码更低的逻辑级别处工作。还可以在固态存储区域中应用第一和第二 EC编码过程以改善错误恢复,所述第ニ EC编码处理由所述第一 EC编码过程产生的码字。NAND闪存制造商越来越多地使用多级单元(MLC),每个单元存储多个位,以便降低每个位的成本并增加存储容量。MLC固有地不如单级存储单元(SLC)可靠。由于这种趋势,MLC NAND闪存的耐久性从大约100,000次写入/擦除循环減少到大约10,000次写入/擦除循环。在这些情况下,扇区或页的第一 EC编码的错误校正能力不再足够,因为与MLC NAND关联的原始位错误率比与SLC NAND关联 的原始位错误率降低更快。因此,需要其他编码以延长MLC NAND寿命/耐久性并提供应用通常所需的Ie-Il至le-19的低用户位错误率。例如,国际专利申请公开W02007/084751A2描述了 EC编码和具有ー个或两个EC编码器的处理系统。通常提及各种代码,其中包括诸如RS (里德-所罗门)和BCH (博斯乔赫里霍克文黑姆)之类的线性代码,但通常不考虑存储装置中的码字排列的细节。提及了以如上描述的内部RAID式方式跨一系列存储器使用RS编码。另ー个实施例建议针对数据行使用TCM (格式码调制)编码而针对数据列使用RS编码,其中得到的矩形数据块将作为整体块被写入存储区域。这种编码类似于在其他类型的数据存储装置(具体地说,CD (光盘)、DVD (数字视频光盘)和磁带存储系统)中使用的RS乘积码。在此,输入数据被组织成包括数据符号行和列的逻辑阵列井根据相应第一和第二RS码对行和列进行编码,以便得到的编码阵列的每个行是RS码字,每个列也是RS码字。但是,WO 2007/084751A2的主要焦点是所述第一码与所描述的处理系统的调制器/解调器之间的交互。本发明的ー个方面提供了一种用于将数据存储在固态存储系统的固态存储器中的方法。所述方法包括将输入数据存储在所述固态存储器中的连续多组数据写入位置中,每个组包括在所述固态存储器的多个逻辑子区中的每个子区内的一组写入位置;以及对要存储在每个组中的输入数据进行编码,方式为从该输入数据构建包括数据符号行和列的逻辑阵列井根据相应第一和第二线性错误校正码对所述行和列进行编码,以产生其中所有行对应于相应第一码字而列对应于相应第二码字的编码阵列;所述方法使得在所述每个组中,编码后的输入数据包括在多个所述逻辑子区中的每个子区内的多个第一码字,并且每个逻辑子区包含该组的每个所述第二码字的一部分。因此,在本发明的各实施例中,固态存储系统中的存储空间被逻辑分区为多个逻辑子区,并且输入数据被写入跨这些逻辑子区分布的多组写入位置。具体地说,每个组包含在多个逻辑子区中的每个子区内的ー组(ー个或多个)写入位置。使用第一和第二线性EC码对要存储在每个组中的输入数据进行编码。从该组的输入数据构建包括数据符号行和列的逻辑阵列。根据所述第一和第二错误校正码分别对所述阵列的行和列进行编码,以产生其中所有行对应于相应第一码字而列对应于相应第二码字的(逻辑)编码阵列。然后跨多个所述存储子区写入得到的码字,以在单独子区中和作为整体跨一组子区提供所述第一和第ニ码字的特定排列。具体地说,所述编码和数据存储过程使得在每组写入位置中,将多个所述第一码字存储在多个所述存储子区的每个子区中,并且每个子区包含该组的每个所述第ニ码字的一部分。这在固态存储系统中提供卓越的性能,且通过编码过程在存储子区中和跨整体存储装置提供改进的错误保护以及防止系统中单独存储子区中的故障。此外,在所描述的编码架构中使用线性码允许以特别简单而高效的方式实现编码,并通过使用下面进一步描述的“暂时”EC码提供进ー步改进的基础。因此,本发明的各实施例提供高效、可靠和稳健的固态存储系统以及卓越的整体性能。如上面指出的,针对组中输入数据的EC编码过程通过从该输入数据构建包括数据符号行和列的逻辑阵列来执行。当然,此阵列结构只是用于EC编码操作目的的逻辑结构,而不需要在物理上如此形成。根据所述第一 EC码对此逻辑阵列的行进行编码而根据所述第二 EC码对列进行编码。(在此过程中,何者为“行”和“列”取决于根据认定的阵列方向进行的选择,因此“行”和“列”在此实际上可互換)。在不同的实施例中,所述第一和第二编码过程的执行顺序(即,首先对哪些行和列进行编码)可以不同。当然,无论哪个代码被最后应用都会处理由首先应用的代码生成的码字。例如,如果首先执行行编码,则针对输入数据的编码行(即,第一码字)执行列编码。要指出的是,行和列编码的符号大小无需相同,即,第 一和第二码字的符号可具有不同数量的位。在得到的编码阵列(再次地,仅为逻辑结构)中,行和列分别对应于第一和第二码字。虽然所有行对应于相应第一码字,但并非所有列均一定对应于相应第二码字。这将在下面进ー步讨论。 通常,所述第一和第二编码过程可以通过系统性编码(其中编码不改变编码过程的输入数据,但向未编码符号添加奇偶校验码以获得输出码字)或通过非系统性编码(其中编码将编码过程的输入数据嵌入输出码字中)来实现。但优选地,采用系统性编码。具体地说,所述第二码字优选地通过系统性编码过程产生,由此针对每个第二码字向一组未编码符号添加奇偶校验码。本发明的各优选实施例然后利用所述第一和第二 EC码的线性来不仅提供简单而高效的编码器实施方式,而且还提供额外的错误恢复机制。此机制使用在此所述的“暂时奇偶校验码”。具体地说,对于每个第二码字,在存储该码字的ー组未编码符号期间的连续阶段,针对目前为止为该码字存储的符号生成暂时奇偶校验码。此暂时奇偶校验码允许在部分写入的组中从例如由于在组的写入过程中的故障引起的错误恢复。此夕卜,响应于所述存储系统的电力中断,将暂时奇偶校验码有利地复制到所述固态存储器中,由此在出现电源故障时保留暂时码。这可防止同时发生的电源和存储子区故障。所述暂时奇偶校验码在存储第二码字的ー组未编码符号期间的连续阶段生成,优选地在存储每个连续符号时生成。通过利用所述EC码的线性特性,可以在每个阶段以简单的方式生成暂时奇偶校验码,方式为计算每个新存储的符号的“奇偶校验矢量”并简单地将其添加到针对先前存储的符号生成的暂时奇偶校验码。最后ー个符号的暂时奇偶校验码于是包括该码字的奇偶校验码。这可以通过简单的反馈寄存器电路高效地实现,如下面进一步讨论的。此外,特别优选的实施例采用循环码作为第二错误校正码,利用循环特性以实现更进一步的优点。这将在下面详细描述。这些实施例提供带有暂时奇偶校验码生成的非常简单而高效的编码器实施方式。所述固态存储器的数据写入位置可以是闪存系统中的闪存页。但通常,写入位置可以是固态存储系统中可向其中写入数据的整体存储器的任何区域。可以在具有多个SSD的系统中(例如,在图I中的存储控制器的级别)应用体现本发明的某些方法,由此输入数据被写入跨多个SSD的多组写入位置。在此,整体系统存储器的每个逻辑子区例如可以是特定SSD中的存储器。其他实施例在单个SSD、跨此器件的存储器的子区的多组写入位置中实现。存储器作为整体通常可以包括存储项目(从诸如芯片或裸片之类的单个项目到多组项目)的任何所需配置。但是,典型的SSD将具有多个存储通道,每个存储通道提供存储库(bank)或站(site),其通常包含具有ー个或多个存储芯片的多个封装,每个存储芯片具有一个或多个固态裸片。在SSD中,可用存储器被逻辑分区成的子区可以是整体存储区域的任何子集。例如,在其中SSD具有多个存储通道而每个存储通道具有一组固态存储单元(其中每个单元通常可以包括封装、芯片、裸片或任何其他存储区域)的实施例中,每个逻辑子区可以包括相应通道中的ー组单元。(通常,在此提及ー组项目吋,该组可以包含ー个或多个项目,除非上下文另外規定)。备选地,每个逻辑子区例如可以包括相应存储単元。
在前面描述的RAID式系统中,当跨整体存储器的若干子单元执行EC编码时,此编码在逻辑块(LBA)级别执行。涉及在存储区域中移动数据和擦除写入位置块的内部管理(垃圾收集、耗损均衡等)功能对编码系统而言是透明的。具体地说,在每个存储子单元中独立执行内部管理,以便此功能和随后suLBA到PBA的重新映射将在低于RAID编码的逻辑级别运行。在与申请人的案号为CH9-2009-0006的申请同时提交的未决欧洲专利申请中披露了一种备选系统。该申请(其相关内容在此引入作为參考)披露了一种系统,其中EC编码在物理块(PBA)级别执行,并且可以针对整体存储区域执行内部管理功能。相应地,本发明的第二方面提供了一种用于管理固态存储器件中的数据的方法,其中固态存储器包括可擦除块,每个可擦除块包括多个数据写入位置。所述方法包括通过如本发明第一方面所述的方法存储输入数据,其中每个所述组包括在所述逻辑子区中的每个子区内的一组可擦除块中的写入位置;维护指示输入数据在所述固态存储器中的位置的元数据;维护存储在每个数据写入位置内的数据的有效性的指示;以及在擦除块之前,从包含该块中的写入位置的一个或每个所述组恢复有效输入数据,并将所恢复的数据重新存储为新输入数据。在本发明的此方面的各实施例中,块擦除过程适于在组的基础上恢复有效数据。当例如在垃圾收集或其他内部管理功能期间需要块擦除时,则在擦除给定块之前,从包含该块中的写入位置的ー个或每个所述组恢复有效数据。如此恢复的有效输入数据然后可以作为新的输入数据重新存储在新的EC编码后的组中。因此,本发明的此方面的各实施例提供所述第一方面的编码和存储系统的优点,同时允许针对整体存储器执行内部管理功能。与上面讨论的RAID式系统(在LBA到PBA映射之上实现)不同,EC编码在物理块(PBA)级别而不是在逻辑块(LBA)级别执行,并且整个存储区域可以作为一个实体管理以实现内部管理目的。通过协同基本内部管理功能在物理块级别执行EC编码,这些实施例以高度性能高效的方式提供改进的错误保护。具体地说,EC编码和内部管理过程之间的协同提供卓越的错误恢复以及增强的整体性能。例如,可以实现改进的错误保护,而没有因在较高级别执行EC编码而引起的性能损失(就写入放大增加和耐久性降低而言)。因此,总体上,这些实施例在固态存储器件中提供卓越的性能。本发明的第三方面提供了一种计算机程序,其包括用于使计算机执行根据本发明的第一或第二方面的方法的程序代码装置。将理解,“计算机”ー词是作最一般的使用,其包括具有实施计算机程序所需的数据处理能力的任何设备、组件或系统。此外,体现本发明的计算机程序可构成独立程序、或可为较大程序中的ー个元素,且可提供(例如体现)于计算机可读介质(例如,磁盘或电 子传输以载入计算机)。计算机程序的程序代码装置可包括一组指令的任何语言表示、代码或注释,g在导致计算机直接执行本方法、或在(a)转换成另ー语言、代码或注释和/或(b)以不同材料形式重现后执行本方法。本发明的第四方面提供了一种用于控制在固态存储系统的固态存储器中存储数据的装置。所述装置包括控制逻辑,其用于控制将输入数据存储在所述固态存储器中的连续多组数据写入位置中,每个组包括在所述固态存储器的多个逻辑子区中的每个子区内的一组写入位置;以及第一和第二编码器,其用于根据相应第一和第二线性错误校正码对要存储在每个组中的输入数据进行编码;其中所述控制逻辑适于从要存储在每个组中的输入数据构建包括数据符号行和列的逻辑阵列,以及其中所述第一和第二编码器适于分别对所述行和列进行编码以产生其中所有行对应于相应第一码字而列对应于相应第二码字的编码阵列;所述装置适于使得在所述每个组中,编码后的输入数据包括在该组的多个所述逻辑子区中的每个子区内的多个第一码字,并且每个逻辑子区包含该组的每个所述第二码字的一部分。本发明的第五方面提供了一种固态存储器件,包括多个固态存储单元和根据本发明的第四方面的用于控制在所述存储単元中存储数据的装置。一般而言,在參照本发明的一方面的一个实施例描述特征的情况下,本发明的另一方面的实施例中亦可提供对应特征。现在将仅通过实例的方式參考附图描述本发明,这些附图是图I是具有RAID式编码的现有基于SSD的存储系统的不意性表不;图2是体现本发明的固态存储器件的示意性表示;图3示出了将输入数据写入跨图2的实施例中的存储子区分布的一组写入位置;图4示出了对图2的SSD中的输入数据进行EC编码;图5示出了图2的器件的存储子区中的第一和第二码字的排列;图6示出了图2的器件的第二编码器中的暂时奇偶校验生成电路的一个实施例;图7a和7b示出了图2的器件的第二编码器的暂时奇偶校验生成电路的另ー个实施例的两种不同表;图8示出了跨图2中的存储子区的一组写入位置中的写入位置的配置的ー个实例;图9示出了组中的写入位置的配置的另ー个实例;

图10示出了在图2的SSD中执行的内部管理过程;以及图11和12是示出图2的器件中的两种不同编码方案的错误校正性能改进的表。图2是体现本发明的示意性SSD 5的方块图,其示出以下所述的数据管理操作所涉及的主要元素。SSD 5具有固态存储器6与控制装置(总体以7表示)。在此实例中,存储器6包括N个存储通道Ch (I)到Ch (N),每个通道提供具有多个存储单元的ー个存储库8,在此为闪存存储器裸片9。每个存储库8中的ー组闪存裸片9 一般可设置于ー个或多个芯片或芯片封装上,且可包括SLC (单层単元)裸片、MLC (多层单元)裸片或它们的组合。例如,一个或多个通道可提供MLC存储,而剩余的通道可提供SLC存储。SSD 5的控制装置 7包括闪存控制器10形式的控制逻辑、用于为到器件的数据读取与写入请求服务的读/写(R/W)接ロ(I/F)ll、以及用于与闪存存储通道进行数据通信的闪存链路接ロ 12。闪存控制器10—般控制器件5的工作、管理数据的读写以响应收到的请求、并处理闪存存储器6的所有内部管理功能。闪存控制器10还执行数据的EC编码/解码。具体地说,控制器10的控制逻辑包括用于根据第一线性EC码(此后称为“Cl码”)执行编码/解码的第一 EC编码器/解码器模块EC1,在图中通过方块13示意性地表示。控制器10还包括用于根据第二线性EC码(此后称为“C2码,,)执行编码/解码的第二 EC编码器/解码器模块EC2,在图中通过方块14示意性地表示。在此特定实例中,将EC编码实现为乘积码,且Cl和C2码均为RS码。将在下面描述备选方案。第二编码器模块14还执行暂时奇偶校验码的生成,如下面更详细描述的。控制装置7还包括用于存储闪存控制器10的操作中的各种元数据的存储器15,如下面进ー步讨论的。存储器15可以例如包括SDRAM (同步动态随机存取存储器)。通常,闪存控制器10的控制逻辑(包括EC模块13和14)可以以硬件、软件或它们的组合实现。例如,所述控制逻辑可以全部或部分通过软件实现,所述软件配置控制装置7的处理器以执行所描述的功能。从在此的描述,适合的软件对于本领域的技术人员来说是显而易见的。在本实例中,EC模块13和14通过下面描述的硬连线逻辑电路实现,所述硬连线逻辑电路在闪存控制逻辑的总体控制下执行编码/解码操作。器件5可直接与主机通信以负责读/写请求,或由更高级的控制器管理,所述高级控制器负责存储系统中多个器件的主机请求。例如,器件5可形成RAID式阵列的一部分,其中存储控制器管理多个SSD,如图I系统所示。因此,与输入读/写请求中所指定的数据关联的逻辑地址可引用全局(主机)地址空间或某些逻辑上的低级地址空间。这些地址此后将简单地称为LBA。指定起始LBA和请求大小的数据写入请求通过读/写接ロ 11异步到达控制装置
7。闪存控制器10控制将输入数据块(对应于相应LBA)写入到闪存6,在写入过程中执行Cl和C2编码。在此实例中,首先执行Cl编码。(因为在此实例中米用乘积码,所以Cl和C2编码的顺序无关紧要,在每ー种情况下都获得相同的结果,如本领域的技术人员将理解的那样。因此如果需要,可以颠倒编码顺序)。在写入単元级别执行Cl编码。也就是说,将输入数据写入到存储器6中的単独闪存页吋,ECl模块13针对此输入数据执行Cl编码以便为每个页产生ー个或多个Cl码字。这些Cl码字然后由EC2模块14进ー步编码,如下面进ー步讨论的。闪存控制器10还将元数据存储在每个页中。此元数据包括页无效(PI)标志形式的有效性指示符。作为闪存控制器10的正常控制操作的一部分,所述控制器可以设置页的PI标志,前提是此页中的数据因某种原因(例如,由于数据更新)而被视为无效,如下面进ー步讨论的。为了将编码数据写入到SSD 5的存储区域6,闪存控制器10将存储器6逻辑分区成多个逻辑子区。在此实例中,存在N个逻辑子区,其对应于ー组N个通道上的相应存储库
8。(编码后的)输入数据块流被写入连续的多组闪存页。在此实施例中,每个组的页跨存储器6的所有逻辑子区分布。具体地说,每个页组(在此称为“步距”(stride))包含每个通道的存储区域8中的ー组或“一条”页。每个条通常包含通道存储区域8的ー个或多个闪存块中的预定义数量的连续页(即,具有连续PBA的页)。每个条在存储区域8中具有唯一条id。为了方便,条id可以是该条中的第一个页的PBA。存储控制器10通过控制器10在存储器15中维护的地址元数据记录输入数据在存储器6中的位置。在此,地址元数据包括LBA/PBA地址映射,其指示输入数据块所关联的逻辑地址(LBA)与存储器6中的物理地址(PBA)之间的映射。此类地址映射一般可包括一个或多个表或其它数据结构,从中可确定存储输入数据块的步距(以及其所包括的条)的物理位置。例如,地址映射可在ー个表中指明LBA到步距id的映射,以及在另ー表中指明步距id到条id的映射,且再ー个表指示在条中可找到每个LBA的PBA。然而,实际上,为了方便起见,优选使用包括所有地址元数据的单个查找表。通过依次写入到每个步距而存储编码后的输入数据。图3示出了当前活动步距的此写入过程。输入数据被写入到步距的每个条,一个条(例如,Ch(N)中的最后ー个条)中一组页,从而针对该步距的C2编码过程提供了冗余。也就是说,执行编码和存储过程以便跨器件5的N个存储通道在C2编码步距中分配输入数据。现在将參考图4和5对此进行详细解释。图4是闪存控制器10的模块13和14为了对C1/C2乘积码进行编码而执行的Cl和C2编码过程的示意图。闪存控制器10组织要存储在每个步距中的输入数据以便从此输入数据构建包括数据符号行和列的逻辑阵列。ECl和EC2编码器(13、14)适于分别对该阵列的行和列进行编码。因为在此实例中首先执行Cl编码,所以C2编码处理得到的Cl编码行的列。在此,在两个编码器模块13、14中使用系统性编码,由此通过向未编码数据添加奇偶校验符号来产生每个码字,而编码过程不改变数据本身。图4更详细地示出了此过程。控制器10将要编码的输入数据分区为连续逻辑块,每个逻辑块包括由k2行和Ic1列数据符号组成的逻辑阵列,如图中所示。ECl编码器13根据Cl码对每个行进行系统性编码以针对此行生成Urk1)个奇偶校验符号。将此Cl奇偶校验码添加到Ic1个输入数据符号以产生Ii1符号Cl码字。当所有k2个行均由ECl编码器编码时,得到的ー组k2个Cl码字形成Ic2Xn1个Cl编码符号的逻辑阵列。EC2编码器14执行的C2编码处理此阵列的列。EC2编码器14根据C2码对每个列进行系统性编码以针对此列生成(n2-k2)个奇偶校验符号。将此C2奇偶校验码添加到k2个列符号以产生n2符号C2码字。当所有Ii1个列均由EC2编码器编码时,得到的ー组H1个C2码字形成逻辑U2Xn1)符号阵列,如图中所示。图4中示出的编码符号阵列被写入单个步距中,如上面參考图3描述的那样。此过程被设计为在単独逻辑子区(在此为存储通道8)中和跨一组子区作为整体提供Cl和Cl码字的特定配置。此配置通过图5的示意图示出。在所示实例中,为了简单,假设一个步距在N个通道的每ー个中包含一个页,并且每个页存储多个Cl码字。该码字排列的主要特性为(I)步距所跨的每个存储子区包含多个Cl码字;以及(2)这些存储子区的每ー个都包含步距中的每个第二码字的一部分。在图5中示出的步距中,不同的C2码字由具有不同阴影的垂直条表示。第一个通道包含Ii1个02码字中的每ー个的第一部分。第二个通道包含每个所述C2码字的第二部分,以此类推。在此实例中,最后ー个通道(通道N)包含每个C2码字的C2奇偶校验码。由上述过程产生的Cl和C2码字的“正交”排列在SSD 5中提供卓越的错误校正性能。这将通过下面的实例示出。但要指出的是,虽然示出的简单实例描述了步距中码字配置的一般原则,但通常Cl码字大小可以小于、等于或大于页大小,并且步距可以在每个存储子区中包含多个页。C2编码页当然无需在不同的通道中对齐,并且C2码字部分的排序无需遵循通道顺序。此外,虽然在此将C2奇偶校验码存储在第N个通道中,但任何通道都可以用于奇偶校验,甚至根据需要针对不同的步距使用不同的通道。通常,取决于系统架构,可以按顺序或并行填充给定步距的条。在本实施例中,其中存储器6由通道逻辑地分区,可以并行将条写入到N个通道。在任何情况下,C2编码器14都g在利用Cl和C2RS码的线性,提供简单而高效的实施方式以及进一歩的错误保护特性。具体地说,将步距的Cl码字逐渐存储在每个存储子区内的条中吋,C2编码器针对目前为止为每个C2码字存储的符号重复计算暂时奇偶校验码。现在将參考图6、7a和7b描述优选编码器设计。(从编码器描述,对应的解码器实施方式对于本领域的技术人员来说很容易地显而易见)。线性错误校正码的编码器以一対一方式将来自矢量空间GF(q)k的k元组映射成码字,其中k是代码的维度,GF (q)k是元素来自有限域(伽罗瓦域)的所有k元组的集合,且q个元素(q是素数的冪)由GF(q)表示。线性块代码C的系统性编码器可以通过kXn生成矩阵G=[I P]表征,其中I是kXk単位矩阵,P是kX(n-k)矩阵。用于生成码字£(行矢量,具有n个分量)的编码过程可以通过将具有k个分量的输入数据行矢量2与生成矩阵G的相乘来描述,即G。编码过程是k维矢量空间到由代码C定义的k維子空间的线性一対一映射。线性C2码的系统性编码器可以通过生成矩阵G=[I P]表征,其中Iik2Xk2単位矩阵,Pik2X (n2-k2)矩阵。矩阵P的第i行由迫表示,其中I彡i彡k2。此外,数据矢量旦是元素由ち表示的k2元组(行矢量),其中I < i < k2。由此编码器生成的逐符号暂时奇偶校验码ム通过递归方程ん=定义,其中L=O且I彡i彡k2。作为数据矢量互的系统性编码过程的结果生成的C2码字是行矢量匕£],其中奇偶校验行矢量n是编码过程结束(即,在时间i=k2)时的暂时奇偶校验矢量I。以下,假设页中的Cl码字的数量由整除k2的整数M给定。换言之,页中的姆个C2码字具有来自GF (q)的M个元素。在处理第一个页之后生成的暂时奇偶校验码是iM,并且在处理第二个页之后生成的暂时奇偶校验码是I2m等。最后,在处理最后第(k2/M)个页之后生成的码字是[迎],其中如上所述,奇偶校验行矢量£是编码过程结束时的暂时奇偶校验码ム。图6示出了可如何在C2编码器14中生成C2码字的暂时奇偶校验码。对于每个C2码字,此编码器包括简单的反馈寄存器电路20,如图中示出。当提供每个连续符号ち(来自该C2码字的ー组未编码符号)以便存储时,电路20针对该符号生成奇偶校验矢量aini。然后将奇偶校验矢量aiEi添加到针对由寄存器21输出的前ー个符号生成的暂时奇偶校验码ムィ。(在此要指出的是,第一个符号的暂时奇偶校验码も只是该符号的奇偶校验矢量alEl)。此矢量添加的结果是到目前为止为C2码字存储的符号的当前暂时奇偶校验码然后将暂时奇偶校验码t存储在寄存器21中。当在时间i=k2存储最后ー个符号ai时,由电路20输出的暂时奇偶校验码是该码字的奇偶校验码£。 从上面将看到,使用通过来自GF(q)的(n2_k2)个符号和简单的反馈电路存储&的寄存器21,以特别简单的方式在存储连续符号ち时生成暂时奇偶校验码可以将C2奇偶校验存储在(n2-k2)/M个页或芯片上。如果(n2-k2)/M=l,则只需要一个“额外的”芯片来存储C2奇偶校验,并且此方案可以恢复由于单个芯片故障引起的丢失数据。如果(n2-k2)/M=2,则需要两个额外的芯片来存储C2奇偶校验,并且此方案可以在恢复过程中恢复由于两个芯片故障引起的丢失数据。此外,当需要暂时奇偶校验码以便在部分完成的步距中从错误恢复吋,闪存控制器10可以使用存储在寄存器21中的暂时奇偶校验码。此外,如果闪存控制器检测到控制装置7的电カ中断,则在关机之前,所述控制器将当前暂时奇偶校验码(连同存储器15中的其他元数据,包括当前地址映射)复制到闪存存储器6中的可用区域。因此,可以在出现电源故障时保留暂时奇偶校验码,防止同时发生的电源故障和存储单元/通道错误。 要指出的是,虽然上面的 描述专注于C2编码器14以解释暂时奇偶校验机制,但可以类似地根据上述原则通过简单的反馈寄存器电路实现Cl编码器13。在特别优选的实施例中,C2编码器14中使用的C2码是循环码,并且编码器设计利用此类代码的特性以获得特别简单而高效的实施方式。对于循环码,可以方便地引入多
—I
项式表示法。以下,码字£=(C(I,C1,…,(V1)通过码字多项式表示。类似地,
J=O
诸如数据矢量之类的所有行矢量也将通过多项式表示。循环码通过唯一首一生成多项式
n—k
g{^) =表征,其中生成多项式的所有系数都来自GF(q),并且生成多项式的首项系
J=O '
数是l,_gn-k=l。循环码的所有码字是生成多项式g(X)的倍数。換言之,循环码中的每个码字都可以表示为生成多项式与次数为(k_l)或更低的多项式的乘积。可以按如下方式获得循环码的系统性编码器。假设系统性编码器的输入端处
k-\
的数据多项式为=。循环码的对应码字(通过生成多项式g(x)表征)于是由
J=O
c (X) =xn_ka(X)+p (X)给出,其中选择次数为(n-k-1)或更低的奇偶校验多项式p (x),使得C(X)可被g(x)整除。图7a示出了可如何在C2编码器14中生成使用生成多项式g(x)的循环C2码的暂时奇偶校验码。对于每个C2码字C(X),此编码器包括线性反馈移位寄存器电路(LFSR)25,如图中示出。当提供来自C2码字的ー组未编码符号的每个连续符号以便存储时,电路
m-k-l
25生成通过多项式f(I)= X 表示的暂时奇偶校验码。移位寄存器电路的反馈系数
_/=0
由生成多项式的系数A给出,j均为0 < j < n2-k2-l。移位寄存器的内容是在时间i的暂时奇偶校验多项式$的系数。在开始吋,寄存器被初始化为0,即对于所有0 < j < n2-k2-l,
ヰ=0イ乍为数据多项式a(x)的系统性编码过程的结果生成的C2码字于是为码字多项式
c(x) = xn~k^a(x) + p(x),其中奇偶校验多项式P (X)是编码过程结束(即,在时间i=k2)时
的暂时奇偶校验多项式ピ00。将i个符号* / -、 、/移位到反馈移位寄存器电路之后,计算暂时奇偶校验多项式P (x)。以下,假设页中的Cl码字的数量通过整除k2的整数M给出。換言之,页中的每个C2码字具有来自GF (q)的M个元素。在处理第一个页之后生成的暂时奇偶校验多项式P(X)则是tM(x),在处理第二个页之后生成的暂时奇偶校验多项式是t2M(x)等。最后,在处理最后第(k2/M)个页之后生成的码字是ズA—k㈡+ / (X),
其中如上所述,奇偶校验多项式P (x)是C2码字的奇偶校验码并对应于编码过程结束时的暂时奇偶校验多项式(x)。如前所述,在出现电源故障时,可以将来自寄存器电路25的暂时奇偶校验码复制到闪存存储器6中。图7a的LFSR电路25是有限状态机,其中在时间i的状态由暂时奇偶校验多项式P(X)定义,并且输入符号是W 。因此,所述LFSR电路可以通过状态更新方程
权利要求
1.一种用于将数据存储在固态存储系统(5)的固态存储器(6)中的方法,所述方法包括 将输入数据存储在所述固态存储器(6)中的连续多组数据写入位置中,每个组包括在所述固态存储器(6)的多个逻辑子区中的每个子区内的一组写入位置;以及 对要存储在每个组中的输入数据进行编码,方式为从该输入数据构建包括数据符号行和列的逻辑阵列并根据相应第一和第二线性错误校正码对所述行和列进行编码,以产生其中所有行对应于相应第一码字而列对应于相应第二码字的编码阵列; 所述方法使得在所述每个组中,编码后的输入数据包括在多个所述逻辑子区中的每个子区内的多个第一码字,并且每个逻辑子区包含该组的每个所述第二码字的一部分。
2.如权利要求I中所述的方法,其中所述第二错误校正码是循环码。
3.如权利要求I或2中所述的方法,包括 通过系统编码过程产生所述第二码字,由此向每个第二码字的一组未编码符号添加奇偶校验码;以及 对于每个第二码字,在存储该码字的所述一组未编码符号期间的连续阶段,针对目前为止为该码字存储的符号生成暂时奇偶校验码。
4.如权利要求3中所述的方法,包括响应于所述存储系统(5)的电力中断而将所述暂时奇偶校验码存储在所述固态存储器(6)中。
5.如任一上述权利要求中所述的方法,其中所述第一和第二码均为里德-所罗门码。
6.如任一上述权利要求中所述的方法,其中所述固态存储器件(5)具有多个存储通道,每个通道具有一组(8)固态存储单元(9),其中所述逻辑子区中的每个子区包括相应通道中的所述一组(8)单元。
7.如权利要求I至5中的任一权利要求中所述的方法,其中所述固态存储器件(5)具有多个固态存储单元(9),其中所述逻辑子区中的每个子区包括相应固态存储单元(9)。
8.一种用于管理固态存储器件(5)中的数据的方法,其中固态存储器(6)包括可擦除块,每个可擦除块包括多个数据写入位置,所述方法包括 通过如任一上述权利要求中所述的方法存储输入数据,其中每个所述组包括在所述逻辑子区中的每个子区内的一组可擦除块中的写入位置; 维护指示输入数据在所述固态存储器(6)中的位置的元数据; 维护存储在每个数据写入位置内的数据的有效性的指示;以及 在擦除块之前,从包含该块中的写入位置的一个或每个所述组恢复有效输入数据,并将所恢复的数据重新存储为新输入数据。
9.一种计算机程序,包括用于使计算机执行如任一上述权利要求中所述的方法的程序代码装置。
10.一种用于控制在固态存储系统(5)的固态存储器(6)中存储数据的装置(7),所述装置包括 控制逻辑(10 ),其用于控制将输入数据存储在所述固态存储器(6 )中的连续多组数据写入位置中,每个组包括在所述固态存储器(6)的多个逻辑子区中的每个子区内的一组写入位置;以及 第一和第二编码器(13、14),其用于根据相应第一和第二线性错误校正码对要存储在每个组中的输入数据进行编码; 其中所述控制逻辑适于从要存储在每个组中的输入数据构建包括数据符号行和列的逻辑阵列,以及其中所述第一和第二编码器(13、14)适于分别对所述行和列进行编码以产生其中所有行对应于相应第一码字而列对应于相应第二码字的编码阵列; 所述装置(7)适于使得在所述每个组中,编码后的输入数据包括在该组的多个所述逻辑子区中的每个子区内的多个第一码字,并且每个逻辑子区包含该组的每个所述第二码字的一部分。
11.如权利要求10中所述的装置,其中所述第二编码器(14)是用于向每个第二码字的一组未编码符号添加奇偶校验码的系统编码器,对于每个第二码字,所述第二编码器(14)包括用于在存储所述一组未编码符号的每个符号时接收该码字的所述一组未编码符号的连续符号的反馈寄存器电路(20),其中所述反馈寄存器电路(20)适于 在存储每个所述符号时,针对该符号生成奇偶校验矢量;以及 在存储第一个符号之后的每个所述符号时,生成暂时奇偶校验码,方式为向针对前一符号生成的所述暂时奇偶校验码添加该符号的奇偶校验矢量,其中所述第一个符号的暂时奇偶校验码是该符号的奇偶校验矢量; 由此在存储所述一组未编码符号的最后一个符号时生成的暂时奇偶校验码包括所述第二码字的奇偶校验码。
12.如权利要求10中所述的装置,其中 所述第二错误校正码是循环码; 所述第二编码器(14)是用于向每个第二码字的所述一组未编码符号添加奇偶校验码的系统编码器; 对于每个第二码字,所述第二编码器(14)包括用于在存储所述一组未编码符号的每个符号时接收该码字的所述一组未编码符号的连续符号的线性反馈移位寄存器电路(25),所述电路(25)适于在存储每个符号时,针对目前为止为该码字存储的符号生成暂时奇偶校验码; 由此在存储所述一组未编码符号的最后一个符号时生成的暂时奇偶校验码包括所述第二码字的奇偶校验码。
13.如权利要求11或12中所述的装置,其中所述控制逻辑(10)适于响应于所述装置的电力中断而控制将所述暂时奇偶校验码存储在所述固态存储器(6)中。
14.如权利要求10至13的任一权利要求中所述的装置,其中所述固态存储器件(5)具有多个固态存储单元(9),其中所述逻辑子区中的每个子区包括一组(8)相应的所述存储单元(9)。
15.一种固态存储器件(5),包括多个固态存储单元(9)和如权利要求14所述的用于控制在所述存储单元(9)中存储数据的装置。
全文摘要
提供了用于控制数据管理操作的方法和装置,所述数据管理操作包括将数据存储在固态存储系统(5)的固态存储器(6)中。将输入数据存储在所述固态存储器(6)中的连续多组数据写入位置中。每个组包括在所述固态存储器(6)的多个逻辑子区中的每个子区内的一组写入位置。根据第一和第二线性错误校正码对要存储在每个组中的输入数据进行编码。通过从要存储在每个组中的输入数据构建包括数据符号行和列的逻辑阵列来执行编码。分别根据所述第一和第二线性错误校正码对所述行和列进行编码,以产生其中所有行对应于相应第一码字而列对应于相应第二码字的编码阵列。执行所述编码和存储操作以使得在每个所述组中,编码后的输入数据包括在多个所述逻辑子区中的每个子区内的多个第一码字,并且每个逻辑子区包含该组的每个所述第二码字的一部分。
文档编号G06F11/10GK102656566SQ201080056483
公开日2012年9月5日 申请日期2010年12月16日 优先权日2009年12月17日
发明者E·S·埃莱夫特里乌, I·伊利亚迪斯, R·D·西德哲扬, R·哈斯, T·米特尔霍尔泽, 胡晓宇 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1