System and method for data error recovery in a solid state subsystem

Information

  • Patent Grant
  • 9405617
  • Patent Number
    9,405,617
  • Date Filed
    Monday, March 17, 2014
    10 years ago
  • Date Issued
    Tuesday, August 2, 2016
    8 years ago
Abstract
Systems and methods are disclosed for recovering from a data access error encountered in data stripes implemented in a data redundancy scheme (e.g., RAID) in a solid state storage device. In one embodiment, the storage device holds parity data in a temporary, volatile memory such as a RAM and writes the parity data to the non-volatile memory when a full stripe's worth of new write data has been written to the non-volatile memory. In one embodiment, upon detecting that a data access error has occurred in a partially written stripe, the storage device initiates a write of the parity data for the partially written stripe to the non-volatile memory and executes a RAID recovery procedure using the newly written parity data to attempt to recover from the detected error. This approach allows for a recovery from the data access error without waiting for the full stripe to be written.
Description
BACKGROUND

Many data storage components such as hard disks and solid state drives have certain advertised reliability guarantees that the manufacturers provide to customers. For example, certain solid state drive manufacturers guarantee a drive failure rate of 10−16 or 10−17. To increase data reliability, a data redundancy scheme such as RAID (Redundant Arrays of Independent Disks) is used to increase storage reliability. The redundancy may be provided by combining multiple storage elements within the storage device into groups providing mirroring and/or error checking mechanisms. For example, various memory pages/blocks of a solid state storage device may be combined into data stripes in which user data is stored.





BRIEF DESCRIPTION OF THE DRAWINGS

Systems and methods which embody the various features of the invention will now be described with reference to the following drawings, in which:



FIG. 1 is a block diagram illustrating a storage subsystem implementing a data redundancy scheme with a mechanism for utilizing redundancy data to recover from a data access error according to one embodiment.



FIG. 2 is flow diagram showing a process of ensuring data reliability in the event of a data read error according to one embodiment.



FIGS. 3A-3B illustrate an example of a partial data stripe that is written as a result of a data read error according to one embodiment.





DETAILED DESCRIPTION OF SPECIFIC EMBODIMENTS

Overview


A common approach to overcome storage element failure is to use redundant RAID (mirroring, parity, etc.) to allow data recovery should one or more failures (e.g., a read failure) occur. Typically, a target number of storage elements (e.g., pages, blocks, etc.) per stripe is chosen to achieve a desired reliability at a given cost in storage overhead. In a flash-based/solid-state storage system, parity data is usually held in a temporary volatile memory such as RAM (Random Access Memory) and such parity data for a stripe is typically written to the non-volatile flash media when the full stripe's worth of data has been written to the non-volatile flash media. However, there are situations when the yet-to-be written parity may be needed for data recovery.


Various embodiments of the invention determine when it is appropriate to force a write of the yet-to-be written parity data associated with a partial stripe. In one embodiment, upon the detection of a data access error (e.g., a read or program error) on data in the partial stripe, the system triggers a write of the parity data to the flash media and initiates a data recovery procedure using the newly written parity. This approach allows the system to recover from a data access error without having to wait for a full stripe of data to be written to the flash media.


System Overview



FIG. 1 is a block diagram illustrating a storage subsystem implementing a data redundancy scheme with a mechanism for utilizing redundancy data to recover from a data access error according to one embodiment. As shown, a storage subsystem 140 includes a controller 150 and one or more non-volatile solid-state memory arrays 160. The arrays 160 may comprise a plurality of solid-state storage devices coupled to the controller 114. The arrays may comprise, for example, flash integrated circuits, Chalcogenide RAM (C-RAM), Phase Change Memory (PC-RAM or PRAM), Programmable Metallization Cell RAM (PMC-RAM or PMCm), Ovonic Unified Memory (OUM), Resistance RAM (RRAM), NAND memory, NOR memory, EEPROM, Ferroelectric Memory (FeRAM), or other discrete NVM chips. The solid-state storage devices may be physically divided into blocks, pages and sectors, as is known in the art. Other forms of storage (e.g., battery backed-up volatile DRAM or SRAM devices, magnetic disk drives, etc.) may additionally or alternatively be used.


