Patent Description:
Storage device capacities continue to increase, with the size of data stored on such storage devices increasing in parallel. Processing of that data-searching it, performing queries, and the like-en masse may require moving significant amounts of data from storage to memory for the processor to then process the data.

<CIT> discloses: A storage target comprising a computer memory configured with storage provisioning parameters and a map of initiator information to the storage provisioning parameters. The storage target is configured to receive a discovery request from a requesting initiator, extract identifying information from the discovery request, determine a set of storage provisioning parameters to which the requesting initiator maps based on the extracted identifying information and the map of initiator information to storage provisioning parameters, dynamically create a new virtual target for the requesting initiator according to the set of storage provisioning parameters, dynamically create a storage partition from storage space of a plurality of storage devices according to the set of storage provisioning parameters, assign the storage partition to the new virtual target and return information about the new virtual target to the requesting initiator to allow the requesting initiator to connect to the new virtual target.

<CIT> discloses: A computer product, method, and system to dynamically provide discovery services for host nodes of target systems and storage resources in a network. Discover on storage resources available at target systems. An access control list indicates subsets of the host nodes that can access the storage resources at the target systems. A query is received from a requesting host node comprising one of the host nodes for storage resources the host node is permitted to access according to the access control list. Host discovery information is returned to the requesting host node indicating the storage resources the requesting host node is provisioned to access, wherein the requesting host node establishes a connection with the target systems indicated in the returned host discovery information to access the storage resources the requesting host node is provisioned to access indicated in the access control list.

Anonymous: "<NPL>, discloses NVM Express TM over Fabrics.

<NPL>, presents computational storage devices, along with their discovery process and their management through "NVMe over Fabrics".

Specific embodiments are defined in the dependent claims.

The drawings described below are examples of how embodiments of the disclosure may be implemented, and are not intended to limit embodiments of the disclosure. Individual embodiments of the disclosure may include elements not shown in particular figures and/or may omit elements shown in particular figures. The drawings are intended to provide illustration and may not be to scale.

Embodiments of the disclosure include a storage device that is associated with a computational storage unit. Upon discovery, the storage device or the computational storage unit may return information about the computational storage unit. This information may then permit an application to locate and use the computational storage unit.

Reference will now be made in detail to embodiments of the disclosure, examples of which are illustrated in the accompanying drawings. In the following detailed description, numerous specific details are set forth to enable a thorough understanding of the disclosure. It should be understood, however, that persons having ordinary skill in the art may practice the disclosure without these specific details.

For example, a first module could be termed a second module, and, similarly, a second module could be termed a first module, without departing from the scope of the disclosure.

The terminology used in the description of the disclosure herein is for the purpose of describing particular embodiments only and is not intended to be limiting of the disclosure. As used in the description of the disclosure and the appended claims, the singular forms "a", "an", and "the" are intended to include the plural forms as well, 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. The components and features of the drawings are not necessarily drawn to scale.

When comparing the time required to move the data from storage to memory with the time required to process the data, the former might be longer than the latter. In other words, the computer may spend more time bringing the data closer to the processor than to actually process the data. The larger the amount of data to be moved, the greater this difference may become. The problem may be exacerbated if the results of the processing are to be moved back to storage: in such a situation the data is moved twice (once from storage to memory, and once from memory back to storage), which may double the time spent moving data to and from storage.

A need remains for a mechanism for discovery and use of computational storage resources.

In embodiments of the disclosure, storage devices may include processing that is closer to the storage. For example, a storage device might include an in-storage processor, or a nearby accelerator. Because such resources may be located closer to the data, it may be possible to reduce (and/or potentially eliminate) the need to move data between storage and memory. By reducing or eliminating the time spent moving data between storage and memory, processing data closer to storage may result in faster overall processing of the data. In addition, since the processing may be performed closer to the storage, the host processor may be freed to execute other commands.

But to be able to use such resources, applications need to be able to determine that such resources are available. If an application is not able to determine that a particular resource is available, the application might not use the resource. As a result, the application may send processing commands to the processor rather than a resource that might perform the command more quickly and/or more efficiently.

Thus, embodiments of the disclosure may include a system and method for discovery of such resources, which may be termed computational storage units. Once computational storage units are discovered, applications may receive notification of their existence, either through a discovery process being initiated by the application or through a discovery service that may identify the available computational storage units. An application programming interface (API) may be used to permit the application to use the computational resource without having to determine the specific interface and/or protocol used by the computational storage unit, with the implementation of the API hiding these specifics from the application.

<FIG> shows a system including a storage device associated with a computational storage unit that may be discovered, according to embodiments of the disclosure. To enable discovery of a storage device associated with a computational storage unit, machine <NUM> may include processor <NUM>, memory <NUM>, storage device <NUM>, and discovery unit <NUM>. Processor <NUM> may be any variety of processor. (Processor <NUM>, along with the other components discussed below, are shown outside the machine for ease of illustration: embodiments of the disclosure may include these components within the machine. ) While <FIG> shows a single processor <NUM>, machine <NUM> may include any number of processors, each of which may be single core or multi-core processors, each of which may implement a Reduced Instruction Set Computer (RISC) architecture or a Complex Instruction Set Computer (CISC) architecture (among other possibilities), and may be mixed in any desired combination.

Processor <NUM> may be coupled to memory <NUM>. Memory <NUM> may be any variety 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) etc. Memory <NUM> may also be any desired combination of different memory types, and may be managed by memory controller <NUM>. Memory <NUM> may be used to store data that may be termed "short-term": that is, data not expected to be stored for extended periods of time. Examples of short-term data may include temporary files, data being used locally by applications (which may have been copied from other storage locations), and the like.

