Method and system for facilitating multi-stream sequential read performance improvement with reduced read amplification

Information

  • Patent Grant
  • 11726699
  • Patent Number
    11,726,699
  • Date Filed
    Tuesday, March 30, 2021
    4 years ago
  • Date Issued
    Tuesday, August 15, 2023
    a year ago
  • Inventors
  • Original Assignees
    • ALIBABA SINGAPORE HOLDING PRIVATE LIMITED
  • Examiners
    • Bragdon; Reginald G
    • Westbrook; Michael L
    Agents
    • Yao; Shun
    • Yao Legal Services, Inc.
Abstract
One embodiment provides a system which facilitates data management. The system receives, by a storage device via read requests from multiple streams, a first plurality of logical block addresses (LBAs) and corresponding stream identifiers. The system assigns a respective LBA to a first queue of a plurality of queues based on the stream identifier corresponding to the LBA. Responsive to determining that a second plurality of LBAs in the first queue are of a sequentially similar pattern: the system retrieves, from a non-volatile memory of the storage device, data associated with the second plurality of LBAs; and the system stores the retrieved data and the second plurality of LBAs in a volatile memory of the storage device while bypassing data-processing operations.
Description
BACKGROUND
Field

This disclosure is generally related to the field of data storage. More specifically, this disclosure is related to a method and system for facilitating multi-stream sequential read performance improvement with reduced read amplification.


Related Art

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. SSDs continue to evolve with increased capacity and parallelism. However, the file system continues to use an access granularity (e.g., 4 KB) which is relatively smaller than the preliminary read unit of NAND flash (e.g., 16 KB). As a result, most of the data which is physically read from a NAND page is dropped after being sensed. This can result in both a non-trivial read amplification and an increased number of issued read operations, which can increase the overall latency of read requests. In addition, the issued read operations can increase the “read disturb” (e.g., where the coupling effect of reading from a given NAND flash cell can impact the neighboring cells), and can result in a decrease in the quality and reliability of the stored data.


Read operations can include both random read requests and sequential read requests. While a random read request may not follow any identifiable patterns, a sequential read request may follow an identifiable pattern based on the predictability of consecutive or sequential logical block addresses (LBAs). One current solution to reduce the number of issued read operations (e.g., the accessing of NAND pages) is to place several (e.g., four) consecutive LBAs in the same physical NAND page, which allows the system to read all four LBAs in a single read operation from the NAND flash, rather than in four separate read operations. However, in a multi-stream scenario, the requested LBAs may be received by the SSD interleaved and out-of-order, which is similar to a random read and can result in the same challenges described above, e.g., an increase in read latency and read amplification and a decrease in the performance and lifespan of the SSD.


SUMMARY

One embodiment provides a system which facilitates data management. The system receives, by a storage device via read requests from multiple streams, a first plurality of logical block addresses (LBAs) and corresponding stream identifiers. The system assigns a respective LBA to a first queue of a plurality of queues based on the stream identifier corresponding to the LBA. Responsive to determining that a second plurality of LBAs in the first queue are of a sequentially similar pattern: the system retrieves, from a non-volatile memory of the storage device, data associated with the second plurality of LBAs; and the system stores the retrieved data and the second plurality of LBAs in a volatile memory of the storage device while bypassing data-processing operations.


In some embodiments, responsive to determining, based on a predetermined threshold, that the second plurality of LBAs in the first queue are not of a sequentially similar pattern, the system performs the following operations. The system retrieves, from the non-volatile memory of the storage device, first data associated with the second plurality of LBAs. The system refrains from storing the retrieved first data and the second plurality of LBAs in the volatile memory. The system performs data-processing operations, including an error correction code (ECC)-decoding and a cyclic redundancy check (CRC), on the retrieved first data. The system returns the processed first data as error-free data to a requesting application.


In some embodiments, the data-processing operations comprise an error correction code (ECC)-decoding and a cyclic redundancy check (CRC).


In some embodiments, the plurality of queues comprises first in, first out (FIFO) queues.


In some embodiments, the system determines that the second plurality of LBAs in the first queue are of a sequentially similar pattern based on a predetermined threshold, and this determination further comprises, for a first LBA and a second LBA assigned to the first queue, the following operations. The system truncates least significant bits of the first LBA and the second LBA. The system compares, based on a bitwise exclusive-or, the truncated first LBA and the truncated second LBA to obtain a first result. The system accumulates the first result and other results from comparing pairs of truncated LBAs assigned to the first queue. The system tracks a current number of matching results based on the accumulated results.


In some embodiments, in response to determining that the current number of matching results is greater than the predetermined threshold, the system generates a decision that the second plurality of LBAs are of a sequentially similar pattern. In response to determining that the current number of matching results is not greater than the predetermined threshold, the system generates a decision that the second plurality of LBAs are not of a sequentially similar pattern.


In some embodiments, the system determines incoming LBAs associated with a first read request from a requesting application, and compares the incoming LBAs with the stored second plurality of LBAs to obtain a second result.


In some embodiments, the retrieved data and the second plurality of LBAs are stored in the volatile memory as raw data. In response to determining, based on the second result, that the incoming LBAs match the stored second plurality of LBAs, the system performs the following operations: reads the raw data from the volatile memory; performs data-processing operations, including an ECC-decoding and a cyclic redundancy check, on the raw data; and returns the processed data as error-free data to a requesting application.


In some embodiments, in response to determining, based on the second result, that the incoming LBAs do not match the stored second plurality of LBAs, the system performs the following operations: retrieves, from the non-volatile memory of the storage device, second data associated with the incoming LBAs; performs data-processing operations, including an ECC-decoding and a cyclic redundancy check, on the retrieved second data; and returns the processed second data as error-free data to a requesting application.


In some embodiments, the retrieved second data comprises requested data and unrequested data associated with the first read request. The data-processing operations are performed on the requested data associated with the first request. The processed second data returned to the requesting application comprises the processed requested data associated with the first request.


In some embodiments, the system determines that the second plurality of LBAs in the first queue are of a sequentially similar pattern alternatively based on detecting a hint associated with an application.





BRIEF DESCRIPTION OF THE FIGURES


FIG. 1 illustrates an exemplary environment for facilitating a multi-stream sequential read, in accordance with the prior art.



FIG. 2 illustrates an exemplary environment for facilitating a multi-stream sequential read, in accordance with an embodiment of the present application.



FIG. 3 illustrates an exemplary LBA comparator module, in accordance with an embodiment of the present application.



FIG. 4 illustrates an exemplary storage device, including pre-fetching of raw data based on the output of an LBA comparator module, in accordance with an embodiment of the present application.



FIG. 5A presents a flowchart illustrating a method for facilitating a multi-stream sequential read, in accordance with an embodiment of the present application.



FIG. 5B presents a flowchart illustrating a method for facilitating a multi-stream sequential read, including operations by an LBA comparator module, in accordance with an embodiment of the present application.



FIG. 5C presents a flowchart illustrating a method for facilitating a multi-stream sequential read, including operations by an LBA comparator module, in accordance with an embodiment of the present application.



FIG. 5D presents a flowchart illustrating a method for facilitating a multi-stream sequential read, including comparing incoming LBAs with the LBAs for the data stored in the volatile memory, in accordance with an embodiment of the present application.



FIG. 6 illustrates an exemplary computer system that facilitates a multi-stream sequential read, in accordance with an embodiment of the present application.



FIG. 7 illustrates an exemplary apparatus that facilitates a multi-stream sequential read, in accordance with an embodiment of the present application.





In the figures, like reference numerals refer to the same figure elements.


DETAILED DESCRIPTION

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 a performance improvement and a reduced read amplification in a multi-stream sequential read. The system evaluates a multi-stream read scenario, implements an access pattern recognition of the assigned LBAs, and performs predictive data read operations based on the access pattern, which can result in a reduced read amplification.


As described above, the difference between the access granularity of a file system (e.g., 4 KB) and a preliminary read unit of NAND flash (e.g., 16 KB) can result in a non-trivial read amplification, where most of the data which is physically read from a NAND page is dropped after being sensed. In addition to the non-trivial read amplification, this can also result in an increased number of issued read operations, which can increase the overall latency of read requests. The issued read operations can increase the “read disturb” (e.g., where the coupling effect of reading from a given NAND flash cell can impact the neighboring cells), and can result in a decrease in the quality and reliability of the stored data.


Read operations can include both random read requests and sequential read requests. While a random read request may not follow any identifiable patterns, a sequential read request may follow an identifiable pattern based on the predictability of consecutive LBAs. One current solution to reduce the number of issued read operations (e.g., the accessing of NAND pages) is to place several (e.g., four) consecutive LBAs in the same physical NAND page, which allows the system to read all four LBAs in a single read operation from the NAND flash, rather than in four separate read operations. However, in a multi-stream scenario, the requested LBAs may be received by the SSD interleaved and out-of-order, which is similar to a random read and can result in the same challenges described above, e.g., an increase in read latency and read amplification and a decrease in the performance and lifespan of the SSD. An exemplary multi-stream scenario in the prior art is described below in relation to FIG. 1.


The embodiments described herein provide a system which addresses the challenge of mitigating and reducing the read amplification to improve the performance and lifespan of an SSD and the overall storage system. Based on incoming read requests from multiple streams, the system can receive LBAs and corresponding stream identifiers. A stream identifier can be appended to each incoming LBA. The system can assign and place LBAs to first in first out queues based on their corresponding stream identifier. The system can implement an access pattern recognition by determining whether given LBAs in a given queue of a sequentially similar pattern. The determination can be performed by an LBA comparator, which can be implemented in hardware or firmware, as described below in relation to FIGS. 3, 5B, and 5C. An exemplary system for facilitating a multi-stream sequential read is described below in relation to FIG. 2.


If the system determines a sequentially similar pattern for the given LBAs, the system can pre-fetch the corresponding raw data from the non-volatile memory, and hold the raw data and the corresponding given LBAs in a temporary data buffer or a volatile memory of the SSD (e.g., a double data rate (DDR) dynamic random access memory (DRAM)). This allows the system to bypass data-processing operations, such as an ECC-decoding and a cyclic redundancy check. Pre-fetching data and bypassing data-processing operations based on the determination of sequential similarity is described below in relation to FIGS. 4 and 5C.


Subsequently, when evaluating incoming LBAs, the controller can compare the incoming LBAs with the given LBAs stored in the volatile memory. If the results match, the system can retrieve the data directly from the volatile memory, which is more efficient than retrieving the data from the non-volatile memory (e.g., can result in an reduced latency). The system can perform the data-processing operations on the retrieved data, and return error-free data to a requesting application, as described below in relation to FIGS. 4 and 5D. If the results do not match, the system can retrieve the data from the non-volatile memory, perform data-processing operations, and return the error-free data.


Thus, the described embodiments provide a system which can mitigate and reduce read amplification as well as improve the performance of the overall system in a multi-stream sequential read scenario. By implementing an access pattern recognition and performing predictive read operations based on the access pattern recognition, the system provides a technological solution (assigning LBAs to queues based on stream identifiers, determining sequential similarity between LBAs, and pre-fetching raw data while bypassing data-processing operations) to the technological problem of improving performance and reducing read amplification in an SSD based on a multi-stream scenario.


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). In this situation, the retrieved data is of a greater size than the requested data, and any portion of the retrieved data which is not the requested data may be dropped. This can result in read amplification, which can result in a suboptimal utilization of resources associated with a read operation.


Exemplary Environment for Multi-Stream Sequential Read in the Prior Art



FIG. 1 illustrates an exemplary environment 100 for facilitating a multi-stream sequential read, in accordance with the prior art. Environment 100 can include multiple streams with sequential LBAs associated with read requests. For example, the streams can include: a stream_1 110, which can include sequential LBAs 114 with values such as 11, 12, and 13; a stream_2 120, which can include sequential LBAs 124 with values such as 21, 22, and 23; and a stream_n 130, which can include sequential LBAs 134 with values such as 31, 32, and 33. Environment 100 can also include an SSD 140 with an SSD controller 142 and NAND flash memory (such as dies) 150, 154, and 156. NAND 150 can store data in physical NAND pages, where each NAND page can include several sequential or consecutive LBAs. For example, NAND 150 can include a page 152, which can correspond to sequential LBAs 164, e.g., {i+1, i+2, i+3, and i+4}. Storing these four sequential LBAs in one physical NAND page can allow the system to read the four LBAs in a single read operation, rather than being read four times. This feature can result in a reduced read amplification.


