Main memory, such as Dynamic Random Access Memory (DRAM), is typically used by processor circuitry to access data with a finer granularity than from a non-volatile storage, such as from a Hard Disk Drive (HDD) including rotating magnetic disks or a Solid State Drive (SSD) including flash memory. For example, non-volatile storage in an HDD or SSD may only be capable of writing data in units of a page size, such as in 4 KB pages, while a DRAM memory may be capable of writing data in smaller units of a single byte (i.e., byte-addressable data).
This difference in the smallest writable unit between data written in the main memory, as compared to data written in the non-volatile storage, typically results in write amplification where an entire page stored in the non-volatile storage is rewritten for a relatively small modification (e.g., a few bytes) to the page. This write amplification is a result of a read-modify-write operation to read the original page, modify the page for the changed portions of the page, and then rewrite the entire page in the non-volatile storage to include the changed portions and the original data for the unchanged portions. Such read-modify-write operations amplify the time, processing resources, and memory resources needed to rewrite the entire page for only a relatively small portion of the page that was modified. In addition, some types of storage media, such as NAND flash, may have a limited write endurance where the usable life of the storage media degrades after a large number of writes to the same location. Accordingly, a more efficient way of modifying pages in a non-volatile storage can improve the use of processing and memory resources, and prolong the usable life of certain types of storage media.
The features and advantages of the embodiments of the present disclosure will become more apparent from the detailed description set forth below when taken in conjunction with the drawings. The drawings and the associated descriptions are provided to illustrate embodiments of the disclosure and not to limit the scope of what is claimed.
In the following detailed description, numerous specific details are set forth to provide a full understanding of the present disclosure. It will be apparent, however, to one of ordinary skill in the art that the various embodiments disclosed may be practiced without some of these specific details. In other instances, well-known structures and techniques have not been shown or described in detail to avoid unnecessarily obscuring the various embodiments.
As shown in
Storage 116 is shown as a solid-state memory in the example of
While the description herein refers to solid-state memory generally, it is understood that solid-state memory may comprise one or more of various types of memory devices such as flash integrated circuits, Chalcogenide RAM (C-RAM), Phase Change Memory (PCM), Programmable Metallization Cell RAM (PMC-RAM or PMCm), Ovonic Unified Memory (OUM), Resistive RAM (RRAM), Ferroelectric Memory (FeRAM), Magnetoresistive RAM (MRAM), Fast NAND, 3D-XPoint memory, NAND memory (e.g., Single-Level Cell (SLC) memory, Multi-Level Cell (MLC) memory (i.e., two or more levels), or any combination thereof), NOR memory, EEPROM, other discrete Non-Volatile Memory (NVM) chips, or any combination thereof. The use of some types of solid-state memory referred to above that are capable of writing data at a byte-level may be configured for writing data in larger page sized units or at a page-level in implementations where such types of solid-state memory are used for storage 116 in DSD 108.
Host 101 includes DSD interface 102, processor circuitry 104, and main memory 106, which can be accessed at a byte-level (e.g., at a cache line size of L1, L2, and/or L3 caches of a CPU of processor circuitry 104) that is less than a page size that is used to write data in pages 118 of storage 116. As discussed in more detail below, modifications to pages 118 in some embodiments can be encoded or compressed by processor circuitry 104 of host 101 for caching in cache 12A of main memory 106 before rewriting the pages with the modified data. In such embodiments, cache 12B and mapping table 14B may be omitted from memory 114 of DSD 108, which is indicated in
In other embodiments, the encoding and caching of modifications to pages 118 can be performed by controller circuitry 112 of DSD 108. In such embodiments, memory 114 of DSD 108 can be used to cache the encoded modifications in cache 12B before rewriting the pages with the modified data. In such embodiments, cache 12A and mapping table 14A may be omitted from main memory 106 of host 101, which is indicated in
As used herein, the terms “encode”, “encoding”, and “encoded” refer to changing a format or scheme for representing data, with the goal of reducing the size needed for storing the data in its encoded state. In this regard, encode, encoding, and encoded can be viewed as including data compression.
In the example of
In the example of
In some embodiments, main memory 106 may also store cache 12A and mapping table 14A. In such embodiments, processor circuitry 104, such as an MMU of processor circuitry 104, can cache encoded updates or modifications in cache 12A for pages stored in storage 116. Mapping table 14A in such embodiments can include indications about which pages have encoded modifications cached in cache 12A and/or access information about an access frequency and/or access recency for cached data of pages stored in storage 116. In addition, mapping table 14A can be used to identify data requested by processor circuitry 104 that has been modified and cached in cache 12A, so that the modified version of the data (i.e., a currently valid version of the data) can be retrieved from cache 12A, instead of from storage 116, which stores an obsolete version of the data.
As discussed in more detail below, the encoding and caching of modifications to pages stored in storage 116 can reduce the amount of writes performed in storage 116 by accumulating modifications to the page in the cache and deferring the rewriting of the page. This reduces the write amplification caused by having to rewrite an entire page in storage 116 for a relatively small proportion of modified data. Such caching of encoded modifications can conserve the processing resources, the memory resources, and time required to rewrite pages. In addition, the overall reduction of write operations performed in storage media having a limited write endurance, such as NAND flash, can lengthen the usable life of the storage.
As noted above, an entire page 118 is rewritten for modifications made to data in the page because storage 116 is configured to write data in units of a page size, as opposed to smaller or more granular byte-addressable units that may be used by processor circuitry 104 when executing an application 10. In this regard, and as discussed in more detail below with reference to
In the example of
In other embodiments where DSD 108, instead of host 101, encodes and caches modifications to pages 118, host 101 can interface with DSD 108 using a memory device interface, such as a PCIe Base Address Register (BAR) interface, Gen-Z, Open Coherent Accelerator Processor circuitry Interface (OpenCAPI), or Cache Coherent Interconnect for Accelerators (CCIX), that may be executed by processor circuitry 104. In some implementations, the memory device interface may be implemented by an MMU, or by other circuitry of processor circuitry 104, such as a hardware accelerator.
As shown in
Controller circuitry 112 can include circuitry such as one or more processors for executing instructions and can include, for example, a CPU, a GPU, a microcontroller circuitry, a DSP, an ASIC, an FPGA, hard-wired logic, analog circuitry and/or a combination thereof. In some implementations, controller circuitry 112 can include an SoC such that one or both of host interface 110 and memory 114 may be combined in a single chip with controller circuitry 112.
Memory 114 of DSD 108 can include, for example, a volatile RAM such as DRAM, a non-volatile RAM, SCM, or other solid-state memory. Controller circuitry 112 can access memory 114 to execute instructions, such as firmware 16 that can include instructions for operating DSD 108. In addition, controller circuitry 112 may access memory 114 to cache data to be written in storage 116 and/or data read from storage 116 to be returned to host 101. In embodiments where encoded page modifications are cached in cache 12B of memory 114, as opposed to in main memory 106 of host 101, firmware 16 of DSD 108 can include instructions for encoding and caching modifications, as discussed in more detail below. In addition, controller circuitry 112 may access mapping table 14B in such embodiments to determine whether modifications for a page 118 stored in storage 116 are cached in cache 12B and/or access information, such as an access frequency or access recency, for pages with cached modifications. Mapping table 14B can also be used to identify data requested by host 101 that has been previously modified and cached in cache 12B, so that the modified version of the data (i.e., the valid data) can be retrieved from cache 12B, instead of from storage 116, which may store an obsolete version of the data.
Those of ordinary skill in the art will appreciate that other implementations can include more or less than the elements shown in
The modifications in the example of
In the bottom half of
In addition, the line size may also be adjusted in the field based on changes in modification patterns or trends. For example, modification information, such as statistics on the clustering of modifications in pages may lead to an adjustment to a larger or smaller line size. In another example, different hosts may be associated with different line sizes, such that modification requests from a first host accessing DSD 108 result in a line size of 4 bytes, while modification requests from a second host result in a line size of 8 bytes.
As shown in
In some implementations, a number of lines with modifications in a page may need to be below a threshold number of lines before encoding and caching the modifications. If the threshold number of lines with modifications is reached, it may then be more efficient in terms of processing and memory resources to rewrite the page with the modifications without encoding and caching the modifications. On the other hand, if the threshold number of modified lines is not reached in such implementations, the modifications to the page may be considered sparse enough to accumulate encoded modifications for the page over time in a cache to defer rewriting the page. Such deferring of page rewrites can reduce the inefficiencies caused by write amplification, and prolong the usable life of the storage in cases where the storage has a limited write endurance.
As shown in
Modification identifier module 30 may alternatively or additionally access the mapping table in some implementations to determine access information for a page. The access information may indicate how recently a previous request to read or write data to the page occurred, and/or or a number of previous reads or writes to the page within a period of time. Modification identifier module 30 may use the cache status and/or the access information for a page when receiving modification requests to determine whether to encode and cache the requested modifications or to rewrite the page without encoding and caching the requested modifications for the page.
The requests to modify a page can include, for example, byte addresses for the data to be modified and the new data for the modification. Modification identifier module 30 can identify the page using a mapping table (e.g., mapping table 14A or 14B in
In some implementations, modification identifier module 30 may also provide encoding module 34 with one or more intra-line positions for each identified line indicating one or more locations for the modifications to be made in the line. In addition, modification identifier module 30 may pass the new data for the modifications to encoding module 34 to create encoded data for the modifications. In other implementations, each of the line identification, the intra-line identification, and passing of new data for making the modifications may be handled by a separate module instead of by a single modification identifier module as shown in the example of
Encoding module 34 creates encoded data for the modifications, such as by encoding the line positions, intra-line positions, and new data using one of a plurality of different encoders, such as encoders 0, 1, 2, and 3 in the example of
Other encoding schemes, such as those used by encoders 1, 2, and 3 in
Another type of line-aware encoding can be performed by encoder 3 in
In the example of
As discussed in more detail below with reference to
As discussed in more detail below with reference to
Selector module 32 may then select an encoding scheme based on a threshold value for the collected modification information, such that the collected modification information (e.g., an average number of modifications per modified line) is within a threshold for a particular encoding scheme. For example, encoding scheme 1 may be associated with a threshold of an average of 1.1 modifications per modified line, and encoding scheme 2 may be associated with a threshold of an average of 1.3 modifications per modified line. In such an example, selector module 32 can select encoding scheme 2 when the collected modification information indicates an average number of modifications per modified line of 1.2. In another example, selector module 32 may select an encoding scheme by changing the line size used for encoding to better suit the degree of clustering indicated by the collected modification information.
The encoded modifications and location information for the selected encoding scheme are cached by caching module 36 in a cache that is managed by caching module 36. In this regard, caching module 36 can implement caching policies for the cache, such as determining when to flush data from the cache and/or which data to flush from the cache. In some implementations, cache module 36 may determine that a remaining available storage space or the amount of cached data has reached a storage threshold for flushing data from the cache.
In addition, or alternatively, cache module 36 may determine that an access threshold, such as a write frequency and/or a read frequency, for a particular page that has modifications stored in the cache has fallen below a threshold access frequency. In such implementations, cache module 36 may then flush the modifications for less frequently read and/or less frequently written pages from the cache to make room for caching modifications for more frequently read and/or more frequently written pages. Caching data for more frequently read and/or more frequently written pages may provide a performance benefit in some implementations, since it may be quicker to access such data from the cache than from the non-volatile storage (e.g., storage 116 in
The access threshold may also include, or may alternatively include, how recently data for the page has been accessed, so that encoded data for pages that have been more recently accessed (e.g., written to and/or read from within a predetermined period of time) are kept in the cache longer than encoded data for pages that have less recently been accessed. In this regard, updates or modifications for pages can be accumulated in the cache before flushing the updates or modifications for the page to be rewritten in the storage.
Cache module 36 may access a mapping table (e.g., mapping table 14A or mapping table 14B in
Decoder module 38 decodes the data flushed from the cache for rewriting the corresponding page with the new data in storage 116. In addition, decoder module 38 may be used for decoding modified data that has been requested by processor circuitry of a host. As shown in
Rewrite module 40 performs read-modify-write operations for storage of modified pages in the storage of the DSD. In embodiments where the processor circuitry of the host (e.g., processor circuitry 104 in
Those of ordinary skill in the art will appreciate that other implementations may include a different system environment than shown in
As shown in
In the example of
The storage cost for a delta list encoding scheme such as the encoding scheme described with reference to
For example, a 4 KB page size would have a pagesize of 32,768 bits (i.e., 4,096 bytes multiplied by 8 bits), and a 1 byte unit size would have a unitsize of 8 bits. With these example values for pagesize and unitsize, the storage cost S0 is m(12+8) bits, or 20m bits. The log2 portion of the factor of m (i.e., 12) is the number of bits needed to represent each location in the page for the given page size and unit size, and the remaining portion of the factor of m (i.e., 8) is the number of bits needed to represent the modified data (e.g., B1). As compared to rewriting an entire page, there is a storage savings for using the delta list encoding scheme if the number of modifications, m, is less than
where pagesize and unitsize are expressed in bits. For the example of a 4 KB page size and 1 byte modification unit size, there is a storage savings if m, the number of modifications in a page, is less than 1,638 modifications.
After encoding, the encoded modifications and location information can be cached (e.g., in cache 12A or cache 12B in
As shown in
Each of the four modified lines is represented in the encoding with its binary line position (e.g., 0001 for the first modified line). A list of one or more tuples then follow the line position, with each tuple including an intra-line position for a modification in the line, and the modified data. For example, the first modified line identified by the line position 0001 includes three tuples for modifications to be made for B1, B2, and B3. Since there are 8 bytes per line in the example of page 1182 in
In the example of
The line position for the second modified line, and the line positions for all modified lines after the first modified line, is preceded by a 1 to indicate a new line. For example, a 1 precedes the line position of 0100 for the second modified line to indicate a new modified line after the first modified line. The first modified line does not need a new line identifier in the example of
The storage cost for an intra-line list encoding scheme, such as the encoding scheme described with reference to
For example, a 4 KB page size would have a pagesize of 32,768 bits, an 8 byte line size would have a linesize of 64 bits, and a 1 byte unit size would have a unitsize of 8 bits. With these example values for pagesize, linesize, and unitsize, the storage cost S1 is (1+9)M−1+(3)M+(1+3)(m−M)+8m, which reduces to 9M+12m−1.
The first addend in Equation 2 above represents the storage cost in bits for encoding the line positions of each modified line, with the number of bits needed to uniquely represent each line based on the pagesize and linesize, and an additional bit to indicate each modified line after the first modified line (e.g., the 1 preceding each modified line's position after the first modified line in
As noted above, different encoding schemes will provide for more compression depending on the degree of clustering of the modifications. In the case of the delta encoding scheme of
After encoding, the encoded data can be cached, and a mapping table can be updated to indicate that modified data for page 1182 is cached in the cache. As described in more detail below with reference to the page rewriting process of
As discussed above for the intra-line list encoding scheme of
As with the intra-line list encoding of
Although each modified line in the intra-line bitmap encoding requires a bitmap including a number of bits equal to the number of units in a line (e.g., eight bits for the eight units per line in
The storage cost for an intra-line bitmap encoding scheme such as the encoding scheme described with reference to
For example, a 4 KB page size would have a pagesize of 32,768 bits, an 8 byte line size would have a linesize of 64 bits, and a 1 byte unit size would have a unitsize of 8 bits. With these example values for pagesize, linesize, and unitsize, the storage cost S2 is (9+8)M+8m, which reduces to 17M+8m.
The first addend in Equation 3 above (i.e., the loge portion) represents the storage cost in bits for encoding the line positions of each modified line, with the number of bits needed to uniquely represent each line based on the pagesize and linesize. The second addend in Equation 3 (e.g., (linesize/unitsize)×M) represents the storage cost in bits of the intra-line modification bitmap. The last addend represents the storage cost of the modified data (e.g., B1), which is the same as in the delta list and intra-line list encoding examples discussed above.
As noted above, different encoding schemes will provide for better compression depending on the degree of clustering of the modifications. As compared to the intra-line list encoding for
After encoding, the encoded data can be cached, and a mapping table can be updated to indicate that modified data for page 1182 is cached in the cache. As described in more detail below with reference to the page rewriting process of
As shown in
In the example of
The modifications in each modified line are mapped into a modified line bit sequence that includes the intra-line positions for the modifications. For example, the first modified line sequence indicates a value of 0 for the first unit in the first modified line to indicate no modification to the first unit, but a value of 1 for the second unit to indicate a modification at the second unit, as shown in
The line sequence indicating which lines have been modified in the page, and each of the four modified line sequences are input into encoder 3, which performs entropy encoding, such as Huffman encoding or arithmetic encoding. In implementations where encoder 3 performs arithmetic encoding, encoder 3 uses a line distribution of modified lines to other lines in page 1182 to encode the line sequence. In the example of
As will be appreciated by those of ordinary skill in the art with reference to the present disclosure, the sequences encoded by encoder 3 can be encoded as separate streams or as one stream fed to encoder 3. In this regard, the line sequence and the modified line sequences in some implementations can be arranged as a single sequence. For example, the line sequence in
In implementations where Huffman encoding is used by encoder 3, a dictionary may be stored in a memory (e.g., main memory 106 or memory 114 in
The storage cost for the pre-processing modification mapping before entropy encoding, such as for the bit sequences shown for the page modification mapping in
For example, a 4 KB page size would have a pagesize of 32,768 bits, an 8 byte line size would have a linesize of 64 bits, and a 1 byte unit size would have a unitsize of 8 bits. With these example values for pagesize, linesize, and unitsize, the storage cost S3 is 512+8M+8m. This storage cost is typically further reduced by the entropy encoding performed by encoder 3 in the example of
The first addend in Equation 4 above represents the storage cost in bits for the line sequence as a bitmap including one bit for each line in the page. The second addend in Equation 4 represents the storage cost in bits for the modified line sequences as bitmaps. The last addend represents the storage cost of the modified data (e.g., B1 to B9), which is the same as in the encoding examples discussed above for
After entropy encoding, the encoded modifications can be cached, and a mapping table can be updated to indicate that modified data for page 1182 is cached in the cache. As described in more detail below with reference to the page rewriting process of
As will be appreciated by those of ordinary skill in the art with reference to the present disclosure, any of the foregoing encoding schemes discussed above for the delta list encoding scheme of
In block 502, the circuitry (e.g., processor circuitry 104 or controller circuitry 112) receives one or more requests to modify data stored in a page (e.g., a page 118 in
In embodiments where the caching and encoding of modifications is performed by a DSD's controller circuitry, a processor of the host's processor circuitry may execute an application that modifies the data. The host may then use a memory interface to send the one or more requests to the DSD, which are received by the controller circuitry of the DSD as one or more page modification requests.
In block 504, the circuitry identifies one or more lines in the page that include data to be modified by the one or more requests. In some implementations, the identification of lines to be modified may be performed by executing a modification identifier module, such as modification identifier module 30 in
In addition, the line size may depend on recently collected modification information to better suit recent modification patterns that may result from a particular application or host. In other examples, the circuitry may associate the host requesting the modification with a particular line size, which may be based on previously collected modification information for requests sent by the host or information about the host's processor circuitry, such as a word size used by a processor of the host.
In block 506, the circuitry determines whether the number of lines identified in block 504 with modifications is greater than or equal to a threshold number of lines. In this regard, encoding and caching modifications for the page may not be efficient or worthwhile in terms of performance and/or storage space available in the cache if more than the threshold number of lines are to be modified in the page. In such cases, the circuitry in block 508 rewrites the page in the non-volatile storage including the new data without encoding at least the line positions and intra-line positions. In some cases, the modified data may still be temporarily cached as part of the normal page writing process without using a line-aware encoding scheme.
In some embodiments, the rewriting may be performed by processor circuitry of the host by requesting the page from the storage, modifying the page in the host's main memory to include the new data, and sending a write command to the DSD to write the modified page in place of the obsolete page in the storage. The host and DSD in such implementations may communicate using a block or storage device interface. In other embodiments, the rewriting may be performed by controller circuitry of the DSD by modifying the page in a memory of the DSD and rewriting the page with the new data in the storage. The host and DSD in such embodiments may communicate using a memory device interface.
If the number of identified lines in block 506 is not greater than or equal to the threshold number of lines, or in other words, the modifications to the page are considered sparse enough for encoding and caching, the circuitry in block 510 creates encoded data based on the new data and respective locations of the one or more identified lines in the page. This can include encoding a line position, the new data, and one or more intra-line positions for each modified line identified in block 504. In some implementations, the circuitry may execute an encoding module, such as encoding module 34 in
In block 512, the circuitry caches the encoded data created in block 510 in a cache (e.g., cache 12A or cache 12B in
In block 602, at least one of a cache memory threshold and an access threshold is reached. In some implementations, the circuitry may execute a caching module (e.g., caching module 36 in
The flushing of encoded data from the cache may or may not be specific to a particular page. For example, one implementation may flush encoded data from the cache for all pages that have not been modified within a predetermined period of time in response to reaching a cache memory threshold. In another example, the circuitry may flush the encoded data for all pages in response to reaching a cache memory threshold. Other cache policies may include flushing encoded data for pages that have reached an access threshold, regardless of the storage available in the cache or the size of the cached data.
In block 604, the circuitry decodes at least a portion of the encoded new data in the cache for one or more pages stored in the non-volatile storage in response to the cache memory threshold and/or the access threshold being reached in block 602. In some implementations, the circuitry may execute a decoding module (e.g., decoding module 38 in
In block 606, the circuitry rewrites the one or more pages in the non-volatile storage including at least a portion of the new data for the one or more pages. As noted above, some or all of the encoded modifications in the cache for a page may be overwritten while still in the cache. In such cases, the new modifications may overwrite the old modifications such that only a portion of the modifications in the cache (i.e., the new modifications) are included in the rewritten page in the storage. In some implementations, the circuitry may execute a rewrite module (e.g., rewrite module 40 in
As discussed above, in embodiments where the encoding and caching of modifications are performed by a host, the host may rewrite the page by first reading the page from the DSD, and modifying the page in its main memory, before sending a write command to the DSD to rewrite the page with the new data. Such an operation can be referred to as a page swap operation or read-modify-write operation performed by the host. In embodiments where the encoding and caching of modifications are performed by a DSD, the DSD may rewrite the page by first reading the page from the storage, and modifying the page in a local memory of the DSD, before rewriting the page in the storage with the new data. Such an operation can be referred to as a read-modify-write operation of the DSD.
In block 702, the circuitry determines storage costs for using different respective encoding schemes to create encoded data for one or more pages. As discussed above with reference to the example encoding schemes of
In block 704, the circuitry selects an encoding scheme that has the lowest storage cost determined in block 702 for the one or more pages. For pages that have a higher degree of clustering, line-aware encoding schemes, such as the intra-line list encoding scheme of
In the example encoding selection process of
If it is determined in block 706 that an indication associated with an encoding scheme has been received from a host or application, the circuitry in block 710 selects an encoding scheme for encoding the requested modifications based on the received indication. Following the selection of an encoding scheme based on the indication from the host or application, the example process of
If an indication associated with an encoding scheme has not been received in block 706, the process proceeds to block 708 to wait until one or more encoding evaluation triggers are reached. Such encoding evaluation triggers can include, for example, reaching a predetermined time since a previous evaluation of encoding schemes, reaching a predetermined number of modifications to pages since a previous evaluation of encoding schemes, or reaching a predetermined number of rewritten pages in the storage since a previous evaluation of encoding schemes. Some implementations may reevaluate the encoding schemes upon reaching one evaluation trigger, while other implementations may require multiple evaluation triggers to be reached before reevaluating the encoding schemes. When such an evaluation trigger or evaluation triggers are reached, the process returns to block 702 to determine storage costs for using the different encoding schemes with a recent modification request or modification requests.
In block 802, one or more evaluation triggers are reached for evaluating the current encoding scheme. Such encoding evaluation triggers can include, for example, reaching a predetermined time since a previous evaluation of encoding schemes, reaching a predetermined number of modifications to pages since a previous evaluation of encoding schemes, or reaching a predetermined number of rewritten pages in the storage since a previous evaluation of encoding schemes. Some implementations may reevaluate the encoding schemes upon reaching one evaluation trigger, while other implementations may require multiple evaluation triggers to be reached before reevaluating the encoding schemes
In block 804, the circuitry collects modification information from a plurality of requests to modify pages stored in a non-volatile storage (e.g., storage 116 in
The collected modification information in some implementations can indicate a degree of clustering of modifications. For example, the collected modification information can include statistics such as an average number of modifications for each modified line divided by the number of modifications being made to the page. In another example, the collected information can include the number of modifications made within different byte ranges of each other, such as the number of modifications made within 4 bytes, 8 bytes, and 16 bytes of another modification. The number of modifications made within these different byte ranges may then be divided by the number of modifications for the page to determine a degree of clustering for the modifications using the different sized byte ranges. Such different sized byte ranges may correspond to different possible line sizes that could be used for encoding modifications.
In block 806, the circuitry selects an encoding scheme (e.g., one of encoding schemes 0, 1, 2, or 3 discussed above) based on the collected modification information. For example, each encoding scheme may be associated with a threshold such that the collected information (e.g., an average number of modifications per modified line) may fall within a threshold for a particular encoding scheme. In another example, the circuitry may select an encoding scheme by changing the line size used for encoding to better suit the degree of clustering indicated by the collected modification information.
Those of ordinary skill in the art will appreciate with reference to the present disclosure that the encoding selection process of
As discussed above, the encoding and caching of modifications to pages stored in a non-volatile storage can reduce a write amplification in the non-volatile storage. The reduction in write amplification can ordinarily reduce an overall use of processing and memory resources that may otherwise be needed to perform multiple read-modify-write operations to rewrite pages for only a relatively small proportion of new data. This deferral of rewriting pages in the storage can also save time in terms of Input/Output (I/O) performance, and reduce the wear on storage that may have a limited write endurance.
In addition, the use of line-aware encoding schemes to create encoded data based on respective locations of modified lines in a page can ordinarily allow for more modifications to be accumulated in a cache to further reduce the frequency of rewriting pages. As disclosed herein, such line-aware encoding schemes can provide greater compression for modifications due to the tendency of applications to make modifications within close proximity to other modifications in the page.
Those of ordinary skill in the art will appreciate that the various illustrative logical blocks, modules, and processes described in connection with the examples disclosed herein may be implemented as electronic hardware, computer software, or combinations of both. Furthermore, the foregoing processes can be embodied on a computer readable medium which causes processor circuitry or control circuitry to perform or execute certain functions.
To clearly illustrate this interchangeability of hardware and software, various illustrative components, blocks, and modules have been described above generally in terms of their functionality. Whether such functionality is implemented as hardware or software depends upon the particular application and design constraints imposed on the overall system. Those of ordinary skill in the art may implement the described functionality in varying ways for each particular application, but such implementation decisions should not be interpreted as causing a departure from the scope of the present disclosure.
The various illustrative logical blocks, units, modules, processor circuitry, and controller circuitry described in connection with the examples disclosed herein may be implemented or performed with a general-purpose processor, a DSP, an ASIC, an FPGA or other programmable logic device, discrete gate or transistor logic, discrete hardware components, or any combination thereof designed to perform the functions described herein. A general-purpose processor may be a microprocessor, but in the alternative, the circuitry may be any conventional processor circuitry, controller circuitry, microcontroller circuitry, or state machine. Processor circuitry or controller circuitry may also be implemented as a combination of computing devices, e.g., a combination of a DSP and a microprocessor, a plurality of microprocessors, an SoC, one or more microprocessors in conjunction with a DSP core, or any other such configuration.
The activities of a method or process described in connection with the examples disclosed herein may be embodied directly in hardware, in a software module executed by processor circuitry or controller circuitry, or in a combination of the two. The steps of the method or algorithm may also be performed in an alternate order from those provided in the examples. A software module may reside in RAM memory, flash memory, ROM memory, EPROM memory, EEPROM memory, registers, hard disk, a removable media, an optical media, or any other form of storage medium known in the art. An exemplary storage medium is coupled to the processor circuitry or controller circuitry such that the circuitry can read information from, and write information to, the storage medium. In the alternative, the storage medium may be integral to processor circuitry or controller circuitry. The circuitry and the storage medium may reside in an ASIC or an SoC.
The foregoing description of the disclosed example embodiments is provided to enable any person of ordinary skill in the art to make or use the embodiments in the present disclosure. Various modifications to these examples will be readily apparent to those of ordinary skill in the art, and the principles disclosed herein may be applied to other examples without departing from the spirit or scope of the present disclosure. The described embodiments are to be considered in all respects only as illustrative and not restrictive. In addition, the use of language in the form of “at least one of A and B” in the following claims should be understood to mean “only A, only B, or both A and B.”
Number | Name | Date | Kind |
---|---|---|---|
4420807 | Nolta et al. | Dec 1983 | A |
5608876 | Cohen et al. | Mar 1997 | A |
6772296 | Mathiske | Aug 2004 | B1 |
6856556 | Hajeck | Feb 2005 | B1 |
7023726 | Chen et al. | Apr 2006 | B1 |
7126857 | Hajeck | Oct 2006 | B2 |
7216211 | Munguia et al. | May 2007 | B2 |
7386655 | Gorobets et al. | Jun 2008 | B2 |
7430136 | Merry, Jr. et al. | Sep 2008 | B2 |
7447807 | Merry et al. | Nov 2008 | B1 |
7502256 | Merry, Jr. et al. | Mar 2009 | B2 |
7509441 | Merry et al. | Mar 2009 | B1 |
7596643 | Merry, Jr. et al. | Sep 2009 | B2 |
7653778 | Merry, Jr. et al. | Jan 2010 | B2 |
7685337 | Merry, Jr. et al. | Mar 2010 | B2 |
7685338 | Merry, Jr. et al. | Mar 2010 | B2 |
7685374 | Diggs et al. | Mar 2010 | B2 |
7733712 | Walston et al. | Jun 2010 | B1 |
7765373 | Merry et al. | Jul 2010 | B1 |
7898855 | Merry, Jr. et al. | Mar 2011 | B2 |
7904619 | Danilak | Mar 2011 | B2 |
7912991 | Merry et al. | Mar 2011 | B1 |
7936603 | Merry, Jr. et al. | May 2011 | B2 |
7962792 | Diggs et al. | Jun 2011 | B2 |
7979601 | Berenbaum et al. | Jul 2011 | B2 |
8078918 | Diggs et al. | Dec 2011 | B2 |
8090899 | Syu | Jan 2012 | B1 |
8095851 | Diggs et al. | Jan 2012 | B2 |
8108692 | Merry et al. | Jan 2012 | B1 |
8122185 | Merry, Jr. et al. | Feb 2012 | B2 |
8127048 | Merry et al. | Feb 2012 | B1 |
8135903 | Kan | Mar 2012 | B1 |
8151020 | Merry, Jr. et al. | Apr 2012 | B2 |
8161227 | Diggs et al. | Apr 2012 | B1 |
8166245 | Diggs et al. | Apr 2012 | B2 |
8243525 | Kan | Aug 2012 | B1 |
8254172 | Kan | Aug 2012 | B1 |
8261012 | Kan | Sep 2012 | B2 |
8296625 | Diggs et al. | Oct 2012 | B2 |
8312207 | Merry, Jr. et al. | Nov 2012 | B2 |
8316176 | Phan et al. | Nov 2012 | B1 |
8341339 | Boyle et al. | Dec 2012 | B1 |
8375151 | Kan | Feb 2013 | B1 |
8392635 | Booth et al. | Mar 2013 | B2 |
8397107 | Syu et al. | Mar 2013 | B1 |
8407449 | Colon et al. | Mar 2013 | B1 |
8423722 | DeForest et al. | Apr 2013 | B1 |
8433858 | Diggs et al. | Apr 2013 | B1 |
8443167 | Fallone et al. | May 2013 | B1 |
8447920 | Syu | May 2013 | B1 |
8458435 | Rainey, I et al. | Jun 2013 | B1 |
8478930 | Syu | Jul 2013 | B1 |
8489854 | Colon et al. | Jul 2013 | B1 |
8503237 | Horn | Aug 2013 | B1 |
8521972 | Boyle et al. | Aug 2013 | B1 |
8549236 | Diggs et al. | Oct 2013 | B2 |
8583835 | Kan | Nov 2013 | B1 |
8601311 | Horn | Dec 2013 | B2 |
8601313 | Horn | Dec 2013 | B1 |
8612669 | Syu et al. | Dec 2013 | B1 |
8612804 | Kang et al. | Dec 2013 | B1 |
8615681 | Horn | Dec 2013 | B2 |
8631191 | Hashimoto | Jan 2014 | B2 |
8638602 | Horn | Jan 2014 | B1 |
8639872 | Boyle et al. | Jan 2014 | B1 |
8683113 | Abasto et al. | Mar 2014 | B2 |
8700834 | Horn et al. | Apr 2014 | B2 |
8700950 | Syu | Apr 2014 | B1 |
8700951 | Call et al. | Apr 2014 | B1 |
8706985 | Boyle et al. | Apr 2014 | B1 |
8707104 | Jean | Apr 2014 | B1 |
8713066 | Lo et al. | Apr 2014 | B1 |
8713357 | Jean et al. | Apr 2014 | B1 |
8719531 | Strange et al. | May 2014 | B2 |
8724392 | Asnaashar et al. | May 2014 | B1 |
8724422 | Agness et al. | May 2014 | B1 |
8725931 | Kang | May 2014 | B1 |
8745277 | Kan | Jun 2014 | B2 |
8751728 | Syu et al. | Jun 2014 | B1 |
8769190 | Syu et al. | Jul 2014 | B1 |
8769232 | Suryabudi et al. | Jul 2014 | B2 |
8775720 | Meyer et al. | Jul 2014 | B1 |
8782327 | Kang et al. | Jul 2014 | B1 |
8788778 | Boyle | Jul 2014 | B1 |
8788779 | Horn | Jul 2014 | B1 |
8788880 | Gosla et al. | Jul 2014 | B1 |
8793429 | Call et al. | Jul 2014 | B1 |
8903995 | Basak et al. | Dec 2014 | B1 |
8947803 | Yamakawa et al. | Feb 2015 | B1 |
9015123 | Mathew et al. | Apr 2015 | B1 |
9116800 | Post et al. | Aug 2015 | B2 |
9189387 | Taylor et al. | Nov 2015 | B1 |
9342453 | Nale et al. | May 2016 | B2 |
9619174 | Chen et al. | Apr 2017 | B2 |
9836404 | Ummadi et al. | Dec 2017 | B2 |
9857995 | Malina et al. | Jan 2018 | B1 |
10126981 | Malina et al. | Nov 2018 | B1 |
10423536 | Noguchi et al. | Sep 2019 | B2 |
10482009 | Sabol et al. | Nov 2019 | B1 |
10496544 | Wang et al. | Dec 2019 | B2 |
20080148048 | Govil et al. | Jun 2008 | A1 |
20100037002 | Bennett | Feb 2010 | A1 |
20100174849 | Walston et al. | Jul 2010 | A1 |
20100250793 | Syu | Sep 2010 | A1 |
20110099323 | Syu | Apr 2011 | A1 |
20110283049 | Kang et al. | Nov 2011 | A1 |
20120166891 | Dahlen et al. | Jun 2012 | A1 |
20120210068 | Joshi et al. | Aug 2012 | A1 |
20120239860 | Atkisson et al. | Sep 2012 | A1 |
20120260020 | Suryabudi et al. | Oct 2012 | A1 |
20120278531 | Horn | Nov 2012 | A1 |
20120284460 | Guda | Nov 2012 | A1 |
20120317377 | Palay et al. | Dec 2012 | A1 |
20120324191 | Strange et al. | Dec 2012 | A1 |
20120331016 | Janson et al. | Dec 2012 | A1 |
20130024605 | Sharon | Jan 2013 | A1 |
20130080687 | Nemazie et al. | Mar 2013 | A1 |
20130091321 | Nishtala et al. | Apr 2013 | A1 |
20130132638 | Horn et al. | May 2013 | A1 |
20130145106 | Kan | Jun 2013 | A1 |
20130205114 | Badam et al. | Aug 2013 | A1 |
20130290793 | Booth et al. | Oct 2013 | A1 |
20140006686 | Chen et al. | Jan 2014 | A1 |
20140059405 | Syu et al. | Feb 2014 | A1 |
20140101369 | Tomlin et al. | Apr 2014 | A1 |
20140108703 | Cohen et al. | Apr 2014 | A1 |
20140115427 | Lu | Apr 2014 | A1 |
20140133220 | Danilak et al. | May 2014 | A1 |
20140136753 | Tomlin et al. | May 2014 | A1 |
20140149826 | Lu et al. | May 2014 | A1 |
20140157078 | Danilak et al. | Jun 2014 | A1 |
20140181432 | Horn | Jun 2014 | A1 |
20140223255 | Lu et al. | Aug 2014 | A1 |
20140226389 | Ebsen et al. | Aug 2014 | A1 |
20140351515 | Chiu et al. | Nov 2014 | A1 |
20150058534 | Lin | Feb 2015 | A1 |
20150142996 | Lu | May 2015 | A1 |
20150302903 | Chaurasia et al. | Oct 2015 | A1 |
20150363320 | Kumar et al. | Dec 2015 | A1 |
20160027481 | Hong | Jan 2016 | A1 |
20160118130 | Chadha et al. | Apr 2016 | A1 |
20160313943 | Hashimoto et al. | Oct 2016 | A1 |
20160342357 | Ramamoorthy et al. | Nov 2016 | A1 |
20160357463 | DeNeui et al. | Dec 2016 | A1 |
20160378337 | Horspool et al. | Dec 2016 | A1 |
20170024332 | Rui et al. | Jan 2017 | A1 |
20170147499 | Mohan et al. | May 2017 | A1 |
20170160987 | Royer, Jr. et al. | Jun 2017 | A1 |
20170185347 | Flynn et al. | Jun 2017 | A1 |
20170228170 | Chen et al. | Aug 2017 | A1 |
20170270041 | Talagala et al. | Sep 2017 | A1 |
20170286291 | Thomas | Oct 2017 | A1 |
20180004438 | Hady | Jan 2018 | A1 |
20180032432 | Kowles | Feb 2018 | A1 |
20180095898 | Khosravi et al. | Apr 2018 | A1 |
20180150404 | Kim et al. | May 2018 | A1 |
20180307602 | Xu | Oct 2018 | A1 |
20180307620 | Zhou | Oct 2018 | A1 |
20180349041 | Zhou et al. | Dec 2018 | A1 |
20190163375 | Amidi et al. | May 2019 | A1 |
20190188153 | Benisty et al. | Jun 2019 | A1 |
20190310796 | Perez et al. | Oct 2019 | A1 |
20190339904 | Myran et al. | Nov 2019 | A1 |
20190347204 | Du et al. | Nov 2019 | A1 |
20200004628 | Ben-Rubi | Jan 2020 | A1 |
Number | Date | Country |
---|---|---|
2012134641 | Oct 2012 | WO |
Entry |
---|
Pending U.S. Appl. No. 16/921,719, filed Jul. 6, 2020, entitled “Data Access in Data Storage Device Including Storage Class Memory”, Dubeyko et al. |
International Search Report and Written Opinion dated Nov. 6, 2020 from International Application No. PCT/US2020/037713, 8 pages. |
Karypidis et al.; “The tangible file system”; 23rd International Conference on Distributed Computing Systems Workshops, 2003; Proceedings, Providence, Rhode Island, pp. 268-273. |
Seltzer et al.; “An NVM Carol: Visions of NVM Past, Present, and Future”; 2018 IEEE 34th International Conference on Data Engineering; Paris, 2018; pp. 15-23; available at: https://www.researchgate.net/publication/328522956_An_NVM_Carol_Visions_of_NVM_Past_Present_and_Future. |
Xu et al.; “CAST: A page-level FTL with compact address mapping and parallel data blocks”; 2012 IEEEE 31st International Performance Computing and Communications Conference (IPCCC); Austin, TX; 2012; pp. 142-151 available at: https://ieeexplore.IEEE.org/document/6407747. |
Phil Mills, “Storage Class Memory—the Future of Solid State Storage,” http://www.snia.org/sites/default/education/tutorials/2009/fall/solid/PhilMills_The_Future_of_Solid_State_Storage.pdf., SNIA Education, 2009. |
Pending U.S. Appl. No. 16/176,997, filed Oct. 31, 2018, entitled “Tiered Storage Using Storage Class Memory”, James N. Malina. |
Pending U.S. Appl. No. 16/683,095, filed Nov. 13, 2019, entitled “Storage Class Memory Access”, Manzanares et al. |
Kang et al.; “Subpage-based Flash Translation Layer For Solid State Drivers”; Jan. 2006; 10 pages; available at https://cs.kaist.ac.kr/fileDownload?kind=tech&sn=340. |
Kim et al.; “Partial Page Buffering for Consumer Devices with Flash Storage”; Proceedings 2013 IEEE 3rd International Conference on Consumer Electronics—Berlin, ICCE-Berlin 2013 (p. 177-180); available at: https://hanyang.elsevierpure.com/en/publications/partial-page-buffering-for-consumer-devices-with-flash-storage. |
Wu et al.; “Delta-FTL: Improving SSD Lifetime via Exploiting Content Locality”; Apr. 10-13, 2012; 13 pages; available at: https://cis.temple.edu/˜he/publications/Conferences/DeltaFTL-Eurosys12.pdf. |
Xia et al.; “Edelta: A Word-Enlarging Based Fast Delta Compression Approach”; Jul. 2015; 5 pages; available at https://www.usenix.org/system/files/conference/hotstorage15/hotstorage15-xia.pdf. |
Pending U.S. Appl. No. 16/196,077, filed Nov. 20, 2018, entitled “Data Access in Data Storage Device Including Storage Class Memory”, Dubeyko et al. |
Hitachi Vantara; “Hitachi Accelerated Flash 2.0”; Sep. 2018; 20 pages; available at: https://www.hitachivantara.com/en-US/pdfd/white-paper/accelerated-flash-whitepaper.pdf. |
Pending U.S. Appl. No. 16/246,425, filed Jan. 11, 2019, entitled “Container Key Value Store for Data Storage Devices”, Sanjay Subbarao. |
Pending U.S. Appl. No. 16/246,401, filed Jan. 11, 2019, entitled “Fine Granularity Translation Layer for Data Storage Devices”, Sanjay Subbarao. |
Number | Date | Country | |
---|---|---|---|
20210349828 A1 | Nov 2021 | US |