CN107111562A - 工作负荷自适应数据打包算法 - Google Patents
工作负荷自适应数据打包算法 Download PDFInfo
- Publication number
- CN107111562A CN107111562A CN201580070609.9A CN201580070609A CN107111562A CN 107111562 A CN107111562 A CN 107111562A CN 201580070609 A CN201580070609 A CN 201580070609A CN 107111562 A CN107111562 A CN 107111562A
- Authority
- CN
- China
- Prior art keywords
- self
- correcting code
- logic page
- compressed logic
- page
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1008—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
- G06F11/1012—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using codes or arrangements adapted for a specific type of error
-
- 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
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/04—Addressing variable-length words or parts of words
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/63—Joint error correction and other techniques
- H03M13/6312—Error control coding in combination with data compression
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/63—Joint error correction and other techniques
- H03M13/6312—Error control coding in combination with data compression
- H03M13/6318—Error control coding in combination with data compression using variable length codes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1008—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
- G06F11/1068—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices in sector programmable memories, e.g. flash disk
-
- 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
-
- 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/40—Specific encoding of data in memory or cache
- G06F2212/401—Compressed data
-
- 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/65—Details of virtual memory and virtual address translation
- G06F2212/657—Virtual address space management
-
- 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/7207—Details relating to flash memory management management of metadata or control data
-
- 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
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C29/00—Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
- G11C29/04—Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
- G11C2029/0411—Online error correction
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C29/00—Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
- G11C29/52—Protection of memory contents; Detection of errors in memory contents
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/13—Linear codes
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/13—Linear codes
- H03M13/15—Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
- H03M13/151—Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes using error location or error correction polynomials
- H03M13/152—Bose-Chaudhuri-Hocquenghem [BCH] codes
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Probability & Statistics with Applications (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
- Memory System (AREA)
- Detection And Correction Of Errors (AREA)
Abstract
根据一个实施例的方法包括从缓冲器中选择数据的压缩逻辑页的组合,以最大化误差校正码容器中的使用的空间量。该方法还优选包括处理压缩逻辑页的组合以产生误差校正码数据。此外,该方法可以包括将与压缩逻辑页的组合对应的数据和相关联的误差校正码数据写入到非易失性随机存取存储器。在另外的实施例中描述了其它系统、方法和计算机程序产品。
Description
技术领域
本发明涉及数据储存系统,并且更具体地,本发明涉及用于将压缩的逻辑页打包(pack)成误差校正码(ECC)码字的工作负荷自适应算法。
背景技术
以闪存为例,常规的基于NAND闪存的固态驱动器(SSD)的性能特征与传统硬盘驱动器(HDD)的性能在根本上不同。常规SSD中的数据通常以4、8或16KB大小的页组织。此外,SSD中的页读取操作通常比写入操作快一个数量级,并且延迟即不取决于当前的操作位置也不取决于先前的操作位置。
然而,在基于闪存的SSD中,存储器位置在被写入之前按块被擦除。擦除块单元的大小通常为256页,并且擦除操作花费比页编程操作多了近似一个数量级的时间。由于NAND闪存的固有特性,基于闪存的SSD写入的数据不在适当的位置,由此映射表将写入数据的逻辑地址映射到物理地址。该映射表通常称为逻辑到物理表(LPT)。
随着基于闪存的存储器单元由于磨损或其它原因而呈现出读取错误和/或故障,可以在存储器页内以及跨存储器芯片使用额外的冗余(例如,类似RAID-5和RAID-6的方案)。存储器页内的额外冗余可以包括ECC码字,该ECC码字例如可以包括Bose、Chaudhuri和Hocquenghem(BCH)码。存储器的逻辑页可以被打包到ECC的有效载荷中,由此可以使用ECC码字来恢复相应逻辑页的数据。
然而,相对于存储器的逻辑页的ECC码字的实现在常规产品中不是期望的。具体地说,ECC码字具有固定的有效载荷大小,这限制了ECC码字可以保护的数据量。此外,ECC码字的固定有效载荷大小与存储器中的未压缩的逻辑页的大小不完全对准。此外,一些非易失性存储器系统实现存储器中的逻辑页的压缩,由此压缩器将把每个逻辑页压缩到与其原始大小不同的大小(例如,长度)。然而,压缩的逻辑页的长度取决于特定逻辑页而变化,并且因此各种压缩的逻辑页的长度不一致。在压缩的逻辑页被打包到ECC码字的有效载荷中时,这种压缩长度的变化加剧了ECC码字的固定有效载荷大小与逻辑页之间所经历的未对准。
常规的填充ECC码字的整个有效载荷的尝试导致压缩的逻辑页不期望地横跨(straddle)在ECC码字之间,从而通过要求读取两个完整的ECC码字并将其从非易失性存储器传送到控制器以便回读取单个横跨的逻辑页而导致读取放大。当跨过物理页边界发生横跨时,横跨也会增加延迟,从而除了将两个完整的ECC码字从存储器传输到控制器之外还要求读取两个物理页。
于是,非常期望通过提供填充ECC码字有效载荷的有效方法来克服上述常规缺点的方法。
发明内容
根据一个实施例的方法包括从缓冲器中选择数据的压缩逻辑页的组合,以最大化误差校正码容器中的使用的空间量。该方法还优选地包括处理压缩逻辑页的组合以产生误差校正码数据。此外,该方法可以包括将与压缩的逻辑页的组合对应的数据和相关联的误差校正码数据写入到非易失性随机存取存储器。因此,根据本实施例的方法如期望地能够优选地通过实现将压缩的逻辑页有效地打包到误差校正码容器中的对准打包方案来提供填充误差校正码容器的期望的处理。
此外,优选地,在这种方法中进行的选择期间考虑缓冲器中的所有压缩的逻辑页,从而增加在选择期间确定的压缩的逻辑页的数量。
根据一些方法,上述选择可以包括同时选择数据的压缩的逻辑页的多个组合以最大化多个误差校正码容器中的使用的空间量。同时选择数据的压缩的逻辑页的多个组合的能力允许提高的效率和更快的数据处理速率,同时确保纠正错误代码容器空间的有效使用,而不会引入常规产品所经历的不当读取放大和/或延迟。
此外,根据其它方法,压缩的逻辑页的组合可以仅填充误差校正码容器的一部分。当使用对准打包方案时可能期望允许ECC容器的部分填充,并且添加缓冲器中可用的任何额外的压缩的逻辑页将需要横跨。因此,在一些情况下,可能期望牺牲ECC容器打包效率,以便防止由于横跨而产生的常规产品中经历的读取放大和/或延迟。
根据一些实施例,所述方法还可以可选地包括:确定在向所述误差校正码容器添加所述压缩逻辑页的组合之后所述误差校正码容器中的未使用的空间量是否高于阈值。响应于确定在向所述误差校正码容器添加所述压缩逻辑页的组合之后所述误差校正码容器中的未使用的空间量高于所述阈值,可以将额外的压缩逻辑页的第一部分添加到所述误差校正码容器。此外,可以将额外的压缩逻辑页的第二部分添加到第二误差校正码容器。此外,第二错误校正码容器可以具有先前写入在其中的压缩逻辑页,从而使得一些实施例能够如期望地随着压缩的逻辑页变得可用而增加误差校正码容器的容量。
根据其它实施例,该方法还可以可选地包括确定缓冲器中的至少一些压缩的逻辑页未被实质压缩。此外,这样的可选实施例可以包括选择未被实质压缩的压缩逻辑页之一,并且将所选的未被实质压缩的压缩逻辑页之一的第一部分添加到误差校正码容器。此外,可以将所选的未被实质压缩的压缩逻辑页之一的第二部分添加到第二误差校正码容器。因此,在一些实施例中可以可选地使能选择性横跨以避免浪费的误差校正码容器容量的不期望的量。通过在某些情况下选择性地实现在校正码容器之间的横跨,一些实施例可能能够执行自适应打包,由此可以可互换地实现紧密打包(例如,使用横跨)和对准打包,如下面将进一步详细描述的。
根据另一实施例的计算机程序产品包括计算机可读储存介质,该计算机可读储存介质具有随其包含的程序指令。程序指令优选地可由控制器读取和/或执行,以使控制器:由控制器选择来自缓冲器的数据的压缩逻辑页的组合,以最大化误差校正码容器中的使用的空间量。程序指令还优选地可由控制器读取和/或执行以使控制器:由控制器处理压缩逻辑页的组合以产生误差校正码数据。此外,程序指令还优选地可由控制器读取和/或可由控制器执行以使得控制器:由控制器将与压缩的逻辑页的组合相对应的数据和相关联的误差校正码数据写入到非易失性随机存取存储器。
根据又一实施例的系统包括:配置为储存数据的非易失性随机存取存储器(NVRAM);以及处理器和与处理器集成的和/或可由处理器执行的逻辑。与处理器集成的和/或可由处理器执行的逻辑优选地被配置为:从缓冲器中选择数据的压缩逻辑页的组合,以最大化误差校正码容器中的使用的空间量。此外,逻辑还优选地被配置为:处理压缩逻辑页的组合以产生误差校正码数据。此外,逻辑还优选地被配置为:将与压缩逻辑页的组合对应的数据和相关联的误差校正码数据写入到非易失性随机存取存储器。
根据又一实施例的方法包括确定缓冲器中的数据的压缩逻辑页是否被实质压缩。该方法还可以包括选择被实质压缩的压缩逻辑页的第一组合以添加到误差校正码容器,以最大化误差校正码容器中的使用的空间量。方法可以额外地包括选择未被实质压缩的压缩逻辑页的第二组合,以添加到误差校正码容器,以最大化误差校正码容器中的使用的空间量。此外,可以处理压缩逻辑页的第一组合和/或第二组合以产生误差校正码数据。此外,与压缩逻辑页的第一组合和/或第二组合对应的数据和相关联的误差校正码数据可以被写入到非易失性随机存取存储器。通过使能压缩逻辑页的第一和/或第二组合的选择以添加到误差校正码容器,方法能够如期望地增加ECC容器的储存容量。取决于压缩逻辑页的压缩程度,可以选择性地执行不同的打包方案。根据一些方法,例如当压缩的逻辑页未被实质压缩时,可以可选地使能选择性横跨以避免浪费误差校正码容器容量的不期望的量,如下面将进一步详细描述的。
从下面的详细描述中,本发明的其它方面和实施例将变得显而易见,当结合附图时,该详细描述通过举例的方式说明本发明的原理。
附图说明
现在将仅通过示例的方式参考附图来描述本发明的实施例,附图中:
图1是根据一个实施例的非易失性存储器卡的图。
图2是根据一个实施例的数据储存系统架构的图。
图3是根据一个实施例的系统的图。
图4是根据一个实施例的包括块-条带和页-条带的概念图。
图5A是根据一个实施例的处理的流程图。
图5B是根据示意性实施例的代表性图。
图6A是根据一个实施例的处理的流程图。
图6B是根据一个实施例的处理的流程图。
图7A是根据一个实施例的关于缓冲器长度的容量增益的曲线图。
图7B是根据一个实施例的关于压缩的逻辑页的平均长度的读取放大的曲线图。
图7C是根据一个实施例的关于压缩的逻辑页的平均长度的容量增益的曲线图。
图8是根据一个实施例的处理的流程图。
图9是根据一个实施例的处理的流程图。
图10是根据一个实施例的处理的流程图。
图11A是根据一个实施例的关于压缩的逻辑页的平均长度的容量增益的曲线图。
图11B是根据一个实施例的关于压缩的逻辑页的平均长度的读取放大的曲线图。
图12是根据一个实施例的网络架构。
图13是根据一个实施例的可以与图12的服务器和/或客户端相关联的代表性硬件环境。
图14是根据一个实施例的分层数据储存系统。
具体实施方式
以下描述是为了说明本发明的一般原理而做出,并不意味着限制本文所要求保护的发明构思。此外,本文描述的特定特征可以在各种可能的组合和排列中的每一种中与其它描述的特征结合使用。
除非本文另有具体定义,否则所有术语将被给予其最广泛的可能解释,包括说明书所暗示的含义以及本领域技术人员所理解的含义和/或在词典、论文等中所定义的含义。
还必须注意的是,如在说明书和所附权利要求中所使用的,除非另有说明,单数形式“一”、“一个”和“该”包括复数指示物。将进一步理解,当在本说明书中使用时,术语“包括”和/或“包含”指定所述特征、整体、步骤、操作、元件和/或组件的存在,但不排除存在或添加一个或多个其它特征、整体、步骤、操作、元件、组件和/或其组合。
以下描述公开了数据储存系统的几个优选实施例以及其操作和/或组件部分。应当理解,本文中的各种实施例可以用广大范围的储存介质实现,例如包括诸如NAND闪存、NOR闪存、相变存储器(PCM)、磁阻RAM(MRAM)和电阻RAM(RRAM)的非易失性随机存取存储器(NVRAM)技术。为了提供上下文,并且仅仅是为了帮助读者,可以参考一种非易失性存储器来描述各种实施例。这仅仅是作为示例进行的,并且不应被认为是对权利要求中限定的发明的限制。
在一个一般实施例中,一种方法包括从缓冲器中选择数据的压缩的逻辑页的组合以最大化在误差校正码容器中使用的空间量。该方法还优选地包括处理压缩的逻辑页的组合以产生误差校正码数据。此外,该方法可以包括将与压缩的逻辑页的组合对应的数据和相关联的误差校正码数据写入到非易失性随机存取存储器。
在另一个一般实施例中,计算机程序产品包括计算机可读储存介质,该计算机可读储存介质具有随其包含的程序指令。程序指令优选地可由控制器读取和/或执行以使控制器:通过控制器从缓冲器选择数据的压缩逻辑页的组合,以最大化误差校正码容器中的使用的空间量。程序指令还优选地可由控制器读取和/或执行以使控制器:通过控制器处理压缩的逻辑页的组合以产生误差校正码数据。此外,程序指令还优选可由控制器读取的和/或执行以使得控制器:通过控制器将与压缩的逻辑页的组合相应的数据和相关联的误差校正码数据写入到非易失性随机存取存储器中。
在另一个一般实施例中,系统包括:被配置为储存数据的非易失性随机存取存储器(NVRAM);以及处理器和与处理器集成的和/或可由处理器执行的逻辑。与处理器集成的和/或可由处理器执行的逻辑优选地被配置为:从缓冲器中选择数据的压缩逻辑页的组合,以最大化在误差校正码容器中使用的空间量。此外,该逻辑还优选被配置为:处理压缩的逻辑页的组合以产生误差校正码数据。此外,该逻辑还优选被配置为:将与压缩的逻辑页的组合对应的数据和相关联的误差校正码数据写入到非易失性随机存取存储器。
图1示出了根据一个实施例的存储器卡100。应当注意,尽管在本实施例中将存储器卡100描绘为示例性的非易失性数据存储卡,但是根据替代实施例,可以在数据储存系统中使用各种其它类型的非易失性数据存储卡。由此,存储器卡100的架构和/或组件绝不意欲限制本发明,而是作为非限制性示例呈现。
此外,作为选项,本存储器卡100可以结合来自本文列出的任何其它实施例的特征来实现,比如参考其他图所描述的那些。然而,这种存储器卡100和这里呈现的其它的存储器卡可以用于各种应用和/或排列中,这些应用和/或排列可能有或可能没有在本文列出的示意性实施例中具体描述。此外,本文呈现的存储器卡100可以用于任何期望的环境中。
继续参考图1,存储器卡100包括网关102、连接到通用处理器(GPP)存储器114(其可以包括RAM、ROM、电池备援的DRAM、相变存储器PC-RAM、MRAM、STT-MRAM等或其组合)的通用处理器(GPP)112(诸如ASIC、FPGA、CPU等)、以及多个存储器控制器108,这包括本示例中的闪存控制器。每个存储器控制器108经由通道106连接到多个NVRAM存储器模块104(其可以包括NAND闪存或诸如上面列出的其它非易失性存储器类型)。
根据各种实施例,控制器108中的一个或多个可以是或可以包括一个或多个处理器和/或用于控制存储器卡100的任何子系统的任何逻辑。例如,控制器108通常控制NVRAM存储器模块104的功能,比如数据写入、数据再循环、数据读取等。控制器108可以使用本领域中已知的逻辑以及本文公开的任何逻辑来操作,因此在各种实施例中可以将其视为用于本文包括的非易失性存储器的任何描述的处理器。
此外,控制器108可以被配置为和/或可编程为执行或控制本文呈现的一些或全部方法。因此,控制器108可以被认为配置为通过被编程到一个或多个芯片、模块和/或块中的逻辑执行各种操作;可用于一个或多个处理器的软件、固件和/或其它指令;及其组合等等。
仍然参考图1,每个存储器控制器108也连接到控制器存储器110,该控制器存储器110优选地包括根据本文所述的各种实施例的复制非易失性存储器结构的缓存。然而,取决于期望的实施例,控制器存储器110可以是电池备援的DRAM、相变存储器PC-RAM、MRAM、STT-MRAM等或其组合。
如前所述,取决于期望的实施例,存储器卡100可以实现在各种类型的数据储存系统中。图2示出了根据示例性实施例的数据储存系统架构200,其绝不意欲限制本发明。此外,应当注意,图2的数据储存系统220可以包括在图1的实施例中找到的各种组件。
查看图2,数据储存系统220包括多个接口卡202,其被配置为经由I/O互连204与一个或多个处理器系统201进行通信。数据储存系统220还可以包括配置为控制多个非易失性数据存储卡208中的数据储存的一个或多个RAID控制器206。非易失性数据存储卡208可以包括NVRAM、闪存卡、RAM、ROM和/或一些其它已知类型的非易失性存储器。
I/O互连204可以包括任何已知的通信协议,比如光纤信道(FC)、经以太网的FC(FCoE)、无限带宽(Infiniband)、互联网小型计算机系统接口(iSCSI)、传输控制协议/互联网协议(TCP/IP)、外围组件互连高速(PCIe)等和/或其任何组合。
数据储存系统220中的(一个或多个)RAID控制器206可以执行类似于由RAID-5、RAID-10采用的奇偶校验方案或一些其它合适的奇偶校验方案,如本领域技术人员在阅读本说明书后将理解的。
每个处理器系统201包括一个或多个处理器210(诸如CPU、微处理器等)、本地数据储存器211(例如,诸如图13的RAM 1314、图13的ROM 1316等)以及被配置为与数据储存系统220通信的I/O适配器218。
再次参考图1,取决于期望的实施例,存储器控制器108和/或本文所描述的其它控制器(例如,图2的RAID控制器206)可能能够对储存的数据执行各种功能。具体地,存储器控制器可以包括被配置为执行以下功能中的任意一个或多个的逻辑,这些功能绝不是排他性的列表。换句话说,取决于期望的实施例,储存系统的逻辑可以被配置为执行额外的或替代的功能,如本领域技术人员在阅读本说明书后将理解的。
垃圾收集
在本描述的SSD存储器控制器的上下文中的垃圾收集可以包括标识待回收以供将来使用的数据块并重新定位(relocate)其中仍然有效的所有页的过程。此外,取决于具体的控制器和/或相应的垃圾收集操作单元,可以标识块-条带以用于回收和/或重新定位。
垃圾收集操作的单元在本文中也称为逻辑擦除块(LEB)。还应该注意,LEB包括作为物理擦除单位的物理存储器块的任意倍数。此外,将存储器块组织成LEB允许在来自不同存储器芯片、存储器平面和/或通道的存储器块之间添加类似RAID的奇偶校验保护方案,并且通过更高的并行性显著提高性能。
根据绝不意欲限制本发明的示例性实施例,存储器控制器(例如,参见图1的108)可以在内部执行垃圾收集。如前所述,垃圾收集可以包括选择要重新定位的块-条带,之后在所选择的块-条带上的仍然有效的所有数据可以被重新定位(例如移动)。在仍然有效的数据已被重新定位之后,整个块-条带可以被擦除,此后用于储存新数据。从垃圾收集的块-条带重新定位的数据量决定了写入放大。此外,减少写入放大的有效方式包括实现热分离(heat segregation)。
热分离
在本上下文中,数据的“热”是指更新数据的速率(例如,频率)(例如,用新数据重新写入)。被认为是“热”的存储器块趋向于具有频繁的更新速率,而被认为是“冷”的存储器块具有比热的块慢的更新速率。
应当注意,对于一些实施例,在确定存储器块的热度时,对存储器块的读取请求和/或对存储器块执行的读取操作的数量可能不会发挥作用。例如,如果从特定存储器块频繁读取数据,则高读取频率并不必然意味着存储器块也将具有高更新速率。而是,对给定存储器块执行的高频率读取操作可以表示储存在该存储器块中的数据的重要性、价值等。
通过对相同和/或相似的热度值的存储器块进行分组,可以实现热分离。特别地,热分离方法可以将热存储器页一起分组在一些存储器块中,而冷存储器页一起分组在分开的存储器块中。因此,热分离的LEB趋向于被热数据或是冷数据占据。
热分离的优点是双重的。首先,对热存储器块执行垃圾收集过程将防止也触发冷数据的重新定位。在没有热分离的情况下,频繁执行的对热数据的更新也导致与被重新定位的热数据在同一LEB上共同放置的所有冷数据的不期望的重新定位。因此,对于实现热分离的实施例,通过执行垃圾收集而引起的写入放大低得多。
其次,数据的相对热度可用于磨损均衡目的。例如,热数据可以被放置在更年轻(例如更健康)的存储器块中,而冷数据可以被放置在相对于那些较年轻的存储器块而言更老(例如没那么健康)的存储器块上。因此,相对较老的块暴露于磨损的速率被有效地减慢,从而改善了实现热分离的给定数据储存系统的寿命。
写入分配
写入分配包括将写入操作的数据放置到开放LEB的空闲位置中。一旦LEB中的所有页都被写入,LEB就被关闭,并被放置在一个保存被占用LEB的池中。通常,在被占用的池中的LEB变为有资格进行垃圾收集。开放的LEB的数量通常是有限的,并且任何被关闭的LEB可以立即或在一段延迟之后被开放的新LEB替代。
在执行期间,垃圾收集可以与用户写入操作同时发生。例如,随着用户(例如,主机)向装置写入数据,装置控制器可以持续地对具有无效数据的LEB进行垃圾收集,以为新的到来的数据页腾出空间。如上所述,在其上执行垃圾收集的LEB通常具有在垃圾收集操作时仍然有效的一些页;因此,这些页优选地被重新定位(例如,写入)到新的LEB。
同样,上述功能绝不意欲限制本文所描述和/或提议的任何储存系统的能力。而是,上述功能通过示例的方式呈现,并且取决于期望的实施例,储存系统的逻辑可以被配置为执行额外的或替代的功能,如本领域技术人员在阅读本说明书后将理解的。
现在参考图3,示出了根据一个实施例的系统300。作为选择,本系统300可以结合来自本文列出的任何其它实施例的特征来实现,诸如参照其它附图描述的那些。然而,本文呈现的这样的系统300和其它的可以用在各种应用和/或排列中,这些应用和/或排列可能有或可能没有在本文列出的示意性实施例中具体描述。此外,本文呈现的系统300可以在任何期望的环境中使用,例如与控制器组合使用。
如图所示,系统300包括耦接到包括垃圾收集器304的若干其它组件的写入缓存302。如前所述,垃圾收集器304可以用于通过重新定位有效数据并提供待擦除的非易失性存储器块以供稍后重新使用来释放LEB单元。因此,取决于期望的实施例,垃圾收集器304可以回收连续物理空间的块。根据示例性实施例,块擦除单元可用于追踪和/或完成由垃圾收集器304移交的非易失性存储器块的擦除。
写入缓存302还耦接到空闲块管理器306,空闲块管理器306可以在空闲的非易失性存储器块被擦除之后追踪它们。此外,如本领域普通技术人员在阅读本说明书后所了解的,空闲块管理器306可以使用擦除的空闲非易失性存储器块从不同的线路(例如,块-条带)构建非易失性存储器块的空闲条带。
仍然参考图3,写入缓存302耦接到LPT管理器308和存储器I/O单元310。LPT管理器308维持存储器中的逻辑地址到物理页的逻辑到物理映射。根据绝不意图限制本发明的示例,LPT管理器308可以维护4KiB逻辑地址的逻辑到物理映射。存储器I/O单元310与存储器芯片通信以便执行低级操作,例如诸如读取一个或多个非易失性存储器页、写入非易失性存储器页、擦除非易失性存储器块等等。
为了更好地理解本文所使用的块-条带和页-条带之间的区别,图4是根据一个实施例的概念图400。作为选择,本概念图400可以结合来自本文列出的任何其它实施例的特征来实现,诸如参照其它附图描述的那些。然而,本文所呈现的这种概念图400和其它可以用于各种应用和/或排列中,这些应用和/或排列可能有或可能没有在这里列出的示意性实施例中具体描述。此外,本文给出的控制器概念图400可以用于任何期望的环境中。因此,图4的示例性非易失性存储器控制器概念图400可以以缓存架构来实现。然而,取决于期望的实施例,图4的概念图400可以在定义储存在非易失性存储器中的数据的组织时实现。因此,下面依次描述这两个实现方式。
非易失性存储器
现在参见图4,概念图400包括标记为“平面0”到“平面M”的一组M+1个平面。当用储存在非易失性存储器中的数据来实现时,通道上的每个平面可以包括大的块集合,例如通常以1024、2048或更大的量级。此外,一个或多个平面还可以包括可以被用作对坏块(例如,执行不佳的块、具有不期望的特性的块等)的替换块的几个额外块。
在非易失性存储器的每个平面中,来自每个通道的单个块可以形成相应的块-条带。于是,由非易失性存储器的给定实施例支持的多个块-条带可以由每个平面和通道的块的数量来确定。
在平面0的分解视图中,概念图400进一步示出了在剩余平面中支持的块-条带集合中的单个块-条带(块-条带0)。平面0的块-条带0被示为包括11个块,来自于标记为“通道0”到“通道10”的每个通道一个块。应当注意,块与块-条带的关联可以随着时间而改变,因为块-条带通常在已经经过垃圾收集之后被解散。擦除的块可以被放置在空闲块池中,由此当写入分配请求刷新的块-条带时,新的块-条带从空闲块池中的块汇集。例如,参见概念图400,来自通道0的块10和来自通道4的块41当前与所示的平面0的块-条带0相关联。此外,所示的块-条带0保持N+1个页-条带,并且每个块因此保持标记为“页0”到“页N”的N+1个页。
缓存架构
仍然参考图4,当在缓存架构中实现时,在平面0的分解视图中示出的每块的页可以构成唯一的块。类似地,每个通道可以对应于单个单独的块。例如,参见概念图400,块10包括通道0中的所有页(页0到页N),而块41对应于通道4中的所有页,依此类推。
在存储器控制器的上下文中,例如,该控制器可能能够在通道级中实现RAID,块-条带由相当于一个条带的块的多个块组成。仍然参照图4,平面0的多个块构成块-条带0。尽管块-条带中的所有块通常属于同一平面,但在一些实施例中,块-条带的一个或多个块可以属于不同的平面。从而,每个平面可以包括块-条带。因此,根据示意性实施例,块0到块10可以构成块-条带。
不管图4的概念图400是否用非易失性存储器和/或缓存架构来实现,在不同的实施例中,每个块中的页数和/或每个平面中的通道数可以取决于期望的实施例而变化。根据绝不意欲限制本发明的示例性实施例,块可以包括256页,但是在各种实施例中可以包括更多或更少。类似地,每个平面的通道数量和/或平面数量可以取决于期望的实施例而变化。
仍然参考图4,块-条带中具有相同页索引的所有页表示页-条带。例如,页-条带0包括平面0的块-条带0中每个通道的第一页(第0页)。类似地,页-条带N包括平面0的块-条带0中每个通道的最后一页(页N)。
因为基于非易失性的存储器单元由于磨损或其它原因而呈现读取错误和/或故障,所以可以在存储器页内以及跨存储器芯片使用额外的冗余(例如,RAID-5和RAID-6类似方案)。存储器页内的额外冗余可以包括ECC码字,该ECC码字例如可以包括BCH码。
如前所述,存储器的逻辑页可以被打包到ECC码字的有效载荷中,由此可以使用ECC码字来恢复相应逻辑页的数据。然而,在常规产品中,相对于存储器的逻辑页的ECC码字的实现是不期望的。具体地说,ECC码字具有固定的有效载荷大小,这限制了ECC码字可以容纳的数据量,并且ECC码字的固定有效载荷大小与存储器中的未压缩的逻辑页的大小没有很好地对准。此外,一些非易失性存储器系统实现存储器中的逻辑页的压缩,由此压缩器将把每个逻辑页压缩到与其原始大小不同的大小(例如,长度)。此外,压缩的逻辑页的长度根据特定逻辑页而变化,因此各个压缩的逻辑页的长度不一致。在压缩的逻辑页被打包到ECC码字的有效载荷中时,这种压缩长度的变化加剧了ECC码字的固定有效载荷大小与逻辑页之间所经历的未对准。
填充ECC码字的整个有效载荷(在本文中也称为“紧密打包”)的常规尝试导致不期望地横跨在ECC码字之间的压缩的逻辑页。结果,通过要求从非易失性存储器读取并传送两个完整的ECC码字(例如,到控制器)以读取回单个横跨的逻辑页,增加了读取放大。当横跨跨越物理页边界而发生时,横跨也增加了延迟,从而要求除了从存储器传送两个完整的ECC码字之外还要读取两个物理页。因此,横跨的惩罚是必须读取多个页并且被要求返回比期望的更大的数据量。从而,非常期望通过提供填充ECC码字有效载荷的有效方法来克服上述传统缺点的方法。
与使用常规产品而经历的前述问题形成鲜明对比,本文描述和/或提议的各种实施例包括用于实现对准打包方案的工作负荷自适应算法,其将压缩的逻辑页有效地打包到ECC码字中,例如使用动态编程。因此,在压缩的逻辑页的长度上实现大的变化的储存环境可以实现本文所描述的各种实施例中的一些,以便以如下方式将压缩的逻辑页打包到ECC码字有效载荷(在本文中也称为ECC容器)中:使得发生横跨事件的可能性最小化,同时也确保ECC容器本身的有效使用,特别是与常规方法相比。
图5A示出了根据一个实施例的用于实现对准打包方案的方法500的流程图。在各种实施例中,方法500可以根据本发明在图1-4所示的任何环境中执行。可以在方法500中包括比在图5A中具体描述的操作更多或更少的操作,如本领域技术人员在阅读本说明书后将理解的。
方法500的每个步骤可以由操作环境的任何合适的组件执行。例如,在各种实施例中,方法500可以部分地或全部地由控制器、处理器等或其中具有一个或多个处理器的一些其它装置执行。例如处理电路、芯片和/或以硬件和/或软件实现的模块、并且优选地具有至少一个硬件组件的处理器可用于任何装置中以执行方法500的一个或多个步骤。示意性处理器包括但不限于中央处理单元(CPU)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)等、其组合、或本领域已知的任何其它合适的计算装置。
如图5A所示,方法500包括操作502,其中从缓冲器选择数据的压缩逻辑页的组合以最大化ECC容器(例如,ECC码字有效载荷)中的使用的空间量。应当注意,尽管操作502被描述为使ECC容器中的使用的空间量最大化,但是方法500可以等同地尝试最小化ECC容器中的未使用的空间量。
一旦压缩,逻辑页可以具有与另一压缩的逻辑页不同的长度。根据绝不意欲限制本发明的示例,第一和第二逻辑页都可以具有265个128位字的未压缩长度。然而,在压缩了第一和第二页两者之后(例如,通过压缩器),第一逻辑页的长度可以减小到50个128位字的压缩长度,而第二逻辑页的长度可能仅减小为200个128位字的压缩长度。根据仍然绝不意欲限制本发明的另一个示例,具有265个128位字的未压缩长度的逻辑页在被压缩之后可以缩短到260个128位字的压缩长度。此外,一些逻辑页可能根本不可压缩,例如,如果它们在先前的逻辑处理期间已经被压缩了。从而,根据各种实施例,压缩的逻辑页的长度根据特定逻辑页而变化,因此各种压缩的逻辑页的长度不一致。
因此,取决于ECC容器的大小和/或可用的各种压缩的逻辑页的压缩长度,压缩的逻辑页的某些组合可以比其它组合更有效地利用ECC容器中的可用空间,例如优选地不横跨到另一个ECC容器。因此,如下面将进一步详细描述的,实现在操作502中执行的选择的实施例能够通过有效地将压缩的逻辑页分组在一起来最大化ECC容器的使用而无需横跨,来克服传统的缺点。
仍然参考图5A,处理压缩的逻辑页的组合以产生误差校正码数据。参见操作504。一旦期望数量的压缩的逻辑页已被打包到ECC码字容器中,ECC容器可以被发送到ECC编码器,该ECC编码器将多个奇偶校验位添加到该容器。此外,操作506包括将与压缩的逻辑页的组合对应的数据和相关联的误差校正码数据写入到非易失性随机存取存储器。一旦已经添加了奇偶校验位,压缩的逻辑页和奇偶校验位的整个序列被写入非易失性存储器,在此之后,ECC容器可以在随后的处理中被重新使用。
图5B的代表性图550中示出了可以如何实现方法500的可视示例。作为初步事项,应当注意,虽然代表性图550包括压缩的逻辑页553、缓冲器552和ECC码字容器554的长度的示意性值,这些值仅作为示例给出,并不意欲限制本发明。
查看图5B中的代表性曲线图550,缓冲器552中的压缩的逻辑页553具有不同的长度,这已经由每个压缩的逻辑页的大小以及它们的在每个压缩的逻辑页553中描绘的相应长度值表示。此外,ECC容器554被示为具有458个128位字的示例性长度,这绝不意欲限制本发明。如前所述,取决于缓冲器552中可用的压缩的逻辑页553,压缩的逻辑页553的组合可以从缓冲器552中选择并被添加到ECC容器554。然而,取决于ECC容器554的大小和/或可用的各种压缩的逻辑页553的压缩长度,压缩的逻辑页553的某些组合可以比其它组合更有效地利用ECC容器554中的可用空间。因此,通过选择压缩的逻辑页553的组合来添加到ECC容器554,这最大化ECC容器554的使用没有横跨,本实施例能够克服传统的缺点。
根据在代表性图550中呈现的示意性实施例,ECC容器554的仅十一个128位字还未被使用。此外,考虑到将额外的压缩的逻辑页添加到ECC容器554所需要的横跨,可能不期望这样做,因为缓冲器552中可用的剩余压缩的逻辑页553中没有一个具有小于或等于十一个128位字的长度。
在所选择的压缩的逻辑页553的组合已被添加到ECC容器554之后,ECC容器554可以被发送到ECC编码器和/或与压缩的逻辑页的组合相对应的数据可以写入非易失性随机存取存储器。此外,缓冲器552中的剩余压缩的逻辑页可以被重新布置,使得可以接收额外的压缩的逻辑页。应当注意,如果在ECC容器554被发送以处理之前,在缓冲器552中接收到符合ECC容器554的可用空间的压缩的逻辑页,这里是具有十一个128位字或更小的长度的另一个压缩的逻辑页,则可以将新接收的压缩的逻辑页添加到ECC容器554以利用其中可用的剩余空间。
再次参考图5A,优选在选择操作502期间考虑缓冲器中的所有压缩的逻辑页。这如期望地允许在填充ECC容器时考虑最大数量的压缩的逻辑页组合,从而确保ECC容器的最有效的使用。然而,根据不同的方法,在操作502中执行的选择可以根据期望而变化。因此,虽然优选在选择期间考虑缓冲器中的所有压缩的逻辑页,但是在其它方法中,在选择期间可以仅考虑压缩的逻辑页的子集。根据一个示例,可以在操作502中执行的选择期间仅考虑已经被实质压缩(例如,与没有被实质压缩相对)的压缩的逻辑页,如很快显而易见的。
取决于压缩的逻辑页的与其未压缩长度相比的压缩长度,压缩的逻辑页可以被认为是被实质压缩的或没有被实质压缩的。根据示意性的方法,压缩长度为其未压缩长度的95%或更大的压缩的逻辑页可以被认为是没有被实质压缩的,而压缩长度小于其未压缩长度的95%的压缩的逻辑页可以被认为是被实质压缩的。因此,根据一个示例,可以将具有265个128位字的未压缩长度、被压缩到255个128位字的长度(即,其未压缩长度的约96%)的逻辑页确定为没有被实质压缩。根据另一示例,当逻辑页具有265个128位字的未压缩长度、被压缩到250个128位字的长度(即,其未压缩长度的大约94%)时,其可以被确定为被实质压缩。然而,取决于期望的实施例,用于在被实质压缩的压缩的逻辑页和没有被实质压缩的压缩的逻辑页之间区分的阈值可以是预定的和/或选择的压缩长度,比如逻辑页的原始的未压缩长度的99%、98%、97%、96%、94%、93%、92%、91%、90%、87%、85%、83%、80%等。
优选地,在操作502中执行的选择完全填充ECC容器,而尽可能不经常横跨到另一个ECC容器,从而实现可用空间的最大使用,而不引入常规产品所经历的读取放大和/或延迟。然而,在一些方法中,压缩的逻辑页的组合可能仅填充ECC容器的一部分,即小于其100%。当使用对准打包方案时可能期望允许ECC容器的部分填充,并且添加缓冲器中可用的任何额外的压缩的逻辑页将需要横跨。因此,在一些情况下,本文描述的任何方法可能期望牺牲ECC容器打包效率,以便于防止例如由于横跨而在常规产品中经历的读取放大和/或延迟。
如上所提到的,取决于ECC容器的大小和/或缓冲器中可用的各种压缩的逻辑页的压缩长度,压缩的逻辑页的某些组合可以比其它组合更有效地利用ECC容器中的可用空间,例如优选不横跨到另一个ECC容器。根据各种实施例,可以实行不同的技术来选择如期望最大化ECC容器中的使用的空间量的压缩的逻辑页的组合。根据绝不意欲限制本发明的一个示例性实施例,等式1可以用于选择要添加到给定ECC容器的压缩的逻辑页的期望组合。
最大化受到约束:F(x)≤K
等式1
等式1表示选择压缩的逻辑页的组合的问题的公式表示,其如期望地以数学形式最大化ECC容器中的使用的空间量。等式1中使用的变量定义如下:L代表保存在缓冲器中的压缩的逻辑页数量。K表示使用128位字的单位测量的ECC容器的长度。li表示使用128位字的单位测量的缓冲器中位置“i”处的压缩的逻辑页的长度,并且基本上可以是在1和265之间的随机数。xi是二进制向量x的“第i个”元素,如果在缓冲器中的位置“i”处的压缩的逻辑页被添加到ECC码字中,则x被定义为等于1,否则等于0。
使用这些变量,等式1定义对于二进制向量x的所有可能的2L值的最大化问题。通过将x实现为二进制向量,xiLi的值将或者是零,或者是乘以缓冲器中第i个位置处的压缩的逻辑页的长度的值。因此,xiLi的值将确定给定的压缩逻辑页的长度是否将对要被包括在ECC容器中的数据的总长度做出贡献,从而确定被实现的压缩的逻辑页的组合。
等式1的函数F(x)也受到F(x)的结果值等于或小于ECC容器的长度(即K)本身的约束,从而防止任何溢出。因此,函数F(x)实质上评估缓冲器中可用的压缩的逻辑页的所有可用组合,并且通过最小化其中浪费的空间来确定最有效地符合ECC容器的一个组合,而不在ECC容器边界和/或物理页边界之间实现横跨。因此,等式1中的最大化问题将确定在给定时间最有效地利用ECC容器的开放空间的缓冲器中的压缩的逻辑页的组合,从而最小化读取放大和读取延迟。
本领域技术人员在阅读本说明书后将认识到,等式1作为值等于权重的0/1背包问题(Knapsack problem)的陈述。类似地,本领域技术人员在阅读本说明书后将会认识到,可以借助于等式2.1中给出的函数来解决这些问题。
使得
等式2.1
可以如等式2.2所示递归地计算该函数的值,如本领域技术人员在阅读本说明书后将理解的。
等式2.2
再次,等式2.1表示选择在数学意义上如期望地最大化ECC容器中使用的空间量的压缩的逻辑页的组合的问题的公式化。等式2.1和2.2中使用的变量定义如下:
L代表保存在缓冲器中的压缩的逻辑页数量。
K表示使用128位字的单位测量的ECC容器的长度。
i表示其值范围是从1到L的变量。
w表示其值范围是从0到K的变量。
li表示使用128位字的单位测量的缓冲器中位置“i”处的压缩的逻辑页的长度,并且可以基本上是在1和265之间的随机数。lj表示使用128位字的单位测量的缓冲器中位置“j”处的压缩的逻辑页的长度,并且可以基本上是在1和265之间的随机数。x是二进制向量,如果缓冲器中的位置“j”处的压缩的逻辑页被添加到ECC码字中,则该二进制向量的第j个元素(xj)被定义为等于1,否则等于0。
如本领域技术人员在阅读本说明书后将理解的,根据等式2.2中呈现的此递归,对于所有i和w的值更新等式2.1的函数mi(w)。因此,通过使用给定缓冲器的压缩的逻辑页实现函数mi(w),函数mi(w)能够确定缓冲器中符合给定长度“w”的前i个压缩的逻辑页的最长选择。因此等式1的解由mL(K)给出。此外,可以使用追溯过程来确定与要添加到给定ECC容器的压缩的逻辑页的最佳打包组合对应的实际最优二进制向量,如将在下面进一步详细描述的(例如,参见图6B)。
图6A示出了根据一个实施例的等式2.2中提供的正向递归函数的示例性实现方式。此外,在各种实施例中,图5A中所示的方法600可以根据本发明在图1-5B所描述的任意环境中执行。可以在方法600中包括比在图6A中具体描述的操作更多或更少的操作,如本领域技术人员在阅读本说明书后将理解的。
方法600的每个步骤可以由操作环境的任何合适的组件来执行。例如,在各种实施例中,方法600可以部分地或完全地由控制器、处理器等或其中具有一个或多个处理器的一些其它装置执行。例如处理电路、芯片和/或以硬件和/或软件实现的模块、并且优选地具有至少一个硬件组件的处理器可用于任何装置中以执行方法600的一个或多个步骤。示意性处理器包括但不限于中央处理单元(CPU)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)等、其组合、或本领域已知的任何其它合适的计算装置。
如图6A所示,方法600包括操作602,其中i的值被设置为等于0,并且w的值被设置为等于0。此后,操作604将i的值从其先前值递增1。此外,决定606确定i的递增值是否小于或等于L的值。当决定606确定i的递增值小于或等于L的值时,方法600进行到操作608,从而将mi(0)设置为等于0。
方法600还包括将w的值从其先前值递增1。参见操作610。此外,决定612确定w的递增值是否小于或等于K的值。当决定612确定w的递增值小于或等于K的值时,方法600进行到决定614。然而,当决定612确定w的递增值大于K的值时,方法600返回到操作604,由此i的值再次从其先前值递增1。
决定614包括确定li-1的值是否小于或等于w的值。当决定614确定li-1的值小于或等于w的值时,方法600进行到操作618,这包括计算mi(w)=max[mi-1(w-li-1)+li-1,mi-1(w)]。然而,当决定614确定li-1的值大于w的值时,方法600进行到操作616,这定义mi(w)的值等于mi-1(w)的值。
在执行操作616或618之后,方法600返回到操作610,由此w的值再次递增1。此外,返回到决定606,当确定i的值大于L的值时,方法600进行到操作620,由此方法600结束。
如前所述,追溯过程可以被用于确定与要添加到给定ECC容器的压缩的逻辑页的最佳打包组合对应的实际最优二进制向量。现在参考图6B,方法650示出了根据一个实施例的可用于执行追溯过程的示例性流程图。此外,在各种实施例中,图6B所示的方法650可以根据本发明在图1-6A所示的任何环境中执行。在方法650中可以包括比图6B中具体描述的操作更多或更少的操作,如本领域技术人员在阅读本说明书时将理解的。
方法650的每个步骤可以由操作环境的任何合适的组件执行。例如,在各种实施例中,方法650可以部分地或全部地由控制器、处理器等或其中具有一个或多个处理器的一些其它装置执行。例如处理电路、芯片和/或以硬件和/或软件实现的模块、并且优选地具有至少一个硬件组件的处理器可用于任何装置中以执行方法650的一个或多个步骤。示意性处理器包括但不限于中央处理单元(CPU)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)等、其组合、或本领域已知的任何其它合适的计算装置。
如图6B所示,方法650包括操作652,其中将变量“状态”的值设置为等于K的值,并将i的值设置为等于L+1的值。此外,操作654将i的值递减1,并且决定656确定i的递减值是否大于或等于1。当决定656确定i的值大于或等于1时,方法650进行到决定658,其确定mi(状态)的值是否等于mi-1(状态)的值。
当决定658确定值相等时,方法进行到操作660,其将xi-1的值设置为等于0。然而,当决定658确定这些值不相等时,方法进行到操作662,其将xi-1的值设置为等于1。此外,操作664包括计算状态=状态-li-1(state=state-li-1)。
在执行操作660或664任一个之后,方法650返回到操作654,由此i的值再次递减1。此外,返回到决定656,当确定i的值小于1时,方法650进行到操作666,由此方法650结束。
图7A包括例示了关于缓冲器长度的示意性容量增益(可以储存在缓冲器中的逻辑页的数量)的曲线图700。虚线表示通过填充ECC容器中的所有可用空间(例如,使用紧密打包)而实现的理论最大容量增益。此外,沿着实线的点表示根据本文所描述的不同方法使用对准打包算法实现的容量增益,作为相应的缓冲器长度的函数。
尽管对于对准打包实现方式,一的缓冲器长度对应于差的容量增益,但随着缓冲器长度的增加,对准打包算法变得越来越有效。具体来说,对于8、16和更高数量的逻辑页的缓冲器长度,实现的容量增益约为2,即由于对准问题引起的容量损失基本为0。换句话说,本文中各种方法中描述的对准打包的实现方式如期望地实现无容量损失,同时还确保ECC容器内的期望对准,例如,不横跨在码字之间。
图7B包括示出了与压缩的逻辑页的不同平均长度相关联的示例性读取放大的曲线图710。具体地,曲线图710示出了使用如本文不同实施例中所述的对准打包方法实现的期望的读取放大的减小。
如所示,使用16的缓冲器长度实现的对准打包能够实现约2.1的恒定读取放大,而紧密打包得到高得多的读取放大水平,特别是随着压缩的逻辑页的平均长度增加。虚线指示在紧密和对准打包之间经历的读取放大的差异,从而概述了使用紧密打包技术相对于如本文所述的对准打包方法所经历的不期望的增加的读取放大的量。
此外,图7C包括描绘相对于给定缓冲器中的压缩的逻辑页的平均长度的示例性容量增益的另一曲线图720。如所示,对于压缩的逻辑页的较低平均长度,在该示例中使用紧密打包(其填充整个ECC容器)获得的容量增益与使用对准打包方法(具有16的缓冲器长度)所达到的容量增益几乎相同。当压缩的逻辑页的平均长度低于150个128位字时,实际上没有经历容量损失。
然而,压缩的逻辑页的较大平均长度相对于曲线图720中描述的这两种方案的性能产生不同的结果。具体来说,与使用紧密打包所获得的容量增益相比,对于具有平均长度大于约150个128位字的压缩的逻辑页,与对准打包相关联的要求已经产生高达约10%的容量损失。因此,对准打包优选地在具有平均长度较低的压缩的逻辑页的实施例中实现。
于是,性能还取决于压缩的逻辑页的统计。如果压缩的逻辑页的统计使得逻辑页不是非常可压缩的,那么对准打包算法将不太可能有效地从缓冲器中选择如期望地符合ECC码字的压缩的逻辑页的组合。因此,在一些情况下,可以实行其它措施以确保ECC容器的有效使用。
根据一些实施例,这些实施例绝不意欲限制本发明,可能希望实现紧密打包,从而在一些情况下导致在ECC容器之间横跨。然而,例如,相对于范围在位于两个不同物理页上的ECC容器之间的实例,可能期望将横跨限制到其中范围在位于相同物理页上的ECC容器之间的实例。结果,对于平均压缩逻辑页长度高于期望的情况,例如压缩的逻辑页未被实质压缩的情况,可以改善储存容量。因此,通过选择性地引入横跨,可以避免浪费不期望的量的ECC容器容量。
通过在一些情况下选择性地实施在ECC容器之间的横跨,一些实施例可能能够执行自适应打包,由此紧密打包(例如,使用横跨)和对准打包两者可以可互换地实现。具体地,图8示出了用于实现自适应打包方案的可选方法800,根据绝不意欲限制本发明的一个实施例,其可以在上述方法500的操作502之后实现(例如,执行),以便确定是否应实现跨越(紧密打包)。从而,在各种实施例中,此外,可以按照本发明在图1-5B所示的任何环境中执行方法800。可以在可选方法800中包括比图8中具体描述的操作更多或更少的操作,如本领域技术人员在阅读本说明书后将会理解的。
可选方法800的每个步骤可以由操作环境的任何合适的组件执行。例如,在各种实施例中,可选方法800可以部分地或完全地由控制器、处理器等或其中具有一个或多个处理器的一些其它装置执行。例如处理电路、芯片和/或以硬件和/或软件实现的模块、并且优选地具有至少一个硬件组件的处理器可用于任何装置中以执行可选方法800的一个或多个步骤。示意性处理器包括但不限于中央处理单元(CPU)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)等、其组合、或本领域已知的任何其它合适的计算装置。
如图8所示,可选方法800包括决定802,其中确定在向ECC容器添加(例如,操作502中选择的)压缩的逻辑页的组合之后,ECC容器中的未使用的空间量是否高于阈值。阈值可以相对于防止读取放大和/或延迟的益处来权衡防止ECC容器的未使用部分的益处。换句话说,决定802确定给定ECC容器中的未使用的空间量是否为可接受的量。然而,在一些方法中,决定802可以基于ECC容器中的使用的空间量、例如相对于阈值等同地确定是否将额外的压缩逻辑页的一部分添加到ECC容器。取决于所期望的方法,这里使用的阈值可以被预先确定、实时计算、储存在存储器(例如,查找表)中、由用户在操作期间选择等。
如果在决定802中确定在将压缩的逻辑页的组合添加到ECC容器之后,ECC容器中的未使用的空间量低于阈值,则方法800进行到操作808,由此方法800结束。
方法800另外包括响应于在向ECC容器添加压缩的逻辑页的组合之后ECC容器中的未使用的空间的量高于阈值的确定,将额外的压缩逻辑页的第一部分添加到ECC容器。参见操作804。此外,操作806包括将额外的压缩逻辑页的第二部分添加到第二ECC容器。因此,如果确定ECC容器中的未使用空间的量不如期望那样高,则优选以紧密打包方式将一个或多个额外的压缩逻辑页添加到ECC容器,而不管这样做可能需要的横跨。通过在一些情况下选择性地实现在ECC容器之间的横跨,方法800可以可互换地有效执行紧密打包(例如,使用横跨)和对准打包两者。
进行了操作806,方法800行进到操作808,由此方法800完成。然而,如前所述,根据一些方法,方法800是可以在图5A中的方法500的操作502之后执行的可选的步骤序列。因此,,对于实现除了方法500之外的可选方法800的实施例,在完全执行了可选方法800之后,方法500的执行可以在操作504恢复。
如上所述,可以使用阈值来相对于防止读取放大和/或延迟的益处权衡防止ECC容器的未使用部分的益处。例如,在高容量增益的益处超过与横跨相关联的读取放大和/或延迟的情况下,可以使用较低的阈值。或者,在与横跨相关联的读取放大和/或延迟不可接受的情况下,可以使用较高的阈值。因此,可以例如由用户取决于期望的实施例通过平衡增加的容量和横跨的结果来确定阈值。此外,在操作期间可以调整阈值以考虑变化的条件、道路的压缩的逻辑页、ECC容器尺寸等。在示例性自适应打包实施例中实现的阈值甚至可以为0,在这种情况下,唯一允许的对准打包将构成完美符合而不需要横跨,从而防止ECC容器的任何量的浪费。
然而,再次,例如,相对于范围在位于两个不同物理页上的ECC容器之间的实例,可能期望将横跨限制到范围在位于相同物理页上的ECC容器之间的实例。因此,可以容许在同一页的容器之间的横跨,而不准许在不同页上的容器之间的横跨。然而,在一些方法中,也可能期望允许在不同物理页上的ECC容器之间的横跨。例如,一些逻辑页如果它们在先前的逻辑过程处已被压缩并且因此可能不能恰当地符合ECC容器,则它们可能不是可压缩的。结果,对于平均压缩逻辑页长度高于期望的情况,例如压缩的逻辑页未被实质压缩的情况,可以改善储存容量。因此,通过选择性地引入横跨,可以避免ECC容器容量的所不希望的量的损失。
根据一些方法,向其添加额外的压缩的逻辑页的第二部分的第二ECC容器可以是空的。换句话说,第二ECC容器可能没有被添加任何其它逻辑页,而是可以严格地用作溢出(overflow)。然而,根据其它方法,第二ECC容器可以包括先前添加(例如,写入的)压缩的逻辑页。于是,当新的逻辑页被压缩并添加到缓冲器时,压缩的逻辑页可以被添加到先前填充的ECC容器的未使用部分。这将通过将横跨(溢出)数据添加到几乎满的ECC容器来进一步减少ECC容器中未使用的空间量。
也可以在其它情况下容许横跨。例如,在一些情况下,压缩的逻辑页的大小可以确定是否可以执行横跨。当压缩的逻辑页的长度太大而不允许紧密打包时,比如两个压缩的逻辑页不适合于ECC容器、而单个压缩的逻辑页将填充ECC容器的不可接受的少量时,可以尝试实现替代方法以最小化ECC容器的容量损失。
参考图9,根据一个实施例示出了用于实现自适应打包方案的方法900的流程图。此外,在各种实施例中,方法900可以根据本发明在图1-5B所示的任何环境中执行。在方法900中可以包括比图9中具体描述的更多或更少的操作,如本领域技术人员在阅读本说明书时将理解的。
方法900的每个步骤可以由操作环境的任何合适的组件来执行。例如,在各种实施例中,方法900可以部分地或完全地由控制器、处理器等或其中具有一个或多个处理器的一些其它装置执行。例如处理电路、芯片和/或以硬件和/或软件实现的模块、并且优选地具有至少一个硬件组件的处理器可用于任何装置中以执行方法900的一个或多个步骤。示意性处理器包括但不限于中央处理单元(CPU)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)等、其组合、或本领域已知的任何其它合适的计算装置。
如图9所示,方法900包括确定缓冲器中的数据的压缩的逻辑页中的至少一些是否被实质压缩,例如,或等同地确定其是否实质上未压缩。见操作902。此外,根据一些方法,操作902还可以确定缓冲器中的数据的压缩的逻辑页是否未被实质压缩。因此,取决于应用,操作902能够确定缓冲器中的压缩的逻辑页是否被实质压缩和/或未被实质压缩。
仍然参考图9,响应于确定缓冲器中的至少一些压缩的逻辑页被实质压缩,方法900可以选择被实质压缩的压缩逻辑页的第一组合,以添加到ECC容器以最大化ECC容器中的使用的空间量。参见操作904。然而,应当注意,虽然操作904被描述为最大化ECC容器中的使用的空间量,但是方法900可以等同地尝试最小化ECC容器中的未使用的空间量。还优选地,实质压缩的逻辑页的第一组合仅填充ECC容器的一部分。
此外,响应于确定缓冲器中的至少一些压缩的逻辑页未被实质压缩,操作906包括选择未被实质压缩的压缩逻辑页的第二组合以添加到ECC容器,以最大化ECC容器中的使用的空间量(或者等同地,最小化ECC容器中未使用的空间量)。
尽管上面已经将操作904和906描述为响应于相对立的确定来执行,但是根据一些方法,例如当确定缓冲器中的一些压缩的逻辑页被实质压缩、而缓冲器中的其它压缩的逻辑页未被实质压缩时,可以执行操作904和操作906。因此,取决于实施例,例如,取决于在操作902中做出的确定,可以在方法900中执行操作904、906中的一个或两个。
仍然参考方法900,操作908包括处理压缩的逻辑页的第一组合和/或第二组合以产生ECC数据。此外,操作910包括将与压缩的逻辑页的第一组合和/或第二组合相对应的数据和相关联的ECC数据写入到非易失性随机存取存储器。
如前所述,可以执行横跨以将未被实质压缩的压缩逻辑页添加到ECC容器。因此,通过在操作906中选择未被实质压缩的压缩逻辑页的组合以添加到ECC容器,可以实现横跨以将压缩的逻辑页的一个的第一部分添加到第一ECC容器,此外还将压缩的逻辑页的该一个的第二部分添加到第二ECC容器(例如,参见图8的操作804、806)。
再次,例如,相对于范围在位于两个不同物理页上的ECC容器之间的实例,可能期望将横跨限制到范围在位于相同物理页上的ECC容器之间的实例。因此,可以容许在同一页的容器之间的横跨,而不容许在不同页上的容器之间的横跨。然而,在一些方法中,也可能期望允许在不同物理页上的ECC容器之间的横跨。
于是,其中至少一些压缩的逻辑页、大多数压缩的逻辑页、所有压缩的逻辑页等未被实质压缩的实施例可以实现横跨以允许保护与未被实质压缩的压缩逻辑页对应的数据。
取决于期望的实施例,可以实现不同的方法以选择要横跨在ECC容器之间的压缩的逻辑页(例如,未被实质压缩的)。例如,在一些实施例中,可以随机地选择压缩的逻辑页以横跨在ECC容器之间。换句话说,可能不需要额外的处理来选择压缩的逻辑页来填充ECC容器的空的部分并横跨到另一个ECC容器。然而,在其它实施例中,可能期望选择具有最长长度的压缩的逻辑页以横跨在两个ECC容器之间。此外,一些实施例可以实现等式3以尽可能少地选择将横跨到下一个ECC容器中的压缩的逻辑页。
使得:mL(w)-w=0
等式3
再次,等式3表示在数学意义上尽可能少地选择将横跨到下一个ECC容器中的压缩的逻辑页的问题的公式化。等式3中使用的变量可以定义如下:
L代表保存在缓冲器中的压缩的逻辑页的数量。
K表示使用128位字的单位测量的ECC容器的长度。
w表示其值范围是从K+1到K+265的变量。
如本领域技术人员在阅读本说明书将理解的,等式3的函数K'确定满足mL(w)-w=0的约束的w的最小值。一旦已经计算了K'的值,就能够通过从递归状态mL(K')执行追溯来确定尽可能少地从缓冲器中选择越过到下一个ECC码字容器中的压缩的逻辑页。
如本领域技术人员在阅读本说明书将理解的,可以在正向递归之后对w的所有值来更新等式3的函数K'。根据一个示例性方法,可以实现以上在图6A中描述的正向递归过程以更新函数K'。
此外,追溯过程可以用于确定与要横跨在两个给定的ECC容器之间的所选的压缩逻辑页对应的实际最优二进制向量。根据一个示例性方法,可以实现以上在图6B中描述的追溯过程以确定与要横跨在两个给定的ECC容器之间的所选的压缩逻辑页对应的实际最优二进制向量。
如上所述,可以通过选择性地引入横跨来避免浪费ECC容器容量的所不期望的量。通过在一些情况下选择性地实现在ECC容器之间的横跨,一些实施例能够可互换地执行紧密打包(例如,使用横跨)和对准打包两者。图10示出了根据一个实施例的具有可以用于确定对于给定情况是实现对准打包还是紧密打包的处理步骤的方法1000的示例性实现方式。考虑到由于在前一个ECC容器上的横跨而可能已经发生的到当前ECC容器中的任何溢出,方法1000根据等式3递归地计算K'的值。此外,可以在各种实施例中,根据本发明在图1-9所示的任何环境中进行图10所示的方法1000。可以在方法1000中包括比在图10中具体描述的操作更多或更少的操作,如本领域技术人员在阅读本说明书时将理解的。
方法1000的每个步骤可以由操作环境的任何合适的组件执行。例如,在各种实施例中,方法1000可以部分地或完全地由控制器、处理器等或其中具有一个或多个处理器的一些其它装置执行。例如处理电路、芯片和/或以硬件和/或软件实现的模块、并且优选地具有至少一个硬件组件的处理器可用于任何装置中以执行方法1000的一个或多个步骤。示意性处理器包括但不限于中央处理单元(CPU)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)等、其组合、或本领域已知的任何其它合适的计算装置。
如图10所示,方法1000包括操作1002,其中K'的值被设置为等于K的值——溢出。如上所述,K表示使用128位字的单位测量的ECC容器的长度,而在方法开始时,溢出表示已经横跨到当前ECC码字上的数据量。然而,在方法结束时,溢出表示将横跨到下一个ECC码字上的数据量。因此,在操作1002中计算出的差确定当前ECC容器中的剩余空间。
仍然参考图10,决定1004确定K'-mL(K')的值是否小于thd,其中thd是与ECC容器中的可允许浪费的空间量对应的预定阈值。在决定1004中作出的确定决定了是应实现紧密打包还是对准打包。具体地说,当决定1004确定K'-mL(K')的值小于thd时,方法1000确定应实现对准打包。方法1000然后进行到操作1006,其中将状态值设置为等于K'的值,并且将溢出设置为等于0。方法1000然后进行到操作1008,由此方法1000结束。
回到决定1004,当确定K'-mL(K')的值大于thd时,方法1000确定应该实施紧密打包。方法1000然后进行到操作1010,其中i的值被设置为等于K'+1的值。此外,决定1012包括确定(mL(i)–i)!的值是否等于0。当决定1012确定该值不等于0时,方法1000进行到操作1008,并且结束方法1000。或者,当决定1012确定该值等于0时,方法1000进行到操作1014,其中i的值递增1。此外,操作1016包括将状态的值设置为等于i的递增后的值,并且操作1018包括将溢出的值设置为等于状态的值K'。
图11A包括示出了相对于给定缓冲器中的压缩的逻辑页的平均长度的容量增益的曲线图1100。如图所示,对于压缩的逻辑页的较低平均长度,使用紧密打包(填充整个ECC容器)实现的容量增益与使用对准打包方法(具有16的缓冲器长度)和自适应打包方法(具有40的阈值)所达到的容量增益几乎相同。如前所述,当压缩的逻辑页的平均长度低于150个128位字时,实际上没有经历容量损失。
然而,再次显而易见的是,对于压缩的逻辑页的较大平均长度,相对于图1100的这三个所绘方案的性能产生不同的结果。虽然与平均长度大于约150个128位字的压缩的逻辑页的对准打包相关联的数据已经产生与上述图7C中看到的类似的容量损失,但是自适应打包绘图更加紧密地遵循紧密打包所经历的容量增益。于是,实现自适应打包方法的实施例能够实现紧密打包和对准打包两者,同时选择性横跨,得到在所有工作负荷之间的最小容量损失。
此外,图11B包括示出了与压缩的逻辑页的不同平均长度相关联的读取放大的图1110。具体地,图1110示出了使用如本文不同实施例中描述的对准打包方法和自适应打包方法而实现的期望的读取放大的减小。
如图所示,对准打包能够实现约2.1的恒定读取放大,而紧密打包得到高得多的读取放大水平,特别是随着压缩的逻辑页的平均长度增加。此外,自适应打包方案接近于约2.1的最小可实现的读取放大,而无论压缩的逻辑页的平均长度如何。虚线指示由紧密打包方案和自适应打包方案所经历的读取放大相对于对准打包的最小读取放大的差异。
相比于一次仅填充一个ECC容器,本文描述的一些实施例能够例如同时地将压缩的逻辑页添加到多个ECC容器。根据一个示例性方法,可以从公共缓冲器并行填充15个ECC容器。因此,根据一种方法,从缓冲器中选择压缩的逻辑页(例如,参见图5A的操作502)可以包括同时选择数据的压缩逻辑页的多个组合以最大化多个ECC容器中的使用的空间量。同时选择数据的压缩逻辑页的多个组合的能力允许提高效率和更快的数据处理速率,同时确保ECC容器空间的有效使用,而不会引入常规产品所经历的不适当的读取放大和/或延迟。
本领域技术人员在阅读本说明书后将能够用“多背包问题”标识用从缓冲器中选择的压缩的逻辑页打包多个ECC容器的问题。可以通过首先从缓冲器中选择最小化第一ECC容器中的未使用空间的一组压缩的逻辑页而以次优的方式来解决该问题。然后从缓冲器中移除所选择的压缩的逻辑页,并且从减小尺寸的缓冲器中选择最小化第二ECC容器中的未使用空间的另一组压缩的逻辑页。以这种方式,可以使用单个缓冲器来打包多个ECC容器。
根据一个使用中的实施例,上述参考图5A-6B、8-10描述的操作和/或确定中的任何一个或多个可以由计算机程序产品执行,该计算机程序产品包括具有随其包含的程序指令的计算机可读储存介质。具体地,如本领域技术人员在阅读本说明书所了解的,程序指令可以由控制器读取和/或执行以使控制器执行这些操作和/或确定中的一个或多个。
然而,根据另一个正在使用的实施例,上述参考图5A-6B、图8-10描述的操作和/或确定中的任何一个或多个可以由一系统执行,该系统包括被配置为储存数据的NVRAM,除此之外还包括处理器和与处理器集成的和/或可由处理器执行以进行一个或多个操作和/或确定的逻辑,如同本领域技术人员在阅读本说明书时将理解的。
因此,本文描述和/或提议的各种实施例包括用于将压缩的逻辑页有效地打包到ECC码字中的工作负荷自适应算法。本文所公开的用于将压缩的逻辑页(例如,用户逻辑页)打包到ECC容器中的算法除了能够对充分可压缩的工作负荷实现改进的储存容量之外,还能够实现最小的读取延迟和最小的读取放大性能。算法可以使用动态规划来确定缓冲器的压缩的逻辑页的有效组合以将数据打包到ECC码字容器中。如前所述,可以实现对准打包以实现对于被显著压缩的压缩逻辑页的有效的ECC容器打包,而当压缩的逻辑页不是全部被显著压缩时可以实现自适应打包方案,从而确保容量损失最小化。
因此,本文描述的不同实施例能够在各种不同情况下实现如期望的对准打包方案和自适应打包方案,以实现将压缩的逻辑页有效地打包到一个或多个ECC码字中。此外,本文描述的任何方法可以使用动态规划来实现。于是,包括不同长度的压缩的逻辑页的储存环境可以实现本文所描述的各种方法中的一些,以便以期望的方式将压缩的逻辑页打包到ECC容器中,从而确保ECC容器的有效使用,特别是与常规方法相比。
本发明可以是系统、方法和/或计算机程序产品。计算机程序产品可以包括计算机可读储存介质,其上载有用于使处理器实现本发明的各个方面的计算机可读程序指令。
计算机可读储存介质可以是可以保持和储存由指令执行设备使用的指令的有形设备。计算机可读储存介质例如可以是――但不限于――电储存设备、磁储存设备、光储存设备、电磁储存设备、半导体储存设备或者上述的任意合适的组合。计算机可读储存介质的更具体的示例(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(RAM)、只读取存储器(ROM)、可擦式可编程只读取存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式压缩盘只读取存储器(CD-ROM)、数字多功能盘(DVD)、记忆棒、软盘、机械编码设备、例如其上储存有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读储存介质不被解释为瞬时信号本身,诸如无线电波或者其它空闲传播的电磁波、通过波导或其它传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。
这里所描述的计算机可读程序指令可以从计算机可读储存介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部储存设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供储存在各个计算/处理设备中的计算机可读储存介质中。
用于执行本发明操作的计算机程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言—诸如SmaLPTalk、C++等,以及常规的过程式编程语言—诸如“C”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA),该电子电路可以执行计算机可读程序指令,从而实现本发明的各个方面。
这里参照根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本发明的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。
这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令储存在计算机可读储存介质中,这些指令使得计算机、可编程数据处理装置和/或其它设备以特定方式工作,从而,储存有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。
也可以把计算机可读程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。
附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
此外,根据各种实施例的系统可以包括处理器以及与处理器集成的和/或处理器可执行的逻辑,该逻辑被配置为执行本文所述的一个或多个处理步骤。所谓集成,意味着处理器具有作为硬件逻辑而嵌入的逻辑,比如专用集成电路(ASIC)、现场可编程门阵列(FPGA)等。所谓可由处理器执行,这意味着逻辑是:硬件逻辑;软件逻辑,诸如固件、操作系统的一部分、应用程序的一部分;等等,或硬件和软件逻辑的一些组合,其可由处理器访问并且被配置为在由处理器执行时使处理器执行一些功能。软件逻辑可以储存在任何存储器类型的本地和/或远程存储器上,如本领域已知的。可以使用本领域已知的任何处理器,比如软件处理器模块和/或硬件处理器,诸如ASIC、FPGA、中央处理单元(CPU)、集成电路(IC)、图形处理单元(GPU)等。
将清楚的是,上述系统和/或方法的各种特征可以以任何方式组合,从上述呈现的描述创建多个组合。
虽然上面已经描述了各种实施例,但是应当理解,它们仅仅是作为示例而非限制来呈现的。因此,优选实施例的广度和范围不应受到上述任何示例性实施例的限制,而应仅根据所附权利要求及其等同物来限定。
图12示出了根据一个实施例的网络架构1200。如图12所示,提供多个远程网络1202,包括第一远程网络1204和第二远程网络1206。网关1201可以耦接在远程网络1202和邻近网络1208之间。在本网络架构1200的上下文中,网络1204、1206每个可以采取任何形式,包括但不限于LAN、诸如因特网的WAN、公共交换电话网(PSTN)、内部电话网等。
在使用中,网关1201用作从远程网络1202到邻近网络1208的入口点。因此,网关1201可以用作能够引导到达网关1201的给定数据分组的路由器、以及为给定分组提供进出网关1201的实际路径的交换机。
进一步包括耦接到邻近网络1208的至少一个数据服务器1214,并且其可经由网关1201从远程网络1202访问。应当注意,数据服务器1214可以包括任何类型的计算装置/组件。耦接到每个数据服务器1214的是多个用户装置1216。这样的用户装置1216可以包括台式计算机、膝上型计算机、手持式计算机、打印机和/或任何其它类型的含逻辑的装置。应当注意,在一些实施例中,用户装置1211也可以直接耦接到任意网络。
外设1220或一系列外设1220、例如传真机、打印机、扫描仪、硬盘驱动器、网络和/或本地数据储存单元或系统等可以耦接到网络1204、1206、1208中的一个或多个。应当注意,可以将数据库和/或额外组件与耦接到网络1204、1206、1208的任意类型的网络元件一起使用或集成到该任意类型的网络元件中。在本说明书的上下文中,网络元件可以指网络的任何组件。
根据一些实施例,本文描述的方法和系统可以与虚拟系统和/或仿真一个或多个其它系统的系统一起实现和/或在该虚拟系统和/或仿真一个或多个其它系统的系统上实现,该其它系统诸如虚拟地承载MICROSOFT WINDOWS环境的UNIX系统等。在一些实施例中,可以通过使用VMWARE软件来增强该虚拟化和/或仿真。
在其它实施例中,一个或多个网络1204、1206、1208可以表示通常被称为“云”的系统集群。在云计算中,以按需关系向云中的任何系统提供诸如处理能力、外设、软件、数据、服务器等的共享资源,从而允许在许多计算系统之间存取和分布服务。云计算通常涉及在云中运行的系统之间的因特网连接,但是也可以使用连接系统的其它技术,如本领域已知的。
图13示出了根据一个实施例的与图12的用户装置1216和/或服务器1214相关联的代表性硬件环境。图13示出了根据一个实施例的具有诸如微处理器的中央处理单元1310和经由系统总线1312互连的多个其它单元的处理器系统1300的典型硬件配置。在一些实施例中,中央处理单元1310可以包括上文参照图2的一个或多个处理器210描述的任何方法。
图13所示的处理器系统1300包括随机存取存储器(RAM)1314、只读取存储器(ROM)1316和I/O适配器1318。根据绝不意欲限制本发明的一些实施例,I/O适配器1318可以包括上文参照图2的I/O适配器218描述的任何方法。仍然参考图13的处理器系统1300,上述组件1314、1316、1318可用于将诸如储存子系统1320的外设连接到总线1312。在一些实施例中,储存子系统1320可以包括与图2的数据储存系统220类似和/或相同的配置。根据不绝对限制本发明的一个示例,除了如图2所示的RAID控制器之外,储存子系统1320还可以包括非易失性数据存储卡,例如具有NVRAM存储器卡、RAM、ROM和/或一些其它已知类型的非易失性存储器。
继续参考图13,用户接口适配器1322用于将键盘1324、鼠标1326、扬声器1328、麦克风1332和/或诸如触摸屏、数字相机(未示出)等的其它用户接口装置连接到总线1312。
处理器系统1300还包括将处理器系统1300连接到通信网络1335(例如,数据处理网络)的通信适配器1334和将总线1312连接到显示装置1338的显示适配器1336。
处理器系统1300可以具有在其上驻留的诸如MICROSOFT WINDOWS操作系统(OS)、MAC OS、UNIX OS等的操作系统。应当理解,优选实施例也可以在除了所提到的以外的平台和操作系统上实现。优选实施例可以使用JAVA、XML、C和/或C++语言或其它编程语言以及面向对象的编程方法来编写。可以使用面向对象编程(OOP),其已经越来越多地用于开发复杂的应用。
此外,图14示出了根据一个实施例的与较低级(例如,磁带)储存层组合而实现高级(例如,SSD)储存层的储存系统1400。注意,根据各种实施例,图14所示的元件中的一些可以被实现为硬件和/或软件。储存系统1400可以包括用于与在至少一个较高储存层1402和至少一个较低储存层1406上的多个介质进行通信的储存系统管理器1412。然而,在其它方法中,储存系统管理器1412可以与在至少一个较高储存层1402上而不在较低储存层上的多个介质上进行通信。较高储存层1402优选地可以包括一个或多个随机存取和/或直接存取介质1404,比如硬盘、非易失性存储器(NVM)、NVRAM、SSD中的固态存储器、闪速存储器、SSD阵列、闪存阵列等和/或本文所述或本领域已知的其它的。根据示意性示例,图3-4示出了取决于期望的实施例可以用作较高储存层1402的SSD系统的示例性架构。
仍然参考图14,较低储存层1406优选地包括一个或多个较低性能的储存介质1408,包括诸如磁带驱动器中的磁带和/或光学介质的顺序存取介质、较慢存取HDD、较慢存取SSD等和/或本文所述的或本领域已知的其它。一个或多个额外储存层1416可以包括系统1400的设计者所期望的储存存储器介质的任何组合。因此,在一些方法中,一个或多个额外储存层1416可以包括与图1-2所示类似或相同的SSD系统架构。此外,较高储存层1402和/或较低层储存层1406的任意者可以包括储存装置和/或储存介质的任何组合。
储存系统管理器1412可以通过图14所示的诸如储存区域网络(SAN)或者一些其它合适的网络类型的网络1410与较高储存层1402和较低储存层1406上的储存介质1404、1408通信。储存系统管理器1412还可以通过主机接口1414与一个或多个主机系统(未示出)进行通信,主机接口1414可以是或可以不是储存系统管理器1412的一部分。储存系统管理器1412和/或储存系统1400的任何其它组件可以以硬件和/或软件实现,并且可以利用处理器(未示出)来执行本领域已知类型的命令,例如中央处理单元(CPU)、现场可编程门阵列(FPGA)、专用集成电路(ASIC)等。当然,可以使用储存系统的任何布置,这在本领域技术人员阅读本说明书后将是显而易见的。
在更多实施例中,储存系统1400可以包括任何数量的数据储存层,并且可以在每个储存层内包括相同或不同的储存介质。例如,每个数据储存层可以包括相同类型的储存存储器介质,比如HDD、SSD、顺序存取介质(磁带驱动器中的磁带、光盘驱动器中的光盘等)、直接存取介质(CD-ROM、DVD-ROM等)或媒体储存类型的任何组合。在一个这样的配置中,较高储存层1402可以包括用于在更高性能的储存环境中储存数据的大多数SSD储存介质,并且包括较低储存层1406和额外储存层1416的剩余储存层可以包括用于在较低性能的储存环境中储存数据的SSD、HDD、磁带驱动器等的任何组合。以这种方式,可以将更频繁存取的数据、具有较高优先级的数据、需要更快速存取的数据等储存到较高储存层1402,而不具有这些属性之一的数据可以被储存到包括较低储存层1406的额外储存层1416中。当然,本领域技术人员在阅读本说明书之后,可以根据本文中给出的实施例,将储存介质类型的许多其他组合设计成实现为不同的储存方案。
根据一些实施例,储存系统(比如1400)可以包括被配置为接收打开数据集的请求的逻辑、被配置为确定所请求的数据集是否以多个相关联的部分被储存到分层数据储存系统1400的较低储存层1406的逻辑、被配置为将所请求的数据集的每个相关联的部分移动到分层数据储存系统1400的较高储存层1402的逻辑、以及被配置为根据相关联的部分在分层数据储存系统1400的较高储存层1402上聚集所请求的数据集的逻辑。
当然,根据各种实施例,该逻辑可以被实现为任何装置和/或系统上的方法或实现为计算机程序产品。
Claims (25)
1.一种方法,包括:
从缓冲器中选择数据的压缩逻辑页的组合以最大化在误差校正码容器中的使用的空间量;
处理所述压缩逻辑页的组合以产生误差校正码数据;和
将与所述压缩逻辑页的组合对应的数据和相关联的误差校正码数据写入到非易失性随机存取存储器。
2.根据权利要求1所述的方法,其中在所述选择期间考虑所述缓冲器中的所有压缩逻辑页。
3.根据权利要求1所述的方法,其中所述选择包括同时选择数据的压缩逻辑页的多个组合以最大化多个误差校正码容器中的使用的空间量。
4.根据权利要求1所述的方法,其中所述压缩逻辑页的组合仅填充所述误差校正码容器的一部分。
5.根据权利要求1所述的方法,包括:
基于所述误差校正码容器中的使用的空间量,确定是否将额外的压缩逻辑页的一部分添加到所述误差校正码容器;
响应于所述确定,将所述额外的压缩逻辑页的所述部分添加到所述误差校正码容器;和
将所述额外的压缩逻辑页的第二部分添加到第二误差校正码容器。
6.根据权利要求1所述的方法,包括:
确定在向所述误差校正码容器添加所述压缩逻辑页的组合之后所述误差校正码容器中的未使用的空间量是否高于阈值;
响应于确定在向所述误差校正码容器添加所述压缩逻辑页的组合之后所述误差校正码容器中的未使用的空间量高于所述阈值,将额外的压缩逻辑页的第一部分添加到所述误差校正码容器;和
将所述额外的压缩逻辑页的第二部分添加到第二误差校正码容器。
7.根据权利要求6所述的方法,其中所述第二误差校正码容器具有先前在其中写入的压缩逻辑页。
8.根据权利要求1所述的方法,包括:
确定所述缓冲器中的压缩逻辑页的至少一些未被实质压缩;
选择未被实质压缩的压缩逻辑页之一;
将所选择的未被实质压缩的所述压缩逻辑页之一的第一部分添加到所述误差校正码容器;和
将所选择的未被实质压缩的所述压缩逻辑页之一的第二部分添加到第二误差校正码容器。
9.一种计算机程序产品,包括计算机可读储存介质,该计算机可读储存介质具有其中包含的程序指令,所述程序指令可由控制器读取和/或执行以使所述控制器:
由控制器从缓冲器中选择数据的压缩逻辑页的组合以最大化在误差校正码容器中的使用的空间量;
由控制器处理所述压缩逻辑页的组合以产生误差校正码数据;和
由控制器将与所述压缩逻辑页的组合对应的数据和相关联的误差校正码数据写入到非易失性随机存取存储器。
10.根据权利要求9所述的计算机程序产品,其中在所述选择期间考虑所述缓冲器中的所有压缩逻辑页。
11.根据权利要求9所述的计算机程序产品,其中所述选择包括同时选择数据的压缩逻辑页的多个组合以最大化多个误差校正码容器中的使用的空间量。
12.根据权利要求9所述的计算机程序产品,其中所述压缩逻辑页的组合仅填充所述误差校正码容器的一部分。
13.根据权利要求9所述的计算机程序产品,所述程序指令可由控制器读取和/或执行以使所述控制器:
基于所述误差校正码容器中的使用的空间量,确定是否将额外的压缩逻辑页的一部分添加到所述误差校正码容器;
响应于所述确定,将所述额外的压缩逻辑页的所述部分添加到所述误差校正码容器;和
将所述额外的压缩逻辑页的第二部分添加到第二误差校正码容器。
14.根据权利要求9所述的计算机程序产品,所述程序指令可由控制器读取和/或执行以使所述控制器:
确定在向所述误差校正码容器添加所述压缩逻辑页的组合之后所述误差校正码容器中的未使用的空间量是否高于阈值;
响应于确定在向所述误差校正码容器添加所述压缩逻辑页的组合之后所述误差校正码容器中的未使用的空间量高于所述阈值,将额外的压缩逻辑页的第一部分添加到所述误差校正码容器;和
将所述额外的压缩逻辑页的第二部分添加到第二误差校正码容器。
15.根据权利要求9所述的计算机程序产品,所述程序指令可由控制器读取和/或执行以使所述控制器:
确定所述缓冲器中的压缩逻辑页的至少一些未被实质压缩;
选择未被实质压缩的压缩逻辑页之一;
将所选择的未被实质压缩的所述压缩逻辑页之一的第一部分添加到所述误差校正码容器;和
将所选择的未被实质压缩的所述压缩逻辑页之一的第二部分添加到第二误差校正码容器。
16.一种系统,包括:
配置为储存数据的非易失性随机存取存储器(NVRAM);和
处理器以及与所述处理器集成的和/或可由所述处理器执行的逻辑,所述逻辑被配置为:
从缓冲器中选择数据的压缩逻辑页的组合以最大化在误差校正码容器中的使用的空间量;
处理所述压缩逻辑页的组合以产生误差校正码数据;和
将与所述压缩逻辑页的组合对应的数据和相关联的误差校正码数据写入到非易失性随机存取存储器。
17.根据权利要求16所述的系统,其中在所述选择期间考虑所述缓冲器中的所有压缩逻辑页。
18.根据权利要求16所述的系统,其中所述选择包括同时选择数据的压缩逻辑页的多个组合以最大化多个误差校正码容器中的使用的空间量。
19.根据权利要求16所述的系统,其中所述压缩逻辑页的组合仅填充所述误差校正码容器的一部分。
20.根据权利要求16所述的系统,其中所述逻辑被配置为:
基于所述误差校正码容器中的使用的空间量,确定是否将额外的压缩逻辑页的一部分添加到所述误差校正码容器;
响应于所述确定,将所述额外的压缩逻辑页的所述部分添加到所述误差校正码容器;和
将所述额外的压缩逻辑页的第二部分添加到第二误差校正码容器。
21.根据权利要求16所述的系统,其中所述逻辑被配置为:
确定在向所述误差校正码容器添加所述压缩逻辑页的组合之后所述误差校正码容器中的未使用的空间量是否高于阈值;
响应于确定在向所述误差校正码容器添加所述压缩逻辑页的组合之后所述误差校正码容器中的未使用的空间量高于所述阈值,将额外的压缩逻辑页的第一部分添加到所述误差校正码容器;和
将所述额外的压缩逻辑页的第二部分添加到第二误差校正码容器。
22.根据权利要求21所述的系统,其中所述第二误差校正码容器具有先前在其中写入的压缩逻辑页。
23.根据权利要求16所述的系统,其中所述逻辑被配置为:
确定所述缓冲器中的压缩逻辑页的至少一些未被实质压缩;
选择未被实质压缩的压缩逻辑页之一;
将所选择的未被实质压缩的所述压缩逻辑页之一的第一部分添加到所述误差校正码容器;和
将所选择的未被实质压缩的所述压缩逻辑页之一的第二部分添加到第二误差校正码容器。
24.一种方法,包括:
确定缓冲器中数据的压缩逻辑页是否被实质压缩;
选择被实质压缩的压缩逻辑页的第一组合以添加到误差校正码容器,以最大化误差校正码容器中的使用的空间量;
选择未被实质压缩的压缩逻辑页的第二组合以添加到误差校正码容器,以最大化误差校正码容器中的使用的空间量;
处理压缩逻辑页的第一组合和/或第二组合以产生误差校正码数据;和
将与压缩逻辑页的第一组合和/或第二组合对应的数据和相关联的误差校正码数据写入到非易失性随机存取存储器。
25.根据权利要求24所述的方法,包括:
将所述第二组合中的压缩逻辑页之一的第一部分添加到所述误差校正码容器;和
将所述第二组合中的所述压缩逻辑页之一的第二部分添加到第二误差校正码容器。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/581,954 US10162700B2 (en) | 2014-12-23 | 2014-12-23 | Workload-adaptive data packing algorithm |
US14/581,954 | 2014-12-23 | ||
PCT/IB2015/059624 WO2016103112A1 (en) | 2014-12-23 | 2015-12-15 | Workload-adaptive data packing algorithm |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107111562A true CN107111562A (zh) | 2017-08-29 |
CN107111562B CN107111562B (zh) | 2020-07-14 |
Family
ID=56129519
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201580070609.9A Active CN107111562B (zh) | 2014-12-23 | 2015-12-15 | 将压缩的逻辑页打包成误差校正码的方法和系统 |
Country Status (5)
Country | Link |
---|---|
US (1) | US10162700B2 (zh) |
CN (1) | CN107111562B (zh) |
DE (1) | DE112015005742B4 (zh) |
GB (1) | GB2554508B (zh) |
WO (1) | WO2016103112A1 (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9354994B2 (en) | 2014-02-18 | 2016-05-31 | International Business Machines Corporation | Preemptive relocation of failing data |
US9710199B2 (en) | 2014-11-07 | 2017-07-18 | International Business Machines Corporation | Non-volatile memory data storage with low read amplification |
KR102372825B1 (ko) * | 2015-07-31 | 2022-03-14 | 에스케이하이닉스 주식회사 | 데이터 저장 장치 및 그것의 동작 방법 |
US9712190B2 (en) | 2015-09-24 | 2017-07-18 | International Business Machines Corporation | Data packing for compression-enabled storage systems |
US9870285B2 (en) * | 2015-11-18 | 2018-01-16 | International Business Machines Corporation | Selectively de-straddling data pages in non-volatile memory |
US10430329B2 (en) * | 2017-06-23 | 2019-10-01 | Western Digital Technologies, Inc. | Quality of service aware storage class memory/NAND flash hybrid solid state drive |
CN108322220A (zh) * | 2018-02-08 | 2018-07-24 | 华为技术有限公司 | 编解码方法、装置及编解码设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102136296A (zh) * | 2011-02-21 | 2011-07-27 | 北京理工大学 | 一种NANDFlash存储芯片的元数据格式识别方法 |
CN102713855A (zh) * | 2009-12-23 | 2012-10-03 | 桑迪士克科技股份有限公司 | 在存储器设备处的控制数据的错误校正的系统和方法 |
CN103197897A (zh) * | 2012-01-09 | 2013-07-10 | 三星电子株式会社 | 存储装置和非易失性存储器装置及其操作方法 |
US20130246721A1 (en) * | 2012-02-08 | 2013-09-19 | Kabushiki Kaisha Toshiba | Controller, data storage device, and computer program product |
CN103415844A (zh) * | 2011-01-18 | 2013-11-27 | Lsi公司 | 高级冗余信息计算 |
Family Cites Families (47)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4958351A (en) | 1986-02-03 | 1990-09-18 | Unisys Corp. | High capacity multiple-disk storage method and apparatus having unusually high fault tolerance level and high bandpass |
US5386531A (en) | 1991-05-15 | 1995-01-31 | International Business Machines Corporation | Computer system accelerator for multi-word cross-boundary storage access |
GB9606927D0 (en) | 1996-04-02 | 1996-06-05 | Memory Corp Plc | Data storage devices |
JP4079506B2 (ja) | 1997-08-08 | 2008-04-23 | 株式会社東芝 | 不揮発性半導体メモリシステムの制御方法 |
US6105109A (en) | 1998-02-19 | 2000-08-15 | International Business Machines Corporation | System speed loading of a writable cache code array |
US6128623A (en) | 1998-04-15 | 2000-10-03 | Inktomi Corporation | High performance object cache |
US6529040B1 (en) | 2000-05-05 | 2003-03-04 | Xilinx, Inc. | FPGA lookup table with speed read decoder |
US6857087B2 (en) | 2001-06-11 | 2005-02-15 | Her Majesty The Queen In Right Of Canada, As Represented By The Secretary Of State For Industry Through The Communication Research Centre | High-performance low-memory interleaver banks for turbo-codes |
US7437492B2 (en) | 2003-05-14 | 2008-10-14 | Netapp, Inc | Method and system for data compression and compression estimation in a virtual tape library environment |
US8447931B1 (en) | 2004-08-27 | 2013-05-21 | Oracle America, Inc. | Processor with a register file that supports multiple-issue execution |
US8055979B2 (en) | 2006-01-20 | 2011-11-08 | Marvell World Trade Ltd. | Flash memory with coding and signal processing |
US7324389B2 (en) | 2006-03-24 | 2008-01-29 | Sandisk Corporation | Non-volatile memory with redundancy data buffered in remote buffer circuits |
US8028148B2 (en) | 2006-09-06 | 2011-09-27 | Microsoft Corporation | Safe and efficient allocation of memory |
TWI375953B (en) | 2008-02-21 | 2012-11-01 | Phison Electronics Corp | Data reading method for flash memory, controller and system therof |
JP4498426B2 (ja) | 2008-03-01 | 2010-07-07 | 株式会社東芝 | メモリシステム |
US8176381B2 (en) | 2008-05-08 | 2012-05-08 | Nec Laboratories America, Inc. | Multidimensional turbo product codes and generalized low-density parity-check codes with component reed-solomon codes for optical transmission |
US9063874B2 (en) | 2008-11-10 | 2015-06-23 | SanDisk Technologies, Inc. | Apparatus, system, and method for wear management |
US8370520B2 (en) | 2008-11-24 | 2013-02-05 | Juniper Networks, Inc. | Adaptive network content delivery system |
US9037951B2 (en) | 2009-12-17 | 2015-05-19 | International Business Machines Corporation | Data management in solid state storage systems |
JP2011130333A (ja) | 2009-12-21 | 2011-06-30 | Fujitsu Ltd | 巡回冗長検査符号生成回路及び巡回冗長検査符号生成方法 |
US8930798B2 (en) | 2010-03-30 | 2015-01-06 | International Business Machines Corporation | Data encoding in solid state storage devices |
US8533550B2 (en) | 2010-06-29 | 2013-09-10 | Intel Corporation | Method and system to improve the performance and/or reliability of a solid-state drive |
TWI455144B (zh) | 2010-07-22 | 2014-10-01 | Silicon Motion Inc | 使用於快閃記憶體的控制方法與控制器 |
JP5553309B2 (ja) | 2010-08-11 | 2014-07-16 | 国立大学法人 東京大学 | データ処理装置 |
US8537919B2 (en) | 2010-09-10 | 2013-09-17 | Trellis Phase Communications, Lp | Encoding and decoding using constrained interleaving |
CN101958720B (zh) | 2010-09-24 | 2013-03-20 | 西安电子科技大学 | 缩短Turbo乘积码的编译码方法 |
US8352676B2 (en) | 2010-10-26 | 2013-01-08 | Hitachi, Ltd. | Apparatus and method to store a plurality of data having a common pattern and guarantee codes associated therewith in a single page |
US8601210B2 (en) | 2011-03-28 | 2013-12-03 | Lsi Corporation | Cache memory allocation process based on TCPIP network and/or storage area network array parameters |
US8799745B2 (en) | 2011-04-12 | 2014-08-05 | Hitachi, Ltd. | Storage control apparatus and error correction method |
TWI459197B (zh) | 2011-04-21 | 2014-11-01 | Phison Electronics Corp | 資料寫入方法、記憶體控制器與記憶體儲存裝置 |
US9703796B2 (en) | 2011-12-06 | 2017-07-11 | Brocade Communications Systems, Inc. | Shared dictionary between devices |
US8775759B2 (en) | 2011-12-07 | 2014-07-08 | Jeffrey Tofano | Frequency and migration based re-parsing |
KR101862341B1 (ko) | 2012-01-09 | 2018-05-30 | 삼성전자주식회사 | 데이터 압축 기능을 갖는 데이터 저장 장치 |
US20130238832A1 (en) | 2012-03-07 | 2013-09-12 | Netapp, Inc. | Deduplicating hybrid storage aggregate |
WO2013147819A1 (en) | 2012-03-29 | 2013-10-03 | Intel Corporation | Compression-enabled blending of data in non-volatile memory |
US9152325B2 (en) | 2012-07-26 | 2015-10-06 | International Business Machines Corporation | Logical and physical block addressing for efficiently storing data |
KR101379883B1 (ko) | 2012-11-06 | 2014-04-01 | 한국과학기술원 | 플래시 메모리의 소모 전력 감소 방법 및 그 장치 |
US20140258628A1 (en) | 2013-03-11 | 2014-09-11 | Lsi Corporation | System, method and computer-readable medium for managing a cache store to achieve improved cache ramp-up across system reboots |
CN103200467B (zh) | 2013-03-14 | 2016-03-23 | 烽火通信科技股份有限公司 | 光网络设备中的网元协议报文传递装置及方法 |
US9170938B1 (en) * | 2013-05-17 | 2015-10-27 | Western Digital Technologies, Inc. | Method and system for atomically writing scattered information in a solid state storage device |
US9514057B2 (en) * | 2013-12-04 | 2016-12-06 | Sandisk Technologies Llc | Storage module and method for managing logical-to-physical address mapping |
US9927998B2 (en) * | 2014-02-05 | 2018-03-27 | Tidal Systems, Inc. | Flash memory compression |
US9785499B2 (en) | 2014-02-12 | 2017-10-10 | Seagate Technology Llc | Hot-read data aggregation and code selection |
CN103941116A (zh) | 2014-03-12 | 2014-07-23 | 珠海创能科世摩电气科技有限公司 | 故障录波指示器的数据压缩方法 |
CN104123238A (zh) | 2014-06-30 | 2014-10-29 | 海视云(北京)科技有限公司 | 数据存储方法及装置 |
US9720821B2 (en) * | 2014-09-17 | 2017-08-01 | Storart Technology Co. Ltd. | Adaptive compression data storing method for non-volatile memories and system using the same |
US9710199B2 (en) | 2014-11-07 | 2017-07-18 | International Business Machines Corporation | Non-volatile memory data storage with low read amplification |
-
2014
- 2014-12-23 US US14/581,954 patent/US10162700B2/en active Active
-
2015
- 2015-12-15 GB GB1711253.3A patent/GB2554508B/en active Active
- 2015-12-15 CN CN201580070609.9A patent/CN107111562B/zh active Active
- 2015-12-15 DE DE112015005742.0T patent/DE112015005742B4/de active Active
- 2015-12-15 WO PCT/IB2015/059624 patent/WO2016103112A1/en active Application Filing
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102713855A (zh) * | 2009-12-23 | 2012-10-03 | 桑迪士克科技股份有限公司 | 在存储器设备处的控制数据的错误校正的系统和方法 |
CN103415844A (zh) * | 2011-01-18 | 2013-11-27 | Lsi公司 | 高级冗余信息计算 |
CN102136296A (zh) * | 2011-02-21 | 2011-07-27 | 北京理工大学 | 一种NANDFlash存储芯片的元数据格式识别方法 |
CN103197897A (zh) * | 2012-01-09 | 2013-07-10 | 三星电子株式会社 | 存储装置和非易失性存储器装置及其操作方法 |
US20130246721A1 (en) * | 2012-02-08 | 2013-09-19 | Kabushiki Kaisha Toshiba | Controller, data storage device, and computer program product |
Also Published As
Publication number | Publication date |
---|---|
GB2554508B (en) | 2019-01-16 |
DE112015005742T5 (de) | 2017-11-30 |
DE112015005742B4 (de) | 2023-03-23 |
US20160179614A1 (en) | 2016-06-23 |
CN107111562B (zh) | 2020-07-14 |
US10162700B2 (en) | 2018-12-25 |
WO2016103112A1 (en) | 2016-06-30 |
GB201711253D0 (en) | 2017-08-30 |
GB2554508A (en) | 2018-04-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107111562A (zh) | 工作负荷自适应数据打包算法 | |
CN101636712B (zh) | 在存储控制器内服务对象请求的装置、系统和方法 | |
US9793929B2 (en) | Data packing for compression-enabled storage systems | |
CN104303162B (zh) | 用于管理缓存接纳的系统和方法 | |
CN106708424B (zh) | 对用户数据执行选择性底层暴露映射的设备和方法 | |
CN105009091B (zh) | 一种数据存储系统及用于数据存储系统的动态预留空间方法 | |
CN103049058B (zh) | 使用空数据令牌指令管理存储设备中的数据的装置、系统和方法 | |
US9645758B2 (en) | Apparatus, system, and method for indexing data of an append-only, log-based structure | |
US20170242788A1 (en) | Regrouping data during relocation to facilitate write amplification reduction | |
US9710199B2 (en) | Non-volatile memory data storage with low read amplification | |
CN109791520A (zh) | 物理介质感知的空间耦合的日志记录和重放 | |
US20170060683A1 (en) | Systems and methods for data organization in storage systems using large erasure codes | |
CN114127677B (zh) | 用于写高速缓存架构中的数据放置的方法和系统 | |
US9632702B2 (en) | Efficient initialization of a thinly provisioned storage array | |
JP2019502987A (ja) | 不揮発性メモリ・システムにおけるマルチページ障害の回復 | |
KR20180059342A (ko) | 저장 장치의 i/o 성능 개선을 위한 시스템 및 방법 | |
US20210064465A1 (en) | Extended error correction in storage device | |
CN107589906A (zh) | 存储器系统及其操作方法 | |
CN111274062B (zh) | Nand装置混合奇偶校验管理 | |
WO2012089154A1 (zh) | 存储阵列和存储系统及数据访问方法 | |
JP2022539133A (ja) | ストレージ・システムにおけるブロック・プール・サイズの適合 | |
WO2016116930A1 (en) | Reusable memory devices with wom codes | |
CN109240937A (zh) | 数据存储装置及其操作方法 | |
CN112346658A (zh) | 在具有高速缓存体系结构的存储设备中提高数据热量跟踪分辨率 | |
US12050556B2 (en) | Stripe defragmentation and rebuild based on stripe access frequency |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |