Solid state storage generally corresponds to any type of storage that has a finite number of program-erase cycles. The limited number of program-erase cycles or write cycles necessitates the use of methods to avoid excessive writes to the same region of the solid state storage in order to prevent data loss. In order to maximize the use of the solid state storage, storage systems using solid state storage include mechanisms to track the number of program-erase cycles performed on the various regions of the solid state storage. Meanwhile, the characteristics of storage elements change as program-erase cycles increase so that the optimality of various parameters for storage elements depends on the program-erase cycles information available in the solid-state storage system. The sub optimality of storage element parameters due to any absence or inaccuracy of program-erase cycles information may result in increased latency, decreased throughput, or data loss.
Specific embodiments of the technology will now be described in detail with reference to the accompanying figures. In the following detailed description of embodiments of the technology, numerous specific details are set forth in order to provide a more thorough understanding of the technology. However, it will be apparent to one of ordinary skill in the art that the technology may be practiced without these specific details. In other instances, well-known features have not been described in detail to avoid unnecessarily complicating the description
In the following description of
In general, embodiments of the technology relate to determining a P/E cycle value for an offline storage module. More specifically, embodiments of the technology relate to scenarios in which the P/E cycle value for a storage module is unknown and/or needs to be verified. For example, consider a scenario in which a user removes a storage module from an operating storage appliance and returns the storage module to a vendor or other entity. The vendor (or other entity) may need to determine whether the storage module has reached its end of life (EOL) or if the storage module may be used in another storage appliance. In order to make this determination, embodiments of the technology include a testing system and method for determining and/or verifying the current P/E cycle value of such a storage module.
The following description describes one or more systems and methods for implementing one or more embodiments of the technology.
In one embodiment of the technology, a testing module (100) is any system or process executing on a system that includes functionality to issue a read request or a write request to the controller (104) in order to initiate the method described in
In another embodiment of the technology, the testing module is user interface that is provided by the controller (104). In such cases, the testing module may be command line interface or a graphical user interface that is provided by the controller (104). In these scenarios, the testing module may be implemented as module within the controller instead of being implemented on a physical system that is separate from the controller as shown in
Continuing with the discussion of
In one embodiment of the technology, the controller (104) is operatively connected to memory (106). The memory (106) may be any volatile memory including, but not limited to, Dynamic Random-Access Memory (DRAM), Synchronous DRAM, SDR SDRAM, and DDR SDRAM. In one embodiment of the technology, the memory (106) is configured to temporarily store various data prior to such data being stored in the storage array.
In one embodiment of the technology, the FPGA (102) (if present) may be used to offload all or a portion of the functionality of the controller (104) in accordance with one or more embodiments of the technology.
In one embodiment of the technology, the storage array (108) includes one or more storage modules (SMs). Additional detail about the storage modules is provided with respect to
Those skilled in the art will appreciate that the technology is not limited to the configuration shown in
In one embodiment of the technology, the storage module controller (300) is configured to receive requests read and/or write requests from the controller. Further, the storage module controller (300) is configured to service the read and write requests using the memory (not shown) and/or the solid-state memory modules (304A, 304N).
In one embodiment of the technology, the memory (not shown) corresponds to any volatile memory including, but not limited to, Dynamic Random-Access Memory (DRAM), Synchronous DRAM, SDR SDRAM, and DDR SDRAM.
In one embodiment of the technology, the solid-state memory modules (304A, 304N) correspond to any data storage device that uses solid-state memory to store persistent data. The solid-state memory may include, but is not limited to, Spin-Torque Magnetic RAM (ST-MRAM), Phase Change Memory (PCM), write in-place persistent storage, NAND Flash memory and NOR Flash memory. Further, the NAND Flash memory and the NOR flash memory may include single-level cells (SLCs), multi-level cell (MLCs), or triple-level cells (TLCs). Generally, the solid-state memory may correspond to any type of memory that has a finite number of program-erase cycles. Those skilled in the art will appreciate that embodiments of the technology are not limited to storage class memory.
The memory includes a mapping of logical addresses (400) to physical addresses (402). In one embodiment of the technology, the logical address (400) is an address at which the data appears to reside from the perspective of the client (e.g., 100A, 100M in
In one embodiment of the technology, the logical address is (or includes) a hash value generated by applying a hash function (e.g., SHA-1, MD-5, etc.) to an n-tuple, where the n-tuple is <object ID, offset ID>. In one embodiment of the technology, the object ID defines a file and the offset ID defines a location relative to the starting address of the file. In another embodiment of the technology, the n-tuple is <object ID, offset ID, birth time>, where the birth time corresponds to the time when the file (identified using the object ID) was created. Alternatively, the logical address may include a logical object ID and a logical byte address, or a logical object ID and a logical address offset. In another embodiment of the technology, the logical address includes an object ID and an offset ID. Those skilled in the art will appreciate that multiple logical addresses may be mapped to a single physical address and that the logical address content and/or format is not limited to the above embodiments.
In one embodiment of the technology, the physical address (402) corresponds to a physical location in a solid-state memory module (304A, 304N) in
In one embodiment of the technology, after the method shown in
The P/E cycle values may be stored on a per page basis, a per block basis, on a per set of blocks basis, and/or at any other level of granularity.
In one embodiment of the technology, the in-memory data structure includes a mapping of <failed bit count (FBC), temperature> to P/E cycle value (416). The FBC may represent the number of bits that are incorrect in data, typically in an Error Correcting Code (ECC) codeword (also referred to as a codeword), that is read from the storage module. The FBC may be obtained as output of an ECC decoder (located in the storage module controller) when the ECC decoding operation is successful. The mean FBC may be calculated over a sample of ECC codewords. In one embodiment, the mean FBC is obtained as the mean of FBCs from all the pages of a block or a group of blocks whose P/E cycles is to be estimated. Without departing from the technology, other sampling and averaging methods may be used. In one embodiment, mean FBC may be represented as a specific value or as a range. In one embodiment, the aforementioned mapping may not include temperature. For example, the mapping may be a mapping between <FBC> and <P/E cycle value>. While the above mapping uses mean FBC, other measures of error rate for data read from the storage modules may be used without departing from the technology.
In one embodiment of the technology, in place of FBC, a syndrome weight from LDPC (low-density parity-check) decoder output may be used. Syndrome weight is the number of failed parity check equations during the ECC decoding. Syndrome weight of ECCs with sparse parity check matrices such as LDPC codes may be used in place of FBC. In one embodiment of the technology, in place of FBC, decoding latency may be used. In ECC decoders such as BCH (Bose-Chaudhury-Hocquenghem) decoder or LDPC decoder, the decoding latency increases as FBC corrected by the decoder increases.
In one embodiment of the technology, the <FBC, Temperature> to <PIE cycle value> mappings are ascertained by conducting experiments to determine the FBC for specific combinations of temperature and known P/E cycle values. For example, data, with a known pattern, may be read from a solid-state memory module with a known P/E cycle value at a particular temperature. The resulting FBC from the read data may then be used to generate the <FBC, Temperature> to P/E cycle value mapping. A similar method may be used to determine <FBC> to <P/E cycle value> mappings without departing from the technology. For example, if the method shown in
In one embodiment of the technology, the FBC, syndrome weight, and decoding latency may be each individually referred to as an as error parameter and collectively as error parameters. Accordingly, the <FBC> to <P/E cycle value> mapping and the <FBC, temperature> to <P/E cycle value> mapping may be represented as an <error parameter> to <P/E cycle value> mapping or an <error parameter, temperature> to <P/E cycle value> mapping, respectively, without departing from the technology.
Turning to the flowcharts, while the various Steps in the flowchart are presented and described sequentially, one of ordinary skill will appreciate that some or all of the steps may be executed in different orders, may be combined or omitted, and some or all of the steps may be executed in parallel.
Turning to
The selection of the sample set may be performed by a user via the testing module. For example, the user may, via the testing module, specify that the method in
The sample set may be selected such that the resulting calculated P/E value accurately reflects the P/E cycle value of the entire solid state memory module or accurately reflects the P/E cycle value of a specific portion of the solid state memory module.
In step 502, the sample set is erased. More specifically, the controller may issue multiple consecutive erase and write requests to the sample set. In one embodiment of the technology, the idle time between each erase and write request is predefined to match the characterization condition under which the <error parameter> to <P/E cycle value> mapping (or the <error parameter, temperature> to <P/E cycle value> mapping) is determined. For example, 10 s, 100 s, or 1000 s of seconds may be used. The data pattern to program may change at each write request. For example, 10 or 100 consecutive erase and write requests could be performed with 10 or 100 different data patterns being written, respectively. In one embodiment, one or more of the data patterns may be generated by a random number generator. The last write request performed in step 502 is an erase request, so that the sample set is ready to program in the next step.
In step 504, the controller generates and issues a write request with a known data pattern to the sample set in order to program the sample set. The result of step 504 is the writing of the data with a known data pattern to the sample set. In one embodiment, writing the data to the solid-state memory module may include generating an ECC codeword that includes the data (i.e., the data to written) and parity bits obtained using, e.g., a code generator matrix. The codeword is subsequently stored in the sample set.
In step 506, the controller subsequently generates and issues a read request to the sample set.
In step 508, the controller subsequently receives a copy of the data that is currently written to the sample set. The controller also receives the current temperature reading of the SSMM(s) in which the sample set is located. The temperature may be obtained by issuing a separate request to the storage module controller that is operatively connected to the SSMM(s) in which the sample set is located. Alternatively, the current temperature reading may be included with the response to the read request. In one embodiment of the technology, step 508 may not be performed when the storage array (i.e., the storage array that includes the solid state memory module being tested) is in a temperature-controlled environment and the temperature of the storage array is constant (or substantially constant) and the temperature is known. For example, the method in
In step 510, the error parameter for the sample set is determined. In one embodiment, the FBC may be determined by comparing the data pattern of the data received in step 508 with the known data pattern of the data written to the sample set in step 504. The comparison may be performed, by the controller, on a per-bit basis in order to determine the number of bits that are different.
In another embodiment of the technology, the FBC may be determined by the ECC decoder (not shown) in the storage module controller, by performing error correction on the data received in step 508, where the result of the error correction includes the number of bit errors in the data received in step 508. In scenarios in which the ECC decoder is used, the data written to the sample set does not necessarily need to be data with a known data pattern. In one embodiment, a set of data with known data patterns may be written to the sample set. In such cases, the FBC may be determined on a per-physical address basis (i.e., per-physical address in the sample set) to obtain a set of FBCs. In another embodiment of the technology, the ECC decoder may obtain a set of FBCs based on the data that is stored in sample set. The FBC that results from step 510 may then be determined as the mean or median FBC generated from the set of FBCs. The FBC may be determined using other mechanisms without departing from the technology. Step 510 may alternatively involve obtaining the decoding latency instead of FBC.
In step 512, a calculated P/E cycle value is determined by performing a look-up in the in-memory data structure using the <error parameter, temperature> combination, where the error parameter is determined in step 510 and the temperature is obtained in step 508. In one embodiment of the technology, the error parameter determined in step 510 may be mapped to an error parameter range, where the error parameter range instead of the specific error parameter is used in the look-up performed in step 512. The result of step 512 is a calculated P/E cycle value.
In step 514, the calculated P/E cycle value is stored in the solid state memory module, e.g., in a known location and, optionally, the in-memory data structured is updated to include the calculated P/E cycle value as the P/E cycle value for all physical addresses in the same region as the sample set.
In one embodiment of the technology, the method shown in
Turning to
In this example, assume that the controller receives a request from a testing module to perform the method in
The controller then generates and issues a controller read request (704) to the sample set of physical addresses in solid state memory module A (620). The storage module controller (616) in the storage module (614), in response to receiving the controller read request, issues a write command(s) (706) to solid state memory module A (620).
The storage module controller (616), in response to the read request, obtains a copy of the data that is stored in the sample set from solid state memory module A (620) and the temperature value of solid state memory module A. The storage module controller (616) performs error correction on the obtained data using the ECC decoder (not shown) to obtain the FBC. The FBC along with the temperature value is subsequently provided to the controller (604) as part of a read response (708). The FBC in combination with the temperature value is then used to obtain P/E cycle value from the in-memory data structure (610). The calculated P/E cycle value is then stored in a specific location within solid state memory module A.
One or more embodiments of the technology may be implemented using instructions executed by one or more processors in the storage appliance. Further, such instructions may correspond to computer readable instructions that are stored on one or more non-transitory computer readable mediums.
While the technology has been described with respect to a limited number of embodiments, those skilled in the art, having benefit of this disclosure, will appreciate that other embodiments can be devised which do not depart from the scope of the technology as disclosed herein. Accordingly, the scope of the technology should be limited only by the attached claims.
Number | Name | Date | Kind |
---|---|---|---|
6016275 | Han | Jan 2000 | A |
6862675 | Wakimoto | Mar 2005 | B1 |
7559004 | Chang | Jul 2009 | B1 |
8189379 | Camp et al. | May 2012 | B2 |
8259506 | Sommer et al. | Sep 2012 | B1 |
8305812 | Levy | Nov 2012 | B2 |
8335893 | Tagawa | Dec 2012 | B2 |
8694724 | Linnell et al. | Apr 2014 | B1 |
8819503 | Melik-Martirosian | Aug 2014 | B2 |
8868842 | Yano et al. | Oct 2014 | B2 |
8891303 | Higgins et al. | Nov 2014 | B1 |
8934284 | Patapoutian et al. | Jan 2015 | B2 |
8995197 | Steiner et al. | Mar 2015 | B1 |
9026764 | Hashimoto | May 2015 | B2 |
9195586 | Cometti | Nov 2015 | B2 |
9330767 | Steiner et al. | May 2016 | B1 |
9368225 | Pinkovich et al. | Jun 2016 | B1 |
9496043 | Camp et al. | Nov 2016 | B1 |
9564233 | Cho | Feb 2017 | B1 |
9606737 | Kankani et al. | Mar 2017 | B2 |
9645177 | Cohen et al. | May 2017 | B2 |
9690655 | Tabrizi et al. | Jun 2017 | B2 |
9710180 | Van Gaasbeck | Jul 2017 | B1 |
9740425 | Bakshi et al. | Aug 2017 | B2 |
9798334 | Tabrizi et al. | Oct 2017 | B1 |
9842060 | Jannyavula Venkata et al. | Dec 2017 | B1 |
9864525 | Kankani et al. | Jan 2018 | B2 |
9891844 | Kankani et al. | Feb 2018 | B2 |
9905289 | Jeon et al. | Feb 2018 | B1 |
20050172082 | Liu et al. | Aug 2005 | A1 |
20050223185 | Lee | Oct 2005 | A1 |
20050278486 | Trika et al. | Dec 2005 | A1 |
20070260811 | Merry, Jr. et al. | Nov 2007 | A1 |
20070263444 | Gorobets et al. | Nov 2007 | A1 |
20070266200 | Gorobets et al. | Nov 2007 | A1 |
20080082725 | Elhamias | Apr 2008 | A1 |
20080082726 | Elhamias | Apr 2008 | A1 |
20090144598 | Yoon | Jun 2009 | A1 |
20100306577 | Dreifus et al. | Dec 2010 | A1 |
20100306580 | McKean et al. | Dec 2010 | A1 |
20100332923 | D'Abreu | Dec 2010 | A1 |
20110173484 | Schuette | Jul 2011 | A1 |
20110202818 | Yoon | Aug 2011 | A1 |
20120110239 | Goss et al. | May 2012 | A1 |
20120192035 | Nakanishi | Jul 2012 | A1 |
20120224425 | Fai | Sep 2012 | A1 |
20120236656 | Cometti | Sep 2012 | A1 |
20120239991 | Melik-Martirosian | Sep 2012 | A1 |
20120268994 | Nagashima | Oct 2012 | A1 |
20120290899 | Cideciyan | Nov 2012 | A1 |
20130019057 | Stephens | Jan 2013 | A1 |
20130047044 | Weathers et al. | Feb 2013 | A1 |
20130094286 | Sridharan et al. | Apr 2013 | A1 |
20130151214 | Ryou | Jun 2013 | A1 |
20130176784 | Cometti et al. | Jul 2013 | A1 |
20130185487 | Kim et al. | Jul 2013 | A1 |
20130227200 | Cometti et al. | Aug 2013 | A1 |
20130311712 | Aso | Nov 2013 | A1 |
20140006688 | Yu et al. | Jan 2014 | A1 |
20140101499 | Griffin | Apr 2014 | A1 |
20140181378 | Saeki et al. | Jun 2014 | A1 |
20140181595 | Hoang et al. | Jun 2014 | A1 |
20140195725 | Bennett | Jul 2014 | A1 |
20140208174 | Ellis et al. | Jul 2014 | A1 |
20140215129 | Kuzmin et al. | Jul 2014 | A1 |
20140229799 | Hubris | Aug 2014 | A1 |
20140293699 | Yang et al. | Oct 2014 | A1 |
20140347936 | Ghaly | Nov 2014 | A1 |
20140359202 | Sun et al. | Dec 2014 | A1 |
20140365836 | Jeon et al. | Dec 2014 | A1 |
20150078094 | Nagashima | Mar 2015 | A1 |
20150082121 | Wu et al. | Mar 2015 | A1 |
20150205664 | Janik | Jul 2015 | A1 |
20150227418 | Cai et al. | Aug 2015 | A1 |
20150357045 | Moschiano et al. | Dec 2015 | A1 |
20160004464 | Shen | Jan 2016 | A1 |
20160092304 | Tabrizi | Mar 2016 | A1 |
20160093397 | Tabrizi | Mar 2016 | A1 |
20160148708 | Tuers et al. | May 2016 | A1 |
20160306591 | Ellis | Oct 2016 | A1 |
20160342345 | Kankani et al. | Nov 2016 | A1 |
20170090783 | Fukutomi et al. | Mar 2017 | A1 |
20170109040 | Raghu | Apr 2017 | A1 |
20170117032 | Takizawa | Apr 2017 | A1 |
20170228180 | Shen | Aug 2017 | A1 |
20170235486 | Martineau et al. | Aug 2017 | A1 |
20170262336 | Tabrizi et al. | Sep 2017 | A1 |
20170315753 | Blount | Nov 2017 | A1 |
20180018269 | Jannyavula Venkata et al. | Jan 2018 | A1 |
20180032439 | Jenne et al. | Feb 2018 | A1 |
20180034476 | Kayser et al. | Feb 2018 | A1 |
20180039795 | Gulati | Feb 2018 | A1 |
20180060230 | Kankani et al. | Mar 2018 | A1 |
Number | Date | Country |
---|---|---|
102150140 | Aug 2011 | CN |
103902234 | Jul 2014 | CN |
2012-203957 | Oct 2012 | JP |
2013176784 | Sep 2013 | JP |
Entry |
---|
Hyojin Choi et al.; “VLSI Implementation of BCH Error Correction for Multilevel Cell NAND Flash Memory”; IEEE Transactions on Very Large Scale Integration (VLSI) Systems; vol. 18, No. 5; pp. 843-847; May 2010 (5 pages). |
Te-Hsuan Chen et al.; “An Adaptive-Rate Error Correction Scheme for NAND Flash Memory”; 27th IEEE VLSI Test Symposium; pp. 53-58; 2009 (6 pages). |
Eran Gal et al.; “Algorithms and Data Structures for Flash Memories”; ACM Computing Surveys (CSUR); vol. 37, No. 2; pp. 138-163; Jun. 2005 (30 pages). |
Mendel Rosenblum et al.; “The Design and Implementation of a Log-Structured File System”; ACM Transactions on Computer Systems; vol. 10; No. 1; pp. 26-52; Feb. 1992 (27 pages). |
Chanik Park et al.; “A Reconfigurable FTL (Flash Translation Layer) Architecture for NAND Flash-Based Applications”; ACM Transactions on Embedded Computing Systems; vol. 7, No. 4, Article 38; Jul. 2008 (23 pages). |
Yu Cai et al.; “Flash Correct-and-Refresh: Retention-Aware Error Management for Increased Flash Memory Lifetime”; Proceedings of the IEEE International Conference on Computer Design (ICCD); pp. 94-101; 2012 (10 pages). |
Beomkyu Shin et al.; “Error Control Coding and Signal Processing for Flash Memories”; IEEE International Symposium on Circuits and Systems (ISCAS); pp. 409-412; 2012 (4 pages). |
Haleh Tabrizi et al.; “A Learning-based Network Selection Method in Heterogeneous Wireless Systems”; IEEE Global Telecommunications Conference (GLOBECOM 2011); 2011 (5 pages). |
Neal Mielke et al.; “Recovery Effects in the Distributed Cycling of Flash Memories”; IEEE 44th Annual International Reliability Physics Symposium; pp. 29-35; 2006 (7 pages). |
Ramesh Pyndiah et al.; “Near Optimum Decoding of Product Codes”; Global Telecommunicaitons Conference (GLOBECOM '94), Communications: The Global Bridge pp. 339-343; 1994 (5 pages). |
Junsheng Han et al.; “Reliable Memories with Subline Accesses”; International Symposium on Information Theory (ISIT); pp. 2531-2535, Jun. 2007 (5 pages). |
Ankit Singh Rawat et al.; “Locality and Availability in Distributed Storage,” arXiv:1402.2011v1 [cs.IT]; Feb. 10, 2014 (9 pages). |
Parikshit Gopalan et al.; “On the Locality of Codeword Symbols”; arXiv:1106.3625v1[cs.IT]; Jun. 18, 2011 (17 pages). |
Frédérique Oggier et al.; “Self-repairing Homomorphic Codes for Distributed Storage Systems”; IEEE INFOCOM 2011; pp. 1215-1223; 2011 (9 pages). |
Dimitris Papailiopoulos et al.; “Simple Regenerating Codes: Network Coding for Cloud Storage”; arXiv:1109.0264v1 [cs.IT]; Sep. 1, 2011 (9 pages). |
Osama Khan et al.; “In Search of I/O-Optimal Recovery from Disk Failures”; HotStorage 2011; Jun. 2011 (5 pages). |
Cheng Huang et al.; “Pyramid Codes: Flexible Schemes to Trade Space for Access Efficiency in Reliable Data Storage Systems”; Sixth IEEE International Symposium on Network Computing and Applications (NCA); 2007 (8 pages). |
Hongchao Zhou et al.; “Error-Correcting Schemes with Dynamic Thresholds in Nonvolatile Memories”; 2011 IEEE International Symposium on Information Theory Proceedings; pp. 2143-2147; 2011; (5 pages). |
Borja Peleato et al.; “Towards Minimizing Read Time for NAND Flash”; Globecom 2012—Symposium on Selected Areas in Communication; pp. 3219-3224; 2012 (6 pages). |
Yongjune Kim et al.; “Modulation Coding for Flash Memories”; 2013 International Conference on Computing, Networking and Communications, Data Storage Technology and Applications Symposium; pp. 961-967; 2013 (7 pages). |
Yu Cai et al.; “Program Interference in MLC NAND Flash Memory: Characterization, Modeling, and Mitigation”; 2013 IEEE International Conference on Computer Design (ICCD); pp. 123-130; 2013 (8 pages). |
Yu Cai et al.; “Threshold Voltage Distribution in MLC NAND Flash Memory: Characterization, Analysis, and Modeling”; Proceedings of the Conference on Design, Automation and Test in Europe; pp. 1285-1290; 2013 (6 pages). |
Eitan Yaakobi et al.; Error Characterization and Coding Schemes for Flash Memories; IEEE Globecom 2010 Workshop on Application of Communication Theory to Emerging Memory Technologies; pp. 1856-1860; 2010 (5 pages). |
Borja Peleato et al.; “Maximizing MLC NAND lifetime and reliability in the presence of write noise”; IEEE International Conference on Communications (ICC); pp. 3752-3756; 2012 (5 pages). |
Feng Chen et al.; “Essential Roles of Exploiting Internal Parallelism of Flash Memory based Solid State Drives in High-Speed Data Processing”; 2011 IEEE 17th International Symposium on High Performance Computer Architecture (HPCA); pp. 266-277; 2011. |