Patent Description:
Typically, a large-scale data compute system is implemented with arrays of hard-disk devices, solid-state memory devices, and other types of storage devices or combinations thereof. To simplify management, lower cost, and improve performance, some large-scale data compute systems enable Single Root Input Output Virtualization (SR-IOV). A large-scale data compute system may grow over time to have multiple generations and types of storage devices including, SR-IOV capable storage devices and storage devices that do not natively support SR-IOV. As a result, some parts of a large-scale data compute system may be inefficient as no common implementation of hardware enabled storage virtualization can be utilized.

<CIT> relates to virtual storage target offload techniques. A virtual machine storage service can use a unique network identifier and a SR-IOV compliant device can be used to transport IO between a virtual machine and the virtual machine storage service. The virtual machine storage service can be offloaded to a child partition or migrated to another physical machine along with the unique network identifier.

It is the object of the present invention to provide an improved technique for enabling SR-IOV on storage media.

The object is solved by the subject matter of the independent claims.

This summary is provided to introduce subject matter that is further described in the Detailed Description and Drawings. Accordingly, this Summary should not be considered to describe essential features nor used to limit the scope of the claimed subject matter.

In some aspects, a storage media switch implements a method for supporting virtual functions on storage media. The switch implements the method by receiving, via a host interface, a host command from a host, and responsive to receiving the host command, determining a virtual function identifier associated with the host command. The switch furthers the method by selecting, based on the virtual function identifier, a virtual function of the storage media for executing the host command. Responsive to executing the host command using the virtual function assigned to the storage media, the switch continues the method by responding, via the host interface, to the host command. By implementing the method to automatically enable support for virtual functions in this way, the switch may automatically (e.g., without host involvement) enable support for virtual functions on a variety of storage media types, including storage media that is without native virtual function support. Automatically supporting virtual functions provides more isolation and partitioning functionalities to applications or services executing at a host, without requiring involvement or use of host computing resources.

In other aspects, an apparatus comprises a hardware-based processor, a memory coupled to the processor and configured to maintain processor-executable instructions that, responsive to execution, implement an application on the apparatus, and a host interface configured to enable the application to act as a host to access data in storage media associated with the apparatus. A storage media switch of the apparatus is coupled to the host interface and provides a storage media interface. The storage media switch is configured to: receive, via the host interface, a host command from the application acting as a host; responsive to receiving the host command, determine a virtual function identifier associated with the host command, and select, based on the virtual function identifier, a virtual function of the storage media for executing the host command. Responsive to executing the host command over the storage media interface and using the virtual function assigned to the storage media, the storage media switch is configured to respond, via the host interface, to the host command.

In yet other aspects, a System-on-Chip (SoC) is described that includes a storage media interface to storage media, a host interface to a host, a hardware-based processor, and a memory configured to store processor-executable instructions. Responsive to execution by the hardware-based processor, the processor-executable instructions implement a storage media switch to: receive, via the host interface, a host command from the host, responsive to receiving the host command, determine a virtual function identifier associated with the host command, and select, based on the virtual function identifier, a virtual function of the storage media for executing the host command. Further, responsive to execution by the hardware-based processor, the processor-executable instructions implement the storage media switch to respond, via the host interface, to the host command in response to executing the host command over the storage media interface and using the virtual function assigned to the storage media.

The details of one or more implementations are set forth in the accompanying drawings and the following description.

The details of one or more implementations of enabling virtual function support on storage media are set forth in the accompanying figures and the detailed description below. In the figures, the left-most digit of a reference number identifies the figure in which the reference number first appears. The use of the same reference numbers in different instances in the description and the figures indicates like elements:.

In a large-scale data compute system, SR-IOV may be used to manage physical storage devices as one or more virtual functions by abstracting upper layer protocols from physical connections. Through SR-IOV a host may command a virtual function without regard to how the virtual function is implemented. As such, SR-IOV may cause a single storage device to be divided in many different ways to appear as multiple virtual functions. SR-IOV may combine multiple storage devices in many different ways to appear as a single virtual function or multiple virtual functions.

Large-scale data compute systems may be implemented with arrays of storage devices that support SR-IOV and storage devices that do not support SR-IOV. Portions of storage media that do not support SR-IOV may be unavailable to hosts of the data compute system that require virtual functions.

A storage media switch is described that enables hosts to fully utilize virtual functions and SR-IOV capability using any part of a data compute system, including using storage devices that are not inherently SR-IOV capable. On behalf of the data compute system, the storage media switch responds to host commands sent to the data compute system over a standard, high-speed serial computer expansion bus interface, such as Peripheral Component Interface Express (PCIe®). By managing communication sent between the data compute system and the host, the storage media switch may direct the data compute system to provide SR-IOV functionality, including on storage devices that do not natively support SR-IOV.

When enabling virtual functionality on storage devices that are not inherently SR-IOV capable, the storage media switch automatically maps virtual functions through a virtual address windowing scheme built inside the storage media switch. Applying the virtual address windowing scheme to a host command enables the storage media switch to track the host command through the processing pipeline to enable the switch to subsequently respond to the proper host.

The scheme requires the switch to track each host command with a corresponding virtual function identifier. Each unique virtual function identifier corresponds to a different virtual function. A host may designate a virtual function for a host command by including the virtual function identifier in a virtual address field of the host command. For an untagged command received from a host, the switch may tag or encode the host command by automatically encoding a virtual address field of the host command with a virtual function identifier.

The portion (e.g., bits) of the virtual address field used to hold the virtual function identifier may be arbitrarily chosen either from a sign-extended canonical address portion or any unused portion of the virtual address. Internally, the switch utilizes these tagged address portions or bits to route the host initiated read/write transactions in response to the original host command and also to route those transaction back to the host upon completion.

A virtual address field of a host command may include additional capacity (e.g., bytes, bits) beyond what is necessary to designate a virtual function address. This additional capacity may normally be unused. For example, a virtual address field of a host command may include bits of information that are not checked or used by the host or the storage media switch. The unused address portion of the virtual address field may instead include redundant bits of information, e.g., a sign-extended canonical portion of the virtual address contained within the host command, that if omitted or incorrect, may not affect the host or the storage media switch. The switch may require the unused portion of the virtual address field to include an indication of a virtual function identifier.

A host or the switch may add the virtual function identifier to each host command. The host may tag or encode a virtual function identifier into each host command's virtual address, including the command embedded physical region pages (PRP) list, before outputting the host command to the host interface of the storage media switch. Alternatively, after receiving a host command at the host interface of the switch, the storage media switch may tag or encode each host command's virtual address with the virtual function identifier, including the command PRP list.

During execution of the host command, the switch determines the virtual function identifier encoded in the host command and initiates read or write transactions to and from the host memory using the virtual function corresponding to the determined virtual function identifier. The switch may remove the virtual function identifier tagged to the virtual address of the host command when responding to the host command. The switch may restore the normally unused portion of the virtual address of the host command (e.g., the sign-extended canonical portion of the virtual address) to a predefined state before acknowledging the host command as having been completed. For instance, the switch may determine an "untagged" original address associated with a host command by removing the virtual function identifier from the virtual address contained within the host command and by responding to the host command by including the original address and not including the virtual function identifier (e.g., for host memory access).

When enabling virtual functionality on storage devices already inherently SR-IOV capable, the storage media switch may choose to bind frontend virtual functions to virtual functions of backend storage media devices. For example, the switch may automatically map virtual functions to corresponding storage media devices by matching drive request identifiers of storage media connected to a storage media interface of the switch, and also to the virtual functions specified in the host commands. In this way, virtual function identifiers do not need to be tagged or encoded in the host command to initiate read/write transactions from/to the host memory. Rather, virtual functions may be mapped automatically with the host specifying the virtual function using the built-in drive request identifier.

