One important performance metric for a solid state memory storage system is the longevity of the solid state memory. Solid state memory ages as write operations are performed. The degree of aging may depend on the write parameterization.
In one aspect, embodiments disclosed herein relate to a method of adjusting solid state memory write parameters that includes setting a verify threshold value to a level that results in a number of correctable read errors when data, written using the verify threshold value, are read from a storage module. The method includes receiving, from a client, a client write request with a logical address and data to be written, and identifying a physical address corresponding to the logical address. The physical address includes a page number for a physical page in the storage module. The method also includes obtaining the verify threshold value; issuing a control module program request that includes the data to be written and the verify threshold value to the storage module; and programming the data into the physical page using the verify threshold value. In embodiments disclosed herein, setting the verify threshold value includes monitoring a correctable read error frequency; adjusting the verify threshold value using a verified voltage based on the correctable read error frequency.
In another aspect, embodiments disclosed herein relate to a method of adjusting solid state memory write parameters that includes setting a verify threshold value to a level suitable for avoiding read errors when data, written using the verify threshold value, are read from a storage module. The method includes receiving, from a client, a client write request with a logical address and data to be written, and identifying a physical address corresponding to the logical address. The physical address includes a page number for a physical page in the storage module. The method also includes obtaining the verify threshold value; issuing a control module program request that includes the data to be written and the verify threshold value to the storage module; and programming the data into the physical page using the verify threshold value. In embodiments disclosed herein, setting the verify threshold value includes monitoring a correctable read error frequency; adjusting the verify threshold value using a verified voltage based on the correctable read error frequency.
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 programming memory cells of solid-state storage. More specifically, embodiments of the technology relate to varying the voltages, programmed into memory cells, depending on the condition of the memory cells and/or other factors. The ability to vary the programmed voltages may be used to prolong the lifetime of the solid-state storage, reduce read error rates and/or data loss, and/or to increase performance, as described below.
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, clients (100A, 100M) correspond to any physical system that includes functionality to issue a read request to the storage appliance (102) and/or issue a write request to the storage appliance (102). Though not shown in
In one embodiment of the technology, the client (100A-100M) is configured to execute an operating system (OS) that includes a file system. The file system provides a mechanism for the storage and retrieval of files from the storage appliance (102). More specifically, the file system includes functionality to perform the necessary actions to issue read requests and write requests to the storage appliance. The file system also provides programming interfaces to enable the creation and deletion of files, reading and writing of files, performing seeks within a file, creating and deleting directories, managing directory contents, etc. In addition, the file system also provides management interfaces to create and delete file systems. In one embodiment of the technology, to access a file, the operating system (via the file system) typically provides file manipulation interfaces to open, close, read, and write the data within each file and/or to manipulate the corresponding metadata.
Continuing with the discussion of
In one embodiment of the technology, the storage appliance (102) is a system that includes volatile and persistent storage and is configured to service read requests and/or write requests from one or more clients (100A, 100M). Various embodiments of the storage appliance (102) are described below in
Referring to
Referring to
Those skilled in the art will appreciate that while
Continuing with the discussion of
Continuing with
In one embodiment of the technology, the processor (208) is configured to create and update an in-memory data structure (not shown), where the in-memory data structure is stored in the memory (210). In one embodiment of the technology, the in-memory data structure includes information described in
In one embodiment of the technology, the processor is configured to offload various types of processing to the FPGA (212). In one embodiment of the technology, the FPGA (212) includes functionality to calculate checksums for data that is being written to the storage module(s) and/or data that is being read from the storage module(s). Further, the FPGA (212) may include functionality to calculate P and/or Q parity information for purposes of storing data in the storage module(s) using a RAID scheme (e.g., RAID 2-RAID 6) and/or functionality to perform various calculations necessary to recover corrupted data stored using a RAID scheme (e.g., RAID 2-RAID 6). In one embodiment of the technology, the storage module group (202) includes one or more storage modules (214A, 214N) each configured to store data. One embodiment of a storage module is described below in
In one embodiment of the technology, the storage module controller (300) is configured to receive requests to read from and/or write data to one or more control modules. 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 correspond to any data storage device that uses solid-state memory to store persistent data. In one embodiment of the technology, solid-state memory may include, but is not limited to, 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). Those skilled in the art will appreciate that embodiments of the technology are not limited those types of 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 to which the data are to be written 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, each physical address (402) is associated with a program/erase (P/E) cycle value (404). The P/E cycle value may represent: (i) the number of P/E cycles that have been performed on the physical location defined by the physical address or (ii) a P/E cycle range (e.g., 5,000-9,999 P/E cycles), where the number of P/E cycles that have been performed on the physical location defined by the physical address is within the P/E cycle range. In one embodiment of the technology, a P/E cycle is the writing of data to one or more pages in an erase block (i.e., the smallest addressable unit for erase operations, typically, a set of multiple pages) and the erasure of that block, in either order.
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. The control module includes functionality to update, as appropriate, the P/E cycle values (402) when data is written to (and/or erased from) the solid-state storage modules.
In one embodiment of the technology, the in-memory data structure includes a mapping of <performance goal, page number, P/E cycle value> (414) to one or more verify threshold values (416). The “performance goal” parameter may be used to specify a goal for which the verify threshold values (416) are to be optimized. For example, a goal of maximizing the lifetime of a storage module may require thresholds different from a goal of enhancing read performance. Multiple performance goals may be defined for a storage appliance, and based on the selection of a particular performance goal, the appropriate verify thresholds may be selected. Performance goals may further change during the use of the storage appliance. For example, while the storage appliance is used in a performance-critical environment that requires a high read performance, the performance goals may be set to maximize read performance. Later, in a more conservative environment, the performance goal may be updated to prolong the lifetime of the storage modules in the storage appliance. A system administrator may thus specify a different performance goal at any time, or alternatively the performance goal may even be automatically adjusted based on the detection of certain performance requirements, such as a particular read throughput.
The determination of verify threshold values (416) depending on a particular goal are further described below. The aforementioned mapping may further include any other parameter(s) (i.e., one or more parameters in addition to page number and P/E cycle value) that affects the solid state memory (e.g., temperature, workload, etc.). In one embodiment of the technology, the P/E cycle value in <performance goal, page number, P/E cycle value> (414) may be expressed as a P/E cycle or a P/E cycle range.
In one embodiment of the technology, verify threshold value(s) (416) correspond to voltages or a shift value, where the shift value corresponds to a voltage shift of a default verify threshold value. Each of the verify threshold values may be expressed as a voltage or as a unitless number that corresponds to a voltage.
In one embodiment of the technology, the default verify threshold value is specified by the manufacturer of the solid-state memory modules. Further, the granularity of the shift values may be specified by the shift value, where the shift value corresponds to a voltage shift of a corresponding default verify threshold value.
In one embodiment of the technology, the verify threshold values (including the default verify threshold values) correspond to voltage values that are used in the process of programming data into memory cells of the solid-state storage modules. More specifically, in one embodiment of the technology, a logical value (e.g., 1 or 0 for memory cells that are SLCs or 00, 10, 11, 01 for memory cells that are MLCs) is programmed into a memory cell in response to a write request. During the programming process, a voltage may be applied to the memory cell, and subsequently the state of the memory cell may be assessed by comparing the voltage held by the memory cell against the corresponding verify threshold value. If the memory cell voltage reaches or exceeds the verify threshold value, the programming may be terminated. However, if the memory cell voltage is found to be below the verify threshold value, another (increased) programming voltage may be applied. The process of applying a programming voltage and comparing the memory cell voltage against the verify threshold value may be repeated until the memory cell voltage reaches or exceeds the verify threshold value.
In one another embodiment of the technology, the verify threshold values (including the default verify threshold values) correspond to voltage values that are used in the process of erasing data from memory cells of the solid-state storage modules. In this scenario the verify thresholds may be referred to as erase verify thresholds.
Those skilled in the art will appreciate that while
An example of how the verify thresholds may be implemented for programming memory cells are provided below with reference to
Those skilled in the art will recognize that a different number of verify thresholds may be used, depending on the type of solid state memory. For example, a single verify threshold may be sufficient to distinguish the two cell voltage levels of a single-level cells (SLCs), three voltage levels may be used to distinguish between the final programmed states in multi-level cells (MLCs), and seven cell voltage thresholds may be used in triple-level cells (TLCs). Further, those skilled in the art will appreciate that additional intermediate voltage thresholds may also be used depending on types of memory components. Further, while in
In one embodiment of the technology, each page in the solid-state memory module may include between 8 kB-16 kB of data. Accordingly, the storage module controller typically programs multiple memory cells in one write cycle. The specific number of memory cells that are programmed in a single write cycle may depend on, for example, the size of a page.
In one embodiment of the technology, the verify threshold value(s) (416) are ascertained by conducting characterizations to determine how the verify threshold values should be set when at least one of, for example, the P/E cycle value, and page number change. More specifically, the verify threshold value(s) (416) may be optimized in a goal-specific manner Various goals and the effect on the verify threshold value(s) are discussed in the uses cases, below.
In one embodiment of the technology, a verify threshold value(s) may be provided for each <performance goal, P/E cycle value, page number> combination. The specific verify threshold value(s) for a given <performance goal, P/E cycle value, page number> may correspond to the default verify threshold value(s) or a non-default verify threshold value(s) (i.e., a verify threshold value other than the default verify threshold value(s)).
In another embodiment of the technology, memory (210 in
Turning to flowcharts in
In Step 601, a client write request is received by the control module from a client, where the client write request includes a logical address and data to be written.
In Step 602, a physical address (which includes the page number) is determined from the logical address. As discussed above, the memory in the control module includes a mapping of logical addresses to physical addresses (see discussion of
In Step 604, the P/E cycle value for the physical address is determined. The P/E cycle value may be determined by performing a look-up in an in-memory data structure (located in the memory of the control module) using the physical address as the key. The result of Step 604 may be the actual P/E cycle value associated with the physical address (e.g., the P/E cycle value associated with the block in which the physical location corresponding to the physical address is located) or may be a P/E cycle value range (e.g., 5,000-9,999 P/E cycles), where the actual P/E cycle value associated with the physical address is within the P/E cycle value range.
In Step 606, zero or more verify threshold values are obtained from an in-memory data structure (see
Continuing with the discussion in
In one embodiment of the technology, if there are multiple verify threshold values associated with a given program request (e.g., see
In Step 620, the control module program request is received from the control module. In Step 622, a program command is generated by the storage module controller based on the data, the one or more verify threshold value(s) and the physical address in the control module program request. In one embodiment of the technology, any given program command generated in Step 622 may specify one or more verify threshold values. If the control module does not include any verify threshold values, then the default verify threshold values are used to generate the program command. If the control module program request includes verify threshold values that are in the form of shift values (described above), then generating the program command may include obtaining the default verify threshold values and modifying one or more verify threshold values using the shift value(s). The program command may be in any format that is supported by the solid-state memory modules.
In Step 624, the program command is issued to the solid-state memory module. After the issuance of the program command, a programming voltage may be applied to the memory cell to be programmed. The level of the programming voltage may be selected as further described in Step 626
In Step 626, a determination is made about whether the programmed voltage, obtained from the memory cell in a verification operation, after the application of the programming voltage, is at least equal to the corresponding verify threshold value. If a determination is made that the programmed voltage is at least equal to the corresponding verify threshold value, it may be concluded that the memory cell represents the programmed data, and the execution of the method may terminate. If the programmed voltage is below the verify threshold value, the method may return to Step 624 to repeat the programming. In one embodiment of the invention, the repetition of the programming of a memory cell is performed using a different programming voltage. For example, an initial programming voltage may be used during the first programming cycle. If it is then concluded that the programmed voltage is below the verify threshold value, the programming cycle may be repeated with an increased programming voltage. The repetition of Steps 624 and 626 may result in an incremental increase of the programming voltage until the desired programming result (i.e., a programmed voltage that is at least equal to the corresponding verify threshold value) is detected.
Those skilled in the art will appreciate that the technology is not limited to the specific embodiment described above with respect to
Further, those skilled in the art will appreciate that while
Turning to
In this example assume that the solid-state memory module (720, 722) includes MLCs and that the aforementioned look-up returns verify threshold values in the form of shift values for threshold B and threshold C (see
The storage module (714) subsequently receives and services the controller program request (712). More specifically, the storage module controller (712) generates and issues a program command (718) to the solid-state memory module that includes the physical location corresponding to the physical address. In this example, the program command is generated using the default verify threshold value A value, a non-default verify threshold B value, and/or a non-default verify threshold C value. The non-default verify threshold value B is determined using the default verify threshold value B and the shift value for verify threshold value B. Further, the non-default verify threshold value C is determined using the default threshold value C and the shift value for verify threshold value C. The storage module controller subsequently performs the programming of the targeted memory cell(s) as described in
The use case scenarios described below are intended to provide examples of the method for adapting solid state memory write parameters. Specifically, the following use cases are intended to illustrate how solid state write parameters may be adapted based on particular goals to be achieved. The use case scenarios are based on the exemplary system shown in
Example Use Case 1—Optimizing Solid State Memory Lifetime
Solid state memory may age with each programming operation being performed, for example, because the oxide layer that holds the charge of a memory cell deteriorates, thus allowing a stored voltage to gradually bleed out. Aging may occur at an accelerated pace when higher programming voltages are used. Referring to
Accordingly, in the described scenario, assume that the verify thresholds are set such that a tolerable amount of read errors will result from tighter spacing of the reduced programming voltages. The appropriate verify thresholds are determined during an initial characterization of the storage module based on actual read and write operations and/or simulations of the read and write operations. The identified verify thresholds are set such that read errors that are correctable using ECC mechanisms will result when reading data that was previously written using the identified verify thresholds. As the storage module is being used over time, the read error rate may be monitored to detect an increase in read errors (e.g., as the P/E cycle value increases). If such an increase in read errors is detected, the verify thresholds may be increased to slightly higher voltages to cause an increase of the programming voltages, thus, in turn, reducing the read error rate. Further, the verify thresholds may also be increased if a non-recoverable read error is detected (i.e., a read error that could not be corrected using ECC mechanisms and that instead required the use of RAID recovery, for example).
The dynamically adjusted verify thresholds may thus result in reduced aging of the solid state memory, at least initially, and may thus increase overall solid state memory lifetime without sacrificing reliability. To maximize the potential lifetime gain, the setting of the verify thresholds may specifically consider the efficacy of the available ECC mechanism and the availability of other recovery mechanisms such as RAID. In other words, if a particularly powerful ECC mechanism is available (e.g., an ECC algorithm that can detect and correct errors even when they occur at a relatively high error rate), the verify thresholds may be chosen lower, whereas they may be chosen higher if a less potent ECC mechanism is used.
Example Use Case 2—Optimizing Solid State Memory for Performance
The correction of read errors, e.g., using ECC mechanisms may cause a delay, thus reducing read performance. Accordingly, in applications where read-performance is critical, the verify thresholds may be optimized to reduce the occurrence of read errors, including correctable read errors. The verify thresholds may be spaced such that the voltage distributions are sufficiently separated, enabling a voltage value obtained from a memory cell to be unambiguously interpreted. However, the verify thresholds are set not to be unnecessarily far apart to avoid premature aging and eventually failure of the solid state memory. Analogous to the first use case scenario, the read error rate may be monitored to detect read errors once they start occurring (e.g., as the P/E cycle value increases). If read errors are detected, the verify thresholds may be increased to slightly higher voltages to result in an increase of the programming voltages, thus, in turn, reducing the likeliness of a read error. Solid state memory that is programmed accordingly may be operated without relying on time consuming ECC operations, thus increasing read performance, without unnecessarily shortening the lifetime of the solid state memory.
While in the above use cases the verify thresholds are adjust based on feedback (a detection of read errors), the verify thresholds may, in addition or alternatively, be adjusted in a predictive manner, based upon P/E cycle value and/or page number. For example, the verify threshold(s) may be incremented by a small amount after the occurrence of a certain number of P/E cycles. The voltage increment to be applied and/or the number of P/E cycles after which the increment is to be applied may be determined from prior characterizations of solid state memory, and/or modeling and simulations of the aging process occurring as a result of programming and erasing being performed.
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 invention should be limited only by the attached claims.
This application is a continuation application of U.S. patent application Ser. No. 15/581,285, filed on Apr. 28, 2017, and entitled: “METHOD AND SYSTEM FOR ADAPTING SOLID STATE MEMORY WRITE PARAMETERS TO SATISFY PERFORMANCE GOALS BASED ON DEGREE OF READ ERRORS”. Accordingly, this application claims benefit of U.S. patent application Ser. No. 15/581,285 under 35 U.S.C. § 120. U.S. patent application Ser. No. 15/581,285 is here by incorporated by reference in its entirety.
Number | Name | Date | Kind |
---|---|---|---|
6016275 | Han | Jan 2000 | A |
6862675 | Wakimoto | Mar 2005 | B1 |
7559004 | Chang et al. | 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 et al. | Aug 2014 | B2 |
8868842 | Yano et al. | Oct 2014 | B2 |
8891303 | Higgins | Nov 2014 | B1 |
8934284 | Patapoutian et al. | Jan 2015 | B2 |
8995197 | Steiner | Mar 2015 | B1 |
9026764 | Hashimoto | May 2015 | B2 |
9195586 | Cometti et al. | Nov 2015 | B2 |
9330767 | Steiner | May 2016 | B1 |
9368225 | Pinkovich et al. | Jun 2016 | B1 |
9496043 | Camp | Nov 2016 | B1 |
9564233 | Cho | Feb 2017 | B1 |
9606737 | Kankani et al. | Mar 2017 | B2 |
9645177 | Cohen et al. | May 2017 | B2 |
9690655 | Tabrizi | Jun 2017 | B2 |
9710180 | Van Gaasbeck | Jul 2017 | B1 |
9740425 | Bakshi et al. | Aug 2017 | B2 |
9798334 | Tabrizi | 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 et al. | Jun 2009 | A1 |
20100306577 | Dreifus et al. | Dec 2010 | A1 |
20100306580 | McKean et al. | Dec 2010 | A1 |
20100332923 | D'Abreu et al. | Dec 2010 | A1 |
20110051521 | Levy | Mar 2011 | A1 |
20110173484 | Schuette et al. | Jul 2011 | A1 |
20110202818 | Yoon et al. | Aug 2011 | A1 |
20120110239 | Goss | May 2012 | A1 |
20120192035 | Nakanishi | Jul 2012 | A1 |
20120203951 | Wood et al. | Aug 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 et al. | 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 | Jul 2014 | A1 |
20140229799 | Hubris et al. | Aug 2014 | A1 |
20140293699 | Yang | Oct 2014 | A1 |
20140347936 | Ghaly | Nov 2014 | A1 |
20140359202 | Sun et al. | Dec 2014 | A1 |
20140365836 | Jeon | 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 |
20160170682 | Bakshi et al. | Jun 2016 | A1 |
20160306591 | Ellis et al. | Oct 2016 | A1 |
20160342344 | Kankani et al. | Nov 2016 | A1 |
20160342345 | Kankani et al. | Nov 2016 | A1 |
20170090783 | Fukutomi et al. | Mar 2017 | A1 |
20170109040 | Raghu et al. | Apr 2017 | A1 |
20170117032 | Takizawa | Apr 2017 | A1 |
20170168713 | Kankani et al. | Jun 2017 | A1 |
20170228180 | Shen | Aug 2017 | A1 |
20170235486 | Martineau et al. | Aug 2017 | A1 |
20170262336 | Tabrizi | 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 |
2011-100519 | May 2011 | JP |
2012-203957 | Oct 2012 | JP |
2013-25821 | Feb 2013 | JP |
2013-176784 | Sep 2013 | JP |
Entry |
---|
Ankit Singh Rawat et al.; “Locality and Availability in Distributed Storage,” arXiv:1402.2011v1 [cs.IT]; Feb. 10, 2014. |
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. |
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. |
Borja Peleato et al.; “Towards Minimizing Read Time for NAND Flash”; Globecom 2012—Symposium on Selected Areas in Communication; pp. 3219-3224; 2012. |
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. |
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. |
Dimitris Papailiopoulos et al.; “Simple Regenerating Codes: Network Coding for Cloud Storage”; arXiv:1109.0264v1 [cs.IT]; Sep. 1, 2011. |
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. |
Eran Gal et al.; “Algorithms and Data Structures for Flash Memories”; ACM Computing Surveys (CSUR); vol. 37, No. 2; pp. 138-163; Jun. 2005. |
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. |
Frédérique Oggier et al.; “Self-repairing Homomorphic Codes for Distributed Storage Systems”; IEEE INFOCOM 2011; pp. 1215-1223; 2011. |
Haleh Tabrizi et al.; “A Learning-based Network Selection Method in Heterogeneous Wireless Systems”; IEEE Global Telecommunications Conference (GLOBECOM 2011); 2011. |
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. |
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. |
Junsheng Han et al.; “Reliable Memories with Subline Accesses”; International Symposium on Information Theory (ISIT); pp. 2531-2535, Jun. 2007. |
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. |
Neal Mielke et al.; “Recovery Effects in the Distributed Cycling of Flash Memories”; IEEE 44th Annual International Reliability Physics Symposium; pp. 29-35; 2006. |
Osama Khan et al.; “In Search of I/O-Optimal Recovery from Disk Failures”; HotStorage 2011; Jun. 2011. |
Parikshit Gopalan et al.; “On the Locality of Codeword Symbols”; arXiv:1106.3625v1[cs.IT]; Jun. 18, 2011. |
Ramesh Pyndiah et al.; “Near Optimum Decoding of Product Codes”; Global Telecommunications Conference (GLOBECOM '94), Communications: The Global Bridge pp. 339-343; 1994. |
Te-Hsuan Chen et al.; “An Adaptive-Rate Error Correction Scheme for NAND Flash Memory”; 27th IEEE VLSI Test Symposium; pp. 53-58; 2009. |
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. |
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. |
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. |
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. |
Notice of Grounds of Rejection issued in corresponding Japanese Application No. 2017-212749, dated Dec. 3, 2019. |
Number | Date | Country | |
---|---|---|---|
20190348125 A1 | Nov 2019 | US |
Number | Date | Country | |
---|---|---|---|
Parent | 15581285 | Apr 2017 | US |
Child | 16520263 | US |