Processor <NUM> and memory <NUM> may also support an operating system under which various applications may be running. These applications may issue requests (which may also be termed commands) to read data from or write data to either memory <NUM> or storage device <NUM>. Storage device <NUM> may be accessed using device driver <NUM>. Storage device <NUM> may be associated with a computational storage unit. As discussed below with reference to <FIG>, the computational storage unit may be part of storage device <NUM> or it may be separate from storage device <NUM>. The phrase "associated with" is intended to cover both a storage device that includes a computational storage unit and a storage device that is paired with a computational storage unit that is not part of the storage device itself. In other words, a storage device and a computational storage unit may be said to be "paired" when they are physically separate devices but are connected in a manner that enables them to communicate with each other.

In addition, the connection between the storage device and the paired computational storage unit might enable the two devices to communicate, but might not enable one (or both) devices to work with a different partner: that is, the storage device might not be able to communicate with another computational storage unit, and/or the computational storage unit might not be able to communicate with another storage device. For example, the storage device and the paired computational storage unit might be connected serially (in either order) to the fabric, enabling the computational storage unit to access information from the storage device in a manner another computational storage unit might not be able to achieve.

While <FIG> uses the generic term "storage device", embodiments of the disclosure may include any storage device formats that may be associated with computational storage, examples of which may include hard disk drives and Solid State Drives (SSDs). Any reference to "SSD" below should be understood to include such other embodiments of the disclosure.

Discovery unit <NUM> may be any unit that may assist in the discovery of components within machine <NUM>. Discovery unit <NUM> may be a component that may send out queries along connections within machine <NUM> to determine what components are included within machine <NUM>. Discovery unit <NUM> may, for example, determine that storage device <NUM> is located in machine <NUM>, and more particularly may discover that storage device <NUM> is associated with a computational storage unit and learn information about the computational storage unit. Example implementations of discovery unit <NUM> may include a circuit built into processor <NUM>, a management controller (such as a Baseboard Management Controller), and the like. Discovery unit <NUM> may also be implemented as software running on processor <NUM>. While <FIG> shows machine <NUM> including only one discovery unit <NUM>, machine <NUM> may include two or more discovery units <NUM>. In addition, while <FIG> shows machine <NUM> as including discovery unit <NUM>, discovery unit <NUM> may be located in a machine that is remote from machine <NUM> across a network.

Processor <NUM> and storage device <NUM> are shown as connecting to fabric <NUM>. Fabric <NUM> is intended to represent any fabric along which information may be passed. Fabric <NUM> may include fabrics that may be internal to machine <NUM>, and which may use interfaces such as Peripheral Component Interconnect Express (PCIe), Serial AT Attachment (SATA), Small Computer Systems Interface (SCSI), among others. Fabric <NUM> may also include fabrics that may be external to machine <NUM>, and which may use interfaces such as Ethernet, Infiniband, or Fibre Channel, among others. In addition, fabric <NUM> may support one or more protocols, such as Non-Volatile Memory Express (NVMe), NVMe over Fabrics (NVMe-oF), or Simple Service Discovery Protocol (SSDP), among others. Thus, fabric <NUM> may be thought of as encompassing both internal and external networking connections, over which commands may be sent, either directly or indirectly, to storage device <NUM> (and more particularly, the computational storage unit associated with storage device <NUM>).

<FIG> shows both processor <NUM> and storage device <NUM> as being connected to fabric <NUM> because processor <NUM> and storage device <NUM> may communicate via a fabric. In some embodiments of the disclosure, storage device <NUM> may include a connection to fabric <NUM> that may include the ability to communicate with a remote machine and/or a network: for example, a network-capable Solid State Drive (SSD). But in other embodiments of the disclosure, while machine <NUM> may include a connection to another machine and/or a network (which connection may be considered part of fabric <NUM>), storage device <NUM> might not be connected to another machine and/or network. In such embodiments of the disclosure, storage device <NUM> and its associated computational storage unit may still be reachable from a remote machine, but such commands may pass through processor <NUM> or discovery unit <NUM>, among other possibilities, to reach storage device <NUM>.

<FIG> shows details of machine <NUM> of <FIG>, according to embodiments of the disclosure. In <FIG>, typically, machine <NUM> includes one or more processors <NUM>, which may include memory controllers <NUM> and clocks <NUM>, which may be used to coordinate the operations of the components of the machine. Processors <NUM> may also be coupled to memories <NUM>, which may include random access memory (RAM), read-only memory (ROM), or other state preserving media, as examples. Processors <NUM> may also be coupled to storage devices <NUM>, and to network connector <NUM>, which may be, for example, an Ethernet connector or a wireless connector. Processors <NUM> may also be connected to buses <NUM>, to which may be attached user interfaces <NUM> and Input/Output (I/O) interface ports that may be managed using I/O engines <NUM>, among other components.

<FIG> show various arrangements of the computational storage unit that may be associated with storage device <NUM> of <FIG>, according to embodiments of the disclosure. In <FIG>, storage device <NUM> and computational device <NUM>-<NUM> (which may be termed merely a "device") are shown. Storage device <NUM> may include controller <NUM> and storage <NUM>-<NUM>, and may be reachable across queue pairs: queue pairs <NUM> may be used both for management of storage device <NUM> and to control I/O of storage device <NUM>.