The controller 150 in one embodiment in turn includes a RAID module 158 and a volatile memory 164, which may be implemented in, for example, RAM such as a DRAM or SRAM. The controller may alternatively be implemented in-whole or in-part as an ASIC, FPGA, or other device, which may but need not execute firmware. In another embodiment the volatile memory 164 is outside of the controller 150 in the storage subsystem 140. In one embodiment, the RAID module 158 is configured to execute data access commands to maintain a data redundancy scheme in the storage subsystem. For example, the RAID module 158 may maintain data on which storage elements are assigned to which RAID stripes and determine how data are arranged in the data redundancy scheme (e.g., grouped into stripes with parity).


In one embodiment, the controller 150 of the storage subsystem 140 is configured to receive and execute commands from a storage interface 132 in a host system 130. The memory commands from the storage interface 132 may include write and read commands issued by the host system 130. As further shown in FIG. 1, in one embodiment, the controller 150 executes the received commands in one or more non-volatile solid-state memory arrays 160. As will be explained below, in one embodiment, the volatile memory 164 is configured to temporarily hold parity data for data stripes (e.g., RAID stripes) that are yet to be completed/closed. When a stripe is complete (e.g., all pages of a stripe are programmed in the non-volatile memory arrays 160), the parity data is then transferred to the non-volatile memory arrays 160. The volatile memory 164 may also be configured to temporarily hold “user” data to be written to the memory arrays 160, and such user data may include data received from the host system 130 and/or other data related to internal storage subsystem operations such as garbage collection and wear leveling. In one embodiment, the user data may be held in a separate volatile memory than that which is used to hold the parity data, or in a different portion of the volatile memory 164 than that which is used for the parity data. The controller 150 may also execute internal memory commands such as those needed for garbage collection and wear leveling, etc. and write data related to those internal memory commands to the non-volatile solid-state memory arrays 160 (via the volatile memory or directly to the memory arrays).


Although this disclosure uses RAID as an example, the systems and methods described herein are not limited to the RAID redundancy schemes and can be used in any data redundancy configuration that utilizes striping and/or grouping of storage elements for mirroring or error checking purposes. In addition, although RAID is an acronym for Redundant Array of Independent Disks, those skilled in art will appreciate that RAID is not limited to storage devices with physical disks and is applicable to a wide variety of storage devices including the non-volatile solid state devices described herein.


Partial Parity Writing Process



FIG. 2 is flow diagram showing a process of ensuring data reliability in the event of a data read error according to one embodiment. Although an ECC read error example is described here, the same process is applicable to a program error as well. In block 202, the controller 150 reads a data page in the non-volatile memory array. In block 204, it is determined whether an uncorrectable error (e.g., uncorrectable by ECC) has occurred as a result of the read operation. In one embodiment, the controller employs an ECC (error-correcting code) mechanism to attempt to correct any reading error, but if the ECC mechanism cannot recover the error, then the error is deemed uncorrectable. If the error is not uncorrectable, e.g., the error was corrected by ECC, then the process exits since the error condition no longer exists. However, if the error is uncorrectable, in block 206, the controller determines whether the read operation that triggered the error belongs to an open RAID stripe (i.e., a data stripe that has not been completely written to the non-volatile memory array and for which parity data has not been written to the non-volatile memory array). Since the writing of the parity data “closes” a stripe, a stripe prior to the writing of its parity data is said to be an “open” stripe. FIGS. 3A and 3B below will further illustrate the concept of an open RAID stripe. If it is determined that the read operation was for a page within an open RAID stripe, then in block 208 the controller will force a write of the parity data for the open RAID stripe. In one embodiment, this means that the parity data (for the open stripe) that is currently held in the volatile memory is written to the non-volatile memory array. With the parity data written, in block 210, the controller then attempts to recover the previously uncorrectable error using the RAID data recovery procedure (i.e., using the parity data that has just been written). Although FIG. 2 describes data as stored in units of pages, those skilled in the art will recognize that the process is applicable to systems with other memory measurement units such as blocks, sectors, etc.


