专利名称:固态存储器件内的数据管理的制作方法
固态存储器件内的数据管理本发明一般地涉及固态存储器件(SSD)中的数据管理,具体而言,涉及用于控制SSD中的数据存储与擦除程序的方法和装置。固态存储器是使用电子电路(一般是集成电路(IC))而非常规磁性或光学介质(例如盘或磁带)来存储数据的非易失性存储器。诸如闪存器件之类的SSD目前正革命性地改变数据存储领域。相较于常规存储器件,这些器件因为缺少移动部件而较稳定,且与硬盘驱动器(HDD)相比,这些器件提供更大的带宽、更节约的功耗以及更好的随机I/O (输入/输出)性能。在SSD中,存储器被组织成存储区或“块”,每个区皆包含一组可写入数据的存储位置。以下将参照基于NAND的闪存器件来描述SSD的许多工作特性。然而,将理解,类似 原理亦适用于其它类型的SSD。例如,闪存被组织成许多包含数据写入位置的存储块(称为“页”)。典型闪存页的大小是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编码(S卩,类似先前所述的页内编码,在写入位置内执行的任何常规EC编码之上),同时允许针对存储器作为整体执行内部管理功能。因此,相比于上述类似RAID的系统(其实施于LBA到PBA映射之上),额外的EC编码执行于物理块(PBA)级别而非逻辑块(LBA)级别,且整个存储区可基于内部管理目的而作为一个实体进行管理。通过在物理块级别执行EC编码以及主要内部管理功能,本发明的各实施例以高性能-效率方式避免存储子区的故障。具体而言,EC编码与内部管理过程之间的协作提供较高的错误校正率,并显著改善整体性能。例如,本发明能改善错误保护而不影响性能,例如在增加写入放大与降低持久性等方面,这些现象在更高级别进行编码时都有可能会发生。因此,整体而言,体现本发明的控制装置在固态存储器件中提供了优良的性能。一般而言,EC编码过程可由系统性编码(其中编码过程的输入数据不因编码而改变,但会添加EC码以获得输出码字)或非系统性编码(其中编码过程的输入数据通过编码嵌入输出码字)实现。然而,优选地采用系统性编码,由此控制逻辑在每个组中所存储的输入数据中添加所述输入数据的EC码。固态存储器的数据写入位置可以是闪存器件中的闪存页。然而,一般而言,写入位置可为SSD中数据可写入的整个存储器中的任一区域。存储器整体一般可包括以任何方式配置的存储项目,从单一项目(例如,芯片或裸片)到多组项目。然而,典型SSD具有多个存储通道,每个通道提供存储库(bank)或存储站,它们通常包括一个或多个存储芯片的多个封装,每个封装具有一个或多个固态裸片。出于EC编码目的在可用存储器中所进行的逻辑分区可以是整体存储区的任一子集。例如,在固态存储器件具有多个存储通道,而每个通道具有一组固态存储单元(其中每个单元一般可包括封装、芯片、裸片或任何其它存储区)的实施例中,每个逻辑子区 在各通道中可包括一组单元。(一般而言,除非另有说明,在此所指的项目集合可包括一个或多个项目)。备选地,例如,每个逻辑子区可包括相应存储单元。出于EC编码目的,输入数据存储在多组写入位置中,其中每个组在每个逻辑子区中包括一个或多个写入位置,它们位于该子区的一组可擦除块中。在优选实施例中,一个组包括多个写入数据,它们位于每个子区的每个块中,每个块内的写入位置是连续的(即,具有连续的物理地址)。一般而言,在任一子区中,一个组的写入位置集合可包含大于或小于可擦除块内写入位置的数量。然而,为了实现方便,每个子区中写入位置的数量优选为一个块内写入位置的数量的整数因子或整数倍数。在每个子区中一个组的写入位置数量小于块大小的情况下,一个以上的组可共享同一块。在此情况下,如果在一个逻辑子区中共享公共块的任一组亦在每个逻辑子区中共享公共块,可极大地简化内部管理操作。如上所述,每个组中输入数据的EC码与所述输入数据一起存储在该组中。然而,在优选实施例中,将输入数据存储在每个组的写入位置期间的多个连续阶段,为所述输入数据计算暂时错误校正码,并将其存储在该组中。此暂时EC码可在需要时用来恢复部分完成的组。此外,所述控制装置适于响应于电源中断而将暂时错误校正码存储在固态存储器内,进而在电源故障时得以保存暂时码。藉此避免电源与存储子区同时发生故障。本发明的第二方面提供一种固态存储器件,包括固态存储器,其包括可擦除块,每个可擦除块包括一组数据写入位置;以及根据本发明的第一方面的控制装置。本发明的第三面提供一种用于控制固态存储器件的方法,其中固态存储器包括可擦除块,每个可擦除块包括多个数据写入位置。所述方法包括将输入数据存储在连续的多组数据写入位置中,每个组包括位于所述固态存储器的多个逻辑子区中的每个子区内的一组可擦除块中的写入位置;在所述输入数据内编入错误校正码,使得每个所述组包含该组内的输入数据的错误校正码;在所述固态存储器件的存储器中维护指示输入数据在所述固态存储器中的位置的元数据;维护存储在每个数据写入位置内的数据的有效性的指示;以及在擦除块之前,从包含该块中的写入位置的一个或每个所述组恢复有效输入数据,并将所恢复的数据重新存储为新输入数据。本发明还提供了包括程序代码装置的计算机程序,所述程序代码装置导致计算机执行根据本发明的第三方面的方法。将理解,“计算机”一词是作最一般的使用,其包括具有实施计算机程序所需的数据处理能力的任何设备、组件或系统。此外,体现本发明的计算机程序可构成独立程序、或可为较大程序中的一个元素,且可提供(例如体现)于计算机可读介质(例如,磁盘或电子传输以载入计算机)。计算机程序的程序代码装置可包括一组指令的任何语言表示、代码或注释,旨在导致计算机直接执行本方法、或在(a)转换成另一语言、代码或注释和/或(b)以不同材料形式重现后执行本方法。一般而言,在参照本发明的一方面的一个实施例描述特征的情况下,本发明的另一方面的实施例中亦可提供对应特征。现在将仅通过实例的方式参考附图描述本发明,这些附图是
图I是现有的具有类似RAID编码的基于SSD的存储系统的示意图;图2是体现本发明的固态存储器件的示意图;图3例示将输入数据写入跨图2的实施例中的存储子区分布的一组写入位置;图4示出一个组中的写入位置的配置的一个实例;图5示出一个组中的写入位置的配置的另一实例;以及图6例示在图2的SSD中执行的内部管理过程。图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) 11、以及用于与闪存存储通道进行数据通信的闪存链路接口 12。闪存控制器10—般控制器件5的工作、管理数据的读写以响应收到的请求、并处理闪存存储器6的所有内部管理功能。闪存控制器10还执行数据的EC编码(与对应的解码),如下进一步描述。一般而言,闪存控制器10的控制逻辑可以以硬件、软件或它们的组合实现。例如,控制逻辑可完全或部分由软件实施,所述软件配置控制装置7的处理器执行所述功能。本领域技术人员可从在此的描述了解适合的软件。EC编码/解码功能可由硬接线逻辑电路实现,所述电路一般在闪存控制逻辑的控制下工作,本领域技术人员当知适合的电路。控制装置7还包括在闪存控制器10的工作中存储各种元数据,如下详述。存储器13—般可包括一个或多个存储组件,其可包括不同类型的存储器,包括例如SDRAM (同步动态随机存取存储器)。一般而言,器件5可直接与主机通信以负责读/写请求,或由更高级的控制器管理,所述高级控制器负责存储系统中多个器件的主机请求。例如,器件5可形成类似RAID阵列的一部分,其中存储控制器管理多个SSD,如图I系统所示。因此,与输入读/写请求中所指定的数据关联的逻辑地址可引用全局(主机)地址空间或某些逻辑上的低级地址空间。这些地址此后将简单地称为LBA。指定起始LBA与请求大小的数据写入请求经由读/写接口 11异步地到达控制装置7。在写入过程期间,闪存控制器10控制将输入数据块(对应于各LBA)写入闪存存储器6,并执行二层EC编码。第一个EC编码层(此后称为“Cl编码”)是位于写入单元级别的常规编码。随着输入数据被写入存储器6的各个闪存页,在输入数据上执行EC编码,而结果码(Cl码)形成该页所存储的元数据的一部分。此元数据亦包括形式为页无效(PI)标志的有效性指示符。数据页的PI标志是闪存控制器10正常控制操作的一部分,如果基于某些原因,该页中的数据被视为无效时(例如由于数据更新,如下详述),则可由控制器设置此标志。页元数据一般还包括坏页(BP)标志,如果页被认定为无法使用时(例如显示太多Cl错误),闪存控制器10可设置此标志。再次地,作为闪存控制器10正常控制功能的一部分执行此过程。
闪存控制器10所执行的第二层EC编码此后将称为“C2编码”。实施C2编码时,SSD 5的存储区6由闪存控制器10逻辑地分成多个逻辑子区。在此实例中,有n个逻辑子区对应n个通道集合上的各存储库8。C2编码通过将输入数据块的流写入连续的多组闪存页的方式执行。在此实施例中,每个组的页跨存储器6的所有逻辑子区分布。具体而言,页的每个组(在此称为“步距(stride)”)包含每个通道的存储区8中的一组(或条“strip”)页。每个条一般包括预定数量的连续页(即,具有连续PBA的页),它们位于通道存储区8的一个或多个闪存块中。每个条在存储区8中具有唯一条ID。为了方便,条ID可为该条中的第一页的PBA。通过依次写入每个步距,进而在此阶段为C2编码添加冗余来存储输入数据。图3例示当前有效步距的此写入过程。输入数据被写入步距中的 每个条,其中最后的条中(Ch (n)中)的一组页保留给该步距的C2码。即,对于给定步距中的输入数据,闪存控制器10计算该输入数据的EC码,并将此C2码存储在该步距的最后页中。C2编码所使用的特定EC算法并非本发明的重点。然而,在此实例中,C2码假设是XOR奇偶校验码。(在此可使用的另一 C2编码系统揭露于与此案一同申请的未决欧洲专利申请,其申请人案号为CH9-2009-0046,在此引入其相关内容作为参考)。在该系统中,加入上述步距的C2码包括多个C2码字的集体奇偶校验码,其散布在存储子区8中。在给定步距的写入过程中,如果闪存控制器10检测到坏页(即设置BP标志),则会跳过此页,并继续写入步距中的下一页。当计算C2奇偶校验时,控制器10将任何坏页视为全部为O。一般而言,取决于系统架构,可以连续或平行地填充给定步距的条。在本实施例中,存储器6由通道进行逻辑分区,条可以平行方式写入n个通道。在此情况下,闪存控制器10在将输入数据分配给条并计算有效步距的C2奇偶校验之前,将先检测该步距中的坏页。在任何情况下,数据写入过程的影响是,将输入数据分布到器件5的存储通道中编有C2码的步距。将条分配到特定步距以及写入操作中步距顺序的选择,可以以许多不同方式在控制器10实现,且本领域技术人员当知如何实现。这些特性并非本发明的重点且无需在此赘述。然而,一般而言,在给定通道中,每个条包括位于一个或多个闪存块中的页。图4与5示出可能步距配置的两个实例。图4中,C2条的大小为四页。由图中的箭头指示单个步距。假设一个闪存块的大小为64页,则每个块将包含具有16个不同步距的条。此16个步距在所有通道中共享相同的块。共享一组公共块的此类步距集合此后称为步距组。注意,不同通道存储区8中的相同步距组的各块无须物理对齐。图5示出一个备选实例,其中C2条的大小为二个块。因此,每个步距在每个存储通道中包括二个块,且在此一个步距组包括单个步距。注意,每个通道存储区8中的同一步距的各块无须物理相连。存储控制器10经由地址元数据将输入数据的位置记录在存储器6中,由控制器10在存储器13中维护所述元数据。在此,地址元数据包括LBA/PBA地址映射,其指示输入数据块所关联的逻辑地址(LBA)与存储器6中的物理地址(PBA)之间的映射。此类地址映射一般可包括一个或多个表或其它数据结构,从中可确定存储输入数据块的步距(以及其所包括的条)的物理位置。例如,地址映射可在一个表中指明LBA到步距ID的映射,以及在另一表中指明步距ID到条ID的映射,且再一个表指示在条中可找到每个LBA的PBA。然而,实际上,为了方便起见,优选使用包括所有地址元数据的单个查找表。将理解,通过将输入数据分布于编有EC码的步距的存储通道,C2编码过程得以在页级别进行保护的Cl编码之外,提供额外保护,避免各个通道中发生错误。通常在每次数据写入后,以及在响应读取请求后或在内部管理操作期间读出数据后,才会进行错误检查,如下详述。每当条包含无法通过Cl错误校正过程校正的页或块错误时,闪存控制器10将执行以下程序。从同一存储区8选择新的条作为包含错误的条。此条将替代有问题的步距中的“坏条”。从存储器13中的地址元数据识别该步距中其它的条,并读取这些条的内容。坏条的内容会被读取,而该步距中其它条的内容会通过C2编码算法用于重建坏条中的错误数据。重建后(错误校正后)的数据接着被写入替换条,并更新地址元数据以反映修改后的步距结构。接着,在旧的坏条的每个页中设置页无效(PI)标志,以指示这些页的内容无效。这些页将在后续垃圾收集过程期间被回收,如下所述。
除了将C2码存储为存储器6中步距的一部分,闪存控制器还在各个步距写入期间计算部分C2码。在将输入数据写入每个步距的条期间(优选在写入条的每个页后),在连续阶段中计算这些部分码。具体而言,在每次页写入后,对目前步距中所存储的输入数据实施C2编码,以获得暂时EC码或“暂时奇偶校验”以用于部分完成的步距。此暂时奇偶校验由控制器10存储在图2的存储器13中。实际上,存储暂时奇偶校验的特定存储组件可以是硬接线C2编码器电路的寄存器。在需要从部分完成的步距的错误进行恢复时可使用此暂时奇偶校验。此外,如果闪存控制器10检测到控制装置7的电源中断,则控制器在关机前,先将暂时错误校正码(以及存储器13中的其它元数据,包括当前地址映射)复制到闪存存储器6的可用区域。藉此,得以在电源故障时保存暂时奇偶校验,进而避免同步电源故障及存储单元/通道错误。当数据通过上述写入非到位方案在闪存存储器6中进行更新时,闪存控制器10为通过LBA覆写而更新的任何页设置页无效(PI)标志。包含主机删除的数据的页亦可利用类似方式设置PI标志。存储控制器10还为每个步距组维护计数,该计数指示整个步距组中无效页的数量。步距组的这些PI计数被记录为在存储器13内维护的元数据的一部分。PI计数在控制器10所执行的内部管理操作期间使用,如下所述。虽然已如上述针对C2编码将存储器6逻辑地分区,但针对存储器作为整体执行内部管理功能。即,就内部管理而言,闪存控制器10将所有的子区(n个存储通道)视为单个存储实体。在此方面,涉及擦除块的内部管理功能(例如,垃圾收集与耗损均衡)适于负责跨区的C2编码。具体而言,此类过程期间,有效数据的恢复在步距组而非块的基础上执行。在擦除块之前,从步距组中包含该块的写入位置的一个或每个步距中恢复有效输入数据。参照图6的垃圾收集过程进一步描述了此操作。图6的方块图显示SSD 5中所执行的垃圾收集过程的主要步骤。当启动垃圾收集(如图中步骤20所示)时,闪存控制器10首先选择要擦除的块。在步骤21执行的此选择基于存储器13中针对步距组存储的PI计数。具体而言,可优先选择步距组中具有最高PI计数的块以便回收。选择步距组后,在步骤22,闪存控制器从该步距组的页恢复所有仍有效的数据。因此,从步距组中尚未设置PI标志的所有页读取数据。基于Cl与C2码,此过程可根据需求执行错误校正处理。所恢复的有效数据可接着被反馈为要重新存储在闪存存储器6中的输入数据。因此,所恢复的数据重新存储在新步距中,如步骤23所示。在步骤24,闪存控制器10更新存储器13中的地址映射,以反映新数据位置。旧的、已回收的步距组的块可接着被闪存控制器10擦除,如步骤25所示。控制器10可立即或在任何后续时间执行块擦除,以便释放这些块以供存储新数据。
如上所示,垃圾收集期间将一起回收步距组的所有条。相同原理亦适用于在块擦除之前需要移动闪存内的数据的任何内部管理过程(例如,耗损均衡)。作为控制器10正常监视功能的一部分,显示持久性问题(太多Cl错误)的块可在回收过程期间被识别并标示为“坏块”。此加标志操作可基于由闪存控制器10作为存储器13内存储的元数据的一部分而维护的块错误计数。藉此,控制器10随后的数据放置将不会使用被标记为坏的块。从以上内容将理解,与现有类似RAID的系统不同的是,C2编码在SSD 5的物理块级别执行,就内部管理而言,整个存储区作为一个实体进行管理。对LBA/PBA映射而言,在PBA级别执行的C2编码操作是透明的,且可避免页、块、芯片、存储库及通道级别处发生完全故障。上述暂时C2码的使用可避免同步电源与单元故障。通过如上所述以协同内部管理功能的方式执行C2编码,SSD 5得以改进错误率并具有极优良的整体性能。具体而言,改善了错误性能而不牺牲高级编码的写入放大与持久性。例如,假设在每个情况下使用一个通道作冗余,则SSD 5可与上述类似RAID的基于SSD的系统相比较。在SSD 5中,假设通道n全部分配给C2码,定义W1为内部管理(垃圾收集与耗损均衡)所导 致的写入放大。如果为了方便,假设每个条仅包含一个页,则每个页写入导致(1+1/ (n-l))Wlf页写入,因为控制器为(n-1)个页计算奇偶校验页,每个通道皆有一个奇偶校验页。相比之下,对于类似RAID的系统,如果《2表示垃圾收集与耗损均衡所导致的写入放大,则每个页写入导致2 2个页写入、一个数据页与一个RAID奇偶校验页。此外,W1^2,因为内部管理“全局地”执行,将所有的存储通道视为一个统一存储区。在给定情况下,通过适当选择C2步距与条大小以及条大小与LBA大小的关系,可进一步改善效率。此考虑类似于RAID应用所遇到的情况,如对本领域技术人员将显而易见的。在本发明的某些实施例中,闪存控制器可适于动态调整操作中的C2条与步距大小。例如,闪存控制器可根据预定准则(例如,根据写入请求的大小)在不同的条/步距大小之间切换。步距长度亦可随着块变得越来越不稳定(例如,因为耗损与老化)而减短。对所描述的实施例的适当修改将对本领域技术人员显而易见。将理解,可以对上述实施例做出各种进一步的改变和修改。例如,虽然用于C2编码的存储器6的逻辑子区与SSD 5中的存储通道对齐,但一般而言这些子区可以是可用存储器的任何子集。例如,子区可备选地包括图2中的相应闪存裸片9。C2码当然可存储在任一存储子区,且这对于每个步距无须相同。此外,各C2码字无须跨所有子区。例如,在器件5中,C2步距可备选地跨小于总数n的多个通道,步距集合作为整体分布于所有通道。在此情况下,在C2错误校正过程中,选择新条以替换坏条时,新条可选自同一存储通道、或不包含同一步距中的条的任何其它通道。如上所述,步距长度亦可减短,藉此当块变得不稳定时,步距跨更少的通道。虽然本发明的实施例的操作并不一定需要Cl编码,但Cl编码较为理想。此外,虽然本发明具体描述NAND闪存器件,但本发明可应用于其它类型的SSD。可对上述示意性实施例做出许多其它更改和修改而不偏离本发明的范围。
权利要求
1.一种用于固态存储器件(5)的控制装置(7),其中固态存储器(6)包括可擦除块,每个块包括多个数据写入位置,所述控制装置(7)包括存储器(13)和控制逻辑(10),所述控制逻辑(10)适于执行以下操作 将输入数据存储在连续的多组数据写入位置中,每个组包括位于所述固态存储器(6)的多个逻辑子区中的每个子区内的一组可擦除块中的写入位置; 在所述输入数据内编入错误校正码,使得每个所述组包含该组内的输入数据的错误校正码; 在所述存储器(13)中维护指示输入数据在所述固态存储器(6)中的位置的元数据; 维护存储在每个数据写入位置内的数据的有效性的指示;以及 在擦除块之前,从包含该块中的写入位置的一个或每个所述组恢复有效输入数据,并将所恢复的数据重新存储为新输入数据。
2.如权利要求I所述的装置,其中所述控制逻辑(10)适于在将输入数据存储在每个组的所述写入位置期间的连续阶段,为当时存储在该组中的输入数据计算暂时错误校正码。
3.如权利要求2所述的装置,其中所述控制逻辑(10)适于将所述暂时错误校正码存储在所述固态存储器(6)中,以响应所述控制装置(7)的电力中断。
4.如任一先前权利要求所述的装置,其中所述控制逻辑(10)适于根据包括一个或多个组中的无效数据的写入位置的数量来选择要擦除的块,其中所述一个或多个组包含该要擦除的块中的写入位置。
5.如任一先前权利要求所述的装置,其中所述固态存储器件(5)具有多个存储通道,每个通道具有一组(8)固态存储单元(9),以及其中所述逻辑子区中的每个子区包括相应通道中的所述一组(8)单元(9)。
6.如权利要求I至4中的任一权利要求所述的装置,其中所述固态存储器(6)包括多个存储单元(9 ),以及所述逻辑子区中的每个子区包括相应存储单元(9 )。
7.如任一先前权利要求所述的装置,其中所述控制逻辑(10)适于使每个所述组在该组的每个存储块中包括一组连续写入位置。
8.如任一先前权利要求所述的装置,其中所述控制逻辑(10)适于使在一个逻辑子区中共享公共块的任何组均在每个逻辑子区中共享公共块。
9.如任一先前权利要求所述的装置,其中所述控制逻辑(10)适于根据预定准则动态地调整所述组中的写入位置的数量。
10.如任一先前权利要求所述的装置,其中所述元数据包括地址映射,所述地址映射指示相应输入数据块所关联的逻辑地址与指示所述固态存储器(6)中的写入位置的物理地址之间的映射。
11.一种固态存储器件(5),包括固态存储器(6),其包括可擦除块,每个块包括一组数据写入位置;以及如任一先前权利要求所述的控制装置(7)。
12.一种用于控制固态存储器件(5)的方法,其中固态存储器(6)包括可擦除块,每个块包括多个数据写入位置,所述方法包括 将输入数据存储在连续的多组数据写入位置中,每个组包括位于所述固态存储器(6)的多个逻辑子区中的每个子区内的一组可擦除块中的写入位置; 在所述输入数据内编入错误校正码,使得每个所述组包含该组内的输入数据的错误校正码; 在所述固态存储器件(5)的存储器(13)中维护指示输入数据在所述固态存储器(6)中的位置的元数据; 维护存储在每个数据写入位置内的数据的有效性的指示;以及在擦除块之前,从包含该块中的写入位置的一个或每个所述组恢复有效输入数据,并将所恢复的数据重新存储为新输入数据。
13.如权利要求12所述的方法,包括在将输入数据存储在每个组的所述写入位置期间的连续阶段,为当时存储在该组中的输入数据计算暂时错误校正码。
14.如权利要求13所述的方法,包括将所述暂时错误校正码存储在所述固态存储器(6)中,以响应所述器件(5)的电力中断。
15.一种计算机程序,包括导致计算机执行如权利要求12至14中的任一权利要求所述的方法的程序代码装置。
全文摘要
提供了用于控制固态存储器件(5)的方法和装置,其中固态存储器(6)包括可擦除块,每个块包括多个数据写入位置。将输入数据存储在连续的多组数据写入位置中,每个组包括位于所述固态存储器(6)的多个逻辑子区中的每个子区内的一组可擦除块中的写入位置。在所述输入数据内编入错误校正码,使得每个组包含该组内的输入数据的错误校正码。在存储器(13)中维护指示输入数据在所述固态存储器(6)中的位置的元数据。还维护存储在每个数据写入位置内的数据的有效性的指示。在擦除块之前,从包含该块中的写入位置的一个或每个所述组恢复有效输入数据。所恢复的数据接着被重新存储为新输入数据。
文档编号G06F11/10GK102656567SQ201080056683
公开日2012年9月5日 申请日期2010年12月16日 优先权日2009年12月17日
发明者E·S·埃莱夫特里乌, I·伊利亚迪斯, R·D·西德哲扬, R·哈斯, 胡晓宇 申请人:国际商业机器公司