Computational device <NUM>-<NUM> may be paired with storage device <NUM>. Computational device <NUM>-<NUM> may include any number (one or more) processors <NUM>, which offer one or more services <NUM>-<NUM> and <NUM>-<NUM>. To be clearer, each processor <NUM> may offer any number (one or more) services <NUM>-<NUM> and <NUM>-<NUM> (although embodiments of the disclosure may include computational device <NUM>-<NUM> including exactly two services <NUM>-<NUM> and <NUM>-<NUM>). Computational device <NUM>-<NUM> may be reachable across queue pairs <NUM>, which may be used for both management of computational device <NUM><NUM>-<NUM> and/or to control I/O of computational device <NUM>-<NUM>.

Processor <NUM> may be thought of as near-storage processing: that is, processing that is closer to storage device <NUM> than processor <NUM> of <FIG>. Because processor <NUM> is closer to storage device <NUM>, processor <NUM> may be able to execute commands on data stored in storage device <NUM> more quickly than for processor <NUM> of <FIG> to execute such commands. While not shown in <FIG>, processors <NUM> may have associated memory which may be used for local execution of commands on data stored in storage device <NUM>.

While <FIG> shows storage device <NUM> and computational device <NUM>-<NUM> as being separately reachable across fabric <NUM>, embodiments of the disclosure may also include storage device <NUM> and computational device <NUM>-<NUM> being serially connected. That is, commands directed to storage device <NUM> and computational device <NUM>-<NUM> might both be received at the same physical connection to fabric <NUM> and may pass through one device to reach the other. For example, if computational device <NUM>-<NUM> is located between storage device <NUM> and fabric <NUM>, computational device <NUM>-<NUM> may receive commands directed to both computational device <NUM>-<NUM> and storage device <NUM>: computational device <NUM>-<NUM> may process commands directed to computational device <NUM>-<NUM>, and may pass commands directed to storage device <NUM> to storage device <NUM>.

Services <NUM>-<NUM> and <NUM>-<NUM> may offer a number of different functions that may be executed on data stored in storage device <NUM>. For example, services <NUM>-<NUM> and <NUM>-<NUM> may offer predefined functions, such as encryption, decryption, compression, and/or decompression of data, erasure coding, and/or applying regular expressions. Or, services <NUM>-<NUM> and <NUM>-<NUM> may offer more general functions, such as data searching and/or SQL functions. Services <NUM>-<NUM> and <NUM>-<NUM> may also support running application-specific code. That is, the application using services <NUM>-<NUM> and <NUM>-<NUM> may provide custom code to be executed using data on storage device <NUM>. Services <NUM>-<NUM> and <NUM>-<NUM> may also any combination of such functions. Table <NUM> lists some examples of services that may be offered by processor <NUM>.

Processors <NUM> (and, indeed, computational device <NUM>-<NUM>) may be implemented in any desired manner. Example implementations may include a local processor, such as Central Processing Unit (CPU), a Graphics Processing Unit (GPU), a General Purpose GPU (GPGPU), a Data Processing Unit (DPU), and a Tensor Processing Unit (TPU), among other possibilities. Processors <NUM> may also be implemented using Field Programmable Gate Array (FPGA) or an Application-Specific Integrated Circuit (ASIC), among other possibilities. If computational device <NUM>-<NUM> includes more than one processor <NUM>, each processor may be implemented as described above. For example, computational device <NUM>-<NUM> might have one each of CPU, TPU, and FPGA, or computational device <NUM>-<NUM> might have two FPGAs, or computational device <NUM>-<NUM> might have two CPUs and one ASIC, etc..

Depending on the desired interpretation, either computational device <NUM>-<NUM> or processor(s) <NUM> may be thought of as a computational storage unit.

Whereas <FIG> shows storage device <NUM> and computational device <NUM>-<NUM> as separate devices, in <FIG> they may be combined. Thus, computational device <NUM>-<NUM> may include controller <NUM>, storage <NUM>-<NUM>, and processor(s) <NUM> offering services <NUM>-<NUM> and <NUM>-<NUM>. As with storage device <NUM> and computational device <NUM>-<NUM> of <FIG>, management and I/O commands may be received via queue pairs <NUM>. Even though computational device <NUM>-<NUM> is shown as including both storage and processor(s) <NUM>, <FIG> may still be thought of as including a storage device that is associated with a computational storage unit.

In yet another variation shown in <FIG>, computational device <NUM>-<NUM> is shown. Computational device <NUM>-<NUM> may include controller <NUM> and storage <NUM>-<NUM>, as well as processor(s) <NUM> offering services <NUM>-<NUM> and <NUM>-<NUM>. But even though computational device <NUM>-<NUM> may be thought of as a single component including controller <NUM>, storage <NUM>-<NUM>, and processor(s) <NUM> (and also being thought of as a storage device associated with a computational storage unit), unlike the implementation shown in <FIG> controller <NUM> and processor(s) <NUM> may each include their own queue pairs <NUM> and <NUM> (again, which may be used for management and/or I/O). By including queue pairs <NUM>, controller <NUM> may offer transparent access to storage <NUM>-<NUM> (rather than requiring all communication to proceed through processor(s) <NUM>).

In addition, processor(s) may have proxied storage access <NUM> to use to access storage <NUM>-<NUM>. Thus, instead of routing access requests through controller <NUM>, processor(s) <NUM> may be able to directly access the data from storage <NUM>-<NUM>.

In <FIG>, both controller <NUM> and proxied storage access <NUM> are shown with dashed lines to represent that they are optional elements, and may be omitted depending on the implementation.