However, one challenge in utilizing this feature to achieve a reduced read amplification is that the requested LBAs may arrive at the SSD interleaved and out of order. For example, during operation, the system can process incoming read requests from multiple streams 110, 120, and 130 (via, respectively, communications 116, 126, and 136). SSD controller 142 can receive the LBAs (as received LBAs 160 via a communication 162) interleaved and out of order: 11, 21, . . . , 31, 12, 22, . . . , 32, 13, 23, . . . , 33, . . . , etc. That is, while the LBAs from a given stream may appear in order relative to each other, the overall order of the LBAs received (and to be subsequently processed) by SSD controller 142 can be mixed (e.g., interleaved) and out of order relative to the overall order.


Thus, the system may process LBAs 160 as a random read operation and based on a random pattern. This can result in each LBA asking for one round of a NAND page access, which can consume and increase the read latency. The overall latency of environment 100 can be similar to that of a random read. In addition, the read amplification may be considerable based on the significant amount of data which is loaded and then dropped. Thus, in this multi-stream scenario, the system loses the advantage of sequential improvement of the multiple streams and instead results in a decrease in the performance and endurance of the overall storage system.


Exemplary Environment for Multi-Stream Sequential Read Using Assigned Queues and LBA Comparator



FIG. 2 illustrates an exemplary environment 200 for facilitating a multi-stream sequential read, in accordance with an embodiment of the present application. Environment 200 includes: a stream multiplexer 202; a plurality of queues 210, 220, and 230, each corresponding to a particular stream based on a stream identifier; and an LBA comparator 240. During operation, the system can receive information 260, e.g., a plurality of LBAs and corresponding stream identifiers, which are associated with read requests from multiple streams. A respective stream identifier can be appended to a respective LBA.


Stream multiplexer 202 can receive information 260 and assign a respective LBA to a first queue of the plurality of queues based on the corresponding respective stream identifier. Queues 210, 220, and 230 can be first in, first out (FIFO) queues which store LBAs sharing a same stream identifier. FIFO queues may be stored in a buffer in, e.g., a static random access memory (SRAM) of an SSD controller. For example: stream_1 LBA FIFO queue 210 can include LBAs which correspond to a stream identifier of “1” (not shown); stream_2 LBA FIFO queue 220 can include LBAs which correspond to a stream identifier of “2” (not shown); and stream_3 LBA FIFO queue 230 can include LBAs which correspond to a stream identifier of “3” (not shown).


For each queue, and for a certain number of LBAs in a given queue (where the certain number is a second plurality which can be a predetermined number or based on a predetermined rule), LBA comparator 240 can determine whether the second plurality of LBAs in the given queue is of a sequentially similar pattern, and output a decision 260. That is, LBA comparator 240 can determine whether reading ahead and pre-fetching the data can improve the performance of the system and also mitigate the read amplification. In general, LBA comparator 240 can evaluate adjacent LBAs in the same FIFO queue to determine the similarity and the trend, e.g., an LBA_x1 212 and an LBA_x2 214 in FIFO queue 210, and generate decision 260, as described below in relation to FIG. 3.


At the same time, the system can detect a hint associated with an application. For example, an application may issue an application hint 250 which indicates a sequential read for a given set of LBAs or associated with a particular read request from a particular stream or streams. Application hint 250 may also be based on, e.g., a user-specified command sent from a host-side application, a specific software configuration, an eCommerce service, or any other application-related configuration information. If the system does detect such an application hint 250, this application hint 250 can override the decision from LBA comparator 240, as depicted by application hint (bypass) 252.


Exemplary LBA Comparator Module



FIG. 3 illustrates an exemplary LBA comparator module 300, in accordance with an embodiment of the present application. LBA comparator module can correspond to LBA comparator 240 of FIG. 2, and can be implemented in hardware or in firmware. LBA comparator 300 can include: a least significant bits (LSB) truncation module 302; a D-Type Flip Flop (D-FF) component 304; a bitwise exclusive-or (XOR) module 306; an accumulator component 308; a D-FF component 310; a counter 312; and a decision module 314.


During operation, LBA comparator 300 can receive a plurality of LBAs for processing, such as LBA_x1 212 (“x1”) and LBA_x2 214 (“x2”) from stream_1 LBA FIFO queue 210 of FIG. 2 (via a communication 322). LSB truncation module can truncate both x1 and x2, resulting in a truncated x1 (denoted by “[x1]”) and a truncated x2 (denoted by “[x2]”). Using D-FF 304 to buffer a first LBA to form alignment and via communications 324, 326, and 328, bitwise XOR module 306 can compare the truncated first LBA [x1] and the truncated second LBA [x2]. That is, bitwise XOR module 306 can compare the most significant bits (MSBs) of x1 and x2. The number of LSBs and MSBs can be based on predetermined information, such as a first total number of bits for LSBs and/or a second total number of bits for MSBs.


Note that the system compares the MSBs of two LBAs (i.e., the truncated LBAs [x1] and [x2]). As a result, the identified pattern need not be strictly sequential, only “of a sequentially similar pattern.” The determination of this sequentially similar pattern is based on both the predetermined threshold or number (as below) and the first or second total number of bits for, respectively, LSBs and MSBs.


Bitwise XOR module 306 can send the result of the comparison to accumulator component 308 (via a communication 332). Using D-FF 310 and via communications 334 and 336, accumulator 308 can accumulate the results of multiple comparisons by bitwise XOR module 306. For each result, accumulator 308 can send a signal 338 to counter 312. Signal 338 can indicate whether two compared (and truncated) LBAs are the same. Counter 312 can track a current number of matching results (i.e., the number of LBAs whose MSBs match). Counter 312 can send the current number of matching results to decision module 314 (via a communication 340).