Partial Stripe with Forced Parity Write Example



FIGS. 3A-3B illustrate an example of a partial data stripe that is written as a result of a data read error according to one embodiment. FIG. 3A shows four example stripes (Stripes 1-4). Stripes 1-3 are all full stripes in the sense that each has 15 data pages covered by one parity page. Stripes 1-3 have all been written to the non-volatile memory array. These three stripes represent stripes created under normal operation in which no uncorrectable (e.g., uncorrectable by ECC) data errors were detected in the process of stripe creation. In one embodiment, for these completed stripes with parity already written, any error not corrected by ECC can be corrected by using the normal RAID recovery procedure using the parity data. The fourth stripe, Stripe 4, is an open stripe, since it has only 6 pages written to the non-volatile memory array, and the parity data held in the volatile memory is not yet written to the non-volatile memory since parity is typically written after the 15th page is written to the non-volatile memory.



FIG. 3B shows the state of the non-volatile memory after the forced write of the parity data. The process shown in FIG. 3B may be performed in whole or in part by the controller shown in FIG. 1, or by a component of the controller such as the RAID module. As previously shown in FIG. 2, the forced write of parity data occurs when an uncorrectable data access error (e.g., uncorrectable by ECC) is encountered in one of the pages in an open stripe for which parity data has not been written to the non-volatile memory. In this example, the data error occurred while a read was being performed on one of the six pages in Stripe 4, prompting the writing of the parity data to the non-volatile memory ahead of its scheduled write time. The result, as shown in FIG. 3B, is that Stripe 4 is now a partial stripe within the non-volatile memory, and recovery from that uncorrectable data error proceeds with the partial parity data that was written. In one embodiment, after the storage subsystem recovers from that data access error through the use of parity data, the subsystem may move on to create other data stripes, leaving Stripe 4 as a partial stripe. In another embodiment, a partial stripe is re-opened and combined with additional new data to create a full stripe. The data in the partial stripe may be combined with newly received write data (whether from the host system or from other internal operations such as garbage collection or wear leveling), related data already in a volatile memory location in the storage subsystem, or filler data such as system data or pre-designated filler values such as zeros. Those skilled in the art will appreciate that in various embodiments, the actual steps taken in the process shown in FIG. 3B may differ from those shown in the figure. Depending on the embodiment, certain of the steps described in the example above may be removed, others may be added, and the sequence of steps may be altered and/or performed in parallel.


CONCLUSION

While certain embodiments of the inventions have been described, these embodiments have been presented by way of example only, and are not intended to limit the scope of the inventions. Indeed, the novel methods and systems described herein may be embodied in a variety of other forms. Furthermore, various omissions, substitutions and changes in the form of the methods and systems described herein may be made without departing from the spirit of the inventions. The accompanying claims and their equivalents are intended to cover such forms or modifications as would fall within the scope and spirit of the inventions. The features and attributes of the specific embodiments disclosed above may be combined in different ways to form additional embodiments, all of which fall within the scope of the present disclosure. Although the present disclosure provides certain preferred embodiments and applications, other embodiments that are apparent to those of ordinary skill in the art, including embodiments which do not provide all of the features and advantages set forth herein, are also within the scope of this disclosure. Accordingly, the scope of the present disclosure is intended to be defined only by reference to the appended claims.

