This disclosure is generally related to the field of data storage. More specifically, this disclosure is related to a method and system for facilitating efficient data compression based on error correction code encoding and reorganization of data placement.
Today, various storage systems are being used to store and access the ever-increasing amount of digital content. A storage system can include storage servers with one or more storage devices or drives (such as a solid-state drive (SSD)). Data can be stored in a non-volatile storage media of an SSD, e.g., in Not-And flash (NAND) flash. Given the large amount of data to be processed and managed in a storage system, data compression is used increasingly in real-time applications. Because data compression can consume central processing unit (CPU) core resources and affect online performance, data compression is sometimes offloaded using hardware acceleration. As an example, one current approach to reduce access latency is for an application to send an original block of data to an SSD, where the SSD handles the data compression and metadata management. While this approach may make compression invisible to the host application, it can also result in a high burden to the SSD hardware and software.
One existing solution which addresses the burden to the SSD is to send data blocks to the SSD with their corresponding logical block addresses (LBAs). The SSD can perform compression on the data block and send the compressed block size to the flash translation layer (FTL), which can merge multiple compressed data blocks of varying sizes into a physical page of the NAND flash. The FTL can maintain mapping information between the logical address of the original data block and the compressed data stored at the physical address. After accumulating sufficient compressed data blocks to be programmed, the SSD can perform an error correction code (ECC)-encoding on fixed-length portions of user data. Due to the varying sizes of the multiple compressed data blocks, some data blocks may be in the same ECC codeword, while other data blocks may be split across two ECC codewords.
This existing solution is limited by the following constraints: the FTL mapping table must store more information due to the varying sizes of the multiple compressed data blocks; a compressed data block which is split across two ECC codewords requires two separate ECC decodings; when a requested data block is stored at a physical block address (PBA) shared by other compressed data blocks, the system must read and decode the other compressed data blocks, which can lead to read amplification; and when a requested data block covers two physical NAND pages, two separate read operations are required, which can result in a non-trivial impact on the access latency.
Thus, while moving data compression to the SSD can provide transparent compression to a host, some challenges remain which affect the efficiency and performance of the overall storage system.
One embodiment provides a system which facilitates data management. During operation, the system receives, by a storage device, a plurality of data blocks. The system compresses the data blocks to obtain compressed data blocks, and performs error correction code (ECC)-encoding on the compressed data blocks to obtain ECC-encoded data blocks. The system stores the ECC-encoded data blocks in a buffer prior to writing the ECC-encoded data blocks in a non-volatile memory of the storage device, and reorganizes an order of the ECC-encoded data blocks in the buffer to match a size of a physical page of the non-volatile memory. Responsive to a first set of the reorganized ECC-encoded data blocks filling a first physical page, the system writes the first set of the reorganized ECC-encoded data blocks to the first physical page.
In some embodiments, the plurality of data blocks are associated with logical block addresses (LBAs). The system stores, in a data structure, a mapping between: a logical block address (LBA) for a respective ECC-encoded data block; a physical page address in the first physical page at which the respective ECC-encoded data block is written; and an index which indicates a location or offset for the respective ECC-encoded data block in the first physical page.
In some embodiments, the first set of the reorganized ECC-encoded data blocks written to the first physical page comprises: a header prepended to a respective ECC-encoded data block; and a tail appended to the respective ECC-encoded data block. The header and the tail comprise a repeated pattern which is based on the index for the respective ECC-encoded data block.
In some embodiments, the system performs ECC-encoding on a respective compressed data block to obtain a respective ECC-encoded data block by: reducing a size of a user portion which corresponds to a full parity check matrix to obtain a shortened user portion which corresponds to a size of the respective compressed data block; performing ECC-encoding on the shortened user portion appended by zeros to obtain parity bits; and puncturing the parity bits to obtain a punctured parity, wherein the respective obtained ECC-encoded data block comprises the shortened user portion and the punctured parity.
In some embodiments, the respective obtained ECC-encoded data block is written to the non-volatile memory as part of the first physical page. The system receives a request to read a data block in the first physical page from the non-volatile memory, wherein the requested data block comprises the respective obtained ECC-encoded data block written to the non-volatile memory. The system determines, based on a logical block address (LBA) associated with the requested data block, a physical page address (PPA) at which the requested data block is stored by searching a data structure which stores a mapping between the LBA, the PPA, and an index for the requested data block. The system retrieves the requested data block from the determined PPA based on the index. The system performs ECC-decoding on the retrieved data block, and returns the ECC-decoded data block to a requesting application.
In some embodiments, a parity check matrix for the requested data block comprises a plurality of circulants, wherein a respective circulant comprises an all-zero square matrix or a non-zero square matrix. A user portion of the parity check matrix corresponds to the shortened user portion of the requested data block appended with user-associated zeros, e.g., a sufficient number of appended user-associated zeros to meet a full size of the user portion of the parity check matrix. A parity portion of the parity check matrix corresponds to the punctured parity of the requested data block appended with parity-associated zeros, e.g., a sufficient number of appended parity-associated zeros to meet a full size of the parity portion of the parity check matrix. The user portion of the parity check matrix comprises one or more of: a first portion which includes full circulants and corresponds to the shortened user portion; a second portion which includes partial circulants and corresponds to both the shortened user portion and a first part of the appended user-associated zeros; and a third portion which includes full circulants and corresponds to a second part of the appended user-associated zeros. The parity portion of the parity check matrix comprises one or more of: a fourth portion which includes full circulants and corresponds to the punctured parity; and a fifth portion which includes full circulants and corresponds to the appended parity-associated zeros.
In some embodiments, performing ECC-decoding is based on: the first portion; the second portion and further based on a maximal confidence of the partial circulants which correspond to the second part of the appended user-associated zeroes; the fourth portion; and the fifth portion and further based on a minimal confidence of the full circulants which correspond to the appended parity-associated zeros.
In some embodiments, performing ECC-decoding is further based on bypassing the third portion based on a maximal confidence of all-zero circulants comprising the third portion.
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 embodiments described herein are not limited to the embodiments shown, but are to be accorded the widest scope consistent with the principles and features disclosed herein.
Overview
The embodiments described herein provide a system which facilitates efficient data compression based on error correction code (ECC)-encoding and reorganization of data placement.
As described above, given the large amount of data to be processed and managed in a storage system, data compression is used increasingly in real-time applications. Because data compression can consume CPU core resources and affect online performance, data compression is sometimes offloaded using hardware acceleration. One current approach to reduce the access latency is for an application to send an original block of data to an SSD, where the SSD handles the data compression and metadata management. While this approach may make compression invisible to the host application, it can also result in a high burden to the SSD hardware and software.
One existing solution which addresses the burden to the SSD is to send data blocks to the SSD with their corresponding logical block addresses (LBAs). The SSD can perform compression on the data block and send the compressed block size to the flash translation layer (FTL), which can merge multiple compressed data blocks of varying sizes into a physical page of the NAND flash. The FTL can maintain mapping information between the logical address of the original data block and the compressed data stored at the physical address. After accumulating sufficient compressed data blocks to be programmed, the SSD can perform an error correction code (ECC)-encoding on fixed-length portions of user data. Due to the varying sizes of the multiple compressed data blocks, some data blocks may be in the same ECC codeword, while other data blocks may be split across two ECC codewords. An exemplary prior art environment is described below in relation to
This existing solution is limited by the following constraints: the FTL mapping table must store more information due to the varying sizes of the multiple compressed data blocks; a compressed data block which is split across two ECC codewords requires two separate ECC decodings; when a requested data block is stored at a PBA shared by other compressed data blocks, the system must read and decode the other compressed data blocks, which can lead to read amplification; and a requested data block which covers two physical NAND pages, two separate read operations are required, which can result in a non-trivial impact on the read latency. These constraints are described further below in relation to
The embodiments described herein provide a system which addresses these constraints by compressing incoming data blocks, performing ECC-encoding on each of the data blocks to obtain ECC-encoded data blocks (of varying sizes), and reorganizing the varyingly sized ECC-encoded data blocks to fit into a single programming unit of the physical media, such as a physical page of NAND flash in an SSD. An exemplary environment which facilitates data compression, ECC-encoding, and data placement is described below in relation to
The system can maintain a data structure (such as a mapping table) which stores a mapping between: an LBA for a respective ECC-encoded data block; a physical page address (PPA) in a physical page at which the respective ECC-encoded data block is stored; and an index which indicates a location or offset for the respective ECC-encoded data block in the physical page. An exemplary NAND page and mapping table is described below in relation to
The system can also perform ECC-encoding based on the varyingly sized compressed data blocks, by generating a shortened user portion and a punctured parity, which results in consuming less storage space in the storage drive, as described below in relation to
Thus, the described embodiments provide a system which can compress, encode, and place data of varying lengths in order to reduce access latency, mitigate read amplification, and improve the quality of service (QoS). By protecting each individual compressed data block with its own ECC capsule, and by using the mapping table and data placement reorganization (to fit into and fill a single physical NAND page), the system can achieve an improvement in the efficiency and performance of the storage drive and the overall storage system. The described embodiments thus solve the technological problem of improving the efficiency and performance of a storage system by providing a technological solution based on space adjustment, block isolation, and a simplified representation.
A “distributed storage system” or a “storage system” can include multiple storage servers. A “storage server” or a “storage system” can refer to a computing device which can include multiple storage devices or storage drives. A “storage device” or a “storage drive” refers to a device or a drive with a non-volatile memory which can provide persistent storage of data, e.g., a solid-state drive (SSD), or a flash-based storage device. A storage system can also be a computer system.
“Non-volatile memory” refers to storage media which may be used for persistent storage of data, e.g., flash memory of a NAND die of an SSD, magnetoresistive random access memory (MRAM), phase change memory (PCM), resistive random access memory (ReRAM), or another non-volatile memory.
“Volatile memory” refers to media which may be used to store data temporarily and in which power is required to maintain the stored data. Examples of volatile memory include DDR DRAM.
A “computing device” refers to any server, device, node, entity, drive, or any other entity which can provide any computing capabilities.
The term “read amplification” refers to the situation in which the size or granularity of requested data is smaller than the size or granularity of the overall returned or retrieved data (e.g., from a basic physical unit of NAND flash in a read operation).
Exemplary Environment for Data Compression and Placement in the Prior Art
During operation, driver 116 can send a data block with its corresponding LBA (e.g., a data chunk and LBA 150). Compression engine 122 can compress the data block and generate a compressed data block 152 (e.g., A 132, B 134, C 136, etc.). Compression engine 122 can also send the size of the compressed block (e.g., a size 154) to FTL 124, which can merge multiple compressed data blocks into a physical page of the NAND flash (e.g., via a merge data/mapping 156 function into physical page 130).
FTL 124 can create and maintain mapping information between the logical address of the original data block and the physical address at which the compressed data is stored. The physical address can include information mapped to each LBA, such as the corresponding PBAs, an offset, and a length. This information can be stored in mapping table 140 (via a communication or operation 158). For example, mapping table 140 can store entries for each LBA, such as: an LBA x 142 which is mapped to PBA information 144 {PBA i, PBA i+1, offset, length}; and LBA y 146 which is mapped to PBA information 148 {PBA j, PBA j+1, offset, length}. Note that while only two PBAs are depicted as mapped to each of these exemplary LBAs, an LBA can be mapped to a greater or smaller number of PBAs than depicted in
After the compressed data blocks (e.g., A 132, B 134, C 136, etc.) accumulate to a size of a programming unit of the NAND flash (e.g., the size of a physical page), the system (e.g., by an ECC encoder, not shown) can perform an ECC encoding on the compressed data blocks. The ECC encoder can perform the ECC encoding on fixed-length blocks of user data, which results in the merged data blocks being divided or cut into multiple parts during the ECC-encoding. Thus, multiple compressed data blocks may be in the same ECC codeword, and some data blocks may be divided across or into two different ECC codewords. For example, an ECC codeword 1 160 can be based on compressed data blocks A 132 and B 134, as well as part of compressed data block C 136, and an ECC codeword 2 can be based on a remaining portion of compressed data block C 136 and other compressed data blocks (not shown). Thus, compressed data blocks A 132 and B 134 are associated with the same ECC codeword 1 160, while compressed data block C 136 is divided across or associated with two different ECC codewords (ECC codeword 1 160 and ECC codeword 2 162). In addition, certain blocks may be spread or divided across or into two different NAND pages (e.g., at the start or the end of a NAND page).
As described above, the prior art environment of
Exemplary Environment for Multi-Stream Sequential Read Using Assigned Queues and LBA Comparator
The embodiments described herein address the challenges associated with the prior art environment of
Subsequently, an ECC encoder 230 can receive the compressed data blocks (via a communication 254), perform ECC-encoding on each data block, and place these compressed and ECC-encoded data blocks into a backend buffer 238 (via a communication 256) (referred to also as “ECC-encoded data blocks”). The ECC-encoded data blocks can include A 231, B 232, C 233, D 234, E 235, and F 236 (as shown in backend buffer 238). Note that compression buffer 228 and backend buffer 238 can be a volatile memory associated with a storage drive, such as a dynamic random access memory (DRAM) associated with an SSD. In some embodiments, buffers 228 and 238 may be stored on DRAM associated with a host or entity other than the storage drive or storage device.
Once these compressed and ECC-encoded data blocks are placed in backend buffer 238, the system can reorganize the order of the ECC-encoded data blocks to match the size of a programming unit of the physical media (e.g., a page size 240 of NAND flash memory). The system can perform this reordering based on the mapping of the logical addresses to the physical addresses. For example, the system can determine that ECC-encoded data block C 233 is too long to be stored together with ECC-encoded data blocks A 231 and B 232. Instead of splitting ECC-encoded data block C 233 across two different NAND pages (as in the prior art), the system can reorganize the blocks and place ECC-encoded data block D 234 (which is of a shorter length than ECC-encoded data block C 233) in the same page with A 231 and B 232 to match the page size by filling in the data as depicted.
When the system detects that a set of the reorganized ECC-encoded data blocks fill a physical page, the system can write the set of the ECC-encoded data blocks to the non-volatile memory. For example, the system can reorganize ECC-encoded data blocks A 231, B 232, and D 234 to fill a physical page, and write these data blocks to a page_1 242 of the non-volatile memory. Similarly, the system can reorganize ECC-encoded data blocks C 233, E 235, and F 236 to fill a physical page, and write these data blocks to a page_2 244 of the non-volatile memory.
Thus, in the embodiments described herein, the system performs ECC-encoding directly on each individual compressed data block, which avoids and eliminates splitting compressed data blocks across multiple ECC codewords. Furthermore, because compressed and ECC-encoded data blocks are stored in a same physical page, the FTL mapping table can store a reduced amount of information, as described below in relation to
Exemplary NAND Page and Mapping Table
For example, for ECC-encoded data block A 231 of NAND page 310, FTL mapping table can include an entry 350, which maps an LBA_A 352 to a PPA 354 and an index value of “000.” Similarly, for ECC-encoded data block B 232 of NAND page 310, FTL mapping table 340 can include an entry 360, which maps an LBA_B 362 to a physical address, which can be indicated by a PPA 364 and an index value of “001.” Based on the value of the index, the system can create the repeating pattern of the head and tail for a given ECC-encoded data block. For example, if one NAND page can store eight compressed and ECC-encoded data blocks, a 3-bit index can indicate the requested LBA which corresponds to data blocks stored at the PPA in an order from left to right. For ECC-encoded data block B 232, based on the index value of “001” in entry 360 of FTL mapping table 340, the system can create a repeating pattern of “000000000011111” for head 316 and tail 318 of ECC-encoded data block B 232 in NAND page 310. The system can repeat each bit an odd number of times, such as five or seven, or can use any basis for the repeating pattern.
ECC Encoding with Shortened User Data and Punctured Parity
Because the compressed data blocks may be of varying sizes, as depicted above in relation to
When the user data (U) 410 (i.e., the compressed data bock) is shorter than the user submatrices of the full matrix, the system can chose the code with the closest approach. The ECC encoding can be based only on the user submatrix which is aligned with the incoming vector, since the remaining columns (corresponding to the appended zeros) are invalid and result in an equivalent zero effect. Shortened codeword 404 can thus maintain the same error correction strength as the full codeword (which is of the size of full matrix 402). The system can also puncture or remove a portion of the generated parity bits in order to reduce the ECC codeword to a size or a length which matches the variable lengths of incoming data blocks in one NAND page. The system may not use punctured codeword 434 if it is not necessary, because the puncture 436 operation may be considered as erasure coding which can also consume part of the capability and resources for error correction.
ECC Decoding Corresponding to ECC Encoding
The system can perform ECC decoding based on the ECC encoding scheme depicted above in
A parity check matrix 508 can include a user portion Hu 521 of parity check matrix 508 and a parity portion Hp 531 of parity check matrix 508. A detailed view 509 of parity check matrix 508 can include non-zero circulants (indicated by a box with a solid shaded background and a “C”) as well as all-zero circulants (indicated by a box with a white background without a “C”). Detailed view 509 of parity check matrix 508 can depict: a user portion 520 (corresponding to Hu 521) and a parity portion 530 (corresponding to Hp 531). User portion 520 can include: a first portion 522 which includes full circulants and corresponds to shortened user data (Us′) 510; a second portion 524 which includes partial circulants and corresponds to both the shortened user portion (portion 525, corresponding to part of shortened user data (Us′) 510) and part of the appended user-associated zeros (portion 526, depicted with vertical lines and corresponding to appended user-associated zeros 512); and a third portion 528 which includes full circulants and corresponds to appended user-associated zeros 514 (depicted with right-slanting diagonal lines). Parity portion 530 can include: a fourth portion 532 which includes full circulants and corresponds to punctured parity (Pc′) 516; and a fifth portion 534 which includes full circulants and corresponds to appended parity-associated zeros 518 (depicted with left-slanting vertical lines).
During operation, the system can perform ECC-decoding based on: the first portion 522; and the second portion 524, further based on a maximal confidence of the partial circulants which correspond to the part (526) of the appended user-associated zeros; the fourth portion 532; and the fifth portion, further based on a minimal confidence of the full circulants which correspond to the appended parity-associated zeros (534). The system can thus bypass the third portion 528 based on a maximal confidence of the zero-square circulants comprising the third portion 528.
An index 540 can indicate three different scenarios for handling the zeros appended to the shortened user portion as well as the zeros appended as a result of puncturing the parity. In a first scenario, portion 528 (depicted with right-slanting diagonal lines) can bypass ECC-decoding with a maximal confidence based on the all-zero bits of the full circulants. In a second scenario, portion 534 (depicted with left-slanting diagonal lines) can join the ECC decoding with a minimal confidence, as the system does not know which bits of the parity were removed or punctured. The initial likelihood of a bit having a value of “0” is only 50% (or 0.5) probability, and there also exists a 50% (or 0.5) probability that the bit has a value of “1.” In the iterations of ECC-decoding, the value of the bit may evolve until it reaches a value which satisfies the parity check matrix, regardless of whether the parity portion includes full circulants or partial circulants.
In a third scenario, portion 524 (including both data portion 525 and appended user-associated zeros portion 526) can join the ECC decoding. Because portion 526 includes all zeros which were appended to align the codeword size with the size of the full parity check matrix, the system can set the value of those bits to zero with a maximal confidence (e.g., that the likelihood of those bits being zero is 100% (or 1.0). The appended zeros only join the ECC decoding to assist the decoding to converge.
Exemplary Method for Facilitating a Multi-Stream Sequential Read
The system performs ECC-decoding on the retrieved data block based on a user portion of the parity check matrix and a parity portion of the parity check matrix, wherein the user portion includes one or more of: a first portion which includes full circulants and corresponds to the shortened user portion; a second portion which includes partial circulants and corresponds to both the shortened user portion and part of the appended user-associated zeros; and a third portion which includes full circulants and corresponds to the appended user-associated zeros, and wherein the parity portion includes one or more of: a fourth portion which includes full circulants and corresponds to the punctured parity; and a fifth portion which includes full circulants and corresponds to the appended parity-associated zeros (operation 648). Performing ECC-decoding on various portions of a retrieved data block is described above in relation to
Exemplary Computer System and Apparatus
Content-processing system 718 can include instructions, which when executed by computer system 700, can cause computer system 700 or processor 702 to perform methods and/or processes described in this disclosure. Specifically, content-processing system 718 can include instructions for receiving and transmitting data packets, including data to be written or read, a data block, a compressed data block, an encoded data block, an LBA, and an input/output (I/O) request (e.g., a read request or a write request) (communication module 720).
Content-processing system 718 can further include instructions for receiving, by a storage device, a plurality of data blocks (communication module 720). Content-processing system 718 can include instructions for compressing the data blocks to obtain compressed data blocks (data-compressing module 722). Content-processing system 718 can include instructions for performing ECC-encoding on the compressed data blocks to obtain ECC-encoded data blocks (ECC-encoding module 724). Content-processing system 718 can include instructions for storing the ECC-encoded data blocks in a buffer prior to writing the ECC-encoded data blocks in a non-volatile memory of the storage device (data-writing module 726). Content-processing system 718 can include instructions for reorganizing an order of the ECC-encoded data blocks in the buffer to match a size of a physical page of the non-volatile memory (buffer-managing module 730). Content-processing system 718 can include instructions for, responsive to a first set of the reorganized ECC-encoded data blocks filling a first physical page (buffer-managing module 732), writing the first set of the reorganized ECC-encoded data blocks to the first physical page (data-writing module 726).
Content-processing system 718 can include instructions for receiving a request to read a data block in the first physical page from the non-volatile memory, wherein the requested data block comprises the respective obtained ECC-encoded data block written to the non-volatile memory (communication module 720). Content-processing system 718 can include instructions for determining, based on a logical block address (LBA) associated with the requested data block, a physical page address (PPA) at which the requested data block is stored by searching a data structure which stores a mapping between the LBA, the PPA, and an index for the requested data block (table-managing module 732). Content-processing system 718 can include instructions for retrieving the requested data block from the determined PPA based on the index (data-reading module 734). Content-processing system 718 can include instructions for performing ECC-decoding on the retrieved data block (ECC-decoding module 728). Content-processing system 718 can include instructions for returning the ECC-decoded data block to a requesting application (communication module 720).
Data 736 can include any data that is required as input or generated as output by the methods and/or processes described in this disclosure. Specifically, data 736 can store at least: data; a data block; a request; a read request; a write request; a logical block address (LBA); a physical block address (PBA); a physical page address (PPA); an index; a location or an offset; a data structure; a mapping table; compressed data; a compressed data block; encoded/decoded data; an encoded/decoded data block; ECC-encoded/decoded data; an ECC-encoded/decoded data block; an order of data blocks; a reorganized order; an indicator of a buffer; a set of reorganized ECC-encoded data blocks; data sufficient to fill a physical page; a header; a tail; a repeating pattern; a user portion; a shortened user portion; a parity portion; a punctured parity; a full parity check matrix; user-associated zeros; parity-associated zeros; a circulant; an all-zero square matrix; a non-zero square matrix; a full circulant; a partial or fractional circulant; a portion of an ECC codeword or a parity check matrix; and an indicator of whether a portion of data will join or bypass ECC-decoding.
Apparatus 800 can comprise modules or units 802-816 which are configured to perform functions or operations similar to modules 720-734 of computer system 700 of
The data structures and code described in this detailed description are typically stored on a computer-readable storage medium, which may be any device or medium that can store code and/or data for use by a computer system. The computer-readable storage medium includes, but is not limited to, volatile memory, non-volatile memory, magnetic and optical storage devices such as disk drives, magnetic tape, CDs (compact discs), DVDs (digital versatile discs or digital video discs), or other media capable of storing computer-readable media now known or later developed.
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. For example, the hardware modules can include, but are not limited to, application-specific integrated circuit (ASIC) chips, field-programmable gate arrays (FPGAs), and other programmable-logic devices now known or later developed. When the hardware modules are activated, the hardware modules perform the methods and processes included within the hardware modules.
The foregoing embodiments described herein have been presented for purposes of illustration and description only. They are not intended to be exhaustive or to limit the embodiments described herein to the forms disclosed. Accordingly, many modifications and variations will be apparent to practitioners skilled in the art. Additionally, the above disclosure is not intended to limit the embodiments described herein. The scope of the embodiments described herein is defined by the appended claims.
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 |
5715471 | Otsuka | Feb 1998 | 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 |
6658478 | Singhal | Dec 2003 | B1 |
6795894 | Neufeld | Sep 2004 | B1 |
7351072 | Muff | Apr 2008 | B2 |
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 |
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 |
8819367 | Fallone | Aug 2014 | B1 |
8825937 | Atkisson | Sep 2014 | B2 |
8832688 | Tang | Sep 2014 | B2 |
8868825 | Hayes | Oct 2014 | B1 |
8904061 | O'Brien, III | Dec 2014 | B1 |
8949208 | Xu | Feb 2015 | B1 |
9015561 | Hu | Apr 2015 | B1 |
9031296 | Kaempfer | May 2015 | B2 |
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 |
9213627 | Van Acht | Dec 2015 | B2 |
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 |
9495263 | Pang | Nov 2016 | B2 |
9529601 | Dharmadhikari | Dec 2016 | B1 |
9529670 | O'Connor | Dec 2016 | B2 |
9575982 | Sankara Subramanian | Feb 2017 | B1 |
9588698 | Karamcheti | Mar 2017 | B1 |
9588977 | Wang | Mar 2017 | B1 |
9607631 | Rausch | Mar 2017 | B2 |
9671971 | Trika | Jun 2017 | B2 |
9747202 | Shaharabany | Aug 2017 | B1 |
9852076 | Garg | Dec 2017 | B1 |
9875053 | Frid | Jan 2018 | B2 |
9912530 | Singatwaria | Mar 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 |
10268390 | Warfield | Apr 2019 | B2 |
10318467 | Barzik | Jun 2019 | B2 |
10361722 | Lee | Jul 2019 | B2 |
10437670 | Koltsidas | Oct 2019 | B1 |
10459663 | Agombar | Oct 2019 | B2 |
10642522 | Li | May 2020 | B2 |
10649657 | Zaidman | May 2020 | B2 |
10678432 | Dreier | Jun 2020 | B1 |
10756816 | Dreier | Aug 2020 | B1 |
10928847 | Suresh | Feb 2021 | B2 |
20010032324 | Slaughter | Oct 2001 | A1 |
20020010783 | Primak | Jan 2002 | A1 |
20020039260 | Kilmer | Apr 2002 | A1 |
20020073358 | Atkinson | Jun 2002 | A1 |
20020095403 | Chandrasekaran | Jul 2002 | A1 |
20020112085 | Berg | Aug 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 |
20040267752 | Wong | Dec 2004 | A1 |
20040268278 | Hoberman | Dec 2004 | A1 |
20050038954 | Saliba | Feb 2005 | A1 |
20050097126 | Cabrera | May 2005 | A1 |
20050138325 | Hofstee | Jun 2005 | A1 |
20050144358 | Conley | Jun 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 |
20060101197 | Georgis | May 2006 | A1 |
20060156012 | Beeson | Jul 2006 | A1 |
20060184813 | Bui | Aug 2006 | A1 |
20070033323 | Gorobets | Feb 2007 | A1 |
20070061502 | Lasser | Mar 2007 | A1 |
20070101096 | Gorobets | May 2007 | A1 |
20070250756 | Gower | Oct 2007 | A1 |
20070266011 | Rohrs | Nov 2007 | A1 |
20070283081 | Lasser | Dec 2007 | A1 |
20070283104 | Wellwood | 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 |
20080163033 | Yim | Jul 2008 | A1 |
20080301532 | Uchikawa | Dec 2008 | A1 |
20090006667 | Lin | Jan 2009 | A1 |
20090089544 | Liu | Apr 2009 | A1 |
20090113219 | Aharonov | Apr 2009 | A1 |
20090125788 | Wheeler | May 2009 | A1 |
20090183052 | Kanno | Jul 2009 | A1 |
20090254705 | Abali | Oct 2009 | A1 |
20090282275 | Yermalayeu | Nov 2009 | A1 |
20090287956 | Flynn | Nov 2009 | A1 |
20090307249 | Koifman | Dec 2009 | A1 |
20090307426 | Galloway | 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 |
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 |
20110060722 | Li | 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 |
20110289263 | Mcwilliams | Nov 2011 | A1 |
20110289280 | Koseki | Nov 2011 | A1 |
20110292538 | Haga | Dec 2011 | A1 |
20110296411 | Tang | Dec 2011 | A1 |
20110299317 | Shaeffer | Dec 2011 | A1 |
20110302353 | Confalonieri | Dec 2011 | A1 |
20120017037 | Riddle | Jan 2012 | 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 |
20120151253 | Horn | Jun 2012 | A1 |
20120159099 | Lindamood | Jun 2012 | A1 |
20120159289 | Piccirillo | Jun 2012 | A1 |
20120173792 | Lassa | Jul 2012 | A1 |
20120203958 | Jones | 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 |
20120324312 | Moyer | Dec 2012 | A1 |
20120331207 | Lassa | Dec 2012 | A1 |
20130013880 | Tashiro | Jan 2013 | A1 |
20130016970 | Koka | Jan 2013 | A1 |
20130018852 | Barton | 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 |
20130205183 | Fillingim | Aug 2013 | A1 |
20130219131 | Alexandron | Aug 2013 | A1 |
20130227347 | Cho | Aug 2013 | A1 |
20130238955 | D'Abreu | Sep 2013 | A1 |
20130254622 | Kanno | Sep 2013 | A1 |
20130318283 | Small | Nov 2013 | A1 |
20130318395 | Kalavade | Nov 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 |
20140082412 | Matsumura | Mar 2014 | A1 |
20140095769 | Borkenhagen | Apr 2014 | A1 |
20140095827 | Wei | Apr 2014 | A1 |
20140108414 | Stillerman | Apr 2014 | A1 |
20140108891 | Strasser | Apr 2014 | A1 |
20140164447 | Tarafdar | Jun 2014 | A1 |
20140164879 | Tam | Jun 2014 | A1 |
20140181532 | Camp | Jun 2014 | A1 |
20140195564 | Talagala | Jul 2014 | A1 |
20140215129 | Kuzmin | Jul 2014 | A1 |
20140223079 | Zhang | Aug 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 |
20150067436 | Hu | Mar 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 |
20150143030 | Gorobets | May 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 |
20150286477 | Mathur | Oct 2015 | A1 |
20150294684 | Qjang | Oct 2015 | A1 |
20150301964 | Brinicombe | Oct 2015 | A1 |
20150304108 | Obukhov | Oct 2015 | A1 |
20150310916 | Leem | Oct 2015 | A1 |
20150317095 | Voigt | Nov 2015 | A1 |
20150341123 | Nagarajan | Nov 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 |
20160048327 | Jayasena | Feb 2016 | A1 |
20160048341 | Constantinescu | Feb 2016 | A1 |
20160054922 | Awasthi | Feb 2016 | A1 |
20160062885 | Ryu | Mar 2016 | A1 |
20160077749 | Ravimohan | Mar 2016 | A1 |
20160077764 | Ori | 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 |
20160132237 | Jeong | May 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 |
20160203000 | Parmar | Jul 2016 | A1 |
20160224267 | Yang | Aug 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 |
20160306699 | Resch | Oct 2016 | A1 |
20160306853 | Sabaa | Oct 2016 | A1 |
20160321002 | Jung | Nov 2016 | A1 |
20160335085 | Scalabrino | 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 |
20160381442 | Heanue | Dec 2016 | A1 |
20170004037 | Park | Jan 2017 | 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 |
20170123655 | Sinclair | May 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 |
20170185498 | Gao | Jun 2017 | A1 |
20170192848 | Pamies-Juarez | Jul 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 |
20170262176 | Kanno | Sep 2017 | A1 |
20170262178 | Hashimoto | Sep 2017 | A1 |
20170262217 | Pradhan | Sep 2017 | A1 |
20170269998 | Sunwoo | Sep 2017 | A1 |
20170279460 | Camp | 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 |
20180069658 | Benisty | Mar 2018 | A1 |
20180074730 | Inoue | Mar 2018 | A1 |
20180076828 | Kanno | Mar 2018 | A1 |
20180088867 | Kaminaga | Mar 2018 | A1 |
20180107591 | Smith | Apr 2018 | A1 |
20180113631 | Zhang | Apr 2018 | A1 |
20180143780 | Cho | May 2018 | A1 |
20180150640 | Li | May 2018 | A1 |
20180165038 | Authement | Jun 2018 | A1 |
20180165169 | Camp | Jun 2018 | A1 |
20180165340 | Agarwal | Jun 2018 | A1 |
20180167268 | Liguori | Jun 2018 | A1 |
20180173620 | Cen | Jun 2018 | A1 |
20180188970 | Liu | Jul 2018 | A1 |
20180189175 | Ji | 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 |
20180260148 | Klein | Sep 2018 | A1 |
20180270110 | Chugtu | Sep 2018 | A1 |
20180293014 | Ravimohan | Oct 2018 | A1 |
20180300203 | Kathpal | Oct 2018 | A1 |
20180321864 | Benisty | Nov 2018 | A1 |
20180322024 | Nagao | Nov 2018 | A1 |
20180329776 | Lai | Nov 2018 | A1 |
20180336921 | Ryun | Nov 2018 | A1 |
20180349396 | Blagojevic | Dec 2018 | A1 |
20180356992 | Lamberts | Dec 2018 | A1 |
20180357126 | Dhuse | Dec 2018 | A1 |
20180373428 | Kan | Dec 2018 | A1 |
20180373655 | Liu | Dec 2018 | A1 |
20180373664 | Vijayrao | Dec 2018 | A1 |
20190012111 | Li | Jan 2019 | A1 |
20190050312 | Li | Feb 2019 | A1 |
20190050327 | Li | Feb 2019 | A1 |
20190065085 | Jean | Feb 2019 | A1 |
20190073261 | Halbert | Mar 2019 | A1 |
20190073262 | Chen | Mar 2019 | A1 |
20190087089 | Yoshida | Mar 2019 | A1 |
20190087115 | Li | Mar 2019 | A1 |
20190087328 | Kanno | Mar 2019 | A1 |
20190116127 | Pismenny | Apr 2019 | A1 |
20190171532 | Abadi | Jun 2019 | A1 |
20190172820 | Meyers | Jun 2019 | A1 |
20190196748 | Badam | Jun 2019 | A1 |
20190196907 | Khan | Jun 2019 | A1 |
20190205206 | Hornung | Jul 2019 | A1 |
20190212949 | Pletka | Jul 2019 | A1 |
20190220392 | Lin | Jul 2019 | A1 |
20190227927 | Miao | Jul 2019 | A1 |
20190272242 | Kachare | Sep 2019 | A1 |
20190278654 | Kaynak | Sep 2019 | A1 |
20190317901 | Kachare | Oct 2019 | A1 |
20190339998 | Momchilov | 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 |
20200042387 | Shani | Feb 2020 | A1 |
20200089430 | Kanno | Mar 2020 | A1 |
20200097189 | Tao | Mar 2020 | A1 |
20200143885 | Kim | May 2020 | A1 |
20200159425 | Flynn | May 2020 | A1 |
20200167091 | Haridas | May 2020 | A1 |
20200225875 | Oh | Jul 2020 | A1 |
20200242021 | Gholamipour | Jul 2020 | A1 |
20200250032 | Goyal | Aug 2020 | A1 |
20200257598 | Yazovitsky | Aug 2020 | A1 |
20200326855 | Wu | Oct 2020 | A1 |
20200328192 | Zaman | Oct 2020 | A1 |
20200348888 | Kim | Nov 2020 | A1 |
20200387327 | Hsieh | Dec 2020 | A1 |
20200401334 | Saxena | Dec 2020 | A1 |
20200409791 | Devriendt | Dec 2020 | A1 |
20210010338 | Santos | Jan 2021 | A1 |
20210089392 | Shirakawa | Mar 2021 | A1 |
20210103388 | Choi | Apr 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. |
C. Wu, D. Wu, H. Chou and C. Cheng, “Rethink the Design of Flash Translation Layers in a Component-Based View”, in IEEE Acess, vol. 5, pp. 12895-12912, 2017. |
Po-Liang Wu, Yuan-Hao Chang and T. Kuo, “A file-system-aware FTL design for flash-memory storage systems,” 2009, pp. 393-398. |
S. Choudhuri and T. Givargis, “Preformance improvement of block based NAND flash translation layer”, 2007 5th IEEE/ACM/IFIP International Conference on Hardware/Software Codesign and Systems Synthesis (CODES+ISSS). Saizburg, 2007, pp. 257-262. |
A. Zuck, O. Kishon and S. Toledo. “LSDM: Improving the Preformance of Mobile Storage with a Log-Structured Address Remapping Device Driver”, 2014 Eighth International Conference on Next Generation Mobile Apps, Services and Technologies, Oxford, 2014, pp. 221-228. |
J. Jung and Y. Won, “nvramdisk: A Transactional Block Device Driver for Non-Volatile RAM”, in IEEE Transactions on Computers, vol. 65, No. 2, pp. 589-600, Feb. 1, 2016. |
Te I et al. (Pensieve: a Machine Assisted SSD Layer for Extending the Lifetime: (Year: 2018). |
ARM (“Cortex-R5 and Cortex-R5F”, Technical reference Manual, Revision r1p1) (Year:2011). |