Decision module 314 can determine whether the current number of matching results is greater than a predetermined number (e.g., 6 or 10 matching LBAs). If the current number of matching results is greater than the predetermined number, decision module 314 can generate a decision 342 which indicates that the plurality of LBAs in stream_1 LBA FIFO queue 210 are of a sequentially similar pattern. This can trigger the pre-fetching and buffering of data from the non-volatile memory to the volatile memory, as described below in relation to FIG. 4.


If the current number of matching results is not greater than the predetermined number, decision module 314 can generate decision 342 which indicates that the plurality of LBAs in stream_1 LBA FIFO queue 210 are not of a sequentially similar pattern. This can trigger a conventional retrieval of the data from the non-volatile memory, as described above in relation to the multi-stream sequential read of prior art environment 100 of FIG. 1.


Pre-Fetching of Raw Data Based on Output from LBA Comparator



FIG. 4 illustrates an exemplary storage device 400, including pre-fetching of raw data based on the output of an LBA comparator module, in accordance with an embodiment of the present application. Storage device 400 can be an SSD which can include: an SSD controller 410; and NAND 430. SSD controller 410 can include: a host interface 412; a CRC module 414; an ECC decoder module 416; an LBA confirm module 418; a DDR controller 420 which manages and interfaces with a DDR DRAM 422; and a NAND interface 424 which interfaces with non-volatile memory such as NAND 430. SSD controller 410 can also include an LBA comparator (not shown), such as LBA comparator 240 of FIG. 2 or LBA comparator 300 of FIG. 3.


During operation, SSD controller 410 can receive, via read requests from multiple streams, LBAs and corresponding stream identifiers (via a communication 440). Based on the decision generated by and output from the LBA comparator (e.g., decision 342 in FIG. 3), SSD controller 410 can determine to pre-fetch raw data for buffering in its associated volatile memory.


Assume that a page 432 in NAND 430 includes data associated with the plurality of LBAs (of stream_1 LBA FIFO queue 210) found to be of a sequentially similar pattern. SSD controller can retrieve this raw data (via a communication 450), and store the retrieved raw data, along with the plurality of corresponding LBAs, in DDR DRAM 422. Note that the data is stored in DDR DRAM 422 while bypassing ECC decoder 416 and CRC module 414. That is, SSD controller 410 does not need to perform data-processing operations (such as an ECC-decoding and a CRC check by modules 416 and 414, respectively) on the raw data stored in DDR DRAM 422.


Subsequently, the system can determine incoming LBAs associated with a first read request from a requesting application (not shown). LBA confirm module 418 can compare the incoming LBAs with the stored plurality of corresponding LBAs to obtain a result. The system can determine, based on the obtained result, that the incoming LBAs do match the stored LBAs, and can send the result to a module of controller 410 (e.g., to ECC decoder 416). The system can retrieve the stored raw data from DDR DRAM 422 and send the stored raw data to ECC decoder 416 (via a communication 454). The system can perform data-processing operations on the raw data, e.g., ECC decoder 416 can perform an ECC decoding on the raw data, and CRC module 414 can perform a CRC on the ECC-decoded data (via a communication 456), and the system can return the processed data as error-free data to a requesting application (via communication 456 and a communication 460).


The system can also determine, based on the obtained results, that the incoming LBAs do not match the stored LBAs, in which case the system can retrieve the data corresponding to the incoming LBAs directly from NAND 430, perform data-processing operations on the retrieved data, and return the processed data as error-free data to the requesting application (via a communication 458).


Note that the data retrieved via communication 458 can include both requested data and unrequested data associated with the first read request. In some embodiments, the system can perform the data-processing operations only on the requested data, and return only the processed requested data to the requesting application. The system may detect a predetermined condition, and responsive to detecting the predetermined condition, the system may store the unrequested data associated with the first read request in a temporary data buffer or in the volatile memory (e.g., DDR DRAM 422) of the storage device. The predetermined condition may include a setting which results in the system buffering certain LBAs and/or the unrequested data associated with the certain LBAs.


Exemplary Method for Facilitating a Multi-Stream Sequential Read



FIG. 5A presents a flowchart 500 illustrating a method for facilitating a multi-stream sequential read, in accordance with an embodiment of the present application. During operation, the system receives, by a storage device via read requests from multiple streams, a first plurality of LBAs and corresponding stream identifiers (operation 502). The system assigns a respective LBA to a first queue of a plurality of queues based on the stream identifier corresponding to the LBA (operation 504). The queues can be FIFO queues. The system determines that a second plurality of LBAs in the first queue are of a sequentially similar pattern (operation 506). The system retrieves, from a non-volatile memory of the storage device, data associated with the second plurality of LBAs (operation 508), and the system stores the retrieved data and the second plurality of LBAs in a volatile memory of the storage device while bypassing data-processing operations (operation 510). Operations 508 and 510 are responsive to operation 506, and the data-processing operations can include an ECC-decoding and a cyclic redundancy check.



FIG. 5B presents a flowchart 520 illustrating a method for facilitating a multi-stream sequential read, including operations by an LBA comparator module, in accordance with an embodiment of the present application. During operation, the system receives, by a storage device via read requests from multiple streams, a first plurality of LBAs and corresponding stream identifiers (operation 522). The system assigns a respective LBA to a first queue of a plurality of queues based on the stream identifier corresponding to the LBA (operation 524). The queues can be FIFO queues. If the system detects a hint from an application (decision 526), the system bypasses operation 528 and the operations of the LBA comparator module (e.g., operations 530-536 of FIG. 5B and operation 542 of FIG. 5C), and continues at operation 544 of FIG. 5C. The application hint can indicate that a set of LBAs from a given stream are sequential or of a sequentially similar pattern, and should thus be processed together, which results in bypassing certain operations and continuing at operation 544 of FIG. 5C.


If the system does not detect an application hint (decision 526), the system places the respective LBA (and other LBAs assigned to the stream identifier) in the first queue (operation 528). The system can iterate through LBAs in the first queue by pairs of LBAs, which are placed in the first queue in a first in, first out (FIFO) manner. The system, by an LBA comparator, can determine whether the LBAs in the first queue are of a sequentially similar pattern, by processing two LBAs at a time and by performing operations 530-536 and 542, as described below and in relation to FIG. 3.