Claims
  • 1. A storage subsystem comprising: a non-volatile storage media comprising a plurality of data stripes, wherein a storage capacity of each of the plurality of data stripes is a defined size;a volatile storage media for temporarily storing data to be written to the non-volatile storage media; anda controller configured to close each data stripe from the plurality of stripes when the quantity of data written to the data stripe corresponds to the storage capacity for the data stripe,detect an occurrence of a data access error in a first data stripe from the plurality of data stripes, wherein the first data stripe comprises a data stripe with less data written to the data stripe than the defined size for the data stripe; andin response to detecting an occurrence of the data access error, close the first data stripe prior to the quantity of data written to the first data stripe corresponding to the storage capacity of the first data stripe.
  • 2. The storage subsystem of claim 1, wherein the volatile storage media is further configured to store parity data for at least one of the data stripes.
  • 3. The storage subsystem of claim 2, wherein the controller is further configured to close the first data stripe by moving parity data corresponding to the first data stripe from the volatile storage media to the non-volatile storage media.
  • 4. The storage subsystem of claim 1, wherein closing the first data stripe in response to detecting the occurrence of the data access error creates a partial data stripe that is smaller than the defined size.
  • 5. The storage subsystem of claim 1, wherein, subsequent to recovery from the data access error, the controller is further configured to reopen the first data stripe.
  • 6. The storage subsystem of claim 1, wherein data of the first data stripe is combined with sufficient additional data to satisfy the storage capacity of the first data stripe.
  • 7. The storage subsystem of claim 6, wherein the additional data comprises data received from a host system.
  • 8. The storage subsystem of claim 6, wherein the additional data comprises filler data.
  • 9. The storage subsystem of claim 6, wherein the additional data comprises data generated from internal operations.
  • 10. The storage subsystem of claim 1, wherein the data access error comprises at least one of a read error and a program error.
  • 11. The storage subsystem of claim 1, wherein the controller is further configured to implement a data redundancy system.
  • 12. A method of recovering from a data access error in a storage subsystem, the method comprising: storing, in a volatile storage of a storage subsystem, data to be written to a non-volatile storage of the storage subsystem, the non-volatile storage comprising a plurality of data stripes with a storage capacity of a defined size;detecting an occurrence of a data access error in a first data stripe from the plurality of data stripes, wherein the first data stripe comprises an open stripe; andin response to detecting the occurrence of the data access error, closing the first data stripe prior to the first data stripe storing a quantity of data corresponding to the defined size.
  • 13. The method of claim 12, further comprising storing, in the volatile storage, parity data to be written to the non-volatile storage, the parity data corresponding to the data.
  • 14. The method of claim 13, wherein closing the first data stripe comprises moving parity data corresponding to the first data stripe from the volatile storage to the non-volatile storage.
  • 15. The method of claim 12, wherein closing the first data stripe in response to detecting the occurrence of the data access error creates a partial data stripe that is smaller than the defined size.
  • 16. The method of claim 12, further comprising reopening the first data stripe subsequent to recovery from the data access error.
  • 17. The method of claim 12, further comprising combining data of the first data stripe with sufficient additional data to fill an unused portion of the storage capacity of the first data stripe.
  • 18. The method of claim 17, wherein the additional data comprises at least one of data received from a host system, filler data, and data generated from internal operations.
  • 19. The method of claim 17, further comprising writing new parity data corresponding to the additional data to the first data stripe.
  • 20. The method of claim 12, wherein the data access error comprises at least one of a read error and a program error.
RELATED APPLICATION

This application is a continuation of U.S. application Ser. No. 13/025,980, filed on Feb. 11, 2011 and titled “SYSTEM AND METHOD FOR DATA ERROR RECOVERY IN A SOLID STATE SUBSYSTEM,” the disclosure of which is hereby incorporated by reference in its entirety.

