This disclosure is generally related to error correction code (ECC) protection in memory devices. More specifically, this disclosure is related to a system and method for facilitating memory-mapped two-dimensional (2D) ECC protection in memory devices.
Server-level reliability, availability, and serviceability (RAS) is critical for cloud service providers with respect to a data center's total-cost-of ownership (TCO) and customer service-level agreement (SLA). Soft errors occurring in the server's DRAM are a major source of RAS problems. The soft errors can occur in a memory system when cosmic rays or particles with certain electrical charges hit a memory cell, causing the cell to change state to a different value. However, the physical structure of the memory cell is not damaged and perfectly working. To mitigate the negative effects caused by the soft errors, most modern server-class memories (e.g., dynamic random-access memories (DRAMs)) are protected by error correction codes (ECCs) with the capability of single-error correction and double-error detection (SECDED). However, SECDED becomes insufficient as the occurrences of multi-bit errors in future DRAM devices increase due to increased memory capacity and lowered operation voltage. The memory capacity of modern servers has reached beyond 256 GB per server node. On the other hand, the operating voltage of DRAM drops as the DDR (double data rate) generations evolve, resulting in more susceptibility to soft errors. For example, DDR3 has an operating voltage of 1.5-1.65 V. In comparison, the operating voltages of DDR4 and DDR5 are 1.2-1.4 V and ˜1.1 V, respectively. More advanced error-correction techniques are needed to ensure server reliability.
One embodiment described herein provides a system and method for facilitating error-correction protection in a storage device. During operation, in response to a write request, the system organizes a block of data to be written to the storage device in a two-dimensional (2D) array, forms a plurality of first-dimension sub-blocks by dividing the 2D array along a first dimension, and forms a plurality of second-dimension sub-blocks by dividing the 2D array along a second dimension. In response to determining that second-dimension error correction code (ECC) encoding is enabled, the system performs second-dimension ECC encoding on the second-dimension sub-blocks to generate a set of second-dimension ECC bits and performs first-dimension ECC encoding on the first-dimension sub-blocks and the second-dimension ECC bits to generate a set of first-dimension ECC bits. The system then writes the data block along with the second-dimension ECC bits and the first-dimension ECC bits to the storage device. The data block and the second-dimension ECC bits are mapped to separate physical addresses in the storage device.
In a variation on this embodiment, forming a respective second-dimension sub-block can include concatenating a portion of data from a first first-dimension sub-block with a corresponding portion of data from an adjacent first-dimension sub-block.
In a variation on this embodiment, the second-dimension ECC encoding is configured to provide a stronger error-correction protection than the first-dimension ECC encoding.
In a further variation, the block of data can be 64-bytes long, and a respective first-dimension sub-block and a respective second-dimension sub-block each can be 64-bits long. Performing the first-dimension ECC encoding can include computing eight ECC bits for each first-dimension sub-block, and performing the second-dimension ECC encoding can include computing 16 ECC bits for each second-dimension sub-block.
In a further variation, the first-dimension ECC encoding is configured to provide single-bit error correction and double-bit error detection (SECDED), and the second-dimension ECC encoding is configured to provide double-bit error correction and triple-bit error detection (DECTED).
In a variation on this embodiment, the system determines a physical address included in the write request, and determines whether the physical address is within a region of the storage device configured to be protected by the second-dimension ECC encoding by looking up an address-mapping table. In response to determining that the physical address is within a region of the storage device configured to be protected by the second-dimension ECC encoding, the system sets a second-dimension ECC encoding enable bit and calculates a second-dimension ECC address to which the second-dimension ECC bits are mapped.
In a further variation, in response to determining that the physical address is not within a region of the storage device configured to be protected by the second-dimension ECC encoding, the system clears the second-dimension ECC encoding enable bit.
In a variation on this embodiment, in response to a read request and determining that second-dimension ECC decoding is enabled, the system reads the data block along with the second-dimension ECC bits and the first-dimension ECC bits from the storage device. The system then performs first-dimension ECC decoding for the data block and the second-dimension ECC bits based on the first-dimension ECC bits.
In a further variation, in response to a read request and determining that the second-dimension ECC decoding is disabled, the system reads the data block along with the second-dimension ECC bits and the first-dimension ECC bits from the storage device and performs first-dimension ECC decoding for the data block only based on corresponding ECC bits included in the first-dimension ECC bits. The system then outputs the data block decoded using the first-dimension ECC decoding.
In a further variation, in response to determining that the first-dimension ECC decoding corrects all errors in the data block, the system outputs the data block decoded using the first-dimension ECC decoding. In response to determining that the first-dimension ECC decoding fails to correct all errors in the data block, the system performs second-dimension decoding for the data block based on the second-dimension ECC bits and outputs the data block decoded using the second-dimension ECC decoding.
One embodiment described herein provides a controller for facilitating error-correction protection in a storage device. The controller includes a data serializer configured to serialize a block of cache line data to a two-dimensional (2D) array. Each row in the 2D array forms a first-dimension sub-block. The controller includes a data-arranging unit configured to form a plurality of second-dimension sub-blocks by dividing the 2D array along a second dimension; a second-dimension error correction code (ECC) encoder configured to, in response to being enabled, perform second-dimension ECC encoding on the second-dimension sub-blocks to generate a set of second-dimension ECC bits; a first-dimension ECC encoder configured to perform first-dimension ECC encoding on first-dimension sub-blocks of the cache line data block and the second-dimension ECC bits to generate a set of first-dimension ECC bits; and a data-sending unit configured to send the data block along with the second-dimension ECC bits and the first-dimension ECC bits to the storage device. The data block and the second-dimension ECC bits are mapped to separate physical addresses in the storage device.
In the figures, like reference numerals refer to the same figure elements.
The following description is presented to enable any person skilled in the art to make and use the embodiments, and is provided in the context of a particular application and its requirements. Various modifications to the disclosed embodiments will be readily apparent to those skilled in the art, and the general principles defined herein may be applied to other embodiments and applications without departing from the spirit and scope of the present disclosure. Thus, the present invention is not limited to the embodiments shown, but is to be accorded the widest scope consistent with the principles and features disclosed herein.
Overview
In this disclosure, a method and system are presented for facilitating memory-mapped two-dimensional (2D) error-correction code (ECC) protection in memory devices. When a memory controller receives a block of cache line data to be stored in the memory, it can serialize the data into a 2D array and divide the data block into sub-blocks using two different ways, such as a horizontal division (which results in horizontal sub-blocks) and a vertical division (which results in vertical sub-blocks). The memory controller can then apply a first type of ECC protection on the horizontal sub blocks and a second type of ECC protection on the vertical sub-blocks, with the ECC protection on the vertical sub-blocks being stronger than that on the horizontal sub-blocks. After encoding, the resulting vertical ECC bits can be mapped to physical addresses in the memory like regular data. When the data are retrieved from the memory, the memory controller first applies the horizontal ECC decoding. If soft errors included in the data can be corrected by the horizontal ECC decoding, there is no need to apply the vertical ECC decoding. However, if the number of soft errors included in the data is beyond the error-correction capability of the horizontal ECC, the system needs to apply the vertical ECC decoding on the vertical sub-blocks. Because vertical ECC decoding is only invoked when needed, the system does not incur excessive amounts of latency.
Memory-Mapped 2D ECC
A number of advanced error-correction techniques have been implemented in memory devices to improve server availability. Many existing methods resort to data remapping or duplication. For example, a data-remapping technology scatters bits of an ECC word across multiple memory chips, such that the failure of any single memory chip will affect only one ECC bit per word. However, when the errors are more uniformly distributed across memory chips, such remapping technology becomes less effective. A memory-mirroring technology relies on memory duplication, where a range up to half of the memory is duplicated in the DRAM available in the system and, when the soft errors are beyond ECC capability, a mirrored copy of the data is used. However, this is a very expensive RAS feature, because it costs up to half of the memory capacity.
There are also other forms of ECC. Notably, morphable ECC (MECC) is a recently proposed ECC technique, which combines SECDED and ECC-6 to provide multi-bit error correction at the cache line granularity. However, this form of ECC has limited error-correction capability due to the constraint of the available number of ECC bits. When implementing MECC, the system stores the ECC bits for the 64-byte block in a 64-bit field traditionally used for 8-byte blocks. The system also uses the leftmost four bits in the ECC field as the ECC-mode bits to identify which level of ECC (e.g., ECC-6) the current 64-byte block of data is using. However, MECC is geared toward reducing the number of DRAM refreshing operations in order to reduce DRAM power consumption in mobile systems, and has some fundamental problems when it comes to improving the DRAM reliability in data centers. First, it incurs a noticeable increase in memory access latency. Unlike the traditional 8-byte ECC protection scheme, where the ECC checking can be overlapped with the following transfer of 8-byte data, MECC performs ECC checking at the end of the 64-byte data transfer (with 64 bytes being the cache line size); therefore, none of the ECC checking latency can be partially hidden in the transfer of a cache line. Second, MECC is a hardware solution and is transparent to the software, thus making it incompatible with data center applications. A data center needs to be aware of the soft-error rate of its memory system in order to take proactive actions, such as disabling the failing DRAM or migrating the applications away from a failing node, to prevent service disruption. Moreover, MECC only supports up to 6-bit error correction at the cache line level due to the 64-bit constraint in the ECC field. Its error-correction density is less than that of conventional SECDED, which is 1 error correction per 64 bits. This means MECC could not scale the error-correction capability
Additional novel ECC techniques also include memory-mapped ECC, which can reduce the storage cost of ECC bits on the last-level caches (LLC). It essentially breaks the ECC into two tiers, with the first tier (T1EC) for low-cost fast error detection and the second tier (T2EC) for strong error correction. Since T2EC requires a relatively large storage capacity, it is stored in the DRAM instead of the cache, and it is only retrieved when T1EC detects errors. However, the memory mapping of T2EC is specifically designed for LLC, which uses sets and ways to derive the mapping address, and cannot be directly applied to DRAMs.
Similarly, two-dimensional (2D) ECC has been designed to reduce the cache area cost of multi-bit error correction by introducing vertical coding in addition to the SECDED horizontal coding. It works on an n×n data block, and the vertical coding is applied on every n-bit data block at each column. The vertical coding is typically stronger than the horizontal coding and, therefore, is only used when the soft-error rate goes beyond the capability of horizontal ECC. This approach is purely based on hardware and works only for caches.
To provide stronger ECC protection in the memory system of a data center, in some embodiments, a 64-byte data block can be encoded in both the horizontal and vertical directions. The vertical encoding uses a stronger ECC (e.g., having a longer ECC-bit string) that can correct double-bit errors and detect triple-bit errors, in addition to the conventional horizontal ECC, which is weaker and has a shorter ECC-bit string. The vertical ECC bits can be mapped to the physical memory address space just like regular data. When data in the memory is read, the system determines whether the horizontal ECC alone is sufficient to correct all errors in the data block. If so, only the horizontal ECC bits will be processed for error correction and no additional latency will be incurred. If not, the vertical ECC bits will also be processed to provide stronger error correction.
In some embodiments, the ECC bits of the vertical sub-blocks (which can be referred to as the vertical ECC bits in this disclosure) can be treated as the same regular data; that is, these vertical ECC bits will be stored and mapped to physical addresses in the memory just like regular data. This also means that these vertical ECC bits require protection just like regular data. In the example shown in
In addition to concatenating or interleaving the eight rows of 8-bit data to form the 64-bit vertical sub-block as shown in
Encoder 200 can include a data buffer 204 that buffers the copy of the serialized data chunks. The other copy of the serialized data chunks can be sent to a data rearranger 206 that rearranges the serialized data chunks into vertical sub-blocks. More specifically, for each serialized data chunk (which can include 64 bits), data rearranger 206 can first buffer the 64-bit data chunk and then split the 64 bits into eight 8-bit chunks. After all eight serialized data chunks have been processed, data rearranger 206 can vertically align corresponding 8-bit chunks from the eight serialized data chunks (one 8-bit chunk per serialized data chunk) and concatenates these 8-bit chunks to form a vertical sub-block in a way similar to what is shown in
Encoder 200 can include a vertical encoder 208 that can encode the vertical sub-blocks. In some embodiments, vertical encoder 208 can encode the vertical sub-blocks using a relatively stronger ECC, such as using 16 ECC bits to protect a 64-bit vertical sub-block. This stronger ECC can have the capability to correct double-bit errors (e.g., double-bit error correction and triple-bit error detection (DECTED)). An enabling signal provided by an address controller, which will be discussed in more detail later, can enable operations of vertical encoder 208. The encoding outcome, i.e., the vertical ECC bits, can be buffered into a data buffer 210. In some embodiments, vertical encoder 208 can generate 128 vertical ECC bits for the eight vertical sub-blocks, and data buffer 210 can be a two-entry buffer, with each entry storing 64 vertical ECC bits. More particularly, each buffer entry corresponds to a row of vertical ECC bits, such as row 110 shown in
The aligned blocks, including the original serialized eight 64-bit data chunks and the vertical ECC bits (two rows of 64-bit data), can then be sent, sequentially, to horizontal encoder 216, with each 64-bit data chunk or row being a horizontal sub-block shown in
Decoder 300 includes a vertical decoder 308 that can perform ECC decoding for the rearranged vertical sub-blocks. Note that the vertical ECC bits needed for vertical decoding are provided by horizontal decoder 304, because those vertical ECC bits are also protected by the horizontal ECC, as shown in
As one can see from the decoder design shown in
The ECC encoder and decoder can be located within the memory controller, which manages the flow of data going to and from the memory. Moreover, the memory controller can be responsible for enabling and disabling the vertical encoder/decoder. For example, the memory controller can maintain an ECC mapping table that includes a number of entries corresponding to a number of regions that are supported by the 2D ECC scheme. When data is written to or read from the memory, the memory controller can determine whether to enable the vertical encoder/decoder based on the physical memory address included in the memory access request and entries in the ECC mapping table. When writing data to the memory, if the vertical encoder is enabled, the memory controller can allocate physical memory spaces to hold the vertical ECC bits and record the address mapping. When reading data from the memory, if the vertical decoder is enabled, the memory controller retrieves the vertical ECC bits from the corresponding memory location to facilitate vertical decoding when such decoding is needed.
Address controller 402 can maintain an ECC mapping table 410 that maps memory regions protected by the vertical ECC to the physical memory address of the vertical ECC bits. Mapping table 410 can include a plurality of entries, with each entry corresponding to a mapped region that the system is designed to protect. More specifically, each entry in mapping table 410 can include three fields, a start_address field, an end_address field, and a base_address field. The start_address and end_address fields include the start and end addresses, respectively, of a memory region that is designed to be protected by the stronger vertical ECC. The base_address field can include the current physical base address of the memory-mapped vertical ECC. Note that, depending on the size of the vertical ECC protected region, the least significant n bits of the base address can be zero, and the vertical ECC address can be calculated as follows: Vertical_ECC_Address=Base_Address+Requested_Address & (2″−1). In some embodiments, the base address field can define a physical address that separates the memory region between the start_address and the end_address into two sub-regions, with one sub-region already protected using vertical ECC and the other sub-region ready to be protected.
The number of vertical ECC entries in mapping table 410 can be implementation-specific. More entries allow more separate memory regions to be protected by the vertical ECC, thus improving reliability. However, protecting a large number of separate memory regions using vertical ECCs can lead to more address comparison operations for each DRAM access, which can increase the latency and/or the complexity of the memory controller. In some embodiments, entries in ECC mapping table 410 can be exposed to the operating system as Machine Specific Registers (MSR), and can be accessed using rdmsr/wrmsr instructions by the operating system. The operating system can manage ECC mapping table 410 by allocating the address ranges for vertical ECC protection based on the criticality or error statistic associated with each address range. In other words, mission-critical memory regions or memory regions prone to soft errors can be protected by the vertical ECC.
Subsequent to enabling the vertical encoder or decoder, the address controller calculates the vertical ECC address, which corresponds to the memory location storing the vertical ECC bits (operation 514). The address controller can then insert the vertical ECC address after the address included in the read/write request (operation 516). The address controller can then output the address, which can include the vertical ECC address when applicable (operation 518). These addresses will be sent to the memory to facilitate the memory read/write operation.
Returning to
On the other hand, data read from the memory can be sent to 2D ECC decoder 406 via the interface between the memory and memory controller 400. The enabling signal or bit for the vertical ECC decoder can be queued in a 1-bit buffer 418. 2D ECC decoder 406 can be similar to ECC decoder 300 shown in
Memory controller 400 can also include a statistics module 420 that gathers statistics information regarding soft errors in the memory from 2D ECC decoder 406. Such information can be used by the CPU to determine which memory regions are more prone to soft errors and may need the additional protection from the vertical ECC.
If the vertical ECC is enabled, the ECC encoder rearranges the serialized data by vertically stacking and aligning the horizontal sub-blocks and then concatenating portions from the different horizontal sub-blocks to generate a number of vertical sub-blocks, as shown in
Apparatus 800 can include a request-receiving unit 802 for receiving, from the CPU of a host computer, a read or write request. Apparatus 800 can include a vertical-ECC-enabling unit 804 for generating enable/disable signals that can enable/disable the vertical ECC encoder and decoder, respectively. In some embodiments, vertical-ECC-enabling unit 804 generates the enable/disable signals based on the memory address included in the received read or write request. Apparatus 800 can include a vertical-ECC-address-calculation unit 806 for calculating the memory address to store the vertical ECC bits.
Apparatus 800 can include a data-serializing unit 808 for serializing data received from the cache and a data-deserializing unit 810 for deserializing decoded data before sending them to the cache. Apparatus 800 can include a data-arranging unit 812 for vertically stacking and aligning the horizontal sub-blocks and then concatenating portions from the different horizontal sub-blocks.
Apparatus 800 can include a horizontal-encoding unit 814 for encoding the horizontal sub-blocks and a vertical-encoding unit 816 for encoding, when enabled, the vertical sub-blocks. Vertical-encoding unit 816 can use a stronger ECC encoding scheme than horizontal-encoding unit 814. For example, each 64-bit horizontal sub-block can be protected using eight ECC bits, and each 64-bit vertical sub-block can be protected using 16 or even 32 ECC bits. Stronger vertical ECC can provider higher reliability but will require more memory space to store the additional ECC bits. The vertical ECC bits can also be protected by the horizontal ECC.
Apparatus 800 can include an encoder-data-multiplexing unit 818 for combining, sequentially, the horizontal sub-blocks with vertical ECC bits. Apparatus 800 can include an encoded-data-sending unit 820 for sending the encoded data to the memory.
Apparatus 800 can include a horizontal-decoding unit 822 for decoding the horizontal sub-blocks and a vertical-decoding unit 824 for decoding, when enabled, the vertical sub-blocks. When the error-correction capability provided by horizontal-decoding unit 822 is sufficient in correcting all soft errors in the data, vertical-decoding unit 824 can be skipped. Apparatus 800 can include a decoder-data-selecting unit 826 for selecting output from horizontal-decoding unit 822 or vertical-decoding unit 824 to send to data-deserializing unit 810. Apparatus 800 can include a decoded-data-sending unit 828 for sending the decoded and deserialized data to the cache.
In addition, apparatus 800 can include a vertical-ECC-address-mapping table 830 that include entries indicating memory regions protected by the vertical ECC. Entries in ECC-address-mapping table 830 can also be used to calculate the vertical ECC address.
ECC system 920 can include instructions, which when executed by computer system 900 can cause computer system 900 to perform methods and/or processes described in this disclosure. ECC system 920 can include instructions for enabling/disabling vertical ECC (enabling module 922), instructions for calculating the vertical ECC address (address-calculating module 924), instructions for serializing/deserializing data (data-serializing/deserializing module 926), instructions for arranging data into vertical sub-blocks (data-arranging module 928), instructions for performing horizontal ECC encoding (horizontal-ECC-encoding module 930), instructions for performing vertical ECC encoding (vertical-ECC-encoding module 932), instructions for combining horizontal sub-blocks with vertical ECC bits (multiplexing module 934), instructions for performing horizontal ECC decoding (horizontal-ECC-decoding module 936), instructions for performing vertical ECC decoding (vertical-ECC-decoding module 938), and instructions for selecting decoder output to be sent to the cache (decoder-output-selecting module 940). Data 950 can include an ECC-address mapping table 952.
In general, the system provides an efficient and dynamic error-protection mechanism by implementing memory-mapped 2D ECC. Compared to traditional memory-mapped ECC that can only map ECC bits in cache to memory, the disclosed embodiments can improve memory reliability by directly mapping vertical memory ECC bits to a programmable memory region. Similarly, compared to the existing hardware-based 2D ECC only applicable to cache, the disclosed embodiments can be applied in memory and allows the operating system on the host CPU to control the mapping of ECC to a given range of the memory. Consequently, the operating system can take proactive actions such as disabling and mapping out a problematic memory node or migrating the applications to a different memory node. Moreover, by allowing the operating system to determine which memory regions to provide extra protection, the disclosed embodiments can provide much fine-grained tradeoff between the memory capacity and the error-correction capability. Unlike a full-memory mirroring scheme that costs 50% of the memory capacity for error correction even when there are only few soft errors, an exemplary embodiment can provide 16-bit error correction for 64-byte data blocks in the memory regions at a cost of less than 20% of the memory capacity. It can provide a much more graceful degraded execution when a particular memory node becomes soft-error prone by gradually increasing memory regions in need of extra protection.
In the examples shown in
The methods and processes described in the detailed description section can be embodied as code and/or data, which can be stored in a computer-readable storage medium as described above. When a computer system reads and executes the code and/or data stored on the computer-readable storage medium, the computer system performs the methods and processes embodied as data structures and code and stored within the computer-readable storage medium.
Furthermore, the methods and processes described above can be included in hardware modules or apparatus. The hardware modules or apparatus can include, but are not limited to, application-specific integrated circuit (ASIC) chips, field-programmable gate arrays (FPGAs), dedicated or shared processors that execute a particular software module or a piece of code at a particular time, and other programmable-logic devices now known or later developed. When the hardware modules or apparatus are activated, they perform the methods and processes included within them.
The foregoing descriptions of embodiments have been presented for purposes of illustration and description only. They are not intended to be exhaustive or to limit the scope of this disclosure to the forms disclosed. Accordingly, many modifications and variations will be apparent to practitioners skilled in the art.
Number | Name | Date | Kind |
---|---|---|---|
3893071 | Bossen | Jul 1975 | A |
4562494 | Bond | Dec 1985 | A |
4718067 | Peters | Jan 1988 | A |
4775932 | Oxley | Oct 1988 | A |
4858040 | Hazebrouck | Aug 1989 | A |
5394382 | Hu | Feb 1995 | A |
5602693 | Brunnett | Feb 1997 | A |
5732093 | Huang | Mar 1998 | A |
5802551 | Komatsu | Sep 1998 | A |
5930167 | Lee | Jul 1999 | A |
6098185 | Wilson | Aug 2000 | A |
6148377 | Carter | Nov 2000 | A |
6226650 | Mahajan et al. | May 2001 | B1 |
6243795 | Yang | Jun 2001 | B1 |
6457104 | Tremaine | Sep 2002 | B1 |
6581178 | Kondo | Jun 2003 | B1 |
6658478 | Singhal | Dec 2003 | B1 |
6795894 | Neufeld | Sep 2004 | B1 |
7351072 | Muff | Apr 2008 | B2 |
7539926 | Lesea | May 2009 | B1 |
7565454 | Zuberi | Jul 2009 | B2 |
7599139 | Bombet | Oct 2009 | B1 |
7953899 | Hooper | May 2011 | B1 |
7958433 | Yoon | Jun 2011 | B1 |
8085569 | Kim | Dec 2011 | B2 |
8117519 | Ito | Feb 2012 | B2 |
8122317 | Clark | Feb 2012 | B1 |
8144512 | Huang | Mar 2012 | B2 |
8166233 | Schibilla | Apr 2012 | B2 |
8260924 | Koretz | Sep 2012 | B2 |
8281061 | Radke | Oct 2012 | B2 |
8452819 | Sorenson, III | May 2013 | B1 |
8516284 | Chan | Aug 2013 | B2 |
8527544 | Colgrove | Sep 2013 | B1 |
8751763 | Ramarao | Jun 2014 | B1 |
8825937 | Atkisson | Sep 2014 | B2 |
8868825 | Hayes | Oct 2014 | B1 |
8904061 | O'Brien, III | Dec 2014 | B1 |
8924776 | Mollov | Dec 2014 | B1 |
8949208 | Xu | Feb 2015 | B1 |
9015561 | Hu | Apr 2015 | B1 |
9043545 | Kimmel | May 2015 | B2 |
9088300 | Chen | Jul 2015 | B1 |
9092223 | Pani | Jul 2015 | B1 |
9129628 | Fallone | Sep 2015 | B1 |
9141176 | Chen | Sep 2015 | B1 |
9208817 | Li | Dec 2015 | B1 |
9280472 | Dang | Mar 2016 | B1 |
9280487 | Candelaria | Mar 2016 | B2 |
9311939 | Malina | Apr 2016 | B1 |
9336340 | Dong | May 2016 | B1 |
9436595 | Benitez | Sep 2016 | B1 |
9529601 | Dharmadhikari | Dec 2016 | B1 |
9588698 | Karamcheti | Mar 2017 | B1 |
9588977 | Wang | Mar 2017 | B1 |
9607631 | Rausch | Mar 2017 | B2 |
9747202 | Shaharabany | Aug 2017 | B1 |
9852076 | Garg | Dec 2017 | B1 |
9875053 | Frid | Jan 2018 | B2 |
9946596 | Hashimoto | Apr 2018 | B2 |
10013169 | Fisher | Jul 2018 | B2 |
10199066 | Feldman | Feb 2019 | B1 |
10229735 | Natarajan | Mar 2019 | B1 |
10235198 | Qiu | Mar 2019 | B2 |
10318467 | Barzik | Jun 2019 | B2 |
10361722 | Lee | Jul 2019 | B2 |
10437670 | Koltsidas | Oct 2019 | B1 |
10642522 | Li | May 2020 | B2 |
10649657 | Zaidman | May 2020 | B2 |
20010032324 | Slaughter | Oct 2001 | A1 |
20010050622 | Hewitt | Dec 2001 | A1 |
20020010783 | Primak | Jan 2002 | A1 |
20020039260 | Kilmer | Apr 2002 | A1 |
20020073358 | Atkinson | Jun 2002 | A1 |
20020095403 | Chandrasekaran | Jul 2002 | A1 |
20020161890 | Chen | Oct 2002 | A1 |
20030074319 | Jaquette | Apr 2003 | A1 |
20030145274 | Hwang | Jul 2003 | A1 |
20030163594 | Aasheim | Aug 2003 | A1 |
20030163633 | Aasheim | Aug 2003 | A1 |
20030217080 | White | Nov 2003 | A1 |
20040010545 | Pandya | Jan 2004 | A1 |
20040066741 | Dinker | Apr 2004 | A1 |
20040103238 | Avraham | May 2004 | A1 |
20040143718 | Chen | Jul 2004 | A1 |
20040255171 | Zimmer | Dec 2004 | A1 |
20040268278 | Hoberman | Dec 2004 | A1 |
20050038954 | Saliba | Feb 2005 | A1 |
20050097126 | Cabrera | May 2005 | A1 |
20050149827 | Lambert | Jul 2005 | A1 |
20050174670 | Dunn | Aug 2005 | A1 |
20050177672 | Rao | Aug 2005 | A1 |
20050177755 | Fung | Aug 2005 | A1 |
20050195635 | Conley | Sep 2005 | A1 |
20050235067 | Creta | Oct 2005 | A1 |
20050235171 | Igari | Oct 2005 | A1 |
20060031709 | Hiraiwa | Feb 2006 | A1 |
20060156012 | Beeson | Jul 2006 | A1 |
20060256615 | Larson | Nov 2006 | A1 |
20070033323 | Gorobets | Feb 2007 | A1 |
20070061502 | Lasser | Mar 2007 | A1 |
20070101096 | Gorobets | May 2007 | A1 |
20070283081 | Lasser | Dec 2007 | A1 |
20070285980 | Shimizu | Dec 2007 | A1 |
20080034154 | Lee | Feb 2008 | A1 |
20080065805 | Wu | Mar 2008 | A1 |
20080082731 | Karamcheti | Apr 2008 | A1 |
20080112238 | Kim | May 2008 | A1 |
20080301532 | Uchikawa | Dec 2008 | A1 |
20090006667 | Lin | Jan 2009 | A1 |
20090089544 | Liu | Apr 2009 | A1 |
20090113219 | Aharonov | Apr 2009 | A1 |
20090183052 | Kanno | Jul 2009 | A1 |
20090282275 | Yermalayeu | Nov 2009 | A1 |
20090287956 | Flynn | Nov 2009 | A1 |
20090307249 | Koifman | Dec 2009 | A1 |
20090310412 | Jang | Dec 2009 | A1 |
20100031000 | Flynn | Feb 2010 | A1 |
20100169470 | Takashige | Jul 2010 | A1 |
20100217952 | Iyer | Aug 2010 | A1 |
20100229224 | Etchegoyen | Sep 2010 | A1 |
20100241848 | Smith | Sep 2010 | A1 |
20100241926 | Wang | Sep 2010 | A1 |
20100321999 | Yoo | Dec 2010 | A1 |
20100325367 | Kornegay | Dec 2010 | A1 |
20100332922 | Chang | Dec 2010 | A1 |
20110031546 | Uenaka | Feb 2011 | A1 |
20110055458 | Kuehne | Mar 2011 | A1 |
20110055471 | Thatcher | Mar 2011 | A1 |
20110072204 | Chang | Mar 2011 | A1 |
20110099418 | Chen | Apr 2011 | A1 |
20110153903 | Hinkle | Jun 2011 | A1 |
20110161784 | Selinger | Jun 2011 | A1 |
20110191525 | Hsu | Aug 2011 | A1 |
20110218969 | Anglin | Sep 2011 | A1 |
20110231598 | Hatsuda | Sep 2011 | A1 |
20110239083 | Kanno | Sep 2011 | A1 |
20110252188 | Weingarten | Oct 2011 | A1 |
20110258514 | Lasser | Oct 2011 | A1 |
20110292538 | Haga | Dec 2011 | A1 |
20110299317 | Shaeffer | Dec 2011 | A1 |
20110302353 | Confalonieri | Dec 2011 | A1 |
20120039117 | Webb | Feb 2012 | A1 |
20120084523 | Littlefield | Apr 2012 | A1 |
20120089774 | Kelkar | Apr 2012 | A1 |
20120096330 | Przybylski | Apr 2012 | A1 |
20120117399 | Chan | May 2012 | A1 |
20120147021 | Cheng | Jun 2012 | A1 |
20120159099 | Lindamood | Jun 2012 | A1 |
20120159289 | Piccirillo | Jun 2012 | A1 |
20120173792 | Lassa | Jul 2012 | A1 |
20120203958 | Jones | Aug 2012 | A1 |
20120204077 | D'Abreu | Aug 2012 | A1 |
20120210095 | Nellans | Aug 2012 | A1 |
20120233523 | Krishnamoorthy | Sep 2012 | A1 |
20120246392 | Cheon | Sep 2012 | A1 |
20120278579 | Goss | Nov 2012 | A1 |
20120284587 | Yu | Nov 2012 | A1 |
20120331207 | Lassa | Dec 2012 | A1 |
20130013880 | Tashiro | Jan 2013 | A1 |
20130024605 | Sharon | Jan 2013 | A1 |
20130054822 | Mordani | Feb 2013 | A1 |
20130061029 | Huff | Mar 2013 | A1 |
20130073798 | Kang | Mar 2013 | A1 |
20130080391 | Raichstein | Mar 2013 | A1 |
20130145085 | Yu | Jun 2013 | A1 |
20130145089 | Eleftheriou | Jun 2013 | A1 |
20130151759 | Shim | Jun 2013 | A1 |
20130159251 | Skrenta | Jun 2013 | A1 |
20130159723 | Brandt | Jun 2013 | A1 |
20130166820 | Batwara | Jun 2013 | A1 |
20130173845 | Aslam | Jul 2013 | A1 |
20130191601 | Peterson | Jul 2013 | A1 |
20130219131 | Alexandron | Aug 2013 | A1 |
20130238955 | D Abreu | Sep 2013 | A1 |
20130254622 | Kanno | Sep 2013 | A1 |
20130318283 | Small | Nov 2013 | A1 |
20130318395 | Kalavade | Nov 2013 | A1 |
20130326306 | Cideciyan | Dec 2013 | A1 |
20130329492 | Yang | Dec 2013 | A1 |
20140006688 | Yu | Jan 2014 | A1 |
20140019650 | Li | Jan 2014 | A1 |
20140025638 | Hu | Jan 2014 | A1 |
20140082273 | Segev | Mar 2014 | A1 |
20140095827 | Wei | Apr 2014 | A1 |
20140108414 | Stillerman | Apr 2014 | A1 |
20140181532 | Camp | Jun 2014 | A1 |
20140195564 | Talagala | Jul 2014 | A1 |
20140233950 | Luo | Aug 2014 | A1 |
20140250259 | Ke | Sep 2014 | A1 |
20140279927 | Constantinescu | Sep 2014 | A1 |
20140304452 | De La Iglesia | Oct 2014 | A1 |
20140310574 | Yu | Oct 2014 | A1 |
20140359229 | Cota-Robles | Dec 2014 | A1 |
20140365707 | Talagala | Dec 2014 | A1 |
20150019798 | Huang | Jan 2015 | A1 |
20150082317 | You | Mar 2015 | A1 |
20150106556 | Yu | Apr 2015 | A1 |
20150106559 | Cho | Apr 2015 | A1 |
20150121031 | Feng | Apr 2015 | A1 |
20150142752 | Chennamsetty | May 2015 | A1 |
20150169397 | Blaum | Jun 2015 | A1 |
20150199234 | Choi | Jul 2015 | A1 |
20150227316 | Warfield | Aug 2015 | A1 |
20150234845 | Moore | Aug 2015 | A1 |
20150269964 | Fallone | Sep 2015 | A1 |
20150277937 | Swanson | Oct 2015 | A1 |
20150294684 | Qjang | Oct 2015 | A1 |
20150301964 | Brinicombe | Oct 2015 | A1 |
20150304108 | Obukhov | Oct 2015 | A1 |
20150347025 | Law | Dec 2015 | A1 |
20150363271 | Haustein | Dec 2015 | A1 |
20150363328 | Candelaria | Dec 2015 | A1 |
20150372597 | Luo | Dec 2015 | A1 |
20160014039 | Reddy | Jan 2016 | A1 |
20160026575 | Samanta | Jan 2016 | A1 |
20160041760 | Kuang | Feb 2016 | A1 |
20160048341 | Constantinescu | Feb 2016 | A1 |
20160077749 | Ravimohan | Mar 2016 | A1 |
20160077968 | Sela | Mar 2016 | A1 |
20160098344 | Gorobets | Apr 2016 | A1 |
20160098350 | Tang | Apr 2016 | A1 |
20160103631 | Ke | Apr 2016 | A1 |
20160110254 | Cronie | Apr 2016 | A1 |
20160154601 | Chen | Jun 2016 | A1 |
20160155750 | Yasuda | Jun 2016 | A1 |
20160162187 | Lee | Jun 2016 | A1 |
20160179399 | Melik-Martirosian | Jun 2016 | A1 |
20160188223 | Camp | Jun 2016 | A1 |
20160188890 | Naeimi | Jun 2016 | A1 |
20160196179 | Zhao | Jul 2016 | A1 |
20160203000 | Parmar | Jul 2016 | A1 |
20160232103 | Schmisseur | Aug 2016 | A1 |
20160234297 | Ambach | Aug 2016 | A1 |
20160239074 | Lee | Aug 2016 | A1 |
20160239380 | Wideman | Aug 2016 | A1 |
20160274636 | Kim | Sep 2016 | A1 |
20160306853 | Sabaa | Oct 2016 | A1 |
20160321002 | Jung | Nov 2016 | A1 |
20160342345 | Kankani | Nov 2016 | A1 |
20160343429 | Nieuwejaar | Nov 2016 | A1 |
20160350002 | Vergis | Dec 2016 | A1 |
20160350385 | Poder | Dec 2016 | A1 |
20160364146 | Kuttner | Dec 2016 | A1 |
20170010652 | Huang | Jan 2017 | A1 |
20170075583 | Alexander | Mar 2017 | A1 |
20170075594 | Badam | Mar 2017 | A1 |
20170091110 | Ash | Mar 2017 | A1 |
20170109199 | Chen | Apr 2017 | A1 |
20170109232 | Cha | Apr 2017 | A1 |
20170147499 | Mohan | May 2017 | A1 |
20170161202 | Erez | Jun 2017 | A1 |
20170162235 | De | Jun 2017 | A1 |
20170168986 | Sajeepa | Jun 2017 | A1 |
20170177217 | Kanno | Jun 2017 | A1 |
20170177259 | Motwani | Jun 2017 | A1 |
20170199823 | Hayes | Jul 2017 | A1 |
20170212708 | Suhas | Jul 2017 | A1 |
20170220254 | Warfield | Aug 2017 | A1 |
20170221519 | Matsuo | Aug 2017 | A1 |
20170228157 | Yang | Aug 2017 | A1 |
20170242722 | Qiu | Aug 2017 | A1 |
20170249162 | Tsirkin | Aug 2017 | A1 |
20170255511 | Lin | Sep 2017 | A1 |
20170262176 | Kanno | Sep 2017 | A1 |
20170262178 | Hashimoto | Sep 2017 | A1 |
20170262217 | Pradhan | Sep 2017 | A1 |
20170269998 | Sunwoo | Sep 2017 | A1 |
20170285976 | Durham | Oct 2017 | A1 |
20170286311 | Juenemann | Oct 2017 | A1 |
20170322888 | Booth | Nov 2017 | A1 |
20170344470 | Yang | Nov 2017 | A1 |
20170344491 | Pandurangan | Nov 2017 | A1 |
20170353576 | Guim Bernat | Dec 2017 | A1 |
20180024772 | Madraswala | Jan 2018 | A1 |
20180024779 | Kojima | Jan 2018 | A1 |
20180033491 | Marelli | Feb 2018 | A1 |
20180052797 | Barzik | Feb 2018 | A1 |
20180067847 | Oh | Mar 2018 | A1 |
20180074730 | Inoue | Mar 2018 | A1 |
20180076828 | Kanno | Mar 2018 | A1 |
20180088867 | Kaminaga | Mar 2018 | A1 |
20180107591 | Smith | Apr 2018 | A1 |
20180143780 | Cho | May 2018 | A1 |
20180150640 | Li | May 2018 | A1 |
20180165038 | Authement | Jun 2018 | A1 |
20180167268 | Liguori | Jun 2018 | A1 |
20180173620 | Cen | Jun 2018 | A1 |
20180188970 | Liu | Jul 2018 | A1 |
20180189182 | Wang | Jul 2018 | A1 |
20180212951 | Goodrum | Jul 2018 | A1 |
20180219561 | Litsyn | Aug 2018 | A1 |
20180226124 | Perner | Aug 2018 | A1 |
20180232151 | Badam | Aug 2018 | A1 |
20180270110 | Chugtu | Sep 2018 | A1 |
20180293014 | Ravimohan | Oct 2018 | A1 |
20180294823 | Li | Oct 2018 | A1 |
20180300203 | Kathpal | Oct 2018 | A1 |
20180329776 | Lai | Nov 2018 | A1 |
20180336921 | Ryun | Nov 2018 | A1 |
20180349396 | Blagojevic | Dec 2018 | A1 |
20180356992 | Lamberts | Dec 2018 | A1 |
20180373428 | Kan | Dec 2018 | A1 |
20180373655 | Liu | Dec 2018 | A1 |
20180373664 | Vijayrao | Dec 2018 | A1 |
20190012111 | Li | Jan 2019 | A1 |
20190065085 | Jean | Feb 2019 | A1 |
20190073262 | Chen | Mar 2019 | A1 |
20190087115 | Li | Mar 2019 | A1 |
20190087266 | Watanabe | Mar 2019 | A1 |
20190087328 | Kanno | Mar 2019 | A1 |
20190103884 | Kim | Apr 2019 | A1 |
20190171532 | Abadi | Jun 2019 | A1 |
20190205206 | Hornung | Jul 2019 | A1 |
20190227927 | Miao | Jul 2019 | A1 |
20190272242 | Kachare | Sep 2019 | A1 |
20190278654 | Kaynak | Sep 2019 | A1 |
20190339998 | Momchilov | Nov 2019 | A1 |
20190361606 | Goker | Nov 2019 | A1 |
20190377632 | Oh | Dec 2019 | A1 |
20190377821 | Pleshachkov | Dec 2019 | A1 |
20190391748 | Li | Dec 2019 | A1 |
20200004456 | Williams | Jan 2020 | A1 |
20200004674 | Williams | Jan 2020 | A1 |
20200013458 | Schreck | Jan 2020 | A1 |
20200042223 | Li | Feb 2020 | A1 |
20200097189 | Tao | Mar 2020 | A1 |
20200159425 | Flynn | May 2020 | A1 |
20210058097 | Watanabe | Feb 2021 | A1 |
20210089392 | Shirakawa | Mar 2021 | A1 |
Number | Date | Country |
---|---|---|
2003022209 | Jan 2003 | JP |
2011175422 | Sep 2011 | JP |
9418634 | Aug 1994 | WO |
1994018634 | Aug 1994 | WO |
Entry |
---|
https://web.archive.org/web/20071130235034/http://en.wikipedia.org:80/wiki/logical_block_addressing wikipedia screen shot retriefed on wayback Nov. 20, 2007 showing both physical and logical addressing used historically to access data on storage devices (Year: 2007). |
Ivan Picoli, Carla Pasco, Bjorn Jonsson, Luc Bouganim, Philippe Bonnet. “uFLIP-OC: Understanding Flash I/O Patterns on Open-Channel Solid-State Drives.” APSys'17, Sep. 2017, Mumbai, India, pp. 1-7, 2017, <10.1145/3124680.3124741>. <hal-01654985>. |
EMC Powerpath Load Balancing and Failover Comparison with native MPIO operating system solutions. Feb. 2011. |
Tsuchiya, Yoshihiro et al. “DBLK: Deduplication for Primary Block Storage”, MSST 2011, Denver, CO, May 23-27, 2011 pp. 1-5. |
Chen Feng, et al. “CAFTL: A Content-Aware Flash Translation Layer Enhancing the Lifespan of Flash Memory based Solid State Devices” < FAST'11, San Jose, CA Feb. 15-17, 2011, pp. 1-14. |
Wu, Huijun et al. “HPDedup: A Hybrid Prioritized Data Deduplication Mechanism for Primary Storage in the Cloud”, Cornell Univ. arXiv: 1702.08153v2[cs.DC], Apr. 16, 2017, pp. 1-14https://www.syncids.com/#. |
WOW: Wise Ordering for Writes—Combining Spatial and Temporal Locality in Non-Volatile Caches by Gill (Year: 2005). |
Helen H. W. Chan et al. “HashKV: Enabling Efficient Updated in KV Storage via Hashing”, https://www.usenix.org/conference/atc18/presentation/chan, (Year: 2018). |
S. Hong and D. Shin, “NAND Flash-Based Disk Cache Using SLC/MLC Combined Flash Memory,” 2010 International Workshop on Storage Network Architecture and Parallel I/Os, Incline Village, NV, 2010, pp. 21-30. |
Arpaci-Dusseau et al. “Operating Systems: Three Easy Pieces”, Originally published 2015; Pertinent: Chapter 44; flash-based SSDs, available at http://pages.cs.wisc.edu/˜remzi/OSTEP/. |
Jimenex, X., Novo, D. and P. Ienne, “Pheonix:Reviving MLC Blocks as SLC to Extend NAND Flash Devices Lifetime,” Design, Automation & Text in Europe Conference & Exhibition (DATE), 2013. |
Yang, T. Wu, H. and W. Sun, “GD-FTL: Improving the Performance and Lifetime of TLC SSD by Downgrading Worn-out Blocks,” IEEE 37th International Performance Computing and Communications Conference (IPCCC), 2018. |
Number | Date | Country | |
---|---|---|---|
20210359704 A1 | Nov 2021 | US |