In various aspects of automatically mapping virtual functions to storage media to enable single root input output virtualization, a storage media switch manages access to virtual functions that execute behind a storage media interface of the switch. The switch also includes a host interface from which the switch exchanges information, including host commands, with a host. The switch determines virtual function identifiers associated with the host commands and automatically selects the virtual functions of the storage media based on the virtual function identifiers. Alternatively, in an unclaimed embodiment, the switch selects the virtual functions of the storage media based on the virtual functions specified in the host commands, e.g., by matching the virtual functions to drive request identifiers of storage media connected to a storage media interface of the switch.

The switch executes the host commands over the storage media interface using the virtual functions, and after execution, responds via the host interface to each of the host commands. By automatically mapping virtual functions in this way, the switch enables single root input output virtualization on any storage media, including storage media that is without native support for virtual functions.

The following discussion describes an operating environment, techniques that may be employed in the operating environment, and a System-on-Chip (SoC) in which components of the operating environment may be embodied. In the context of the present disclosure, reference is made to the operating environment by way of example only.

<FIG> illustrates an example operating environment <NUM> having host devices <NUM> (referred to simply as a single "host device <NUM>") in which virtual function support or QoS over a virtual interface may be implemented in accordance with one or more aspects. The host device <NUM> of the operating environment <NUM> is capable of storing or accessing various forms of data, files, objects, or information. Examples of the host device <NUM> may include a computing cluster <NUM> (e.g., of a cloud <NUM>), a server <NUM> or server hardware of a data center <NUM>, or a server <NUM> (e.g., standalone), any of which may be configured as part of a storage network, storage service, or cloud system. Further examples of the host devices <NUM> (not shown) may include a tablet computer, a set-top-box, a data storage appliance, wearable smart-device, television, content-streaming device, high-definition multimedia interface (HDMI) media stick, smart appliance, home automation controller, smart thermostat, Internet-of Things (IoT) device, mobile-internet device (MID), a network-attached-storage (NAS) drive, aggregate storage system, server blade, gaming console, automotive entertainment device, automotive computing system, automotive control module (e.g., engine or power train control module), and so on. Generally, the host device <NUM> may communicate or store data for any suitable purpose, such as to enable functionalities of a particular type of device, provide a user interface, enable network access, implement gaming applications, playback media, provide navigation, edit content, provide data storage, or the like.

The host device <NUM> includes processors <NUM> and computer-readable storage media <NUM>. The processors <NUM> may be implemented as any suitable type or number of processors (e.g. , x86 or ARM), either single-core or multi-core, for executing instructions or commands of an operating system or other programs of the host device <NUM>. The computer-readable media <NUM> (CRM <NUM>) includes system memory <NUM> from which virtual machines <NUM> of a host may be executed or implemented. The system memory <NUM> of the host device <NUM> may include any suitable type or combination of volatile memory or nonvolatile memory. For example, the volatile memory of host devices <NUM> may include various types of random-access memory (RAM), dynamic RAM (DRAM), static RAM (SRAM) or the like. The non-volatile memory may include read-only memory (ROM), electronically erasable programmable ROM (EEPROM) or Flash memory (e.g., NOR Flash or NAND Flash). These memories, individually or in combination, may store data associated with applications, tenants, workloads, initiators, virtual machines, and/or an operating system of the host device <NUM>.

In this example, the host device <NUM> includes a storage media switch <NUM> and storage media <NUM>, which may be accessed through the storage media switch <NUM>. Although shown as being combined with the host device <NUM>, the storage media switch <NUM> and/or the storage media <NUM> may be implemented separately from or remotely from the host device <NUM>. The storage media <NUM> of the host device <NUM> may be configured as any suitable type of data storage media, such as a storage device, storage drive, storage array, storage volume, or the like. Although described with reference to the host device <NUM>, the storage media <NUM> may also be implemented separately as a standalone device or as part of a larger storage collective, such as a data center, server farm, or virtualized storage system (e.g., for cloud-based storage or services). Examples of the storage media <NUM> include a hard-disk drive (HDD, not shown), an optical-disk drive (not shown), a solid-state drive <NUM> (SSD <NUM>) or array of m+<NUM> SSDs <NUM>-<NUM> through <NUM>-m.

Each of the SSDs <NUM> includes or is formed from non-volatile memory devices on which data or information of the host device <NUM> or other sources is stored. The non-volatile memory devices may be implemented with any type or combination of solid-state memory media, such Flash, NAND Flash, NAND memory, RAM, DRAM (e.g., for caching), SRAM, or the like. In some cases, the data stored to the non-volatile memory devices may be organized into files of data (e.g., content) or data objects that are stored to the SSDs <NUM> and accessed by the host device <NUM> or tenants, workloads, or initiators of the host device. The types, sizes, or formats of the files may vary depending on a respective source, use, or application associated with the file. For example, the files stored to the SSDs <NUM> may include audio files, video files, text files, image files, multimedia files, spreadsheets, and so on.

In this example, the storage media switch <NUM> (switch <NUM>) of the host device <NUM> is capable of supporting virtualization, providing QoS over a virtual interface, and implementing virtual functions associated with the storage media <NUM>. In some aspects, the storage media switch <NUM> includes a virtual function (VF) address engine <NUM>, VF mappings <NUM>, a Quality of Service (QoS) Manager <NUM>, and QoS Parameters <NUM>, each of which may be implemented to perform respective operations or functions for supporting virtualization, providing QoS, and enabling virtual functions associated with the storage media <NUM>. The implementations and uses of these entities vary and are described throughout this disclosure.

Generally, the VF address engine <NUM> may enable virtual function support, for storage media that is not inherently SR-IOV capable as well as for storage media that already supports virtual functions. The VF address engine <NUM> processes host commands to automatically map the host commands to the appropriate virtual functions. The VF address engine <NUM> may, in some examples, extract a virtual function identifier from the host command. In other examples, where the storage media <NUM> inherently supports SR-IOV, the VF address engine <NUM> may determine the virtual function identifier by looking up a routing identifier associated with the storage media <NUM> from within the VF mappings <NUM>. Using the VF mappings <NUM>, the VF address engine <NUM> determines a virtual function associated with the virtual function identifier. With the virtual function identifier, the VF address engine <NUM> selects a virtual function of the storage media <NUM> for executing the host command. Responsive to directing the storage media <NUM> to execute transactions for implementing the host command, the VF address engine <NUM> may respond, via the host interface, to the host command.

In various aspects, the QoS manager <NUM> may ensure that execution of host commands is managed to a quality of service level associated with a particular application, client, host, virtual machine of the host, tenant of the host, or the like. For example, the QoS manager <NUM> may determine a QoS for a virtual machine executing on a host device <NUM> and ensure that I/O commands and data access transactions between the host device <NUM> and storage media <NUM> to achieve the determined level QoS. Alternately or additionally, the QoS manager <NUM> may measure and retain values of the QoS parameters <NUM> that the QoS manager <NUM> uses when responding to a host command.