For a first LBA and a second LBA in the first queue, the system truncates least significant bits (LSBs) of the first LBA and the second LBA (operation 530). The system compares, based on a bitwise exclusive-or, the truncated first LBA and the truncated second LBA to obtain a first result (operation 532), i.e., the system compares the most significant bits (MSBs) of the first LBA and the second LBA. The system accumulates the first result and other results from comparing pairs of truncated LBAs assigned to the first queue (operation 534). The system tracks a current number of matching results based on the accumulated results (operation 536). The operation continues at Label A of FIG. 5C.



FIG. 5C presents a flowchart 540 illustrating a method for facilitating a multi-stream sequential read, including operations by an LBA comparator module, in accordance with an embodiment of the present application. If the system determines that the current number of matching results is greater than the predetermined threshold (decision 542), the system generates a decision that the second plurality of LBAs are of a sequentially similar pattern (operation 544, similar to operation 506). The system retrieves, from a non-volatile memory of the storage device, data associated with the second plurality of LBAs (operation 546, similar to operation 508). The system stores, as raw data, the retrieved data and the second plurality of LBAs in a volatile memory of the storage device while bypassing data-processing operations (operation 548, similar to operation 510). The operation continues at Label B of FIG. 5D.


If the system determines that the current number of matching results is not greater than the predetermined threshold (decision 542), the system generates a decision that the second plurality of LBAs are not of a sequentially similar pattern (operation 550). The system retrieves, from the non-volatile memory of the storage device, first data associated with the second plurality of LBAs (operation 552). The system refrains from storing the retrieved first data and the second plurality of LBAs in the volatile memory (operation 554). The system performs data-processing operations on the retrieved first data (operation 556). As described above and in relation to FIG. 5, the data-processing operations can include an ECC-decoding and a cyclic redundancy check. The system returns the processed first data as error-free data to a requesting application (operation 558). The operation returns.



FIG. 5D presents a flowchart 560 illustrating a method for facilitating a multi-stream sequential read, including comparing incoming LBAs with the LBAs for the data stored in the volatile memory, in accordance with an embodiment of the present application. The system determines incoming LBAs associated with a first read request from a requesting application (operation 562). The system compares the incoming LBAs with the stored second plurality of LBAs to obtain a second result (operation 564). Based on the second result, if the incoming LBAs match the stored second plurality of LBAs (decision 566), the system reads the raw data from the volatile memory (operation 568), performs data-processing operations on the raw data (operation 570), and returns the processed data as error-free data to a requesting application (operation 576).


Based on the second result, if the incoming LBAs do not match the stored second plurality of LBAs (decision 566), the system retrieves, from the non-volatile memory of the storage device, second data associated with the incoming LBAs (operation 572), performs data-processing operations on the retrieved second data (operation 574), and returns the processed (second) data as error-free data to a requesting application (operation 576). Note that operation 576 indicates “processed” data, and can refer to either the processed raw data retrieved from the volatile memory as part of operation 570 or the processed second data retrieved from the non-volatile memory as part of operation 574. The operation returns.


Exemplary Computer System and Apparatus



FIG. 6 illustrates an exemplary computer system 600 that facilitates a multi-stream sequential read, in accordance with an embodiment of the present application. Computer system 600 includes a processor 602, a volatile memory 606, and a storage device 608. In some embodiments, computer system 600 can include a controller 604 (indicated by the dashed lines). Volatile memory 606 can include, e.g., random access memory (RAM), that serves as a managed memory, and can be used to store one or more memory pools. Storage device 608 can include persistent storage which can be managed or accessed via processor 602 (or controller 604). Furthermore, computer system 600 can be coupled to peripheral input/output (I/O) user devices 610, e.g., a display device 611, a keyboard 612, and a pointing device 614. Storage device 608 can store an operating system 616, a content-processing system 618, and data 634.


Content-processing system 618 can include instructions, which when executed by computer system 600, can cause computer system 600 or processor 602 to perform methods and/or processes described in this disclosure. Specifically, content-processing system 618 can include instructions for receiving and transmitting data packets, including data to be read, an LBA, a stream identifier, and an input/output (I/O) request (e.g., a read request or a write request) (communication module 620).


Content-processing system 618 can further include instructions for receiving, by a storage device via read requests from multiple streams, a first plurality of LBAs and corresponding stream identifiers (communication module 620). Content-processing system 618 can include instructions for assigning a respective LBA to a first queue of a plurality of queues based on the stream identifier corresponding to the LBA (queue-assigning module 622). Content-processing system 618 can include instructions for, responsive to determining that a second plurality of LBAs in the first queue are of a sequentially similar pattern (similarity-determining module 624): retrieving, from a non-volatile memory of the storage device, data associated with the second plurality of LBAs (data-reading module 628); and storing the retrieved data and the second plurality of LBAs in a volatile memory of the storage device while bypassing data-processing operations (volatile memory-managing module 626).


Content-processing system 618 can also include instructions for, responsive to determining, based on a predetermined threshold, that the second plurality of LBAs in the first queue are not of a sequentially similar pattern (similarity-determining module 624): retrieving, from the non-volatile memory of the storage device, first data associated with the second plurality of LBAs (data-reading module 628); refraining from storing the retrieved first data and the second plurality of LBAs in the volatile memory (volatile memory-managing module 626); performing data-processing operations, including an error correction code (ECC)-decoding and a cyclic redundancy check (CRC), on the retrieved first data (data-processing module 630); and returning the processed first data as error-free data to a requesting application (communication module 620).


Content-processing system 618 can additionally include instructions for: truncating least significant bits of the first LBA and the second LBA; comparing, based on a bitwise exclusive-or, the truncated first LBA and the truncated second LBA to obtain a first result; accumulating the first result and other results from comparing pairs of truncated LBAs assigned to the first queue; and tracking a current number of matching results based on the accumulated results (similarity-determining module 624). The operations of similarity-determining module 624 can be performed by an LBA comparator, as described above in relation to FIG. 3.