Finally, <FIG> shows yet another implementation. In <FIG>, computational device <NUM>-<NUM> is shown, which may include an array. Similar to computational device <NUM>-<NUM> of <FIG>, the array may include one or more storage <NUM>-<NUM> through <NUM>-<NUM>. While <FIG> shows four storage elements, embodiments of the disclosure may include any number (one or more) of storage elements. In addition, the individual storage elements may be other storage devices, such as those shown in <FIG>.

Because computational device <NUM>-<NUM> may include more than one storage element <NUM>-<NUM> through <NUM>-<NUM>, computational device <NUM>-<NUM> may include array controller <NUM>. Array controller <NUM> may manage how data is stored on and retrieved from storage elements <NUM>-<NUM> through <NUM>-<NUM>. For example, if storage elements <NUM>-<NUM> through <NUM>-<NUM> are implemented as some level of a Redundant Array of Independent Disks (RAID), array controller <NUM> may be a RAID controller. If storage elements <NUM>-<NUM> through <NUM>-<NUM> are implemented using some form of Erasure Coding, then array controller <NUM> may be an Erasure Coding controller.

<FIG> shows details of storage device <NUM> of <FIG> implemented using a Solid State Drive (SSD), according to embodiments of the disclosure. Interface <NUM> may be an interface used to connect SSD <NUM> to machine <NUM> of <FIG>. SSD <NUM> may include more than one interface <NUM>: for example, one interface might be used for block-based read and write requests, and another interface might be used for key-value read and write requests. While <FIG> suggests that interface <NUM> is a physical connection between SSD <NUM> and machine <NUM> of <FIG>, interface <NUM> may also represent protocol differences that may be used across a common physical interface. For example, SSD <NUM> might be connected to machine <NUM> using a U. <NUM> or an M. <NUM> connector, but may support block-based requests and key-value requests: handling the different types of requests may be performed by a different interface <NUM>.

SSD <NUM> may also include host interface layer <NUM>, which may manage interface <NUM>. If SSD <NUM> includes more than one interface <NUM>, a single host interface layer <NUM> may manage all interfaces, SSD <NUM> may include a host interface layer for each interface, or some combination thereof may be used. Host interface layer <NUM> may manage receiving requests across interface <NUM> and sending results back across interface <NUM>.

SSD <NUM> may also include SSD controller <NUM>, various channels <NUM>-<NUM>, <NUM>-<NUM>, <NUM>-<NUM>, and <NUM>-<NUM>, along which various flash memory chips <NUM>-<NUM>, <NUM>-<NUM>, <NUM>-<NUM>, <NUM>-<NUM>, <NUM>-<NUM>, <NUM>-<NUM>, <NUM>-<NUM>, and <NUM>-<NUM> may be arrayed. SSD controller <NUM> may manage sending read requests and write requests to flash memory chips <NUM>-<NUM> through <NUM>-<NUM> along channels <NUM>-<NUM> through <NUM>-<NUM>. Although <FIG> shows four channels and eight flash memory chips, embodiments of the disclosure may include any number (one or more, without bound) of channels including any number (one or more, without bound) of flash memory chips.

Within each flash memory chip, the space may be organized into blocks, which may be further subdivided into pages, and which may be grouped into superblocks. The page is typically the smallest unit of data that may be read or written on an SSD. Page sizes may vary as desired: for example, a page may be <NUM> KB of data. If less than a full page is to be written, the excess space is "unused".

While pages may be written and read, SSDs typically do not permit data to be overwritten: that is, existing data may be not be replaced "in place" with new data. Instead, when data is to be updated, the new data is written to a new page on the SSD, and the original page is invalidated (marked ready for erasure). Thus, SSD pages typically have one of three states: free (ready to be written), valid (containing valid data), and invalid (no longer containing valid data, but not usable until erased) (the exact names for these states may vary).