The host device <NUM> may also include I/O ports <NUM>, a graphics processing unit <NUM> (GPU), and data interfaces <NUM>. Generally, the I/O ports <NUM> allow a host device <NUM> to interact with other devices, peripherals, or users. For example, the I/O ports <NUM> may include or be coupled with a universal serial bus, human interface devices, audio inputs, audio outputs, or the like. The GPU <NUM> processes and renders graphics-related data for host device <NUM>, such as user interface elements of an operating system, applications, or the like. In some cases, the GPU <NUM> accesses a portion of local memory to render graphics or includes dedicated memory for rendering graphics (e.g., video RAM) of the host device <NUM>.

The data interfaces <NUM> of the host device <NUM> provide connectivity to one or more networks and other devices connected to those networks. The data interfaces <NUM> may include wired interfaces, such as Ethernet or fiber optic interfaces for communicated over a local network, intranet, or the Internet. Alternately or additionally, the data interfaces <NUM> may include wireless interfaces that facilitate communication over wireless networks, such as wireless LANs, wide-area wireless networks (e.g., cellular networks), and/or wireless personal-area-networks (WPANs). Any of the data communicated through the I/O ports <NUM> or the data interfaces <NUM> may be written to or read from the storage media <NUM> of the host device <NUM> in accordance with one or more aspects of this disclosure.

The data interfaces <NUM> may support a host interface of the storage media switch <NUM> and a storage media interface of the storage media switch <NUM>. For example, the storage media switch <NUM> may receive host commands and respond to host commands from the host interface. The storage media switch <NUM> may direct transactions over the storage media interface to cause the storage media <NUM> to execute the host commands.

<FIG> illustrates example configurations of a storage media switch <NUM> and SSDs <NUM> shown in <FIG>. In this example, the storage media switch <NUM> is operably coupled between a host <NUM> and SSDs <NUM>-<NUM> through <NUM>-n (collectively "SSDs <NUM>") from which virtualized areas, partitions, or segments of storage are provided (e.g., isolated areas of storage). The storage media switch may be coupled to the host <NUM> and/or the SSDs through one or more respective PCIe interfaces (not shown) that may communicate in compliance with an NVMe protocol (e.g., NVMe rev <NUM>) In this example, the host <NUM> (e.g., a host device <NUM>) includes multiple virtual machines <NUM> that execute on compute resources <NUM> of the host. Generally, the compute resources <NUM> of the host <NUM> may include combinations of processing resources and system memory of the host <NUM> which are used to implement the applications, virtual machines, tenants, or initiators that access storage associated with the host <NUM>.

The storage media switch <NUM> may enable virtual functions on storage media and/or provide QoS over virtual functions for solid-state storage in accordance with one or more aspects. In this example, the storage media switch <NUM>, or a controller thereof (not shown), enables access to storage media associated with the switch through VFs <NUM>-<NUM> through <NUM>-w (collectively "virtual functions <NUM>"). Generally, the virtual functions <NUM> are focused primarily on data movement between the VMs <NUM> of the host <NUM> and storage provided by the SSDs <NUM> and are each associated with a physical function <NUM>. Although one instance of the physical function <NUM> is shown, the storage media switch <NUM> may be implemented with any number and/or combination of physical and virtual functions. The physical function <NUM> of <FIG> may be equivalent to one or more functions of a typical PCIe physical function device. In some cases, the physical function <NUM> is responsible for arbitration relating to policy decisions, such as link speed or network addresses in use by the VMs <NUM> in the case of networking, and for handling various input and output transactions between the storage media switch <NUM> and the VMs <NUM> and the SSDs <NUM>.

Generally, tenants or initiators of the VMs <NUM>, or the host <NUM>, access data stored in the SSDs <NUM>. In some implementations, the storage media switch <NUM> presents aggregated storage media, such as SSDs <NUM>, as a virtual disk or storage volume to the host <NUM> or the VMs <NUM> of the host. In the context of NVMe, this virtual disk may be segmented or partitioned into different areas that are accessed through a namespace. In other words, data access to the virtual disk or SSDs <NUM> may be consumed through one or more namespaces that correspond to segments or stripes of the virtual disk or storage media. As shown in <FIG>, each of the SSDs <NUM> may be implemented with an SSD controller <NUM>-<NUM> through <NUM>-n through which NAND channels <NUM>-<NUM> through <NUM>-<NUM> are accessible. Each channel <NUM> of NAND (e.g., channel A or NAND channel <NUM>) includes multiple NAND devices, which may be implemented as separate NAND devices or NAND dies of the SSD <NUM> that are accessible or addressable through a respective NAND channel.

In some aspects, the storage media switch <NUM> manages access to the virtual functions <NUM>. For example, the storage media switch <NUM> may exchange information, including host commands, with the host <NUM>, such as facilitate data access between the SSDs <NUM> and host memory. In some cases, the storage media switch <NUM> determines virtual function identifiers associated with the host commands and automatically selects the virtual functions <NUM> based on the virtual function identifiers. Alternatively, the switch selects the virtual functions <NUM> based on the virtual functions <NUM> specified in the host commands, e.g., by matching the virtual functions <NUM> to drive request identifiers of the SSDs <NUM>.

The storage media switch <NUM>, or a processor of the switch <NUM> (not shown), may also execute the host commands of the virtual functions <NUM>, and after execution, respond to each of the host commands. By automatically mapping the virtual functions <NUM> in this way, the storage media switch <NUM> enables SR-IOV for or on any of the SSDs <NUM>, including any of the SSDs <NUM> that lack native support for virtual functions or SR-IOV-based features.

<FIG> illustrates an example configuration of a storage media switch <NUM> (switch <NUM>) associated with a host and multiple solid-state drives generally at <NUM>, which are implemented in accordance with one or more aspects of providing QoS over a virtual interface for solid-state storage. In this example, the switch <NUM> is operably coupled between a host <NUM> (not shown) and an array of SSDs <NUM>, which have each been segmented into eight horizontally striped namespaces (NS0 through NS31). Each of the SSDs <NUM> may be connected to the switch <NUM> via an NVMe interface, such as an NVMe interface implemented over a x4, x8, or x16 PCIe interface. Alternately or additionally, the host <NUM> may be connected to the switch by an NVMe interface to enable data transaction through the switch <NUM> to the SSDs <NUM> or other storage.

Generally, the NVMe specification or protocol supports namespace-based access of storage media or SSDs in this example. In aspects of providing QoS, a virtual function of the switch <NUM> is mapped to a namespace for a segment or partition of the virtual disk. By so doing, QoS may be enabled and managed using a namespace, such that VMs or tenants may subscribe to a level of service for storage access which is administered through namespace-based access of the storage media. In other words, a client or customer subscribes to a pre-defined amount of bandwidth and is connected to a virtual function on the host or by the host. This virtual function, which is mapped to the namespace within the switch <NUM>, is allocated bandwidth or access to the storage media based on a threshold or quota assigned to the namespace, such as in accordance with the subscription for data access at a particular service level. Within an NVMe subsystem of the switch <NUM>, multiple isolated domains may be supported through the use of the virtual functions provided through SR-IOV over PCIe. By so doing, an administrator on the host can plug tenants into different address domains into this, such as VMs, and provide isolated and distinct access to the storage, and this access and consumption of the storage is made through the form of namespaces.

Returning to <FIG>, the host <NUM> may be implemented as a multi-tenant host with any suitable number of virtual machines or tenants having access to respective NVMe command queues. In this example, the host <NUM> includes <NUM> VMs (not shown) that each have sets of NVMe queues <NUM>-<NUM> through <NUM>-<NUM> that are mapped to respective virtual functions <NUM> (VF0-VF31, grouped as VF <NUM>-<NUM> through VF <NUM>-<NUM>) of the switch <NUM>. These NVMe queues <NUM>-<NUM> through <NUM>-<NUM> may be implemented in host memory and configured by the host to be any suitable number of administrative queues (admin queues) or I/O command queues. Here, each VM is allocated four queues with one configured as an admin queue and three configured as I/O command queues.

