SSD virtualization with thin provisioning

By tracking and aggregating storage device capacity through the Virtual Storage Manager (VSM), and adopting thin provisioning and over-provisioning, the problem of insufficient capacity of storage devices caused by faulty blocks is solved, and the effective utilization of storage devices and the minimum storage requirements of users are achieved.

CN120653585APending Publication Date: 2025-09-16SAMSUNG ELECTRONICS CO LTD
View PDF 0 Cites 0 Cited by

Patent Information

Application Number
CN202510294749.X
Authority / Receiving Office
CN · China
Patent Type
Applications(China)
Current Assignee / Owner
Priority Date
2024-12-27
Filing Date
2025-03-13
Publication Date
2025-09-16

AI Technical Summary

Technical Problem

When manufacturing storage devices, there is a problem that some devices are rejected due to faulty blocks causing the actual capacity to fall below the expected yield and failing to meet the minimum storage requirements.

Method used

The physical capacity of storage devices is tracked and aggregated through the Virtual Storage Manager (VSM). Thin provisioning and over-provisioning mechanisms are used to ensure that storage devices advertise their physical capacity rather than their logical capacity, and storage resources are allocated across storage devices to achieve the available capacity of virtual storage devices.

Benefits of technology

Even if the actual capacity of the storage device is lower than the expected yield, the storage device can be effectively utilized to avoid waste, ensuring that users or applications obtain the minimum storage capacity and optimizing the service life and performance of the storage device.

✦ Generated by Eureka AI based on patent content.

Smart Images

  • Figure CN120653585A_ABST
    Figure CN120653585A_ABST
Patent Text Reader

Abstract

A solid state disk (SSD) is disclosed. The SSD may include a flash storage medium and a controller for accessing data on the flash storage medium. The SSD may be configured to advertise the physical capacity of the flash storage medium to a virtual storage manager (VSM).
Need to check novelty before this filing date? Find Prior Art

Description

Technical Field

[0001] The present disclosure relates generally to storage, and more particularly to memory devices having different yields. Background Art

[0002] When memory devices are manufactured, they are expected to provide a certain minimum amount of memory. If this minimum is not met, the memory device may be rejected.

[0003] There is still a need to use memory devices that may not provide a certain minimum yield. Summary of the Invention

[0004] The virtual storage manager can track the physical capacity of storage devices. The physical capacity of storage devices can be aggregated to determine the available capacity of virtual storage devices. A portion of the storage device can then be allocated to an application. BRIEF DESCRIPTION OF THE DRAWINGS

[0005] The accompanying drawings described below are examples of how embodiments of the present disclosure may be implemented and are not intended to limit the embodiments of the present disclosure. Various embodiments of the present disclosure may include elements not shown in a particular drawing and / or may omit elements shown in a particular drawing. The accompanying drawings are intended to provide illustrations and may not be to scale.

[0006] Figure 1 A machine including a virtual storage manager according to an embodiment of the present disclosure is shown.

[0007] Figure 2 The embodiment according to the present disclosure is shown Figure 1 Details of the machine.

[0008] Figure 3 The embodiment according to the present disclosure is shown Figure 1 A view of the storage provided by a storage device.

[0009] Figure 4 The embodiment according to the present disclosure is shown Figure 1 Details of the storage device.

[0010] Figure 5 The embodiment according to the present disclosure is shown Figure 1 Details of the virtual storage manager.

[0011] Figure 6 The embodiment according to the present disclosure is shown in Figure 1 How storage can be allocated among the storage devices.

[0012] Figure 7 According to an embodiment of the present disclosure, Figure 1 Generate virtual storage devices from storage devices Figure 5 The aggregation module.

[0013] Figure 8 The present invention shows an embodiment of the present invention taking the workload of the application into consideration. Figure 5 Over-provisioning modules.

[0014] Figure 9 The embodiment according to the present disclosure is shown Figure 1 The Virtual Storage Manager in Figure 8 At the request of the application Figure 1 How to allocate storage on the storage devices.

[0015] Figure 10 The embodiment according to the present disclosure is shown Figure 1 The Virtual Storage Manager provides information Figure 1 storage device.

[0016] Figure 11 The embodiment according to the present disclosure is shown Figure 5 The mapping module can be used to convert Figure 8 The addresses used by the application are mapped to Figure 1 Storage devices and Figure 1 A table of addresses on the storage device.

[0017] Figure 12 Showing an embodiment according to the present disclosure Figure 1 How can the Virtual Storage Manager Figure 1 The storage device is placed in read-only mode and can be accessed from Figure 1 transfer data from the storage device.

[0018] Figure 13A The embodiment according to the present disclosure is shown Figure 1 Virtual Storage Manager Announcements Figure 1 A flow chart of an example process for determining the available capacity of a storage device.

[0019] Figure 13B Continuing with the embodiment of the present disclosure for Figure 1 Virtual Storage Manager Announcements Figure 1 A flowchart of an example process for determining the available capacity of a storage device.

[0020] Figure 14 The embodiment according to the present disclosure is shown Figure 5 The over-provisioning module determines Figure 1 A flowchart of an example process for overprovisioning of storage devices.

[0021] Figure 15 The embodiment according to the present disclosure is shown Figure 5The over-provisioning module determines Figure 1 A flowchart of an example process for overprovisioning of storage devices.

[0022] Figure 16 The embodiment according to the present disclosure is shown Figure 5 The allocation module is Figure 8 Application reservation Figure 1 A flowchart of an example process for storing data on a storage device.

[0023] Figure 17 The embodiment according to the present disclosure is shown Figure 1 The Virtual Storage Manager from Figure 1 A flowchart of an example process for a storage device to receive information.

[0024] Figure 18 The embodiment according to the present disclosure is shown Figure 1 The Virtual Storage Manager manages Figure 8 Flowchart of an example process for applying a request.

[0025] Figure 19 The embodiment according to the present disclosure is shown Figure 1 The Virtual Storage Manager will Figure 1 A flowchart of an example process for setting a storage device in read-only mode.

[0026] Figure 20 The embodiment according to the present disclosure is shown Figure 1 The virtual storage manager is set in read-only mode Figure 1 A flowchart of an example process for transferring data to a storage device.

[0027] Figure 21 The embodiment according to the present disclosure is shown Figure 1 Storage device to Figure 1 A flowchart of an example process for notifying a virtual storage manager of its physical capacity.

[0028] Figure 22 The embodiment according to the present disclosure is shown Figure 1 Storage device to Figure 1 Flowchart of an example process for a virtual storage manager to send an interrupt. DETAILED DESCRIPTION

[0029] Reference will now be made in detail to embodiments of the present disclosure, examples of which are illustrated in the accompanying drawings. In the following detailed description, numerous specific details are set forth to provide a thorough understanding of the present disclosure. However, it should be understood that one of ordinary skill in the art may practice the present disclosure without these specific details. In other cases, well-known methods, processes, components, circuits, and networks have not been described in detail to avoid unnecessarily obscuring aspects of the embodiments.

[0030] It should be understood that although the terms first, second, etc. may be used herein to describe various elements, these elements should not be limited by these terms. These terms are only used to distinguish one element from another. For example, a first module may be referred to as a second module, and similarly, a second module may be referred to as a first module without departing from the scope of this disclosure.

[0031] The terms used in the description of the present disclosure herein are only used for the purpose of describing specific embodiments and are not intended to limit the present disclosure. As used in the description of the present disclosure and the appended claims, the singular form is intended to also include the plural form, unless the context clearly indicates otherwise. It will also be understood that the term "and / or" as used herein refers to and encompasses any and all possible combinations of one or more of the associated listed items. It will be further understood that when used in this specification, the terms "include" and / or "comprising" specify the presence of stated features, integers, steps, operations, elements and / or components, but do not exclude the presence or addition of one or more other features, integers, steps, operations, elements, components and / or their groups. The parts and features of the accompanying drawings are not necessarily drawn to scale.

[0032] When manufacturing storage devices such as Not-AND (NAND) flash solid-state drives (SSDs), each SSD is expected to yield some minimum capacity. This minimum capacity can exceed the advertised capacity: this excess can be called over-provisioning. Over-provisioning can support garbage collection mechanisms and can enable the SSD to use replacement blocks when other blocks in the SSD begin to fail. In this way, the SSD can be expected to function within its advertised lifespan.

[0033] However, most SSDs include a certain number of blocks that are considered failed blocks even at the time of manufacture. If enough blocks are considered failed blocks at the time of manufacture so that the SSD may not provide its minimum capacity, the SSD may be rejected for not providing its expected capacity.

[0034] Embodiments of the present disclosure can enable an SSD to be used even if its actual capacity is lower than the expected yield of the SSD being manufactured. Instead of discarding such an SSD, the SSD can advertise its entire physical capacity instead of advertising a logical capacity that is less than the physical capacity of the SSD (with the excess reserved for over-provisioning). The SSD can advertise its capacity to a virtual storage manager (VSM) executed under an operating system on a host processor. The VSM can track and aggregate the advertised storage capacities of all SSDs running on a computer and can allocate storage to users and / or applications using thin provisioning. Using thin provisioning, the VSM can guarantee a minimum amount of storage to a user or application, but when the user or application actually requests data to be stored on a storage device, such storage can actually be allocated to the user or application. The VSM can allocate storage to a user or application across all SSDs instead of on a specific SSD. The VSM can also present a virtual storage device to the user or application, where the VSM maps access requests to the virtual storage device to access requests to the physical storage device.

[0035] In some embodiments of the present disclosure, the VSM may also support over-provisioning across SSDs and may distribute load (particularly write requests) across the SSDs in an attempt to maximize overall performance.

[0036] In some embodiments of the present disclosure, the SSDs can notify the VSM about changes in their actual capacity and / or their error rate. The SSD can notify the VSM about the new information, the SSD can let the VSM know that the SSD has the new information and can wait for the VSM to query the new information, or the VSM can periodically poll the SSD for any changes to the SSD's information. The VSM can then update how it manages the SSDs accordingly. In some embodiments of the present disclosure, if an SSD is using too much of its capacity so that the intended storage for over-provisioning is unavailable, the VSM can stop sending write requests to that SSD (redirecting those writes to another SSD), effectively turning the SSD into a read-only device. In other embodiments of the present disclosure, the VSM can also start moving data from an SSD that appears to be about to fail so that the data is not lost. In other embodiments of the present disclosure, the VSM can notify a user or administrator of a computer that the computer's storage capacity should be increased by adding a new SSD.

[0037] Figure 1 A machine including a virtual storage manager according to an embodiment of the present disclosure is shown. Figure 1In FIG, machine 105 (which may also be referred to as a host or system) may include a processor 110, a memory 115, and storage devices 120-1 and 120-2 (which may be collectively referred to as storage devices 120). Figure 1 Two storage devices 120 - 1 and 120 - 2 are shown, but embodiments of the present disclosure may include any number of storage devices 120 .

[0038] Processor 110 (also referred to as a main processor) can be any type of processor. (For ease of illustration, processor 110 and other components discussed below are shown outside the machine: embodiments of the present disclosure may include these components within the machine.) Although Figure 1 A single processor 110 is shown, but the machine 105 may include any number (one or more, without limitation) of processors, each of which may be a single-core or multi-core processor, each of which may implement a reduced instruction set computer (RISC) architecture or a complex instruction set computer (CISC) architecture (among other possibilities), and which may be mixed in any desired combination.

[0039] Processor 110 may be coupled to memory 115. Memory 115, which may also be referred to as main memory, may be any type of memory, such as flash memory, dynamic random access memory (DRAM), static random access memory (SRAM), persistent random access memory, ferroelectric random access memory (FRAM), or non-volatile random access memory (NVRAM), such as magnetoresistive random access memory (MRAM). Memory 115 may also be any desired combination of different memory types and may be managed by a memory controller 125. Memory 115 may be used to store what may be referred to as "short-term" data: that is, data that is not expected to be stored for an extended period of time. Examples of short-term data may include temporary files, data used locally by an application (which may have been copied from other storage locations), and the like.

[0040] Processor 110 and memory 115 may also support an operating system under which various applications may run. These applications may issue requests (which may also be referred to as commands) to read data from or write data to memory 115 or storage device 120. While memory 115 may be used to store data that is considered "short-term," storage device 120 may be used to store data that is considered "long-term": that is, data that is expected to be retained for longer periods of time and should be retained in a persistent manner even if power delivery to machine 105 should be interrupted. Device driver 130 may be used to access storage device 120. While Figure 1One device driver 130 is shown for managing access to two storage devices 120 , but embodiments of the present disclosure may include more than one device driver 130 , each for managing access to one or more of the storage devices 120 .

[0041] The storage device 120 may be associated with an accelerator. Such an accelerator may be used, for example, for near-data processing. That is, the accelerator may be used to process data closer to the storage device 120 to reduce or eliminate data transfers from the storage device 120 to the memory 115. The use of an accelerator for near-data processing may also offload processing from the processor 110, as the accelerator may perform such processing on behalf of the processor 110. Similar to the processor 105, such an accelerator may implement a reduced instruction set computer (RISC) architecture or a complex instruction set computer (CISC) architecture (among other possibilities), and may be implemented using a central processing unit (CPU), a field programmable gate array (FPGA), an application specific integrated circuit (ASIC), a system on a chip (SoC), a graphics processing unit (GPU), a general-purpose GPU (GPGPU), a neural processing unit (NPU), or a tensor processing unit (TPU).

[0042] The combination of the storage device 120 and the accelerator may also be referred to as a computational storage device, a computational storage unit, or a computational device. The storage device 120 and the accelerator may be designed and manufactured as a single integrated unit, or the accelerator may be separate from the storage device 120. The phrase "associated with" is intended to encompass both a single integrated unit that includes both the storage device and the accelerator, as well as a storage device that is paired with the accelerator but is not manufactured as a single integrated unit. In other words, when the storage device and the accelerator are physically separate devices but are connected in a manner that enables them to communicate with each other, they can be said to be "paired." Furthermore, in the remainder of this document, any reference to the storage device 120 may be understood as referring to the two storage devices 120 and the accelerator as being physically separate but paired (and therefore may include another device), or as integrating the two devices into a single component that is a computational storage unit.

[0043] Furthermore, the connection between a storage device and a paired accelerator may enable the two devices to communicate, but may not enable one (or both) devices to work with a different partner: that is, a storage device may not be able to communicate with another accelerator, and / or an accelerator may not be able to communicate with another storage device. For example, a storage device and a paired accelerator may be connected to the fabric in series (in either order), enabling the accelerator to access information from the storage device in a way that the other accelerator may not be able to.

[0044] Although Figure 1 The general term "storage device" is used, but embodiments of the present disclosure may include any storage device format that may be associated with computational storage, examples of which may include hard disk drives and solid-state drives (SSDs). Furthermore, storage devices 120 may be of the same or different types. For example, storage device 120-1 may be an SSD, while storage device 120-2 may be a hard disk drive. Any reference below to a specific type of storage device (such as "SSD") should be understood to include such other embodiments of the present disclosure.