US Referenced Citations (158)
Number Name Date Kind
5408644 Schneider et al. Apr 1995 A
5499337 Gordon Mar 1996 A
6467022 Buckland et al. Oct 2002 B1
6523087 Busser Feb 2003 B2
6856556 Hajeck Feb 2005 B1
6959413 Humlicek et al. Oct 2005 B2
7069382 Horn et al. Jun 2006 B2
7126857 Hajeck Oct 2006 B2
7200715 Kleiman et al. Apr 2007 B2
7409492 Tanaka et al. Aug 2008 B2
7430136 Merry, Jr. et al. Sep 2008 B2
7447807 Merry et al. Nov 2008 B1
7502256 Merry, Jr. et al. Mar 2009 B2
7509441 Merry et al. Mar 2009 B1
7596643 Merry, Jr. et al. Sep 2009 B2
7640390 Iwamura et al. Dec 2009 B2
7653778 Merry, Jr. et al. Jan 2010 B2
7685337 Merry, Jr. et al. Mar 2010 B2
7685338 Merry, Jr. et al. Mar 2010 B2
7685374 Diggs et al. Mar 2010 B2
7733712 Walston et al. Jun 2010 B1
7765373 Merry et al. Jul 2010 B1
7779294 Corrado et al. Aug 2010 B2
7856528 Frost et al. Dec 2010 B1
7898855 Merry, Jr. et al. Mar 2011 B2
7912991 Merry et al. Mar 2011 B1
7936603 Merry, Jr. et al. May 2011 B2
7962792 Diggs et al. Jun 2011 B2
8078918 Diggs et al. Dec 2011 B2
8090899 Syu Jan 2012 B1
8095851 Diggs et al. Jan 2012 B2
8108692 Merry et al. Jan 2012 B1
8122185 Merry, Jr. et al. Feb 2012 B2
8127048 Merry et al. Feb 2012 B1
8135903 Kan Mar 2012 B1
8151020 Merry, Jr. et al. Apr 2012 B2
8161227 Diggs et al. Apr 2012 B1
8166245 Diggs et al. Apr 2012 B2
8243525 Kan Aug 2012 B1
8254172 Kan Aug 2012 B1
8261012 Kan Sep 2012 B2
8296625 Diggs et al. Oct 2012 B2
8312207 Merry, Jr. et al. Nov 2012 B2
8316176 Phan et al. Nov 2012 B1
8321597 Yu et al. Nov 2012 B2
8341339 Boyle et al. Dec 2012 B1
8375151 Kan Feb 2013 B1
8392635 Booth et al. Mar 2013 B2
8397107 Syu et al. Mar 2013 B1
8402217 Burd Mar 2013 B2
8407449 Colon et al. Mar 2013 B1
8423722 Deforest et al. Apr 2013 B1
8433858 Diggs et al. Apr 2013 B1
8443167 Fallone et al. May 2013 B1
8447920 Syu May 2013 B1
8458435 Rainey, III et al. Jun 2013 B1
8478930 Syu Jul 2013 B1
8489854 Colon et al. Jul 2013 B1
8503237 Horn Aug 2013 B1
8521972 Boyle et al. Aug 2013 B1
8549236 Diggs et al. Oct 2013 B2
8583835 Kan Nov 2013 B1
8601311 Horn Dec 2013 B2
8601313 Horn Dec 2013 B1
8612669 Syu et al. Dec 2013 B1
8612804 Kang et al. Dec 2013 B1
8615681 Horn Dec 2013 B2
8638602 Horn Jan 2014 B1
8639872 Boyle et al. Jan 2014 B1
8683113 Abasto et al. Mar 2014 B2
8700834 Horn et al. Apr 2014 B2
8700950 Syu Apr 2014 B1
8700951 Call et al. Apr 2014 B1
8706985 Boyle et al. Apr 2014 B1
8707104 Jean Apr 2014 B1
8713066 Lo et al. Apr 2014 B1
8713357 Jean et al. Apr 2014 B1
8719531 Strange et al. May 2014 B2
8724422 Agness et al. May 2014 B1
8725931 Kang May 2014 B1
8745277 Kan Jun 2014 B2
8751728 Syu et al. Jun 2014 B1
8769190 Syu et al. Jul 2014 B1
8769232 Suryabudi et al. Jul 2014 B2
8775720 Meyer et al. Jul 2014 B1
8782327 Kang et al. Jul 2014 B1
8788778 Boyle Jul 2014 B1
8788779 Horn Jul 2014 B1
8788880 Gosla et al. Jul 2014 B1
8793429 Call et al. Jul 2014 B1
20040015657 Humlicek et al. Jan 2004 A1
20040123032 Talagala et al. Jun 2004 A1
20050066124 Horn et al. Mar 2005 A1
20050086429 Chatterjee et al. Apr 2005 A1
20050177672 Rao Aug 2005 A1
20060004957 Hand et al. Jan 2006 A1
20060236029 Corrado et al. Oct 2006 A1
20070268905 Baker et al. Nov 2007 A1
20070283079 Iwamura et al. Dec 2007 A1
20070294565 Johnston et al. Dec 2007 A1
20070297265 Kim et al. Dec 2007 A1
20080133969 Manoj Jun 2008 A1
20080141054 Danilak Jun 2008 A1
20080155160 McDaniel Jun 2008 A1
20080229148 Forhan et al. Sep 2008 A1
20080276124 Hetzler et al. Nov 2008 A1
20090073762 Lee et al. Mar 2009 A1
20090083504 Belluomini et al. Mar 2009 A1
20090150599 Bennett Jun 2009 A1
20090172335 Kulkarni et al. Jul 2009 A1
20090204852 Diggs et al. Aug 2009 A1
20090210744 Kamalavannan Aug 2009 A1
20090248998 Sato et al. Oct 2009 A1
20090327604 Sato et al. Dec 2009 A1
20090327803 Fukutomi et al. Dec 2009 A1
20100049914 Goodwin Feb 2010 A1
20100064111 Kunimatsu et al. Mar 2010 A1
20100088557 Weingarten et al. Apr 2010 A1
20100088579 Hafner et al. Apr 2010 A1
20100115175 Zhuang et al. May 2010 A9
20100122115 Olster May 2010 A1
20100169543 Edgington et al. Jul 2010 A1
20100174849 Walston et al. Jul 2010 A1
20100250793 Syu Sep 2010 A1
20100262773 Borchers et al. Oct 2010 A1
20100281202 Abali et al. Nov 2010 A1
20110035548 Kimmel et al. Feb 2011 A1
20110099323 Syu Apr 2011 A1
20110126045 Bennett May 2011 A1
20110173484 Schuette et al. Jul 2011 A1
20110191649 Lim et al. Aug 2011 A1
20110202792 Atzmony Aug 2011 A1
20110219259 Frost et al. Sep 2011 A1
20110264843 Haines et al. Oct 2011 A1
20110283049 Kang et al. Nov 2011 A1
20110314218 Bert Dec 2011 A1
20120079318 Colgrove et al. Mar 2012 A1
20120110376 Dreifus et al. May 2012 A1
20120151253 Horn Jun 2012 A1
20120173790 Hetzler et al. Jul 2012 A1
20120233406 Igashira et al. Sep 2012 A1
20120246403 McHale et al. Sep 2012 A1
20120260020 Suryabudi et al. Oct 2012 A1
20120278531 Horn Nov 2012 A1
20120284460 Guda Nov 2012 A1
20120324191 Strange et al. Dec 2012 A1
20130132638 Horn et al. May 2013 A1
20130145106 Kan Jun 2013 A1
20130290793 Booth et al. Oct 2013 A1
20140059405 Syu et al. Feb 2014 A1
20140101369 Tomlin et al. Apr 2014 A1
20140115427 Lu Apr 2014 A1
20140133220 Danilak et al. May 2014 A1
20140136753 Tomlin et al. May 2014 A1
20140149826 Lu et al. May 2014 A1
20140157078 Danilak et al. Jun 2014 A1
20140181432 Horn Jun 2014 A1
20140223255 Lu et al. Aug 2014 A1
Foreign Referenced Citations (1)
Number Date Country
WO 2010049928 May 2010 WO
Non-Patent Literature Citations (3)
Entry
Notice of Allowance dated Nov. 29, 2013 from U.S. Appl. No. 13/025,980, 7 pages.
Office Action dated May 21, 2013 from U.S. Appl. No. 13/025,980, 12 pages.
Interview Summary dated Sep. 26, 2013 from U.S. Appl. No. 13/025,980, 3 pages.
Continuations (1)
Number Date Country
Parent 13025980 Feb 2011 US
Child 14216295 US