In some aspects, inbound and outbound queue engines of a hardware layer of the switch <NUM> may support up to <NUM> NVMe host submission queues (SQ) and host completion (CQ) queue pairs. Each of these queues may be individually mapped to any of the PCIe physical functions or virtual functions provided by the storage media switch <NUM>. A host device or server implementing the VMs may associate each host VM to a respective VF <NUM> within the switch <NUM>. The VM may map the NVMe queues associated with the VM to a respective VF <NUM> within the switch <NUM> and/or further bind the NVMe queue to any of the SQ or CQs queues provided by the switch <NUM>. In other words, a VM manager running on a host (e.g., server) may associate each host VM with a respective VF. Thereafter a VM itself may map the NVMe queues in its space with that VF, thereby effective to cause the NVMe queue to be bound to any of the SQs or CQs provided by the switch <NUM>.

With respect to priority, the submission queues within a VM may be assigned equal, higher or lower priority through an NVMe based arbitration policy (Fixed or Weighted-Round Robin) that is available or configurable on a per queue basis. This may be useful when one or more VMs use different ones of the multiple submission queues to prioritize certain commands associated with particular applications or workloads. Errors and exceptions for VF operations in this configuration are also isolated and detected on a per VF basis. Accordingly, errors originating with one VF of the switch <NUM> do not disturb I/O command flow of other VFs of the switch. Alternately or additionally, selective resets of states for specific VFs are enabled, such as function level resets or the like.

With reference to command flow, four universal command delivery (UCD) inbound queues are mapped per VF <NUM> in this example implementation for the switch <NUM>. Alternately, the architecture of the switch <NUM> has the flexibility to assign greater or fewer numbers of queues per VF as long as a total queue distribution of VFs does not exceed a total number of queues supported by the switch <NUM> (e.g., <NUM> queues). Generally, host VMs will submit admin commands or I/O commands to respective submission queues (SQs) and ring a corresponding UCD doorbell for that queue. Universal command delivery block (UCD block <NUM>) may fetch, responsive to the doorbell, SQ elements based on a pre-configured arbitration scheme of the switch <NUM>. For example, if all I/O SQs are setup for equal priority, then the UCD block <NUM> will service these inbound queues in a round-robin fashion. From the UCD block <NUM> or UCD inbound queue, the switch <NUM> submits the fetched elements (e.g., admin or I/O commands) to a command classifier processor (CCP or command processor <NUM>). The fetched elements may be submitted using a destination free list (DFL) of an I/O queue block <NUM> of a command processing subsystem <NUM> (subsystem <NUM>) that includes or is associated with the command processor <NUM>. Generally, the UCD block <NUM> will sort and distribute I/O commands <NUM> and admin commands <NUM> to corresponding queues or blocks of the subsystem <NUM>, which in this example also includes an admin queue block <NUM> and a physical region page (PRP) list work queue block <NUM>.

By way of example, consider <FIG> in which an example configuration of a command processing subsystem <NUM> is shown generally at <NUM>. Here, the UCD block <NUM> may submit commands to the command processor <NUM> using a destination free list (DFL) assigned to a queue being fetched. The DFL generates an inbound completion queue element (IB_CQ) to the command processor <NUM> based on the arbitration priority assigned to the queue. Generally, the command processor <NUM> or the QoS manager <NUM> monitors the inbound completion queue for new elements and upon receiving one, starts the command processing operations.

In some aspects, the PRP list work queue enables access through the VFs <NUM> of the switch <NUM>. For example, VFs may use PRP data-pointers that include a virtual function (VF) identifier, inserted by a processor or VF address engine, within upper-address bits for proper routing within the switch <NUM>. With respect to command routing, a I/O command that does not include or rely on a physical region page (PRP) list fetch (e.g., I/O commands less than 8Kb in size) will be handled by the command processor <NUM> such that the PRP data pointers embedded in the I/O command may be processed before submission to a SSD device queue. Alternately, an I/O command that includes or relies on PRP list fetch (e.g., an I/O command greater than 8Kb in size) is routed to the management and execution processor <NUM> (MEP or management processor <NUM>), through the PRP list work queue, so that the PRP list may be processed before submitting the command to the SSD device queue.

In some aspects of providing QoS, firmware of the command processor <NUM> or the QoS manager <NUM> tracks bandwidth used per namespace over a pre-defined duration of time. In some cases, the QoS manager <NUM> adds a logical block address (LBA) count per I/O per namespace as the commands are processed by the command processor <NUM>. Once the LBA count exceeds a predefined threshold or quota for a particular namespace, any additional commands for that namespace would be delayed or held back in a respective staging queue (NSm_STAGE_Q) for each namespace.

After being delayed for at least some amount of time, the commands stored in the staging queue will be reevaluated for submission to a SSD device submission queue (DEVn_SQ). In some cases, the commands are reevaluated once a new timing window starts for servicing namespace queues or fetching inbound command elements. Alternately, reevaluation may be initiated responsive to the inbound completion queue (IBn_CQ) to the command processor or the device submission queue (DEVn_SQ) reaching an empty state. In some cases, the former is an indication that, during a current timing window, there are no new elements fetched by the UCD block <NUM> that need evaluation.

To release or submit I/O commands or elements into a submission queue of a storage device, the command processor <NUM> should evaluate the various work queues in the following order: namespace staging queue (NSm_STAGE_Q) corresponding to the device submission queue (DEVn_SQ), followed by the completion queue of the management processor <NUM> (MEP_CQ), and finally the inbound completion queue (IBn_CQ) of the I/O queue block or DFL queues. This order of queue priority may be reconfigured by the command processor <NUM> as needed or in order to support alternate implementations of providing QoS through the switch <NUM>.

<FIG> illustrates at <NUM> example configurations of QoS parameters <NUM> that are useful to implement QoS in accordance with one or more aspects. In this example, the QoS parameters <NUM> are organized with reference to namespaces <NUM>-<NUM> through <NUM>-<NUM>, which may correspond to the striped namespaces for the SSDs <NUM> referenced in <FIG>. Generally, the QoS parameters <NUM> include values useful to define or quantify a bandwidth of access provided to a namespace, such as an amount of data and a duration of time. In this example, the QoS parameters <NUM> includes an LBA count <NUM>, a time stamp <NUM>, and a host submission queue consumer index <NUM>. Alternately or additionally, the QoS parameters may include or reference a physical region page (PRP) list of the I/O command (e.g., for a number of LBAs or IOPs), a scatter gather list of the I/O command (e.g., for a number of LBAs or IOPs), a number of I/O operations associated with the I/O command, or a logical block address (LBA) count of the I/O command.

The following discussion describes techniques for providing QoS over a virtual interface for solid-state storage, which may provide storage isolation, bandwidth control, and partition functionalities to a host, tenants, or VMs executing on the host. These techniques may be implemented using any of the environments and entities described herein, such as the VF address engine <NUM>, VF mappings <NUM>, QoS manager <NUM>, or QoS parameters <NUM>. These techniques include methods illustrated in <FIG>, <FIG> and <FIG>, and/or <FIG> each of which is shown as a set of operations performed by one or more entities.

