Certain embodiments of the present description relate generally to management of memory resources.
In contrast to volatile memory, non-volatile memory can store data that persists even after the power is removed from the non-volatile memory. However, the input/output performance of non-volatile memory is frequently slower than that of volatile memory such as a dynamic random access memory (DRAM) host memory. Accordingly, a portion of the faster host memory is frequently allocated to the slower non-volatile memory for use as a buffer.
Embodiments of the present disclosure are illustrated by way of example, and not by way of limitation, in the figures of the accompanying drawings in which like reference numerals refer to similar elements.
In the description that follows, like components have been given the same reference numerals, regardless of whether they are shown in different embodiments. To illustrate one or more embodiments of the present disclosure in a clear and concise manner, the drawings may not necessarily be to scale and certain features may be shown in somewhat schematic form. Features that are described or illustrated with respect to one embodiment may be used in the same way or in a similar way in one or more other embodiments or in combination with or instead of features of other embodiments.
In various computer architectures and data transfer protocols, such as Non-Volatile Memory Express (NVMe), for example, a portion of a host memory may be allocated to storage such as a solid state drive, to permit the associated storage to use the allocated portion of host memory in connection with storage operations. A host memory such as a dynamic random-access memory (DRAM) or nonvolatile random access memory (NVRAM) host memory, for example, is typically capable of performing input/output operations more quickly than non-volatile storage such as disk drives, or even solid state storage drives. Accordingly, a portion of the host memory may be allocated to a storage drive for use as a buffer to cache data which can then be accessed more quickly than data stored in the storage itself.
One example of the use of such a host memory buffer is to cache portions of an indirection look-up table such as a logical-to-physical (L2P) table mapping logical addresses to physical address of the associated storage. Such a table may be used for wear-leveling purposes, for example. More specifically, non-volatile solid state memory bitcells may wear out after a certain number of access operations such as write operations to the same bitcells. Accordingly, non-volatile solid state memory frequently incorporates wear leveling logic which employs algorithms to occasionally redirect selected write operations from one physical location to another to more evenly distribute those write operations across bitcells. As a result, write operations determined to be directed too frequently to the same physical location may be redirected using an L2P table to a different physical location to prevent or defer wearing out the bitcells at any one particular physical address.
Accordingly, allocating a portion of the host memory for use as a buffer by a solid state drive, allows the solid state drive to write-through cache its indirection L2P look-up table in the allocated portion of the host memory. In known systems, a particular portion of the host memory is allocated to a solid state drive before input/output operations to the solid state drive begin, and typically remains fixed in size as the system operates. Thus, the buffer size allocated to each solid state drive or other memory device remains unchanged in size in the host memory.
However, it is appreciated herein that the various solid state drives or other storage or memory devices of a system are commonly used for different purposes and at different times. For example, a boot drive may perform the majority of its input/output operations in the first few minutes of operation while the system boots itself, or once memory paging is initiated. Conversely, another drive storing application programs and data would typically perform the majority of its input/output operations after the system boot operations are complete.
It is further appreciated that in system implementations in which an L2P-cache is stored for a solid state drive in a host memory buffer allocated to the solid state drive, the performance of the solid state drive may depend significantly upon the size of the host memory buffer allocated to that solid state drive. Because the allocation is static in known systems, it is recognized herein that the fixed size of the host memory buffer may become too small for the solid state drive as the level of input/output activity rises for the solid state drive. As a result, performance of the solid state drive may be adversely affected by being allocated a host memory buffer which is too small for its current workload.
Conversely it is further recognized herein that the fixed size of the host memory buffer in known systems may become too large for the solid state drive as the level of input/output activity falls for the solid state drive. As a result, host memory resources may be poorly utilized for a solid state drive that does not need them while the performance levels of more active solid state drives suffer due to insufficient buffer resources allocated to the more active drives.
In one aspect of the present description, dynamic host memory buffer allocation is employed in a system of one or more computers configured to perform particular operations or actions of dynamic host memory buffer allocation by virtue of having software, firmware, hardware, or a combination of them installed on the system that in operation causes or cause the system to perform the actions. One or more computer programs can be configured to perform particular operations or actions of dynamic host memory buffer allocation by virtue of including instructions that, when executed by data processing apparatus, cause the apparatus to perform the actions.
One general aspect of dynamic host memory buffer allocation in accordance with the present description includes sensing a level of activity of a non-volatile memory, and dynamically allocating a portion of a host memory as a buffer to the non-volatile memory, as a function of a sensed level of activity of the non-volatile memory. For example, as activity directed to one non-volatile memory increases relative to another non-volatile memory, portions of host memory previously allocated to the non-volatile memory having decreasing activity, may be dynamically re-allocated to the non-volatile memory having increased activity. As explained in greater detail below, such dynamic allocation of host memory buffers as a function of sensed levels of activity, can improve the efficiency of the allocation of memory resources and improve system performance. Other embodiments of this aspect include corresponding computer systems, methods, apparatus, and computer programs recorded on one or more computer storage devices, each configured to perform dynamic host memory buffer allocation in accordance with the present description.
As used herein, the term dynamic includes operations performed in parallel with ongoing input/output operations to the associated memory. Accordingly, a host memory buffer allocation may be re-allocated while the associated memory is in use. As such the re-allocation may be performed for a particular memory without stopping input/output operations to the associated memory. Furthermore, the re-allocation may be performed for a particular memory without disrupting normal operation of the system or the associated memory. Thus, the re-allocation may be performed without rebooting the system, for example.
Implementations may further include one or more of the following features. In one aspect, allocations of portions of a host memory as buffers, may be dynamically re-balanced as a function of sensed respective levels of activity of the associated non-volatile memories. In one embodiment, re-balancing allocations includes shifting an allocation of a portion of a host memory from a one non-volatile memory to a second non-volatile memory as a function a sensed level of activity of the second non-volatile memory being greater than a sensed level of activity of the first non-volatile memory.
In another feature, a range of addresses of a host memory buffer allocated to one non-volatile memory, may be identified as storing inactive data. Further, a range of addresses of a host memory buffer identified as storing inactive data, may be shifted from a host memory buffer for one non-volatile memory to a host memory buffer for another non-volatile memory. As used herein, the term “inactive” data refers to data which is invalid or has been superseded by more current data. Accordingly, active data includes data which is not inactive, that is, data which is valid and has not been superseded by more current data.
In one embodiment, a host memory buffer for an associated solid state drive may store a portion of a logical-to-physical (L2P) address look-up table data structure for the associated solid state drive. For example, a logical-to-physical address look-up table data structure for an associated solid state drive may have logical-to-physical address mapping entries cached in the host memory buffer associated with the solid state drive. In one aspect, sensing respective levels of activity of various non-volatile memories may include sensing proportionate rates of unsuccessful attempts, such as cache misses, to look-up logical-to-physical address mapping entries of the logical-to-physical address look-up table data structures for the associated solid state drives. Accordingly, re-balancing allocations may include re-balancing allocations of portions of a host memory buffer to solid state drives as a function of sensed proportionate rates of unsuccessful attempts to look-up logical-to-physical address mapping entries found to be missing from the host memory buffer for associated solid state drives. Although described in connection with caching portions of an indirection look-up table such as a logical-to-physical (L2P) table mapping logical addresses to physical address of the associated storage, it is appreciated that dynamic host memory buffer allocation in accordance with the present description may be used in connection with other uses of a host memory buffer.
In another embodiment, the sensing respective levels of activity of various non-volatile memories may include sensing proportionate shares of quantities of read operations directed to the non-volatile memories. Accordingly, re-balancing allocations may include re-balancing allocations of portions of a host memory buffer as a function of sensed proportionate shares of quantities of read operations directed to the plurality of non-volatile memories.
In still another embodiment, sensing respective levels of activity of a plurality of non-volatile memories may include sensing proportionate shares of quantities of unique logical block addresses of read operations directed to the plurality of non-volatile memories. Accordingly, re-balancing allocations may include re-balancing allocations of portions of a host memory buffer as a function of sensed proportionate shares of quantities of unique logical block addresses of read operations directed to the plurality of non-volatile memories.
Implementations of the described techniques may include hardware, a method or process, or computer software on a computer-accessible medium.
It is appreciated that dynamic host memory buffer allocation in accordance with the present description may be applied to a variety of host, storage and other memory devices such as for example, memory devices that use chalcogenide phase change material (e.g., chalcogenide glass), three-dimensional (3D) crosspoint memory, or memory that incorporates memristor technology. Additional memory devices which may benefit from dynamic host memory buffer allocation in accordance with the present description may include other types of byte-addressable, write-in-place non-volatile memory, ferroelectric transistor random-access memory (FeTRAIVI), nanowire-based non-volatile memory, Magnetoresistive random-access memory (MRAM), Spin Transfer Torque (STT)-MRAM, Phase Change Memory (PCM), storage class memory (SCM), universal memory, Ge2Sb2Te5, programmable metallization cell (PMC), resistive memory (RRAM), RESET (amorphous) cell, SET (crystalline) cell, PCME, Ovshinsky memory, ferroelectric memory (also known as polymer memory and poly(N-vinylcarbazole)), ferromagnetic memory (also known as Spintronics, SPRAM (spin-transfer torque RAM)), STRAM (spin tunneling RAM), magnetic memory, magnetic random access memory (MRAM), and Semiconductor-oxide-nitride-oxidesemiconductor (SONOS, also known as dielectric memory). It is appreciated that other types of memory may benefit from dynamic host memory buffer allocation in accordance with the present description, depending upon the particular application.
Turning to the figures,
In alternative embodiments, system 10 may include more elements, fewer elements, and/or different elements. Moreover, although system 10 may be depicted as comprising separate elements, it will be appreciated that such elements may be integrated on to one platform, such as systems on a chip (SoCs). In the illustrative example, system 10 comprises a microprocessor 20, a memory controller 30, a memory 40 and peripheral components 50 which may include, for example, video controller, input device, output device, storage, network adapter, a power source (including a battery, renewable power source (e.g., photovoltaic panel), wireless charging, or coupling to an AC outlet), etc. The microprocessor 20 includes a cache 25 that may be part of a memory hierarchy to store instructions and data, and the system memory 40 may also be part of the memory hierarchy. Communication between the microprocessor 20 and the memory 40 may be facilitated by the memory controller (or chipset) 30, which may also facilitate in communicating with the peripheral components 50.
Storage of the peripheral components 50 may be, for example, non-volatile storage, such as solid-state drives (SSD), magnetic disk drives, optical disk drives, a tape drive, flash memory, etc. The storage may comprise an internal storage device or an attached or network accessible storage. The microprocessor 20 is configured to write data in and read data from the memory 40. Programs in the storage are loaded into the memory and executed by the processor. A network controller or adapter enables communication with a network, such as an Ethernet, a Fiber Channel Arbitrated Loop, etc. Further, the architecture may, in certain embodiments, include a video controller configured to display information represented by data in a memory on a display monitor, where the video controller may be embodied on a video card or integrated on integrated circuit components mounted on a motherboard or other substrate. An input device is used to provide user input to the processor, and may include a keyboard, mouse, pen-stylus, microphone, touch sensitive display screen, input pins, sockets, or any other activation or input mechanism known in the art. An output device is capable of rendering information transmitted from the processor, or other component, such as a display monitor, printer, storage, output pins, sockets, etc. The network adapter may embodied on a network card, such as a Peripheral Component Interconnect (PCI) card, PCI-express, or some other I/O card, or on integrated circuit components mounted on a motherboard or other substrate.
One or more of the components of the device 10 may be omitted, depending upon the particular application. For example, a network router may lack a video controller, for example.
Any one or more of the memory devices 25, 40, and the other devices 10, 30, 50 may include a memory employing dynamic host memory buffer allocation in accordance with the present description, or be embodied as any type of data storage capable of storing data in a persistent manner (even if power is interrupted to non-volatile memory) such as but not limited to any combination of memory devices that use for example, chalcogenide phase change material (e.g., chalcogenide glass), three-dimensional (3D) crosspoint memory, or other types of byte-addressable, write-in-place non-volatile memory, ferroelectric transistor random-access memory (FeTRAM), nanowire-based non-volatile memory, phase change memory (PCM), memory that incorporates memristor technology, Magnetoresistive random-access memory (MRAM) or another Spin Transfer Torque (STT)-MRAM as described above. Such memory elements in accordance with embodiments described herein can be used either in stand-alone memory circuits or logic arrays, or can be embedded in microprocessors and/or digital signal processors (DSPs). Additionally, it is noted that although systems and processes are described herein primarily with reference to microprocessor based systems in the illustrative examples, it will be appreciated that in view of the disclosure herein, certain aspects, architectures, and principles of the disclosure are equally applicable to other types of device memory and logic devices.
The memory 54 may also include a row decoder, a timer device and I/O devices (or I/O outputs). Bits of the same memory word may be separated from each other for efficient I/O design. A multiplexer (MUX) may be used to connect each column to the required circuitry during a READ operation. Another MUX may be used to connect each column to a write driver during a WRITE operation. A memory control circuit 67 such as a memory controller is configured to control and perform read and write operations directed to the bitcells 64 as explained below. The memory control circuit 67 is configured to perform the described operations using appropriate hardware, software or firmware, or various combinations thereof. As explained in greater detail below, the memory control circuit 67 includes dynamic host memory buffer allocation control logic 68 having an activity level sensor 70 configured to sense a level of activity of a non-volatile memory. The dynamic host memory buffer allocation logic 68 is configured to be responsive to the activity level sensor 70 and to dynamically allocate a portion of a host memory as a host memory buffer for the non-volatile memory as a function of a sensed level of activity of the non-volatile memory. An implementation of the host memory buffer allocation control logic 68 which includes software, may include host storage or memory drivers and controllers, for example.
In one embodiment, the dynamic host memory buffer allocation logic 68 further includes allocation shifting logic 74 configured to shift an allocation of a portion of a host memory from one non-volatile memory to another non-volatile memory as a function a sensed level of activity of the latter non-volatile memory being greater than the sensed level of activity of the former non-volatile memory. In this manner allocations of portions of the host memory to host memory buffers associated with the non-volatile memories may be re-balanced as a function of sensed respective levels of activity of the non-volatile memories.
In another aspect, the dynamic host memory buffer allocation logic 68 further includes inactive data identification logic 80 configured to identify a range of addresses of a host memory buffer which is storing inactive data. Accordingly, the allocation shifting logic 74 is configured to shift a range of addresses of a host memory identified as storing inactive data, from the host memory buffer containing the identified inactive data to a different, more active host memory buffer.
In the example of
In this example,
In the illustrated embodiment, each host memory buffer, Buffer1, Buffer2, is configured to cache a portion of a logical-to-physical (L2P) indirection look-up table in the form of a data structure 350, 354 (
Each entry of the L2P indirection look-up table includes a logical address field 510 which stores a logical block address which has been mapped to a physical block address stored in a physical address field 514 of the entry. In the example of
As set forth above, the L2P indirection look-up table entry 504 is cached in the host memory block address HBMA1 of the host memory buffer, Buffer1, assigned to the solid state drive SSD1. Hence, an attempt to read the logical to physical address mapping for logical block address LBA8 in the cache memory of the host memory buffer, Buffer1, would be successful, since the L2P indirection look-up table entry 504 is cached in the host memory block address HBMA1 of the host memory buffer, Buffer1. As such, the successful attempt to read the logical to physical address mapping for logical block address LBA8 in the cache memory of the host memory buffer, Buffer1, would be treated as a cache “hit.”
Conversely, if the L2P indirection look-up table entry for a different logical block address was not cached in the cache memory of the host memory buffer, Buffer1, an attempt to read the logical to physical address mapping for the latter logical block address would not be successful, since the L2P indirection look-up table entry for the latter logical block address was not cached in the host memory buffer, Buffer1. As such, the unsuccessful attempt to read the logical to physical address mapping for the latter logical block address in the cache memory of the host memory buffer, Buffer1, would be treated as a cache “miss.” As described in greater detail below, such cache hits and misses may be employed in dynamic host memory buffer allocation in accordance with one embodiment of the present description. For example, an excessive number of cache misses may be indicative that the current host memory buffer allocation for the solid state drive SSD1 is too small, given the current level of activity directed to the solid state drive SSD1.
In the example of
The host memory buffers, Buffer1, Buffer2 are associated with the solid state drives SSD1, SSD2, respectively in this example. As input/output operations directed to the solid state drives SSD1, SSD2 proceed, an activity level sensor such as the activity level sensor 70 (
In the embodiment of
In one embodiment, an activity level sensor of one or both of memory buffer allocation control logic 314, 324 may be configured to sense (block 610,
In another embodiment, an activity level sensor of one or both of memory buffer allocation control logic 314, 324 may be configured to sense (block 610,
In still another embodiment, an activity level sensor of one or both of memory buffer allocation control logic 314, 324 may be configured to sense (block 610,
As a function of sensed respective levels of activity of the different non-volatile memories, one or both of dynamic memory buffer allocation control logic 314, 324 may be configured to determine (block 614,
Such a dynamic host memory buffer allocation re-balancing may be performed as a function of sensed respective levels of activity of the different non-volatile memories as described above. For example, if the current sensed (block 610,
In another example, if the current sensed (block 610,
In one embodiment, the activity level sensing (block 610) may be periodically activated to sense respective activity levels. Thus after a certain period of time, T, host memory buffer devices may be polled, by host software such as a driver using an appropriate command such as a “Get Features” command, for example, in an NVMe embodiment, to determine the current configuration or levels of activity associated with each device. Accordingly, host memory buffer allocations may be periodically re-balanced (blocks 614, 620) as needed if respective levels of the activity of the memories shift over time. As a result, the host memory buffer allocations may be shifted as well as many times as needed, allowing the system to utilize the allocated memory resources in a more efficient manner.
It is noted that in previous NVMe architectures, the size and location of a host memory buffer was not modified using commands of the existing command set while the host memory feature was enabled as a feature of the NVMe architecture. Thus, in one embodiment of host memory buffer allocation in accordance with the present description, commands of the existing command set of the NVMe architecture such as the “Get Features” command may be utilized to determine (block 610) the current configuration or level of activity associated with each memory device. Similarly, commands of the existing command set of the NVMe architecture such as the “Set Features” command, may be utilized to re-balance (blocks 614, 620) the host memory buffer allocations for the memory devices by disabling the host memory buffer feature and then re-enabling the host memory buffer feature so that the host memory buffers have appropriately resized host memory allocations.
In another embodiment of host memory buffer allocation in accordance with the present description, the NVMe architecture command set may be modified by adding a new feature identifier. For example, a new feature identifier may be selected from an appropriate vendor specific range such as the range C0h-FFh of feature identifiers, for example. The associated memory device, such as the solid state drive SSD1 (
Using the new feature identifier, a host may send various types of new Set Feature commands to achieve an appropriate re-balancing (blocks 614, 620) of the host memory buffer allocations without disabling the host memory buffer feature. For example, using a selected new feature identifier, a Set Feature command may be sent to add host memory buffer space to the allocation for a particular host memory buffer such as Buffer2 (
Accordingly, instead of enabling and disabling a host memory buffer feature using commands of the existing command set of the NVMe architecture, new Set Feature commands such as those described above may be added to the Set Feature command set of the NVMe architecture using a selected new feature identifier. The new Set Feature commands may be used to add and remove portions of the host memory allocated to storage drives for use as host memory buffers, without disabling the buffers and disrupting ongoing input/output operations to the host memory buffers.
In one embodiment, to increase the size of host memory allocated to a buffer for a particular memory device, the host may send a new version of a Set Features command, referred to herein as an “add new allocation” Set Features command, to provide a new buffer and thus additional buffer space to the allocation for a particular memory device. Conversely, to decrease the size of the host memory allocated to a buffer for a particular memory device, the host may send another new version of a Set Features command, referred to herein as a “remove existing allocation” Set Features command to remove a buffer in whole or in part from the buffer space allocation for a particular memory device. Should all host memory buffers be removed from the host memory, the host memory buffer feature is effectively disabled. To check the current configuration of a host memory buffer without modifying the buffer, the host may send a new version of a Get Features command using a selected new feature identifier.
In the example of
In one embodiment, to re-balance the host memory buffer allocations from a source buffer to a target buffer having increased activity relative to the source buffer, a range of addresses within the source buffer which are storing inactive data, may be identified (block 650). In one embodiment, one or more of the dynamic host memory buffer allocation control logic 314, 324 further includes inactive data identification logic similar to the inactive data identification logic 80 (
For example, in
One or more of the dynamic host memory buffer allocation control logic 314, 324, further includes allocation shifting logic similar to the allocation shift logic 74 (
Although the shifting of addresses from a source buffer to a target buffer is described herein in connection with buffer space identified as containing inactive data, it is appreciated that in some embodiments, dynamic host memory buffer allocation in accordance with the present description may also include shifting buffer space containing active data from a source buffer to a target buffer. In such embodiments, the active data may transferred to another location within the source buffer, or may be flushed (transferred) from the source buffer to the associated storage before the re-allocation takes place, to preserve the active data before it is overwritten as a part of the target host memory buffer.
One or more of the dynamic host memory buffer allocation control logic 314, 324, is further configured to determine (block 660,
Alternatively, in another embodiment, the re-balancing may be determined to be complete once sufficient addresses have been shifted such that the ratios of the respective sizes of the host memory buffers are closer to the sensed ratios of the respective levels of activity of the host memory buffers as described above, but need not match. Thus, the rebalancing may be determined to be complete once sufficient addresses have been shifted such that the ratios of the respective sizes of the host memory buffers is 5 to 7 as depicted in
Dynamic host memory buffer allocation in accordance with the present description may also be applied to events such as a storage drive failing or powered down. If so, the level of activity for such a failed or non-operational storage drive may be sensed as having fallen to zero. Accordingly, the dynamic host memory buffer allocation logic can dynamically re-allocate the host memory buffer space previously allocated to the failed or inoperative drive, to one or more active drives.
Although described in connection with shifting a portion of a buffer allocation from one host memory buffer to another host memory buffer, it is appreciated that dynamic host memory buffer allocation in accordance with the present description may be achieved by reducing or increasing the size of a particular host memory buffer for a particular memory or storage without affecting the sizes of other host memory buffers. Further, it is appreciated that dynamic host memory buffer allocation in accordance with the present description may be achieved by reducing or increasing the size of a particular host memory buffer without affecting the sizes of other host memory buffers to the same extent.
The following examples pertain to further embodiments.
Example 1 is an apparatus for use with a host memory configured to store a host memory buffer for an associated non-volatile memory, the apparatus comprising: dynamic host memory buffer allocation logic having an activity level sensor configured to sense a level of activity of a non-volatile memory, wherein the dynamic host memory buffer allocation logic is configured to be responsive to the activity level sensor and to dynamically allocate a portion of a host memory as a host memory buffer for the non-volatile memory as a function of a sensed level of activity of the non-volatile memory.
In Example 2, the subject matter of Examples 1-9 (excluding the present Example), can optionally include a plurality of non-volatile memories, each non-volatile memory having a portion of the host memory allocated to the associated non-volatile memory as a host memory buffer for the associated non-volatile memory, wherein the activity level sensor is configured to sense respective levels of activity of the plurality of non-volatile memories, and wherein the dynamic host memory buffer allocation logic is further configured to re-balance allocations of portions of the host memory to host memory buffers as a function of sensed respective levels of activity of the plurality of non-volatile memories.
In Example 3, the subject matter of Examples 1-9 (excluding the present Example), can optionally include wherein the plurality of non-volatile memories includes first and second non-volatile memories, the activity level sensor is configured to sense first and second levels of activity of first and second non-volatile memories, and the dynamic host memory buffer allocation logic includes allocation shifting logic configured to shift an allocation of a portion of a host memory from the first non-volatile memory to the second non-volatile memory as a function the sensed second level of activity of the second non-volatile memory being greater than the sensed first level of activity of the first non-volatile memory, to re-balance allocations of portions of the host memory to host memory buffers associated with the first and second non-volatile memories as a function of sensed respective levels of activity of the first and second non-volatile memories.
In Example 4, the subject matter of Examples 1-9 (excluding the present Example), can optionally include wherein the dynamic host memory buffer allocation logic further includes inactive data identification logic configured to identify a range of addresses of a host memory buffer allocated to the first non-volatile memory, which are storing inactive data, and wherein the allocation shifting logic is configured to shift a range of addresses of a host memory identified as storing inactive data, from a host memory buffer of the first non-volatile memory to a host memory buffer of the second non-volatile memory.
In Example 5, the subject matter of Examples 1-9 (excluding the present Example), can optionally include wherein each non-volatile memory is a solid state drive and wherein a portion of a host memory allocated to an associated solid state drive stores at least a portion of a logical-to-physical address look-up table data structure for an associated solid state drive.
In Example 6, the subject matter of Examples 1-9 (excluding the present Example), can optionally include wherein a logical-to-physical address look-up table data structure for an associated solid state drive has logical-to-physical address mapping entries, the activity level sensor is further configured to sense proportionate rates of unsuccessful attempts to look-logical-to-physical address mapping entries missing from logical-to-physical address look-up table data structures for associated solid state drives, and wherein the re-balancing allocations includes re-balancing allocations of portions of a host memory buffer to solid state drives as a function of sensed proportionate rates of unsuccessful attempts to look-up logical-to-physical address mapping entries missing from logical-to-physical address look-up table data structures for associated solid state drives.
In Example 7, the subject matter of Examples 1-9 (excluding the present Example), can optionally include wherein the activity level sensor is further configured to sense proportionate shares of quantities of read operations directed to the plurality of non-volatile memories, and wherein the dynamic host memory buffer allocation logic is further configured to re-balance allocations of portions of a host memory buffer as a function of sensed proportionate shares of quantities of read operations directed to the plurality of non-volatile memories.
In Example 8, the subject matter of Examples 1-9 (excluding the present Example), can optionally include wherein the activity level sensor is further configured to sense proportionate shares of quantities of unique logical block addresses of read operations directed to the plurality of non-volatile memories, and wherein the dynamic host memory buffer allocation logic is further configured to re-balance allocations of portions of a host memory buffer as a function of sensed proportionate shares of quantities of unique logical block addresses of read operations directed to the plurality of non-volatile memories.
In Example 9, the subject matter of Examples 1-9 (excluding the present Example), can optionally include a computing system, comprising: a non-volatile memory, a host memory configured to store a host memory buffer associated with the non-volatile memory, a processor configured to cause a data write into and a data read from the non-volatile memory and the host memory, and any of: a display communicatively coupled to the processor, a network interface communicatively coupled to the processor, or a battery coupled to provide power to the system.
Example 10 is a method, comprising: sensing a level of activity of a non-volatile memory, and dynamically allocating a portion of a host memory as a buffer for the non-volatile memory as a function of a sensed level of activity of the non-volatile memory.
In Example 11, the subject matter of Examples 10-17 (excluding the present Example), can optionally include wherein the sensing a level of activity of a non-volatile memory includes sensing respective levels of activity of a plurality of non-volatile memories, and wherein the dynamically allocating includes re-balancing allocations of portions of a host memory as a buffer as a function of sensed respective levels of activity of the plurality of non-volatile memories.
In Example 12, the subject matter of Examples 10-17 (excluding the present Example), can optionally include wherein the sensing respective levels of activity of a plurality of non-volatile memories includes sensing first and second levels of activity of first and second non-volatile memories, and wherein the re-balancing allocations includes shifting an allocation of a portion of a host memory from the first non-volatile memory to the second non-volatile memory as a function the sensed second level of activity of the second non-volatile memory being greater than the sensed first level of activity of the first non-volatile memory.
In Example 13, the subject matter of Examples 10-17 (excluding the present Example), can optionally include identifying a range of addresses of a host memory buffer allocated to the first non-volatile memory, which are storing inactive data, wherein the shifting an allocation of a portion of a host memory from a host memory buffer for first non-volatile memory to a host memory buffer for the second non-volatile memory, includes shifting a range of addresses of a host memory identified as storing inactive data, from a host memory buffer for the first non-volatile memory to a host memory buffer for the second non-volatile memory.
In Example 14, the subject matter of Examples 10-17 (excluding the present Example), can optionally include wherein each non-volatile memory is a solid state drive and wherein a host memory buffer for an associated solid state drive stores a logical-to-physical address look-up table data structure for the associated solid state drive.
In Example 15, the subject matter of Examples 10-17 (excluding the present Example), can optionally include wherein a logical-to-physical address look-up table data structure for an associated solid state drive has logical-to-physical address mapping entries, the sensing respective levels of activity of a plurality of non-volatile memories includes sensing proportionate rates of unsuccessful attempts to look-up logical-to-physical address mapping entries missing from logical-to-physical address look-up table data structures for associated solid state drives, and wherein the re-balancing allocations includes re-balancing allocations of portions of a host memory buffer to solid state drives as a function of sensed proportionate rates of unsuccessful attempts to look-up logical-to-physical address mapping entries missing from logical-to-physical address look-up table data structures for associated solid state drives.
In Example 16, the subject matter of Examples 10-17 (excluding the present Example), can optionally include wherein the sensing respective levels of activity of a plurality of non-volatile memories includes sensing proportionate shares of quantities of read operations directed to the plurality of non-volatile memories, and wherein the re-balancing allocations includes re-balancing allocations of portions of a host memory buffer as a function of sensed proportionate shares of quantities of read operations directed to the plurality of non-volatile memories.
In Example 17, the subject matter of Examples 10-17 (excluding the present Example), can optionally include wherein the sensing respective levels of activity of a plurality of non-volatile memories includes sensing proportionate shares of quantities of unique logical block addresses of read operations directed to the plurality of non-volatile memories, and wherein the re-balancing allocations includes re-balancing allocations of portions of a host memory buffer as a function of sensed proportionate shares of quantities of unique logical block addresses of read operations directed to the plurality of non-volatile memories.
Example 18 is an apparatus for memory comprising means to perform a method as claimed in any preceding claim.”
Example 19 is a computing system, comprising: a non-volatile memory, a host memory configured to store a host memory buffer associated with the non-volatile memory, a processor configured to cause a data write into and a data read from the non-volatile memory and the host memory, and dynamic host memory buffer allocation logic having an activity level sensor configured to sense a level of activity of a non-volatile memory, wherein the dynamic host memory buffer allocation logic is configured to be responsive to the activity level sensor and to dynamically allocate a portion of a host memory as a host memory buffer for the non-volatile memory as a function of a sensed level of activity of the non-volatile memory.
In Example 20, the subject matter of Examples 19-27 (excluding the present Example), can optionally include a plurality of non-volatile memories, each non-volatile memory having a portion of the host memory allocated to the associated non-volatile memory as a host memory buffer for the associated non-volatile memory, wherein the activity level sensor is configured to sense respective levels of activity of the plurality of non-volatile memories, and wherein the dynamic host memory buffer allocation logic is further configured to re-balance allocations of portions of the host memory to host memory buffers as a function of sensed respective levels of activity of the plurality of non-volatile memories.
In Example 21, the subject matter of Examples 19-27 (excluding the present Example), can optionally include wherein the plurality of non-volatile memories includes first and second non-volatile memories, the activity level sensor is configured to sense first and second levels of activity of first and second non-volatile memories, and the dynamic host memory buffer allocation logic includes allocation shifting logic configured to shift an allocation of a portion of a host memory from the first non-volatile memory to the second non-volatile memory as a function the sensed second level of activity of the second non-volatile memory being greater than the sensed first level of activity of the first non-volatile memory, to re-balance allocations of portions of the host memory to host memory buffers associated with the first and second non-volatile memories as a function of sensed respective levels of activity of the first and second non-volatile memories.
In Example 22, the subject matter of Examples 19-27 (excluding the present Example), can optionally include wherein the dynamic host memory buffer allocation logic further inactive data identification logic configured to identify a range of addresses of a host memory buffer allocated to the first non-volatile memory, which are storing inactive data, and wherein the allocation shifting logic is configured to shift a range of addresses of a host memory identified as storing inactive data, from a host memory buffer of the first non-volatile memory to a host memory buffer of the second non-volatile memory.
In Example 23, the subject matter of Examples 19-27 (excluding the present Example), can optionally include wherein each non-volatile memory is a solid state drive and wherein a portion of a host memory allocated to an associated solid state drive stores at least a portion of a logical-to-physical address look-up table data structure for an associated solid state drive.
In Example 24, the subject matter of Examples 19-27 (excluding the present Example), can optionally include wherein a logical-to-physical address look-up table data structure for an associated solid state drive has logical-to-physical address mapping entries, the activity level sensor is further configured to sense proportionate rates of unsuccessful attempts to look-logical-to-physical address mapping entries missing from logical-to-physical address look-up table data structures for associated solid state drives, and wherein the re-balancing allocations includes re-balancing allocations of portions of a host memory buffer to solid state drives as a function of sensed proportionate rates of unsuccessful attempts to look-up logical-to-physical address mapping entries missing from logical-to-physical address look-up table data structures for associated solid state drives.
In Example 25, the subject matter of Examples 19-27 (excluding the present Example), can optionally include wherein the activity level sensor is further configured to sense proportionate shares of quantities of read operations directed to the plurality of non-volatile memories, and wherein the dynamic host memory buffer allocation logic is further configured to re-balance allocations of portions of a host memory buffer as a function of sensed proportionate shares of quantities of read operations directed to the plurality of non-volatile memories.
In Example 26, the subject matter of Examples 19-27 (excluding the present Example), can optionally include wherein the activity level sensor is further configured to sense proportionate shares of quantities of unique logical block addresses of read operations directed to the plurality of non-volatile memories, and wherein the dynamic host memory buffer allocation logic is further configured to re-balance allocations of portions of a host memory buffer as a function of sensed proportionate shares of quantities of unique logical block addresses of read operations directed to the plurality of non-volatile memories.
In Example 27, the subject matter of Examples 19-27 (excluding the present Example), can optionally include any of: a display communicatively coupled to the processor, a network interface communicatively coupled to the processor, or a battery coupled to provide power to the system. Example 28 is an apparatus for use with a host memory configured to store a host memory buffer for an associated non-volatile memory, the apparatus comprising: dynamic host memory buffer allocation logic means having an activity level sensor means for sensing a level of activity of a non-volatile memory, wherein the dynamic host memory buffer allocation logic means is responsive to the activity level sensor means, for dynamically allocating a portion of a host memory as a host memory buffer for the non-volatile memory as a function of a sensed level of activity of the non-volatile memory.
In Example 29, the subject matter of Examples 28-36 (excluding the present Example), can optionally include a plurality of non-volatile memories, each non-volatile memory having a portion of the host memory allocated to the associated non-volatile memory as a host memory buffer for the associated non-volatile memory, wherein the activity level sensor means is configured for sensing respective levels of activity of the plurality of non-volatile memories, and wherein the dynamic host memory buffer allocation logic means is further configured for re-balancing allocations of portions of the host memory to host memory buffers as a function of sensed respective levels of activity of the plurality of non-volatile memories.
In Example 30, the subject matter of Examples 28-36 (excluding the present Example), can optionally include wherein the plurality of non-volatile memories includes first and second non-volatile memories, the activity level sensor means is configured for sensing first and second levels of activity of first and second non-volatile memories, and the dynamic host memory buffer allocation logic means includes allocation shifting logic means for shifting shift an allocation of a portion of a host memory from the first non-volatile memory to the second non-volatile memory as a function the sensed second level of activity of the second non-volatile memory being greater than the sensed first level of activity of the first non-volatile memory, to re-balance allocations of portions of the host memory to host memory buffers associated with the first and second non-volatile memories as a function of sensed respective levels of activity of the first and second non-volatile memories.
In Example 31, the subject matter of Examples 28-36 (excluding the present Example), can optionally include wherein the dynamic host memory buffer allocation logic means further includes inactive data identification logic means for identifying a range of addresses of a host memory buffer allocated to the first non-volatile memory, which are storing inactive data, and wherein the allocation shifting logic means is configured for shifting a range of addresses of a host memory identified as storing inactive data, from a host memory buffer of the first non-volatile memory to a host memory buffer of the second non-volatile memory.
In Example 32, the subject matter of Examples 28-36 (excluding the present Example), can optionally include wherein each non-volatile memory is a solid state drive and wherein a portion of a host memory allocated to an associated solid state drive stores at least a portion of a logical-to-physical address look-up table data structure for an associated solid state drive.
In Example 33, the subject matter of Examples 28-36 (excluding the present Example), can optionally include wherein a logical-to-physical address look-up table data structure for an associated solid state drive has logical-to-physical address mapping entries, the activity level sensor means is further configured for sensing proportionate rates of unsuccessful attempts to look-logical-to-physical address mapping entries missing from logical-to-physical address look-up table data structures for associated solid state drives, and wherein the re-balancing allocations includes re-balancing allocations of portions of a host memory buffer to solid state drives as a function of sensed proportionate rates of unsuccessful attempts to look-up logical-to-physical address mapping entries missing from logical-to-physical address look-up table data structures for associated solid state drives.
In Example 34, the subject matter of Examples 28-36 (excluding the present Example), can optionally include wherein the activity level sensor means is further configured to sense proportionate shares of quantities of read operations directed to the plurality of non-volatile memories, and wherein the dynamic host memory buffer allocation logic means is further configured for re-balancing allocations of portions of a host memory buffer as a function of sensed proportionate shares of quantities of read operations directed to the plurality of non-volatile memories.
In Example 35 the subject matter of Examples 28-36 (excluding the present Example), can optionally include wherein the activity level sensor means is further configured for sensing proportionate shares of quantities of unique logical block addresses of read operations directed to the plurality of non-volatile memories, and wherein the dynamic host memory buffer allocation logic means is further configured for re-balancing allocations of portions of a host memory buffer as a function of sensed proportionate shares of quantities of unique logical block addresses of read operations directed to the plurality of non-volatile memories.
In Example 36, the subject matter of Examples 28-36 (excluding the present Example), can optionally include a computing system, comprising: a non-volatile memory, a host memory means for storing to store a host memory buffer associated with the non-volatile memory, a processor means for causing a data write into and a data read from the non-volatile memory and the host memory means, and any of: a display communicatively coupled to the processor, a network interface communicatively coupled to the processor, or a battery coupled to provide power to the system.
Example 37 is a computer program product for a memory wherein the computer program product comprises a computer readable storage medium having program instructions embodied therewith, the program instructions executable by a processor to cause processor operations, the processor operations comprising: sensing a level of activity of a non-volatile memory; and dynamically allocating a portion of a host memory as a buffer for the non-volatile memory as a function of a sensed level of activity of the non-volatile memory.
In Example 38, the subject matter of Examples 37-44 (excluding the present Example), can optionally include wherein the sensing a level of activity of a non-volatile memory includes sensing respective levels of activity of a plurality of non-volatile memories, and wherein the dynamically allocating includes re-balancing allocations of portions of a host memory as a buffer as a function of sensed respective levels of activity of the plurality of non-volatile memories.
In Example 39, the subject matter of Examples 37-44 (excluding the present Example), can optionally include wherein the sensing respective levels of activity of a plurality of non-volatile memories includes sensing first and second levels of activity of first and second non-volatile memories, and wherein the re-balancing allocations includes shifting an allocation of a portion of a host memory from the first non-volatile memory to the second non-volatile memory as a function the sensed second level of activity of the second non-volatile memory being greater than the sensed first level of activity of the first non-volatile memory.
In Example 40, the subject matter of Examples 37-44 (excluding the present Example), can optionally include wherein the operations further comprise identifying a range of addresses of a host memory buffer allocated to the first non-volatile memory, which are storing inactive data, wherein the shifting an allocation of a portion of a host memory from a host memory buffer for first non-volatile memory to a host memory buffer for the second non-volatile memory, includes shifting a range of addresses of a host memory identified as storing inactive data, from a host memory buffer for the first non-volatile memory to a host memory buffer for the second non-volatile memory.
In Example 41, the subject matter of Examples 37-44 (excluding the present Example), can optionally include wherein each non-volatile memory is a solid state drive and wherein a host memory buffer for an associated solid state drive stores a logical-to-physical address look-up table data structure for the associated solid state drive.
In Example 42, the subject matter of Examples 37-44 (excluding the present Example), can optionally include wherein a logical-to-physical address look-up table data structure for an associated solid state drive has logical-to-physical address mapping entries, the sensing respective levels of activity of a plurality of non-volatile memories includes sensing proportionate rates of unsuccessful attempts to look-up logical-to-physical address mapping entries missing from logical-to-physical address look-up table data structures for associated solid state drives, and wherein the re-balancing allocations includes re-balancing allocations of portions of a host memory buffer to solid state drives as a function of sensed proportionate rates of unsuccessful attempts to look-up logical-to-physical address mapping entries missing from logical-to-physical address look-up table data structures for associated solid state drives.
In Example 43, the subject matter of Examples 37-44 (excluding the present Example), can optionally include wherein the sensing respective levels of activity of a plurality of non-volatile memories includes sensing proportionate shares of quantities of read operations directed to the plurality of non-volatile memories, and wherein the re-balancing allocations includes re-balancing allocations of portions of a host memory buffer as a function of sensed proportionate shares of quantities of read operations directed to the plurality of non-volatile memories.
In Example 44, the subject matter of Examples 37-44 (excluding the present Example), can optionally include wherein the sensing respective levels of activity of a plurality of non-volatile memories includes sensing proportionate shares of quantities of unique logical block addresses of read operations directed to the plurality of non-volatile memories, and wherein the re-balancing allocations includes re-balancing allocations of portions of a host memory buffer as a function of sensed proportionate shares of quantities of unique logical block addresses of read operations directed to the plurality of non-volatile memories.
The described operations may be implemented as a method, apparatus or computer program product using standard programming and/or engineering techniques to produce software, firmware, hardware, or any combination thereof. The described operations may be implemented as computer program code maintained in a “computer readable storage medium”, where a processor may read and execute the code from the computer storage readable medium. The computer readable storage medium includes at least one of electronic circuitry, storage materials, inorganic materials, organic materials, biological materials, a casing, a housing, a coating, and hardware. A computer readable storage medium may comprise, but is not limited to, a magnetic storage medium (e.g., hard disk drives, floppy disks, tape, etc.), optical storage (CD-ROMs, DVDs, optical disks, etc.), volatile and non-volatile memory devices (e.g., EEPROMs, ROMs, PROMs, RAMs, DRAMs, SRAMs, Flash Memory, firmware, programmable logic, etc.), Solid State Devices (SSD), etc. The code implementing the described operations may further be implemented in hardware logic implemented in a hardware device (e.g., an integrated circuit chip, Programmable Gate Array (PGA), Application Specific Integrated Circuit (ASIC), etc.). Still further, the code implementing the described operations may be implemented in “transmission signals”, where transmission signals may propagate through space or through a transmission media, such as an optical fiber, copper wire, etc. The transmission signals in which the code or logic is encoded may further comprise a wireless signal, satellite transmission, radio waves, infrared signals, Bluetooth, etc. The program code embedded on a computer readable storage medium may be transmitted as transmission signals from a transmitting station or computer to a receiving station or computer. A computer readable storage medium is not comprised solely of transmissions signals. Those skilled in the art will recognize that many modifications may be made to this configuration without departing from the scope of the present description, and that the article of manufacture may comprise suitable information bearing medium known in the art. Of course, those skilled in the art will recognize that many modifications may be made to this configuration without departing from the scope of the present description, and that the article of manufacture may comprise any tangible information bearing medium known in the art.
In certain applications, a device in accordance with the present description, may be embodied in a computer system including a video controller to render information to display on a monitor or other display coupled to the computer system, a device driver and a network controller, such as a computer system comprising a desktop, workstation, server, mainframe, laptop, handheld computer, etc. Alternatively, the device embodiments may be embodied in a computing device that does not include, for example, a video controller, such as a switch, router, etc., or does not include a network controller, for example.
The illustrated logic of figures may show certain events occurring in a certain order. In alternative embodiments, certain operations may be performed in a different order, modified or removed. Moreover, operations may be added to the above described logic and still conform to the described embodiments. Further, operations described herein may occur sequentially or certain operations may be processed in parallel. Yet further, operations may be performed by a single processing unit or by distributed processing units.
The foregoing description of various embodiments has been presented for the purposes of illustration and description. It is not intended to be exhaustive or to limit to the precise form disclosed. Many modifications and variations are possible in light of the above teaching.