Content-processing system 618 can include instructions for determining incoming LBAs associated with a first read request from a requesting application (LBA-confirming module 632). Content-processing system 618 can also include instructions for comparing the incoming LBAs with the stored second plurality of LBAs to obtain a second result (LBA-confirming module 632).


Data 634 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 634 can store at least: data; a request; a read request; an indicator of a stream; a stream identifier; a logical block address (LBA); a physical block address (PBA); metadata; an LBA appended with a corresponding stream identifier; a queue; a FIFO queue; an indicator or identifier of a queue; a determination or decision that a plurality of LBA is of a sequentially similar pattern; a predetermined threshold; a predetermined number; a predetermined rule; retrieved data; processed data; raw data; ECC-encoded or decoded data; data which has not or has undergone a cyclic redundancy check; error-free data; least significant bits; most significant bits; a truncated LBA; a result of a comparison between two truncated LSBs; an accumulated result; a matching result; a current number of matching results; incoming LBAs associated with a first read request; a result of a comparison between incoming LBA and a stored plurality of LBAs; a determination of whether one set of LBAs matches another set of LBAs; a predetermined condition; requested data; unrequested data; and a hint associated with an application.



FIG. 7 illustrates an exemplary apparatus 700 that facilitates a multi-stream sequential read, in accordance with an embodiment of the present application. Apparatus 700 can comprise a plurality of units or apparatuses which may communicate with one another via a wired, wireless, quantum light, or electrical communication channel. Apparatus 700 may be realized using one or more integrated circuits, and may include fewer or more units or apparatuses than those shown in FIG. 7. Furthermore, apparatus 700 may be integrated in a computer system, or realized as a separate device or devices capable of communicating with other computer systems and/or devices.


Apparatus 700 can comprise modules or units 702-714 which are configured to perform functions or operations similar to modules 620-632 of computer system 600 of FIG. 6, including: a communication unit 702; a queue-assigning unit 704; a similarity-determining unit 706; a volatile memory-managing unit 708; a data-reading unit 710; a data-processing unit 712; and an LBA-confirming unit 714.


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.