These methods are not necessarily limited to the orders of operations shown in the associated figures. Rather, any of the operations may be repeated, skipped, substituted, or re-ordered to implement various aspects described herein. Further, these methods may be used in conjunction with one another, in whole or in part, whether performed by the same entity, separate entities, or any combination thereof. For example, the methods may be combined to expose virtualized isolation areas of storage media while transparently providing wear leveling, load balancing, or data migration without host interaction or involvement. In portions of the following discussion, reference will be made to the operating environment <NUM> of <FIG> and entities of <FIG>, <FIG>, <FIG>, and/or <FIG> by way of example. Such reference is not to be taken as limiting described aspects to the operating environment <NUM>, entities, or configurations, but rather as illustrative of one of a variety of examples. Alternately or additionally, operations of the methods may also be implemented by or with entities described with reference to the System-on-Chip of <FIG> and/or the storage media switch controller of <FIG>.

<FIG> depicts an example method <NUM> for automatically mapping host commands to virtual functions on storage media. The operations of method <NUM> may be performed by or with the storage media switch <NUM>, including the VF address engine <NUM> and using the VF mappings <NUM>.

At <NUM>, the storage media switch <NUM> receives, via a host interface of the storage media switch <NUM>, a host command from a host. For example, the VF address engine <NUM> of the storage media switch <NUM> may receive an indication of a new host command obtained from a host software application executing at the virtual machine VM-<NUM>.

At <NUM>, responsive to receiving the host command, the storage media switch <NUM> determines a virtual function identifier associated with the host command. For example, an unused portion of a virtual address field of the host command may be filled with a sign-extended canonical portion of the address contained within the virtual address field. Rather than treat the entire unused portion of the address field as a sign-extended canonical portion of the address, the storage media switch <NUM> may infer a virtual function identifier from the unused portion of the virtual address field and use the virtual function identifier to route the host command to be fulfilled by an appropriate virtual function.

As one example, a host command may include a <NUM>-bit virtual address field, e.g., bits [<NUM>:<NUM>], even though only a portion of the virtual address field, e.g., bits [<NUM>:<NUM>], may be used as a virtual address of the host command. Since some of the virtual address field may be unused by the storage media switch <NUM> for addressing the host command, the unused portion of the virtual address field, e.g., bits [<NUM>:<NUM>], may include other information associated with the host command, such as a virtual function identifier, that the storage media switch <NUM> may use to execute the host command.

Some of the unused portion of the virtual address field may include a virtual function identifier. The storage media switch <NUM> may extract a virtual function identifier associated with the host command from a first unused portion of virtual address field contained within the host command. For example, bits [<NUM>:<NUM>] may include the virtual function identifier that the storage media switch <NUM> uses to identify a particular virtual function associated with the command.

At <NUM>, the storage media switch <NUM> selects, based on the virtual function identifier, a virtual function of the storage media <NUM> for executing the host command. For example, the VF address engine <NUM> may further isolate tagged portions of an address field of a host command to determine a host identifier. That is, some of the unused portion of the virtual address field may include a host identifier and the storage media switch <NUM> may extract a host identifier associated with the host command from a second unused portion of virtual address field contained within the host command. For example, bit [<NUM>] may include the host identifier that the storage media switch <NUM> uses to identify a particular host associated with the command.

The VF mappings <NUM> maintains associations or mappings between virtual function identifiers and respective virtual functions and respective hosts. For example, the VF mappings <NUM> may maintain a mapping between host identifiers and virtual function identifiers to hosts and virtual functions. The VF address engine <NUM>, having determined a virtual function identifier and a host identifier from the unused portion of the virtual address contained within the host command or from a sign-extended canonical portion of the of the virtual address contained within the host command, uses the virtual function identifier and a host identifier to lookup a corresponding virtual function using the VF mappings <NUM>.

The VF address engine <NUM> may look up a particular host identifier (e.g., bit [<NUM>]) from the VF mappings <NUM> to determine which host is associated with the particular host identifier and therefore, which host is the originator of the host command. The VF address engine <NUM> may search the VF mappings <NUM> to determine a virtual function for the host command that matches a particular virtual function identifier (e.g., bits [<NUM>:<NUM>]).

At <NUM>, the storage media switch <NUM> executes the host command using the virtual function assigned to the storage media <NUM>. For example, using the host identifier and the virtual function identifier, the VF address engine <NUM> generates an internal interface select value to route the host command to the intended virtual function at the storage media interface of the storage media switch <NUM>. The storage media switch <NUM> may use the interface select value to finally route and cause the storage media <NUM> to execute read/write transactions to satisfy the host command.

At <NUM>, responsive to executing transactions for satisfying the host command, using the virtual function assigned to the storage media <NUM>, the storage media switch <NUM> responds, via the host interface, to the host command. For example, in response to directing the storage media <NUM> to execute transactions to satisfy the host command, the storage media switch <NUM> prepares a response to the host command by determining an original address for the host command. The VF address engine <NUM> may use only a portion of an internal routing address (e.g., without the interface select value) to determine the original address for the host command. The VF address engine <NUM> may remove the bits containing the interface select value from the routing address and use the remaining bits as the original address. For example, the original address may include bits [<NUM>:<NUM>] with bits [<NUM>:<NUM>] corresponding to bits [<NUM>:<NUM>] of the original, virtual address, and bits [<NUM>:<NUM>] corresponding to a host-preferred predefined value or a canonical sign-extended value of the original virtual address.

The storage media switch <NUM> causes the host command to exit the host interface using the original address, without any virtual function tagging. In other words, the above operations show that the storage media switch <NUM> may determine the original address associated with a host command to respond to the host. The storage media switch <NUM> determines the original address by removing the virtual function identifier tagged to the virtual address contained within the host command, replacing the virtual function identifier with a host preferred predefined value, or a sign-extended canonical portion of the rest of the virtual address.

<FIG> depicts an example method 700A for selecting a virtual function of the storage media for executing the host command, based on a virtual function identifier determined by the associated submission queue the host command was received in. The method 700A is an example of operations performed by the storage media switch <NUM> when executing the step <NUM> from the method <NUM> for automatically mapping host commands to virtual functions on storage media. The operations of method 700A may be performed by or with the storage media switch <NUM>, including the VF address engine <NUM> and using the VF mappings <NUM>.

Recall, at <NUM>, the storage media switch <NUM> selects, based on the virtual function identifier, a virtual function of the storage media <NUM> for executing the host command. For example, the VF address engine <NUM> may isolate tagged portions of an address field of a host command to determine a host identifier and a virtual function identifier.

At <NUM>, the storage media switch <NUM> identifies, based on the virtual function identifier associated with the host command, the host. The VF mappings <NUM> maintains associations or mappings between virtual function identifiers and respective virtual functions and respective hosts. For example, the VF mappings <NUM> may maintain a mapping between host identifiers and virtual function identifiers to hosts and virtual functions. The VF address engine <NUM> may determine a virtual function identifier and a host identifier from the unused portion of the virtual address contained within the host command. The VF address engine <NUM> may determine the virtual function identifier and the host identifier from a sign-extended canonical portion of the of the virtual address contained within the host command.

For example, the VF address engine <NUM> may look up a particular host identifier (e.g., bit [<NUM>] of the address field of the host command) from the VF mappings <NUM> to determine that a software application executing at the virtual machine VM-<NUM> is the host associated with the particular host identifier and therefore, is the originator of the host command. The VF address engine <NUM> may search the VF mappings <NUM> to determine a virtual function for the host command that matches a particular virtual function identifier (e.g., bits [<NUM>:<NUM>] of the address field of the host command).