But while pages may be written and read individually, the block is the basic unit of data that may be erased. That is, pages are not erased individually: all the pages in a block are typically erased at the same time. For example, if a block contains <NUM> pages, then all <NUM> pages in a block are erased at the same time. This arrangement may lead to some management issues for the SSD: if a block is selected for erasure that still contains some valid data, that valid data may need to be copied to a free page elsewhere on the SSD before the block may be erased. (In some embodiments of the disclosure, the unit of erasure may differ from the block: for example, it may be a superblock, which may be a set of multiple blocks.

SSD controller <NUM> may include flash translation layer <NUM> (which may be termed more generally a logical-to-physical translation layer, for storage devices that do not use flash storage), receiver <NUM>, transmitter <NUM>, and log page unit <NUM>. Flash translation layer <NUM> may handle translation of logical block addresses (LBAs) or other logical IDs (as used by processor <NUM> of <FIG>) and physical block addresses (PBAs) or other physical addresses where data is stored in flash chips <NUM>-<NUM> through <NUM>-<NUM>. Receiver <NUM> is used to receive discovery requests from discovery unit <NUM> of <FIG>, and transmitter <NUM> is used to transmit discovery responses back to discovery unit <NUM> of <FIG>. Log page unit <NUM> is used to generate log pages, which provide additional information to discovery unit <NUM> of <FIG> regarding a computational storage unit associated with SSD <NUM> (as described above with reference to <FIG>). Table <NUM> shows information that may be included in a discovery response sent to discovery unit <NUM> of <FIG>; Table <NUM> shows information that may be included in a log page generated by log page unit <NUM>.

<FIG> show discovery of storage device <NUM> of <FIG>, according to embodiments of the disclosure. In <FIG>, discovery request <NUM> may be sent to storage device <NUM>. Discovery request <NUM> may be a standard discovery request message, such as might be specified using protocols such as NVMe, NVMe-oF, SSDP, and others; or discovery request <NUM> may be a custom discovery request message designed to probe for attached devices and/or their controllers. Discovery request <NUM> may also be sent using a custom plug-in software that may be used to recognize devices attached via a particular fabric and/or using a particular protocol.

Note that the unit that sends discovery request <NUM> may be machine <NUM>, discovery unit <NUM>, or application <NUM>. In addition, note that machine <NUM> might not be the machine including storage device <NUM>, as discussed further with reference to <FIG> below. In cases where machine <NUM> is remote from the machine including storage device <NUM>, the protocol-for example, NVMe-oF-may specify how a remote discovery request may be used to identify devices and/or their controllers.

Upon receiving discovery request <NUM>, storage device <NUM> may respond by sending discovery response <NUM>. Discovery response <NUM> may include information <NUM> about one or more computational storage unit associated with (or included in) storage device <NUM>. As discussed above with reference to <FIG>, Table <NUM> may represent information that may be included in discovery response <NUM> as information <NUM>. Discovery response <NUM>, like discovery request <NUM>, may be in a form specified by a standard such as NVMe, NVMe-oF, SSDP, and others; or discovery response <NUM> may be a custom message including information about storage device <NUM> and associated computational storage.

In <FIG>, log page request <NUM> may be sent to storage device <NUM>. Log page request <NUM> may be sent by the same unit that sends discovery request <NUM> of <FIG>, or log page request <NUM> may be sent by another unit. In addition, log page request <NUM> may be omitted, if storage device <NUM> sends log page response <NUM> automatically. Log page response <NUM> includes log page <NUM>, which provides information about a computational storage unit associated with storage device <NUM>, as described above with reference to Table <NUM>. If storage device <NUM> is associated with more than one computational storage unit, log page response <NUM> may include more than one log page <NUM>: for example, log page response <NUM> may include one log page <NUM> for each computational storage unit associated with storage device <NUM>.

The information about the computational storage unit associated with storage device <NUM>-information <NUM> of <FIG> and log page <NUM> of <FIG>may be forwarded to a discovery service, which may permit other devices and/or applications to be aware of the computational storage unit associated with storage device <NUM>.

<FIG> shows various machines connected by fabric <NUM> of <FIG> including modules involved in the discovery and use of storage device <NUM> of <FIG>, according to embodiments of the disclosure. In <FIG>, four machines <NUM>-<NUM>, <NUM>-<NUM>, <NUM>-<NUM>, and <NUM>-<NUM> are shown. Machine <NUM>-<NUM> may include storage device <NUM>. Machine <NUM>-<NUM> may include discovery unit <NUM>. Machine <NUM>-<NUM> may include discovery service <NUM>, which may be used by other devices, machines, and/or applications to learn about the computational storage unit associated with storage device <NUM>. Finally, machine <NUM>-<NUM> may include application <NUM>. <FIG> thus demonstrates that storage device <NUM>, discovery unit <NUM>, discovery service <NUM>, and application <NUM> may be located on different machines connected via network/fabric <NUM>. But while <FIG> shows each unit being included with a different machine, embodiments of the disclosure may support any number of machines, each of which may include any or all of the units shown.

Up until now, the discussion has focused on the mechanism for discovery of a storage device associated with a computational storage unit. But how that mechanism operates may also be discussed.

In some embodiments of the disclosure, computational storage (CS) APIs may provide a standardized way to access compute offload capable devices. These may be connected, for example, in direct attached and/or network attached manners. In some embodiments of the disclosure, CS APIs may apply to these and other types of connected devices and may provide an interface that may be seamless and/or standardized across existing and/or future computational storage capable devices.

To assist in discovery of storage devices associated with computational storage units, some APIs may be used, as discussed below. Any function names, variable names, and constant names shown below are merely exemplary, and may be replaced with different such names.

csQueryCSPList() may be used to return one or more processors available based on search criteria. csQueryCSPList() may take as input the name of a discovery service to query, and may return as output a buffer that lists the available computational storage units known by the discovery service. The returned list of computational storage units may be parsed and a selected entry may then be contacted by the application.

csGetCSPFromPath() may be used to return a computational storage unit associated with a given file or path. csQueryCSPList() may take as input a string that denotes a path to a file or directory that resides on a device or a device path. The file/directory may also indirectly refer to a namespace and partition. If the path is only partially qualified, the path may be fully qualified before the function completes. csQueryCSPList() may then return the qualified name to the computational storage unit.

csQueryDeviceProperties() may be used to query a device for its properties. csQueryDeviceProperties() may take as input a handle to a computational storage unit, and may return a buffer that includes the properties of the computational storage unit.

csQueryDeviceCapabilities() may be used to query a computational storage unit for its capabilities, such as the built-in computational storage-related functions. csQueryDeviceCapabilities() may take as input a handle to a computational storage unit, and may return a buffer that includes the built-in computational storage-related functions of the computational storage unit.

By using APIs such as those shown above, the specifics of how the computational storage unit may be discovered may be hidden beneath the API itself. An application may simply search for a computational storage unit using the APIs, without concern for the particular fabric connecting the application to the computational storage unit or the protocol the computational storage unit uses.

In some embodiments of the disclosure, storage devices with associated computational storage units may be virtualized, so that the resources offered by the storage device/computational storage unit may be used by more than one application. That is, instead of the storage device/computational storage unit offering multiple interfaces (real or logical) that may be used by different applications, a virtual machine (VM) may manage access to the storage device/computational storage unit. Then, when an application desired to use the services offered by the storage device/computational storage unit, the application may communicate with the VM, which may act as the "sole" client of the storage device/computational storage unit.

<FIG> shows details of discovery unit <NUM> of <FIG>, according to embodiments of the disclosure. In <FIG>, discovery unit <NUM> is shown as including plug-in <NUM>, transmitter <NUM>, receiver <NUM>, and memory <NUM>. Plug-in <NUM> may be used to construct discovery request <NUM> of <FIG>. While <FIG> shows discovery unit <NUM> as including one plug-in <NUM>, embodiments of the disclosure may include any number (one or more) of plug-ins: each plug-in may be used to construct discovery request <NUM> of <FIG> appropriate to a particular fabric <NUM> of <FIG> and/or a particular protocol used to communicate over fabric <NUM> of FIG. The use of the term "plug-in" suggests that additional plug-ins <NUM> may be added to discovery unit <NUM> as needed, which is correct; but discovery unit <NUM> may also include the built-in equivalent of one or more plug-ins <NUM> for some fabrics <NUM> of <FIG> and/or protocols. For example, discovery unit <NUM> may have built-in information for communicating across fabrics such as Ethernet, Infiniband, and/or Fibre Channel, as well as information about protocols such as NVMe and/or NVMe-oF. Transmitter <NUM> may be used to send discovery request <NUM> of <FIG> to storage device <NUM>. Transmitter <NUM> may also be used to send information <NUM> of <FIG> and/or log page <NUM> of <FIG>, once received from storage device <NUM> of <FIG>, to discovery service <NUM> of <FIG>. Receiver <NUM> may be used to receive discovery response <NUM> of <FIG> from storage device <NUM> of <FIG>. Memory <NUM> may be used store information <NUM> of <FIG> and/or log page <NUM> of <FIG> as received from storage device <NUM> of <FIG>.

<FIG> shows details of discovery service <NUM> of <FIG>, according to embodiments of the disclosure. In <FIG>, discovery service <NUM> may include a data structure, such as a table, that may be stored in memory <NUM> of <FIG> (or another memory) within machine <NUM> of <FIG>. This data structure may include information such as identifier <NUM> for a particular host (such as machine <NUM> of <FIG>) including storage device <NUM> of <FIG>, identifier <NUM> including a device ID for storage device <NUM> of <FIG>, identifier <NUM> of a computational storage capability of storage device <NUM> of <FIG>, identifier <NUM> of a computational storage type of storage device <NUM> of <FIG>, information <NUM> of <FIG> (which may also include supplemental information such as log page <NUM> of <FIG>), and identifier <NUM> of a paired device (as discussed above, in some embodiments of the disclosure storage device <NUM> of <FIG> might be associated with but not include the computational storage unit: identifier <NUM> may include the device ID for the paired device including the computational storage unit). Note that not all information shown in <FIG> must be included: embodiments of the disclosure may include or omit information as desired. Nor is the information shown necessarily representative of the form any information stored in discovery service <NUM> may take: for example, rather than an Internet Protocol (IP) address, identifier <NUM> might just include a host ID of some sort, and leave resolution of the network address from the host ID to some other service. Similarly, identifiers <NUM> and/or <NUM> may be local device IDs that are not necessarily globally unique: for example, identifiers <NUM> and/or <NUM> may be enumeration IDs assigned to the device(s) when enumerated during discovery. Alternatively, identifiers <NUM> and/or <NUM> may be globally unique identifiers such as a device serial number.

<FIG> shows a flowchart of an example high-level overview of how discovery may be performed, according to embodiments of the disclosure. In <FIG>, at block <NUM>, discovery may begin. Discovery may be started during enumeration of devices in machine <NUM> of <FIG>, or discovery may be started when application <NUM> of <FIG> is interested in locating a device including a particular computational storage unit. At block <NUM>, discovery unit <NUM> of <FIG> may determine the connections available. These connections may include the type of fabric <NUM> of <FIG> and/or the protocols that may be used across fabric <NUM> of <FIG>. Based on the available connections, at block <NUM>, discovery unit <NUM> of <FIG> may invoke the appropriate discovery code (built-in) or an appropriate plug-in. At block <NUM>, discovery unit <NUM> of <FIG> may attempt to locate one or more devices across fabric <NUM> of <FIG> and using a particular protocol across fabric <NUM> of <FIG>. Block <NUM> may involve sending discovery request <NUM> of <FIG> using the particular protocol over fabric <NUM> of <FIG>.

At block <NUM>, discovery unit <NUM> of <FIG> may determine whether a device (or its controller) was located or not. Block <NUM> may involve determining whether discovery unit <NUM> of <FIG> has received discovery response <NUM> of <FIG> from storage device <NUM>. If the device was located, then at block <NUM> discovery unit <NUM> of <FIG> may return the identified device and/or its service (function) to application <NUM> of <FIG>. Block <NUM> may also be used to transmit the identified device and/or its service (function) to discovery service <NUM> of <FIG>.

Note that while <FIG> shows a linear sequence without any repetition, embodiments of the disclosure may include discovery unit <NUM> of <FIG> sending multiple discovery requests <NUM> of <FIG> using multiple protocols across multiple fabrics <NUM> of <FIG>. Thus, <FIG> is not intended to imply that the operations shown in <FIG> are performed once and once only.

<FIG> shows a flowchart of an example procedure for storage device <NUM> of <FIG> to be discovered by machine <NUM> of <FIG>, discovery unit <NUM> of <FIG>, and/or application <NUM> of <FIG>, according to embodiments of the disclosure. In the discussion below, any reference to discovery unit <NUM> of <FIG> should be understood to include host <NUM> of <FIG> and/or application <NUM> of <FIG> as substitutes for discovery unit <NUM> of <FIG>.

In <FIG>, at block <NUM>, storage device <NUM> of <FIG> may receive discovery request <NUM> of <FIG> from discovery unit <NUM> of <FIG>. At block <NUM>, storage device <NUM> of <FIG> may generate discovery response <NUM> of <FIG>. At block <NUM>, storage device <NUM> of <FIG> may send discovery response <NUM>, which may include information <NUM> of <FIG>, to discovery unit <NUM> of <FIG>.

At block <NUM>, storage device <NUM> of <FIG> may receive log page request <NUM> of <FIG> from discovery unit <NUM> of <FIG>. Block <NUM> may be omitted, as shown by dashed line <NUM>. At block <NUM>, log page unit <NUM> of <FIG> may generate log page <NUM> of <FIG>. At block <NUM>, storage device <NUM> of <FIG> may send log page response <NUM> of <FIG>, including log page <NUM> of <FIG>, to discovery unit <NUM> of <FIG>. If multiple log pages <NUM> of <FIG> are to be generated (for example, if storage device <NUM> of <FIG> is associated with more than one computational storage unit), then blocks <NUM> and <NUM> may be repeated as often as necessary, as shown by dashed line <NUM>. Finally, if no log page <NUM> is to be generated, then blocks <NUM> and <NUM> may be omitted, as shown by dashed line <NUM>.

<FIG> shows a flowchart of an example procedure for machine <NUM> of <FIG>, discovery unit <NUM> of <FIG>, and/or application <NUM> of <FIG> to discover storage device <NUM> of <FIG>, according to embodiments of the disclosure. As with <FIG>, in the discussion below, any reference to discovery unit <NUM> of <FIG> should be understood to include host <NUM> of <FIG> and/or application <NUM> of <FIG> as substitutes for discovery unit <NUM> of <FIG>.

In <FIG>, at block <NUM>, discovery unit <NUM> of <FIG> may send discovery request <NUM> of <FIG> to storage device <NUM> of <FIG>. At block <NUM>, discovery unit <NUM> of <FIG> may receive discovery response <NUM> of <FIG>, which may include information <NUM> of <FIG>, from storage device <NUM> of <FIG>.

At block <NUM>, discovery unit <NUM> of <FIG> may send log page request <NUM> of <FIG> to storage device <NUM> of <FIG>. Block <NUM> may be omitted, as shown by dashed line <NUM>. At block <NUM>, discovery unit <NUM> of <FIG> may receive log page response <NUM> of <FIG>, which may include log page <NUM> of <FIG>, from storage device <NUM> of <FIG>. At block <NUM>, discovery unit <NUM> of <FIG> may forward information <NUM> of <FIG> and/or log page <NUM> of <FIG> to discovery service <NUM> of <FIG>. Blocks <NUM> and <NUM> may be variously omitted, as shown by dashed lines <NUM> and <NUM>.

<FIG> shows a flowchart of an example procedure for discovery service <NUM> of <FIG> to use information about a computational storage unit, according to embodiments of the disclosure. In <FIG>, at block <NUM>, discovery service <NUM> of <FIG> may receive information <NUM> of <FIG> and/or log page <NUM> of <FIG> from discovery unit <NUM> of <FIG>, machine <NUM> of <FIG>, and/or application <NUM> of <FIG>. At block <NUM>, discovery service <NUM> of <FIG> may store information <NUM> of <FIG> and/or log page <NUM> of <FIG>. At block <NUM>, discovery service <NUM> of <FIG> may receive a request from application <NUM> of <FIG> for information <NUM> of <FIG> and/or log page <NUM> of <FIG> at storage device <NUM> of <FIG>. Finally, at block <NUM>, discovery service <NUM> of <FIG> may return information <NUM> of <FIG> and/or log page <NUM> of <FIG> at storage device <NUM> of <FIG> to application <NUM> of <FIG>.

<FIG> shows a flowchart of an example procedure for application <NUM> of <FIG> to locate and use a computational storage unit, according to embodiments of the disclosure. In <FIG>, at block <NUM>, application <NUM> of <FIG> may identify storage device <NUM> of <FIG> to be used by application <NUM> of <FIG>. Note that saying "identifying" storage device <NUM> of <FIG> should be understood to mean identifying a particular functionality of interest to application <NUM> of <FIG>, rather than literally identifying a particular storage device to be the one sought. For example, application <NUM> of <FIG> might indicate a desire to use a storage device that supports data encryption, or that has some minimum available capacity: these criteria may (indirectly) identify storage device <NUM> of <FIG> as being usable by application <NUM> of <FIG> (and there may also be other storage devices available that might also be usable by application <NUM> of <FIG>). But in embodiments of the disclosure, application <NUM> of <FIG> may specifically identify storage device <NUM> of <FIG> as being the one storage device of interest.

Once application <NUM> of <FIG> has identified storage device <NUM> of <FIG> as being of interest, at block <NUM>, application <NUM> of <FIG> may send discovery request <NUM> of <FIG> to storage device <NUM> of <FIG> to discover its computational storage capabilities. Alternatively, application <NUM> of <FIG> may send a query to discovery service <NUM> of <FIG> to learn the computational storage capabilities of storage device <NUM> of <FIG>. At block <NUM>, application <NUM> of <FIG> may receive discovery response <NUM> of <FIG> or a result of the query sent to discovery service <NUM> of <FIG>. Finally, at block <NUM>, application <NUM> of <FIG> may send a command to storage device <NUM> of <FIG>.

<FIG> shows a flowchart of an example procedure for application <NUM> of <FIG> to identify a computational storage unit, according to an embodiment of the disclosure. As discussed above with reference to <FIG>, application <NUM> of <FIG> might not literally identify storage device <NUM> of <FIG>, but instead might "identify" storage device <NUM> of <FIG> based on some criteria for the desired storage device. In <FIG>, at block <NUM>, application <NUM> of <FIG> may identify storage device <NUM> of <FIG> by type. Alternatively (or in combination), at block <NUM> application <NUM> of <FIG> may identify storage device <NUM> of <FIG> by capability. In addition, application <NUM> of <FIG> may also specify other criteria (not described in <FIG>) that may be used to identify storage device <NUM> of <FIG>.

In <FIG>, some embodiments of the disclosure are shown. But a person skilled in the art will recognize that other embodiments of the disclosure are also 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 to be embodiments of the disclosure, whether expressly described or not.

Embodiments of the disclosure offer technical advantages over the prior art. By enabling discovery of computational storage units associated with storage devices, applications may locate a storage device associated with a computational storage unit that may satisfy the requirements of the application. Further, by using APIs, applications may be able to locate such storage devices with associated computational storage units using commands, regardless of the protocol supported by the storage device/computational storage unit and/or the fabric used to communicate with the storage device/computational storage unit: the API may handle translation of a shared command structure into a command appropriate to the particular storage device/computational storage unit.

The following discussion is intended to provide a brief, general description of a suitable machine or machines in which certain aspects of the disclosure may be implemented. The machine or machines may be controlled, at least in part, by input from conventional input devices, such as keyboards, mice, etc., as well as by directives received from another machine, interaction with a virtual reality (VR) environment, biometric feedback, or other input signal. 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, portable computers, handheld devices, telephones, tablets, etc., as well as transportation devices, such as private or public transportation, e.g., automobiles, trains, cabs, etc..

The machine or 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. The machine or machines may utilize one or more connections to one or more remote machines, such as through a network interface, modem, or other communicative coupling. Machines may be interconnected by way of a physical and/or logical network, such as an intranet, the Internet, local area networks, wide area networks, etc. One skilled in the art will appreciate that network communication 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) <NUM>, Bluetooth®, optical, infrared, cable, laser, etc..