Claims
  • 1. A computer-implemented method, comprising: receiving, by a storage device via read requests from multiple streams, a first plurality of logical block addresses (LBAs) and corresponding stream identifiers;assigning a respective LBA to a first queue of a plurality of queues based on the stream identifier corresponding to the LBA; andresponsive to determining that a second plurality of LBAs in the first queue are of a sequentially similar pattern: retrieving, from a non-volatile memory of the storage device, data associated with the second plurality of LBAs; andstoring the retrieved data and the second plurality of LBAs in a volatile memory of the storage device while bypassing data-processing operations, wherein the data-processing operations comprise an error correction code (ECC)-decoding and a cyclic redundancy check (CRC).
  • 2. The method of claim 1, further comprising: responsive to determining, based on a predetermined threshold, that the second plurality of LBAs in the first queue are not of a sequentially similar pattern: retrieving, from the non-volatile memory of the storage device, first data associated with the second plurality of LBAs;refraining from storing the retrieved first data and the second plurality of LBAs in the volatile memory;performing data-processing operations, including an error correction code (ECC)-decoding and a cyclic redundancy check (CRC), on the retrieved first data; andreturning the processed first data as error-free data to a requesting application.
  • 3. The method of claim 1, wherein the plurality of queues comprises first in, first out (FIFO) queues.
  • 4. The method of claim 1, wherein determining that the second plurality of LBAs in the first queue are of a sequentially similar pattern is based on a predetermined threshold and further comprises, for a first LBA and a second LBA assigned to the first queue: truncating least significant bits of the first LBA and the second LBA;comparing, based on a bitwise exclusive-or, the truncated first LBA and the truncated second LBA to obtain a first result;accumulating the first result and other results from comparing pairs of truncated LBAs assigned to the first queue; andtracking a current number of matching results based on the accumulated results.
  • 5. The method of claim 4, further comprising: in response to determining that the current number of matching results is greater than the predetermined threshold, generating a decision that the second plurality of LBAs are of a sequentially similar pattern; andin response to determining that the current number of matching results is not greater than the predetermined threshold, generating a decision that the second plurality of LBAs are not of a sequentially similar pattern.
  • 6. The method of claim 1, further comprising: determining incoming LBAs associated with a first read request from a requesting application; andcomparing the incoming LBAs with the stored second plurality of LBAs to obtain a second result.
  • 7. The method of claim 6, wherein the retrieved data and the second plurality of LBAs are stored in the volatile memory as raw data, and wherein the method further comprises: in response to determining, based on the second result, that the incoming LBAs match the stored second plurality of LBAs: reading the raw data from the volatile memory;performing data-processing operations, including an ECC-decoding and a cyclic redundancy check, on the raw data; andreturning the processed data as error-free data to a requesting application.
  • 8. The method of claim 6, in response to determining, based on the second result, that the incoming LBAs do not match the stored second plurality of LBAs: retrieving, from the non-volatile memory of the storage device, second data associated with the incoming LBAs;performing data-processing operations, including an ECC-decoding and a cyclic redundancy check, on the retrieved second data; andreturning the processed second data as error-free data to a requesting application.
  • 9. The method of claim 8, wherein the retrieved second data comprises requested data and unrequested data associated with the first read request,wherein the data-processing operations are performed on the requested data associated with the first request, andwherein the processed second data returned to the requesting application comprises the processed requested data associated with the first request.
  • 10. The method of claim 1, wherein determining that the second plurality of LBAs in the first queue are of a sequentially similar pattern is based on detecting a hint associated with an application.
  • 11. A computer system, comprising: a processor; anda memory coupled to the processor and storing instructions which, when executed by the processor, cause the processor to perform a method, the method comprising: receiving, by a storage device via read requests from multiple streams, a first plurality of logical block addresses (LBAs) and corresponding stream identifiers;assigning a respective LBA to a first queue of a plurality of queues based on the stream identifier corresponding to the LBA; andresponsive to determining that a second plurality of LBAs in the first queue are of a sequentially similar pattern: retrieving, from a non-volatile memory of the storage device, data associated with the second plurality of LBAs; andstoring the retrieved data and the second plurality of LBAs in a volatile memory of the storage device while bypassing data-processing operations, wherein the data-processing operations comprise an error correction code (ECC)-decoding and a cyclic redundancy check (CRC).
  • 12. The computer system of claim 11, wherein the method further comprises: responsive to determining, based on a predetermined threshold, that the second plurality of LBAs in the first queue are not of a sequentially similar pattern: retrieving, from the non-volatile memory of the storage device, first data associated with the second plurality of LBAs;refraining from storing the retrieved first data and the second plurality of LBAs in the volatile memory;performing data-processing operations, including an error correction code (ECC)-decoding and a cyclic redundancy check (CRC), on the retrieved first data; andreturning the processed first data as error-free data to a requesting application.
  • 13. The computer system of claim 11, wherein determining that the second plurality of LBAs in the first queue are of a sequentially similar pattern is based on a predetermined threshold and further comprises, for a first LBA and a second LBA assigned to the first queue: truncating least significant bits of the first LBA and the second LBA;comparing, based on a bitwise exclusive-or, the truncated first LBA and the truncated second LBA to obtain a first result;accumulating the first result and other results from comparing pairs of truncated LBAs assigned to the first queue; andtracking a current number of matching results based on the accumulated results.
  • 14. The computer system of claim 13, wherein the method further comprises: in response to determining that the current number of matching results is greater than the predetermined threshold, generating a decision that the second plurality of LBAs are of a sequentially similar pattern; andin response to determining that the current number of matching results is not greater than the predetermined threshold, generating a decision that the second plurality of LBAs are not of a sequentially similar pattern.
  • 15. The computer system of claim 11, wherein the retrieved data and the second plurality of LBAs are stored in the volatile memory as raw data, and wherein the method further comprises: determining incoming LBAs associated with a first read request from a requesting application;comparing the incoming LBAs with the stored second plurality of LBAs to obtain a second result; andin response to determining, based on the second result, that the incoming LBAs match the stored second plurality of LBAs: reading the raw data from the volatile memory;performing data-processing operations, including an ECC-decoding and a cyclic redundancy check, on the raw data; andreturning the processed data as error-free data to a requesting application.
  • 16. The computer system of claim 15, wherein the method further comprises: in response to determining, based on the second result, that the incoming LBAs do not match the stored second plurality of LBAs: retrieving, from the non-volatile memory of the storage device, second data associated with the incoming LBAs;performing data-processing operations, including an ECC-decoding and a cyclic redundancy check, on the retrieved second data; andreturning the processed second data as error-free data to a requesting application.
  • 17. The computer system of claim 11, wherein determining that the second plurality of LBAs in the first queue are of a sequentially similar pattern is based on detecting a hint associated with an application.
  • 18. A non-transitory computer-readable storage medium storing instructions that when executed by a computer cause the computer to perform a method, the method comprising: receiving, by a storage device via read requests from multiple streams, a first plurality of logical block addresses (LBAs) and corresponding stream identifiers;assigning a respective LBA to a first queue of a plurality of queues based on the stream identifier corresponding to the LBA; andresponsive to determining that a second plurality of LBAs in the first queue are of a sequentially similar pattern: retrieving, from a non-volatile memory of the storage device, data associated with the second plurality of LBAs; andstoring the retrieved data and the second plurality of LBAs in a volatile memory of the storage device while bypassing data-processing operations, wherein the data-processing operations comprise an error correction code (ECC)-decoding and a cyclic redundancy check (CRC).
  • 19. The storage medium of claim 18, wherein the retrieved data and the second plurality of LBAs are stored in the volatile memory as raw data, and wherein the method further comprises: determining incoming LBAs associated with a first read request from a requesting application;comparing the incoming LBAs with the stored second plurality of LBAs to obtain a second result; andin response to determining, based on the second result, that the incoming LBAs match the stored second plurality of LBAs: reading the raw data from the volatile memory;performing data-processing operations, including an ECC-decoding and a cyclic redundancy check, on the raw data; andreturning the processed data as error-free data to a requesting application.
  • 20. The storage medium of claim 18, wherein the method further comprises: responsive to determining, based on a predetermined threshold, that the second plurality of LBAs in the first queue are not of a sequentially similar pattern: retrieving, from the non-volatile memory of the storage device, first data associated with the second plurality of LBAs;refraining from storing the retrieved first data and the second plurality of LBAs in the volatile memory;performing the data-processing operations on the retrieved first data; andreturning the processed first data as error-free data to a requesting application.
