Solid state drives (SSDs) are data storage devices that rely on memory integrated circuits to store data in a non-volatile or persistent manner. Unlike hard disk drives, solid state drives do not include moving, mechanical parts, such as a movable drive head and/or drive spindle. As such, solid state drives are generally more durable to physical contact (e.g., bumping) during operation and operate more quietly than traditional disk drives. Due to the reliance on solid state memory devices to store data, solid state drives generally exhibit lower access time relative to typical disk drives.
A typical solid state drive may include a large amount of non-volatile memory, which is oftentimes based on NAND flash memory technology, although NOR flash memory may be used in some implementations. The majority of data stored on a solid state drive is stored in the non-volatile memory for long-term storage. To reduce the overall cost and footprint of solid state drives, many solid state drives utilize larger die memory storage devices (e.g., large NAND chips) in a multi-level cell (MLC) or triple-level cell (TLC) mode, which allows multiple bits of data to be stored in a single memory cell. However, the increase in the die size of the memory storage devices and usage of the multi-bit storage technology can decrease the parallelism inherent in multiple memory storage device architecture and can result in slower access time, especially during a read cycle, due to an increased need for data error checking.
The concepts described herein are illustrated by way of example and not by way of limitation in the accompanying figures. For simplicity and clarity of illustration, elements illustrated in the figures are not necessarily drawn to scale. Where considered appropriate, reference labels have been repeated among the figures to indicate corresponding or analogous elements.
While the concepts of the present disclosure are susceptible to various modifications and alternative forms, specific embodiments thereof have been shown by way of example in the drawings and will be described herein in detail. It should be understood, however, that there is no intent to limit the concepts of the present disclosure to the particular forms disclosed, but on the contrary, the intention is to cover all modifications, equivalents, and alternatives consistent with the present disclosure and the appended claims.
References in the specification to “one embodiment,” “an embodiment,” “an illustrative embodiment,” etc., indicate that the embodiment described may include a particular feature, structure, or characteristic, but every embodiment may or may not necessarily include that particular feature, structure, or characteristic. Moreover, such phrases are not necessarily referring to the same embodiment. Further, when a particular feature, structure, or characteristic is described in connection with an embodiment, it is submitted that it is within the knowledge of one skilled in the art to effect such feature, structure, or characteristic in connection with other embodiments whether or not explicitly described. Additionally, it should be appreciated that items included in a list in the form of “at least one A, B, and C” can mean (A); (B); (C); (A and B); (A and C); (B and C); or (A, B, and C). Similarly, items listed in the form of “at least one of A, B, or C” can mean (A); (B); (C); (A and B); (A and C); (B and C); or (A, B, and C).
The disclosed embodiments may be implemented, in some cases, in hardware, firmware, software, or any combination thereof. The disclosed embodiments may also be implemented as instructions carried by or stored on a transitory or non-transitory machine-readable (e.g., computer-readable) storage medium, which may be read and executed by one or more processors. A machine-readable storage medium may be embodied as any storage device, mechanism, or other physical structure for storing or transmitting information in a form readable by a machine (e.g., a volatile or non-volatile memory, a media disc, or other media device).
In the drawings, some structural or method features may be shown in specific arrangements and/or orderings. However, it should be appreciated that such specific arrangements and/or orderings may not be required. Rather, in some embodiments, such features may be arranged in a different manner and/or order than shown in the illustrative figures. Additionally, the inclusion of a structural or method feature in a particular figure is not meant to imply that such feature is required in all embodiments and, in some embodiments, may not be included or may be combined with other features.
Referring now to
During operation of the solid state drive 100, the drive controller 102 may dynamically increase or decrease the size of the read cache of the non-volatile memory 110 based on one or more criteria by converting memory regions of the non-volatile memory 110 to SLC mode or back to MLC or TLC mode. For example, a typical non-volatile memory 200 of a solid state drive is shown in
The present size of the read cache 300 is based on the available amount of unused space 304 and/or the size of the user data region 306 in the illustrative embodiment. For example, as shown in
Referring back to
The processor 104 may be embodied as any type of hardware processor or processing circuitry capable of performing the functions described herein. For example, the processor 104 may be embodied as a single or multi-core processor(s), digital signal processor, microcontroller, or other processor or processing/controlling circuit. In the illustrative embodiment, the processor 104 controls and manages operation of other components of the drive controller 102.
Similar to the processor 104, the non-volatile memory controller 106 may be embodied as any type of hardware processor, processing circuitry, or collection of devices capable of managing the non-volatile memory 110. In use, the non-volatile memory controller 106 manages read and write access to the non-volatile memory 110. Additionally, the non-volatile memory controller 106 may manage various metadata associated with the non-volatile memory 110 including, but not limited to, a logical-to-physical indirection table, a read count and write count associated with data stored in the non-volatile memory 110, a level of invalidation of regions of the non-volatile memory 110, and/or other metadata related to the data stored in the non-volatile memory 110.
In some embodiments, the processor 104 and the non-volatile memory controller 106 may be embodied as the same hardware processor, processing circuitry, and/or collection of devices. Additionally, in some embodiments, the processor 104 and the non-volatile memory controller 106 may form a portion of a System-on-a-Chip (SoC) and be incorporated, along with other components of the drive controller 102, onto a single integrated circuit chip.
The host interface 108 may also be embodied as any type of hardware processor, processing circuitry, input/output circuitry, and/or collection of components capable of facilitating communication of the solid state drive 100 with a host device or service (e.g., a host application). That is, the host interface 108 embodies or establishes an interface for accessing data stored on the solid state drive 100. To do so, the host interface 108 may be configured to utilize any suitable communication protocol and/or technology to facilitate communications with the solid state drive 100. For example, the host interface 108 may be configured to communicate with a host device or service using Serial Advanced Technology Attachment (SATA), Peripheral Component Interconnect express (PCIe), Serial Attached SCSI (SAS), Universal Serial Bus (USB), and/or other communication protocol and/or technology.
The non-volatile memory 110 may be embodied as any type of non-volatile memory capable of being managed in multiple speed and endurance levels and performing the functions described herein. For example, the non-volatile memory 110 may be embodied as NAND flash memory with single-level cell (SLC) mode capability in which each memory cell stores a single bit of information and either triple level cell (TLC) mode capability in which each memory cell stores three bits of information and/or multi-level cell (MLC) mode capability in which each memory cell stores two bits of information. In the illustrative embodiments, the non-volatile memory 110 is embodied as NAND flash memory, but other types of non-volatile memory may be used in other embodiments. The non-volatile memory 110 may be formed from multiple, discrete memory devices (e.g., multiple NAND circuit chips or dies), which may be managed and accessed by the non-volatile memory controller 106 in a parallel manner to increase the memory access speed of the solid state drive 100. In such embodiments, a memory band of physical memory may stretch across multiple, discrete memory devices. Additionally, virtual memory blocks may be located on multiple, discrete memory devices of the non-volatile memory 110.
In the illustrative embodiment, the solid state drive 100 also includes a volatile memory 120. The volatile memory 120 may be embodied as any type of volatile memory capable of storing data while the solid state drive 100 is operational. In the illustrative embodiment, the volatile memory 120 is embodied as dynamic random access memory (DRAM) ssuch as LPDDR3 (low power dual data rate version 3, original release by JEDEC (Joint Electronic Device Engineering Council) JESD209-3B, August 2013 by JEDEC), LPDDR4 (LOW POWER DOUBLE DATA RATE (LPDDR) version 4, JESD209-4, originally published by JEDEC in August 2014, or other types of DRAMS. In particular embodiments, the DRAM complies with a standard promulgated by the Joint Electron Device Engineering Council (JEDEC), such as JESD79F for DDR Double Data Rate (DDR) SDRAM, JESD79-2F for DDR2 SDRAM, JESD79-3F for DDR3 SDRAM, or JESD79-4A for DDR4 SDRAM (these standards are available at www.jedec.org). Of course, in other embodiments, other types of volatile memory in the other embodiments.
Illustratively, the volatile memory 120 is much smaller than the non-volatile memory 110 and is used during operation of the solid state drive 100 to store various metadata associated with the data stored in the non-volatile memory 110 such as a logical-to-physical indirection table and a memory context table, which identifies the read count, write count, and invalidation level of the data stored in the non-volatile memory 110 as discussed below. Of course, additional and/or other data may be stored in the volatile memory 120 in other embodiments. Due to the type of memory of the volatile memory 120 (e.g., DRAM memory), memory accesses to the volatile memory 120 may be faster than those to the non-volatile memory 110. In some embodiments, the solid state drive 100 may not include the volatile memory 120 and, in such embodiments, the meta-data associated with the data stored in the non-volatile memory 110 may instead be stored in the non-volatile memory 110.
In some embodiments, the solid state drive 100 may also include a power fail response circuit 130. The power fail response circuit 130 is configured to provide backup power to certain components of the solid state drive 100 for a period of time in the event that power to the solid state drive 100 is unexpectedly lost. The supply of backup power allows the solid state drive to copy data (e.g., the logical-to-physical indirection table, the memory context table, etc.) stored in the volatile memory 120 to the non-volatile memory 110 and/or perform other emergency procedures. To do so, the power fail response circuit 130 may include an amount of backup energy storage, such as a bank of capacitors of the like, to provide the backup power.
Referring now to
The processor 610 may be embodied as any type of processor capable of performing the functions described herein. For example, the processor 610 may be embodied as a single or multi-core processor(s), digital signal processor, microcontroller, or other processor or processing/controlling circuit. Similarly, the memory 614 may be embodied as any type of volatile or non-volatile memory or data storage capable of performing the functions described herein. The memory 614 is communicatively coupled to the processor 610 via the I/O subsystem 612, which may be embodied as circuitry and/or components to facilitate input/output operations with the processor 610, the memory 614, the solid state drive 100 (in embodiments in which the solid state drive 100 forms a portion of the computing device 602), and other components of the computing device 602. For example, the I/O subsystem 612 may be embodied as, or otherwise include, memory controller hubs, input/output control hubs, firmware devices, communication links (i.e., point-to-point links, bus links, wires, cables, light guides, printed circuit board traces, etc.) and/or other components and subsystems to facilitate the input/output operations.
The remote storage device 604 may be embodied as any type of data storage device remote capable of operating remotely from the computing device 602. For example, the remote storage device 604 may be embodied as a remote data server, remote computing device, and/or other electronic device capable of managing access requests to the local solid state drive 100. In some embodiments, for example, the remote storage device 604 may be embodied as a remote data server with which the computing device 602 communicates to access data stored on the solid state drive 100 of the remote storage device 604.
Referring now to
The memory configuration module 702 is configured to initialize the non-volatile memory 110. For example, the memory configuration module 702 may be configured to establish the read cache 300 in the non-volatile memory 110 at a default size. To do so, as discussed above, the memory configuration module 702 may convert a region of the non-volatile memory 110 corresponding to the read cache 300 from TLC or MLC mode to SLC mode. The memory configuration module 702 may also establish the write buffer 302 in the non-volatile memory 110 in a similar manner.
The write buffer management module 704 is configured to manage operation of the write buffer 302 of the non-volatile memory 110 during operation. To do so, the write buffer management module 704 is configured to handle write access requests to the non-volatile memory 110 by storing new data associated with such requests to the write buffer 302. That is, all new data written to the illustrative solid state drive 100 is first stored in the write buffer 302. The write buffer management module 704 is also configured to update a write count associated with the written data and stored in a memory context table 740, which is stored in the volatile memory 120 during operation of the solid state drive 100.
Data written to the write buffer 302 remains in the write buffer 302 until the size of the write buffer reaches a reference threshold value. At such time, the write buffer management module 704 is configured to evict data from the write buffer to maintain the size of the write buffer 302 below the reference threshold value. The evicted data, which is controlled by a write buffer eviction policy 710, may be moved to the user data region 306 or the read cache 300, depending on a read count associated with the evicted data. For example, in the illustrative embodiment, the write buffer management module 704 may determine a read count and write count associated with the evicted data. If the ratio of the read count-to-write count is greater than a reference threshold value (or the write count-to-read count ratio is less than a reference threshold value), the write buffer management module 704 may move the evicted data to the read cache 300. Otherwise, the write buffer management module 704 is configured to move the evicted data to the user data region 306. The particular reference threshold used to determine when to evict data from the write buffer and where to move the evicted data may be stored in the write buffer eviction policy 710, which may be maintained by the write buffer management module 704.
Similar to the write buffer management module 704, the read cache management module 706 is configured to manage operation of the read cache 300 of the non-volatile memory 110 during operation. To do so, the read cache management module 706 is configured to handle read access requests to the non-volatile memory 110 by retrieving requested data from the non-volatile memory 110. As discussed above, data that is read often is stored in the read cache 300, but data may also be read from the user data region 306 and/or the write buffer 302 (e.g., if the data stored in the write buffer 302 is the freshest version of the requested data). If the received read request includes logical addressing of the requested memory location, the read cache management module 706 may identify the physical location of the requested data by accessing a logical-to-physical indirection table 742 stored in the volatile memory 120 during operation of the solid state drive 100. The read cache management module 706 is also configured to update a read count associated with the read data and stored in the memory context table 740.
To maintain the data of the read cache 300, the read cache management module 706 includes a read cache insertion module 720 and a read cache eviction module 722. The read cache insertion module 720 is configured to identify data for insertion into the read cache 300 based on a read count associated with the data. That is, the read cache insertion module 720 is configured to identify data having a relatively high read count (and corresponding low write count) for movement to the read cache 300. To do so, the read cache insertion module 720 may be configured to analyze the data in physical memory or in logical memory. For example, the read cache insertion module 720 may monitor a read count of a memory band in physical memory associated with the data and select the data for insertion to the read cache 300 if the read count is greater than, or otherwise satisfies, an insertion reference threshold value. The read cache insertion module 720 may also analyze the level of invalidation of the memory band in determining whether to move the data to the read cache 300. Additionally or alternatively, the read cache insertion module 720 may be configured to monitor a read count and a write count of a logical block addressed (LBA) range associated with the data to determine whether to move the data to the read cache 300. To do so, the read cache insertion module 720 may determine whether the read count-to-write count ratio of the identified data is greater than, or otherwise satisfies, an insertion reference threshold value. Of course, the read cache insertion module 720 may conversely analyze the write count-to-read count ratio to determine whether such ratio is below a reference threshold value. The particular reference threshold values used to identify the data to be inserted into the read cache 300 may be stored in a read cache insertion policy 730 managed by the read cache insertion module 720. If the read cache insertion module 720 determines that a particular piece of data satisfies the read cache insertion policy 730, the read cache insertion module 720 may move the data to the read cache 300.
The read cache eviction module 722 is configured to identify data currently stored in the read cache 300 for eviction therefrom based on a read count associated with the data. That is, the read cache eviction module 722 is configured to identify data having a relatively low read count (or corresponding high write count) for movement from the read cache 300. To do so, the read cache eviction module 722 may be configured to analyze the data in physical memory or in logical memory. For example, the read cache eviction module 722 may monitor a read count of a memory band in physical memory associated with the data and select the data for eviction from the read cache 300 if the read count is less than, or otherwise satisfies, an eviction reference threshold value. The read cache eviction module 722 may also analyze the level of invalidation of the memory band in determining whether to move the data from the read cache 300. Additionally or alternatively, the read cache eviction module 722 may be configured to monitor a read count and a write count of a logical block addressed (LBA) range associated with the data to determine whether to move the data from the read cache 300. To do so, the read cache eviction module 722 may determine whether the read count-to-write count ratio is less than, or otherwise satisfies, an eviction reference threshold value. Of course, the read cache eviction module 722 may conversely analyze the write count-to-read count ratio to determine whether such ratio is greater than a reference threshold value. The particular reference threshold values used to identify the data to be evicted from the read cache 300 may be stored in a read cache eviction policy 732 managed by the read cache eviction module 722. If the read cache eviction module 722 determines that a particular piece of data satisfies the read cache eviction policy 732, the read cache eviction module 722 may move the data from the read cache 300 to the user data region 306. Any incoming writes from the host 750 to a specific logical address will cause that logical address to be evicted by invaliding the previous copy in the read cache 300.
The write buffer management module 704 and/or read cache management module 706 are also configured to respond to memory access requests received from a host 750. The host 750 may be embodied as any type of device or service requesting a read or write access to non-volatile memory 110 of the solid state drive 100. For example, in some embodiments, the host 750 may be embodied as a software application executed by the computing device 602.
Referring now to
In block 810, the drive controller 102 establishes the read cache 300 in the non-volatile memory 110. To do so, the drive controller 102 may determine a default or initial size of the read cache 300 in block 812. In some embodiments, the initial size of the read cache 300 may be a predetermined or hardcoded value or may be selectable or otherwise changeable during the initialization procedure. In block 814, similar to the write buffer 302, the drive controller 102 converts a memory region of the non-volatile memory 110 corresponding to the read cache 300 from a TLC or MLC mode to the SLC mode. As discussed above, memory regions of the non-volatile memory 110 configured in TLC or MLC may store multiple bits of data per memory cell, while those regions configured in SLC mode store a single bit of data per memory cell. However, access to memory regions configured in SLC mode may be faster than memory regions configured in TLC or MLC mode.
After the drive controller 102 has established the write buffer 302 and the read cache 300, the method 800 advances to block 816 in which the drive controller 102 converts the unused memory space 304 of the non-volatile memory 110 (i.e., memory regions other than the read cache 300, the write buffer 302, and the user data region 306) from TLC or MLC mode to the SLC mode. Alternatively, in some embodiments, the unused memory space 304 may remain in TLC or MLC mode and block 816 may be skipped.
Referring now to
Subsequently, in block 912, the drive controller 102 determines whether the size of the write buffer has reached a threshold value. If so, the method 900 advances to block 914 in which the drive controller 102 evicts data from the write buffer 302 to reduce the size of the write buffer 302. To do so, the drive controller 102 determines which data to evict in block 916. The drive controller 102 may utilize any suitable methodology to determine the data to be evicted from the write buffer 302. For example, in some embodiments, the oldest data stored in the write buffer 302 is selected for eviction. In other embodiments, the data having the highest read count is selected for eviction. Of course, other parameters and criteria may be used in other embodiments to select the data for eviction from the write buffer 302. Once the data has been selected for eviction, the drive controller 102 may determine a new memory region of the non-volatile memory 110 to which the evicted data is to be moved in block 918. To do so, in the illustrative embodiment, the drive controller 102 may determine a read count associated with the data in block 920 and a write count associated with the data in block 922. The drive controller 102 may subsequently determine the new memory region for the evicted data based on the read-to-write count ratio (or the write-to-read count ratio) in block 924. For example, if the read-to-write count ratio is greater than a reference threshold value (e.g., the data is read much more than updated), the drive controller 102 may select the read cache 300 as the destination for the evicted data. However, if the read-to-write ratio is less than the reference threshold value, the drive controller 102 may select the user data region 306 as the destination for the evicted data. Regardless, in block 926, the drive controller 102 moves the evicted data from the write buffer 302 to the selected memory region. For example, in block 928, the drive controller 102 may move the evicted data from the write buffer 302 to the read cache 300 of the non-volatile memory 110. Alternatively, in block 930, the drive controller 102 may move the evicted data from the write buffer 302 to the user data region 306 of the non-volatile memory 110.
After the data has been evicted in block 914 or if no data eviction is required in block 912, the method 900 loops back to block 902 in which the drive controller 102 continues to monitor for memory access requests. Referring back to block 904, if a received memory access request is not a write request, the method 900 advances to block 932 in which the drive controller determines whether the memory access request is a read request. If so, the method 900 advances to block 934 in which the drive controller 102 determines the memory region of the requested data. To do so, if the memory request utilizes logical block addressing, the drive controller 102 may reference the logical-to-physical indirection table 742 to determine the physical location of the requested data. Subsequently, in block 936, the drive controller 102 reads the requested data from the determine memory region. For example, the drive controller 102 may read the requested data from the read cache 300 in block 938, from the write buffer 302 in block 940, or from the user data region 306 in block 942. Additionally, in block 944, the drive controller 102 may update the read count of the requested data. For example, the drive controller 102 may update the read count of a band of physical memory or a LBA range associated with the data and stored in the memory context table 740. Regardless, after the requested data has been retrieved, the method 900 loops back to block 902 in which the drive controller 102 continues to monitor for memory access requests.
Referring now to
If the drive controller 102 determines additional data is to be inserted into the read cache 300, the method 1000 advances to block 1004 in which the drive controller 102 selects the data to be moved into the read cache 300 based on a read count associated with the data and the read cache insertion policy 730. For example, the drive controller 102 may select data for insertion into the read cache 300 if the data has a read count above an insertion reference threshold identified in the read cache insertion policy 730. To do so, the drive controller 102 may analyze the data in physical memory or in logical memory. For example, in block 1006, the drive controller 102 may select data for insertion based on a read count of a memory band in physical memory associated with the data and select the data for insertion into the read cache 300 if the read count is greater than, or otherwise satisfies, the insertion reference threshold value. Additionally, in some embodiments in block 1008, the drive controller 102 may analyze the level of the level of invalidation of the memory band in determining whether to select the associated data for insertion into the read cache 300. In other embodiments, the drive controller 102 may select the data for insertion in to the read cache 300 based on a read count and a write count of a logical block addressed (LBA) range associated with the data in block 1010. To do so, the drive controller may determine whether the read count-to-write count ratio of the identified data is greater than, or otherwise satisfies, the insertion reference threshold value identified in the read cache insertion policy 730. Of course, the drive controller 102 may conversely analyze the write count-to-read count ratio to determine whether such ratio is below a reference threshold value.
As discussed above, the read count, write count, and invalidation levels of the memory regions associated with the data may be stored in the memory context table 740. An illustrative logical memory context table 1100 is shown in
Referring back to
Referring now to
After the drive controller 102 has selected the data for eviction from the read cache 300, the method 1200 advances to block 1212 in which the drive controller moves the evicted data from the read cache 300 to the user data region 306. After the drive controller 102 has moved the evicted data from the read cache 300, the method 1200 loops back to block 1202 in which the drive controller 102 continues to monitor the size of the unused space 304 of the non-volatile memory 110.
Illustrative examples of the technologies disclosed herein are provided below. An embodiment of the technologies may include any one or more, and any combination of, the examples described below.
Example 1 includes a solid state drive for managing a read cache, the solid state drive comprising a non-volatile memory having a write buffer, a read cache, and a user data region; and a drive controller configured to convert a memory region of the non-volatile memory corresponding to the read cache to a single-level cell (SLC) mode and manage data in the read cache based on a read count associated with the data.
Example 2 includes the subject matter of Example 1, and wherein to convert the memory region of the non-volatile memory comprises to convert the memory region of the non-volatile memory corresponding to the read cache from a triple-level cell (TLC) mode or a multi-level cell (MLC) mode to the SLC mode.
Example 3 includes the subject matter of any of Examples 1 and 2, and wherein to maintain the data in the read cache comprises to insert additional data from another region of the non-volatile memory into the read cache based on a read count associated with the additional data.
Example 4 includes the subject matter of any of Examples 1-3, and wherein to insert the additional data comprises to increase a size of the read cache of the non-volatile memory.
Example 5 includes the subject matter of any of Examples 1-4, and wherein to insert the additional data comprises insert the additional data from the another region of the non-volatile memory into the read cache in response to the read count associated with the additional data being greater than a reference threshold value.
Example 6 includes the subject matter of any of Examples 1-5, and wherein to insert the additional data comprises to determine a read count of a memory band of physical memory of non-volatile memory corresponding to the additional data; and move the additional data from the memory band to the read cache in response to the read count of the memory band being greater than a reference threshold value.
Example 7 includes the subject matter of any of Examples 1-6, and wherein the drive controller is further to determine a level of invalidation of the memory band, wherein to move the additional data comprises to move the additional data from the memory band to the read cache in response to (i) the read count of the memory band being greater than a read count reference threshold value and (ii) the level of invalidation of the memory band being less than an invalidation reference threshold value.
Example 8 includes the subject matter of any of Examples 1-7, and wherein to insert the additional data comprises to determine a read count of a logic block addressing (LBA) range of the non-volatile memory corresponding to the additional data; determine a write count of the LBA range of the non-volatile memory corresponding to the additional data; determine a read-write count ratio based on the read count and the write count of the LBA range of the non-volatile memory corresponding to the additional data; and move the additional data from the LBA range to the read cache in response to the read-write count ratio being greater than a reference threshold value.
Example 9 includes the subject matter of any of Examples 1-8, and wherein to maintain the data in the read cache comprises to evict selected data from the read cache based on a read count associated with the selected data.
Example 10 includes the subject matter of any of Examples 1-9, and wherein to evict the selected data from the read cache comprises to evict the selected data from the read cache in response to a size of an unused region of the non-volatile memory being less than a threshold size value.
Example 11 includes the subject matter of any of Examples 1-10, and wherein to evict the selected data from the read cache comprises to evict the selected data from the read cache in response to the read count associated with the selected data being less than a reference threshold value.
Example 12 includes the subject matter of any of Examples 1-11, and wherein evict the selected data comprises to determine a read count of a memory band of physical memory of non-volatile memory corresponding to the selected data; and move the selected data from the read cache in response to the read count of the memory band being less than a reference threshold value.
Example 13 includes the subject matter of any of Examples 1-12, and wherein the drive controller is further to determine a level of invalidation of the memory band, wherein to move the selected data comprises to move the selected data from the read cache in response to (i) the read count of the memory band being less than a read count reference threshold value or (ii) the level of invalidation of the memory band being greater than an invalidation reference threshold value.
Example 14 includes the subject matter of any of Examples 1-13, and wherein to evict the selected data comprises to determine a read count of a logic block addressing (LBA) range of the non-volatile memory corresponding to the selected data; determine a write count of the LBA range of the non-volatile memory corresponding to the selected data; determine a read-write count ratio based on the read count and the write count of the LBA range of the non-volatile memory corresponding to the selected data; and move the selected data from the LBA range in response to the read-write count ratio being less than a reference threshold value.
Example 15 includes the subject matter of any of Examples 1-14, and wherein to evict the selected data from the read cache comprises to move the selected data from the read cache to a user data region of the non-volatile memory based on a write count associated with the selected data.
Example 16 includes the subject matter of any of Examples 1-15, and wherein the drive controller is further to receive a memory read request for target data stored in the non-volatile memory; determine whether the target data is stored in the read cache; and direct the memory read request to the read cache in response to a determination that the target data is stored in the read cache.
Example 17 includes the subject matter of any of Examples 1-16, and wherein the drive controller is further to evict selected data from a write buffer of the non-volatile memory to the read cache based on a read count associated with the selected data.
Example 18 includes the subject matter of any of Examples 1-17, and wherein to evict the selected data from the write buffer comprises to determine a read count of the selected data; determine a write count of the selected data; determine a read-write count ratio based on the read count and the write count of the selected data; and move the selected data from the write buffer to the read cache in response to the read-write count ration being greater than a reference threshold value.
Example 19 includes a method for managing a read cache of a solid state drive, the method comprising establishing, by a drive controller of the solid state drive, a read cache in a non-volatile memory of the solid state drive, wherein establishing the read cache comprises converting a memory region of the non-volatile memory corresponding to the read cache to a single-level cell (SLC) mode; and maintaining, by the drive controller, data in the read cache based on a read count associated with the data.
Example 20 includes the subject matter of Example 19, and wherein converting the memory region of the non-volatile memory comprises converting the memory region of the non-volatile memory corresponding to the read cache from a triple-level cell (TLC) mode or a multi-level cell (MLC) mode to the SLC mode.
Example 21 includes the subject matter of any of Examples 19 and 20, and wherein maintaining the data in the read cache comprises inserting additional data from another region of the non-volatile memory into the read cache based on a read count associated with the additional data.
Example 22 includes the subject matter of any of Examples 19-21, and wherein inserting the additional data comprises increasing a size of the read cache of the non-volatile memory.
Example 23 includes the subject matter of any of Examples 19-22, and wherein inserting the additional data comprises inserting the additional data from the another region of the non-volatile memory into the read cache in response to the read count associated with the additional data being greater than a reference threshold value.
Example 24 includes the subject matter of any of Examples 19-23, and wherein inserting the additional data comprises determining a read count of a memory band of physical memory of non-volatile memory corresponding to the additional data; and moving the additional data from the memory band to the read cache in response to the read count of the memory band being greater than a reference threshold value.
Example 25 includes the subject matter of any of Examples 19-24, and further including determining a level of invalidation of the memory band, wherein moving the additional data comprises moving the additional data from the memory band to the read cache in response to (i) the read count of the memory band being greater than a read count reference threshold value and (ii) the level of invalidation of the memory band being less than an invalidation reference threshold value.
Example 26 includes the subject matter of any of Examples 19-25, and wherein inserting the additional data comprises determining a read count of a logic block addressing (LBA) range of the non-volatile memory corresponding to the additional data; determining a write count of the LBA range of the non-volatile memory corresponding to the additional data; determining a read-write count ratio based on the read count and the write count of the LBA range of the non-volatile memory corresponding to the additional data; and moving the additional data from the LBA range to the read cache in response to the read-write count ratio being greater than a reference threshold value.
Example 27 includes the subject matter of any of Examples 19-26, and wherein maintaining the data in the read cache comprises evicting selected data from the read cache based on a read count associated with the selected data.
Example 28 includes the subject matter of any of Examples 19-27, and wherein evicting the selected data from the read cache comprises evicting the selected data from the read cache in response to a size of an unused region of the non-volatile memory being less than a threshold size value.
Example 29 includes the subject matter of any of Examples 19-28, and wherein evicting the selected data from the read cache comprises evicting the selected data from the read cache in response to the read count associated with the selected data being less than a reference threshold value.
Example 30 includes the subject matter of any of Examples 19-29, and wherein evicting the selected data comprises determining a read count of a memory band of physical memory of non-volatile memory corresponding to the selected data; and moving the selected data from the read cache in response to the read count of the memory band being less than a reference threshold value.
Example 31 includes the subject matter of any of Examples 19-30, and further including determining a level of invalidation of the memory band, wherein moving the selected data comprises moving the selected data from the read cache in response to (i) the read count of the memory band being less than a read count reference threshold value or (ii) the level of invalidation of the memory band being greater than an invalidation reference threshold value.
Example 32 includes the subject matter of any of Examples 19-31, and wherein evicting the selected data comprises determining a read count of a logic block addressing (LBA) range of the non-volatile memory corresponding to the selected data; determining a write count of the LBA range of the non-volatile memory corresponding to the selected data; determining a read-write count ratio based on the read count and the write count of the LBA range of the non-volatile memory corresponding to the selected data; and moving the selected data from the LBA range in response to the read-write count ratio being less than a reference threshold value.
Example 33 includes the subject matter of any of Examples 19-32, and wherein evicting the selected data from the read cache comprises moving the selected data from the read cache to a user data region of the non-volatile memory based on a write count associated with the selected data.
Example 34 includes the subject matter of any of Examples 19-33, and further including receiving, by the drive controller, a memory read request for target data stored in the non-volatile memory; determining, by the drive controller, whether the target data is stored in the read cache; and directing, by the drive controller, the memory read request to the read cache in response to a determination that the target data is stored in the read cache.
Example 35 includes the subject matter of any of Examples 19-34, and further including evicting, by the drive controller, selected data from a write buffer of the non-volatile memory to the read cache based on a read count associated with the selected data.
Example 36 includes the subject matter of any of Examples 19-35, and wherein evicting the selected data from the write buffer comprises determining a read count of the selected data; determining a write count of the selected data; determining a read-write count ratio based on the read count and the write count of the selected data; and moving the selected data from the write buffer to the read cache in response to the read-write count ration being greater than a reference threshold value.
Example 37 includes one or more machine-readable storage media comprising a plurality of instructions stored thereon that, when executed, cause a solid state drive to perform the method of any of Examples 19-36.
Example 38 includes a solid state drive for managing a read cache, the solid state drive comprising a non-volatile memory having a write buffer and a user data region; and a drive controller configured to convert a portion of the non-volatile memory corresponding to a read cache from the user data region to a region having a higher memory access speed and memory endurance than the user data region.
Example 39 includes the subject matter of Example 38, and wherein the drive controller is further to increase the size of the read cache by converting additional regions of the non-volatile memory to the region having a higher memory access speed and memory endurance than the user data region based on a present size of the user data region.
Example 40 includes the subject matter of any of Examples 38 and 39, and wherein the drive controller is further to insert additional data from another region of the non-volatile memory into the read cache based on a read count associated with the additional data.
Example 41 includes the subject matter of any of Examples 38-40, and wherein the drive controller is further to evict selected data from the read cache based on a read count associated with the selected data.
Example 42 includes the subject matter of any of Examples 38-41, and wherein to evict the selected data from the read cache comprises to move the selected data from the read cache to a user data region of the non-volatile memory based on a write count associated with the selected data.
Example 43 includes the subject matter of any of Examples 38-42, and wherein the drive controller is further to receive a memory read request for target data stored in the non-volatile memory; determine whether the target data is stored in the read cache; and direct the memory read request to the read cache in response to a determination that the target data is stored in the read cache.
Example 44 includes the subject matter of any of Examples 38-43, and wherein the drive controller is further to evict selected data from a write buffer of the non-volatile memory to the read cache based on a read count associated with the selected data.
Example 45 includes a solid state drive for managing a read cache, the solid state drive comprising means for establishing a read cache in a non-volatile memory of the solid state drive, wherein establishing the read cache comprises converting a memory region of the non-volatile memory corresponding to the read cache to a single-level cell (SLC) mode; and means for managing data in the read cache based on a read count associated with the data.
Example 46 includes the subject matter of Example 45, and wherein the means for converting the memory region of the non-volatile memory comprises means for converting the memory region of the non-volatile memory corresponding to the read cache from a triple-level cell (TLC) mode or a multi-level cell (MLC) mode to the SLC mode.
Example 47 includes the subject matter of any of Examples 45 and 46, and wherein the means for managing the data in the read cache comprises means for inserting additional data from another region of the non-volatile memory into the read cache based on a read count associated with the additional data.
Example 48 includes the subject matter of any of Examples 45-47, and wherein the means for inserting the additional data comprises means for increasing a size of the read cache of the non-volatile memory.
Example 49 includes the subject matter of any of Examples 45-48, and wherein the means for inserting the additional data comprises means for inserting the additional data from the another region of the non-volatile memory into the read cache in response to the read count associated with the additional data being greater than a reference threshold value.
Example 50 includes the subject matter of any of Examples 45-49, and wherein the means for inserting the additional data comprises means for determining a read count of a memory band of physical memory of non-volatile memory corresponding to the additional data; and means for moving the additional data from the memory band to the read cache in response to the read count of the memory band being greater than a reference threshold value.
Example 51 includes the subject matter of any of Examples 45-50, and further including means for determining a level of invalidation of the memory band, wherein the means for moving the additional data comprises means for moving the additional data from the memory band to the read cache in response to (i) the read count of the memory band being greater than a read count reference threshold value and (ii) the level of invalidation of the memory band being less than an invalidation reference threshold value.
Example 52 includes the subject matter of any of Examples 45-51, and wherein the means for inserting the additional data comprises means for determining a read count of a logic block addressing (LBA) range of the non-volatile memory corresponding to the additional data; means for determining a write count of the LBA range of the non-volatile memory corresponding to the additional data; means for determining a read-write count ratio based on the read count and the write count of the LBA range of the non-volatile memory corresponding to the additional data; and means for moving the additional data from the LBA range to the read cache in response to the read-write count ratio being greater than a reference threshold value.
Example 53 includes the subject matter of any of Examples 45-52, and wherein the means for managing the data in the read cache comprises means for evicting selected data from the read cache based on a read count associated with the selected data.
Example 54 includes the subject matter of any of Examples 45-53, and wherein the means for evicting the selected data from the read cache comprises means for evicting the selected data from the read cache in response to a size of an unused region of the non-volatile memory being less than a threshold size value.
Example 55 includes the subject matter of any of Examples 45-54, and wherein the means for evicting the selected data from the read cache comprises means for evicting the selected data from the read cache in response to the read count associated with the selected data being less than a reference threshold value.
Example 56 includes the subject matter of any of Examples 45-55, and wherein the means for evicting the selected data comprises means for determining a read count of a memory band of physical memory of non-volatile memory corresponding to the selected data; and means for moving the selected data from the read cache in response to the read count of the memory band being less than a reference threshold value.
Example 57 includes the subject matter of any of Examples 45-56, and further including means for determining a level of invalidation of the memory band, wherein the means for moving the selected data comprises means for moving the selected data from the read cache in response to (i) the read count of the memory band being less than a read count reference threshold value or (ii) the level of invalidation of the memory band being greater than an invalidation reference threshold value.
Example 58 includes the subject matter of any of Examples 45-57, and wherein the means for evicting the selected data comprises means for determining a read count of a logic block addressing (LBA) range of the non-volatile memory corresponding to the selected data; means for determining a write count of the LBA range of the non-volatile memory corresponding to the selected data; means for determining a read-write count ratio based on the read count and the write count of the LBA range of the non-volatile memory corresponding to the selected data; and means for moving the selected data from the LBA range in response to the read-write count ratio being less than a reference threshold value.
Example 59 includes the subject matter of any of Examples 45-58, and wherein the means for evicting the selected data from the read cache comprises means for moving the selected data from the read cache to a user data region of the non-volatile memory based on a write count associated with the selected data.
Example 60 includes the subject matter of any of Examples 45-59, and further including means for receiving a memory read request for target data stored in the non-volatile memory; means for determining whether the target data is stored in the read cache; and means for directing the memory read request to the read cache in response to a determination that the target data is stored in the read cache.
Example 61 includes the subject matter of any of Examples 45-60, and further including means for evicting selected data from a write buffer of the non-volatile memory to the read cache based on a read count associated with the selected data.
Example 62 includes the subject matter of any of Examples 45-61, and wherein the means for evicting the selected data from the write buffer comprises means for determining a read count of the selected data; means for determining a write count of the selected data; means for determining a read-write count ratio based on the read count and the write count of the selected data; and means for moving the selected data from the write buffer to the read cache in response to the read-write count ration being greater than a reference threshold value.