CN104903842B - 用于在非易失性存储器中的异步裸芯操作的方法和*** - Google Patents
用于在非易失性存储器中的异步裸芯操作的方法和*** Download PDFInfo
- Publication number
- CN104903842B CN104903842B CN201380068977.0A CN201380068977A CN104903842B CN 104903842 B CN104903842 B CN 104903842B CN 201380068977 A CN201380068977 A CN 201380068977A CN 104903842 B CN104903842 B CN 104903842B
- Authority
- CN
- China
- Prior art keywords
- data
- layer
- naked core
- block
- naked
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0683—Plurality of storage devices
- G06F3/0688—Non-volatile semiconductor memory arrays
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/0292—User address space allocation, e.g. contiguous or non contiguous base addressing using tables or multilevel address translation means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7201—Logical to physical mapping or translation of blocks or pages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7202—Allocation control and policies
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7203—Temporary buffering, e.g. using volatile buffer or dedicated buffer blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7204—Capacity control, e.g. partitioning, end-of-life degradation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7205—Cleaning, compaction, garbage collection, erase control
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7208—Multiple device management, e.g. distributing data over multiple flash devices
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Read Only Memory (AREA)
- Memory System (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
公开了一种大容量贮存存储器***和操作的方法。存储器包括,接口,其适应于接收来自主机的数据,多个闪速存储器裸芯和控制器,其中所述控制器被配置为接收第一命令并且基于第一命令在所述多个裸芯之上同步地读取或写入数据,以及接收第二命令并且基于第二命令在每个裸芯中异步地并且独立地读取或写入数据。所述控制器可以以在用于所述多个闪速存储器裸芯的单独的一个的编程的最大单元编程数据。所述控制器可以是多个控制器,其每一个被配置为基于在所述子集中的裸芯特征选择裸芯的专门的子集中的哪个裸芯以写入数据。所述多个裸芯可以是多层、和每层多分区的闪速存储器裸芯。
Description
技术领域
非易失性存储器***——诸如闪速存储器——已经被广泛地采用以用在消费产品中。闪速存储器可以具有不同的形式、例如以可以在主机装置之间传递的便携式存储器卡或者作为嵌入在主机装置中的固态硬盘(SSD)。在闪速存储器中出现的两个通常的存储器单元架构包括NOR和NAND。在典型的NOR架构中,存储器单元连接在列方向上延伸的相邻的位线源极和漏极扩散(diffusion)之间,其中控制栅极连接到沿着单元的行延伸的字线。存储器单元包括位于源极和漏极之间的单元沟道区域的至少一部分之上的至少一个贮存元件。在贮存元件上的电荷的编程水平从而控制单元的操作特征,其可以通过将合适的电压施加到寻址的存储器单元来读取。
典型的NAND架构使用多于两个的串联连接的存储器单元——诸如16或32个的串——连同在单独的各位线和参考电位之间的一个或多个选择晶体管一起连接以形成单元的列。字线延伸穿过这些列中的许多列中的单元。在列中的单独的单元通过使在所述串中的剩余的单元被导通、使得流过串的电流取决于在寻址的单元中贮存的电荷的水平,在编程期间被读取并验证。
当每单元数据位的量最低时、诸如二进制闪存,闪速存储器通常提供最高性能,二进制闪存也被称为单级单元(Single Level Cell,SLC)闪存——其每单元贮存1位。被配置为每单元贮存多于一位的闪速存储器、被称为多级单元(Multiple Level Cell,MLC)闪存,每单元可以贮存2个或更多位的信息。尽管SLC闪速存储器通常以具有比MLC闪存更好的读取和写入性能(例如,速度和耐受力)著称,但是MLC闪存提供更多的贮存容量并且通常生产起来更加便宜。MLC闪存的耐受力和性能随着给定MLC配置的每单元位的数量的增加趋于降低。在使用这些类型的闪速存储器单元设计的闪速存储器装置中获得期望的性能、容量和成本的平衡中有持续的挑战。
发明内容
为了解决上述挑战并且在SSD中提供贮存灵活性,提供了存储器以及存储器管理的方法。
根据一个方面,一种大容量贮存存储器***包括,接口,其适应于从主机***接收数据;多个闪速存储器裸芯;和控制器,其与所述接口和所述多个闪速存储器裸芯通信。所述控制器被配置为,响应于从所述主机***接收第一请求,在所述多个闪速存储器裸芯中完全并行地读取或写入数据。所述控制器还被配置为,响应于来自所述主机的第二请求,与在所述多个闪速存储器裸芯的每一个中的同时发生的操作独立地并且异步地读取或写入数据。在不同的实现方式中,所述控制器可以被配置为以等于对所述多个闪速存储器裸芯的单独的一个编程的最大单位的量来管理数据。在其它实现方式中,所述控制器可以是多个控制器,其中所述多个裸芯成组地连接到多个控制器通道各自的一个,并且所述多个控制器的每一个仅与在所述多个控制通道的各自单一个上的多个裸芯的组通信。
所述***可以包括具有多个层的闪速存储器裸芯,其中多个层的每一个具有每单元不同的位的(bit-per-cell)数据容量和多个存储器块。在一实现方式中,所述多个闪速存储器层的每一个包括多个分区,并且在层中的所述多个存储器块的每一个编程的块被唯一地分类为在所述闪速存储器层中的多个分区的各自的一个中。在替换实现方式中,在多个控制器的每一个专门地管理与多个不同的控制通道的各自的一个相关联的闪速存储器裸芯的一部分的情况下,所述控制器可以独立地选择连接到其各自控制通道的裸芯,在所述裸芯中基于独立于接收的数据的主机LBA地址的标准来写入接收的数据。所述裸芯选择标准可以是具有最短的待定数据写入队列的裸芯,其中,对于具有多个层和每层多个分区的裸芯,所述选择可以是对具有与在特定层中的特定分区相关联的数据的类型的最短的队列的裸芯的选择。
根据另一方面,公开了一种在闪速存储器中进行后台维护过程的方法。所述方法包括,大容量贮存存储器***的控制器识别在所述大容量贮存存储器***中的多个闪速存储器裸芯中的闲置裸芯,其中所述多个闪速存储器裸芯的每一个包括多个层,并且在特定裸芯中的所述多个层的每一个具有每单元不同的位的容量。在识别闲置裸芯之后,所述控制器确定在所述闲置裸芯中的多个层中的层是否满足后台维护标准。所述方法然后包括,响应于确定层满足所述后台维护标准,在所述层中与由所述控制器管理的其它闪速存储器裸芯中的任何其它操作独立地并且异步地执行后台维护操作。所述后台维护操作的执行可以通过仅在满足所述后台维护标准的层中的块之间重新安置有效数据来实现。
在一个方面中,后台维护标准可以基于在所述层中的空闲块中的未使用的数据容量比所述层的总未使用的数据容量的比率,并且确定所述层满足所述后台维护标准可以仅当所述比率小于阈值比率时发生。每个维护操作可以仅包括仅将足够的数据从层中的回收块重新安置以填充在所述相同的层中的一个重新安置块。此外,对层满足后台维护标准的识别还可以包括在满足所述后台维护标准的层中选择分区,并且然后通过仅在所述层的分区中的块之间重新安置数据执行维护操作。
在其它实现方式中,所述方法可以包括大容量贮存存储器***的控制器将多个所述闪速存储器裸芯识别为闲置的、并且在识别的闲置裸芯的每一个中独立地和同时地选择合适的层,使得分开的维护操作可以在多个闲置裸芯后台维护周期中相互独立地同时地执行。还公开了被配置为执行所述方法的大容量贮存存储器***。
在又一方面中,大容量贮存存储器***包括:接口,其适应于从主机***接收数据;和多个控制通道。第一组的闪速存储器裸芯与所述多个控制通道中的第一通道通信,并且第二组的闪速存储器裸芯与所述多个控制通道中的第二通道通信,其中在闪速存储器裸芯的所述第二组中的裸芯的数量大于在所述第一组中的裸芯的数量。所述多个控制通道的每一个与逻辑块地址范围的独特的子集相关联,并且逻辑块地址的独特的子集的大小比用于第一组的闪速存储器裸芯的裸芯的数量的比率等于逻辑块地址的独特的子集的大小比用于第二组的闪速存储器裸芯的裸芯的数量的比率。
根据另一方面,大容量贮存存储器***包括多个闪速存储器裸芯和多个控制通道。所述多个控制通道的每一个连接到所述多个闪速存储器裸芯的各自独特的子集,并且所述多个控制通道的每一个与多个闪速存储器控制器的各自的一个相关联。所述多个控制通道的至少一个比所述多个控制通道的另一个与更多数量的多个闪速存储器裸芯相关联。所述多个闪速存储器裸芯定义用于大容量贮存存储器***的总物理贮存容量,并且在所述大容量贮存存储器***中的总逻辑贮存容量小于总物理贮存容量。逻辑块地址分解器(splitter)被配置为基于接收的数据的主机逻辑地址将从主机***接收的数据引导到所述多个控制器的每一个。此外,所述逻辑块地址分解器被配置为引导数据使得在所述多个控制通道的每一个中的逻辑容量比物理贮存容量比率的是相同的。
在另一方面中,公开了一种管理大容量贮存存储器***的方法。所述大容量贮存存储器***可以具有处理器和具有总物理贮存容量大于总逻辑容量的多个闪速存储器裸芯。所述闪速存储器裸芯的第一部分专门地与第一控制线和第一控制器相关联,并且所述闪速存储器裸芯的第二部分专门地与第二控制线和第二控制器相关联。闪速存储器裸芯在所述第一部分中的数量大于闪速存储器裸芯在所述第二部分中的数量。所述处理器从主机***接收与主机逻辑块地址相关联的数据,并且仅将与主机逻辑块地址的范围的第一子集相关联的接收的数据引导到所述闪速存储器裸芯的第一部分,并且仅将与主机逻辑块地址的范围的第二子集相关联的接收的数据引导到所述闪速存储器裸芯的第二部分。所述处理器保持在闪速存储器裸芯的所述第一部分中的第一总物理贮存容量与第一总逻辑容量的比率等于在闪速存储器裸芯的所述第二部分中的第二总物理贮存容量与第二总逻辑容量的比率。
根据另一方面,公开了具有接口的大容量贮存存储器***,所述接口适应于从主机***接收数据。所述***包括闪速存储器,所述闪速存储器具有多个层,其中多个层的每一个具有每单元不同的位的数据容量和多个存储器块。所述多个闪速存储器层的每一个包括多个分区,并且在层中的所述多个存储器块的每一个编程的块被唯一地分类为在所述闪速存储器层中的多个分区的各自的一个中。所述***还包括控制器,其与所述接口和所述闪速存储器通信,所述闪速存储器被配置为将从主机接收的数据引导到所述闪速存储器的多个存储器层中的多个分区的一个分区。所述***可以包括具有层和分区结构的多个存储器裸芯,并且还可以包括多个控制器实例——无论分开的硬件和软件控制器或者在相同的或共享的硬件上的分开的软件线程两者的哪一个——所述控制器实例的每一个分开地管理在所述存储器***中的分开的集合的多层裸芯。
在替换实现方式中,所述大容量贮存存储器***的控制器被配置为确定从所述主机***接收的数据的属性,并且基于确定的属性将所述接收的主机数据引导到在多个闪速存储器层的一个中的多个分区的一个分区中的块。与确定属性相反,所述控制器可以从主机***接收关于接收的数据的属性,并且基于所述接收的属性将接收的数据引导到所述多个分区的一个分区中的块。
附图说明
图1是可以实现本发明的方面的***的框图。
图2示出了图1的贮存装置的示例物理存储器组织。
图3示出了图2的物理存储器的一部分的扩大的视图。
图4A示出了根据一实施例的图1的贮存装置的多层存储器组织。
图4B示出了图4A的多层存储器的替换物理布置。
图5是示出用于操作多层存储器的方法的流程图。
图6是LBA地址空间以及可以在图1的***中使用的相关联的DLBA地址空间的示例。
图7示出了用于从主机接收的数据的LBA到DLBA的映射的示例。
图8示出了在DLBA地址空间中的数据重新安置操作以及在物理地址空间中的相应的更新块。
图9示出了接续图8的数据重新安置操作的第二数据重新安置操作。
图10示出了具有其中每个层包括多个分区的多层存储器组织的贮存装置的实施例。
图11示出了在具有多个分区的多层存储器的一层中的数据流模式(pattern)。
图12示出了用于具有两个分区的三层存储器的数据路径。
图13示出了用于具有两个分区的两层存储器的数据流路径。
图14示出了用于图13的两层、两个分区存储器的替换实施例的数据流路径。
图15示出了在八个不同的通道的每一个上具有相等数量的裸芯的NAND裸芯阵列。
图16示出了用于管理图15的NAND裸芯阵列同步裸芯管理布置,其中八个控制器的每一个实例在分开的通道上管理4个裸芯。
图17示出了具有存储器阵列和多个控制器实例的图4A的多层存储器***的替换布置。
图18示出了由多层存储器图17的***的STAR控制器实现的异步裸芯管理方案。
图19示出了在4个不同的通道的每一个上具有不相等的数量的裸芯的NAND裸芯阵列。
图20示出了LBA分组管理具有每通道不相等的裸芯分布的NAND裸芯的阵列的实施例。
图21示出了分配LBA组以在图19的不相等的裸芯布置中提供超额的容量的均匀分布的一实施例的表。
图22是用于实现图20-21的LBA分配的LBA分解器的框图。
图23是在多层裸芯中的同时的随机的和顺序的编程周期的可能的组合的示意图。
图24是示出用于在层之间移动数据或者在多层存储器裸芯的层中重新安置数据的决定过程的编程周期图表的实施例。
图25示出了在一个编程周期期间在多层存储器裸芯的每层中的主机写入和维护操作的交错的示例。
图26是图25的示例的主机数据写入和维护写入的替换交错模式。
图27是在裸芯中重叠的编程周期的示例。
图28是在多层存储器中的控制器的示例消息流程图。
图29是块回收周期的流程图。
图30是根据图29的方法的示例回收周期的框图。
图31是在多层存储器的裸芯层中的示例数据容量分布的示意图。
图32是在裸芯层中持续的后台维护操作之后图31的裸芯层中的容量分布的示意图。
图33是根据一实施例的在最大允许的数据容量处的裸芯层的示意图。
图34是在裸芯中的后台维护处理的流程图。
图35是示出根据一实施例的在多层存储器中的三层裸芯的组织的框图。
图36是示出在多层存储器中的联合封装的裸芯对的组织的框图。
图37是示出在多层存储器中的分开封装的裸芯对的组织的框图。
具体实施方式
在图1中示出了适用于实现本发明的方面的***。主机***100控制贮存进物理贮存装置102和从物理贮存装置102取回的数据。贮存装置102可以是嵌入在主机中的闪存装置,诸如固态硬盘(SSD)驱动、与主机分开的外部贮存装置、或者存储器卡或可拆卸地连接到主机100的其它可拆卸闪存驱动,并且可以通过诸如连接器103、104的机械的和电的连接器通信,或者使用任何的多个可用的有线的或者无线接口无线地通信。主机100可以是数据处理装置,诸如平板计算机、移动电话、个人数字助理、家庭网络路由器、个人计算机(PC)或者任何其它类型的数据处理装置。
主机***100可以被视为具有两个主要部件,在考虑贮存装置102的情况中,由电路和软件的组合构成。它们是应用部分105和与贮存装置102接口的驱动部分106。在PC中,例如,应用部分105可以包括运行文字处理、图像、控制或其它流行的应用软件的处理器109,以及用于在主机100上管理数据的文件***110。在相机、蜂窝电话或主要致力于进行单个功能集的其它主机***中,应用部分105包括操作相机以照相并贮存照片、操作蜂窝电话以打和接电话及其类似者的软件。
贮存装置102包括非易失性存储器107。非易失性存储器107可以以单层单元(SLC)类型的闪速存储器和/或多层单元(MLC)类型的闪速存储器的组合配置。贮存装置102还包括主机接口和控制器108,所述控制器可以包括处理器、用于操作处理器的指令以及逻辑块到物理块转换表。
非易失性闪速存储器可以以存储器单元块布置。存储器单元的块是擦除单位,即,可以被一起物理地擦除的最小数量的存储器单元。然而为了改善的并行性,所述块可以以更大的元块单位(metablock unit)操作。来自存储器单元的至少两个平面的每一个的一个块可以逻辑地链接在一起以形成元块。参考图2,示出了代表性的闪速存储器单元阵列的概念性示意图。四个平面或者子阵列200、202、204和206存储器单元可以在单个集成的存储器单元芯片上、在两个芯片(在每个芯片上两个平面)上或者在四个分开的芯片上。特定的布置对下述讨论不重要,并且在***中可以存在其它数量的平面。平面分别以矩形被分为图2中所示的存储器单元的块,诸如块208、210、212和214,位于各自的平面200、202、204和206中。在每个平面中可能有几十个或者上百个块。块可以逻辑地链接在一起以形成可以作为单个单位被擦除的元块。例如,块208、210、212和214可以形成第一元块216。被用于形成元块的块不一定被限制在它们各自平面中相同的相对位置,如在由块220、222、224和226构成的第二元块218中所示的。
如图3中所示,然后,单独的块为操作性目的被分为存储器单元的页。例如,块208、210、212和214的每一个的存储器单元被分别分为八页P0-P7。可替换地,在每个块中可以有16、32或者更多页的存储器单元。一页是在块中数据编程的单位,包含一次可以编程的最小量的数据。一次可以读取的数据的最小单位可以少于一页。图3中所示的元页328由四个块208、210、212和214的每一个的一个物理页构成。元页328包括四个块中的每一个的页P2,但是元页的页不一定必须具有每个块中相同的相对位置。元页是编程的最大单位。图2-3中所公开的块在这里被称为物理块,因为它们与上文讨论的物理存储器单元组有关。如这里所使用的,逻辑块是地址空间的虚拟单位,所述地址空间被定义为具有与物理块相同的尺寸。每个逻辑块包括与从主机100接收的数据相关联的一系列逻辑块地址(LBA)。然后,LBA被映射到数据被物理地贮存的贮存装置102中的一个或多个物理块。
现参考图4A,示出了图1的贮存装置102的一实施例,所述贮存装置102具有可以包括三层的闪速存储器单元402、404、406的非易失性存储器401,每个层具有每单元不同的位的容量。如所示,第一闪速存储器层402可以被配置为具有每单元单个位的容量的二进制闪存。第一闪速存储器层在这里也可以被称为X1闪存。第二闪速存储器层404可以被配置为MLC闪存,例如具有每单元两个位的容量,在这里也被称为X2闪存。第三闪速存储器层406也可以被配置为MLC闪存,但比第二闪速存储器层404具有每单元更大的位的容量。在该示例中,第三闪速存储器层被示出为每单元三位的MLC闪存,在这里也被称为X3闪存。
不同的闪存层402、404、406可以全部布置在相同的物理裸芯上,每个层可以被制造在各自分开的裸芯上,或者所述层可以被制造在单个闪存层裸芯和组合的闪存层裸芯的组合上。尽管示出了每单元一、二和三位的特定的位的配置,可以可设想其它组合,其中第一闪速存储器层比第二闪速存储器层具有每单元更低的位的配置,并且进而,第二闪速存储器层比第三闪速存储器层具有每单元更低的位的配置。图4B示出了图4A的非易失性存储器401,其中第一和第二闪速存储器层402、404位于一裸芯440上,并且第三闪速存储器层406位于分开的裸芯442上。此外,尽管在图4A和4B中示出了三层,更多数量的层可以实现在其它实施例中。
控制器424的动态随机存取存储器(DRAM)缓冲器408在接口434上接收来自主机100的数据,所述接口434诸如串行高级技术附件(也被称为串行ATA或SATA)接口。DRAM缓冲器408——在控制器的处理器424的指导下——将在接口434处从主机接收的数据引导到贮存装置中的多层非易失性存储器401。在贮存装置中的DRAM写入缓冲器408与第一和第二闪速存储器层402、404通信。此外,第一闪速存储器层402与第二闪速存储器层404通信并且第二闪速存储器层404与第三闪速存储器层406通信。
控制器424可以实现在单个集成的电路芯片中,并且可以与非易失性存储器401中的不同的层402、404、406在一个或多个命令通道436之上通信。控制器可以具有链接控制器424中的非易失性存储器432、DRAM 408、接口434和电路430的其自己的内部总线,其中所述控制器424包含起始化(“启动”)***的代码,并且其中所述电路430计算并检查用于传递通过在多层闪速存储器401和主机之间的控制器的数据的错误校正码(ECC)。诸如这里所述的用于实现存储器管理指令的控制器可以执行的代码可以被贮存在多层闪速存储器401中,例如在第一闪速存储器层402中。关于多层存储器装置的版本的额外的细节可以在于2011年3月31日提交的美国申请序列号13/077,487和公开为美国公开号2012/0254574中找到,其中,上述申请的全部内容通过引用结合于此。
参考图5,公开了由贮存装置的控制器实现的将数据移动进闪存层和/或在闪存层之间移动的示例性方法。在一实现方式中,当从主机写入接收数据时(在502处),控制器选择存储器层以接收来自主机的数据。所述选择可以基于在DRAM处从诸如SATA接口的接口接收的来自主机的数据是否是顺序的或非顺序的(在504处)。例如,如果接收的数据用主机LBA地址顺序地寻址,控制器可以直接将数据从DRAM引导到第二闪速存储器层(在506处)。相反,如果数据是随机的或者非顺序地寻址的数据,该数据可以从DRAM直接被引导到第一闪速存储器层(在508处)。在一实现方式中,如果接收的数据的主机LBA数据地址对于足够填充多层存储器中的元块的整个元页的数据的量的是顺序的,在任一时间从主机接收的数据被认为是顺序的。
在闪速存储器层的每一个中,贮存装置的控制器监控闪速存储器层转移(transfer)标准。例如,闪速存储器层转移标准可以是在闪速存储器层中是否有足够的空闲块剩余以及包含在闪速存储器层中的有效数据的总量。一旦控制器确定空闲块的数量小于闪速存储器层的最小阈值,控制器接下来确定在闪速存储器层中有效数据的量是否在转移阈值之上。当在闪速存储器层中的空闲块的数量在最小阈值之下,并且在该闪速存储器层中的有效数据的总量达到阈值量,控制器可以使数据从该闪速存储器层转移到下一闪速存储器层。因此,如果用于转移到下一闪速存储器层的标准在第一闪速存储器层中被满足,先前编程的数据的块被控制器选择,从所述选择器将数据复制到第二闪速存储器层,以便清空在第一闪速存储器层中的空间(在510、512、506处)。类似地,一旦第二闪速存储器层满足其用于转移到下一闪存层的标准,在第二闪速存储器层中的块可以将数据转移到第三闪速存储器层以清空在第二闪速存储器层中的块(在516、518、522处)。
用于确定何时将数据从源存储器层转移到目标层的标准——所述标准可以包括具有小于最小数量的空闲块和阈值量的有效数据——对于每个层可以是相同的或者不同的。最后一层——在该示例中第三闪速存储器层——将不具有可以将数据发送到的下一更高容量的MLC层并且将因此不具有分配的转移标准。
在一示例中,用于第一和第二闪速存储器层的转移标准阈值可以识别所述层当前包含至少预定百分比、诸如90%的有效数据。在其它实施例中,转移标准可以是当前在层中仅有阈值数量的空闲块、以及在该层中的块可能被选择以用于将其的数据转移到下一存储器层之前所述层包含至少预定百分比的有效数据两者。阈值数量的空闲块可以是诸如一个或多个空闲块的最小数量。被选择以用于从源重新安置到下一闪速存储器层的数据优选地来自具有最少最近编程的或者“最冷的”主机数据的块。控制器可以基于为所讨论的层中的先前编程的块的每一个所维持的编程信息的次序选择该块。
在一实现方式中所述的,所有接收的主机数据可以在第一闪速存储器层中被移动或者发送到后面的层之前,初始地被发送到第一闪速存储器层,如将在下文中详细描述的。在另一实现方式中,当接收的数据是以随机的LBA次序时,从主机接收的数据从DRAM 408被引导到第一闪速存储器层402(在线410处),或者当接收的数据是以顺序的LBA次序时,从DRAM 408直接到第二闪速存储器层,绕过第一闪速存储器层(在线412处)。控制器可以在合适的时间处逐步地将数据从第一闪速存储器层402移动到第二闪速存储器层404(在线414处),以及从第二闪速存储器层到第三闪速存储器层(在416处)。此外,优选地进行垃圾收集以在每个闪速存储器层中创造新的空闲块,使得数据在闪速存储器层中被回收(在线418、420和422处)。
为了实现上述方法和结构,控制器可以在每个闪速存储器层中维持数据块的链接的列表以记录在该层中那些块被编程的次序。此外,控制器在每个层中可以实现被称为贮存地址重新映射(STAR)的地址转换算法以进一步增强数据转移的效率和存储器用量。
尽管可以使用任何的一些已知的存储器管理技术以实现这里所述的多层存储器***,这里描述了被配置为使用STAR技术的控制器。STAR的一个优点是在随机的写入应用中改善存储器***的性能,STAR具有将短期爆发的数据写入到装置的逻辑块地址(LBA)地址空间中的不相干的区域的需求的特征,这在个人计算机的固态硬盘(SSD)应用中是成熟的。在STAR技术的一实现方式中,将主机数据从由主机分配的第一逻辑地址映射到在第二逻辑地址空间中的连续的逻辑地址的块。随着与地址的完全编程的块相关联的数据被废弃,开始数据重新安置程序,其中控制器在具有最少量的有效数据或者具有少于阈值量的有效数据的层中选择先前完全编程的块,并且重新安置在那些块中的有效数据以清空那些块以用于写入更多的数据。被重新安置的数据以在源块中发生的不管主机分配的逻辑地址而需要数据重新安置的次序、被连续地写入到在相同的存储器层中的重新安置块。以此方式,通过不特意地合并由主机分配的逻辑地址运行可以减少开销(如在典型的垃圾收集中)。贮存地址表(SAT)被用于跟踪由主机分配的逻辑地址和第二逻辑地址之间的映射以及由于在存储器层中的后续的重新安置的映射中的后续的改变。
与从主机接收数据、或者将数据从第一层向下一更高的每单元位容量层转移的同时,控制器通过从具有有效和废弃数据两者的先前编程的块复制有效数据并且然后循环利用所述块而回收块,其中所有的有效数据从所述块被复制。该块回收程序可以是以规范的垃圾收集技术的形式,在所述技术中多组数据在所接收的相同的地址运行中被保持在一起并且被合并为新的数据,或者如下进一步讨论的,该块回收程序可以是重新安置程序,其中数据没有被合并到相同的地址分组中。垃圾收集或者重新安置程序优选地由控制器在闪速存储器层的每一个中独立地实现。有效数据复制过程(垃圾收集或者重新安置)在每个层中实现,使得在过程中移动的数据优选地被维持在相同的闪速存储器层中。如图5所示,控制器查看在第一层中是否存在足够数量的空闲块并且,如果不够,在块上对在第一层中的数据进行复制操作以合并有效数据并创造额外空闲块(在510、514处)。该数据复制过程也同样在第二和第三层中独立地执行(在516、520、524、526处)。
上述方法优选地在相同的闪速存储器层中重新安置数据,并且仅当当前的层几乎装满有效数据时才将数据移动到后续的层。此外,通过在来自源层中最不是最近编程的块的层之间移动数据,数据趋于从第一闪速存储器层被过滤到第三闪速存储器层,使得“热”数据趋于驻留在第一闪速存储器层中,较不积极地更新的数据趋于驻留在第二闪速存储器层中,并且“冷”数据主要驻留在第三和最后闪速存储器层中。如果数据非常最近地被更新则数据被认为是“热”的,由于更加有可能的是该数据被积极使用并且在短时间段中将被再次更新。
参考图6-9,示出了贮存地址重新映射(STAR)地址转换算法的示例。在LBA地址空间602中的主机空闲的集群图和在第二逻辑地址空间中的空闲的集群图的假想的区—这里被称为装置逻辑地址空间或者DLBA地址空间604—在给定的时间处可以被表示为如图6所示。在LBA地址空间602中,空闲的集群606分散在基本上随机的位置处。在DLBA地址空间604中,两个空闲块608是可用的并且有三个先前编程的块610具有不同数量的废弃(空闲的)集群606。
当主机接下来具有数据要写入到贮存装置时,主机分配LBA地址空间602无论其是否可用。图7示出了贮存地址重新映射算法如何将可用的空闲块170之一分配为写入块702,以及每个LBA地址是如何被映射到在写入块702中可用的DLBA空间中的顺序的集群。在DLBA空间中的写入块702以LBA地址被写入的次序被写入,而不管LBA地址位置。为了说明的方便,在该示例中假设,主机使用的空闲的LBA集群的时间次序与地址次序相同,但是控制器实现贮存地址重新映射算法会以LBA地址被使用的时间次序在写入块702中分配DLBA地址,而不管LBA地址数字次序。数据在一个或多个DLBA运行中被写入在写入块中。DLBA运行是在相同的LBA中映射到连续的LBA地址的一组连续的DLBA地址。DLBA运行必须在DLBA地址空间604中的块的边界终止。当写入块702变得被装满时,空闲块608被分配为下一写入块702。
DLBA块与闪速存储器的物理地址空间706中的块704一致,并且因此DLBA块大小与物理地址块大小相同。在DLBA写入块702中的地址的布置然后也与在物理地址空间中的相应的更新块的布置相同。由于这样的一致,在物理更新块中不再需要分开的数据合并(通常被称为垃圾收集)。
在普通的垃圾收集操作中,逻辑地址的块通常总是被重新组装以维持在逻辑块中的特定的范围的LBA地址,其也反映在物理块中。更具体地,当使用普通的垃圾收集操作的存储器***接收对应于特定物理块的区段的信息的更新的区段时,存储器***将分配在物理存储器中的更新块以接收更新的区段或多个区段并且然后将来自原始物理块的所有剩余的有效数据合并为更新块的剩余。以此方式,规范的垃圾收集将为特定的LBA地址范围保持数据的块,使得对应于特定地址范围的数据将总是被合并到共同的物理块中。下文将更加详细讨论的重新安置操作不需要将在相同的地址范围中的数据合并。相反,重新安置操作进行地址重新映射以创造可以是来自各种物理块的数据的集合的新的数据块,其中数据的特定LBA地址范围不被特意地合并。
如之前所提到的,操作STAR算法以确保空闲块的充足供应可用于顺序的写入算法操作。STAR算法通过将有效数据从具有有效和废弃数据的混合的先前编程的块重新安置到被称为重新安置块802的特殊的写入块而管理空闲块的创造(图8)。当前选择的以用于重新安置的先前编程的块被称为回收块。
现参考图7-8,示出了数据重新安置过程的示意图。贮存地址重新映射算法指定空闲块作为重新安置块802,数据将从选择的先前编程的块被重新安置到所述指定的空闲块以创造额外的空闲块。以有效数据在所述回收块中出现的次序选择在回收块(图7的块A)中的有效数据并且重新安置到重新安置块802中顺序的和连续的地址,以将回收块转换为空闲块608。在物理地址空间706中的相应的更新块704也被分配以接收重新安置的数据。与用于从主机接收的新的数据的更新块704一样,用于接收重新安置的数据的更新块704将不再需要垃圾收集操作以合并有效数据,因为重新安置操作已经完成了在DLBA地址空间604中的合并。
从如图9中所示的剩余的先前编程的块中识别下一回收块(图8的先前编程的块B)。具有最少有效数据的先前编程的块再一次被指定为回收块,并且回收块的有效数据被转移到开放的重新安置块中的顺序的位置。还实现了更新块704中的物理地址的并行分配。再一次,在映射到重新安置块802的物理更新块704中不需要数据合并。在先前编程的块上的重新安置操作作为后台操作进行,以便以足够于补偿被指定为写入块的空闲块的消耗的速率创造空闲块。图6-9的示例示出了写入块和重新安置块如何可以被分开地维持——连同在物理地址空间中的各自分开的更新块——以用于来自主机的新的数据以及用于来自先前编程的块的重新安置的数据。用于相关联的从主机接收的新的数据的新的写入块的分配只有当当前写入块被完全编程时才进行。类似地,新的重新安置块优选地仅在先前的重新安置块已经被完全编程时才分配。新的重新安置块优选地仅包含空白的容量,即在分配时仅与准备被擦除或者已经被擦除的废弃数据相关联,并且不包含有效数据。
在上述实现方式中,来自主机的新的数据与将仅接收来自主机的其它新的数据的写入块相关联,并且在重新安置操作中从先前编程的块重新安置的有效数据被移动到将仅包含来自一个或多个先前编程的块的有效数据的重新安置块。在其它实现方式中,新的数据和重新安置的数据可以被转移到单个写入块而不需要分开写入和重新安置块。
通过控制器的将先前编程的块选择为回收块可以通过选择任何先前编程的块而实现,其中所述先前编程的块与在阈值(其可以是固定的阈值或者诸如用于当前的先前编程的块的平均有效数据的量的可变的)之下的有效数据的量相关联的先前编程的块的列表上,或者可以通过基于可用的先前编程的块的特定的排级(ranking)(基于与先前编程的块相关联的有效数据的量)的选择而实现。这里所公开的可用于***的STAR技术的版本以及方法的额外的细节可以在2008年2月22日提交的US申请序列号No.12/036,014并出版为US公开号No.2008/0307192中找到,其中,前述应用的全部内容通过引用被结合于此。
在图6-9中所描述的重新安置操作将相对“冷”数据从块(“热”数据从所述块变成废弃的)重新安置到包含类似的相对冷的数据的重新安置块。这具有创造相对热和相对冷的块的分开的总体的效果。将被回收的块总是被选择为包含最少的量的有效数据的热块。通过减少需要被重新安置的数据的量,热块总体的创造减少了存储器应激(stress)因素。
在多层存储器和方法的实施例中,控制器108各自闪速存储器层的每一个中实现图6-9中所示的STAR技术。在图4A的贮存装置的替换实施例中,示出了多层存储器***的使能STAR的版本,其中第一闪速存储器层比第二闪速存储器层具有每单元更少的位的容量,并且第二闪速存储器层比第三闪速存储器层具有每单元更少的位的容量。在图4A的示例中已经示出了每单元1-位、2-位和3-位的闪速存储器层,尽管可以使用其它增加的系列的每单元位存储器层,以及以其它增量的方式。
存储器层中的分区
在一实施例中,如图10所示,闪速存储器的层1002、1004和1006的每一个可以包括多个分区,其中每个分区被分配到特定类型的数据。在图10的示例中,每层有两个分区,被分配给顺序的数据的顺序的分区(1008、1012、1016)以及被分配给随机的数据的随机的分区(1010、1014、1018)。在每个存储器层中的NAND块被永久地分配到一层,但是对于操作的每个周期可以动态地分配到任一分区。这里将分开地详细地描述操作周期。尽管在图10中示出了每层两个分区,在其它实施例中可以实现每层多于两个分区,其中在一层中的每个分区与不同的数据类型相关联。不是所有的分区必须出现在所有的层中,并且在一层中分区的大小可以基于用于特定数据类型的数据的量在每个操作周期中动态地变化。
在下述示例中,顺序的数据是对于由用于贮存装置的闪存管理算法处理的至少一元页大小的数据具有顺序的主机逻辑块地址(LBA)的数据。例如,如果由贮存装置的闪存管理算法管理的元页大小是128k,然后至少128k的顺序地寻址的运行将被认为是顺序的数据并且被路由到期望的层的顺序的分区(1008、1012、1016),而具有少于128k的顺序的LBA的数据将被存储器层的随机的分区处理。128k阈值只是以示例的方式提供,而对于不同的闪存管理***元页大小可以是不同的。
在其它实施例中,与在合格化(qualify)进入数据是顺序的或随机的的运行中分析进入数据的LBA相反,在控制器中的闪存管理算法可以从主机接收关于数据的其它数据类型特征的信息,所述数据然后将许可在不同的存储器层支持其它或者额外的分区。有关其它数据类型特征的该信息可以可能是用于数据类型,所述数据类型诸如临时数据、长期数据、读取/写入延迟、在启动过程中所需要的数据等。关于这些数据类型的信息可以通过控制器确定或者可以通过“主机提示(hint)”提供,在所述主机提示中,主机可以通过使用定义这些其它数据类型的协议的数据向贮存装置传递特定的属性。
具有层和分区的闪速存储器装置创造具有二维的贮存矩阵。贮存装置的物理存储器具有根据存储器类型(例如,每单元单个位的(X1)、每单元两位(X2)以及每单元三位(X3))细分为多个层1002、1004、1006的物理存储器,而在每个层中的贮存的数据根据由控制器确定的或由主机提供的数据类型被分为分区。
参考图11,示出了图10的具有随机的和顺序的分区的3层存储器的一层1102的一般结构。层1102包括两个可用的写入块,顺序的写入块1104和随机的写入块1106,以用于从层的外部写入的数据。被指定为顺序的和随机的数据被引导到不同的写入块。两个写入块的实例不需要被同时地开放,或者可能不允许被同时地开放。例如,在一时间处仅一块可能被允许被开放以用于在X3层中的编程。类似地,可以存在两个可用的重新安置块——一个用于顺序的数据1108并且另一个用于随机的数据1110——以用于来自相同的层中重新安置的数据。被指定为顺序的和随机的数据当一开始写入到层时,被引导到各自不同的重新安置块。在一时间处仅一个重新安置块将开放,并且在一实现方式中,重新安置块1108、1110可能不在相同的时间处开放为X3层中的写入块。
被写入为顺序的和随机的块的块的标识被分开地维持。用于顺序的和随机的数据的块的两条链(chain)1112、1114记录它们的块被编程的次序。这些链l112、1114被指定为用于如关于图10所讨论的层的顺序的和随机的分区。单个池的空闲块1116提供用于在顺序的或随机的分区中分配为写入或重新安置块的块。
当在空闲块的池中的块的数量达到最小阈值水平、或者在层中的有效数据的体量超过阈值量(诸如层的LBA容量)时,必须在层中进行维护操作。
维护操作可能要求数据在层中从选择的回收块1118、1120被重新安置到相应的重新安置块1108、1110。在一实施例中,管理数据在层中的重新安置使得数据保持在层中的相同的分区中。因此,数据通常被从随机的重新安置输出(RRO)端口路由到随机的重新安置输入(RRI)端口,或者从顺序的重新安置输出(SRO)端口路由到顺序的重新安置输入(SRI)端口,取决于在其中进行操作的分区。但是,在一些实施例中允许的是,配置数据路由以将来自两种分区的重新安置的数据组合到单个重新安置块中。
可替换地,维护操作可以要求数据从在选择的分区中的最不是最近编程的块移动—指定为顺序的移动块1122或随机的移动块1124—到在下一层中的相应的写入块(例如从X1到X2)。数据通常被从随机的移动输出(RMO)端口路由到下一层的随机的写入输入(RWI)端口、或者从顺序的移动输出(SMO)端口路由到下一层的顺序的写入输入(SWI)端口、取决于在其中进行操作的分区。尽管在一个分期中的数据优选地仅重新安置到相同的层和分区中的其它块,或者移动到在不同的层中的相同的分区中的块,所计划的是,在一些实施例中,来自不同的分区的数据可以被组合为在下一层中的单个写入块。
参考图12,示出了图10的具有两个分区的三层存储器(在这里被称为Trio裸芯1200)的数据流的一实施例。控制器可以支持层之间的数据转移算法——在这里被称为在三层实现方式中的Trio算法—所述算法将允许使用所示出的路径1202-1232,但是在一实施例中在Trio裸芯1200中不使用路径1206、1214和1224。
层1(X1)可以被用于执行来自主机的随机的写入事务和延续顺序的写入事务,尽管来自主机的规范的顺序的写入事务直接在层2(X2)上执行。因此层1保持数据块的顺序的和随机的分区两者。因此将数据移动到层2或层3的每个维护操作包括单个类型的数据(顺序的或随机的)。随机的数据可以在层1中重新安置,但是在图12的实施例中的层1中没有顺序的数据的重新安置。
层2维持顺序的和随机的分区两者,并且因此将数据移动到层3(X3)或者在层2中重新安置数据的每个维护操作包括单个类型的数据(顺序的或随机的)。层3维持顺序的和随机的分区两者,并且因此在层3中重新安置数据的每个维护操作包括单个类型的数据(顺序的或随机的)。因为没有下一更高的层,所以数据不能够从层3移动。此外,在一实施例中,在任何时间处在层3中仅单个块可以被开放以用于编程。
上述关于图12的描述假设Trio裸芯1200具有上述每单元X1、X2和X3位的密度。在其它实施例中,裸芯的三层布置可以布置在分开的裸芯上,或者可以仅有双层裸芯。用于仅有X1和X2层(在这里被称为Duo2裸芯1300)的两层裸芯的数据流的示例在图13中示出。类似地,用于仅有X1和X3层(在这里被称为Duo3裸芯1400)的两层裸芯的数据流的示例在图14中示出。图13和14中的与图12中相同的数据路径被给定相同的数字,以便于与图12比较。在Duo3裸芯1400中,来自主机的顺序的和随机的写入事务两者在层1上执行,因为数据不能够直接从主机编程到X3层。因此层1包括数据块的两个分区。因此将数据移动到层3的每个维护操作包括单个类型的数据(顺序的或随机的)。随机的数据可以在层1中被重新安置,但是在层1中没有顺序的数据的重新安置。裸芯1400的层3正是被配置为Trio裸芯中的三层存储器。
对于在多层存储器中具有特定层和分区布置的闪存裸芯,有可以由主机写入操作触发的固定数量的类型的维护操作。主机写入和维护操作的组合被称为编程集。如在表1-3中所示,成列了被布置为管理两个数据分区的Trio裸芯、Duo2裸芯和Duo3裸芯中的所有可能的编程集的一实施例。在表1-3中,编程集的第一个字母表示由主机写入的随机的数据(R)或顺序的数据(S)。接续R或S的第一数位表示主机数据被编程的层。第二、第三和第四数位——当出现时——表示数据在连续的随之发生的维护操作期间被编程的多个层。例如,在表1中被指定为“R1233”的编程集指,随机的主机数据被引导到在Trio裸芯的层1中的随机的分区,所述Trio裸芯触发将数据从层1移动到层2、将数据从层2移动到层3并且在层3中重新安置数据的维护操作。
表1:在Trio裸芯中的编程集
表2:在Duo2裸芯中的编程集
表3:在Duo3裸芯中的编程集
关于在每个裸芯中的多个层的特征,其中每个层具有与某些类型或某些属性的数据相关的多个分区,在不同的实施例中,块所属于的分区可以由控制器或者由提供与贮存在块中的数据的LBA相关联的属性的主机确定。可替换地,存储器***可以基于在定义的操作期间的存储器***的状态的属性确定块属于什么分区。多层、多分区结构和控制器可以处理数据块从主机到各自期望的初始层和分区的路由,以及数据在层中的重新安置和数据在层之间的重新安置。在层中的多个块可以用来自所述层之外的源的数据写入,并且多个块的每一个可以写入在层中的不同的分区中。
选择在维护操作期间在多层中用于重新安置数据或移动数据的块,可以使用用于上文关于图4-5描述的多层裸芯的相同的标准完成多分区裸芯。此外,数据的重新安置和移动可以来自不同的分区,而不是触发一个或多个维护操作的主机数据被引导进的分区。因为分区是动态的并且在层中的空闲块被按需分配到需要额外的空闲块的无论什么样的分区,维护操作可能仅将裸芯层看作整体以用于块移动到其它层或者在所述层中重新安置。
除了前述块选择标准以外,可设想用户维护操作的可替换的块选择标准。为了选择在层之间移动的块,替代于基于块被编程的次序选择最不是最近编程的块,可以基于在先前编程的块中的数据的年龄选择移动块。换句话说,基于在每个先前编程的块中的用于每个数据元件(所跟踪的区段、集群或其它子块数据粒度)的年龄数据选择具有最老的平均数据先前编程的块。在先前编程的块中的数据的年龄可以由控制器作为映射逻辑和/或物理地址的贮存地址表(SAT)或其它列表的一部分维持在控制数据结构中。在一实现方式中,用于数据的年龄信息可以是相对年龄,其中用于在块中的数据的特定片的年龄被记录为表示其最开始从主机被写入到贮存装置的次序的数字。假设诸如先前所讨论的转移标准被满足,控制器将然后选择具有最老的数据的平均年龄的块。用于选择移动块的该替换技术的一个优点是,它可能为在闪速存储器层之间分离“冷”和“热”数据作更全面的工作。使用最不是最近编程的块作为唯一标准可能错过已经在闪速存储器层中被重新安置更老的数据并且因此现在是更加最近先前编程的块的一部分。
在其它替换实施例中,返回参考图11,除了在存储器层中具有分开的回收块1118、1120和移动块1122、1124,分开的回收和移动块在每个层中可以仅用移动块(未示出)替代,其中在层的移动块中的部分数据专用于转移到下一更高的容量的层并且数据的剩余部分被重新安置到层的各自的重新安置块1108、1110。在该替换实施例中,选择移动/回收块(在用于Trio裸芯的第一和第二层的每一个中)的组合可以通过选择最不是最近编程的块,或者通过选择具有最老的平均数据的块而实现。从选择的组合的移动/回收块转移的数据量可以是固定的量或百分比,例如在块中的有效数据的百分之五十可以被指定以用于转移到下一层并且剩余的百分之五十可以在层中重新安置。可以基于由在用于存储器***的控制数据结构中的控制器跟踪的数据的年龄,作出哪百分之五十从识别的移动/回收块转移的选择。
在其它替换实施例中,关于是否将数据转移到下一层的额外的考虑可以与上述编程次序或者数据年龄的考虑重叠。例如,在一实施例中,如果该数据被频繁地读取,通过将较老的(即“较冷的”)数据维持在较低的每单元位容量闪速存储器层而提高性能也可以是有益的。还可以在诸如在用于存储器***的控制数据结构中的多层、多分区存储器中维持用于数据或数据块的读取计数。读取计数信息可以被用于补充数据转移标准,使得如果在该数据上的读取操作的数量在预定阈值之上,将不选择来自最不频繁地编程的块或者具有最老的数据的平均年龄的块的数据以用于转移到下一更高的每单元位层。
异步裸芯管理
在每个层中具有分区的多层存储器已经在上文中在具有单个控制器的单个存储器的上下文中描述,但是多层和每层多分区存储器的概念可扩展到诸如在图15和16中示出的存储器裸芯的阵列,其中所述图15和16示出了存储器裸芯的阵列1500。例如,在4x8的阵列1500中,4个NAND裸芯被布置在8个不同的通道1502的每一个上。
在一实现方式中,在贮存装置中可以有8个分开的控制器,每个控制器被分配一连串的4个裸芯,使得分配到控制器的裸芯每一个在不同的通道上。控制器可以是每一个具有其各自处理器的分开的物理控制器,或者每一个执行用于与控制器实例相关联的各自的裸芯的控制器软件的不同的软件实例的一个或多个处理器。图16示出了同步裸芯管理布置,其中每个控制器(NAND管理器)1602在各自不同的通道上并行控制4个裸芯。诸如图16中所示的布置可以提供非常有效的持续的顺序的写入的处理,因为大小为穿过由控制器管理的裸芯的每一个的条(strip)数据的元块可以有效地并行编程顺序地寻址的数据。
在同步裸芯管理算法中,由相同的控制器管理的多个NAND裸芯同步地进行编程和擦除操作。在这样的架构中,单个控制器处理多个裸芯,裸芯的每一个被分配到分开的通道,其中来自多个裸芯的多个块链接为元块,所述元块变为NAND编程管理的基本单位。在该示例中,数据以128KB大小的元页为单位并行编程,其中32KB在它们分开的控制器通道上被写入在四个裸芯的每一个上。从前端到NAND的用于在***中的所有水平处写入数据的事务,具有与该NAND元页相同的数据长度,即128KB。
在同步架构中,一旦写入操作开始,所有四个裸芯被认为是“繁忙”的直到在该4个裸芯集中的最慢的一个裸芯完成写入其32KB的数据。这可以在当最慢的裸芯进行时阻止或防止主机在所述集合中的剩余裸芯上开始其它操作(编程或读取活动)。可能从在用于128KB写入的一个控制器之下将在分开的通道上的4个分开的裸芯捆绑在一起而产生的另外的问题在于,完整的写入要求元块由来自4个裸芯的每一个的块构成。因此,如果裸芯比在4个裸芯组中的其它裸芯具有较少的良好的块,控制器仅具有用于写入操作的高达具有最少数量的良好的块的所述组中的裸芯的容量的存取。由于128KB写入大小,对于该组的其它裸芯中的任何多于在对于该组具有最少良好的块的裸芯中良好的块的数量的额外的良好的块不能被用于写入操作。
在接收的写入命令是用于较小的、随机的数据写入的情况中,效率在同步裸芯管理架构被降低。例如,如果有持续的随机的写入,大的事务大小可能导致主机接口的阻塞,由于在单独的NAND管理器(控制器的情况)1602与它们各自的操作保持繁忙的时间之间的显著的不同。此外,图16的大的元块大小以及并行通道裸芯控制对于具有少量数据的读取和写入的混合也可能是低效的。在图16中的每个写入事务将使4个裸芯保持繁忙并且从而阻止4个裸芯任何待定的读取事务。
在一实施例中,替代于同步上述控制器布置,其中来自多个裸芯的多个块链接为控制器同步地编程或擦除的元块,计划了异步架构。如图17和18所示,在异步架构中每个控制器被分配到在单个通道上的裸芯(图17)或者单个控制器被分配到所有通道上的所有裸芯。图17中的存储器***1700包括许多与图4A相同的特征,但是示出了NAND裸芯的阵列1702,其中与单个控制器通道1704相关联的NAND裸芯的列由分开的控制器1706控制。每个控制器情况可以在逐块裸芯的水平上处理数据编程并且STAR控制器的每一个的情况可以基于其可用性在单个通道上选择用于特定操作的最佳的裸芯。
在图17的多个控制器的实施例中,控制器1706可以使用上文关于图6-9所讨论的STAR地址转换算法1708并且使用将在下文中结合这里所讨论的异步裸芯管理算法1712更加详细地讨论的编程安排算法1710以及Trio算法1714以用于管理数据的移动到已在上文提到的裸芯存储器层、在所述裸芯存储器层中和之间的移动。在单个控制器的存储器***中,其中单个控制器1706在一个或多个通道1704上管理所有NAND裸芯,控制器是与具有与图17的多个控制器的实施例相同的算法(1708、1710、1712、1714)的相同类型的控制器。单个控制器实施例对在NAND阵列1702中的所有数据只管理用于裸芯和通道的完整的地址映射,而不是接收在与特定控制器/通道相关联的特定的LBA地址范围中的数据,其中关于具有每个通道分开的控制器的多个控制器的实施例来讨论所述特定控制器/通道。为了说明的方便,并且为了避免重复,下文所描述的特征基本上在图17的多个控制器布置的上下文中解释。但应理解的是,这里所公开的所有特征也同样地可以应用到单个控制器的实施例。
在本发明的一实施例中,STAR控制器1706包括异步裸芯算法1712,其中以在一个裸芯中可以实现的最大编程并行性为单位管理数据编程的并行性以及贯穿***的写入事务,所述单位在2平面裸芯中通常是32KB。每个STAR控制器1706与仅在一个通道1704上的裸芯相关联,而不是与如在同步架构中的分开的通道上的裸芯相关联。以此方式,当需要时多个裸芯可以完全地并行操作,或者可以异步地操作,其中每个裸芯进行不相干的操作。此外,异步操作允许STAR控制器对于其在相同的通道上管理的裸芯的每个集选择最适用于接收数据的裸芯,例如具有将被写入的最短队列的数据的裸芯。在单个控制器的实施例中,单个控制器1706管理在所有通道上的所有裸芯并且可以选择最适用于接收数据的任何裸芯。
异步裸芯算法可以提供用于主机命令的执行的减少的延迟和在具有不规则的I/O大小或者混合的读取/写入特征的工作量中的改善的性能。当异步裸芯算法相比于同步裸芯算法可能有时间、可存取性和阻止(即减少的操作阻止)的益处时,在NAND存储器中对I/O操作的独立的管理对于随机的和顺序的工作量两者增加平均裸芯使用和平均性能。因为相比于同时地协调在多个裸芯(例如在上述同步算法中的四个裸芯)中的分区,在一时间时管理在一个裸芯中的分区更加方便,所以异步裸芯算法可能能够更好的管理裸芯的每个层中的多个分区。此外,当读取和写入操作的组合正被接收时,可以有对读取操作的在存储器***中的裸芯的改善的可用性。
与STAR控制器相关联的每个裸芯的异步操作允许在每个裸芯中的所有良好的块被激活。每个裸芯的性能因此通过使整个物理开销对其是可用的而被最大化,从而最大化驱动的性能。当对比同步裸芯算法时,可以看到对在给定裸芯中的块的增加的使用的潜力的示例,诸如在图18中所示的,其中每个STAR控制器在相同的通道上被分配到4个不同的裸芯(也见图17)。为了说明的方便,图17的多个STAR控制器1706的仅两个在图18中被复制并且数个元件被省略。
随着数据进入到存储器***,存储器***将数据引导到缓冲器以用于与合适的主机LBA范围相关联的STAR控制器并且STAR控制器将从其正管理的裸芯组中选择最佳的裸芯。在图18中,四个分开的写入命令1802—每一个在该实施例具有在与特定STAR控制器相关联的LBA范围中的32KB的数据—被引导到STAR控制器STAR0 1706A和STAR7 1706B。使用异步裸芯管理算法1712,STAR0控制器1706A在用于每个命令的相同的通道上从其正管理的裸芯1804中选择任何可用的单独的NAND裸芯并且将用于每个写入命令1802的数据路由到各自的裸芯1804。由STAR0控制器1706A的NAND裸芯1804的选择独立于由STAR7控制器1706B或在存储器***中任何其它控制器(用于引导到那些其他控制器的数据)管理的分开的裸芯的裸芯选择。如在图18中所示,对于数据命令1-4由STAR0控制器1706A选择的裸芯的次序分别是NAND裸芯2、4、1和3。STAR控制器1706B,基于其具有的用于其管理的NAND裸芯的状态信息,选择NAND裸芯1804的不同的次序(NAND裸芯4、1、3、2)。
在每个STAR控制器中的Trio算法1714将用于每个裸芯的状态信息提供到异步裸芯算法1712,所述状态信息指示是否可以发出用于裸芯的主机数据编程事务。状态信息可以基于用于在NAND驱动1806中的裸芯的队列的事务的数量,以及是否已经满足维护复制操作与主机数据编程操作的要求的交错。基于该状态信息,STAR控制器的每个实例可以使用其异步裸芯算法1712以从其前端队列将主机数据写入事务发出到由该STAR控制器管理的任何裸芯,其中所述STAR控制器准备好接收所述事务。
由异步裸芯算法1712实现的裸芯选择标准可以包括,STAR控制器仅当从Trio算法1714提供的裸芯的状态信息,指示与待定事务相同种类(例如随机的或者顺序的数据类型)的维护复制操作与主机数据编程操作的所要求的交错已经被满足时,选择裸芯。其它标准—其可以被单独或者组合使用——可以包括仅当用于目标种类(例如,用于随机的写入事务的队列)的未完成的事务的数量不超过特定的限度时选择裸芯;选择具有用于目标种类的最低数量的未完成的事务的可用的裸芯;优选地选择具有积极用于目标种类的最低的编程周期类型的可用的裸芯;和/或选择具有最低逻辑填充度的可用的裸芯。
尽管特定的STAR控制器管理具有仅在主机LBA地址空间的特定的子集中的LBA的数据,在LBA和在STAR控制器实例中的NAND裸芯数量之间没有相关性。类似地,在NAND裸芯数量之间没有相关性,所述NAND裸芯数量由连续的STAR控制器使用以顺序地编程在横跨由两个STAR控制器管理的分开的裸芯的一条LBA中的连续的LBA元页。尽管在异步架构的一个实施例中每个STAR控制器在一个特定控制器通道上独立地管理其各自的裸芯,异步裸芯算法也可以在STAR控制器上对数据转移和NAND命令执行实现完整的并行性。在LBA元页上的NAND读取或编程操作可以在STAR控制器的每一个中执行,其中具有完整地同步数据转移和NAND存取操作。这允许与横跨所有STAR控制器的LBA地址条有关的读取和编程操作的完整的同步执行,诸如在操作的顺序的读取和写入模式中发生的。
可以在相同的通道上同时在两个裸芯中(但不是完全地并行)执行读取和编程操作,所述读取和编程操作与横跨与实现异步裸芯管理的STAR控制器相关联的LBA范围的两个连续的LBA条有关。转移到两个裸芯或者从两个裸芯转移的数据必须被序列化,因为它们共享相同的通道。在两个裸芯中的读取或编程操作因此重叠,但不是完全地并行。
上述异步裸芯操作是用于具有每个STAR控制器不相等的数量的裸芯的操作的使能特征。因此,在诸如下述的多层存储器***的设计中的总的物理过度供应(overprovisioning),可以用一个裸芯或者裸芯对的粒度来定义,可以最小化驱动的成本用于特定的水平的性能。
由在STAR控制器的每一个中运行的异步裸芯算法1712接收的输入的类型可以包括读取、写入和修剪命令。在具有每层多个分区的多层驱动中使用异步裸芯算法的实施例中,接收的写入命令可以进一步被分为用于不同的数据类型的写入命令,所述数据类型诸如上述随机的和顺序的数据类型。在一实施例中,某些事务的执行可以被排序使得读取事务被立即处理,而写入和修剪命令以接收的次序被处理。在裸芯元页是32KB的实施例中,读取事务可以用于最大达到一个裸芯元页的任何多个2KB,写入事务是一个元页并且修剪事务具有一个元页的数据有效负载长度。
尽管异步裸芯算法可以实现在具有多层和多分区存储器***的存储器***中,在其它实施例中,异步裸芯管理算法也可以实现在具有包括或者不包括分区的单个层裸芯的更简单的存储器***上。
每个通道不相等的数量的裸芯
使用诸如上述的异步裸芯管理协议的闪速存储器***的一个益处是一次一个裸芯地扩展存储器,使得存储器***可以具有每通道不相等的数量的裸芯的能力。换句话说,STAR控制器的一个实例比在存储器***中的STAR控制器的任何其它实例可以与不同数量的裸芯相关联,使得每STAR的裸芯的数量可以是不相等的。如前所述地,在包括多个存储器裸芯的一些闪速存储器***中,高写入性能通过将来自多个裸芯的块链接为元块实现,其中用增加的并行性(诸如用同步裸芯管理架构)将数据编程到所述元块。因此,在***中裸芯的总数是元块形成在其上的裸芯的数量的倍数,并且不可能精确地控制物理容量过度供应、也被称为物理开销。
返回参考图15,在NAND阵列1500中看到每个通道相等数量的裸芯的示例,其中8个通道1502的每一个包括4个NAND裸芯。在同步裸芯管理方案中,例如,诸如在图16中所示的控制器1602所采用的同步裸芯管理算法,8个控制器1602的阵列,每个控制器管理来自阵列1500的4个裸芯,每一个裸芯在不同的通道1502上使得由每个控制器1602的写入操作使用穿过所有4个NAND裸芯的元页条以用于增加的并行性。由于该类型的同步裸芯管理需要多个裸芯,所以不能够处理每个通道不相等的数量的裸芯。
使用异步裸芯管理算法通过允许具有连到存储器通道的不相等的数量的裸芯的操作允许以一个的精度控制在闪速存储器***中裸芯的数量通过允许用。通过异步裸芯管理算法的裸芯水平粒度控制可以帮助管理SSD的总物理开销。闪存贮存装置的总物理开销被定义为(物理_容量-LBA_容量)/LBA_容量。
由于一些原因在闪存贮存装置中需要一些物理开销。它允许在驱动中累积废弃数据的空间以减少在垃圾收集期间的数据重新安置的量。物理开销还允许用于贮存控制数据和***数据的空间,并提供用于错误管理的多余的容量。此外,物理开销可以允许使用额外的数据贮存层,所述额外的数据贮存层使用具有比初级数据贮存层(在例如在Duo驱动中的X1层)中更少的每单元位的NAND技术,诸如包括诸如上述Duo2或Duo3裸芯的两个裸芯层的SSD,或者具有3个裸芯层的Trio驱动中的X1和X2层。
用于存储器***的随机的写入能力通常与在存储器***中可用的物理开销有关。因此,额外的物理开销可以帮助改善存储器***的性能。在诸如垃圾收集的维护操作中,控制器需要在块中重新安置有效数据并且去做该操作的开销时间取决于包含有效数据的块的百分比。通过更多的过度供应(例如物理空间和逻辑空间的更高的比率),可能更少的有效数据需要从给定块被重新安置。
在存储器***中的可以受益于具有额外的物理容量(超过固定的逻辑容量)的其它任务,包括诸如存储器***的错误宽容度可以被改善的校验方案的任务。如果,对于进行写入异或(XOR)操作并且贮存结果的每一页,然后***对于整个页的丢失可以是宽容的(其中错误校正码(ECC)贮存的数据仅能够校正较小的数据的丢失)。为这个或其它任务可以使用超额的物理容量。如果***由于诸如校验的原因需要额外的物理贮存,每个通道包括不相等的数量的裸芯的能力允许为特定的需要定制的物理容量的增加,并且不需要如在上述同步算法中的增加在该示例中用于元块写入所必须的整个4个裸芯的集。仅增加单个裸芯到任何一个通道的能力可以提供成本和空间的节省。
每个通道不相等的裸芯的布置的示例在图19中示出。在图19的示例中,存储器阵列1900是四个通道阵列(见通道C0-C3),其中在通道C1-C3中4个NAND裸芯1902并且在通道C0中5个NAND裸芯1902。在该示例中,假设分开的STAR控制器被分配到每个通道,并且STAR控制器结合异步裸芯算法能力关于图17-18被示出和描述。为了说明的方便,在图19中的每个裸芯用管理特定裸芯2002的STAR控制器数字(S0-S3)标记。
使用异步裸芯管理算法,多个裸芯可以在由一个STAR控制器管理的一个通道上异步地操作。由于在特定存储器***中的不同的STAR控制器不需要具有相同的逻辑容量,可以在STAR控制器中不对称地增加裸芯计数并且物理开销可以以如图20中所示的一个裸芯的倍数调整。为了处理在STAR控制器之中的逻辑块地址(LBA)的分配并且当在一个或少于所有的STAR控制器中增加物理容量时调整用于整个存储器***的物理开销,可设想将LBA分配到STAR控制器的方案。
参考图20和21,示出了用在具有图19所示的不相等的裸芯分配的NAND阵列1900中的一个这样的LBA分配方案。为了管理LBA分配,LBA元页2002成条状以被称为LBA组2004的集合穿过连续的STAR控制器。虽然在图19中额外的物理容量来自于仅被增加到第一通道C0的裸芯1904,整个存储器阵列1900受益于通过在裸芯的每一个之上相等地充分分配固定量的逻辑地址空间的过度供应。
在图20中的LBA组的结构镜像分配到图19中的STAR控制器(即到每个通道)的裸芯中的不对称。如所示,在到连续的STAR控制器的LBA分配中的中断出现在LBA组2004之间的边界处。以此方式,固定数量的LBA地址在前端处被分配到STAR控制器的每一个,使得物理开销百分比对于每个STAR控制器是相同的。例如图19的LBA地址2002的分配也在图21-22中以主机LBA(在裸芯元页中)数字2102、相关联的STAR控制器ID2104(在该示例中S0-S3)以及LBA元页2104在各自STAR控制器中的偏移2106的形式被示出。在该每个通道不相等的裸芯布置中对分配到各种STAR控制器的LBA的管理可以通过由在存储器装置中的处理器执行的LBA分解器功能2200实现,所述存储器装置输出用于与接收的LBA相关联的数据(用于每个裸芯元页)STAR ID和STAR偏移。
编程周期方案
编程周期是在一个裸芯中的爆发的预定编程操作,在所述裸芯中进行如上文表1-3中所述的单个完整的编程集。这使得定义的量的主机数据被编程在一个裸芯层中的写入块中,并且如果需要在其它裸芯层的每一个中将进行预定随之发生的维护编程操作。
在多个存储器的层的每一个中所要求的维护操作需要是提前知道的以允许主机数据写入和维护操作的最优的安排。用于维护操作控制的现有方案对主机行为是反应式的而不是主动式的。
在一实施例中,这里所述的编程周期方法是用于在存储器层的每一个中安排编程操作以减少当从主机编程数据时建立的最大延迟的方案。在被称为编程周期的编程爆发中管理编程安排,所述编程周期可能横跨所有存储器层。维护操作被预先确定以创造空闲块以替代在编程周期期间将新的数据写入到层中所消耗的那些,并且每个编程周期将写入新的主机数据与预定维护操作交错。在编程周期期间,固定量的主机数据可以在维护操作之中被相等地编程、分散。这是为了防止主机命令在环境的任何罕见组合中经历来自存储器***的不可接受地长响应时间。在一个实现方式中,在编程周期期间,主机数据和用于维护操作的数据的爆发根据驱动的当前的操作状态以稳定的速率被交错。
裸芯——诸如上述具有每层两个分区的Trio裸芯——通常具有两个同时激活的编程周期,所述两个编程周期之一必须被用于不同的分区的一个。这里一个周期可以被激活以用于随机的主机数据并且另一个用于顺序的主机数据。因为裸芯通常由于物理限制在一时间处仅能够执行单个操作,在裸芯中的两个编程周期的交错也被明确地控制。
在一实施例中,为实现编程周期方法——其中主机数据操作和维护操作被布置在预定组合中以对各种可能的情况负责——使用共同的编程单位。如果编程操作仅影响裸芯的一层,或者如果在元块中数据的量在裸芯的所有层之间是恒定的,则用于特定裸芯层的单个元块的编程单位将是可接受的。但是,因为编程操作可能导致在不同的层上的级联操作——其中在不同的层中有每单元不同的位的密度——在一层中的数据的元块少于在相同的裸芯中的每单元更高的位的密度的层中的数据的元块。因此编程周期可以处理的数据的单位可以是主机数据的元块(如果主机数据写入操作将不导致在其中接收到主机数据的层之外的维护操作),或者可以是大小为与裸芯的所有层有效地工作的编程单位。
如这里所使用的,编程单位(PU)是用于裸芯的每个类型(即Trio、Duo2和Duo3)的恒定的数据量。PU包括固定数量的元页,所述固定数量的元页是在裸芯层(X1、X2&X3)中的单独的元块类型中的元页数量的最低公共倍数。这允许在编程周期期间被写入到层或者在层之间移动的数据总是在所述数据被编程的层中的元块大小的倍数。用于特定裸芯类型的PU大小的示例在表4-6中示出以用于Trio、Duo2和Duo3裸芯。
表4:在Trio裸芯中的PU的定义
表5:在Duo2裸芯中的PU的定义
表6:在Duo3裸芯中的PU的定义
由在Trio裸芯和Duo2裸芯的层的每一个中的元块的整体数量构成的元页的最低公共数是516元页,而在Duo3裸芯中的最低公共数是258元页。因此用于Trio和Duo2的PU是516元页并且用于Duo3的是258元页。
使用适合于特定裸芯的PU,用于特定裸芯的STAR控制器可以确定预定数量的编程周期类型的哪个应被执行以处理一个PU大小的数据的下一主机写入到存储器装置。参考图23,示出了在用于3-层和2-层存储器裸芯的Trio算法的实施例中的可能的编程周期类型的完整集合。这些编程周期类型对应于在上文表1-3中定义的编程集。在一实施例中,由于裸芯可以同时执行随机的编程周期和顺序的编程周期,相反种类的周期已经在图23中的每个裸芯中被任意地配对。特定周期在操作的存储器中的裸芯中在任何给定的时间处配对,所述操作的存储器将取决于待定的主机数据写入的类型以及裸芯的各种层的状态(例如,空闲块的数量和有效数据对LBA容量的比率等等)。
现参考图24,示出了用于STAR控制器实现Trio算法的决定过程的图表2402,基于裸芯层状态(例如,空闲块的数量以及与在每个层中的LBA容量相关的有效数据的量)。在图24中列出的编程周期类型对应于在表1中定义的编程集。STAR控制器在图24所示的裸芯层状态的限制中优选地选择尽可能结合最少数量的裸芯层的编程周期类型。如前所述地,在任何给定层中是否移动或重新安置数据的决定标准可能不同或者是相同的。此外,特定标准的阈值的值(例如,最小数量的空闲块)在每个层中可以是相同的或不同的。在图24的N块中或者N个PU中的术语“N”指必须完全填充在回收周期中以实现一个空闲块的净收益的重新安置块的数量。可以被用于在选择的编程周期中链接裸芯-层的数据路径在图12中被描述。如前所述地,STAR控制器在裸芯中可以具有两个激活的编程周期,所述编程周期的一个在一时间处用于一个分区,其中两个编程周期的每个与另一个交错。
编程安排方案
如上所述,下一主机数据写入所需要的编程周期在下一主机数据写入之前被确定。当编程周期已经根据图24中可用的编程周期类型被定义时,已经提前知道在编程周期的过程中将在裸芯-层的每一个中被编程的元页的精确数量。但是,在一实施例中,裸芯通常仅具有两个同时激活的编程周期(其中一个用于分区之一),所述周期被完全异步地起始。对于被起始的编程周期的维护编程操作和主机数据编程操作之间的交错比率因此必须考虑在已经被激活的编程周期中的未完成的编程操作。对用于激活编程周期的交错比率不作改变。
采用根据下述原则的编程交错方案以用于裸芯中的两个编程周期的交错操作,以创造主机数据流和维护编程操作。在裸芯中的编程周期可以仅在相同的种类(随机的或顺序的)的之前的周期已经完成之后被起始。编程周期可以在当相反种类(随机的或顺序的)的编程周期已经在裸芯中被激活时在裸芯中被起始,并且两个周期可以重叠。
当重叠的编程周期在相同的裸芯-层中具有维护操作时,在第一周期中的维护操作必须在维护操作可以在第二周期中开始之前完成。当重叠的编程周期在不同的裸芯-层中具有维护操作时,在裸芯层中的维护操作可以同时进行。在编程周期中起始的主机数据写入操作必须与在相同的周期中的维护操作和在重叠的激活的周期中的未完成的维护操作两者交错。
当编程周期被起始时,分开的交错比率被定义为周期中的每个主机数据写入操作必须进行的在每个裸芯-层中的最小数量的维护操作。在编程周期的执行期间,主机数据写入操作仅在当每个之前的主机写入操作已经进行的在每个裸芯-层中的维护操作的数量大于或等于所要求的用于每个裸芯层的交错比率时被允许。
此外,如果编程周期在当后台周期在其它分区中激活时被起始,为新的编程周期建立的交错比率必须包括在该周期中的所有维护操作以及在后台周期中的所有未完成的维护操作,如在下文中关于后台周期的部分更加详细地讨论的。
由STAR控制器执行的以用于其管理的每个裸芯的编程安排算法的一个目标是以尽可能地提供统一的写入主机数据的速率的方式一起安排在每个编程周期的主机数据的写入和维护操作。这通过实质上地减少主机数据被写入的速率使得主机写入和维护写入均匀地分布而实现。在控制器中的编程安排算法将许可控制器平衡在编程周期或重叠的编程周期期间在裸芯中正被写入(主机或维护写入)的多个PU的。编程安排算法可以补偿主机数据可以在特定裸芯处被接收的未知的速率以及在特定裸芯上同时运行的编程周期。作为编程安排方法的一部分,控制器将许可维护操作在编程周期中继续,如果主机数据被延迟使得对于给定编程周期维护操作可能有时超过所要求的维护操作比主机写入的比率,但是将会将主机写入操作限制在维护操作比主机写入操作的要求的比率中,使得不应该有赶上裸芯中的维护操作的需要。
在一个编程周期期间(在该示例中,如在图23和24中列出的R1233周期)在每个层中的主机写入和维护操作之间的交错的示例在图25和26中被示出。在图25中,假设X1、X2和X3层的每一个在分开的裸芯上并且用于事务的PU是516元页。因此,在图25中的所有层中的编程可以同时发生。但是,写入到X1层的主机数据的量,与在不同的裸芯的X2和X3层中的同时的维护活动交错,以便将X1主机数据写入在X3层中的更慢的维护处理所需要的时间之上展开。因此,主机数据的一个PU不是一次全部被写入的,而是相反在图25中在时间中间隔开并且与编程周期所需要的X2和X3维护操作交错,使得主机数据的页写入的每个层(X1、X2、X3)比上在特定的编程周期期间的维护数据的页写入的交错比率被维持并且不超过。在控制器中的编程安排算法将允许控制器减少在PU中的主机页写入(这里到X1)的速率,使得每个层的交错比率永不超过在编程周期中的主机写入操作比维护操作的数量。如果所有三层在相同的裸芯上,如图26中所示的,则到每个层的写入被交错,但是以错列的方式,因为在单个裸芯上在一时间处仅可以执行一个操作的一般物理限制。
在图27中示出了在特定裸芯中的编程周期的重叠的示例。在图27中,假设裸芯是Trio裸芯(3层)并且由管理特定裸芯以用于选择实现哪个编程周期的控制器使用的决定过程是图24的。图27中所示的连续的编程周期是R1233编程周期PC1、S23编程周期PC2和R123编程周期PC3。为了该示例的目的,PC1当在裸芯中没有其它编程周期被激活时被起始,并且从而以仅与自身相关的交错比率操作。在该情况中,数据的1个PU被写入到X2层并且3个PU的数据被写入到X3层。因此X2:主机交错比率是1并且X3:主机交错比率是3。
在200个元页的主机数据已经在PC1中被编程之后类型S23的编程周期PC2被起始(任意地)并且与PC1重叠。在X3中的必须与PC2中的主机数据编程操作交错的维护操作的数量是1464元页,包括在PC1中未完成的948元页和在PC2中516元页。因此X3:主机交错比率是2.84(=进入X3的剩余的维护元页/进入X2的主机数据=1464/516=2.84)。
当PC1完成时类型R123的编程周期PC3被起始,但是PC3的在X3中的维护操作不能开始直到用于PC2的维护操作已经完成。但是,由于没有重叠的编程周期正在进行X2中的维护,在X2中的维护操作可以立即开始。此时,X2:主机交错比率是1并且X3:主机交错比率是2。
如果主机数据的到达速率匹配或者超过对于编程周期的交错比率所要求的进行维护操作的速率,周期以主机数据元页与维护元页的爆发的统一的交错继续。在该情况中,当维护数据的最后元页已经被编程时编程周期完成。
但是,如果主机数据的累积的到达速率低于根据其要求的交错比率可以由编程周期容纳的,当维护数据的最后元页已经被编程时所有要求的主机数据不会已经被编程。因此编程周期没有完成。编程周期保持开放,其中其主机数据写入块开放,但是其中维护未激活。进一步的主机数据可以被写入到编程周期而不需要交错的维护操作。编程周期仅当所有要求的主机数据已经被编程时(就是说,取决于编程周期类型,整个元块或者整个PU已经被编程时)才完成。
上述编程周期方案的一个优点是,它许可必要的维护操作的提前决定以在后续的主机写入之前清空编程单位大小的空间。作为编程安排方案的一部分,在将进行一个编程周期的多个裸芯中的一组链接的层被识别。链接的层可以在一个裸芯或者在多个裸芯中。过程可以允许在裸芯中的层仅结合用于特定类型的数据(例如,随机的或顺序的)的一个编程周期中并且可以允许在裸芯中的层被结合在用于不同类型的数据的两个编程周期中。
提前知道在多个存储器的层的每一个中要求什么维护操作以允许主机数据写入和维护操作的最优的安排是有益的。用于维护操作控制的现有方案通常对主机行为是反应式的而不是主动式的。在一实施例中,主机数据编程操作和将数据重新安置到不同的块的维护编程操作被提前确定以用于将要开始的一系列的操作。每个编程序列结合固定长度的主机数据(例如,一个编程单位)和可变长度的维护数据(多个编程单位)。用于所有类型的维护编程相对于主机数据编程的所要求的交错比率被提前确定并且仅当足够的维护编程已经完成以满足所有的交错比率要求时主机数据编程被许可。该机制允许主机数据编程操作在维护编程操作之中被统一地安排。因此,对主机数据的反应性的最小水平逐个编程周期的被维持在编程周期上。
将主机数据的编程进存储器***以及在存储器***中的块之间的数据的重新安置的交错的方法可以包括预先确定在操作序列期间将被编程主机数据的量和重新安置的数据的量。对于将被用重新安置的数据编程的块的每个类型,预先确定其相对于主机数据的要求的编程交错比率。在编程周期期间,控制器可以确定当前的相对于正被编程的每一层的主机数据的累积的编程交错比率,允许如果每一层的当前的累积的编程交错比率超过其要求的编程交错比率时编程主机数据。
该累积的编程交错比率是在特定的编程周期期间用于主机数据的页写入比维护操作写入的比率。如果在编程周期的接收主机数据中有延迟,控制器将许可维护操作写入的数量超过交错比率,但是不会允许主机数据写入超过交错比率。当有同时重叠的编程周期在一层中发生时,特定要求的交错比率可以是修改的交错比率,诸如在图27中对于编程周期PC2(比率=2.84)计算的,所述编程周期PC2重叠在裸芯层的第二分区中进行中的编程周期。在那些实例中,由控制器执行的编程安排算法将比较在周期期间的累积的交错比率和修改的交错比率以确保在周期中的写入操作不超过修改的交错比率。
参考图28,示出了存储器图17的***的一部分以说明异步裸芯算法2802和Trio算法2804在每个STAR控制器2806中如何一起操作以安排将由NAND驱动2808执行的编程和复制事务。Trio算法2804定义并起始编程周期并且管理在所述编程周期中的维护操作。在NAND裸芯中的编程操作通过由异步裸芯算法2802发出的主机数据编程事务(写入事务2810)和由Trio算法发出的复制事务2812两者触发以用于维护操作。通过NAND驱动2808将这些转换为描述符以控制数据路径和NAND组件。
Trio算法预先确定必须与主机数据编程操作一起进行的任何维护操作,并且编程安排算法管理主机数据编程2816和维护复制事务2812的交错以用于由NAND驱动2808的执行。
当异步裸芯算法2802可以将主机数据编程事务与维护复制事务2812交错时,由Trio算法2804创造来自Trio算法2804信号的使能信号2814。当由Trio算法2804发出的维护元页复制事务的数量除以在当前的编程周期中的主机数据编程事务2816的数量的比率大于或等于每个层的要求的交错比率时,主机数据事务2816被使能。
在NAND驱动2808中编程事务比复制事务可以具有更高的优先级,并且从而在队列的复制事务之上获得执行的优先权。这意味着,当由Trio算法2804使能时由异步裸芯算法2802发出的主机数据编程事务2816将被作为下一事务执行,在已经出现在NAND驱动2808中的流水线的维护复制事务2812之前。Trio算法还提供裸芯状态2818和维护状态2020信息以允许异步裸芯算法2802使能在Trio裸芯中的后台操作。
关于在STAR控制器2806中的安排操作,下列事务由STAR控制器2806传递到NAND驱动:读取、编程、擦除和复制。在NAND驱动中用于这些事务的执行优先级可以如下:裸芯的未完成的读取事务相比于该裸芯的任何其它事务类型具有绝对优先级。裸芯的未完成的编程、擦除&复制事务以下列优选的优先级执行:编程、擦除、复制。
当构造用于在一个轨迹中的并行操作的一组描述符时,NAND驱动2808可以推翻该优选的优先级次序。对于裸芯-层的相同类型的事务必须以它们被发出到NAND驱动器的次序完成。对于裸芯-层的不同类型的事务事务可以以与它们被发出到NAND驱动器的不同的次序完成。用于不同的裸芯-层的相同类型的事务的编程步骤的执行在裸芯-层应该相等地循环。
在一实施例中,尽管由定序器描述符起始的NAND操作不能被打断,在一些情况中发送到NAND驱动的事务可以被打断。在X1或X2裸芯-层中的事务不能被打断,但是用于正在进行的X3裸芯-层的复制事务可以被相同的裸芯的任何未完成的读取或编程命令打断。未完成的读取或编程命令可以在当前正在进行的编程步骤结束处执行。
关于来自NAND驱动2808的响应,下列响应可以由NAND驱动提供到由STAR控制器2806向其发送的事务。对于读取事务,当所有数据在DRAM中时发送单个响应。对于擦除事务,当块擦除完成时发送单个响应。对于在X1或X2中的编程事务,可以发送下述响应:当与事务的执行有关的所有描述符已经被加载到数据路径硬件时发送第一响应;以及当编程操作完成时发送最终响应。对于在X1或X2中的复制事务,下列响应可以被发送:当数据已经读取并转移到DRAM并且与事务的执行有关的所有描述符已经被加载到数据路径硬件时发送第一响应;以及当编程操作完成时发送最终响应。对于在X3中的复制事务,下列响应可以被发送:当数据已经被读取并转移到DRAM并且与用于事务的第一编程步骤的执行有关的所有描述符已经被加载到数据路径硬件时发送第一响应;当第一编程操作完成时发送第二响应;当第二编程操作完成时发送第三响应;以及当第三编程操作完成时发送最终响应。在不同的实施例中,可以在到事务的最终响应已经由NAND驱动器发出之前设置可能是未完成的每一裸芯的每个类型的事务的最大数量。
如上所述,STAR控制器的实例不知道STAR控制器的任何其它实例的存在或状态。但是,NAND驱动以最大化在NAND存储器中的数据吞吐率并且最小化在单独的NAND裸芯中的闲置时间的目标安排向定序器硬件发出的描述符。在轨迹中成组的操作应该具有类似的期望期间。在一实现方式中,应注意下述规则。缓存的编程和读取命令应该在任何可能的地方使用,以允许在裸芯中同时的数据转移以及NAND编程或读取操作。在轨迹中的描述符应该与单个类型的操作(即读取、编程或擦除)有关。在与编程操作有关的轨迹中的描述符应该被用于单个NAND类型(即,X1、X2或X3)。在于编程操作有关的轨迹的描述符应该被用于在X2中的相同的页类型(较低或较高的),或者在X3中的相同的编程步骤类型(LM,模糊的或清楚的)。
回收周期方案
如上所述,编程周期使得定义的量的主机数据在一个裸芯-层中的写入块中被编程的并且如果需要在用于每个裸芯的各种裸芯层中进行预定随之发生的维护编程操作。两个类型的维护操作,有效数据在裸芯层之间移动有效数据以及通过从选择的封闭的块(具有废弃数据的先前编程的块)在层中重新安置有效数据而回收块,指定的回收块已经被特别描述。
返回参考图8-9,示出了在STAR控制器中在回收操作中的数据的一般移动,其中来自各种选择的回收块的有效数据被连续地移动到重新安置块802。在多层裸芯中的每个裸芯层包括多个分区的实施例中,回收操作将数据从与来自特定分区的数据相关联的块重新安置到一个或多个重新安置块,所述重新安置块被专门地分配给来自在相同的层中的该分区的数据。被清空有效数据的回收块可以然后被擦除并且取决于对特定数据类型的对空间的当前的需求在空闲块的池中可用于裸芯层并且之后被用于任意分区。
在一些类型的NAND存储器中,可能有在回收由在该层中的块中的废弃数据占据的容量的操作结束处,在存储器的层中不留有被部分地编程的块的要求。此外,所期望的是,对于每一组回收操作获得至少一个空闲块的净收益以用于实现上述编程周期的效率。
回收周期方案在这里被定义为可变期间的回收操作,所述可变期间的回收操作具有足以满足在回收操作结束处不留有被部分编程的重新安置块以及获得的标准和获得至少一个空闲块的净收益两者的期间。在一实施例中,回收周期是在编程周期中的一组维护操作,其使得数据从在裸芯-层中的一个或多个回收块被重新安置到在相同的裸芯-层中的一个或多个重新安置块。擦除的回收块的数量必须比被分配和填充的重新安置块的数量大至少一个,就是说,回收周期必须显示至少一个空闲块的净收益。
参考图29,回收周期可以包括用于特定裸芯的控制器将来自用于合适的裸芯层空闲块的池的块分配为重新安置块(在2902处)。来自一串选择的回收块的所有有效数据被重新安置的到当前的重新安置块(在2904处)。当重新安置块变为被充满时(在2906处),如果在空闲块的池中的块的数量比在回收周期开始时的数量高一个或更多,回收周期完成(在2908处)。如果当前的重新安置块的任一个还没有被充满,或者还没有一个空闲块的净收益,则将数据从回收块到重新安置块的重新安置继续。
因此,对于在层中的重新安置,控制器优选地从在存储器层中的多个源块进行数据重新安置操作以在相同的存储器层中填充整数的目标块,这在存储器层中创造至少一个空闲块。这与用于在裸芯的层之间移动数据的维护操作相反。在该实例中,从在源存储器层中的多个块的数据移动操作填充在目标存储器层中的一个块,这在源存储器层中创造至少一个空闲块。
在回收周期中,整数的重新安置块必须被填充,但是数据可以从非整数的回收块中重新安置。根据图29所述的方法进行的回收周期的示例在图30被示出。参考编程时间轴,第一重新安置块(重新安置块1)从空闲块的池被分配,并且来自回收块1的有效数据被重新安置到重新安置块1。当回收块1在其所有有效数据已经被移动之后被然后清空时,空闲块的净收益是0,因为一个空闲块被用于重新安置块1并且清空回收块1仅保持现状。相应地,在图30中的回收周期以重新安置块2和重新安置块3的分配继续,并且来自其它指定的回收块的有效数据的连续的重新映射填充重新安置块3,同时清空四个回收块(回收块1-4)以用于1个空闲块的净收益。应注意的是,为了完全地填充重新安置块3,一些但不是所有来自回收块5的有效数据是必要的。一旦完全地填充整数的重新安置块并实现一个空闲块的净收益的的标准已经完成,从回收块5重新安置有效数据进行到一部分时,回收周期停止。在回收块5中剩余的有效数据可以在后续的回收周期中被重新安置。尽管图30的示例示出了需要5个回收块以充满3个完整的重新安置块并且实现一个空闲块的净收益的情况,回收周期方案将适应回收和重新安置块的不同的比率以实现两个标准。需要从不同的回收块移动的有效数据的不同的量将改变完成回收周期所必要的回收和重新安置块的数量。
回收周期被用在编程周期和后台周期两者中。在后台周期中,如下所述,仅一个重新安置块被填充并且没有对一个空闲块的净收益的要求。
后台周期方案
在一实施例中,除了在写入命令待定的同时的编程周期期间发生的维护操作(例如,在给定裸芯层中的块回收或者从一层到下一层的数据的移动)以外,可设想修改的后台周期方案。在裸芯中的后台操作的目的是将在其裸芯-层中的空闲块的数量增加到大于支持在裸芯中的前台操作所要求的最小数量。这允许用较少的维护操作执行后续的前台操作,从而具有存储器***的更高的性能。
后台操作只能在闲置裸芯中执行。如果没有主机数据写入事务在裸芯中在队列以等待执行并且没有维护操作在裸芯中是激活的,则裸芯是闲置的。后台周期可以在任何数量的闲置裸芯中被同时激活,但是在任何给定裸芯中一次只能激活一个后台周期。在以异步裸芯管理算法布置的存储器***架构中,例如图17所示并在上文中详细讨论的STAR控制器的一个,STAR控制器可以在多个闲置裸芯中同时地起始和管理后台周期。
后台周期在单个裸芯-层中操作。它通过进行如上所述的回收操作在裸芯-层中创造空闲的空间。一个后台周期引起用从两个或更多的回收块重新安置的有效数据填充在选择的裸芯层中的一个重新安置块(例如,元块)。注意,在裸芯的层中的单个后台周期可能不会导致空闲块的净收益,但是在裸芯-层中的后台周期的持续执行产生空闲块的数量的逐步的增加。后台周期在单个裸芯-层中进行数据的重新安置。在前台操作的一实施例中,在编程周期中数据仅可以在裸芯-层之间移动。
当从异步裸芯算法发出裸芯闲置条件的信号并且没有后台周期当前在裸芯中被激活时,可以在裸芯中起始后台周期。后台周期优选地将不在有效数据的总量超过最大量的裸芯层、或者在裸芯层中存在为空闲块的未使用的数据容量的分数(“回收的比率”)在预定阈值之上的裸芯层中起始。
回收的比率可以根据公式计算:回收的比率=F/(F+O),其中F是一层的空闲块中的空闲的空间的量,并且O是在层中的所有封闭的(完全编程的)块中的废弃数据的量。如图31所示,在裸芯-层3102中的总数据容量是可用于在被完全编程之后已经封闭的数据块的容量。它是裸芯-层的总物理容量减去由保留的块3104占据的容量。这些保留的块包括用于除了主机数据(例如,控制数据)以外的信息的块、已经被部分编程的并且仍是开放的数据块以及前台操作所必需的最小数量的空闲块。
该总数据容量可以包括由在封闭的数据块中的有效数据占据的容量(V)、在封闭的数据块中的废弃数据(O)和在超额的空闲块中的容量(F)。超额的空闲块是超过前台操作所要求的最小数量的空闲块的空闲块。后台操作通过进行回收操作将在封闭的数据块中的废弃数据容量转换为在超额的空闲块中的容量。
如上所述,在裸芯-层中的比率F/(F+O)被称为用于裸芯-层的回收的比率,并且是已经被转换为空闲块的未使用的数据容量的分数。回收的比率存在最大值,其被应用而不管在裸芯-层中的有效数据的体量(volume)。如果已经达到最大回收的比率则不能起始后台周期,并且在裸芯-层中的后台操作必须停止直到进一步废弃数据由重新写入或修剪操作创造,或者空闲块被进一步的有效数据写入消耗。回收的比率可以是设计在存储器装置中的静态的数字。使用回收的比率作为起始后台周期的标准通过避免在几乎没有任何废弃数据时在层中的操作、防止具有极小的收益的冗长的操作,而使得后台操作更加有效。回收的比率的阈值对于在裸芯中的每个层可以是相同的或者不同的类型。
图32示出了在后续的期间的持续的后台回收操作之后在与图31相同的裸芯-层中的容量分布。这里,一些废弃数据容量(O)如在图31中的分布相比已经被转换为空闲块容量(F)。在一实施例中,如果在裸芯-层中的有效数据的量超过最大限度3302,后台操作也同样不能在裸芯-层中起始,诸如在图33中所示。因此,图33示出了在有效数据的量达到预定最大允许的限度3302的点处的与图32相同的裸芯-层。存储器装置的物理容量必须超过逻辑容量。
图34示出了在多层裸芯中实现后台周期的一方法。可以进行图34的过程以用于由STAR控制器管理的每个裸芯,使得多个后台处理可以同时激活以用于STAR控制器。如果控制器例如从异步裸芯算法确定,裸芯是闲置的(在3402处),则控制器将评估在闲置裸芯中的裸芯-层看其回收的比率是否小于用于其层类型的预定阈值。在一实现方式中,控制器在循环的基础上选择裸芯层使得如果,在Trio裸芯中,特定裸芯的X1层在最后一轮中被选择以用于后台周期,则控制器将在下一次裸芯是闲置的时候首先评估X2裸芯层,并且控制器选择一裸芯层评估(在3404处)。控制器将计算选择的层的上述回收的比率并将结果与裸芯层的预定最大阈值比较(在3406、3408处)。如果回收的比率超过阈值,如果在该周期中有还没有被检查的在所述裸芯中的任何层,选择下一裸芯层(在3410处)。如果回收的比率小于阈值,则控制器将在选择的层中进行一个后台回收周期(在3412处)。因此,应该仅当其回收的比率小于用于其层类型的定义的最大回收的比率并且如果没有裸芯层可以被选择时后台周期结束时,才选择被评估的裸芯-层。
此外,可以使在裸芯层中分区的选择使用上文关于用于在编程周期中的前台维护操作中的移动和重新安置的分区的选择所讨论的相同的原则。例如,如果在分区中没有封闭的块,或者如果分区在其封闭的块中包含较少的废弃数据容量,则不在该裸芯层中选择该分区。通常,对于选择的裸芯层,控制器可以选择具有每封闭的块最低平均有效数据计数的分区。在选择的裸芯层的选择的分区中,所选择的回收块(即具有废弃数据的封闭的块)可以是具有最少有效数据的量的一个。
如果当后台周期在裸芯上被激活时向裸芯发出主机数据编程事务,主机数据编程操作在NAND驱动中具有比在后台周期中使用的数据复制操作更高的优先级。主机数据编程因此具有优先级,并且后台周期数据的进一步的重新安置仅当没有主机数据编程事务是待定的时发生。
如果主机数据的完整PU已经被写入并且编程周期在后台周期在相同的裸芯中已经完成之前完成,新的编程周期在裸芯中起始。如果编程周期不在后台周期被激活的裸芯-层中与维护操作结合,在后台周期中的未完成的操作由NAND驱动交替地与在相同的裸芯中的维护操作交错。后台操作因此自动地与主机数据编程操作交错而不明确地包括在编程周期的交错比率中。但是,如果在后台周期被激活的裸芯-层中编程周期不结合维护操作,在后台周期中的未完成的操作应该在层中的维护操作开始之前完成,并且后台操作可以被包括在用于在编程周期中的裸芯-层的交错比率的计算中。
裸芯封装配置
在三层固态驱动(SSD)(也被称为Trio驱动)中,有用于在由Trio算法管理的分开的单位中的三层的贮存的物理组织、以及在分开的封装中的单位的组织的多个选择。如上所讨论的,Trio裸芯是单个eX3裸芯,所述裸芯由STAR控制器的实例作为物理贮存的独立的区域管理,并且其中三个固定集合的块被配置为用作X1、X2和X3块。图35示出了用于Trio驱动的具有8个STAR控制器实例的闪速存储器配置,其中在每个Trio裸芯3502中有三层的贮存块以及在8个封装3504的每一个中有多个Trio裸芯。
在一实施例中,在一个封装3504中的所有Trio裸芯3502连接到相同的控制器通道,并且由相同的STAR控制器管理,诸如在图17中所示的。如果在更高的容量驱动中要求第二排的8个封装3504,它们可以类似地连接到通道0到7。第二排的封装可以是用于STAR0到7的容量扩展,或者可以是一组独立的STAR控制器实例8到15(未示出)。
如图36所示,三层结构也可以使用联合封装的Trio裸芯对实现。Trio裸芯对3602是形成单位的一个eX2裸芯3604和一个eX3裸芯3606,其由STAR控制器对各自的通道作为物理贮存的独立的区域管理,并且其中三个固定集合的块被配置为用作X1、X2和X3块。在图36中示出具有8个STAR控制器实例的驱动,其中在Trio裸芯对的每一个中有三层的贮存块并且在8个封装3608的每一个中有多个Trio裸芯对。形成Trio裸芯对3602的裸芯3604、3606两者在相同的封装3608中。在一个封装3608中的所有Trio裸芯对3602连接到相同的控制器通道,并且由相同的STAR控制器实例管理。如果在更高的容量驱动中需要第二排的8个封装,它们应该类似地连接到通道0到7。第二排的封装可以是用于STAR控制器0到7的容量扩展,或者可以是一组独立的STAR控制器8到15。
如图37所示,三层结构也可以使用分开地封装的裸芯对实现。Trio裸芯对3702是形成单位的一个eX2裸芯3704和一个eX3裸芯3706,其由STAR控制器作为物理贮存的独立的区域管理,并且其中三个固定集合的块被配置为用作X1、X2和X3块。在图37中的***示出了具有4个STAR的驱动——而不是上述图35和36的布置假设的8个—其中三层的贮存块在Trio裸芯对3702的每一个中并且Trio裸芯对的每一个覆盖2个封装3708。形成Trio裸芯对的两个裸芯在不同的封装3708中,并且每个封装只包括eX2裸芯或只有eX3裸芯。在一个封装中的所有裸芯连接到相同的控制器通道,并且由相同的STAR控制器管理。每个相邻的封装对由相同的STAR管理。如果在更高的容量驱动中需要4个封装的第二排,它们应该类似地连接到通道0到7。封装的第二排可以是用于STAR控制器0到3的容量扩展,或者可以是一组独立的STAR控制器4到7。
已经公开了用于多层、多分区存储器***的***和方法。在一实施例中,STAR控制器(其可以是分开的硬件控制器或者在一个或多个硬件控制器的每一个上运行的软件的多个实例)的修改的版本被设计为与在每个裸芯中的三层的贮存或者具有X1、X2和X3NAND闪存块的裸芯对操作。公开的算法的子集也可以被用在两层驱动中。上述总体的三层STAR算法,例如关于图17,被用于管理在固态硬盘驱动中的专用集合的闪存裸芯,诸如在特定控制器通道上的裸芯。三层STAR算法的多个实例将存在于SSD***中,所述算法的每一个管理分开的集合(通道)的闪速存储器裸芯。
如上所公开的,三层STAR算法的操作可以由四个算法构成:1)异步裸芯算法;2)Trio算法;3)编程安排算法;和4)地址转换算法:异步裸芯算法。
以在一个裸芯中可实现的最大编程并行性为单位管理数据编程并行性和贯穿***的写入事务,其中所述最大编程并行性在2-平面裸芯中通常是32KB。当要求时多个裸芯可以完全地并行操作,或者可以异步地操作,其中每个裸芯进行不相干的操作。
将异步裸芯算法设计成为主机命令的执行提供减少的延迟以及用于具有不规则的I/O大小或者混合的读取/写入特征的工作量的改善的性能。
基于从Trio算法接收的状态信息,异步裸芯算法可以从其前端队列向准备好接收的任何裸芯发出主机数据写入事务。可用性由向NAND驱动器发出的主机数据写入事务的队列的深度指示。事务应该优选地被发出到具有最短队列的那些裸芯。
Trio算法
在Trio裸芯中的存储器空间根据NAND块类型(X1、X2和X3)被分为三个存储器层,并且根据数据类型(随机的和顺序的)也被分为两个分区。
在Trio裸芯的层和分区结构中,来自主机的数据被写入到层1和2。作为数据被从主机写入的结果,也可以在裸芯中的一个或两个存储器层中要求维护编程操作。
被称为编程周期的一序列的预定编程操作使得定义的量的主机数据被编程在裸芯的层中的写入块中并且如果需要将在相同的裸芯的一或两层中进行预定随之发生的维护编程操作。在编程周期期间,主机数据的编程和用于维护操作的数据以固定的速率交错,以创造主机响应时间的最佳的统一性并确保没有主机命令在环境的任何罕见组合中可能经历不可接受地长响应时间。
维护操作在层中创造空闲块以用于在写入新的数据到层的重新利用,并且可以包括将固定量的数据从一层移动到另一层或者将数据从一个块重新安置到层中的另一块。当裸芯闲置时维护被作为前台操作或后台操作进行。
编程安排算法
异步裸芯算法和Trio算法在每个STAR中根据编程安排算法一起操作,以安排将由NAND驱动器执行的编程和复制事务。
Trio算法提供信息到异步裸芯算法以定义主机数据编程事务何时可以与由Trio创造的维护复制事务交错。当由Trio算法发出的维护元页复制事务的数量和在当前的编程周期中发出的主机数据编程事务的数量之间的比率超过为编程周期预定要求的交错比率时,使能主机数据编程事务。
裸芯的未完成的读取事务在NAND驱动中相比该裸芯的任何其它事务类型具有绝对优先级。裸芯的其它未完成的事务在NAND驱动中以如下的相对优先级被执行:1)编程;2)擦除;和3)复制。
主机数据编程事务将在NAND驱动器中已经出现的队列的维护复制事务之前被执行。
地址转换算法
在三层STAR中使用的地址转换方案如上所述,其中主机逻辑地址空间可以被连续地映射到分开的贮存装置逻辑地址空间而不管与进入数据相关联的主机LBA。
Claims (39)
1.一种大容量贮存存储器***,包括:
接口,其适应于从主机***接收数据;
多个闪速存储器裸芯;以及
控制器,其与所述接口和所述多个闪速存储器裸芯通信,所述控制器被配置为:
响应于从所述主机***接收针对顺序数据类型的第一请求,在所述多个闪速存储器裸芯中完全并行地读取或写入数据;以及
响应于从所述主机***接收针对随机数据类型的第二请求,与在所述多个闪速存储器裸芯的每一个中的同时发生的操作独立地并且异步地读取或写入数据。
2.如权利要求1所述的大容量贮存存储器***,其中,所述控制器被配置为以等于对所述多个闪速存储器裸芯的单独的一个编程的最大单位的量来管理数据。
3.如权利要求2所述的大容量贮存存储器***,其中,所述控制器被配置为基于独立于接收的数据的主机LBA地址的标准来选择在其中写入接收的数据的裸芯。
4.如权利要求3所述的大容量贮存存储器***,其中,所述标准包括具有最短的待定数据写入队列的裸芯。
5.如权利要求3所述的大容量贮存存储器***,其中,所述多个闪速存储器裸芯的至少一部分的每一个包括:
多个层,其每一个具有多个存储器块,其中,第一层包括第一每单元位数据容量,并且第二层包括大于所述第一每单元位容量的第二每单元位容量;以及
在所述多个层的每一个中的多个分区,其中,在层中的所述多个存储器块中的每一个编程的存储器块被唯一地分类为在所述多个分区的各自的一个中。
6.如权利要求5所述的大容量贮存存储器***,其中,所述控制器被配置为识别与从所述主机***接收的数据相关联的数据类型、并且基于识别的数据类型的未完成的事务的数量选择裸芯。
7.如权利要求5所述的大容量贮存存储器***,其中,所述控制器被配置为选择具有最低逻辑填充度的裸芯。
8.如权利要求2所述的大容量贮存存储器***,其中,所述控制器包括多个控制器,所述多个裸芯成组地连接到多个控制通道的各自的一个并且所述多个控制器的每一个仅与所述多个控制通道的各自的一个上的多个闪速存储器裸芯的一组通信。
9.如权利要求8所述的大容量贮存存储器***,其中,所述多个控制器的每一个被配置为管理与各自预定独特的主机LBA地址范围相关联的数据。
10.如权利要求9所述的大容量贮存存储器***,其中,所述多个控制器的每一个被配置为独立地选择连接到其各自控制通道的裸芯以用于所述多个控制器相互独立地写入接收的数据。
11.一种管理数据的方法,包括:
在具有接口、多个闪速存储器裸芯和控制器的大容量贮存存储器***中,其中所述接口适应于从主机***接收数据,所述控制器与所述接口和所述多个闪速存储器裸芯通信,所述控制器:
响应于从所述主机***接收针对顺序数据类型的第一请求,在所述多个闪速存储器裸芯中完全并行地读取或写入数据;以及
响应于从所述主机***接收针对随机数据类型的第二请求,与在所述多个闪速存储器裸芯的每一个中的同时发生的操作独立地并且异步地读取或写入数据。
12.如权利要求11所述的方法,还包括所述控制器以等于对所述多个闪速存储器裸芯的单独的一个编程的最大单位的量来管理数据写入。
13.如权利要求11所述的方法,还包括所述控制器基于独立于接收的数据的主机LBA地址的标准来选择在其中写入接收的数据的裸芯。
14.如权利要求13所述的方法,其中,所述标准包括具有最短的待定数据写入队列的裸芯。
15.如权利要求13所述的方法,其中,所述多个闪速存储器裸芯的至少一部分的每一个包括:
多个层,其每一个具有多个存储器块,其中,第一层包括第一每单元位数据容量,并且第二层包括大于所述第一每单元位容量的第二每单元位容量;以及
在所述多个层的每一个中的多个分区,其中,在层中的所述多个存储器块中的每一个编程的存储器块被唯一地分类为在所述多个分区的各自的一个中;以及
其中所述控制器将接收的主机数据的写入与在层之间的先前贮存的数据的复制交错。
16.如权利要求15所述的方法,还包括所述控制器:
识别与从所述主机***接收的数据相关联的数据类型;以及
基于识别的数据类型的未完成的事务的数量来选择裸芯。
17.如权利要求15所述的方法,还包括:所述控制器选择所述裸芯,在所述裸芯中基于在所述多个闪速存储器裸芯中的最低逻辑填充度来写入接收的数据。
18.如权利要求12所述的方法,其中,所述控制器包括多个控制器,所述多个裸芯成组地连接到多个控制通道的各自的一个并且所述多个控制器的每一个仅与在所述多个控制通道的各自的单一个上的一组所述多个闪速存储器裸芯通信,其中,所述方法还包括:
在所述多个控制器的每一个处仅接收与各自预定独特的主机逻辑块地址范围相关联的数据。
19.如权利要求18所述的方法,还包括,所述多个控制器的每一个独立地选择连接到其各自控制通道的裸芯以用于所述多个控制器相互独立地写入接收的数据。
20.一种大容量贮存存储器***,包括:
接口,其适应于从主机***接收数据;
多个闪速存储器裸芯,所述多个闪速存储器裸芯的每一个具有多个层,并且在特定裸芯中的所述多个层的每一个具有每单元不同的位的容量;以及控制器,其与所述接口和所述多个闪速存储器裸芯通信,所述控制器被配置为:
识别在所述多个闪速存储器裸芯中的闲置裸芯;
确定在所述闲置裸芯中的多个层中的层是否满足后台维护标准;以及
当在所述闲置裸芯中的层被确定为满足所述后台维护标准时,在所述层中与在由所述控制器管理的其它闪速存储器裸芯中的任何其它操作独立地并且异步地执行后台维护操作。
21.如权利要求20所述的大容量贮存存储器***,其中,所述控制器被配置为通过仅在满足所述后台维护标准的层中的块之间重新安置有效数据来执行所述后台维护操作。
22.如权利要求21所述的大容量贮存存储器***,其中,所述控制器被配置为仅当在所述多个闪速存储器裸芯中的特定裸芯中没有主机数据写入事务排队等待执行并且在所述特定裸芯中没有维护操作被激活时、将在所述多个闪速存储器裸芯中的特定裸芯识别为所述闲置裸芯。
23.如权利要求22所述的大容量贮存存储器***,其中,所述后台维护标准是基于在所述层中的空闲块中的未使用的数据容量与所述层的总未使用的数据容量的比率。
24.如权利要求23所述的大容量贮存存储器***,其中,所述控制器被配置为仅当所述比率小于所述层的阈值比率时、确定所述层满足所述后台维护标准。
25.如权利要求24所述的大容量贮存存储器***,其中,所述后台维护标准进一步基于在所述层中的有效数据的总量,并且其中所述控制器被配置为确定所述层满足所述后台维护标准,除非在所述层中的有效数据的总量大于所述层的预定最大量,或者所述比率大于所述层的阈值比率。
26.如权利要求24所述的大容量贮存存储器***,其中,在所述闪速存储器裸芯中的多个层的第一层和第二层每一个包括不同的阈值比率。
27.如权利要求21所述的大容量贮存存储器***,其中,所述控制器被配置为通过仅从所述层中的足以填充在所述层中的一个重新安置块的至少两个回收块重新安置有效数据来执行所述后台维护操作,其中,每个回收块包括具有有效和废弃数据两者的完全编程的块,并且其中所述重新安置块包括由所述控制器分配的在所述层中的空闲块以从所述层中的回收块接收所述有效数据。
28.如权利要求22所述的大容量贮存存储器***,其中,所述层包括多个分区,在所述层中的多个分区的每一个包括仅具有各自预定数据类型的编程的块;以及
其中,所述控制器还被配置为通过选择在所述层中的特定分区并且仅在所述层中的特定分区中的块之间重新安置有效数据,来仅在所述层中重新安置有效数据。
29.如权利要求28所述的大容量贮存存储器***,其中,所述控制器被配置为选择在具有每编程的块的最低平均有效数据计数的所述闲置裸芯的层中的分区作为所述特定分区。
30.一种在闪速存储器中进行后台维护过程的方法,所述方法包括:
在具有接口、多个闪速存储器裸芯以及控制器的大容量贮存存储器***中,所述接口用于从主机***接收数据,所述控制器与所述接口和所述多个闪速存储器裸芯通信,所述控制器:
在所述多个闪速存储器裸芯中识别闲置裸芯,其中所述多个闪速存储器裸芯的每一个包括多个层,并且在特定裸芯中的所述多个层的每一个具有每单元不同的位的容量;
确定在所述闲置裸芯中的多个层中的层是否满足后台维护标准;以及
响应于确定所述层满足所述后台维护标准,在所述层中与由所述控制器管理的其它闪速存储器裸芯中的任何其它操作独立地并且异步地执行后台维护操作。
31.如权利要求30所述的方法,还包括,通过仅在满足所述后台维护标准的层中的块之间重新安置有效数据来执行所述后台维护操作。
32.如权利要求31所述的方法,其中,识别所述闲置裸芯包括仅当在所述特定裸芯中没有主机数据写入事务排队等待执行并且在所述特定裸芯中没有维护操作被激活时、将在所述多个闪速存储器裸芯中的特定裸芯识别为所述闲置裸芯。
33.如权利要求31所述的方法,其中,所述后台维护标准是基于在所述层中的空闲块中的未使用的数据容量与所述层的总未使用的数据容量的比率。
34.如权利要求33所述的方法,还包括:仅当所述比率小于阈值比率时,确定所述层满足所述后台维护标准。
35.如权利要求34所述的方法,其中,所述后台维护标准进一步基于在所述层中的有效数据的总量,并且其中确定所述层是否满足所述后台维护标准包括确定所述层满足所述后台维护标准,除非在所述层中的有效数据的总量大于所述层的预定最大量,或者所述比率大于所述层的阈值比率。
36.如权利要求34所述的方法,其中,在所述闪速存储器裸芯中的多个层的第一层和第二层的每一个包括不同的阈值比率。
37.如权利要求32所述的方法,其中,执行所述后台维护操作包括仅从所述层中的足以填充在所述层中的一个重新安置块的至少两个回收块重新安置有效数据,其中,每个回收块包括具有有效和废弃数据两者的完全编程的块,并且其中所述重新安置块包括由所述控制器分配的在所述层中的空闲块以从所述层中的回收块接收所述有效数据。
38.如权利要求32所述的方法,其中,所述层包括多个分区,在所述层中的多个分区的每一个包括仅具有各自预定数据类型的编程的块;以及
还包括通过在所述层中选择特定分区并且仅在所述层中的特定分区中的块之间重新安置有效数据,来仅在所述层中重新安置有效数据。
39.如权利要求38所述的方法,其中,选择所述特定分区包括选择具有每编程的块的最低平均有效数据计数的所述闲置裸芯的层中的分区。
Applications Claiming Priority (17)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201261747896P | 2012-12-31 | 2012-12-31 | |
US201261747892P | 2012-12-31 | 2012-12-31 | |
US201261747916P | 2012-12-31 | 2012-12-31 | |
US201261747646P | 2012-12-31 | 2012-12-31 | |
US61/747,896 | 2012-12-31 | ||
US61/747,916 | 2012-12-31 | ||
US61/747,646 | 2012-12-31 | ||
US61/747,892 | 2012-12-31 | ||
US13/827,038 US9734050B2 (en) | 2012-12-31 | 2013-03-14 | Method and system for managing background operations in a multi-layer memory |
US13/826,848 | 2013-03-14 | ||
US13/827,499 US9223693B2 (en) | 2012-12-31 | 2013-03-14 | Memory system having an unequal number of memory die on different control channels |
US13/827,038 | 2013-03-14 | ||
US13/827,499 | 2013-03-14 | ||
US13/826,848 US9734911B2 (en) | 2012-12-31 | 2013-03-14 | Method and system for asynchronous die operations in a non-volatile memory |
US13/827,351 | 2013-03-14 | ||
US13/827,351 US9465731B2 (en) | 2012-12-31 | 2013-03-14 | Multi-layer non-volatile memory system having multiple partitions in a layer |
PCT/US2013/077493 WO2014105829A2 (en) | 2012-12-31 | 2013-12-23 | Method and system for asynchronous die operations in a non-volatile memory |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104903842A CN104903842A (zh) | 2015-09-09 |
CN104903842B true CN104903842B (zh) | 2018-08-14 |
Family
ID=51022193
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201380068977.0A Active CN104903842B (zh) | 2012-12-31 | 2013-12-23 | 用于在非易失性存储器中的异步裸芯操作的方法和*** |
Country Status (4)
Country | Link |
---|---|
EP (2) | EP3176688B1 (zh) |
KR (2) | KR101854020B1 (zh) |
CN (1) | CN104903842B (zh) |
WO (1) | WO2014105829A2 (zh) |
Families Citing this family (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10235056B2 (en) | 2014-09-26 | 2019-03-19 | Western Digital Technologies, Inc. | Storage device health diagnosis |
TWI556100B (zh) * | 2015-10-26 | 2016-11-01 | 點序科技股份有限公司 | 快閃記憶體裝置及其交錯存取方法 |
KR102664674B1 (ko) * | 2016-06-10 | 2024-05-16 | 에스케이하이닉스 주식회사 | 메모리 시스템 및 메모리 시스템의 동작방법 |
KR102614083B1 (ko) * | 2016-08-31 | 2023-12-18 | 삼성전자주식회사 | 스토리지 장치 및 스토리지 장치의 동작 방법 |
US10359955B2 (en) * | 2017-02-23 | 2019-07-23 | Western Digital Technologies, Inc. | Data storage device configured to perform a non-blocking control update operation |
US20180239532A1 (en) | 2017-02-23 | 2018-08-23 | Western Digital Technologies, Inc. | Techniques for performing a non-blocking control sync operation |
US11269764B2 (en) | 2017-03-21 | 2022-03-08 | Western Digital Technologies, Inc. | Storage system and method for adaptive scheduling of background operations |
US11188456B2 (en) * | 2017-03-21 | 2021-11-30 | Western Digital Technologies Inc. | Storage system and method for predictive block allocation for efficient garbage collection |
KR102200247B1 (ko) | 2017-03-27 | 2021-01-08 | 에스케이하이닉스 주식회사 | 메모리 시스템 및 메모리 시스템의 동작방법 |
US20180329815A1 (en) * | 2017-05-09 | 2018-11-15 | Western Digital Technologies, Inc. | Storage system and method for non-volatile memory command collision avoidance with explicit tile grouping |
CN107273303B (zh) * | 2017-05-23 | 2020-06-26 | 建荣半导体(深圳)有限公司 | 一种闪存数据管理***、方法、闪存芯片及存储装置 |
CN110413206B (zh) * | 2018-04-28 | 2023-05-30 | 伊姆西Ip控股有限责任公司 | 存储***中的操作控制方法、设备和计算机程序产品 |
KR102542299B1 (ko) * | 2018-08-22 | 2023-06-13 | 에스케이하이닉스 주식회사 | 메모리 컨트롤러, 이를 포함하는 메모리 시스템 및 이의 동작 방법 |
KR102520412B1 (ko) | 2018-09-19 | 2023-04-12 | 에스케이하이닉스 주식회사 | 메모리 시스템 및 그것의 동작방법 |
US10770431B1 (en) * | 2019-02-27 | 2020-09-08 | Western Digital Technologies, Inc. | Memory die layouts for failure protection in SSDs |
KR20200114149A (ko) | 2019-03-27 | 2020-10-07 | 에스케이하이닉스 주식회사 | 메모리 컨트롤러 및 그 동작 방법 |
US11269552B2 (en) * | 2019-06-14 | 2022-03-08 | Micron Technology, Inc. | Multi-pass data programming in a memory sub-system having multiple dies and planes |
KR20210077443A (ko) | 2019-12-17 | 2021-06-25 | 에스케이하이닉스 주식회사 | 메모리 장치 및 그 동작 방법 |
US11275679B2 (en) | 2019-12-30 | 2022-03-15 | Micron Technology, Inc. | Separate cores for media management of a memory sub-system |
KR20210111120A (ko) | 2020-03-02 | 2021-09-10 | 에스케이하이닉스 주식회사 | 메모리 컨트롤러 및 그 동작 방법 |
US20210373809A1 (en) * | 2020-05-29 | 2021-12-02 | Western Digital Technologies, Inc. | Write Data-Transfer Scheduling in ZNS Drive |
US11281405B2 (en) | 2020-06-08 | 2022-03-22 | Western Digital Technologies, Inc. | Controlled die asymmetry during MLC operations for optimal system pipeline |
US11417411B2 (en) * | 2020-11-04 | 2022-08-16 | Micron Technology, Inc. | Systems and methods for power savings in row repaired memory |
US11561713B2 (en) * | 2021-03-11 | 2023-01-24 | Western Digital Technologies, Inc. | Simplified high capacity die and block management |
US11816349B2 (en) | 2021-11-03 | 2023-11-14 | Western Digital Technologies, Inc. | Reduce command latency using block pre-erase |
US12039202B2 (en) * | 2022-09-16 | 2024-07-16 | Western Digital Technologies, Inc. | Dynamic ordering of memory die programming in a metablock |
US20240111422A1 (en) * | 2022-09-30 | 2024-04-04 | Samsung Electronics Co., Ltd | Method of optimizing quality of service (qos) in solid-state drives (ssds) and an ssd thereof |
CN116610597B (zh) * | 2023-07-20 | 2023-10-17 | 合肥康芯威存储技术有限公司 | 一种存储器件及其垃圾回收的控制方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101398783A (zh) * | 2007-09-28 | 2009-04-01 | 株式会社日立制作所 | 存储装置以及数据重复排除方法 |
CN101681302A (zh) * | 2008-02-29 | 2010-03-24 | 株式会社东芝 | 存储器*** |
WO2012158514A1 (en) * | 2011-05-17 | 2012-11-22 | Sandisk Technologies Inc. | Non-volatile memory and method with small logical groups distributed among active slc and mlc memory partitions |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7925825B2 (en) | 2008-01-24 | 2011-04-12 | International Business Machines Corporation | System to support a full asynchronous interface within a memory hub device |
TWI473116B (zh) * | 2008-03-07 | 2015-02-11 | A Data Technology Co Ltd | 多通道記憶體儲存裝置及其控制方法 |
US8700840B2 (en) * | 2009-01-05 | 2014-04-15 | SanDisk Technologies, Inc. | Nonvolatile memory with write cache having flush/eviction methods |
US20110107042A1 (en) * | 2009-11-03 | 2011-05-05 | Andrew Herron | Formatting data storage according to data classification |
US8335897B2 (en) * | 2009-12-15 | 2012-12-18 | Seagate Technology Llc | Data storage management in heterogeneous memory systems |
US8239617B1 (en) * | 2010-02-12 | 2012-08-07 | Emc Corporation | Enterprise data storage system using multi-level cell flash memory |
US8452911B2 (en) * | 2010-09-30 | 2013-05-28 | Sandisk Technologies Inc. | Synchronized maintenance operations in a multi-bank storage system |
US9176864B2 (en) * | 2011-05-17 | 2015-11-03 | SanDisk Technologies, Inc. | Non-volatile memory and method having block management with hot/cold data sorting |
WO2012161659A1 (en) * | 2011-05-24 | 2012-11-29 | Agency For Science, Technology And Research | A memory storage device, and a related zone-based block management and mapping method |
-
2013
- 2013-12-23 EP EP16176480.8A patent/EP3176688B1/en active Active
- 2013-12-23 EP EP13826692.9A patent/EP2939100B1/en active Active
- 2013-12-23 WO PCT/US2013/077493 patent/WO2014105829A2/en active Application Filing
- 2013-12-23 KR KR1020157017154A patent/KR101854020B1/ko active IP Right Grant
- 2013-12-23 KR KR1020187011613A patent/KR20180049148A/ko not_active Application Discontinuation
- 2013-12-23 CN CN201380068977.0A patent/CN104903842B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101398783A (zh) * | 2007-09-28 | 2009-04-01 | 株式会社日立制作所 | 存储装置以及数据重复排除方法 |
CN101681302A (zh) * | 2008-02-29 | 2010-03-24 | 株式会社东芝 | 存储器*** |
WO2012158514A1 (en) * | 2011-05-17 | 2012-11-22 | Sandisk Technologies Inc. | Non-volatile memory and method with small logical groups distributed among active slc and mlc memory partitions |
Also Published As
Publication number | Publication date |
---|---|
KR20150102030A (ko) | 2015-09-04 |
EP3176688A1 (en) | 2017-06-07 |
EP3176688B1 (en) | 2022-01-26 |
WO2014105829A3 (en) | 2014-10-09 |
EP2939100B1 (en) | 2017-09-06 |
KR101854020B1 (ko) | 2018-05-02 |
WO2014105829A2 (en) | 2014-07-03 |
EP2939100A2 (en) | 2015-11-04 |
CN104903842A (zh) | 2015-09-09 |
KR20180049148A (ko) | 2018-05-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104903842B (zh) | 用于在非易失性存储器中的异步裸芯操作的方法和*** | |
US9336133B2 (en) | Method and system for managing program cycles including maintenance programming operations in a multi-layer memory | |
US9734050B2 (en) | Method and system for managing background operations in a multi-layer memory | |
US9348746B2 (en) | Method and system for managing block reclaim operations in a multi-layer memory | |
US9734911B2 (en) | Method and system for asynchronous die operations in a non-volatile memory | |
US9223693B2 (en) | Memory system having an unequal number of memory die on different control channels | |
US9465731B2 (en) | Multi-layer non-volatile memory system having multiple partitions in a layer | |
US20140189208A1 (en) | Method and system for program scheduling in a multi-layer memory | |
CN102754088B (zh) | 用于在非易失性存储器阵列中的同时后台和前台操作的方法和*** | |
US8537613B2 (en) | Multi-layer memory system | |
CN101458613B (zh) | 一种混合分级阵列的实现方法、混合分级阵列和存储*** | |
US9542307B2 (en) | Shiftable memory defragmentation | |
CN101241446B (zh) | 非易失数据存储装置中虚拟文件***命令调度方法和设备 | |
CN102483717B (zh) | 用于存储器磨损平衡的重映射方法及设备 | |
EP2758882B1 (en) | Adaptive mapping of logical addresses to memory devices in solid state drives | |
CN103384877A (zh) | 包括闪存的存储***和存储控制方法 | |
KR102462305B1 (ko) | 고체 상태 드라이브의 판독 성능을 개선시키는 방법 및 장치 | |
CN106168882A (zh) | 管理存储装置的方法及其存储*** | |
US10365834B2 (en) | Memory system controlling interleaving write to memory chips | |
CN104021094B (zh) | 数据储存装置与快闪存储器控制方法 | |
Xu et al. | Garbage collection policy to improve durability for flash memory | |
CN101008923A (zh) | 面向异构多核体系的分段式存储空间管理方法 | |
CN105224258B (zh) | 一种数据缓冲区的复用方法与*** | |
CN106293491B (zh) | 写请求的处理方法和内存控制器 | |
CN100456232C (zh) | 针对流处理的存储访问与调度装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB02 | Change of applicant information |
Address after: texas Applicant after: DELPHI INT OPERATIONS LUX SRL Address before: texas Applicant before: Sandisk Corp. |
|
COR | Change of bibliographic data | ||
GR01 | Patent grant | ||
GR01 | Patent grant |