Embodiments of the present disclosure may be described by reference to or in conjunction with associated data including functions, procedures, data structures, application programs, etc. which when accessed by a machine results in the machine performing tasks or defining abstract data types or low-level hardware contexts. Associated data may be stored in, for example, the volatile and/or non-volatile memory, e.g., RAM, ROM, etc., or in other storage devices and their associated storage media, including hard-drives, floppy-disks, optical storage, tapes, flash memory, memory sticks, digital video disks, biological storage, etc. Associated data may be delivered over transmission environments, including the 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. Associated data may be used in a distributed environment, and stored locally and/or remotely for machine access.

Embodiments of the disclosure may include a tangible, non-transitory machine-readable medium comprising instructions executable by one or more processors, the instructions comprising instructions to perform the elements of the disclosures as described herein.

The various operations of methods described above may be performed by any suitable means capable of performing the operations, such as various hardware and/or software component(s), circuits, and/or module(s). The software may comprise an ordered listing of executable instructions for implementing logical functions, and may be embodied in any "processor-readable medium" for use by or in connection with an instruction execution system, apparatus, or device, such as a single or multiple-core processor or processor-containing system.

The blocks or steps of a method or algorithm and functions described in connection with the embodiments disclosed herein may be embodied directly in hardware, in a software module executed by a processor, or in a combination of the two. If implemented in software, the functions may be stored on or transmitted over as one or more instructions or code on a tangible, non-transitory computer-readable medium. A 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, a removable disk, a CD ROM, or any other form of storage medium known in the art.