At <NUM>, the storage media switch <NUM> selects, based on the host and the virtual function identifier, the virtual function assigned to a storage media interface of the storage media switch <NUM> for executing the host command. For example, by inputting the host identifier and the virtual function identifier into the VF mappings <NUM>, the VF address engine <NUM> may obtain a predefined internal interface routing value to use for engaging the appropriate virtual function.

At <NUM>, the storage media switch <NUM> determines a routing address by modifying a data-location address contained within the host command. For example, the VF address engine <NUM> may modify the virtual address contained within the host command to append an interface select value assigned to the virtual function to the virtual address contained within the host command. The VF address engine <NUM> may append the interface routing value to the front of the virtual address contained in the virtual address field of the host command to form a routing address (also referred to as a "modified virtual address"). The routing address may be a different size than the original virtual address extracted from the address field of the host command. For instance, the routing address may be a <NUM>-bit value with bits [<NUM>:<NUM>] being the routing value and bits [<NUM>:<NUM>] being the original virtual address contained in the address field of the host command.

In some cases, the VF address engine <NUM> replaces any tagged or encoded portions of the routing address with a predefined value or a sign-extended canonical format. For instance, the routing address may be a <NUM>-bit value with bits [<NUM>:<NUM>] being the routing value and bits [<NUM>:<NUM>] being the virtual address contained in the address field of the host command without any tagging or encoding of unused bits specifying the virtual function or host identifiers. The VF address engine <NUM> may swap the routing value with a portion of the virtual address that is without the tagging or encoding originally included in the virtual address to derive a routing address for use in executing the read/write transactions associated with the host command. For example, the routing address may be a <NUM>-bit value with bits [<NUM>:<NUM>] being the first eight bits of the virtual address contained in the address field of the host command without any tagging, the next eight bits [<NUM>:<NUM>] being the interface select value, and bits [<NUM>:<NUM>] being the rest of the virtual address contained in the address field of the host command without any tagging. The storage media switch <NUM> uses the internal routing address to command the storage media <NUM> to execute transactions for satisfying the host command.

At <NUM>, the storage medium switch <NUM> may maintain the routing address in memory for subsequent retrieval and use after executing transactions for fulfilling the host command.

From operation <NUM>, the storage medium switch <NUM> may proceed to operation <NUM> to execute the host command based on the routing address to effective to use the selected virtual function. For example, the storage medium switch may perform operations or transactions at an area of the storage media <NUM> that maps to the routing address determined above.

<FIG> depicts an example method 700B for responding to a host command. The method 700B is an example of operations performed by the storage media switch <NUM> when executing the step <NUM> from the method <NUM> for automatically mapping host commands to virtual functions on storage media. The operations of method 700B may be performed by or with the storage media switch <NUM>, including the VF address engine <NUM> and using the VF mappings <NUM>. In response to directing the storage media <NUM> to execute transactions to satisfy the host command, the storage media switch <NUM> prepares a response to the host command by determining an original address for the host command. At <NUM>, the storage media switch <NUM> removes the interface select value from the routing address maintained in the memory. For example, the VF address engine <NUM> may use only a portion of the <NUM>-bit internal routing address (e.g., without the interface select value) as the original address for the response to the host command. The VF address engine <NUM> may remove the bits containing the interface select value (e.g., bits [<NUM>:<NUM>]) from the routing address maintained in the memory.

At <NUM>, the storage media switch <NUM> concatenates the remaining portions of the routing address, with the interface select value removed to determine an original address. For example, the storage media switch <NUM> may generate a <NUM>-bit original address using a first remaining portion (e.g., bits [<NUM>:<NUM>]) of the routing address concatenated with a second remaining portion (e.g., bits [<NUM>:<NUM>]) of the routing address. By removing the interface select value (e.g., bits [<NUM>:<NUM>]) from the routing address, an original address (e.g., <NUM>-bits) address remains with bits [<NUM>:<NUM>] corresponding to bits [<NUM>:<NUM>] of the routing address and bits [<NUM>:<NUM>] corresponding to bits [<NUM>:<NUM>] of the routing address.

At <NUM>, the storage media switch <NUM> outputs the host command with the original address, and without any virtual function tagging. The storage media switch <NUM> may provide the original address via the host interface and to the host as part of responding to the host command.

By performing the method 700B, the storage media switch <NUM> may determine an original address associated with a host command for use in responding to the host command. The storage media switch <NUM> determines the original address by removing any virtual function tagging from the virtual address contained within the host command, and replacing the virtual function tagging with a host preferred predefined value, or a sign-extended canonical portion of the rest of the virtual address.

<FIG> is a conceptual diagram illustrating manipulations of an address field of a host command when the host command is mapped to virtual functions on storage media. <FIG> includes example address fields 800A through 800E. Each of the address fields 800A through 800E is associated with a host command <NUM>.

<FIG> shows that the storage media switch <NUM> may receive a host command <NUM> including address field 800A. Address field 800A includes an unused address portion 804A (e.g., bits [<NUM>:<NUM>]) and a used address portion <NUM> (e.g., bits [<NUM>:<NUM>]).