US Referenced Citations (507)
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
8024719 Gorton, Jr. Sep 2011 B2
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
9213632 Song Dec 2015 B1
9251058 Nellans Feb 2016 B2
9258014 Anderson Feb 2016 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
9569454 Ebsen Feb 2017 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
9722632 Anderson Aug 2017 B2
9747202 Shaharabany Aug 2017 B1
9830084 Thakkar Nov 2017 B2
9836232 Vasquez Dec 2017 B1
9852076 Garg Dec 2017 B1
9875053 Frid Jan 2018 B2
9910705 Mak Mar 2018 B1
9912530 Singatwaria Mar 2018 B2
9923562 Vinson Mar 2018 B1
9933973 Luby Apr 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
10417086 Lin Sep 2019 B2
10437670 Koltsidas Oct 2019 B1
10459663 Agombar Oct 2019 B2
10459794 Baek Oct 2019 B2
10466907 Gole Nov 2019 B2
10484019 Weinberg Nov 2019 B2
10530391 Galbraith Jan 2020 B2
10635529 Bolkhovitin Apr 2020 B2
10642522 Li May 2020 B2
10649657 Zaidman May 2020 B2
10649969 De May 2020 B2
10678432 Dreier Jun 2020 B1
10756816 Dreier Aug 2020 B1
10831734 Li Nov 2020 B2
10928847 Suresh Feb 2021 B2
10990526 Lam Apr 2021 B1
11016932 Qiu May 2021 B2
11023150 Pletka Jun 2021 B2
11068165 Sharon Jul 2021 B2
11068409 Li Jul 2021 B2
11126561 Li Sep 2021 B2
11138124 Tomic Oct 2021 B2
11243694 Liang Feb 2022 B2
11360863 Varadan Jun 2022 B2
20010003205 Gilbert Jun 2001 A1
20010032324 Slaughter Oct 2001 A1
20010046295 Sako Nov 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
20060156009 Shin Jul 2006 A1
20060156012 Beeson Jul 2006 A1
20060184813 Bui Aug 2006 A1
20070005901 Kellar Jan 2007 A1
20070033323 Gorobets Feb 2007 A1
20070061502 Lasser Mar 2007 A1
20070061542 Uppala Mar 2007 A1
20070101096 Gorobets May 2007 A1
20070168581 Klein Jul 2007 A1
20070204128 Lee Aug 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
20080028223 Rhoads Jan 2008 A1
20080034154 Lee Feb 2008 A1
20080065805 Wu Mar 2008 A1
20080082731 Karamcheti Apr 2008 A1
20080104369 Reed May 2008 A1
20080112238 Kim May 2008 A1
20080163033 Yim Jul 2008 A1
20080195829 Wilsey Aug 2008 A1
20080301532 Uchikawa Dec 2008 A1
20090006667 Lin Jan 2009 A1
20090089544 Liu Apr 2009 A1
20090110078 Crinon Apr 2009 A1
20090113219 Aharonov Apr 2009 A1
20090125788 Wheeler May 2009 A1
20090177944 Kanno Jul 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
20100281254 Carro Nov 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
20110161621 Sinclair 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
20110302408 Mcdermott 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
20130013887 Sugahara 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
20130138871 Chiu May 2013 A1
20130144836 Adzic Jun 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
20130179898 Fang 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
20130325419 Al-Shaikh Dec 2013 A1
20130329492 Yang Dec 2013 A1
20130346532 D Amato Dec 2013 A1
20140006688 Yu Jan 2014 A1
20140019650 Li Jan 2014 A1
20140019661 Hormuth Jan 2014 A1
20140025638 Hu Jan 2014 A1
20140082273 Segev Mar 2014 A1
20140082412 Matsumura Mar 2014 A1
20140095758 Smith Apr 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
20140337457 Nowoczynski Nov 2014 A1
20140359229 Cota-Robles Dec 2014 A1
20140365707 Talagala Dec 2014 A1
20140379965 Gole Dec 2014 A1
20150006792 Lee Jan 2015 A1
20150019798 Huang Jan 2015 A1
20150039849 Lewis Feb 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
20150186657 Nakhjiri Jul 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
20150370700 Sabol 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
20160055089 Kim Feb 2016 A1
20160062885 Ryu Mar 2016 A1
20160077749 Ravimohan Mar 2016 A1
20160077764 Ori Mar 2016 A1
20160077968 Sela Mar 2016 A1
20160078245 Amarendran Mar 2016 A1
20160098344 Gorobets Apr 2016 A1
20160098350 Tang Apr 2016 A1
20160103631 Ke Apr 2016 A1
20160110254 Cronie Apr 2016 A1
20160124742 Rangasamy May 2016 A1
20160132237 Jeong May 2016 A1
20160141047 Sehgal 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
20160283140 Kaushik 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
20170068639 Davis Mar 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
20170161194 Loh Jun 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
20170185316 Nieuwejaar Jun 2017 A1
20170185498 Gao Jun 2017 A1
20170192848 Pamies-Juarez Jul 2017 A1
20170199823 Hayes Jul 2017 A1
20170212680 Waghulde 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
20170277655 Das 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
20180307620 Zhou 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
20190004944 Widder Jan 2019 A1
20190012111 Li Jan 2019 A1
20190034454 Gangumalla Jan 2019 A1
20190042571 Li Feb 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
20190108145 Raghava Apr 2019 A1
20190116127 Pismenny Apr 2019 A1
20190166725 Jing May 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
20190278849 Chandramouli Sep 2019 A1
20190317901 Kachare Oct 2019 A1
20190320020 Lee Oct 2019 A1
20190339998 Momchilov Nov 2019 A1
20190361611 Hosogi 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
20200082006 Rupp Mar 2020 A1
20200084918 Shen Mar 2020 A1
20200089430 Kanno Mar 2020 A1
20200092209 Chen Mar 2020 A1
20200097189 Tao Mar 2020 A1
20200133841 Davis Apr 2020 A1
20200133873 Williams Apr 2020 A1
20200143885 Kim May 2020 A1
20200159425 Flynn May 2020 A1
20200167091 Haridas May 2020 A1
20200210309 Jung Jul 2020 A1
20200218449 Leitao Jul 2020 A1
20200225875 Oh Jul 2020 A1
20200242021 Gholamipour Jul 2020 A1
20200250032 Goyal Aug 2020 A1
20200257598 Yazovitsky Aug 2020 A1
20200322287 Connor Oct 2020 A1
20200326855 Wu Oct 2020 A1
20200328192 Zaman Oct 2020 A1
20200348888 Kim Nov 2020 A1
20200364094 Kahle Nov 2020 A1
20200371955 Goodacre Nov 2020 A1
20200387327 Hsieh Dec 2020 A1
20200401334 Saxena Dec 2020 A1
20200409559 Sharon Dec 2020 A1
20200409791 Devriendt Dec 2020 A1
20210010338 Santos Jan 2021 A1
20210075633 Sen Mar 2021 A1
20210089392 Shirakawa Mar 2021 A1
20210103388 Choi Apr 2021 A1
20210124488 Stoica Apr 2021 A1
20210132999 Haywood May 2021 A1
20210191635 Hu Jun 2021 A1
20210263795 Li Aug 2021 A1
20210286555 Li Sep 2021 A1
Foreign Referenced Citations (4)
Number Date Country
2003022209 Jan 2003 JP
2011175422 Sep 2011 JP
9418634 Aug 1994 WO
1994018634 Aug 1994 WO
Non-Patent Literature Citations (19)
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).
Related Publications (1)
Number Date Country
20220317917 A1 Oct 2022 US