[0045] The processor 105 and the storage device 120 can be across the structure ( Figure 1 The fabric may be any fabric along which information may be passed. Such fabric may include fabric that may be internal to the machine 105 and that may use an interface such as Peripheral Component Interconnect Express (PCIe), Serial AT Attachment (SATA), or Small Computer System Interface (SCSI). Such fabric may also include fabric that may be external to the machine 105 and that may use an interface such as Ethernet, Infiniband, or Fibre Channel. In addition, such fabric may support one or more protocols such as Non-Volatile Memory Express (NVMe), NVMe over Fabrics (NVMe-oF), Simple Service Discovery Protocol (SSDP), or a cache coherent interconnect protocol such as Compute (Compute Express Link and CXL are registered trademarks of the Computer Express Link Consortium in the United States.) Therefore, such a structure can be considered to include both internal and external networking connections, through which commands can be sent directly or indirectly to storage device 120. In embodiments of the present disclosure where such a structure supports external networking connections, storage device 120 can be located external to machine 105, and storage device 120 can receive requests from a processor remote from machine 105.

[0046] The machine 105 may also include a virtual storage manager (VSM) 135. The VSM 135 may be used to manage storage on the storage device 120. Figures 5 to 19Further discussion of VSM 135. VSM 135 can be implemented in any desired manner. For example, VSM 135 can be implemented as software executed under an operating system on processor 110: VSM 135 can execute in kernel space or user space. Alternatively, VSM 135 can be implemented as part of the physical interface to storage device 120 (e.g., as firmware or a chip on a printed circuit board, such as a motherboard connecting processor 110 and storage device 120). Alternatively, VSM 135 can be part of device driver 130. In some embodiments of the present disclosure, where storage device 120 supports the NVMe protocol, VSM 135 can also be referred to as a virtual NVMe manager (VNM); other names can also be used with storage devices 120 that support other protocols.

[0047] Figure 2 The embodiment according to the present disclosure is shown Figure 1 Details of the machine. Figure 2 In general, the machine 105 includes one or more processors 110, which may include a memory controller 125 and a clock 205, which may be used to coordinate the operation of the components of the machine. The processor 110 may also be coupled to a memory 115, which may include, for example, random access memory (RAM), read-only memory (ROM), or other state storage media. The processor 110 may also be coupled to a storage device 120 and to a network connector 210, which may be, for example, an Ethernet connector or a wireless connector. The processor 110 may also be connected to a bus 215, to which a user interface 220 and I / O interface ports that may be managed using an input / output (I / O) engine 225, as well as other components, may be attached.

[0048] Figure 3 The embodiment according to the present disclosure is shown Figure 1 The storage device 120 provides a stored view. Figure 3 In the present disclosure, storage device 120 can be any type of storage device, such as an SSD or a hard disk drive. Storage device 120 can include some amount of storage, which can be divided into blocks, sectors, or other units. For simplicity, reference will be made to blocks in an SSD, but embodiments of the present disclosure can include other storage units in other types of storage devices, and blocks in an SSD can be replaced with other storage units in other storage devices.

[0049] Even when manufactured, it is not uncommon for the storage device 120 to include faulty blocks. That is, not every block in the SSD is capable of storing data when written, or returning data when read. Figure 3As shown, the storage device 120 may include a faulty block 305 shown with cross-hatching. Figure 3 The failed block 305 is shown at one end of the storage device 120 , but in practice, the failed blocks may be spread across the storage device 120 . Figure 3 The arrangement shown in is simply to make it easier to see the proportion of the storage device 120 that includes failed blocks relative to its full size.

[0050] Once failed blocks 305 are not discounted, storage device 120 may have a physical capacity 310. Physical capacity 310 may be any size. For example, physical capacity 310 of storage device 120 may be 256 gigabytes (GB), 512 GB, 1 terabyte (TB), or any other desired size. If each block in storage device 120 is filled to capacity with data, then storage device 120 will store its physical capacity in data.

[0051] However, some storage devices 120 do not necessarily advertise themselves as being able to store their entire physical capacity 310. That is, a storage device 120 may reserve a certain percentage of its physical capacity for other uses. For example, consider an SSD. An SSD may support reading and / or writing data in units of pages, and any desired number of pages may exist in a single block in the SSD.

[0052] However, while SSDs can read or write data in units of pages, SSDs may not support in-place updates of data. That is, once data is written to an SSD, the data may not be changed where it is stored. Instead, to update data, the update may be written to a new page / block on the SSD, and the original data may be invalidated. To support the possibility that data may be updated and written to a different page / block, the SSD may include a flash translation layer that can convert data from Figure 1 Processor 110 (or Figure 1 The address received by the application running on the processor 110 of the SSD is mapped to the physical address where the data is actually stored on the SSD. In this way, even if the data is moved during the update, Figure 1 The processor 110 also does not need to know the physical address of the stored data.

[0053] Additionally, invalidating a page within a block within an SSD does not necessarily mean that new data can be written to that page. Before data can be written to a page, the page may need to be erased. However, erasure can occur on a per-block basis, rather than a per-page basis. That is, an SSD may not support erasing only a single page: the entire block containing that page may need to be erased.

[0054] Because erasure can occur on a block-by-block basis, the ideal situation is that every page in a block is already invalidated (or not written to in the first place): that is, the block does not contain any valid data. However, sometimes an SSD may need to erase a block even if it contains some valid data. To erase the block, the SSD can program the remaining valid data in the block into pages in another block. Once all valid data has been programmed to the other block, the block can be erased and new data can be written to it. This process of moving any valid data in a block selected for erasure to a new block so that the block can then be erased is called garbage collection.

[0055] SSDs can also perform wear leveling. Every block in the SSD can be expected to support a predetermined number of program / erase cycles before data is successfully read from or written to that block. In order to keep the blocks in the SSD as balanced as possible in terms of the number of program / erase cycles, the SSD can perform wear leveling, which can cause the SSD to favor writing data to blocks with lower program / erase cycle counts rather than blocks with higher program / erase cycle counts, and can even program data from blocks that support wear leveling (for example, moving data that has been stored in a block with a low program / erase cycle count for a long time so that the block can be used more, or moving data stored in a block with a high program / erase cycle count to another block so that the block with the high program / erase cycle count can be "out of service" for a period of time).

[0056] As a result, garbage collection and / or wear leveling may require that a valid block somewhere on the SSD be programmed with valid data before the block can be erased. However, if the SSD were to use its entire physical capacity 310 to store data, there might not be any available blocks into which valid data could be programmed. To avoid this, the SSD can reserve a portion of the physical capacity 310 to ensure that there is always a block into which data can be programmed. This reserved portion of the SSD can be referred to as over-provisioning. Thus, for example, if an SSD is advertised as a 1TB SSD and has 10% over-provisioning, the SSD may actually only provide 900GB of storage (the remaining 100GB being used for over-provisioning).

[0057] exist Figure 3 In FIG, physical capacity 310 is shown as being divided into two parts: logical capacity 315 and over-provisioning 320. Figure 3, overprovision 320 is represented as approximately 20% of physical capacity 310, but embodiments of the present disclosure may support any desired percentage of physical capacity 310 being reserved as overprovision 320. Logical capacity 315 may then be considered the difference between physical capacity 310 and overprovision 320. (Alternatively, logical capacity 315 may be set first, with the difference between physical capacity 310 and logical capacity 315 being reserved as overprovision 320.) Storage device 120 may then report logical capacity 315 as its available capacity, even though physical capacity 310 may be greater than logical capacity 315.

[0058] Typically, this arrangement works well. However, as described above, it is not uncommon for storage device 120 to have failed blocks 305. If storage device 120 has enough failed blocks 305, physical capacity 310 may be insufficient to accommodate both target logical capacity 315 and target overprovisioning 320. In this case, storage device 120 may be discarded due to not meeting its manufacturing yield.

[0059] Embodiments of the present disclosure provide a mechanism by which a storage device 120 can be used even though the storage device 120 may not meet its manufacturing yield (and therefore may not be sold as originally designed). Instead of discarding the storage device 120, the storage device 120 may include firmware that allows the storage device 120 to report the physical capacity 310 without dividing the physical capacity 310 into the logical capacity 315 and the over-provisioning 320.

[0060] Embodiments of the present disclosure also provide additional benefits. It is expected that during the life of the storage device 120, additional blocks may fail, thereby increasing the size of the failed blocks 305. As the failed blocks 305 increase, the physical capacity 310 may decrease (because blocks that were previously available to store data may now be unavailable). In the case of a storage device sold as providing a target capacity, once the failed blocks 305 grow enough to reduce the logical capacity 315 below the target capacity, the storage device may not be considered usable. However, using embodiments of the present disclosure, the storage device 120 may not have a target capacity that is considered to be functional, and the storage device 120 may continue to be used even if the physical capacity 310 drops below the target capacity.

[0061] Figure 4 The embodiment according to the present disclosure is shown Figure 1 Details of the storage device 120. Figure 4 In FIG. 1 , the storage device 120 is shown using an embodiment including an SSD 120 , but embodiments of the present disclosure are applicable to any type of storage device that can support caching of data, as described below.

[0062] The SSD 120 may include an interface 405 and a host interface layer 410. The interface 405 may be a layer for connecting the SSD 120 to a host. Figure 1 The SSD 120 may include an interface 405 to the machine 105. Examples of such interfaces may include Serial AT Attachment (SATA), mSATA, Serial Attached Small Computer System Interface (SCSI) (SAS), NVMe, PCIe, U.2, M.2, and Enterprise and Data Center Standard Form Factor (EDSFF): other interfaces are also possible. The SSD 120 may include more than one interface 405: for example, one interface may be used for block-based read and write requests, and another interface may be used for key-value read and write requests. Although Figure 4 It is recommended that the interface 405 is SSD 120 and Figure 1 405. The physical connection between the SSD 120 and the machine 105 may be a physical connection between the SSD 120 and the machine 105, but the interface 405 may also represent the differences in protocols that can be used across a common physical interface. For example, the SSD 120 may connect to the machine 105 using a U.2, EDSFF, or M.2 connector, among other possibilities, and the SSD 120 may support block-based requests and key-value requests: processing different types of requests may be performed by different interfaces 405. The SSD 120 may also include a single interface 405, which may include multiple ports, each of which may be treated as a separate interface 405, or just a single interface 405 with a single port, and leaving the interpretation of information received through the interface 405 to another element, such as the SSD controller 415.

[0063] Host interface layer 410 may manage interface 405, providing an interface between SSD controller 415 and external connections to SSD 120. If SSD 120 includes more than one interface 405, a single host interface layer 410 may manage all interfaces, SSD 120 may include a host interface layer 410 for each interface, or some combination thereof may be used.

[0064] SSD 120 may also include an SSD controller 415 and various flash memory chips 420-1 through 420-8, which may be organized along channels 425-1 through 425-4. Flash memory chips 420-1 through 420-8 may be collectively referred to as flash memory chips 420, and may also be referred to as flash chips, memory chips, NAND chips, chips, or dies. Channels 425-1 through 425-4 may be collectively referred to as channels 425.

[0065] The SSD controller 415 may manage sending read requests and write requests to the flash memory chips 420 along the channel 425. The SSD controller 415 may also include a flash memory controller 430, which may be responsible for issuing commands to the flash memory chips 420 along the channel 425. In embodiments of the present disclosure where the storage device 120 uses a technology other than the flash memory chips 420 to store data, the flash memory controller 430 may also be more generally referred to as a memory controller. Although Figure 4 Eight flash memory chips 420, four channels 425 and one flash memory controller 430 are shown, but embodiments of the present disclosure may include any number (one or more, without limitation) of channels 425, including any number (one or more, without limitation) of flash memory chips 420 and any number (one or more, without limitation) of flash memory controllers 430.

[0066] Within each flash memory chip or die, space can be organized into planes. These planes can include multiple erase blocks (which can also be referred to as blocks), which can be further subdivided into word lines. A word line can include one or more pages. For example, a word line for triple-level cell (TLC) flash memory media can include three pages, while a word line for multi-level cell (MLC) flash memory media can include two pages. In some embodiments of the present disclosure, a page can be the smallest unit of data that can be written to or read from the SSD 120; in other embodiments of the present disclosure, the smallest unit of data that can be written to or read from the SSD 120 can be different from the size of a page.

[0067] Erase blocks may also be logically grouped together by SSD controller 415, which may be referred to as a Super Block. This logical grouping may enable SSD controller 415 to manage the blocks as a group, rather than managing each block individually. For example, a Super Block may include one or more erase blocks from each plane of each die in storage device 120. Thus, for example, if storage device 120 includes eight channels, two die per channel, and four planes per die, a Super Block may include 8×2×4=64 erase blocks.

[0068] The SSD controller 415 may also include a flash translation layer (FTL) 435 (which may be more generally referred to as a translation layer for storage devices that do not use flash storage). The FTL 435 may process logical block addresses (LBAs) or other logical IDs (such as Figure 1The FTL 435 may also be responsible for translating data from one PBA to another, such as may occur when performing garbage collection and / or wear leveling.

[0069] The SSD controller 415 may also include a storage device 440 that may store firmware 445. The firmware 445 may be a custom firmware that may report the status of the storage device 120. Figure 3 The physical capacity of 310 is not reported Figure 3 The logical capacity is 315.

[0070] Although Figure 4 SSD controller 415 is shown as including flash controller 430 , flash translation layer 435 , and storage 440 , but embodiments of the present disclosure may have any, some, or all of these elements external to SSD controller 415 without loss of generality.

[0071] Figure 5 The embodiment according to the present disclosure is shown Figure 1 Details of the virtual storage manager 135. Figure 5 In the example, the VSM 135 may include a tracking module 505, an aggregation module 510, an over-allocation module 515, a notification module 520, an allocation module 525, a receiving module 530, a mapping module 535, and a sending module 540. The tracking module 505 may track Figure 1 The storage device 120 Figure 3 The aggregation module 510 can determine the physical capacity 310 of Figure 1 Aggregate storage provided by the storage devices 120 (and therefore, the VSM 135 can provide Figure 1 The over-provisioning (OP) module 515 may determine the available capacity of the virtual storage device provided to the application executing on the processor 110. Figure 1 The storage device 120 Figure 3 How much of the physical capacity 310 can be reserved for Figure 3 Over-allocation of 320 (but with the above reference Figure 3 In contrast to how the over-allocation 320 is described, the over-allocation module 515 can manage Figure 3 An oversubscription of 325 instead of Figure 1 The storage devices 120 manage their own Figure 3 The notification module 520 can send an oversubscription request to the Figure 1 The application executing on the processor 110 of the VSM 135 is notified of the available capacity of the virtual storage device provided by the VSM 135. The allocation module 525 can Figure 1 The portion of the storage device 120 is allocated to the Figure 1 The receiving module 530 can receive the application executed on the processor 110 of Figure 1 An application executing on the processor 110 receives a request for accessing (ie, reading, writing, or erasing) Figure 1 The receiving module 530 can also receive data from the storage device 120. Figure 1 The storage device 120 receives the response to the access request received from the application. The mapping module 535 can Figure 1 The logical address used by the application in the access request received by the application executed on the processor 110 is mapped to the logical address used by the application Figure 1 For example, the mapping module 535 may include a mapping module 535 that maps the host address used by the application to the address used by the storage device 120. Figure 1 The table of addresses used by the storage device 120 is associated with Figure 1 These addresses used by the storage device 120 may be Figure 1 The logical address or physical address on the storage device 120, depending on the implementation. Finally, the sending module 540 can be used to access Figure 1 A request for data on the storage device 120 is sent to Figure 1 The sending module 540 can also send Figure 1 The storage device 120 receives the response and sends it to the Figure 1 The application executed on the processor 110. Figures 7 to 20 Modules 505-530 are discussed further.

[0072] Figure 6 The embodiment according to the present disclosure is shown in Figure 1 How to allocate storage in the storage device 120. Figure 6 , eight storage devices 120-1 to 120-8 are shown. As shown, each storage device 120 may have different Figure 3 The physical capacities 310 range from storage device 120-6 having a physical capacity of 96 TB to storage device 120-8 having a physical capacity of 256 TB. Embodiments of the present disclosure may include storage devices 120 having any desired physical capacity, with 96-256 TB being merely an example range.

[0073] The storage device 120 can Figure 3 The VSM 135 informs them of Figure 3 The physical capacity of 310 (through Figure 5 Then, when an application requests to allocate storage for the application, Figure 1 VSM 135 (through Figure 5The allocation module 525) can allocate the storage across the storage devices 120.

[0074] In some embodiments of the present disclosure, Figure 1 The VSM 135 may be allocated from each storage device 120 in proportion to the physical capacity 310 of each storage device 120. For example, Figure 6 In the storage device 120, Figure 3 The total physical capacity 310 is 1349TB. This total can be considered as the total capacity of Figure 1 The VSM 135 provides the available capacity 605 of the virtual storage device. If an application requests, for example, 135TB of storage, it is allocated because 135TB is approximately 10% of 1349TB. Figure 1 The VSM 135 can allocate each storage device 120 Figure 3 10% of the physical capacity of 310. That is, Figure 1 The VSM 135 may allocate 11TB to storage device 120-1, 20TB to storage device 120-2, and so on. (Note that the above example rounds the values ​​to the next integer: Figure 1 The VSM 135 may be more accurate than this.) In other embodiments of the present disclosure, Figure 1 VSM 135 may use other strategies to allocate storage from storage devices 120: for example, by allocating from storage device 120-1 until storage device 120-1 is fully allocated, then allocating from storage device 120-2, etc. Embodiments of the present disclosure may apply any desired strategy to allocate storage from storage devices 120.

[0075] In some embodiments of the present disclosure, Figure 1 VSM 135 (through Figure 5 The allocation module 525) can distinguish between reserving storage on the storage device 120 for an application and allocating storage on the storage device 120 for the application. For example, an application can request that a specific amount of storage be allocated to the application. However, rather than explicitly assigning storage to an application, Figure 1 The VSM 135 can simply keep track of which portions of the storage device 120 have been assigned or reserved for applications. Then, when an application begins writing to be stored in the Figure 1 The VSM 135 provides virtual storage for data on the device when Figure 1 The VSM 135 can actually allocate a section of the storage device 120 to store information for the application. In other words, Figure 1 The VSM 135 may use thin provisioning of the storage device 120. As an alternative, Figure 1The VSM 135 can use thick provisioning, where when an application requests storage, Figure 1 The VSM 135 may allocate segments of the storage device 120 to an application even if the application does not immediately write any data to the storage device 120 .

[0076] For example, consider the case where an application requests 945TB of storage. 945TB is approximately 70% of 1349TB, and therefore VSM 135 can reserve approximately 70% of each of storage devices 120 for the application. This reserved storage can be represented as line 610, where the portion above line 610 is reserved for the application. However, at this point, no data is actually being stored, and Figure 1 The VSM 135 does not actually take any steps to associate any portion of the storage device 120 with the application. Note, however, that each portion has a size 615-1 through 615-8 (which may be collectively referred to as size 615), the sum of which should be at least as large as the storage requested by the application.

[0077] Continuing with the example, at some point in time, an application may write 135TB of data. This 135TB of data may be stored in segments that are spread across the storage device 120, as shown by the segments above line 620 (and shown with diagonal shading). These segments may be considered allocated to the application, while other segments of the storage device 120 may be allocated to other applications (the only caveat being that the total storage across the storage device 120 for all applications should not exceed the available capacity 605 provided as a virtual storage device). In other words, data from any application may be stored anywhere on any storage device 120, as long as Figure 1 The VSM 135 is capable of reserving storage for applications on the storage device 120 .

[0078] As noted above, the specification distinguishes between the terms "portion" and "section." For the purposes of this application, a "portion" may refer to storage space that has been reserved for an application but has not yet been physically allocated to store data for the application, while a "section" may refer to storage space that is actually allocated to store data for the application. However, in embodiments of the present disclosure where storage is allocated to a specific address within storage device 120 set aside for an application, the terms "portion" and "section" may be used interchangeably.

[0079] As described above, embodiments of the present disclosure can prevent storage devices 120 from performing their own over-provisioning. In this case, Figure 1 The VSM 135 (via the over-provisioning module 515) can manage over-provisioning. Figure 1 The VSM135 can ensure that part of the available capacity 605 can be used in Figure 1 The application executing on the processor 110 of the memory device 120 is "hidden" so that the memory device 120 can use the excess memory for its own purposes, such as garbage collection and / or wear leveling. In some embodiments of the present disclosure, Figure 1 The VSM 135 of FIGURE 135 may determine that a certain fraction (e.g., 30%) of the storage device 120 may be reserved for over-provisioning. Therefore, the storage below line 610 may be considered to be over-provisioned. Figure 6 In the example shown, it may be a coincidence that the application has requested 70% of the storage of the storage device 120, leaving 30% for over-provisioning, but in other embodiments of the present disclosure, the amount of storage on the storage device 120 that is reserved for over-provisioning may be set independently of the amount of storage requested by the application. Thus, for example, 30% of the storage on the storage device 120 may be reserved in advance for over-provisioning, and the remaining 70% may be allocated to the application upon request. In other embodiments of the present disclosure, the application may request as much storage as they want (up to the available capacity 605), with any remainder being used for over-provisioning. In other embodiments of the present disclosure, the VSM 135 may determine how much storage on the storage device 120 to reserve for over-provisioning based on the workload of the application. However, regardless of how over-provisioning is determined, Figure 1 The VSM 135 may determine the logical capacity of each storage device 120, the sum of which may represent the available capacity available for allocation by an application (and wherein the sum of all logical capacities and all overprovisioning totals the available capacity of the storage device 120). Figure 3 The sum of the physical capacity 310).

[0080] Figure 1 The VSM 135 can also set a lower limit for over-provisioning of the storage device 120. For example, Figure 1 The VSM 135 may determine that at least 10% of the storage devices 120 should always be reserved for over-provisioning. This minimum value may be viewed as a dashed line 625. If the over-provisioning of the storage devices 120 falls below this minimum value, then Figure 1 The VSM 135 can take actions to protect the storage device 120: for example, setting the storage device 120 in read-only mode. Figure 12 Further discussion of read-only mode.

[0081] Figure 7 According to an embodiment of the present disclosure, Figure 1 The storage device 120 generates a virtual storage device Figure 5 The aggregation module 510. Figure 7In the example, the aggregation module 510 may receive the storage device 120 Figure 3 The physical capacity 310 of the virtual storage device (VSSD) 705 is determined by the physical capacity 310. For example, the storage devices 120-1 and 120-2 may provide 112TB and 196TB of storage space, respectively. Figure 3 The physical capacity is 310. (Although Figure 7 Only two storage devices 120-1 and 120-2 are shown aggregated using the aggregation module 510, but the aggregation module 510 can aggregate as many storage devices 120 as needed, up to the total number of storage devices 120 in the machine 105. The aggregation module 510 can then determine that the storage devices 120 provide a cumulative physical capacity of 308TB.

[0082] However, since storage devices 120-1 and 120-2 may reserve, for example, 34TB and 59TB, respectively, for over-provisioning, the logical capacities of storage devices 120-1 and 120-2 may only be 215TB in total. Therefore, aggregation module 510 may determine that the available capacity of virtual storage device 705 may only be 215TB, taking over-provisioning into account. Virtual storage device 705, such as Figure 1 The VSM 135 offered then might only include 215TB of storage.

[0083] therefore, Figure 1 The VSM 135 can "expose" a virtual storage device 705 that includes addresses ranging from 0 to 215TB. The application can then write to any address in that range, and Figure 1 The VSM 135 can manage Figure 1 Storage of data on the storage device 120.

[0084] exist Figure 1 The VSM 135 can support multiple applications where there is Figure 1 The VSM 135 can operate in a variety of ways. In some embodiments of the present disclosure, Figure 1 The VSM 135 may expose a single virtual storage device 705 to all applications, but may assign each application a different address range "within" the virtual storage device 705. In this way, different applications may "write" to the virtual storage device 705. In other embodiments of the present disclosure, Figure 1 The VSM 135 can provide each application with a separate virtual storage device 705. In such an embodiment of the present disclosure, the capacity of the virtual storage device 120 can be targeted to the storage requested by the application, rather than a single virtual storage device 705 that effectively includes all available storage across the storage device 120.

[0085] Figure 8 The present invention shows an embodiment of the present invention taking the workload of the application into consideration. Figure 5 The over-allocation module 515. Figure 8 , application 805 is shown. Application 805 can provide information about its workload (shown as workload 810) to over-provisioning module 515. For example, workload 810 can indicate whether data is primarily read or written, or whether input / output operations operate on small or large blocks of data. This information can be correlated with wear on storage device 120, which in turn can be used to manage Figure 1 For example, if the workload 810 indicates that input / output operations are frequent and / or writes are small, it may be expected that Figure 1 The storage devices 120 with larger capacity may wear out faster and therefore a higher overprovisioning amount should be used (to shift the wear to Figure 1 Alternatively, if the workload 810 indicates that data is primarily read and not often written, a lower over-provisioning amount may be used. Embodiments of the present disclosure may also have an over-provisioning module 515 that takes other workload data into account.

[0086] Figure 9 The embodiment according to the present disclosure is shown Figure 1 The VSM 135 can be used in Figure 8 How to allocate the request of application 805 Figure 1 The storage device 120 of the storage device. Figure 9 , application 805 may issue a Figure 7 Request 905 to allocate data to virtual storage device 705. This request 905 may specify a storage size 910, which may indicate how much space the application 805 wants for its own use. Figure 5 The allocation module 525 can then determine how much space should be allocated or reserved from each of the storage devices 120. In some embodiments of the present disclosure, Figure 5 The allocation module 525 may immediately issue an allocation request 915 to the storage device 120 to allocate Figure 6 section 610, wherein Figure 6 Each portion 610 includes a portion size 615 (ie, how much data should be allocated from each storage device 120 to the application 805). Note that Figure 6 Each portion 610 can be connected to the storage device 120 Figure 3 The physical capacity is proportional to 310.

[0087] At some point, the application 805 may issue a request to access (ie, read, write, or erase) a Figure 7The access request 920 for the data of the virtual storage device 705 is received. Figure 5 The receiving module 530 may receive the request 920. Then, Figure 5 The mapping module 535 can map the address provided by the application 805 to an address on the storage device 120 (and to one or more specific storage devices 120). The request 920 can then be modified to use the appropriate device identifier and address and can be Figure 5 The sending module 540 of the VSM 135 sends the modified request (shown as request 925) to the storage device 120. Ultimately, the storage device 120 may send a response 930 (e.g., data is written or erased, or the data requested to be read is returned): the response 930 may be received by the receiving module 530 and sent to the application 805 by the sending module 540. (If necessary, the VSM 135 may modify the response 930 to produce a response 935 sent to the application 805: for example, to indicate that the response is from Figure 7 from virtual storage device 705 instead of from storage device 120.)

[0088] As discussed above, in some embodiments of the present disclosure, the VSM 135 may reserve storage on the storage device 120 without actually allocating Figure 6 610: Allocation can be deferred until the data is actually written to the storage device 120, and even then only enough storage is allocated to the application 805 as needed to store the data. In such a case, the allocation request 915 can be deferred until after the request 920 is received (and then issued only if the request 920 is a write request).

[0089] Figure 10 The embodiment according to the present disclosure is shown Figure 1 The virtual storage manager 135 provides information Figure 1 120. As described above, a storage device 120 may want to notify the VSM 135 of its current physical capacity 310 or other information. The storage device 120 may particularly want to notify the VSM 135 of such information if the information in question has changed. For example, if the storage device 120 has experienced a block failure, the physical capacity 310 of the storage device 120 may have been reduced, and the storage device 120 may want to notify the VSM 135 of the change.

[0090] The VSM 135 may issue a request 1005 to the storage device 120. In response, the storage device 120 may issue a message 1010, which may also be referred to as a response. The message 1010 may include information such as the current physical capacity 310 of the storage device 120 or health metrics such as an error count 1015 of errors that the storage device 120 has experienced. The VSM 135 may then factor this information into how it uses the storage device 120. For example, if the storage device 120 has experienced a decrease in its physical capacity 310, or has experienced a sufficient number of errors as indicated by the error count 1015, or other health metrics indicate that the storage device 120 is not operating at the expected performance level, the VSM 135 may place the storage device 120 in read-only mode so that no further data is written to the storage device 120 (minimizing any further wear on the storage device 120). For example, the VSM 135 may direct a large percentage of its traffic to healthy devices, such as those that experience a low number of drive writes per day.

[0091] A question might arise: Why would VSM 135 send request 1005? The answer is simple: VSM 135 may want to know any relevant information that storage device 120 may have. There are several different ways that VSM 135 can decide to send request 1005. In some embodiments of the present disclosure, VSM 135 may periodically send messages 1005 to storage devices 120, polling them for their current information. In other embodiments of the present disclosure, storage device 120 may send an interrupt 1020: for example, storage device 120 may issue a message signaled interrupt (MSI) or an MSI-extended (MSI-X) interrupt. Upon receiving interrupt 1020, VSM 135 may know to send request 1005 for current information from storage device 120.

[0092] Figure 11 shows a table according to an embodiment of the present disclosure, Figure 5 The mapping module 535 can use this table to convert Figure 8 The address used by application 805 is mapped to Figure 1 The storage device 120 and Figure 1 The address on the storage device 120. Figure 11 , a table 1105 is shown. Table 1105 may include various columns such as a host address 1110, an assigned application identifier (ID) 1115, a device identifier (ID) 1120, and a device address 1125. The host address 1110 may be Figure 8 The application of 805 can be Figure 9The host address 1110 can be mapped to the device identified by the device identifier 1120. Figure 1 The device address 1125 on a particular storage device 120 of FIG. Table 1105 may include various entries, such as entries 1130-1, 1130-2, and 1130-3 (which may be collectively referred to as entries 1130). For example, entry 1130-1 shows that host address 0x1000 may be stored in Figure 1 Similarly, entry 1130-2 shows that host address 0x2000 can be stored on storage device 120 with device identifier 1. Figure 1 At device address 0x1000 on storage device 120, and entry 1130-3 shows that host address 0x3000 can be stored in a Figure 1 At device address 0x4000 on the storage device 120. Figure 11 Three entries 1130 are shown, but embodiments of the present disclosure may include any number (zero or more, limited only by the amount of memory or storage used to store table 1105 ) of entries 1130 .

[0093] It is worth noting that the device address 1125 can be a physical address or a logical address. For example, if Figure 1 If the storage device 120 is a hard drive, the device address 1125 may be the physical address of the data stored on the hard drive. Figure 1 If the storage device 120 is an SSD, the device address 1125 may be Figure 1 SSD 120 can (use Figure 4 The flash translation layer 435) maps to Figure 4 The physical address of the flash memory chip 420 on which the data is actually stored is another logical address.

[0094] The assigned application identifier 1115 can be used to Figure 8 Multiple applications 805 can access Figure 7 The same virtual storage device 705. Figure 8 Application 805 each access Figure 7 In the case of different virtual storage devices 705, a separate table 1105 may exist for each virtual storage device. Figure 7 All access to the separate virtual storage device 705 can be done only by Figure 8The assigned application identifier 1115 may be omitted because the table 1105 is only one for all virtual storage devices 120, in which case the assigned application identifier 1115 may be replaced with the assigned virtual storage device identifier. Figure 8 which application 805 has accessed a particular host address 1110, the VSM 135 may be able to prevent Figure 8 An application 805 access Figure 8 The assigned application identifier 1115 can also be used in Figure 8 It is used in situations where two or more applications 805 may use the same host address 1110, thereby providing a mechanism to distinguish duplicate values ​​of the host address 1110.

[0095] when Figure 8 Application 805 Figure 1 When the VSM 135 sends a write request 920, Figure 1 The VSM 135 can determine Figure 1 which storage device 120 should be used to store data. Figure 5 The mapping module 535 can then update the table 1105 to reflect where the data will actually be written ( Figure 1 What storage device 120 and Figure 1 What device address 1125 on the storage device 120).

[0096] As an example of how table 1105 may be updated, Figure 1 Each storage device 120 may have a stripe (similar to how a Redundant Array of Independent Disks (RAID) may use stripes to store data across disks). When data is to be written, it may be written to the Figure 1 Once the blocks of the stripe are formed on the first storage device 120. Figure 1 The stripe on the first storage device 120 is filled, and data can be written to form Figure 1 The stripe can also store information about where data associated with a particular host address 1110 can be stored in the stripe, so that the data can be retrieved. The overhead required to store this information is not large: perhaps 400-500GB per petabyte (PB) (1PB = 1000TB).

[0097] In some embodiments of the present disclosure, Figure 1 The VSM 135 can manage Figure 1 storage of data on the storage device 120 in an attempt to optimize performance. That is, by Figure 1The embodiment of the present disclosure may try to maximize the amount of data written to the storage device 120. Figure 1 storage device 120 or from Figure 1 Thus, the VSM 135 can effectively provide enhanced fault tolerance similar to that of a RAID controller or an erasure coding controller, without the cost or performance penalty that RAID or erasure coding may impose. Figure 1 The storage device 120 may not need to be Figure 1 Storage device 120 internal or across Figure 1 The storage device 120 implements RAID or erasure coding. However, embodiments of the present invention may additionally implement RAID or erasure coding, which may provide protection against data loss through redundancy or parity.

[0098] Although Figure 5 The mapping module 535 can track and store Figure 8 The location of the data for each application 805 is not specified, but there are other mechanisms that can be used to locate data. For example, there may be a static mapping between the host address 1110 and the device address 1125 across all devices. For example, returning to reference Figure 7 , storage device 120-1 has a logical capacity of 78TB, and storage device 120-2 has a logical capacity of 137TB, for a total logical capacity of 215TB. Host addresses between 0 and 78TB can be written to storage device 120-1, and host addresses between 78TB and 215TB can be written to storage device 120-2. This static mapping has the advantage of not requiring storage Figure 11 Benefits of Table 1105: Given Figure 11 The host address 1110 can be directly calculated Figure 11 The device identifier 1120 and Figure 11 The device address is 1125. However, because the data may be scattered depending on Figure 8 How to use the application 805 Figure 11 The host address is in the range of 1110, so the performance may not be optimal because Figure 9 Data access request 920 may be biased towards Figure 1 Instead of using all of them roughly equally (or roughly the same) Figure 3 are proportional to their corresponding physical capacities 310).

[0099] Figure 12 The embodiment according to the present disclosure is shown Figure 1 How can the virtual storage manager 135 Figure 1 The storage device 120 is placed in read-only mode and can be accessed from Figure 1 The storage device 120 transmits data. Figure 12 In the example, the VSM 135 may decide to place the storage device 120-1 in the read-only mode 1205 based on any desired criteria: for example, the over-provisioning of the storage device 120-1 has fallen below a minimum required level (such as Figure 6 dashed line 625), or because storage device 120-1 has begun to experience an increased number of errors (as may be Figure 10 1015). Note that placing storage device 120-1 in read-only mode 1205 does not necessarily involve any changes in the operation of storage device 120-1: read-only mode 1205 may only affect how VSM 135 interacts with storage device 120-1. For example, VSM 135 may choose not to send any more data to be written to storage device 120 and may only read data from storage device 120. Thus, read-only mode 1205 may be used to store data in a manner that is consistent with the intended use of the storage device 120-1. Figure 12 1 is shown with a dashed arrow because the VSM 135 may not actually send any messages or signals to the storage device 120-1. However, the VSM 135 may continue to send a read request 1210 to the storage device 120-1 to read the data stored on the storage device 120-1, where the storage device 120-1 responds with a response 1215 including data 1220.

[0100] In some cases, it may be desirable to move data off of storage device 120-1 while in read-only mode 1205. For example, if storage device 120-1 has experienced an error, it may be anticipated that storage device 120-1 may soon fail, and it may be desirable to move data off storage device 120-1 before the failure occurs. In that case, VSM 135 may read data 1220 from storage device 120-1 using a read request 1210 and may send a write request 1225 to storage device 120-2 to write data 1220 to a new location. After storage device 120-2 sends a response 1230, VSM 135 may issue an erase request 1235 to erase the data from storage device 120-1, to which storage device 120-1 may respond with a response 1240.

[0101] There are several points worth noting. First, VSM 135 does not have to transfer data 1220 from storage device 120-1 to storage device 120-2. That is, VSM 135 can continue to use storage device 120-1 for the data already stored thereon without having to migrate the data to storage device 120-2.

[0102] Second, if the VSM 135 does decide to transfer data from storage device 120-1 to storage device 120-2, the VSM 135 may perform the transfer at any desired time. For example, the VSM 135 may wait until the data is transferred as determined by the VSM 135. Figure 8 Application 805 issued Figure 9 As part of access request 920, VSM 135 can read data 1220 from storage device 120-1, thereby taking advantage of the fact that data 1220 is being read anyway. Alternatively, when activity on storage devices 120-1 and 120-2 is low, VSM 135 can issue read request 1210 to transfer data 1220 to storage device 120-2, so that the data migration has minimal (or no) impact on the application issuing the access request. Alternatively, if there is concern that storage device 120-1 may fail imminently, VSM 135 can immediately begin transferring data from storage device 120-1 to storage device 120-2.

[0103] Third, despite Figure 12 Data is shown being transferred between storage devices 120 - 1 and 120 - 2 , but data from storage device 120 - 1 may be migrated to more than one other storage device 120 .

[0104] Fourth, despite Figure 12 , but when data 1220 is migrated from storage device 120-1 to storage device 120-2, Figure 11 Table 1105 (or possibly by Figure 5 1) and any other data structures used by the mapping module 535) can be updated to reflect the new location of the data 1220. This update can occur at any time: for example, after the data 1220 is written to the storage device 120-2 and before the data 1220 is erased from the storage device 120-1.

[0105] Fifth, although Figure 12 VSM 135 is shown sending erase request 1235 to storage device 120-1, but data 1220 does not need to be erased from storage device 120. Given that storage device 120-1 can be expected to fail soon, issuing erase request 1235 may be an unnecessary operation and data 1220 may be allowed to remain (unused) on storage device 120-1.

[0106] 13A to 13B The embodiment according to the present disclosure is shown Figure 1 Virtual Storage Manager 135 Announcement Figure 1 A flowchart of an example process for determining the available capacity of the storage device 120. Figure 13A , at block 1305, Figure 5 The tracking module 505 can receive Figure 1 Storage device 120-1 Figure 3 The physical capacity 310. At block 1310, Figure 1 The VSM 135 can determine Figure 1 At block 1315, the tracking module 505 may receive the logical capacity of the storage device 120-1. Figure 1 Storage device 120-2 Figure 3 The physical capacity 310. At block 1320, Figure 1 The VSM 135 can determine Figure 1 The logical capacity of the storage device 120-2.

[0107] In block 1325 ( Figure 13B ) Figure 5 The aggregation module 510 can aggregate Figure 1 Finally, at block 1330, Figure 5 The notification module 520 can notify Figure 1 The VSM 135 offers Figure 7 The virtual storage device 705 includes Figure 6 Available capacity 605.

[0108] Figure 14 The embodiment according to the present disclosure is shown Figure 5 The over-allocation module 515 determines Figure 1 A flowchart of an example process for over-provisioning of the storage device 120. Figure 14 In block 1405, Figure 5 The over-provisioning module 515 can be Figure 8 Application 805 receives Figure 8 Workload 810. Note that block 1405 may be omitted, as indicated by dashed line 1410. At block 1415, Figure 5 The over-allocation module 515 can determine Figure 1 The over-provisioning of storage devices 120 may be based in part on Figure 8 Application 805 receives Figure 8 workload 810. Finally, at block 1420, Figure 5 The over-provisioning module 515 can be based on the storage device 120 Figure 3 The physical capacity 310 and the excess configuration determined in block 1415 are determined Figure 1 The logical capacity of the storage device 120.

[0109] Although Figure 14 Shown Figure 5 One way in which the over-allocation module 515 can function is by first determining Figure 1The storage device 120 is over-provisioned, and then the Figure 1 of the storage device 120), but there are other ways to determine over-provisioning. Figure 15 The embodiment according to the present disclosure is shown Figure 5 The over-allocation module 515 determines Figure 1 An alternative method of over-provisioning of the storage device 120.

[0110] exist Figure 15 In block 1505, it may first be determined Figure 1 The logical capacity of the storage device 120 can then be determined. The difference between the physical capacity 310 and the logical capacity can then be determined. Finally, at block 1510, the difference can be used as Figure 1 Over-provisioning of storage device 120.

[0111] Figure 16 The embodiment according to the present disclosure is shown Figure 5 The allocation module 525 is Figure 8 Application 805 reserved Figure 1 A flowchart of an exemplary process for storing on the storage device 120 of FIG. Figure 16 In block 1605, Figure 5 The allocation module 525 can be Figure 8 Application 805 receives Figure 9 Request 905, with the request Figure 8 At block 1610, Figure 5 The allocation module 525 can determine the Figure 8 Application of 805 Figure 9 In request 905 Figure 9 The relative percentage of the storage size 910 of Figure 1 The relative allocation of storage devices 120 to meet Figure 9 In request 905 Figure 9 The storage size of 910. However, embodiments of the present disclosure may include determining Figure 1 The storage device 120 Figure 6 There are other ways in which each portion 610 can be as large as desired, and therefore block 1610 can be omitted, as shown by dashed line 1615. Finally, at block 1620, Figure 5 The allocation module 525 can be reserved Figure 1 The storage device 120 Figure 6 610 (if using thin provisioning), or you can Figure 9 The allocation request 915 is sent to Figure 9 Storage device 915 to allocate Figure 6portion 610 (if thick configuration is used).

[0112] Figure 17 The embodiment according to the present disclosure is shown Figure 1 The virtual storage manager 135 from Figure 1 A flowchart of an example process for receiving information by the storage device 120. Figure 17 In block 1705, Figure 1 The VSM 135 can be obtained from Figure 1 The storage device 120 receives Figure 10 Interrupt 1020. As mentioned above Figure 10 As discussed, Figure 1 The VSM 135 can periodically poll Figure 1 The storage device 120 of the processor 1700 may be used to obtain the new information, and therefore block 1705 may be omitted, as shown by dashed line 1710. At block 1715, Figure 1 The VSM 135 can Figure 10 The request 1005 is sent to Figure 1 Finally, at block 1720, Figure 1 The VSM 135 can be obtained from Figure 1 The storage device 120 receives Figure 10 The response 1010, which may include information such as Figure 10 Physical capacity 310 or error count 1015.

[0113] Figure 18 The embodiment according to the present disclosure is shown Figure 1 The virtual storage manager 135 manages Figure 8 A flowchart of an example process for a request of an application 805. Figure 18 In block 1805, Figure 1 The VSM 135 can be obtained from Figure 8 Application 805 receives Figure 9 Request 920. At block 1810, Figure 5 The mapping module 535 can Figure 11 The host address 1110 is mapped to Figure 11 The device address 1125 (and identifies the storage data Figure 1 As a specific example, if Figure 9 If request 920 is a write request, block 1810 may involve determining Figure 1 Which storage device 120 is to be used to store the data to be written? Figure 1 The VSM 135 can be based on e.g. Figure 1 The storage device 120 is relative to Figure 1The available capacity of other storage devices 120 and / or Figure 1 The relative health metric of the storage device 120 is used to select Figure 1 The storage device 120 is used to store data and can be Figure 1 The storage device 120 selects Figure 11 The device address is 1125. Figure 1 The VSM 135 can then be updated Figure 5 The mapping module 535 reflects Figure 11 The host address 1110 can be mapped to Figure 11 The device address is 1125.

[0114] At block 1815, Figure 5 The allocation module 525 can allocate Figure 1 120. Note that this allocation may have already occurred (e.g., Figure 16 However, if thin provisioning is being used, then Figure 1 The segments of the storage device 120 may be allocated at this time. Figure 9 If request 920 is not a write request for writing data, or if thin provisioning is not used, block 1815 may be omitted, as indicated by dashed line 1820 .

[0115] At block 1825, Figure 5 The sending module 540 can Figure 9 Request 925 is sent to Figure 1 The storage device 120. At block 1830, Figure 5 The receiving module 530 can receive Figure 1 The storage device 120 receives Figure 9 Response 930. Finally, at block 1835, Figure 5 The sending module 540 can send Figure 8 Application 805 sent Figure 9 Response 930 (modify appropriately, if necessary).

[0116] Figure 19 The embodiment according to the present disclosure is shown Figure 1 The virtual storage manager 135 will Figure 1 The storage device 120 is set in Figure 12 Flowchart of an example process in read-only mode 1205. Figure 19 In block 1905, Figure 1 The VSM135 can be Figure 1 The storage device 120 receives the updated Figure 3 The physical capacity 310. At block 1910, Figure 1The VSM 135 can determine the updated Figure 1 The logical capacity of the storage device 120. At block 1915, Figure 1 The VSM 135 can Figure 1 The reserved storage on the storage device 120 (ie, the storage that has been requested by the application) is Figure 1 Then, if the reserved storage is greater than Figure 1 The logical capacity of the storage device 120 is determined, then in block 1920, Figure 1 The VSM 135 can Figure 1 The storage device 120 is set in Figure 12 Read-only mode 1205.

[0117] Figure 20 The embodiment according to the present disclosure is shown Figure 1 The virtual storage manager 135 is set to Figure 12 Read-only mode 1205 Figure 1 Flowchart of an example process of transferring data to the storage device 120. Figure 20 In box 2005, Figure 1 The VSM 135 can send Figure 12 The read request 1210 is from Figure 12 Read-only mode 1205 Figure 1 The storage device 120 reads Figure 12 Data 1220. In block 2010, Figure 1 The VSM 135 can send Figure 12 The write request 1225 is to Figure 12 The data 1220 is written to Figure 1 Another storage device 120. Finally, at block 2015, Figure 1 The VSM 135 can Figure 12 Read-only mode 1205 Figure 1 The storage device 120 sends Figure 12 Erase request 1235 to erase Figure 12 Data 1220.

[0118] Figure 21 The embodiment according to the present disclosure is shown Figure 1 Storage device 120 to Figure 1 Flowchart of an example process for notifying the virtual storage manager 135 of its physical capacity. Figure 21 In block 2105, Figure 1 The storage device 120 can be Figure 1 VSM 135 receiver Figure 10 Request 1005 from Figure 1The storage device 120 requests information such as Figure 1 The storage device 120 Figure 3 Then, at block 2110, Figure 1 The storage device 120 can Figure 10 The response 1010 is sent to Figure 1 The VSM 135, which may include information such as Figure 10 Physical capacity 310 or error count 1015.

[0119] Figure 22 The embodiment according to the present disclosure is shown Figure 1 Storage device 120 to Figure 1 Flowchart of an example process for sending an interrupt by the virtual storage manager 135. Figure 22 In block 2205, Figure 1 The storage device 120 can Figure 1 VSM 135 sends Figure 10 The interrupt 1020, which can trigger Figure 1 VSM 135 sends Figure 10 Request 1005, as in Figure 21 Described in .

[0120] exist Figures 13A to 22 In the flowcharts, some embodiments of the present disclosure are shown. However, those skilled in the art will recognize that other embodiments of the present disclosure are possible by changing the order of the blocks, by omitting blocks, or by including links not shown in the drawings. All such variations of the flowcharts are considered embodiments of the present disclosure, whether or not explicitly described.

[0121] Embodiments of the present disclosure can enable the use of storage devices regardless of their yield. A virtual storage manager can receive the physical capacity of a storage device and can manage the allocation of storage on the storage device. The virtual storage manager can also manage over-provisioning on the storage device. This enables the use of storage devices regardless of their yield (and thus provides a technical advantage by avoiding discarding storage devices with insufficient yield and using storage devices whose yield may not be sufficient to serve as storage devices with a predetermined yield).

[0122] The Not-And-Warnings (NAND) memory in solid-state drives (SSDs) consists of a fixed number of erase blocks. During manufacturing, a specific number of blocks are required in each NAND drive to guarantee a specific logical capacity. Additional blocks may be included as over-provisioning blocks or spare blocks in case the blocks initially provided by the SSD fail.

[0123] Each NAND memory may contain initial defective blocks. The remaining good blocks in each NAND memory should meet or exceed the specified number of necessary blocks.

[0124] If the NAND memory includes too many defective blocks, the SSD may not meet manufacturing yield requirements. As a result, the NAND memory may be wasted.

[0125] Furthermore, as mentioned above, blocks may fail during the lifespan of an SSD during actual use. If too many blocks fail during actual use, the SSD may no longer maintain its specified capacity. Even if the majority of the NAND memory in the SSD is good, an SSD failure during actual use could cause significant inconvenience to the consumer. At the very least, the consumer should be able to use the drive in read-only mode.

[0126] Embodiments of the present disclosure may enable an SSD to be used even if it does not meet the logical capacity or spare block requirements of the drive (over-provisioning). There may be SSDs with varying capacities and intelligent system software, such as a Virtual NVMe Manager (VNM) or Virtual Storage Manager (VSM), to manage these variable capacity drives. The VNM may provide a range of thin provisioning to applications, with a lower limit being the guaranteed capacity requested by the application. Each SSD may include firmware that presents the entire physical capacity of the SSD as logical capacity, rather than exposing a fixed logical capacity to the VNM layer. The SSD may avoid maintaining additional over-provisioning: the over-provisioning may exist in the form of unwritten logical capacity. The VNM may manage over-provisioning at the system level.

[0127] An SSD may not need to fail during actual use, even though it may not guarantee its original fixed logical capacity. The SSD can dynamically shrink its capacity based on the error rate and the number of good blocks available. Essentially, the SSD itself will be thinly provisioned.

[0128] The SSD can report this new capacity using the Non-Volatile Memory Express (NVMe) Namespace Capacity (NCAP) field. The VNM can handle these dynamically changing drive capacities and do its best to honor the promised guaranteed aggregate capacity (which may be less than the total available capacity of the SSD).

[0129] Based on available capacity requirements, the VNM can statically allocate a fixed percentage from each drive and aggregate these percentages across the drives. The VNM can expose "N" thinly provisioned virtualized NVMe drives by equally dividing the entire static address range. The VNM can make a best effort to not drop below this aggregate capacity during the warranty period. The remainder of the aggregate drive space can be thinly provisioned by the VNM across all virtualized drives.

[0130] Embodiments of the present disclosure may include logic for handling shrinking drive capacity. The VNM may proportionally redirect traffic to healthy drives that are seeing lower Drive Writes Per Day (DWPD), which may reduce over-provisioning on that drive. If all drives see similar DWPD, the VNM may divide the shrinking drive's input / output requests equally among the remaining drives, which may proportionally reduce over-provisioning on all remaining drives. The VNM may use the drive's thin provisioning area to handle redirected writes (e.g., writes for foreign drives). As a result, the system may increase the effective over-provisioning on the shrinking drives (those that see more failures) because those devices will see fewer writes.

[0131] In the event that a threshold number of drives shrink and the guaranteed user-committed capacity may be at risk, the VNM may recommend to the user that spare drives be added to handle the I / O redirection. As a last resort, the VNM may instruct the continuously shrinking drives to operate in read-only mode: that is, the VNM may not allow any further writes to those drives to protect existing data written to those drives.

[0132] Virtualized drives that support the standard NVMe block interface can report their dynamically shrinking capacity via the NVMe NCAP field.

[0133] By controlling over-provisioning from the system / VNM level, embodiments of the present disclosure can match over-provisioning with the performance and durability requirements of the consumer. Applications that require low (DWPD) or have larger input / output sizes can use larger aggregate capacity.

[0134] Embodiments of the present disclosure may also provide better fault management. Since SSDs can shrink their capacity instead of reporting themselves as failed, the VNM can use this hint to increase over-provisioning on those drives (by allowing fewer writes). Embodiments of the present disclosure may provide protection against most read failures except sudden uncorrectable media errors on a block. Recent data shows an annualized drive failure rate (AFR) of approximately 0.28%: embodiments of the present disclosure may reduce the AFR even further. Expensive system-level data protection schemes such as redundant arrays of independent disks (RAID) and erasure coding (EC) may no longer be needed because most modern applications have built-in cross-system redundancy schemes. By avoiding RAID / EC, system performance and durability may be increased.

[0135] The following discussion is intended to provide a brief, general description of one or more suitable machines in which certain aspects of the present disclosure may be implemented. The one or more machines may be controlled, at least in part, by input from traditional input devices (such as a keyboard, mouse, etc.) and by instructions received from another machine, interaction with a virtual reality (VR) environment, biometric feedback, or other input signals. As used herein, the term "machine" is intended to broadly encompass a single machine, a virtual machine, or a system of communicatively coupled machines, virtual machines, or devices operating together. Exemplary machines include computing devices such as personal computers, workstations, servers, laptops, handheld devices, phones, tablets, and the like, as well as transportation devices such as private or public transportation, e.g., cars, trains, taxis, and the like.

[0136] One or more machines may include embedded controllers, such as programmable or non-programmable logic devices or arrays, application specific integrated circuits (ASICs), embedded computers, smart cards, and the like. One or more machines may utilize one or more connections to one or more remote machines, such as through a network interface, modem, or other communication coupling. The machines may be interconnected through physical and / or logical networks, such as an intranet, the Internet, a local area network, a wide area network, and the like. Those skilled in the art will appreciate that network communications may utilize various wired and / or wireless short-range or long-range carriers and protocols, including radio frequency (RF), satellite, microwave, Institute of Electrical and Electronics Engineers (IEEE) 802.11, Optical, infrared, cable, laser, etc.

[0137] Embodiments of the present disclosure may be described by reference to or in conjunction with associated data including functions, procedures, data structures, applications, programs, etc., which, when accessed by a machine, cause the machine to perform a task or define an abstract data type or low-level hardware context. The associated data may be stored, for example, in volatile and / or non-volatile memory, such as RAM, ROM, etc., or in other storage devices and their associated storage media, including hard drives, floppy disks, optical storage, magnetic tape, flash memory, memory sticks, digital video disks, biometric storage, etc. The associated data may be transmitted in a transmission environment (including a physical and / or logical network) in the form of packets, serial data, parallel data, propagated signals, etc., and may be used in a compressed or encrypted format. The associated data may be used in a distributed environment and stored locally and / or remotely for machine access.

[0138] Embodiments of the present disclosure may include a tangible, non-transitory machine-readable medium including instructions executable by one or more processors, the instructions including instructions for performing elements of the present disclosure as described herein.

[0139] The various operations of the methods described above may be performed by any suitable means capable of performing these operations, such as various hardware and / or software components, circuits and / or modules. Software may include an ordered list of executable instructions for implementing logical functions and may be embodied in any "processor-readable medium" for use by or in conjunction with an instruction execution system, apparatus or device (such as a single-core or multi-core processor or a system including a processor).

[0140] The blocks or steps of the methods or algorithms and functions described in conjunction with the embodiments disclosed herein may be embodied directly in hardware, in software modules executed by a processor, or in a combination of the two. If implemented in software, the functions may be stored as one or more instructions or codes on or transmitted through a tangible, non-transitory computer-readable medium. The software module may reside in random access memory (RAM), flash memory, read-only memory (ROM), electrically programmable ROM (EPROM), electrically erasable programmable ROM (EEPROM), registers, hard disk, removable disk, CD ROM, or any other form of storage medium known in the art.

[0141] The principles of the present disclosure have been described and illustrated with reference to the illustrated embodiments, and it will be appreciated that the illustrated embodiments may be modified in arrangement and detail without departing from these principles and may be combined in any desired manner. Furthermore, although the foregoing discussion has focused on specific embodiments, other configurations are contemplated. In particular, even when expressions such as "according to an embodiment of the present disclosure" are used herein, these phrases are intended to generally refer to embodiment possibilities and are not intended to limit the present disclosure to a particular embodiment configuration. As used herein, these terms may refer to the same or different embodiments that may be combined into other embodiments.

[0142] The foregoing illustrative embodiments should not be construed as limiting the disclosure herein. Although certain embodiments have been described, those skilled in the art will readily appreciate that many modifications may be made to those embodiments without materially departing from the novel teachings and advantages of the present disclosure. Therefore, all such modifications are intended to be included within the scope of the present disclosure as defined in the claims.

[0143] The embodiments of the present disclosure can be extended to the following statements, but are not limited thereto:

[0144] Statement 1. Embodiments of the present disclosure include a solid-state drive (SSD) comprising:

[0145] Flash storage media; and

[0146] A controller for accessing data on the flash storage medium,

[0147] The SSD is configured to notify a virtual storage manager (VSM) of the physical capacity of the flash storage medium.

[0148] Statement 2. Embodiments of the present disclosure include an SSD according to Statement 1, wherein the SSD is configured to advertise the physical capacity of the flash storage medium as the logical capacity of the SSD to the VSM.

[0149] Statement 3. An embodiment of the present disclosure includes an SSD according to Statement 1, wherein the SSD is configured to advertise the physical capacity of the flash storage medium without reserving storage on the flash storage medium for over-provisioning.

[0150] Statement 4. An embodiment of the present disclosure includes an SSD according to Statement 1, wherein the physical capacity of the flash storage medium is less than a target capacity of the flash storage medium.

[0151] Statement 5. Embodiments of the present disclosure include an SSD according to Statement 1, wherein the flash storage medium includes a plurality of failed blocks.

[0152] Statement 6. An embodiment of the present disclosure includes the SSD of Statement 1, wherein the SSD is further configured to update the physical capacity of the flash storage medium to a second physical capacity based at least in part on a block in the flash storage medium failing.

[0153] Statement 7. Embodiments of the present disclosure include an SSD according to Statement 6, wherein the SSD is further configured to notify the VSM of the updated physical capacity of the flash storage medium.

[0154] Statement 8. An embodiment of the present disclosure includes an SSD according to Statement 7, wherein the SSD is configured to send a message including the updated physical capacity to the VSM.

[0155] Statement 9. An embodiment of the present disclosure includes an SSD according to Statement 8, wherein the SSD is configured to send a message including the updated physical capacity to the VSM based at least in part on receiving a request for the updated physical capacity from the VSM.

[0156] Statement 10. An embodiment of the present disclosure includes an SSD according to Statement 8, wherein:

[0157] The SSD is configured to send an interrupt to the VSM; and

[0158] The SSD is configured to send the message including the updated physical capacity to the VSM based at least in part on the interrupt.

[0159] Statement 11. An embodiment of the present disclosure includes an SSD according to Statement 1, wherein the SSD is configured to determine an error count in the flash storage medium based at least in part on a block in the flash storage medium failing.

[0160] Statement 12. An embodiment of the present disclosure includes an SSD according to Statement 11, wherein the SSD is configured to notify the VSM of an error count of the flash storage medium.

[0161] Statement 13. An embodiment of the present disclosure includes an SSD according to Statement 12, wherein the SSD is configured to send a message including the error count to the VSM.

[0162] Statement 14. An embodiment of the present disclosure includes an SSD according to Statement 13, wherein the SSD is configured to send a message including the error count to the VSM based at least in part on receiving a request for the error count from the VSM.

[0163] Statement 15. An embodiment of the present disclosure includes an SSD according to Statement 13, wherein:

[0164] The SSD is configured to send an interrupt to the VSM; and

[0165] The SSD is configured to send a message including the error count to the VSM based at least in part on the interrupt.

[0166] Statement 16. Embodiments of the present disclosure include an SSD according to Statement 1, wherein the SSD is further configured to support thin provisioning.

[0167] Statement 17. An embodiment of the present disclosure includes an SSD according to Statement 1, further comprising firmware for advertising the physical capacity of the flash storage medium to the VSM.

[0168] Statement 18. Embodiments of the present disclosure include a virtual storage manager (VSM) comprising:

[0169] A tracking module, configured to track a first physical capacity of the first storage device and a second physical capacity of the second storage device;

[0170] an aggregation module for determining an available capacity of a virtual storage device based at least in part on the first physical capacity of the first storage device and the second physical capacity of the second storage device; and

[0171] An allocation module is configured to allocate a first portion of the first storage device and a second portion of the second storage device to an application executing on a processor based at least in part on the available capacity of the virtual storage device.

[0172] Statement 19. An embodiment of the present disclosure comprises a VSM according to Statement 18, wherein said VSM executes on said processor.

[0173] Statement 20. An embodiment of the present disclosure comprises a VSM according to Statement 19, wherein the VSM executes in at least one of a kernel space of an operating system executing on the processor or a user space of an operating system executing on the processor.

[0174] Statement 21. An embodiment of the present disclosure includes a VSM according to Statement 18, further comprising a notification module for notifying said available capacity to said application executing on said processor.

[0175] Statement 22. An embodiment of the present disclosure includes a VSM according to Statement 21, wherein the notification module is configured to notify an application executing on the processor of an available capacity of a virtual storage device.

[0176] Statement 23. An embodiment of the present disclosure includes a VSM according to Statement 18, wherein:

[0177] The aggregation module includes an over-provisioning module for determining a first over-provisioning of the first storage device and for determining a second over-provisioning of the second storage device; and

[0178] The aggregation module is configured to determine the available capacity of the virtual storage device based at least in part on the first physical capacity of the first storage device, the first overcommitment of the first storage device, the second physical capacity of the second storage device, and the second overcommitment of the second storage device.

[0179] Statement 24. An embodiment of the present disclosure includes a VSM according to Statement 23, wherein the overprovisioning module is configured to determine the first overprovisioning of the first storage device based at least in part on a workload of the application executing on the processor.

[0180] Statement 25. An embodiment of the present disclosure comprises a VSM according to Statement 18, wherein:

[0181] the first portion of the first storage device comprising a first size;

[0182] The second portion of the second storage device comprises a second size; and

[0183] A combination of the first size and the second size is at least as large as a storage size requested by the application executing on the processor.

[0184] Statement 26. An embodiment of the present disclosure includes a VSM according to Statement 18, wherein the allocation module is configured to:

[0185] determining the relative percentage of the available capacity based at least in part on a storage size requested by the application executing on the processor;

[0186] allocating the first portion of the first storage device to the application executing on the processor based at least in part on the relative percentage of the first physical capacity of the first storage device; and

[0187] The second portion of the second storage device is allocated to the application executing on the processor based at least in part on the relative percentage of the second physical capacity of the second storage device.

[0188] Statement 27. An embodiment of the present disclosure includes a VSM according to Statement 18, wherein the allocation module is configured to:

[0189] reserving the first portion of the first storage device for the application executing on the processor;

[0190] reserving the second portion of the second storage device for the application executing on the processor;

[0191] allocating a first segment of the first portion of the first storage device based at least in part on receiving a first write request from the application executing on the processor; and

[0192] A second segment of the second portion of the second storage device is allocated based at least in part on receiving a second write request from the application executing on the processor.

[0193] Statement 28. An embodiment of the present invention comprises the VSM of Statement 18, wherein the tracking module is configured to receive an updated physical capacity of the first storage device from the first storage device.

[0194] Statement 29. An embodiment of the present disclosure includes a VSM according to Statement 28, wherein the tracking module is configured to receive a message from the first storage device, the message from the first storage device including an updated physical capacity of the first storage device.

[0195] Statement 30. An embodiment of the present disclosure includes the VSM according to Statement 29, wherein the tracking module is further configured to request the message from the first storage device.

[0196] Statement 31. An embodiment of the present disclosure includes the VSM of Statement 30, wherein the tracking module is further configured to request the message from the first storage device based at least in part on an interrupt from the first storage device.

[0197] Statement 32. An embodiment of the present disclosure includes a VSM according to Statement 30, wherein the tracking module is further configured to periodically request the message from the first storage device.

[0198] Statement 33. An embodiment of the present disclosure includes the VSM of Statement 18, wherein the tracking module is configured to receive an error count of the first storage device from the first storage device.

[0199] Statement 34. An embodiment of the present disclosure includes a VSM according to Statement 33, wherein the tracking module is configured to receive a message from the first storage device, the message from the first storage device including the error count of the first storage device.

[0200] Statement 35. An embodiment of the present disclosure includes the VSM according to Statement 34, wherein the tracking module is further configured to request the message from the first storage device.

[0201] Statement 36. An embodiment of the present disclosure includes the VSM of Statement 35, wherein the tracking module is further configured to request the message from the first storage device based at least in part on an interrupt from the first storage device.

[0202] Statement 37. An embodiment of the present disclosure includes a VSM according to Statement 35, wherein the tracking module is further configured to periodically request the message from the first storage device.

[0203] Statement 38. An embodiment of the present disclosure includes a VSM according to Statement 18, wherein the VSM is configured to place the first storage device in a read-only mode based at least in part on an updated physical capacity of the first storage device or an error count of the first storage device.

[0204] Statement 39. An embodiment of the present disclosure includes a VSM according to Statement 38, wherein the VSM is configured to read first data from the first storage device and write the first data based at least in part on the first storage device being in a read-only mode.

[0205] Statement 40. An embodiment of the present disclosure includes a VSM according to Statement 39, wherein the VSM is further configured to write the first data to the second storage device.

[0206] Statement 41. An embodiment of the present disclosure includes a VSM according to Statement 39, wherein the VSM is further configured to write the first data to a third storage device.

[0207] Statement 42. An embodiment of the present disclosure includes a VSM according to Statement 39, wherein the VSM is further configured to erase the first data from the first storage device.

[0208] Statement 43. An embodiment of the present disclosure includes a VSM according to Statement 18, further comprising a mapping module for mapping logical addresses used by the application executing on the processor to addresses on one of the first storage device or the second storage device.

[0209] Statement 44. An embodiment of the present disclosure includes a VSM according to Statement 43, wherein the mapping module is used to map the logical address used by the application executed on the processor to an address on one of the first storage device or the second storage device and an identifier of the first storage device or the second storage device.

[0210] Statement 45. An embodiment of the present disclosure includes a VSM according to Statement 43, further comprising a sending module for sending a write request to one of the first storage device or the second storage device, the write request including the address.

[0211] Statement 46. An embodiment of the present disclosure includes a VSM according to Statement 43, further comprising a sending module for sending a read request to one of the first storage device or the second storage device, the read request including the address.

[0212] Statement 47. An embodiment of the present disclosure includes a method comprising:

[0213] receiving, from a first storage device, a first physical capacity of the first storage device;

[0214] determining a first logical capacity of the first storage device based at least in part on the first physical capacity of the first storage device;

[0215] receiving, from a second storage device, a second physical capacity of the second storage device;

[0216] determining a second logical capacity of the second storage device based at least in part on the second physical capacity of the second storage device;

[0217] aggregating the first logical capacity of the first storage device and the second logical capacity of the second storage device to generate available capacity; and

[0218] Applications executing on the processor are informed of the available capacity.

[0219] Statement 48. An embodiment of the present disclosure comprises a method according to Statement 47, wherein the method is performed on a processor.

[0220] Statement 49. An embodiment of the present disclosure includes a method according to Statement 48, wherein the method is executed as a virtual storage manager (VSM) on the processor.

[0221] Statement 50. An embodiment of the present disclosure includes the method of Statement 49, wherein the VSM executes in at least one of a kernel space of an operating system executing on the processor or a user space of an operating system executing on the processor.

[0222] Statement 51. An embodiment of the present disclosure includes the method of Statement 47, wherein notifying the application executing on the processor of the available capacity comprises notifying the application executing on the processor of the available capacity of a virtual storage device.

[0223] Statement 52. Embodiments of the present disclosure include a method according to Statement 47, wherein:

[0224] Determining the first logical capacity of the first storage device based at least in part on the first physical capacity of the first storage device includes:

[0225] determining a first over-provisioning of the first storage device; and

[0226] determining the first logical capacity of the first storage device based on a difference between the first physical capacity of the first storage device and the first over-provisioning of the first storage device; and

[0227] Determining the second logical capacity of the second storage device based at least in part on the second physical capacity of the second storage device includes:

[0228] determining a second over-provisioning of the second storage device; and

[0229] The second logical capacity of the second storage device is determined based on a difference between the second physical capacity of the second storage device and the second over-provisioning of the second storage device.

[0230] Statement 53. Embodiments of the present disclosure include a method according to Statement 52, wherein:

[0231] Determining the first over-provisioning of the first storage device includes: determining the first over-provisioning of the first storage device based at least in part on a workload of an application executing on the processor; and

[0232] Determining the second over-provisioning of the second storage device includes determining the second over-provisioning of the second storage device based at least in part on the workload of the application executing on the processor.

[0233] Statement 54. An embodiment of the present disclosure includes a method according to Statement 53, wherein determining the first logical capacity of the first storage device based at least in part on the first physical capacity of the first storage device further includes: receiving a workload of the application executing on the processor from the application executing on the processor.

[0234] Statement 55. An embodiment of the present disclosure includes a method according to Statement 47, further comprising:

[0235] receiving a request from the application executing on the processor to allocate a storage size, wherein the storage size is less than the available capacity;

[0236] reserving a first portion of the first storage device for the application executing on the processor, the first portion of the first storage device comprising a first size; and

[0237] reserving a second portion of the second storage device for the application executing on the processor, the second portion of the second storage device comprising a second size,

[0238] Wherein a combination of the first size of the first portion of the first storage device and the second size of the second portion of the second storage device is at least as large as the storage size.

[0239] Statement 56. Embodiments of the present disclosure include a method according to Statement 55, wherein:

[0240] The method further includes determining the storage size as a relative percentage of the available capacity;

[0241] Reserving the first portion of the first storage device for the application executing on the processor includes: determining the first portion of the first storage device as the relative percentage of the first logical capacity of the first storage device; and

[0242] Reserving the second portion of the second storage device for the application executing on the processor includes determining the second portion of the second storage device as the relative percentage of the second logical capacity of the second storage device.

[0243] Statement 57. An embodiment of the present disclosure includes a method according to Statement 55, further comprising:

[0244] determining a first difference value for the first storage device, the first difference value being calculated between the first size of the first portion of the first storage device and the first logical capacity of the first storage device;

[0245] determining a second difference value for the second storage device, the second difference value being calculated between the second size of the second portion of the second storage device and the second logical capacity of the second storage device;

[0246] using the first difference as an overprovisioning for the first storage device; and

[0247] The second difference is used as an overprovisioning for the second storage device.

[0248] Statement 58. An embodiment of the present disclosure includes a method according to Statement 55, further comprising:

[0249] receiving a second request to allocate a second storage size from a second application executing on the processor, wherein a second combination of the storage size and the second storage size is less than the available capacity;

[0250] reserving a third portion of the first logical capacity of the first storage device for the second application executing on the processor; and

[0251] reserving a fourth portion of the second logical capacity of the second storage device for the second application executing on the processor,

[0252] Wherein, a third combination of the third portion of the first logical capacity of the first storage device and the fourth portion of the second logical capacity of the second storage device is at least as large as the second storage size.

[0253] Statement 59. An embodiment of the present disclosure includes a method according to Statement 55, further comprising:

[0254] receiving a first write request from the application executing on the processor, the first write request including first data;

[0255] allocating a first segment of said first portion of said first storage device;

[0256] writing the first data to the first sector of the first portion of the first storage device;

[0257] receiving a second write request from the application executing on the processor, the second write request including second data;

[0258] allocating a second segment of the second portion of the second storage device; and

[0259] The second data is written to the second sector of the second portion of the second storage device.

[0260] Statement 60. Embodiments of the present disclosure include a method according to Statement 59, wherein:

[0261] The first write request also includes a first logical address;

[0262] The second write request further includes a second logical address;

[0263] Writing the first data to the first sector of the first portion of the first storage device includes:

[0264] mapping the first logical address to a first address associated with the first storage device; and

[0265] Sending a third write request to the first storage device, the third write request including the first data and the first address; and

[0266] Writing the second data to the second section of the second portion of the second storage device includes:

[0267] mapping the second logical address to a second address associated with the second storage device; and

[0268] A fourth write request is sent to the second storage device, where the fourth write request includes the second data and the second address.

[0269] Statement 61. Embodiments of the present disclosure include a method according to Statement 60, wherein:

[0270] Writing the first data to the first sector of the first portion of the first storage device includes:

[0271] receiving a first response from the first storage device; and

[0272] sending the first response to the application executing on the processor; and

[0273] Writing the second data to the second section of the second portion of the second storage device includes:

[0274] receiving a second response from the second storage device; and

[0275] The second response is sent to the application executing on the processor.

[0276] Statement 62. An embodiment of the present disclosure includes a method according to Statement 59, further comprising:

[0277] receiving a first read request from the application executing on the processor, the first read request comprising a first logical address;

[0278] mapping the first logical address to a first address associated with the first storage device;

[0279] Sending a second read request to the first storage device, where the second read request includes the first address;

[0280] receiving a third read request from the application executing on the processor, the third read request including a second logical address;

[0281] mapping the second logical address to a second address associated with the second storage device; and

[0282] A fourth read request is sent to the second storage device, where the fourth read request includes the second address.

[0283] Statement 63. Embodiments of the present disclosure include a method according to Statement 62, wherein:

[0284] Sending a second read request to the first storage device includes:

[0285] receiving a first response from the first storage device; and

[0286] sending the first response to the application executing on the processor; and

[0287] Sending a fourth read request to the first storage device includes:

[0288] receiving a second response from the second storage device; and

[0289] The second response is sent to the application executing on the processor.

[0290] Statement 64. Embodiments of the present disclosure include a method according to Statement 55, wherein:

[0291] reserving the first portion of the first storage device for the application executing on the processor comprises reserving the first portion of the first storage device for the application executing on the processor using thin provisioning; and

[0292] Reserving the second portion of the second storage device for the application executing on the processor includes reserving the second portion of the second storage device for the application executing on the processor using thin provisioning.

[0293] Statement 65. An embodiment of the present disclosure includes a method according to Statement 55, further comprising:

[0294] receiving an updated physical capacity of the first storage device from the first storage device;

[0295] determining an updated logical capacity of the first storage device based at least in part on the updated physical capacity of the first storage device;

[0296] determining that the first size of the first portion of the first storage device is greater than an updated logical capacity of the first storage device; and

[0297] The first storage device is placed in a read-only mode based at least in part on the first size of the first portion being greater than a logical capacity of the updated first storage device.

[0298] Statement 66. An embodiment of the present disclosure includes a method according to Statement 55, further comprising:

[0299] receiving an updated physical capacity of the first storage device from the first storage device;

[0300] determining an updated logical capacity of the first storage device based at least in part on the updated physical capacity of the first storage device;

[0301] determining that a third size of the first portion of the first storage device is greater than an updated logical capacity of the first storage device; and

[0302] The first storage device is placed in a read-only mode based at least in part on the third size of the first portion being greater than a logical capacity of the updated first storage device.

[0303] Statement 67. An embodiment of the present disclosure includes a method according to Statement 66, further comprising:

[0304] reading the first data from the first portion of the first storage device; and

[0305] The first data is written.

[0306] Statement 68. An embodiment of the present disclosure includes a method according to Statement 67, wherein writing the first data comprises writing the first data to a second sector of a second storage device.

[0307] Statement 69. An embodiment of the present disclosure includes a method according to Statement 67, wherein writing the first data comprises writing the first data to a third sector of a third storage device.

[0308] Statement 70. An embodiment of the present disclosure includes the method of Statement 67, further comprising erasing the first data from the first storage device.

[0309] Statement 71. An embodiment of the present disclosure includes a method according to Statement 47, further comprising:

[0310] receiving an updated physical capacity of the first storage device from the first storage device; and

[0311] The first storage device is placed in a read-only mode based at least in part on the updated physical capacity of the first storage device.

[0312] Statement 72. An embodiment of the present disclosure includes a method according to Statement 71, wherein receiving from the first storage device an updated physical capacity of the first storage device comprises: receiving a message from the first storage device, the message including the updated physical capacity of the first storage device.

[0313] Statement 73. An embodiment of the present disclosure includes a method according to Statement 72, wherein receiving the message from the first storage device comprises sending a request to the first storage device for an updated physical capacity of the first storage device.

[0314] Statement 74. Embodiments of the present disclosure include a method according to Statement 73, wherein:

[0315] receiving an updated physical capacity of the first storage device from the first storage device includes receiving an interrupt from the first storage device;

[0316] Sending a request to the first storage device for an updated physical capacity of the first storage device includes sending a request to the first storage device for an updated physical capacity of the first storage device based at least in part on an interrupt.

[0317] Statement 75. An embodiment of the present disclosure includes a method according to Statement 73, wherein sending a request for an updated physical capacity of the first storage device to the first storage device includes: periodically sending a request for an updated physical capacity of the first storage device to the first storage device.

[0318] Statement 76. An embodiment of the present disclosure includes a method according to Statement 47, further comprising:

[0319] receiving an error count of the first storage device from the first storage device; and

[0320] The first storage device is placed in a read-only mode based at least in part on the error count of the first storage device.

[0321] Statement 77. An embodiment of the present disclosure includes a method according to Statement 76, wherein receiving from the first storage device an error count for the first storage device comprises: receiving a message from the first storage device, the message including the error count for the first storage device.

[0322] Statement 78. An embodiment of the present disclosure includes a method according to Statement 77, wherein receiving the message from the first storage device comprises sending a request to the first storage device for an error count of the first storage device.

[0323] Statement 79. Embodiments of the present disclosure include a method according to Statement 78, wherein:

[0324] receiving, from the first storage device, the error count of the first storage device comprising receiving an interrupt from the first storage device;

[0325] Sending a request for an error count of the first storage device to the first storage device includes sending a request for an error count of the first storage device to the first storage device based at least in part on an interrupt.

[0326] Statement 80. An embodiment of the present disclosure includes the method of Statement 78, wherein sending a request for an error count of the first storage device to the first storage device comprises periodically sending a request for an error count of the first storage device to the first storage device.

[0327] Statement 81. An embodiment of the present disclosure includes a method comprising:

[0328] receiving, at a storage device, a request from a virtual storage manager for capacity of the storage device; and

[0329] A response is sent from the storage device to the virtual storage manager including the physical capacity of the storage device.

[0330] Statement 82. Embodiments of the present disclosure include a method according to Statement 81, wherein:

[0331] The method further includes sending an interrupt from the storage device to the virtual storage manager; and

[0332] Receiving, at a storage device, a request from a virtual storage manager for capacity of the storage device includes receiving, at the storage device, a request from a virtual storage manager for capacity of the storage device based at least in part on the interrupt.

[0333] Statement 83. An embodiment of the present disclosure comprises a method according to Statement 82, wherein the interrupt comprises a message signaled interrupt (MSI) or an MSI extended (MSI-X) interrupt.

[0334] Statement 84. An embodiment of the present disclosure includes a method according to Statement 81, wherein sending a response from the storage device to the virtual storage manager that includes the physical capacity of the storage device includes: sending the response from the storage device to the virtual storage manager that includes the physical capacity of the storage device as the logical capacity of the storage device.

[0335] Statement 85. An embodiment of the present disclosure includes the method of Statement 81, wherein the storage device does not manage over-provisioning of the storage device.

[0336] Statement 86. An embodiment of the present disclosure includes a method according to Statement 81, further comprising:

[0337] receiving, at the storage device, from the virtual storage manager, a second request for updated capacity of the storage device; and

[0338] A second response is sent from the storage device to the virtual storage manager including the updated physical capacity of the storage device.

[0339] Statement 87. Embodiments of the present disclosure include a method according to Statement 86, wherein:

[0340] The method further includes sending an interrupt from the storage device to the virtual storage manager; and

[0341] Receiving, at the storage device, the second request for an updated capacity of the storage device from the virtual storage manager includes receiving, at the storage device, the second request for an updated capacity of the storage device from the virtual storage manager based at least in part on the interrupt.

[0342] Statement 88. Embodiments of the present disclosure include the method of Statement 87, wherein the interrupt comprises an MSI interrupt or an MSI-X interrupt.

[0343] Statement 89. An embodiment of the present disclosure includes a method according to Statement 86, wherein sending a second response from the storage device to the virtual storage manager including the updated physical capacity of the storage device includes: sending a second response from the storage device to the virtual storage manager including the updated physical capacity of the storage device as the updated logical capacity of the storage device.

[0344] Statement 90. An embodiment of the present disclosure includes a method according to Statement 81, further comprising:

[0345] receiving, at the storage device from the virtual storage manager, a third request for an error count for the storage device; and

[0346] A third response including the error count of the storage device is sent from the storage device to the virtual storage manager.

[0347] Statement 91. Embodiments of the present disclosure include a method according to Statement 90, wherein:

[0348] The method further includes sending an interrupt from the storage device to the virtual storage manager; and

[0349] Receiving, at the storage device, from the virtual storage manager, the third request for an error count for the storage device includes receiving, at the storage device, from the virtual storage manager, the third request for an error count for the storage device based at least in part on the interrupt.

[0350] Statement 92. Embodiments of the present disclosure include a method according to Statement 91, wherein the interrupt comprises an MSI interrupt or an MSI-X interrupt.

[0351] Statement 93. An embodiment of the present disclosure comprises a system comprising a non-transitory storage medium having stored thereon instructions that, when executed by a machine, perform a method comprising:

[0352] receiving, from a first storage device, a first physical capacity of the first storage device;

[0353] determining a first logical capacity of the first storage device based at least in part on the first physical capacity of the first storage device;

[0354] receiving, from a second storage device, a second physical capacity of the second storage device;

[0355] determining a second logical capacity of the second storage device based at least in part on the second physical capacity of the second storage device;

[0356] aggregating the first logical capacity of the first storage device and the second logical capacity of the second storage device to generate available capacity; and

[0357] Applications executing on the processor are informed of the available capacity.

[0358] Statement 94. An embodiment of the present disclosure comprises a system according to Statement 93, wherein the method is executed on a processor.

[0359] Statement 95. An embodiment of the present disclosure comprises a system according to Statement 94, wherein said method is executed as a virtual storage manager (VSM) on said processor.

[0360] Statement 96. An embodiment of the present disclosure comprises a system according to Statement 95, wherein the VSM executes in at least one of a kernel space of an operating system executing on the processor or a user space of an operating system executing on the processor.

[0361] Statement 97. An embodiment of the present disclosure comprises a system according to Statement 93, wherein notifying the application executing on the processor of the available capacity comprises notifying the application executing on the processor of the available capacity of a virtual storage device.

[0362] Statement 98. An embodiment of the present disclosure includes a system according to Statement 93, wherein:

[0363] Determining the first logical capacity of the first storage device based at least in part on the first physical capacity of the first storage device includes:

[0364] determining a first over-provisioning of the first storage device; and

[0365] determining the first logical capacity of the first storage device based on a difference between the first physical capacity of the first storage device and the first over-provisioning of the first storage device; and

[0366] Determining the second logical capacity of the second storage device based at least in part on the second physical capacity of the second storage device includes:

[0367] determining a second over-provisioning of the second storage device; and

[0368] The second logical capacity of the second storage device is determined based on a difference between the second physical capacity of the second storage device and the second over-provisioning of the second storage device.

[0369] Statement 99. An embodiment of the present disclosure includes a system according to Statement 98, wherein:

[0370] Determining the first over-provisioning of the first storage device includes: determining the first over-provisioning of the first storage device based at least in part on a workload of an application executing on the processor; and

[0371] Determining the second over-provisioning of the second storage device includes determining the second over-provisioning of the second storage device based at least in part on the workload of the application executing on the processor.

[0372] Statement 100. An embodiment of the present disclosure includes a system according to Statement 99, wherein determining the first logical capacity of the first storage device based at least in part on the first physical capacity of the first storage device further includes: receiving a workload of the application executing on the processor from the application executing on the processor.

[0373] Statement 101. An embodiment of the present disclosure comprises a system according to Statement 93, said non-transitory storage medium having further instructions stored thereon, said further instructions, when executed by a machine, causing:

[0374] receiving a request from the application executing on the processor to allocate a storage size, wherein the storage size is less than the available capacity;

[0375] reserving a first portion of the first storage device for the application executing on the processor, the first portion of the first storage device comprising a first size; and

[0376] reserving a second portion of the second storage device for the application executing on the processor, the second portion of the second storage device comprising a second size,

[0377] Wherein a combination of the first size of the first portion of the first storage device and the second size of the second portion of the second storage device is at least as large as the storage size.

[0378] Statement 102. An embodiment of the present disclosure comprises a system according to statement 101, wherein:

[0379] The non-transitory storage medium has further instructions stored thereon that, when executed by the machine, cause: determining the storage size as a relative percentage of the available capacity;

[0380] Reserving the first portion of the first storage device for the application executing on the processor includes: determining the first portion of the first storage device as the relative percentage of the first logical capacity of the first storage device; and

[0381] Reserving the second portion of the second storage device for the application executing on the processor includes determining the second portion of the second storage device as the relative percentage of the second logical capacity of the second storage device.

[0382] Statement 103. An embodiment of the present disclosure comprises a system according to statement 101, said non-transitory storage medium having further instructions stored thereon, said further instructions, when executed by said machine, causing:

[0383] determining a first difference value for the first storage device, the first difference value being calculated between the first size of the first portion of the first storage device and the first logical capacity of the first storage device;

[0384] determining a second difference value for the second storage device, the second difference value being calculated between the second size of the second portion of the second storage device and the second logical capacity of the second storage device;

[0385] using the first difference as an overprovisioning for the first storage device; and

[0386] The second difference is used as an overprovisioning for the second storage device.

[0387] Statement 104. An embodiment of the present disclosure comprises a system according to statement 101, said non-transitory storage medium having further instructions stored thereon, said further instructions, when executed by said machine, causing:

[0388] receiving a second request to allocate a second storage size from a second application executing on the processor, wherein a second combination of the storage size and the second storage size is less than the available capacity;

[0389] reserving a third portion of the first logical capacity of the first storage device for the second application executing on the processor; and

[0390] reserving a fourth portion of the second logical capacity of the second storage device for the second application executing on the processor,

[0391] Wherein, a third combination of the third portion of the first logical capacity of the first storage device and the fourth portion of the second logical capacity of the second storage device is at least as large as the second storage size.

[0392] Statement 105. An embodiment of the present disclosure comprises a system according to statement 101, said non-transitory storage medium having further instructions stored thereon, said further instructions, when executed by said machine, causing:

[0393] receiving a first write request from the application executing on the processor, the first write request including first data;

[0394] allocating a first segment of said first portion of said first storage device;

[0395] writing the first data to the first sector of the first portion of the first storage device;

[0396] receiving a second write request from the application executing on the processor, the second write request including second data;

[0397] allocating a second segment of the second portion of the second storage device; and

[0398] The second data is written to the second sector of the second portion of the second storage device.

[0399] Statement 106. An embodiment of the present disclosure includes the system of Statement 105, said non-transitory storage medium having further instructions stored thereon, said further instructions, when executed by said machine, causing:

[0400] receiving an updated physical capacity of the first storage device from the first storage device;

[0401] determining an updated logical capacity of the first storage device based at least in part on the updated physical capacity of the first storage device;

[0402] determining that a third size of the first portion of the first storage device is greater than an updated logical capacity of the first storage device; and

[0403] The first storage device is placed in a read-only mode based at least in part on the third size of the first portion being greater than a logical capacity of the updated first storage device.

[0404] Statement 107. An embodiment of the present disclosure comprises a system according to statement 106, said non-transitory storage medium having further instructions stored thereon, said further instructions, when executed by said machine, causing:

[0405] reading the first data from the first portion of the first storage device; and

[0406] The first data is written.

[0407] Statement 108. An embodiment of the present disclosure comprises a system according to Statement 107, wherein writing the first data comprises writing the first data to a second sector of a second storage device.

[0408] Statement 109. An embodiment of the present disclosure comprises a system according to Statement 107, wherein writing the first data comprises writing the first data to a third sector of a third storage device.

[0409] Statement 110. An embodiment of the present disclosure comprises a system according to Statement 107, said non-transitory storage medium having further instructions stored thereon, said further instructions, when executed by said machine, causing: erasing the first data from the first storage device.

[0410] Statement 111. An embodiment of the present disclosure comprises a system according to statement 105, wherein:

[0411] The first write request also includes a first logical address;

[0412] The second write request further includes a second logical address;

[0413] Writing the first data to the first sector of the first portion of the first storage device includes:

[0414] mapping the first logical address to a first address associated with the first storage device; and

[0415] Sending a third write request to the first storage device, the third write request including the first data and the first address; and

[0416] Writing the second data to the second section of the second portion of the second storage device includes:

[0417] mapping the second logical address to a second address associated with the second storage device; and

[0418] A fourth write request is sent to the second storage device, where the fourth write request includes the second data and the second address.

[0419] Statement 112. An embodiment of the present disclosure comprises a system according to Statement 111, wherein:

[0420] Writing the first data to the first sector of the first portion of the first storage device includes:

[0421] receiving a first response from the first storage device; and

[0422] sending the first response to the application executing on the processor; and

[0423] Writing the second data to the second section of the second portion of the second storage device includes:

[0424] receiving a second response from the second storage device; and

[0425] The second response is sent to the application executing on the processor.

[0426] Statement 113. An embodiment of the present disclosure includes the system of Statement 105, the non-transitory storage medium having further instructions stored thereon, the further instructions, when executed by the machine, causing:

[0427] receiving a first read request from the application executing on the processor, the first read request comprising a first logical address;

[0428] mapping the first logical address to a first address associated with the first storage device;

[0429] Sending a second read request to the first storage device, where the second read request includes the first address;

[0430] receiving a third read request from the application executing on the processor, the third read request including a second logical address;

[0431] mapping the second logical address to a second address associated with the second storage device; and

[0432] A fourth read request is sent to the second storage device, where the fourth read request includes the second address.

[0433] Statement 114. An embodiment of the present disclosure comprises a system according to Statement 113, wherein:

[0434] Sending a second read request to the first storage device includes:

[0435] receiving a first response from the first storage device; and

[0436] sending the first response to the application executing on the processor; and

[0437] Sending a fourth read request to the first storage device includes:

[0438] receiving a second response from the second storage device; and

[0439] The second response is sent to the application executing on the processor.

[0440] Statement 115. An embodiment of the present disclosure comprises a system according to statement 101, wherein:

[0441] reserving the first portion of the first storage device for the application executing on the processor comprises reserving the first portion of the first storage device for the application executing on the processor using thin provisioning; and

[0442] Reserving the second portion of the second storage device for the application executing on the processor includes reserving the second portion of the second storage device for the application executing on the processor using thin provisioning.

[0443] Statement 116. An embodiment of the present disclosure comprises a system according to statement 101, said non-transitory storage medium having further instructions stored thereon, said further instructions, when executed by said machine, causing:

[0444] receiving an updated physical capacity of the first storage device from the first storage device;

[0445] determining an updated logical capacity of the first storage device based at least in part on the updated physical capacity of the first storage device;

[0446] determining that the first size of the first portion of the first storage device is greater than an updated logical capacity of the first storage device; and

[0447] The first storage device is placed in a read-only mode based at least in part on the first size of the first portion being greater than a logical capacity of the updated first storage device.

[0448] Statement 117. An embodiment of the present disclosure comprises a system according to Statement 93, said non-transitory storage medium having further instructions stored thereon, said further instructions, when executed by said machine, causing:

[0449] receiving an updated physical capacity of the first storage device from the first storage device; and

[0450] The first storage device is placed in a read-only mode based at least in part on the updated physical capacity of the first storage device.

[0451] Statement 118. An embodiment of the present disclosure includes a system according to Statement 117, wherein receiving from the first storage device an updated physical capacity of the first storage device comprises: receiving a message from the first storage device, the message including the updated physical capacity of the first storage device.

[0452] Statement 119. An embodiment of the present disclosure includes the system of Statement 118, wherein receiving the message from the first storage device comprises sending a request to the first storage device for an updated physical capacity of the first storage device.

[0453] Statement 120. An embodiment of the present disclosure comprises a system according to Statement 119, wherein:

[0454] receiving an updated physical capacity of the first storage device from the first storage device includes receiving an interrupt from the first storage device;

[0455] Sending a request to the first storage device for an updated physical capacity of the first storage device includes sending a request to the first storage device for an updated physical capacity of the first storage device based at least in part on an interrupt.

[0456] Statement 121. An embodiment of the present disclosure includes a system according to Statement 119, wherein sending a request for an updated physical capacity of the first storage device to the first storage device includes: periodically sending a request for an updated physical capacity of the first storage device to the first storage device.

[0457] Statement 122. An embodiment of the present disclosure comprises a system according to Statement 93, said non-transitory storage medium having further instructions stored thereon, said further instructions, when executed by said machine, causing:

[0458] receiving an error count of the first storage device from the first storage device; and

[0459] The first storage device is placed in a read-only mode based at least in part on the error count of the first storage device.

[0460] Statement 123. An embodiment of the present disclosure includes a system according to Statement 122, wherein receiving from the first storage device an error count for the first storage device comprises: receiving a message from the first storage device, the message including the error count for the first storage device.

[0461] Statement 124. An embodiment of the present disclosure comprises a system according to Statement 123, wherein receiving the message from the first storage device comprises sending a request to the first storage device for an error count of the first storage device.

[0462] Statement 125. An embodiment of the present disclosure includes a system according to statement 124, wherein:

[0463] receiving, from the first storage device, the error count of the first storage device comprising receiving an interrupt from the first storage device;

[0464] Sending a request for an error count of the first storage device to the first storage device includes sending a request for an error count of the first storage device to the first storage device based at least in part on an interrupt.

[0465] Statement 126. An embodiment of the present disclosure includes a system according to Statement 124, wherein sending a request for an error count of the first storage device to the first storage device comprises: periodically sending a request for an error count of the first storage device to the first storage device.

[0466] Statement 127. Embodiments of the present disclosure include a system comprising a non-transitory storage medium having further instructions stored thereon that, when executed by the machine, cause:

[0467] receiving, at a storage device, a request from a virtual storage manager for capacity of the storage device; and

[0468] A response is sent from the storage device to the virtual storage manager including the physical capacity of the storage device.

[0469] Statement 128. An embodiment of the present disclosure includes a system according to Statement 127, wherein:

[0470] The non-transitory storage medium has further instructions stored thereon that, when executed by the machine, cause: sending an interrupt from the storage device to the virtual storage manager; and

[0471] Receiving, at a storage device, a request from a virtual storage manager for capacity of the storage device includes receiving, at the storage device, a request from a virtual storage manager for capacity of the storage device based at least in part on the interrupt.

[0472] Statement 129. An embodiment of the present disclosure comprises a system according to Statement 128, wherein the interrupt comprises a message signaled interrupt (MSI) or an MSI extended (MSI-X) interrupt.

[0473] Statement 130. An embodiment of the present disclosure includes a system according to Statement 127, wherein sending a response from the storage device to the virtual storage manager that includes the physical capacity of the storage device includes: sending the response from the storage device to the virtual storage manager that includes the physical capacity of the storage device as the logical capacity of the storage device.

[0474] Statement 131. An embodiment of the present disclosure includes the system of Statement 127, wherein the storage device does not manage over-provisioning of the storage device.

[0475] Statement 132. An embodiment of the present disclosure comprises a system according to Statement 127, said non-transitory storage medium having further instructions stored thereon, said further instructions, when executed by said machine, causing:

[0476] receiving, at the storage device, from the virtual storage manager, a second request for updated capacity of the storage device; and

[0477] A second response is sent from the storage device to the virtual storage manager including the updated physical capacity of the storage device.

[0478] Statement 133. An embodiment of the present disclosure includes a system according to Statement 132, wherein:

[0479] The non-transitory storage medium has further instructions stored thereon that, when executed by the machine, cause: sending an interrupt from the storage device to the virtual storage manager; and

[0480] Receiving, at the storage device, the second request for an updated capacity of the storage device from the virtual storage manager includes receiving, at the storage device, the second request for an updated capacity of the storage device from the virtual storage manager based at least in part on the interrupt.

[0481] Statement 134. An embodiment of the present disclosure comprises a system according to Statement 133, wherein the interrupt comprises an MSI interrupt or an MSI-X interrupt.

[0482] Statement 135. An embodiment of the present disclosure includes a system according to statement 132, wherein sending a second response from the storage device to the virtual storage manager including the updated physical capacity of the storage device includes: sending a second response from the storage device to the virtual storage manager including the updated physical capacity of the storage device as the updated logical capacity of the storage device.

[0483] Statement 136. An embodiment of the present disclosure comprises a system according to Statement 127, said non-transitory storage medium having further instructions stored thereon, said further instructions, when executed by said machine, causing:

[0484] receiving, at the storage device from the virtual storage manager, a third request for an error count for the storage device; and

[0485] A third response including the error count of the storage device is sent from the storage device to the virtual storage manager.

[0486] Statement 137. An embodiment of the present disclosure comprises a system according to Statement 136, wherein:

[0487] The non-transitory storage medium has further instructions stored thereon that, when executed by the machine, cause: sending an interrupt from the storage device to the virtual storage manager; and

[0488] Receiving, at the storage device, from the virtual storage manager, the third request for an error count for the storage device includes receiving, at the storage device, from the virtual storage manager, the third request for an error count for the storage device based at least in part on the interrupt.

[0489] Statement 138. An embodiment of the present disclosure comprises a system according to Statement 137, wherein the interrupt comprises an MSI interrupt or an MSI-X interrupt.

[0490] Therefore, in view of the various arrangements of the embodiments described herein, this detailed description and the accompanying materials are intended to be illustrative only and should not be taken as limiting the scope of the disclosure. Therefore, the present disclosure claims all such modifications that may fall within the scope and spirit of the appended claims and their equivalents.

Claims

1. A solid state drive (SSD), comprising: Flash storage media; as well as A controller for accessing data on the flash storage medium, The SSD is configured to notify a virtual storage manager (VSM) of the physical capacity of the flash storage medium.

2. The SSD according to claim 1, wherein: The SSD is further configured to update the physical capacity of the flash storage medium to a second physical capacity based at least in part on a block failure in the flash storage medium.

3. The SSD according to claim 2, wherein: The SSD is further configured to notify the VSM of the updated physical capacity of the flash storage medium.

4. The SSD according to claim 1, wherein: The SSD is also configured to support thin provisioning. 5 . The SSD of claim 1 , further comprising firmware for advertising the physical capacity of the flash storage medium to the VSM.

6. A virtual storage manager (VSM), comprising: A tracking module, configured to track a first physical capacity of the first storage device and a second physical capacity of the second storage device; an aggregation module for determining an available capacity of a virtual storage device based at least in part on the first physical capacity of the first storage device and the second physical capacity of the second storage device; as well as An allocation module is configured to allocate a first portion of the first storage device and a second portion of the second storage device to an application executing on a processor based at least in part on the available capacity of the virtual storage device.

7. The VSM according to claim 6, further comprising a notification module for notifying the application executing on the processor of the available capacity.

8. The VSM of claim 6, wherein: The aggregation module includes an over-provisioning module for determining a first over-provisioning of the first storage device and for determining a second over-provisioning of the second storage device; as well as The aggregation module is configured to determine the available capacity of the virtual storage device based at least in part on the first physical capacity of the first storage device, the first overcommitment of the first storage device, the second physical capacity of the second storage device, and the second overcommitment of the second storage device.

9. The VSM of claim 6, wherein: the first portion of the first storage device comprising a first size; the second portion of the second storage device comprises a second size; and A combination of the first size and the second size is at least as large as a storage size requested by the application executing on the processor.

10. The VSM of claim 6, wherein: The allocation module is configured to: determining the relative percentage of the available capacity based at least in part on a storage size requested by the application executing on the processor; allocating the first portion of the first storage device to the application executing on the processor based at least in part on the relative percentage of the first physical capacity of the first storage device; as well as The second portion of the second storage device is allocated to the application executing on the processor based at least in part on the relative percentage of the second physical capacity of the second storage device.

11. The VSM of claim 6, wherein: The allocation module is configured to: reserving the first portion of the first storage device for the application executing on the processor; reserving the second portion of the second storage device for the application executing on the processor; allocating a first segment of the first portion of the first storage device based at least in part on receiving a first write request from the application executing on the processor; as well as A second segment of the second portion of the second storage device is allocated based at least in part on receiving a second write request from the application executing on the processor.

12. The VSM of claim 6, wherein: The VSM is configured to place the first storage device in a read-only mode based at least in part on an updated physical capacity of the first storage device or an error count of the first storage device.

13. The VSM of claim 6, further comprising a mapping module for mapping a logical address used by the application executing on the processor to an address on one of the first storage device or the second storage device.

14. A method operated by a virtual storage manager (VSM), comprising: receiving, from a first storage device, a first physical capacity of the first storage device; determining a first logical capacity of the first storage device based at least in part on the first physical capacity of the first storage device; receiving, from a second storage device, a second physical capacity of the second storage device; determining a second logical capacity of the second storage device based at least in part on the second physical capacity of the second storage device; aggregating the first logical capacity of the first storage device and the second logical capacity of the second storage device to generate available capacity; as well as Applications executing on the processor are informed of the available capacity.

15. The method according to claim 14, wherein Notifying the application executing on the processor of the available capacity includes notifying the application executing on the processor of the available capacity of a virtual storage device.

16. The method of claim 14, wherein: Determining the first logical capacity of the first storage device based at least in part on the first physical capacity of the first storage device includes: determining a first over-provisioning of the first storage device; and determining the first logical capacity of the first storage device based on a difference between the first physical capacity of the first storage device and the first over-provisioning of the first storage device; and Determining the second logical capacity of the second storage device based at least in part on the second physical capacity of the second storage device includes: determining a second over-provisioning of the second storage device; and The second logical capacity of the second storage device is determined based on a difference between the second physical capacity of the second storage device and the second over-provisioning of the second storage device.

17. The method according to claim 14, further comprising: receiving a request from the application executing on the processor to allocate a storage size, wherein the storage size is less than the available capacity; reserving a first portion of the first storage device for the application executing on the processor, the first portion of the first storage device comprising a first size; and reserving a second portion of the second storage device for the application executing on the processor, the second portion of the second storage device comprising a second size, Wherein a combination of the first size of the first portion of the first storage device and the second size of the second portion of the second storage device is at least as large as the storage size.

18. The method according to claim 17, wherein: reserving the first portion of the first storage device for the application executing on the processor comprises reserving the first portion of the first storage device for the application executing on the processor using thin provisioning; and Reserving the second portion of the second storage device for the application executing on the processor includes reserving the second portion of the second storage device for the application executing on the processor using thin provisioning.

19. The method according to claim 17, further comprising: receiving an updated physical capacity of the first storage device from the first storage device; determining an updated logical capacity of the first storage device based at least in part on the updated physical capacity of the first storage device; determining that the first size of the first portion of the first storage device is greater than the updated logical capacity of the first storage device; as well as The first storage device is placed in a read-only mode based at least in part on the first size of the first portion being greater than a logical capacity of the updated first storage device.

20. The method according to claim 19, further comprising: reading the first data from the first portion of the first storage device; as well as The first data is written.