Having described and illustrated the principles of the disclosure with reference to illustrated embodiments, it will be recognized that the illustrated embodiments may be modified in arrangement and detail without departing from such principles, and may be combined in any desired manner. And, although the foregoing discussion has focused on particular embodiments, other configurations are contemplated. In particular, even though expressions such as "according to an embodiment of the disclosure" or the like are used herein, these phrases are meant to generally reference embodiment possibilities, and are not intended to limit the disclosure to particular embodiment configurations. As used herein, these terms may reference the same or different embodiments that are combinable into other embodiments.

Claim 1:
A device, comprising:
a connector to connect the device to a component;
a storage device (<NUM>, <NUM>);
a computational storage unit (<NUM>) including a processor (<NUM>) providing near-storage processing of data associated with the storage device (<NUM>, <NUM>) via a service of the processor (<NUM>);
the storage device (<NUM>, <NUM>) comprising:
a receiver (<NUM>, <NUM>) to receive a discovery request (<NUM>) from a discovery service (<NUM>);
a transmitter (<NUM>, <NUM>) to send a discovery response (<NUM>) to the discovery service (<NUM>), the discovery response including information (<NUM>) about the service offered by the processor (<NUM>) of the computational storage unit (<NUM>); and
a log page unit (<NUM>) to generate a log page (<NUM>) in response to a log page request (<NUM>), the log page (<NUM>) including supplemental information about the computational storage unit (<NUM>),
wherein the storage device (<NUM>) sends a log page response (<NUM>) including the log page (<NUM>),
wherein the storage device (<NUM>, <NUM>) is remote from a host (<NUM>) including the discovery service (<NUM>),
wherein the information (<NUM>) about the computational storage unit (<NUM>) includes at least one bit identifying a type of the computational storage unit (<NUM>), and
wherein the supplemental information about the computational storage unit (<NUM>) includes additional capabilities of computational storage unit types.