WO2013138552A1 - Architecture for storage of data on nand flash memory - Google Patents
Architecture for storage of data on nand flash memory Download PDFInfo
- Publication number
- WO2013138552A1 WO2013138552A1 PCT/US2013/031182 US2013031182W WO2013138552A1 WO 2013138552 A1 WO2013138552 A1 WO 2013138552A1 US 2013031182 W US2013031182 W US 2013031182W WO 2013138552 A1 WO2013138552 A1 WO 2013138552A1
- Authority
- WO
- WIPO (PCT)
- Prior art keywords
- data
- aus
- stripe
- storage medium
- parity
- 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.)
- Ceased
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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 OR CALCULATING; 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
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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 OR CALCULATING; 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/1076—Parity data used in redundant arrays of independent storages, e.g. in RAID systems
- G06F11/108—Parity data distribution in semiconductor storages, e.g. in SSD
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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 OR CALCULATING; 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
- G06—COMPUTING OR CALCULATING; 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/0608—Saving storage space on storage systems
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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]
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Definitions
- This disclosure relates to techniques for
- RAID redundant array of independent disks
- a solid state drive reads and writes data from devices such as NAND flash memory devices or dynamic random access memory (DRAM) devices that may be implemented using a RAID architecture.
- the SSD typically includes an SSD controller with a number of data channels for transferring data to and from the NAND flash memory.
- the SSD controller typically executes firmware that manages data in fixed byte size units known as allocation units (AUs) .
- AUs allocation units
- data is written to a given page of the NAND flash memory in a single operation and the write operation includes a number of bytes that is an integer multiple of the size of an AU.
- the memory of the NAND flash may be underutilized.
- Systems, methods, apparatus, and techniques are provided for processing data from a storage medium.
- a stripe of data stored on the storage medium is read, where the stripe comprises a plurality of data allocation units (AUs) and a parity AU.
- Error correction decoding is applied to each of the plurality of data AUs to produce a plurality of decoded data AUs. It is determined whether a value of the parity AU is satisfied by values of bytes in the plurality of decoded data AUs.
- the plurality of decoded data AUs are output in response to a determination that the value of the parity AU is satisfied by the values of bytes in the
- a data AU in the plurality of data AUs is unreadable.
- a first portion of the stripe of data is read using a first data transfer channel in the plurality of data transfer channels and a second portion of the stripe of data is read using a second transfer channel in the plurality of data transfer channels.
- a data AU in the plurality of data AUs is partially stored in each of a first page and a second page of the storage medium.
- the data AU in the plurality of data AUs is partially stored in each of a first data transfer channel and a second data transfer channel of the storage medium.
- a value of a byte of the parity AU in a given byte position is generated by exclusive ORing a value of a byte in the given byte position in every data AU in the plurality of data AUs.
- FIG. 1 depicts an illustrative array of NAND pages of a RAID-implemented storage medium in accordance with some embodiments ;
- FIG. 2 depicts an illustrative technique for writing a sequence of AUs to NAND pages of a RAID-implemented storage medium in accordance with some embodiments;
- FIG. 3 depicts an illustrative stripe-based
- FIG. 4 depicts another illustrative stripe-based technique for writing a sequence of AUs to NAND pages of a RAID-implemented storage medium in accordance with some embodiments ;
- FIG. 5 depicts yet another illustrative stripe- based technique for writing a sequence of AUs to NAND pages of a RAID-implemented storage medium in accordance with some embodiments ;
- FIG. 6 depicts an additional illustrative stripe- based technique for writing a sequence of AUs to NAND pages of a RAID-implemented storage medium in accordance with some embodiments.
- FIG. 7 depicts an illustrative process for reading data from one or more stripes of a storage medium in
- a stripe is defined to be a collection of AUs stored on the storage medium.
- the stripe- based approach allows AUs to be written across page
- FIG. 1 depicts an illustrative array of NAND pages of a RAID-implemented storage medium in accordance with some embodiments.
- Firmware of an SSD controller may access memory locations of the RAID-implemented storage medium based on a parameterization of the memory locations according to channels, pages, logical unit numbers (LUNs), and physical devices (e.g., pieces of silicon) .
- LUNs logical unit numbers
- physical devices e.g., pieces of silicon
- illustration 100 shows that the array of NAND pages is addressable using x+1 data transfer channels, which are labeled CH0 102 through CHx 104, respectively.
- illustration 100 depicts the structure of the data transfer channels CH0 102 and CHx 104 in particular detail.
- Each of the data transfer channels depicted in the illustration 100 may be used to access multiple physical devices (or "targets"), e.g., hard disk drives.
- the data transfer channel CH0 102 may be used to interface with the target 0 106 and the target 1 108.
- each of the targets of the illustration 100 includes multiple LUNs.
- the target 1 108 includes LUN 0 110 and
- Each LUN may correspond to, e.g., a virtual hard disk drive partition.
- Each LUN may include multiple planes, where each plane is powered by a different set of power resources.
- the LUN 0 110 includes plane 0 114 and plane 1 116.
- the array of NAND pages may include any number of pages 118.
- the array of NAND pages of a RAID-implemented storage medium depicted in FIG. 1 is merely illustrative and the techniques disclosed herein may be applied to any suitable NAND array.
- the techniques disclosed herein may be applied to a NAND array including more than two targets per page and data transfer channel and/or to LUNs that include more than two planes .
- FIG. 2 depicts an illustrative technique for writing a sequence of AUs to NAND pages of a RAID-implemented storage medium in accordance with some embodiments.
- illustration 200 depicts how 32 consecutives AUs are written to pages spanning various channels and planes of the storage medium.
- firmware of the SSD controller is programmed to write the first and second AUs in the sequence of 32 AUs to channel 0, plane 0, and page 0 of the RAID-implemented storage medium.
- the firmware of the SSD controller is programmed to write the seventeenth and eighteenth AUs in the sequence of 32 AUs to channel 0, plane 1, and page 0 of the RAID- implemented storage medium.
- the exact location is programmed to write the first and second AUs in the sequence of 32 AUs to channel 0, plane 0, and page 0 of the RAID-implemented storage medium.
- ECC error correction code
- a typical ECC code may only fully correct a codeword in which a small minority of bytes are corrupted and will not be able to fully correct a codeword in which a large percentage of the codeword' s bytes are corrupted or otherwise lost.
- the SSD controller used to generate the write pattern depicted in FIG. 2 requires that a given AU be written entirely to a single page of a storage device. This requirement is reflected in FIG. 2, which shows that each AU is contained entirely within a single page (i.e., a single rectangular box) .
- each AU is contained entirely within a single page.
- each page of the NAND pages of the RAID-implemented storage medium associated with FIG. 2 has a size of 2,048 bytes and that each AU has a size of 748 bytes.
- each of the 16 pages stores exactly two AUs of data.
- each page uses only 1,496 bytes out of a total of 2,048 bytes, and each page is therefore underutilized by approximately 27-percent.
- FIG. 3 depicts an illustrative stripe-based
- the write technique illustrated in FIG. 3 differs from that illustrated in FIG. 2 because AUs are allowed to break across pages. For example, the second AU breaks across pages 310 and 312, the fourth AU breaks across pages 312 and 314, and the thirteenth AU breaks across
- FIG. 3 in which a single AU may break cross multiple pages, is the potential for cascading errors that span the pages.
- the system of FIG. 3 includes parity check AUs on a per- stripe basis.
- all the AUs of row 320 are subject to a parity AU, i.e., the twentieth AU, which breaks across pages 322 and 324.
- a stripe generally specifies the AUs in the domain of the parity AUs applies.
- the parity AU 20 is based on the data contained in all the other AUs of the row 320. For example, in some implementations, a byte length of the parity AU is equal to a byte length of a page, each byte of the parity AU is
- the write technique of FIG. 3 has the advantage of more efficiently using the storage media and, in a typical implementation, the additional efficiency gained by allowing bytes to be written across pages will far outweigh the loss of some bytes to serve as parity check bytes.
- One potential drawback to the implementation depicted in FIG. 3 is that an ability to perfectly recover a lost page (or portion of a page) of data may depend on whether a single additional error (i.e., in addition to the errors due to the lost page or portion of a page) is present anywhere in the stripe.
- a value of a n th byte of the parity check AU of a given stripe i.e., the twentieth AU for the stripe of row 320 and the twenty-seventh AU for the stripe of row 332 is determined by exclusive ORing the n th position of every AU in the stripe (i.e., not including the parity AU itself) .
- a value of a first byte of the parity check AU labeled 20 is determined by exclusive ORing the first position the AUs labeled 1, 2, 15, 16, 3, 4, 17, 18, 5, 6, 19, 7, and 21.
- the page 314 malfunctions so that none of the data of the page 314 is readable.
- the contents of the page 314 are fully recoverable if there are no errors in any byte of data read from any other page of the row 320 (after ECC decoding is performed on the byte) . If, on the other hand, one or more errors remain in any of AUs labeled 1, 2, 15, 16, 3, 4, 17, 18, 19, 7, and 21 after ECC decoding, then the exclusive ORing will not correctly recover all the bytes of the twentieth AU.
- FIG. 4 depicts another illustrative stripe-based technique for writing a sequence of AUs to NAND pages of a RAID-implemented storage medium in accordance with some embodiments.
- AUs are allowed to break across pages.
- the write technique illustrated in FIG. 4 differs from that illustrated in FIG. 3 because a stripe is defined as a subset of all AUs within a row of the figure (e.g., row 420) rather than as all the AUs of the row.
- AUs take values from 1 through 28 and these values represent an ordered sequence in which these AUs are written to the storage media (with AU 1 written first and AU 28 written last) .
- AUs 1 through 7 are written to plane 0 of page 0
- AUs 8 through 14 are written to plane 0 of page 1
- AUs 15 through 21 are written to plane 1 of page 0
- AUs 22 through 28 are written to plane 1 of page 1 (all AUs are written to the particular pages depicted in FIG. 3) .
- stripes 1, 2, and 3 each include a subset of AUs present in the row 420
- stripes 4, 5, and 6 each include a subset AUs present in the row 422.
- stripe 1 includes six of fourteen total AUs of the row 420 (i.e., AUs labeled 1, 15, 4, 18, 7, and 21), stripe 2 includes four of the fourteen total AUs of the row 420 (i.e., AUs labeled 2, 16, 5, 19), and the stripe 3
- each of stripes 1 through 6 includes exactly one parity AU.
- a value of a first byte of the parity check AU labeled 21 is determined by exclusive ORing the first position the AUs labeled 1, 15, 4, 18, and 7.
- the write technique of FIG. 4 may
- the contents of the AU labeled 5 are fully recoverable if there are no errors in any byte of data read from any of AUs 2 and 16 (after ECC decoding is performed on the byte) .
- the contents of the AU labeled 6 are fully recoverable if there are no errors in any byte of data read from any of AUs 3 and 17 (after ECC decoding is performed on the byte) .
- FIG. 4 is able to recover any given stripe of data
- the write technique of FIG. 4 is able read more data correctly in the presence of page failures than the system of FIG. 3.
- the write technique of FIG. 4 requires that a larger fraction of bytes be dedicated to parity than the write technique of FIG. 3.
- FIG. 3 requires a total of four parity AUs across all 16 pages while FIG. 4 requires a larger total of eight parity AUs across all 16 pages.
- FIG. 5 depicts yet another illustrative stripe- based technique for writing a sequence of AUs to NAND pages of a RAID-implemented storage medium in accordance with some embodiments.
- the write technique of FIG. 5 is similar to the write technique of FIG. 4, but writes AUs to media in a different order than that of FIG. 3. More particularly, in the write technique of FIG. 4, AUs take values from 1 through 30 and these values represent an ordered sequence in which AUs are written to the storage media (with AU 1 written first and AU 30 written last) .
- AUs 1 through (a portion of) 8 are written to plane 0 of page 0, AUs 8 (the remaining portion of AU 8) through 15 are written to plane 1 of page 0, then AUs 16 through (a portion of) 23 are written to plane 0 of page 1, and AUs 23 (the remaining portion of AU 23) through 30 are written to plane 1 of page 1 (all AUs are written to the particular pages depicted in FIG. 4) .
- the write technique of FIG. 5 writes AUs across planes before writing across pages
- the write technique of FIG. 4 writes AUs across pages before writing across planes.
- FIG. 6 depicts an additional illustrative stripe- based technique for writing a sequence of AUs to NAND pages of a RAID-implemented storage medium in accordance with some embodiments.
- the write technique of FIG. 6 is similar to the write techniques of FIGS. 4 and 5, but includes stripes whose AUs span across certain pages.
- table 610 lists the four stripes used by the write technique of FIG. 6.
- stripes 2 and 4 each span pages 0 and 1.
- stripe 2 includes all of portions of AUs labeled 2, 18, 6, 22, 10, 26, 14, and 30 on page 0 and all or portions of AUs 2, 18, 6, 22, 10, 26, 14, and 30 on page 1.
- the write technique of FIG. 6 is able to utilize longer stripes (and a smaller total number of stripes) because it uses stripes that span pages. Further, because the write
- the write technique of FIG. 6 requires less parity overhead than the write technique of either FIGS. 4 or 5.
- FIG. 7 depicts an illustrative process for reading data from one or more stripes of a storage medium in accordance with some embodiments.
- the operations described in process 800 may be carried out by firmware installed on a computer system and controlling an SSD controller.
- the process 800 beings a read operation for one or more stripes of data stored on a storage medium at 805.
- a stripe counter referred to as stripe_counter, is set equal to a value of 1.
- a mapping of memory locations is set equal to a mapping of memory locations
- mapping may be obtained from data of a lookup table.
- AUs belonging to the stripe labeled stripe_counter are read from the storage medium based on the memory locations obtained at 815.
- the read AUs include a AU containing parity information for all other AUs belonging to the stripe labeled stripe_counter.
- the n th position of the parity AU belonging to a given stripe is determined by exclusive ORing the n th position of every AU in the stripe (other than the parity AU itself) .
- error correction decoding is performed on the read AUs.
- each AU in a stripe is ECC encoded prior to be written to the storage medium and so ECC decoding is performed on a per-AU basis at 825.
- unreadable AUs may be present if, for example, a given page of the storage medium malfunctions or the data stored on the page becomes otherwise unreadable. If it is determined at 830 that there is at least one unreadable AU, then the
- process 800 proceeds to 835. On the other hand, if it is determined at 830 that there are no unreadable AUs, then the process 800 proceeds to 850.
- the recovery will be successful if there is exactly one unreadable AU in the read AUs and, after the error correction decoding performed at 825, there are no byte errors in any of the readable AUs of the stripe.
- process 800 proceeds to 845, where a decoding read failure is declared and the process 800 terminates. On the other hand, if all read AU bytes satisfy the parity AU, then the
- process 800 proceeds to 855, where the current AU data
- stripe_counter it is determined if a current value of the stripe counter, stripe_counter, is equal to a total number of stripes specified for the read operation (e.g., at 805), stripe_MAX. If so, then the process 800 proceeds to 865, where process 800 is terminated. On the other hand, if the the current value of the stripe counter, stripe_counter, is not equal to the total number of stripes specified for the read operation, stripe_MAX, then the process 800 proceeds to 870. At 870, the current value of the stripe counter, stripe_counter, is incremented, and the process 800 proceeds returns to 815.
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
Description
ARCHITECTURE FOR STORAGE OF DATA ON NAND FLASH MEMORY
Cross-Reference to Related Applications
[0001] This patent document claims the benefit of, and priority to, U.S. Provisional Application No. 61/612,140, filed March 16, 2012, the disclosure of which is hereby incorporated by reference herein in its entirety.
Field of Use
[0002] This disclosure relates to techniques for
efficiently writing data to a storage medium including a redundant array of independent disks (RAID) NAND flash storage medium.
Background of the Disclosure
[0003] The background description provided herein is for the purpose of generally presenting the context of the disclosure. Work of the inventors hereof, to the extent the work is described in this background section, as well as aspects of the description that may not otherwise qualify as prior art at the time of filing, are neither expressly nor
impliedly admitted as prior art against the present disclosure .
[0004] A solid state drive (SSD) reads and writes data from devices such as NAND flash memory devices or dynamic random access memory (DRAM) devices that may be implemented using a RAID architecture. The SSD typically includes an SSD controller with a number of data channels for transferring data to and from the NAND flash memory.
Further, the SSD controller typically executes firmware that manages data in fixed byte size units known as allocation units (AUs) . Traditionally, data is written to a given page of the NAND flash memory in a single operation and the write operation includes a number of bytes that is an integer multiple of the size of an AU. Thus, when a page size of the NAND flash is not an integer multiple of the AU size, the memory of the NAND flash may be underutilized.
Summary of the Disclosure
[0005] Systems, methods, apparatus, and techniques are provided for processing data from a storage medium. A stripe of data stored on the storage medium is read, where the stripe comprises a plurality of data allocation units (AUs) and a parity AU. Error correction decoding is applied to each of the plurality of data AUs to produce a plurality of decoded data AUs. It is determined whether a value of the parity AU is satisfied by values of bytes in the plurality of decoded data AUs. The plurality of decoded data AUs are output in response to a determination that the value of the parity AU is satisfied by the values of bytes in the
plurality of decoded data AUs.
[0006] In some implementations, it is determined whether a data AU in the plurality of data AUs is unreadable. In some implementations, a first portion of the stripe of data is read using a first data transfer channel in the plurality of data transfer channels and a second portion of the stripe of data is read using a second transfer channel in the plurality of data transfer channels. In some implementations, a data AU in the plurality of data AUs is partially stored in each of a first page and a second page of the storage medium. In some implementations, the data AU in the plurality of data AUs is partially stored in each of a first data transfer channel and a second data transfer channel of the storage medium. In some implementations, a value of a byte of the parity AU in a given byte position is generated by exclusive ORing a value of a byte in the given byte position in every data AU in the plurality of data AUs.
Brief Description of the Figures
[0007] The above and other aspects and advantages of the invention will be apparent upon consideration of the
following detailed description, taken in conjunction with the accompanying drawings, in which like reference characters refer to like parts throughout, and in which:
[0008] FIG. 1 depicts an illustrative array of NAND pages of a RAID-implemented storage medium in accordance with some embodiments ;
[0009] FIG. 2 depicts an illustrative technique for writing a sequence of AUs to NAND pages of a RAID-implemented storage medium in accordance with some embodiments;
[0010] FIG. 3 depicts an illustrative stripe-based
technique for writing a sequence of AUs to NAND pages of a RAID-implemented storage medium in accordance with some embodiments ;
[0011] FIG. 4 depicts another illustrative stripe-based technique for writing a sequence of AUs to NAND pages of a RAID-implemented storage medium in accordance with some embodiments ;
[0012] FIG. 5 depicts yet another illustrative stripe- based technique for writing a sequence of AUs to NAND pages of a RAID-implemented storage medium in accordance with some embodiments ;
[0013] FIG. 6 depicts an additional illustrative stripe- based technique for writing a sequence of AUs to NAND pages of a RAID-implemented storage medium in accordance with some embodiments; and
[0014] FIG. 7 depicts an illustrative process for reading data from one or more stripes of a storage medium in
accordance with some embodiments.
Detailed Description of the Disclosure
[0015] Disclosed herein are techniques for increasing utilization of a storage medium, including RAID-based NAND flash storage medium, based on a stripe-based logical structure. As disclosed herein, a stripe is defined to be a collection of AUs stored on the storage medium. The stripe- based approach allows AUs to be written across page
boundaries thus increasing utilization of the storage medium. Further, as disclosed herein, the stripe-based logic
architecture is advantageous in a RAID-based implementation
as a failure occurring to one disk (or device) of the RAID will generally not render unrecoverable related data stored on other disks (or devices) of the RAID.
[0016] FIG. 1 depicts an illustrative array of NAND pages of a RAID-implemented storage medium in accordance with some embodiments. Firmware of an SSD controller may access memory locations of the RAID-implemented storage medium based on a parameterization of the memory locations according to channels, pages, logical unit numbers (LUNs), and physical devices (e.g., pieces of silicon) . In particular,
illustration 100 shows that the array of NAND pages is addressable using x+1 data transfer channels, which are labeled CH0 102 through CHx 104, respectively. The
illustration 100 depicts the structure of the data transfer channels CH0 102 and CHx 104 in particular detail.
[0017] Each of the data transfer channels depicted in the illustration 100 may be used to access multiple physical devices (or "targets"), e.g., hard disk drives. For example, the data transfer channel CH0 102 may be used to interface with the target 0 106 and the target 1 108. Further, each of the targets of the illustration 100 includes multiple LUNs. For example, the target 1 108 includes LUN 0 110 and
LUN 1 112. Each LUN may correspond to, e.g., a virtual hard disk drive partition. Each LUN may include multiple planes, where each plane is powered by a different set of power resources. For example, the LUN 0 110 includes plane 0 114 and plane 1 116. Finally, the array of NAND pages may include any number of pages 118.
[0018] As would be understood by one of ordinary skill, based on the disclosure and teachings herein, the array of
NAND pages of a RAID-implemented storage medium depicted in FIG. 1 is merely illustrative and the techniques disclosed herein may be applied to any suitable NAND array. For example, the techniques disclosed herein may be applied to a NAND array including more than two targets per page and data transfer channel and/or to LUNs that include more than two planes .
[0019] FIG. 2 depicts an illustrative technique for writing a sequence of AUs to NAND pages of a RAID-implemented storage medium in accordance with some embodiments. In particular, illustration 200 depicts how 32 consecutives AUs are written to pages spanning various channels and planes of the storage medium. As depicted in the illustration 200, firmware of the SSD controller is programmed to write the first and second AUs in the sequence of 32 AUs to channel 0, plane 0, and page 0 of the RAID-implemented storage medium. Similarly, the firmware of the SSD controller is programmed to write the seventeenth and eighteenth AUs in the sequence of 32 AUs to channel 0, plane 1, and page 0 of the RAID- implemented storage medium. Similarly, the exact location
(in terms of a channel, plane, and page no.) for each of the remaining AUs in the sequence of 32 AUs is represented by the corresponding numerical value displayed in one of the boxes of FIG. 2.
[0020] Each AU depicted in FIG. 2 is individually
coded with an error correction code (ECC) , i.e., and a portion of bytes of the AU are ECC encoding bytes.
Nevertheless, a typical ECC code may only fully correct a codeword in which a small minority of bytes are corrupted and will not be able to fully correct a codeword in which a large
percentage of the codeword' s bytes are corrupted or otherwise lost. Accordingly, the SSD controller used to generate the write pattern depicted in FIG. 2 requires that a given AU be written entirely to a single page of a storage device. This requirement is reflected in FIG. 2, which shows that each AU is contained entirely within a single page (i.e., a single rectangular box) .
[0021] One reason that a system may require that each AU be contained entirely within a single page is to prevent "cascading errors." In particular, consider a system in which a single page contains only a portion of one or more AUs (each of these AUs therefore has its remaining contents spread across multiple other pages) . If the single page is corrupted or lost, then it is not just the bytes of the single page that are lost, but all the bytes of all the AUs even partially contained on the single page. Thus, a single page failure may result in a large loss of data effecting bytes spread across multiple pages.
[0022] However, while requiring that each AU be contained entirely within a single page is advantageous for preventing cascading errors, it potentially results in an under- utilization of the storage medium. For example, suppose that each page of the NAND pages of the RAID-implemented storage medium associated with FIG. 2 has a size of 2,048 bytes and that each AU has a size of 748 bytes. If a given AU may not cross pages of the storage device and must instead be written entirely to a single page, then at most two AUs may be written to each page. This is because two AUs represent 748 x 2 = 1,496 bytes, which is less than the page size, while three AUs represent 748 x 3 = 2,244 bytes, which is
larger than the page size. Accordingly, as depicted in
FIG. 2, each of the 16 pages stores exactly two AUs of data. In particular, each page uses only 1,496 bytes out of a total of 2,048 bytes, and each page is therefore underutilized by approximately 27-percent.
[0023] In applications in which a page size of a storage medium is not an integer multiple of an AU size, no multiple number of AUs will exactly occupy all the bytes of a page of the storage medium and the storage medium will thus be
underutilized based on the techniques described in relation to FIG. 2. Accordingly, a stripe-based technique, as
described in the disclosure herein, is presented to address such disadvantages and increase utilization of a storage medium, including a RAID-implemented NAND flash storage medium.
[0024] FIG. 3 depicts an illustrative stripe-based
technique for writing a sequence of AUs to NAND pages of a RAID-implemented storage medium in accordance with some embodiments. The write technique illustrated in FIG. 3 differs from that illustrated in FIG. 2 because AUs are allowed to break across pages. For example, the second AU breaks across pages 310 and 312, the fourth AU breaks across pages 312 and 314, and the thirteenth AU breaks across
pages 316 and 318.
[0025] As described above, one issue in the system of
FIG. 3, in which a single AU may break cross multiple pages, is the potential for cascading errors that span the pages.
To provide some degree of protection against cascading errors, the system of FIG. 3 includes parity check AUs on a per- stripe basis. In particular, all the AUs of row 320 are
subject to a parity AU, i.e., the twentieth AU, which breaks across pages 322 and 324. A stripe generally specifies the AUs in the domain of the parity AUs applies. Thus, because a stripe is defined to include all the AUs of the row 320 in FIG. 3, the parity AU 20 is based on the data contained in all the other AUs of the row 320. For example, in some implementations, a byte length of the parity AU is equal to a byte length of a page, each byte of the parity AU is
determined by exclusive-ORing some set of bytes spread across the remaining AUs (i.e., AUs 1, 2, 15, 16, 3, 4, 17, 18, 19, 7, and 21) in the row 320. Similarly, all the AUs of row 322 are subject to a parity AU, i.e., the twenty-seventh AU, which breaks across pages 330 and 332.
[0026] Compared to writing technique of FIG. 2, the write technique of FIG. 3 has the advantage of more efficiently using the storage media and, in a typical implementation, the additional efficiency gained by allowing bytes to be written across pages will far outweigh the loss of some bytes to serve as parity check bytes. One potential drawback to the implementation depicted in FIG. 3 is that an ability to perfectly recover a lost page (or portion of a page) of data may depend on whether a single additional error (i.e., in addition to the errors due to the lost page or portion of a page) is present anywhere in the stripe.
[0027] To illustrate this point, consider a case where a value of a nth byte of the parity check AU of a given stripe (i.e., the twentieth AU for the stripe of row 320 and the twenty-seventh AU for the stripe of row 332) is determined by exclusive ORing the nth position of every AU in the stripe (i.e., not including the parity AU itself) . For example, a
value of a first byte of the parity check AU labeled 20 is determined by exclusive ORing the first position the AUs labeled 1, 2, 15, 16, 3, 4, 17, 18, 5, 6, 19, 7, and 21.
Suppose next that the page 314 malfunctions so that none of the data of the page 314 is readable. In this case, the contents of the page 314 are fully recoverable if there are no errors in any byte of data read from any other page of the row 320 (after ECC decoding is performed on the byte) . If, on the other hand, one or more errors remain in any of AUs labeled 1, 2, 15, 16, 3, 4, 17, 18, 19, 7, and 21 after ECC decoding, then the exclusive ORing will not correctly recover all the bytes of the twentieth AU.
[0028] FIG. 4 depicts another illustrative stripe-based technique for writing a sequence of AUs to NAND pages of a RAID-implemented storage medium in accordance with some embodiments. In the technique of FIG. 4, AUs are allowed to break across pages. However, the write technique illustrated in FIG. 4 differs from that illustrated in FIG. 3 because a stripe is defined as a subset of all AUs within a row of the figure (e.g., row 420) rather than as all the AUs of the row. In the write technique of FIG. 4, AUs take values from 1 through 28 and these values represent an ordered sequence in which these AUs are written to the storage media (with AU 1 written first and AU 28 written last) . Specifically, AUs 1 through 7 are written to plane 0 of page 0, AUs 8 through 14 are written to plane 0 of page 1, then AUs 15 through 21 are written to plane 1 of page 0, and AUs 22 through 28 are written to plane 1 of page 1 (all AUs are written to the particular pages depicted in FIG. 3) .
[0029] As depicted in table 410, stripes 1, 2, and 3 each include a subset of AUs present in the row 420, and stripes 4, 5, and 6 each include a subset AUs present in the row 422.
For example, stripe 1 includes six of fourteen total AUs of the row 420 (i.e., AUs labeled 1, 15, 4, 18, 7, and 21), stripe 2 includes four of the fourteen total AUs of the row 420 (i.e., AUs labeled 2, 16, 5, 19), and the stripe 3
includes four of the fourteen total AUs of the row 420 (i.e., AUs labeled 3, 17, 6, and 20) . The AUs labeled 19, 20, 21, 26, 27, and 28 are parity AUs and are circled in FIG. 4. As is evident from the table 410, each of stripes 1 through 6 includes exactly one parity AU.
[0030] Consider a case where a value of a nth byte of each parity AU of FIG. 4 is determined by exclusive ORing the nth position of each non-parity AU belonging to the stripe
containing that AU . For example, a value of a first byte of the parity check AU labeled 21 is determined by exclusive ORing the first position the AUs labeled 1, 15, 4, 18, and 7. In this case, the write technique of FIG. 4 may
advantageously be more robust to failure of a page than the write technique of FIG. 3. In particular, suppose that the data of page 414 becomes unreadable. With reference to the listing of the contents of stripe 1 of the table 410, the contents of the AU labeled 4 are fully recoverable if there are no errors in any byte of data read from any of AUs 1, 15, 18, and 7 (after ECC decoding is performed on the byte) .
Similarly, with reference to the listing of the contents of stripe 2 of the table 410, the contents of the AU labeled 5 are fully recoverable if there are no errors in any byte of data read from any of AUs 2 and 16 (after ECC decoding is
performed on the byte) . Finally, with reference to the listing of the contents of stripe 3 of the table 410, the contents of the AU labeled 6 are fully recoverable if there are no errors in any byte of data read from any of AUs 3 and 17 (after ECC decoding is performed on the byte) .
[0031] Thus, when a page becomes unreadable, data can nevertheless be recovered if there are no errors in the decoded values of two other AUs (in the case of stripes 2 and 3) or four other AUs (in the case of stripe 1) . Thus, in comparison to the technique of FIG. 3, the technique of
FIG. 4 is able to recover any given stripe of data
conditional upon a relative small number of AUs remaining errors (i.e., two or four AUs in the case of stripe 1) . Thus, on average, the write technique of FIG. 4 is able read more data correctly in the presence of page failures than the system of FIG. 3. However, the write technique of FIG. 4 requires that a larger fraction of bytes be dedicated to parity than the write technique of FIG. 3. In particular, FIG. 3 requires a total of four parity AUs across all 16 pages while FIG. 4 requires a larger total of eight parity AUs across all 16 pages.
[0032] FIG. 5 depicts yet another illustrative stripe- based technique for writing a sequence of AUs to NAND pages of a RAID-implemented storage medium in accordance with some embodiments. The write technique of FIG. 5 is similar to the write technique of FIG. 4, but writes AUs to media in a different order than that of FIG. 3. More particularly, in the write technique of FIG. 4, AUs take values from 1 through 30 and these values represent an ordered sequence in which AUs are written to the storage media (with AU 1 written first
and AU 30 written last) . Specifically, AUs 1 through (a portion of) 8 are written to plane 0 of page 0, AUs 8 (the remaining portion of AU 8) through 15 are written to plane 1 of page 0, then AUs 16 through (a portion of) 23 are written to plane 0 of page 1, and AUs 23 (the remaining portion of AU 23) through 30 are written to plane 1 of page 1 (all AUs are written to the particular pages depicted in FIG. 4) . Thus, the write technique of FIG. 5 writes AUs across planes before writing across pages, whereas the write technique of FIG. 4 writes AUs across pages before writing across planes. The write techniques of FIGS. 4 and 5, however, both use the same amount of overhead parity bytes .
[0033] FIG. 6 depicts an additional illustrative stripe- based technique for writing a sequence of AUs to NAND pages of a RAID-implemented storage medium in accordance with some embodiments. The write technique of FIG. 6 is similar to the write techniques of FIGS. 4 and 5, but includes stripes whose AUs span across certain pages. In particular, table 610 lists the four stripes used by the write technique of FIG. 6. As reflected in the table, stripes 2 and 4 each span pages 0 and 1. For example, stripe 2 includes all of portions of AUs labeled 2, 18, 6, 22, 10, 26, 14, and 30 on page 0 and all or portions of AUs 2, 18, 6, 22, 10, 26, 14, and 30 on page 1. In comparison to the write techniques of FIGS. 4 and 5, the write technique of FIG. 6 is able to utilize longer stripes (and a smaller total number of stripes) because it uses stripes that span pages. Further, because the write
technique of FIG. 6 uses fewer stripes than the write
technique of FIGS. 4 or 5, the write technique of FIG. 6
requires less parity overhead than the write technique of either FIGS. 4 or 5.
[0034] FIG. 7 depicts an illustrative process for reading data from one or more stripes of a storage medium in accordance with some embodiments. The operations described in process 800 may be carried out by firmware installed on a computer system and controlling an SSD controller. The process 800 beings a read operation for one or more stripes of data stored on a storage medium at 805. At 810, a stripe counter, referred to as stripe_counter, is set equal to a value of 1. At 815, a mapping of memory locations
corresponding to each AU belonging to the stripe labeled stripe_counter is obtained for the storage medium. For example, the mapping may be obtained from data of a lookup table.
[0035] At 820, AUs belonging to the stripe labeled stripe_counter are read from the storage medium based on the memory locations obtained at 815. The read AUs include a AU containing parity information for all other AUs belonging to the stripe labeled stripe_counter. For example, in some implementations, the nth position of the parity AU belonging to a given stripe is determined by exclusive ORing the nth position of every AU in the stripe (other than the parity AU itself) . At 825, error correction decoding is performed on the read AUs. In particular, each AU in a stripe is ECC encoded prior to be written to the storage medium and so ECC decoding is performed on a per-AU basis at 825.
[0036] At 830, it is determined if there are any
unreadable AUs in the AUs read at 820. One or more
unreadable AUs may be present if, for example, a given page
of the storage medium malfunctions or the data stored on the page becomes otherwise unreadable. If it is determined at 830 that there is at least one unreadable AU, then the
process 800 proceeds to 835. On the other hand, if it is determined at 830 that there are no unreadable AUs, then the process 800 proceeds to 850.
[0037] At 835, recovery of data of the unreadable AUs is attempted using the parity check AU. In some implementations, the recovery will be successful if there is exactly one unreadable AU in the read AUs and, after the error correction decoding performed at 825, there are no byte errors in any of the readable AUs of the stripe. At 840, it is determined if the recovery of all of the unreadable AUs is successful. If so, the process 800 proceeds to 850. On the other hand, if the recovery is determined not to be successful at 840, then the process 800 proceeds to 845 where a decoding read failure is declared and the process 800 terminates.
[0038] At 850, it is determined if there are any bytes in the read AUs (after error correction decoding performed at 825 and any recovery of the non-parity AUs attempted at 835) that do not satisfy the read parity AU. If there is at least one byte that does not satisfy the parity AU, then the
process 800 proceeds to 845, where a decoding read failure is declared and the process 800 terminates. On the other hand, if all read AU bytes satisfy the parity AU, then the
process 800 proceeds to 855, where the current AU data
corresponding to the read AUs is output (i.e. after error correction decoding performed at 825 and any recovery of the non-parity AUs attempted at 835), and the process 800
proceeds to 860.
[0039] At 860, it is determined if a current value of the stripe counter, stripe_counter, is equal to a total number of stripes specified for the read operation (e.g., at 805), stripe_MAX. If so, then the process 800 proceeds to 865, where process 800 is terminated. On the other hand, if the the current value of the stripe counter, stripe_counter, is not equal to the total number of stripes specified for the read operation, stripe_MAX, then the process 800 proceeds to 870. At 870, the current value of the stripe counter, stripe_counter, is incremented, and the process 800 proceeds returns to 815.
[0040] While various embodiments of the present disclosure have been shown and described herein, it will be obvious to those skilled in the art that such embodiments are provided by way of example only. Numerous variations, changes, and substitutions will now occur to those skilled in the art without departing from the disclosure. It should be understood that various alternatives to the embodiments of the disclosure described herein may be employed in practicing the disclosure. It is intended that the following claims define the scope of the disclosure and that methods and structures within the scope of these claims and their equivalents be covered thereby.
Claims
1. A system for processing data from a storage medium, the system comprising:
read circuitry configured to read a stripe of data stored on the storage medium, the stripe comprising a plurality of data allocation units (AUs) and a parity AU;
decoding circuitry configured to apply error correction decoding to each of the plurality of data AUs to produce a plurality of decoded data AUs;
parity check circuitry configured to determine whether a value of the parity AU is satisfied by values of bytes in the plurality of decoded data AUs; and
data transfer circuitry configured to output the plurality of decoded data AUs in response to a determination that the value of the parity AU is satisfied by the values of bytes in the plurality of decoded data AUs.
2. The system of claim 1, comprising data check circuitry configured to determine whether a data AU in the plurality of data AUs is unreadable.
3. The system of claim 1, wherein the read circuitry comprises a plurality of data transfer channels and wherein the read circuitry is configured to read a first portion of the stripe of data using a first data transfer channel in the plurality of data transfer channels and a second portion of the stripe of data using a second transfer channel in the plurality of data transfer channels.
4. The system of claim 1, wherein a data AU in the plurality of data AUs is partially stored in each of a first page and a second page of the storage medium.
5. The system of claim 4, wherein the data AU in the plurality of data AUs is partially stored in each of a first data transfer channel and a second data transfer channel of the storage medium.
6. The system of claim 5, wherein the data AU in the plurality of data AUs is partially stored in each of a first plane and a second plane of the storage medium.
7. The system of claim 1, comprising write circuitry, the write circuitry configured to write the stripe of data to the storage medium by writing AUs of the stripe of data across pages and then across planes of the storage medium.
8. The system of claim 1, comprising write circuitry, the write circuitry configured to write the stripe of data to the storage medium by writing AUs of the stripe of data across planes and then across pages of the storage medium.
9. The system of claim 1, comprising encoding
circuitry, the encoding circuitry configured to generate a value of a byte of the parity AU in a given byte position by exclusive ORing a value of a byte in the given byte position in every data AU in the plurality of data AUs.
10. The system of claim 1, wherein a total number of AUs included in a stripe is fewer than thirty.
11. A method for processing data from a storage medium, the method comprising:
reading a stripe of data stored on the storage medium, the stripe comprising a plurality of data allocation units (AUs) and a parity AU;
applying error correction decoding to each of the plurality of data AUs to produce a plurality of decoded data AUs;
determining whether a value of the parity AU is satisfied by values of bytes in the plurality of decoded data AUs; and
outputting the plurality of decoded data AUs in response to a determination that the value of the parity AU is satisfied by the values of bytes in the plurality of decoded data AUs .
12. The method of claim 11, comprising determining whether a data AU in the plurality of data AUs is unreadable.
13. The method of claim 11, comprising reading a first portion of the stripe of data using a first data transfer channel in the plurality of data transfer channels and a second portion of the stripe of data using a second transfer channel in the plurality of data transfer channels.
14. The method of claim 11, comprising partially storing a data AU in the plurality of data AUs in each of a first page and a second page of the storage medium.
15. The method of claim 14, comprising partially storing the data AU in the plurality of data AUs in each first data transfer channel and a second data transfer channel of the storage medium.
16. The method of claim 15, comprising partially storing the data AU in the plurality of data AUs in each of a first plane and a second plane of the storage medium.
17. The method of claim 11, comprising writing the stripe of data to the storage medium by writing AUs of the stripe of data across pages and then across planes of the storage medium.
18. The method of claim 11, comprising writing the stripe of data to the storage medium by writing AUs of the stripe of data across planes and then across pages of the storage medium.
19. The method of claim 11, comprising generating a value of a byte of the parity AU in a given byte position by exclusive ORing a value of a byte in the given byte position in every data AU in the plurality of data AUs.
20. The method of claim 11, wherein a total number of AUs included in a stripe is fewer than thirty.
Priority Applications (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN201380019643.4A CN104246708B (en) | 2012-03-16 | 2013-03-14 | For the framework of the storage of data on nand flash memory |
| JP2015500592A JP6175684B2 (en) | 2012-03-16 | 2013-03-14 | Architecture for storage of data on NAND flash memory |
Applications Claiming Priority (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US201261612140P | 2012-03-16 | 2012-03-16 | |
| US61/612,140 | 2012-03-16 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| WO2013138552A1 true WO2013138552A1 (en) | 2013-09-19 |
Family
ID=48014332
Family Applications (2)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| PCT/US2013/031182 Ceased WO2013138552A1 (en) | 2012-03-16 | 2013-03-14 | Architecture for storage of data on nand flash memory |
| PCT/US2013/031114 Ceased WO2013138540A1 (en) | 2012-03-16 | 2013-03-14 | Architecture to allow efficient storage of data on nand flash memory |
Family Applications After (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| PCT/US2013/031114 Ceased WO2013138540A1 (en) | 2012-03-16 | 2013-03-14 | Architecture to allow efficient storage of data on nand flash memory |
Country Status (4)
| Country | Link |
|---|---|
| US (2) | US9081668B2 (en) |
| JP (2) | JP6201242B2 (en) |
| CN (2) | CN104220991B (en) |
| WO (2) | WO2013138552A1 (en) |
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US11188267B2 (en) | 2019-05-21 | 2021-11-30 | Silicon Motion, Inc. | Method and apparatus and computer program product for handling sudden power off recovery |
Families Citing this family (17)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN104220991B (en) | 2012-03-16 | 2017-08-29 | 马维尔国际贸易有限公司 | Architecture for allowing efficient storage of data on NAND flash memory |
| US9478271B2 (en) * | 2013-03-14 | 2016-10-25 | Seagate Technology Llc | Nonvolatile memory data recovery after power failure |
| JP2014199591A (en) * | 2013-03-29 | 2014-10-23 | 株式会社東芝 | Storage control system, storage control device, and program |
| KR102063566B1 (en) * | 2014-02-23 | 2020-01-09 | 삼성전자주식회사 | Operating Method For Text Message and Electronic Device supporting the same |
| CN105843746A (en) * | 2015-01-12 | 2016-08-10 | 广明光电股份有限公司 | Writing method of solid state disk |
| US9940034B2 (en) * | 2016-01-25 | 2018-04-10 | International Business Machines Corporation | Reducing read access latency by straddling pages across non-volatile memory channels |
| CN108628752B (en) * | 2017-03-17 | 2021-10-01 | 北京兆易创新科技股份有限公司 | Data storage method and device |
| US10564890B2 (en) * | 2017-07-07 | 2020-02-18 | Seagate Technology Llc | Runt handling data storage system |
| CN108319429B (en) * | 2018-01-10 | 2021-02-19 | 北京思特奇信息技术股份有限公司 | Method for accelerating file reading and computer equipment |
| CN108804346A (en) * | 2018-05-30 | 2018-11-13 | 广东思诺伟智能技术有限公司 | A kind of method that battery SOC data are stored in FLASH memory |
| US11709623B2 (en) | 2018-08-03 | 2023-07-25 | Sk Hynix Nand Product Solutions Corp. | NAND-based storage device with partitioned nonvolatile write buffer |
| KR102795964B1 (en) | 2018-11-08 | 2025-04-16 | 삼성전자주식회사 | Storage device, operating method of storage device and operating method of host controlling storage device |
| CN109976673B (en) * | 2019-03-29 | 2023-04-25 | 新华三技术有限公司 | Data writing method and device |
| CN114651243B (en) * | 2019-12-19 | 2025-12-12 | 华为技术有限公司 | A storage system and a data cross-processing method |
| US11693594B2 (en) * | 2021-03-29 | 2023-07-04 | Micron Technology, Inc. | Zone striped zone namespace memory |
| US11347609B1 (en) * | 2021-04-29 | 2022-05-31 | International Business Machines Corporation | Failed media channel recovery throttling |
| CN113448778A (en) * | 2021-07-15 | 2021-09-28 | 华东师范大学 | Backup method for key data in hybrid SSD |
Citations (3)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US20060080505A1 (en) * | 2004-10-08 | 2006-04-13 | Masahiro Arai | Disk array device and control method for same |
| WO2010054410A2 (en) * | 2008-11-10 | 2010-05-14 | Fusion Multisystems, Inc. (Dba Fusion-Io) | Apparatus, system, and method for predicting failures in solid-state storage |
| WO2010078167A2 (en) * | 2008-12-31 | 2010-07-08 | Intel Corporation | Improved error correction in a solid state disk |
Family Cites Families (15)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2509297B2 (en) * | 1987-08-31 | 1996-06-19 | 沖電気工業株式会社 | Semiconductor memory device with self-correction function and microcomputer |
| US6684289B1 (en) * | 2000-11-22 | 2004-01-27 | Sandisk Corporation | Techniques for operating non-volatile memory systems with data sectors having different sizes than the sizes of the pages and/or blocks of the memory |
| US7200715B2 (en) * | 2002-03-21 | 2007-04-03 | Network Appliance, Inc. | Method for writing contiguous arrays of stripes in a RAID storage system using mapped block writes |
| US6985995B2 (en) * | 2002-03-29 | 2006-01-10 | Panasas, Inc. | Data file migration from a mirrored RAID to a non-mirrored XOR-based RAID without rewriting the data |
| US8321650B2 (en) * | 2003-01-13 | 2012-11-27 | Emulex Design & Manufacturing Corporation | Alignment-unit-based virtual formatting methods and devices employing the methods |
| JP3884722B2 (en) * | 2003-04-28 | 2007-02-21 | Necトーキン株式会社 | Data management method, program, and semiconductor device |
| JP4135747B2 (en) * | 2006-04-06 | 2008-08-20 | ソニー株式会社 | Data processing apparatus and flash memory access method |
| US8019959B2 (en) * | 2007-02-09 | 2011-09-13 | Marvell World Trade Ltd. | Nonvolatile memory system |
| US7904749B2 (en) * | 2008-10-24 | 2011-03-08 | Hitachi, Ltd. | Fast data recovery from HDD failure |
| US8266501B2 (en) * | 2009-09-29 | 2012-09-11 | Micron Technology, Inc. | Stripe based memory operation |
| CN102193745B (en) * | 2010-03-05 | 2015-01-14 | 群联电子股份有限公司 | Flash memory storage device, its controller and writing management method |
| JP4940322B2 (en) * | 2010-03-16 | 2012-05-30 | 株式会社東芝 | Semiconductor memory video storage / playback apparatus and data writing / reading method |
| US8726126B2 (en) * | 2010-03-23 | 2014-05-13 | Apple Inc. | Non-regular parity distribution detection via metadata tag |
| US20110258380A1 (en) | 2010-04-19 | 2011-10-20 | Seagate Technology Llc | Fault tolerant storage conserving memory writes to host writes |
| CN104220991B (en) | 2012-03-16 | 2017-08-29 | 马维尔国际贸易有限公司 | Architecture for allowing efficient storage of data on NAND flash memory |
-
2013
- 2013-03-14 CN CN201380019240.XA patent/CN104220991B/en active Active
- 2013-03-14 CN CN201380019643.4A patent/CN104246708B/en active Active
- 2013-03-14 JP JP2015500584A patent/JP6201242B2/en active Active
- 2013-03-14 JP JP2015500592A patent/JP6175684B2/en active Active
- 2013-03-14 US US13/804,099 patent/US9081668B2/en active Active
- 2013-03-14 WO PCT/US2013/031182 patent/WO2013138552A1/en not_active Ceased
- 2013-03-14 US US13/804,113 patent/US9158675B2/en active Active
- 2013-03-14 WO PCT/US2013/031114 patent/WO2013138540A1/en not_active Ceased
Patent Citations (3)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US20060080505A1 (en) * | 2004-10-08 | 2006-04-13 | Masahiro Arai | Disk array device and control method for same |
| WO2010054410A2 (en) * | 2008-11-10 | 2010-05-14 | Fusion Multisystems, Inc. (Dba Fusion-Io) | Apparatus, system, and method for predicting failures in solid-state storage |
| WO2010078167A2 (en) * | 2008-12-31 | 2010-07-08 | Intel Corporation | Improved error correction in a solid state disk |
Cited By (2)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US11188267B2 (en) | 2019-05-21 | 2021-11-30 | Silicon Motion, Inc. | Method and apparatus and computer program product for handling sudden power off recovery |
| US11803330B2 (en) | 2019-05-21 | 2023-10-31 | Silicon Motion, Inc. | Method and apparatus and computer-readable storage medium for handling sudden power off recovery |
Also Published As
| Publication number | Publication date |
|---|---|
| CN104220991A (en) | 2014-12-17 |
| US9081668B2 (en) | 2015-07-14 |
| JP6175684B2 (en) | 2017-08-09 |
| US20130246892A1 (en) | 2013-09-19 |
| CN104246708B (en) | 2017-12-05 |
| JP2015512110A (en) | 2015-04-23 |
| JP6201242B2 (en) | 2017-09-27 |
| JP2015511040A (en) | 2015-04-13 |
| WO2013138540A1 (en) | 2013-09-19 |
| US9158675B2 (en) | 2015-10-13 |
| CN104246708A (en) | 2014-12-24 |
| US20130246890A1 (en) | 2013-09-19 |
| CN104220991B (en) | 2017-08-29 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US9158675B2 (en) | Architecture for storage of data on NAND flash memory | |
| US8438455B2 (en) | Error correction in a solid state disk | |
| CN110597654B (en) | System and method for ultrafast error correction codes with parity checking | |
| US8601311B2 (en) | System and method for using over-provisioned data capacity to maintain a data redundancy scheme in a solid state memory | |
| EP3289441B1 (en) | Stripe mapping in memory | |
| EP2732373B1 (en) | Method and apparatus for flexible raid in ssd | |
| CN104272262B (en) | Correspondence between physical page, logical page and codeword | |
| CN107678695B (en) | Selecting redundant storage configurations based on available memory space | |
| US9292382B2 (en) | Codewords that span pages of memory | |
| CN110096219B (en) | Effective capacity of a pool of drive zones generated from a group of drives | |
| US9063869B2 (en) | Method and system for storing and rebuilding data | |
| US7823011B2 (en) | Intra-disk coding scheme for data-storage systems | |
| US20180157428A1 (en) | Data protection of flash storage devices during power loss | |
| US20150113311A1 (en) | Storage control apparatus, storage apparatus, information processing system, and storage control method therefor | |
| US20150143024A1 (en) | Redundant array of independent modules | |
| JP2008217395A (en) | Disk array device | |
| CN113424262A (en) | Storage verification method and device | |
| CN113420341A (en) | Data protection method, data protection equipment and computer system | |
| WO2013023564A9 (en) | Method and apparatus for flexible raid in ssd | |
| HK1171091A (en) | System and method for using over-provisioned data capacity to maintain a data redundancy scheme in a solid state memory |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| 121 | Ep: the epo has been informed by wipo that ep was designated in this application |
Ref document number: 13713002 Country of ref document: EP Kind code of ref document: A1 |
|
| ENP | Entry into the national phase |
Ref document number: 2015500592 Country of ref document: JP Kind code of ref document: A |
|
| NENP | Non-entry into the national phase |
Ref country code: DE |
|
| 122 | Ep: pct application non-entry in european phase |
Ref document number: 13713002 Country of ref document: EP Kind code of ref document: A1 |