The storage media switch <NUM> may create an address field 800B by modifying the host command <NUM> by appending an interface select value <NUM> to the front of the address field 800A. The address field 800B includes an interface select value <NUM> (e.g., bits [<NUM>:<NUM>), an unused address portion 804A (e.g., bits [<NUM>:<NUM>]), and a used address portion <NUM> (e.g., bits [<NUM>:<NUM>]). Because of the addition of the interface select value <NUM>, the address field 800B is shown as having a greater size (e.g., <NUM>-bits) than the address field 800A (e.g., <NUM>-bits).

The storage media switch <NUM> may modify the unused address portion 804A of the address field 800B to remove any encoding or tagging to create the address field 800C. For example, the address field 800C corresponds to the address field 800B except the unused address portion 804A includes different information as unused address portion 804B. For instance, the storage media switch <NUM> may remove any encoding or tagging and replace the encoding or tagging with a predefined, host specified value, or may sign-extend a canonical value associated with the used address portion <NUM> (e.g., by replicating the value of bit [<NUM>] to each of the bits [<NUM>:<NUM>].

The storage media switch <NUM> may generate the address field 800D, referred to as a routing address 800D, by swapping the position of the interface select value <NUM> with the position of the unused address portion 804B. For example, the address field 800D corresponds to the address field 800C except the unused address portion 804B is at bits [<NUM>:<NUM>] and the interface select value <NUM> is at bits [<NUM>:<NUM>].

The storage media switch <NUM> may use the routing address 800D to direct the storage media <NUM> to execute transactions for fulfilling the host command. Once the transactions are complete, the storage media switch <NUM> may respond to the host command by outputting a response that includes an original address included in the address field 800E.

The storage media switch <NUM> may generate the address field 800E by removing the interface select value <NUM> from the address field 800D and concatenating the untagged and unused address portion 804B with the used address portion <NUM> to form a new original address. The address field 800E includes <NUM> bits, with bits [<NUM>:<NUM>] corresponding to the untagged, unused address portion 804B and bits [<NUM>:<NUM>] corresponding to the address portion <NUM>.

In the examples of <FIG>, the storage media <NUM> may be SR-IOV incompatible. In other words, the storage media <NUM> may rely on the storage media switch <NUM> to map virtual functions on the storage media <NUM> as described above. In some examples however, the storage media <NUM> may natively support SR-IOV and may already be configured to support virtual functions. In cases where the storage media <NUM> already supports SR-IOV, the storage media switch <NUM> may rely on the native SR-IOV support to automatically map to virtual functions.

For example, the storage media switch <NUM> may determine a routing identifier (RID) associated with a host command. The RID may be a bus number, device number, or function number value assigned to the storage media <NUM>. The VF address engine <NUM> may look up the RID at the VF mappings <NUM> to determine a host identifier and an associated virtual function identifier.

The storage media switch <NUM> may then execute steps <NUM> through <NUM> to execute any necessary read or write transactions to execute and then respond to the host command. For example, with a host identifier and a virtual function identifier, the storage media switch <NUM> may determine an interface select value from the VF mappings <NUM>. The VF address engine <NUM> may append the interface select value to the address derived from the unencoded or untagged host command to form a routing address. The VF address engine <NUM> may swap the interface select bits (e.g., bits [<NUM> :<NUM>]) with a portion of the address (e.g., bits [<NUM>:<NUM>]) to generate the routing address that the storage media switch <NUM> uses to execute the host command transactions. At the completion of the host command transactions, the storage media switch <NUM> responds to the host command by outputting an original address determined by omitting the interface select bits (e.g., bits [<NUM>:<NUM>]) from the routing address to generate the original (e.g., <NUM>-bit) address that came in with the host command.

<FIG> depicts an example method <NUM> for providing QoS for solid-state storage that is accessed through a namespace. The operations of method <NUM> may be performed by or with the storage media switch <NUM>, including the QoS manager <NUM> or using the QoS parameters <NUM>.

At <NUM>, the storage media switch receives, via a host interface, an I/O command for data access from a host device. The I/O command includes an identifier for a virtual interface that is associated with a namespace through which data of solid-state storage is accessible. In some cases, the I/O command is received through a first queue of inbound command elements received from the host device, such as a VM submission queue of I/O commands. The virtual interface associated with the namespace may include a SR-IOV PCIe interface or a virtual function (VF) provided through a SR-IOV PCIe interface. In such cases, a first set of queues associated with the namespace may be mapped to the VF. Alternately or additionally, a second set of queues associated with a VM executed by the host may be mapped to the VF effective to bind the first set of queues to the second set of queues.

At <NUM>, the QoS manager determines, based on the I/O command, an amount of data of the solid-state storage that the I/O command will access through the namespace. In some cases, the amount of data is determined based on one of a PRP list of the I/O command, a scatter gather list of the I/O command, a number of I/O operations associated with the I/O command, or an LBA count of the I/O command.

At <NUM>, the QoS manager determines whether the amount of data that the I/O command will access through the namespace exceeds a predefined threshold for data access through the namespace over a duration of time. For example, the QoS manager may compare a number of LBAs accessed through the namespace with an LBA quota for that nam space.

Optionally at <NUM>, the QoS manager releases the I/O command to the solid-state storage in response to determining that the amount of data does not exceed the predefined threshold. Alternately at <NUM>, the QoS manager delays the release of the I/O command to the solid-state storage in response to determining that the amount of data meets or exceeds the predefined threshold. By so doing, the switch may provide QoS for the virtually accessed solid-state storage based on an access parameter of the namespace.

<FIG> depicts an example method <NUM> for submitting I/O commands to a solid-state storage device based on a bandwidth quota for a namespace. The operations of method <NUM> may be performed by or with the storage media switch <NUM>, including the QoS manager <NUM> or using the QoS parameters <NUM>.

At <NUM>, a storage media switch fetches an I/O command from a submission queue of a virtual machine that is mapped to a virtual function of the storage media switch. The storage media switch may be an NVMe-based storage media switch that enables mappings between virtual functions and namespaces of solid-state storage operably coupled with the NVMe-based storage media switch. The virtual interface associated with the namespace may include a SR-IOV PCIe interface or a virtual function (VF) provided through a SR-IOV PCIe interface.

At <NUM>, a QoS manager determines, based on the I/O command, an amount of data that the I/O command will access and a storage namespace to which the virtual function is mapped. The amount of data may be determined based on one of a PRP list of the I/O command, a scatter gather list of the I/O command, a number of I/O operations associated with the I/O command, or an LBA count of the I/O command.

At <NUM>, the QoS manager compares the amount of data that the I/O command will access to a preconfigured bandwidth quota for the storage namespace. For example, the QoS manager may compare an LBA count to an LBA threshold defined for the namespace over a particular amount of time, such as to implement bandwidth metering.

Optionally at <NUM>, the QoS manager submits the I/O command to a queue of a solid-state storage device that corresponds to the storage namespace. Alternately at <NUM>, the QoS manager stores the I/O command to a staging queue effective to delay the release of the I/O command to the solid-state storage.

From operation <NUM>, the method <NUM> may proceed to operation <NUM>, <NUM>, and/or operation <NUM>. At <NUM>, the QoS manager delays the release of the I/O command until a new timing window. Generally, any I/O commands stored in the staging queue may be reevaluated for submission to a submission queue of one of the storage devices whenever a new timing window starts. At <NUM>, the QoS manager delays the release of the I/O command until an inbound queue to the QoS manager reaches an empty state. In some cases, the inbound queue reaches an empty state during a current timing window, which indicates that there are no new elements fetched by the inbound engine that need to be evaluated for release. At <NUM>, the QoS manager delays the release of the I/O command until the queue of the solid-state storage device reaches an empty state. From any of operations, the method <NUM> may return to operation <NUM> to reevaluate the I/O command for release to the solid-state storage device.

<FIG> depicts an example method <NUM> for managing data access by a virtual machine through a namespace of solid-state storage. The operations of method <NUM> may be performed by or with the host device <NUM>, storage media switch <NUM>, including the QoS manager <NUM> or using the QoS parameters <NUM>.

At <NUM>, a host associates NVMe queues of a virtual machine to a virtual function mapped to a namespace through which a segment of solid-state storage is accessible.

At <NUM>, the QoS manager receives, from the host on which the virtual machine executes, parameters for a QoS of data access to be provided to the virtual machine. In some cases, the QoS manager receives a parameter by which to meter or manage the data access of the solid-state storage through the namespace. In such cases, the QoS manager may determine, based on the parameter, the predefined threshold for data access through the namespace over the duration of time.

At <NUM>, the QoS defines, for the namespace and based on the parameters for QoS, a bandwidth quota for the namespace that includes an amount of data and a duration of time. At <NUM>, the QoS manager meters, based on the bandwidth quota, data access by the virtual machine to the solid-state storage through the namespace to which the virtual function is mapped.

<FIG> illustrates an exemplary System-on-Chip (SoC) <NUM> that may implement various aspects of providing QoS over a virtual interface for solid-state media, such as media accessible over an NVMe interface or through a virtual function provided with SR-IOV. The SoC <NUM> may be implemented in any suitable device, such as a computing device, host device, storage media switch, network-attached storage, smart appliance, printer, set-top box, server, data center, solid-state drive (SSD), storage drive array, memory module, automotive computing system, server, server blade, storage blade, storage backplane, storage media expansion device, storage media card, storage media adapter, network attached storage, Fabric-enabled storage target, NVMe-based storage controller, or any other suitable type of device (e.g., others described herein). Although described with reference to a SoC, the entities of <FIG> may also be implemented as other types of integrated circuits or embedded systems, such as an application-specific integrated-circuit (ASIC), storage controller card, storage backplane, storage controller, communication controller, application-specific standard product (ASSP), digital signal processor (DSP), programmable SoC (PSoC), system-in-package (SiP), or field-programmable gate array (FPGA).

The SoC <NUM> may be integrated with electronic circuitry, a microprocessor, memory, input-output (I/O) control logic, communication interfaces, firmware, and/or software useful to provide functionalities of a host device or storage system, such as any of the devices or components described herein (e.g., storage drive or storage array). The SoC <NUM> may also include an integrated data bus or interconnect fabric (not shown) that couples the various components of the SoC for data communication or routing between the components. The integrated data bus, interconnect fabric, or other components of the SoC <NUM> may be exposed or accessed through an external port, parallel data interface, serial data interface, peripheral component interface, or any other suitable data interface. For example, the components the SoC <NUM> may access or control external storage media through an external interface or off-chip data interface.

In this example, the SoC <NUM> includes various components such as input-output (I/O) control logic <NUM> and a hardware-based processor <NUM> (processor <NUM>), such as a microprocessor, processor core, application processor, DSP, or the like (e.g., processing resource separate from a host x86 processor). The SoC <NUM> also includes memory <NUM>, which may include any type and/or combination of RAM, SRAM, DRAM, non-volatile memory, ROM, one-time programmable (OTP) memory, multiple-time programmable (MTP) memory, Flash memory, and/or other suitable electronic data storage. In some aspects, the processor <NUM> and code stored on the memory <NUM> are implemented as a storage media switch or switch-enabled storage aggregator to provide various functionalities associated with providing QoS over virtual interfaces for solid-state storage. In the context of this disclosure, the memory <NUM> stores data, code, instructions, or other information via non-transitory signals, and does not include carrier waves or transitory signals. Alternately or additionally, SoC <NUM> may comprise a data interface (not shown) for accessing additional or expandable off-chip storage media, such as magnetic memory or solid-state memory (e.g., Flash or NAND memory).

The SoC <NUM> may also include firmware <NUM>, applications, programs, software, and/or operating systems, which may be embodied as processor-executable instructions maintained on the memory <NUM> for execution by the processor <NUM> to implement functionalities of the SoC <NUM>. The SoC <NUM> may also include other communication interfaces, such as a transceiver interface for controlling or communicating with components of a local on-chip (not shown) or off-chip communication transceiver. Alternately or additionally, the transceiver interface may also include or implement a signal interface to communicate radio frequency (RF), intermediate frequency (IF), or baseband frequency signals off-chip to facilitate wired or wireless communication through transceivers, physical layer transceivers (PHYs), or media access controllers (MACs) coupled to the SoC <NUM>. For example, the SoC <NUM> may include a transceiver interface configured to enable storage over a wired or wireless network, such as to provide a network attached storage (NAS) volume with virtualized storage isolation features.

The SoC <NUM> also includes an instance of a storage media switch <NUM> (switch <NUM>) with a VF address engine <NUM>, VF mappings <NUM>, QoS manager <NUM>, and QoS parameters <NUM>, which may be implemented separately as shown or combined with a storage component or data interface. In accordance with various aspects of providing QoS over virtual interfaces for solid-state storage, the switch <NUM> may meter or allocate bandwidth of a namespace to a tenants or initiators of a host. Alternately or additionally, the VF mappings <NUM> or QoS parameters <NUM> may be stored on the memory <NUM> of the SoC <NUM> or on a memory operably coupled with the SoC <NUM> and accessible to the switch <NUM>.

Any of these entities may be embodied as disparate or combined components, as described with reference to various aspects presented herein. Examples of these components and/or entities, or corresponding functionality, are described with reference to the respective components or entities of the environment <NUM> of <FIG> or respective configurations illustrated in <FIG>, <FIG>, <FIG>, and/or <FIG>. The switch <NUM>, either in whole or part, may be implemented as processor-executable instructions maintained by the memory <NUM> and executed by the processor <NUM> to implement various aspects and/or features of providing QoS over virtual interfaces for solid-state storage.

The switch <NUM>, VF address engine <NUM>, and/or QoS manager <NUM>, may be implemented independently or in combination with any suitable component or circuitry to implement aspects described herein. For example, the VF address engine <NUM> and/or QoS manager <NUM> may be implemented as part of a DSP, processor/storage bridge, I/O bridge, graphics processing unit, memory controller, storage controller, arithmetic logic unit (ALU), or the like. The VF address engine <NUM> and/or QoS manager <NUM> may also be provided integrally with other entities of SoC <NUM>, such as integrated with the processor <NUM>, memory <NUM>, a host interface, a storage media interface, or firmware <NUM> of the SoC <NUM>. Alternately or additionally, the switch <NUM>, VF address engine <NUM>, VF mappings <NUM>, QoS manager <NUM>, and/or QoS parameters <NUM>, and/or other components of the SoC <NUM> may be implemented as hardware, firmware, fixed logic circuitry, or any combination thereof.

As another example, consider <FIG> which illustrates an example storage media switch controller <NUM> (switch controller <NUM>) in accordance with one or more aspects of providing QoS over virtual interfaces for solid-state storage. In various aspects, the switch controller <NUM> or any combination of components thereof may be implemented as a storage drive controller, storage media switch, storage media controller, NAS controller, NVMe initiator, NVMe target, or a storage aggregation controller for solid-state storage. In some cases, the switch controller <NUM> is implemented similar to or with components of the SoC <NUM> as described with reference to <FIG>. In other words, an instance of the SoC <NUM> may be configured as a storage media switch controller, such as the switch controller <NUM> to provide and manage QoS over virtual interfaces for solid-state storage.

In this example, the switch controller <NUM> includes input-output (I/O) control logic <NUM> and a processor <NUM>, such as a microprocessor, processor core, application processor, DSP, or the like. In some aspects, the processor <NUM> and firmware of the storage media switch <NUM> may be implemented to provide various functionalities associated with providing QoS over virtual interfaces for solid-state storage, such as those described with reference to methods <NUM>, 700A, 700B, <NUM>, <NUM>, and/or <NUM>. The switch controller also includes a storage media interface <NUM> and a host interface <NUM>, which enable access to storage media and host system, respectively. The storage media interface <NUM> may include a physical page addressing (PPA) interface, peripheral component interconnect express (PCIe) interface, non-volatile memory express (NVMe) interface, NVM over Fabric (NVM-OF) interface, NVM host controller interface specification (NVMHCIS) compliant interface, or the like. Alternately or additionally, the host interface may include a PCIe interface, SATA-based interface, NVMe interface, NVM-OF interface, NVMHCIS compliant interface, Fabric-enabled storage interface, or the like.

Claim 1:
A method (<NUM>) performed by a storage media switch for supporting Single Root Input Output Virtualization, SR-IOV, on storage media to cause the storage media to appear as multiple virtual functions, the method comprising:
receiving (<NUM>), via a host interface of the storage media switch, a host command from a host;
responsive to receiving the host command, determining (<NUM>) a virtual function identifier associated with the host command;
selecting (<NUM>), based on the virtual function identifier, a virtual function among the virtual functions associated with the storage media for executing the host command, wherein selecting (<NUM>) the virtual function comprises identifying (<NUM>) the host based on the host command, and selecting (<NUM>), based on the host and the virtual function identifier, the virtual function assigned to a storage media interface of the storage media switch for executing the host command;
modifying a virtual address included in the host command to generate (<NUM>) a routing address for the host command, the virtual address modified by appending, to the virtual address, an interface select value assigned to the selected virtual function;
maintaining (<NUM>) the routing address in a memory;
executing (<NUM>) the host command to perform an operation at an area of the storage media associated with the routing address; and
responsive to executing (<NUM>) the host command using the selected virtual function,
determining an original address associated with the host by removing (<NUM>) the interface select value from the routing address maintained in the memory, and
providing (<NUM>), via the host interface, a response to the host command using the original address associated with the host.