This disclosure relates generally to computational devices, and more specifically to systems, methods, and apparatus to identify functions for computational devices.
A computational device such as an accelerator or a computational storage device may implement one or more functions that may perform operations on data. A host may offload a processing task to the computational device by invoking a function that may be implemented by the device. The computational device may perform the function, for example, using one or more compute resources.
The above information disclosed in this Background section is only for enhancement of understanding of the background of the inventive principles and therefore it may contain information that does not constitute prior art.
A method may include interacting with an interface for one or more computational devices, wherein the interacting is based on an identifier, and wherein the identifier comprises information that identifies a functionality of a computational device function. The information may include a functionality identifier. The identifier may further include information that identifies a group of the computational device function. The group of the computational device function may be based on a source of the computational device function. The information that identifies the functionality of a computational device function may include a functionality identifier, and the information that identifies the group of the computational device function may include a group identifier. The functionality identifier may include a unique function identifier, and the group identifier may include an organizationally unique identifier. The identifier may be a first identifier, the information may be first information, the functionality may be a first functionality, the computational device function may be a first computational device function, the functionality identifier may be a first functionality identifier, and the group identifier may be a first group identifier, and the interacting may be based on a second identifier, wherein the second identifier may include second information that identifies a second functionality of a second computational device function, and the second information may include a second functionality identifier and a second group identifier. The first functionality identifier may be the same as the second functionality identifier, the first group identifier may be different from the second group identifier, and the first functionality may be interoperable with the second functionality. The first functionality identifier and the second functionality identifier may be in a first range. The first functionality identifier may be the same as the second functionality identifier, the first group identifier may be different from the second group identifier, and the first functionality may be different from the second functionality. The first functionality identifier may be in a first range and the second functionality may be in a second range. The interacting may include requesting requested information using the interface. The method may further include providing, by the interface, based on the requesting, the requested information. The requested information may include an indication that one or more of the one or more computational devices support the computational device function. The indication may include a list of computational devices that support the computational device function. The requested information may include a list of computational device functions supported by at least one of the one or more computational devices. The list may include the identifier. The requested information may include a format of the computational device function. The format may include one or more parameters. The one or more parameters may include one or more of an input parameter, an output parameter, or a status. The requested information may be requested by an application. The requesting may include invoking an interface call. The interacting may include accessing, based on the identifier, using the interface, the computational device function. The accessing may include configuring the computational device function. The accessing may include executing the computational device function. The accessing may include receiving, from the interface, a handle for the computational device function, and the executing may include invoking, using the handle, the computational device function.
A device may include one or more computational resources configured to perform a computational device function, and at least one processor configured to access, based on an identifier, the computational device function, wherein the identifier may include information that identifies a functionality of the computational device function. The identifier may further include information that identifies a group of the computational device function. The at least one processor may be configured to send, based on a request, the identifier. The identifier may be a first identifier, the computational device function may be a first computational device function, and wherein the one or more computational resources may be configured to perform a second computational device function, and the at least one processor may be configured to access, based on a second identifier, the second computational device function, wherein the second identifier may include information that identifies a second functionality of the second computational device function, and send, based on the request, the second identifier. The at least one processor may be configured to send, based on a request comprising the identifier, an indication that the device supports the computational device function. The at least one processor may be configured to configure, based on a request, the computational device function. The at least one processor may be configured to invoke, based on a request, using the one or more computational resources, the computational device function. The at least one processor may be configured to provide an output from the computational device function. The at least one processor may be configured to provide an interface to the computational device function. The device may include a computational storage device.
A system may include an apparatus comprising at least one processor configured to provide an interface for one or more computational devices, wherein the interface may be configured to perform at least one operation based on an identifier, and wherein the identifier may include information that identifies a functionality of a computational device function. The identifier may include information that identifies a group of the computational device function. The at least one processor may be configured to perform a determination, based on the identifier, of a location of the computational device function in the system. The at least one processor may be configured to provide, using the interface, the location of the computational device function. The apparatus may be configured to execute an application configured to interact with the interface. The apparatus may include a host, the system further comprising one or more computational devices in communication with the host. At least one of the one or more computational devices may be configured to perform the computational device function. The interface may be configured to access, based on the identifier, the computational device function. The interface may be configured to invoke, based on the identifier, the computational device function.
A method may include interacting with an interface for one or more computational devices, wherein the interacting is based on an identifier, wherein the identifier comprises information that identifies a functionality of a computational device function, and wherein the identifier comprises protocol information. The protocol information may include information for passing one or more parameters. The protocol information may include one or more bits of the identifier.
An apparatus may include a device including at least one computational resource configured to perform a computational device function, and a circuit configured to access, based on an identifier, the computational device function, wherein the identifier may include protocol information for the computational device function. The protocol information may include information to pass a parameter. The information to pass the parameter may include information to pass a parameter to the computational device function. The information to pass the parameter may indicate a parameter passing technique. The parameter passing technique may include passing the parameter with a command. The parameter passing technique may include passing the parameter using a reference to the parameter. The parameter passing technique is a first parameter passing technique, and the information to pass the parameter may indicate a second parameter passing technique. The identifier may include a first portion including at least a portion of the protocol information. The identifier may include a second portion including information to identify a functionality of the computational device function.
A method may include interacting with an interface for a computational device, wherein the computational device may include at least one computational resource configured to perform a computational device function, wherein the interacting may be based on an identifier, and the identifier may include protocol information for the computational device function. The protocol information may include information to pass a parameter to the computational device function. The information to pass the parameter to the computational device function may indicate a parameter passing technique. The identifier may include a first portion including at least a portion of the protocol information. The identifier may include a second portion including information to identify a functionality of the computational device function. The identifier may include a third portion including information to identify a group of the computational device function.
A system may include an apparatus may include at least one processor configured to provide an interface for a computational device, wherein the interface may be configured to perform at least one operation based on an identifier, and the identifier may include protocol information for the computational device. The apparatus may be configured to execute an application configured to interact with the interface. The protocol information may include information to pass a parameter. The information to pass the parameter may include information to pass a parameter to the computational device. The identifier may include a first portion including at least a portion of the protocol information.
The figures are not necessarily drawn to scale and elements of similar structures or functions may generally be represented by like reference numerals or portions thereof for illustrative purposes throughout the figures. The figures are only intended to facilitate the description of the various embodiments described herein. The figures do not describe every aspect of the teachings disclosed herein and do not limit the scope of the claims. To prevent the drawings from becoming obscured, not all of the components, connections, and the like may be shown, and not all of the components may have reference numbers. However, patterns of component configurations may be readily apparent from the drawings. The accompanying drawings, together with the specification, illustrate example embodiments of the present disclosure, and, together with the description, serve to explain the principles of the present disclosure.
Computational devices such as accelerators, computational storage devices, and/or the like, may implement one or more functions that may be used, for example, to offload processing tasks from a host. Computational devices from different sources may implement the same or similar functions, but using different implementation details such as function definitions, parameters, and/or the like. Thus, computational devices from different sources may not provide interoperable functions.
A function identification scheme in accordance with example embodiments of the disclosure may enable interoperability of computational device functions across different device implementations, sources, and/or the like. For example, in some embodiments, a function identifier may include a functionality identifier that may indicate a functionality (e.g., an algorithm and/or other type of behavior) of a computational device function. Depending on the implementation details, two different computational devices (e.g., from different sources) may use the same functionality identifier to identify their two respective implementations of a computational device function that may be interoperable (e.g., may be interchangeable, may provide the same or similar outputs in response to the same or similar inputs, and/or the like).
In some embodiments, a function identifier may also include a group identifier that may indicate a group to which the computational device function may belong. In some embodiments, a group may refer to a logical group, a group related to an organization, and/or the like. Thus, in some embodiments, a function identifier for a computational device function may have two portions: a functionality identifier that may identify a functionality of the function (e.g., algorithm or other behavior implemented by the function) and a group identifier that may indicate a group to which the function may belong (e.g., a group of functions created by a source of the function). Depending on the implementation details, such a function identifier may enable an application, a host, a device, and/or the like, to advertise, discover, and/or access (e.g., configure, execute, and/or the like) computational device functions in a consistent manner.
In some embodiments, one or more of the techniques disclosed herein may be implemented with an interface (which may also be referred to as a function interface) that may be implemented, for example, in a manner similar to an application programming interface (API). In some embodiments, such an interface may enable an application, a host, a device, and/or the like, to advertise, discover and/or access a computational device function by invoking an interface call using a function identifier for the computational device function.
For purposes of illustration, some embodiments may be described in the context of computational storage devices. However, the principles are not limited to storage devices and may be applied to any computational devices that may implement one or more computational device functions. In some embodiments, any function that may be implemented by a computational device may be referred to as a computational device function. In some embodiments, interoperable and interoperability may refer to interchangeable and interchangeability, respectively.
The computational device 104 may include a function memory area 108, a data memory 109, one or more compute resources 114, and/or a device functionality circuit 112. The device functionality circuit 112 may include any hardware to implement the primary function of the computational device 104. For example, if the computational device 104 is implemented as a storage device, the device functionality circuit 112 may include a storage medium such as one or more flash memory devices, a flash translation layer (FTL), and/or the like. In some embodiments, a computational storage device may be implemented as a computational storage drive (CSD), a computational storage processor (CSP), and/or a computational storage array (CSA).
As another example, if the computational device 104 is implemented as a network interface card (NIC), the device functionality circuit 112 may include one or more modems, network interfaces, physical layers (PHYs), medium access control layers (MACs), and/or the like. As a further example, if the computational device 104 is implemented as an accelerator, the device functionality circuit 112 may include one or more compute resources such as field programmable gate arranges (FPGAs), application specific integrated circuits (ASICs), embedded processors, and/or the like.
The host 102 may be implemented with any component or combination of components that may utilize the computational resources 114 of the computational device 104. For example, the host 102 may include one or more of a client device, a server, a storage node, a central processing unit (CPU), a personal computer, a tablet computer, a smartphone, and/or the like. Moreover, the embodiment illustrated in
The communication fabric 103 may be implemented with one or more interconnects, one or more networks, a network of networks (e.g., the internet), and/or the like, or a combination thereof, using any type of interface and/or protocol. For example, the fabric 103 may be implemented with Peripheral Component Interconnect Express (PCIe), Nonvolatile Memory Express (NVMe), NVMe-over-fabric (NVMe-oF), Ethemet, Transmission Control Protocol/Internet Protocol (TCP/IP), Direct Memory Access (DMA) Remote DMA (RDMA), RDMA over Converged Ethemet (ROCE), FibreChannel, InfiniBand, Serial ATA (SATA), Small Computer Systems Interface (SCSI), Serial Attached SCSI (SAS), iWARP, and/or the like, or any combination thereof. For example, in an embodiment in which the computational device 104 is implemented as a storage device, a storage protocol such as NVMe that may be used to enable the host 102 and the computational device 104 to exchange commands, data, and/or the like, over the communication fabric 103. In some embodiments, the communication fabric 103 may include one or more switches, hubs, nodes, routers, and/or the like.
The memory area 108 may include one or more function slots 110 (in this example, four function slots 110a-110d) for storing one or more executable computational device functions 106 (in this example, for functions 106a-106d). The one or more executable computational device functions 106 (e.g., software implemented functions) may be executed, for example, using one or more processing resources 115 of the compute resources 114. For example, in some embodiments, the processing resources 115 may include one or more embedded processors (e.g., CPUs such as complex instruction set computer (CISC) processors such as x86 processors and/or reduced instruction set computer (RISC) processors such as ARM processors), ASICs, FPGAs, graphics processing units (GPUs), neural processing units (NPUs), tensor processing units (TPUs), and/or the like, executing instructions that may implement one or more of the executable computational device functions 106. In some embodiments, one or more of the compute resources 114 may execute one or more of the executable computational device functions 106 in an execution environment such as a container, a virtual machine, an Extended Berkeley Packet Filter (eBPF) environment, and/or the like, or a combination thereof.
In some embodiments, the data memory 109 may be used by one or more of the computational device functions 106 when being executed with one or more of the compute resources 114. For example, the data memory 109 may be used to hold input data, output data, transitional data, and/or the like, for one or more of the computational device functions 106.
In some embodiments, the compute resources 114 may include one or more hardware resources 116 that may provide full or partial hardware implementations of one or more computational device functions 118 (in this example, computational device functions 118a and 118b). For example, in some embodiments, the hardware resources 116 may include combinational logic, sequential logic, one or more timers, counters, registers, and/or state machines, one or more complex programmable logic devices (CPLDs), FPGAs, ASICs, and/or a combination thereof.
In some embodiments, the compute resources 114 may implement one or more computational device functions using a hybrid combination of software implementation (e.g., using one or more of the processing resources 115) and hardware implementation (e.g., using one or more of the hardware resources 116). In some embodiments, one or more of the executable computational device functions 106 may be downloaded, for example, from the host 102 and/or any other source. In some embodiments, one or more of the executable computational device functions 106 may be loaded into the device 104 when is it manufactured, shipped, installed, updated and/or upgraded (e.g., through a firmware updated and/or upgrade) and/or the like. In some embodiments, a function may be referred to as a program, for example, in the context of executable computational device functions 106 that may be downloaded.
In some embodiments, a computational device function may refer to any type of function that may be performed by one or more compute resources of a computational device such as an algorithm, data movement, data management, data selection, filtering, encryption and/or decryption, compression and/or decompression, checksum calculation, hash value calculation, cyclic redundancy check (CRC), and/or the like. In some embodiments, executing a computational device function may be referred to as command processing or computational command processing. In some embodiments, a computational device function may refer to a function that may be intended to be executed by a computational device, adapted to be executed by a computational device, and/or the like. In some embodiments, even though a computational device function may be intended to be executed by a computational device, the computational device function may be executed by a host, a node, and/or the like in a system, for example, as a fallback provision if no computational device that is capable of executing the function is present, available, and/or the like, in the system.
In some embodiments, a function identification scheme in accordance with the disclosure may be applied to the system illustrated in
Referring to
For purposes of illustration, the first information 222 and the second information 224 are illustrated as separate elements in
In some embodiments, the first information 222 may be implemented with a functionality identifier (e.g., a fixed or variable length numeric code) that may identify a functionality of a computational device function. A functionality may refer to any type of behavior, expected results, and/or the like. Examples of a functionality may include an algorithm, data movement, data management, data selection, filtering, encryption and/or decryption, compression and/or decompression, checksum calculation, hash value calculation, CRC calculation, and/or the like.
Depending on the implementation details, two different computational devices (e.g., devices from different sources) having the same functionality identifier may implement computational device functions that are interoperable. In some embodiments, computational device functions may be considered interoperable if, in response to the same inputs, the computational device functions provide results that are the same or similar enough to enable the computational device function of one of the devices to be interchanged with the computational device function of the other device.
In some embodiments, the second information 224 may be implemented with a group identifier (e.g., a fixed or variable length numeric code) that may indicate a group to which the computational device function may belong. In some embodiments, a group may refer to a logical group, a group related to an organization, and/or the like. Examples of logical groups may include a global or universal group of functions, a default group of functions, and/or the like. Examples of groups related to an organization may include a group implemented by a standards organization, a vendor, a manufacturer, a distributor, a reseller, a recycler, a system integrator, an educational organization, a regulatory organization (e.g., a governmental organization), and/or the like.
Thus, in some embodiments, the function identifier 220 for a computational device function may include first information 222 (e.g., a functionality identifier) that may identify a functionality of the function (e.g., algorithm or other behavior implemented by the function) and second information 224 (e.g., a group identifier) that may indicate a group to which the function may belong (e.g., a group of functions created by a source of the function). Depending on the implementation details, such a function identifier may enable an application, a host, a device, and/or the like, to discover and/or access computational device functions in a consistent manner.
For example, in some embodiments, a standards organization may be assigned a group identifier. The standards organization may define one or more standardized computational device functions that may be identified by respective functionality identifiers. Computational devices from different sources (e.g., different vendors) may use the group identifier of the standards organization and functionality identifiers defined by the standards organization to identify functions that are implemented by the devices and are compliant with the standardized computational device functions.
As another example, in some embodiments, a source (e.g., a vendor) of a computational device may be assigned a group identifier. The source may define one or more computational device functions that may be specific to the source and may be identified by respective functionality identifiers. Additionally, or alternatively, the source may use the group identifier of the source in combination with a functionality identifier for a function defined by a standards organization to indicate a function that may be interoperable with the standardized computational device function, but which may provide additional features, benefits, and/or the like. Additionally, or alternatively, the source may use the group identifier of the source in combination with a functionality identifier for a function defined by a standards organization to override (e.g., supersede) the standardized definition and implement a noncompliant function.
Referring to
In some embodiments, each digit may represent an 8-bit byte (which may also be referred to as an octet). In some embodiments, each byte may be represented with two hexadecimal characters (one hexadecimal character to represent the upper 4 bits, and one hexadecimal character to represent the lower 4 bits).
Thus, in some embodiments, the function identifier 320 may be implemented as a 5-byte (e.g., 40-bit) numeric code in which the OSI may be represented by six hexadecimal characters and the SFI may be represented by four hexadecimal characters, wherein the OSI and SFI may be separated by a hyphen for readability.
By way of example, in some embodiments, the OSI may be implemented with a three-byte (e.g. 24-bit) organizationally unique identifier (OUI) which may be maintained by the Institute of Electrical and Electronics Engineers (IEEE). In some embodiments in which a computational device may be implemented as an NVMe device, the use of an OUI for the group identifier (e.g., for an OSI) may provide a synergistic result because NVMe devices may use the same 24-bit OUI to identify a vendor of the NVMe device. However, the inventive principles are not limited to use with an OUI or any particular type of OSI.
In some embodiments, an OSI may be implemented at various levels. For example, at one level (e.g., a global or universal level), SFIs may apply globally or universally across all organizations, vendors, and/or the like). At another level (e.g., a standards level), SFIs may apply across one or more groups (e.g., vendors, resellers, systems integrators, and/or the like) that may be fully or partially compliant with a standard). At another level (e.g., a vendor level), SFIs may apply across one or more products (e.g. devices) provided by a specific vendor.
Thus, in some embodiments, the OSI 324 combined with the SFI 322 may provide a function identifier 320 that may identify (e.g., uniquely identify) one or more computational device functions. Although the example embodiment illustrated in
For example, in some embodiments, a reserved value of an OSI (e.g., an OSI assigned to a standards organization) may be selected to indicate a group of standardized computational device function definitions created by the standards organization. Different values of the SFI may then identify specific standardized functions defined by the standards organization. Thus, any vendor may implement any number of the standardized functions and identify any such standardized functions with a function identifier including the OSI assigned to the standards organization and the SFI assigned to the specific function by the standards organization. Depending on the implementation details, this may provide standardized computational device functions that may be common across groups (e.g., vendors) and/or may be group-neutral (e.g., vendor-neutral). In some embodiments, one or more standardized computational device functions may be implemented by a host and/or a device with hardware, software, or a combination thereof, for example, as described above with respect to the embodiment illustrated in
In some embodiments, one or more computational device functions that may be identified with an OSI assigned to a standards organization and the same SFI may be implemented across one or more groups (e.g., vendors) with the same or similar expectations of input and/or output parameters and/or with interoperable results (e.g., the same or similar inputs may produce the same or similar results). However, even though different implementations may produce the same or similar results, there may be differences in performance, latencies, and/or the like depending on the different (e.g., vendor-specific) implementations.
Table 1 illustrates some example definitions of computational device functions (in this example, algorithms) that may be identified by SFIs in accordance with example embodiments of the disclosure. Referring to Table 1, the first column may be an SFI that may identify the corresponding computational device function. The second column may describe an algorithm performed by the computational device function identified by the SFI. The third column may specify the format of an interface call used to invoke the computational device function. For example, the CRC32 function identified by SFI 0001 in the first row may be named crc32, and may expect input data in an unsigned 8-bit integer (u8) format at a location pointed to by inupt_data and having a length indicated by data_length as specified by the constant size_t. The CRC32 function identified by SFI 0001 may return a value in an unsigned 32-bit integer format (u32). In some embodiments, the return value (in u32 format) may be replaced by a status in a format such as a number, a string, a true/false value, and/or the like, to indicate a status such as success, failure, and/or the like. The third column may specify one or more implementation details, applications, and/or the like, for the corresponding computational device function.
In some embodiments, one or more of the definitions illustrated in Table 1 may be globally specific (e.g., globally unique) and may define an algorithm (e.g., one algorithm uniquely) for the inputs, outputs, and/or results shown in Table 1. For example, the output value provided by the computational device function defined for SFI 0002h may not be the same as the output value provided by the computational device function defined for SFI 0003h because, for example, these functions operate differently even when the same input data is applied to the two different functions. However, in some embodiments, an application, host, device, and/or the like utilizing computational device functions belonging to the same OSI (e.g., the same group) and identified by the same SFI may expect the definition of usage to be the same or similar across different environments.
For purposes of illustration, the OSI having a hexadecimal value of 000000 may be assumed to be reserved for a group of globally defined computational device functions. Also for purposes of illustration, the OSI having a hexadecimal value of 000FAC may be assumed to be assigned to an example vendor. However, the inventive principles are not limited to any specific values of OSI, SFI, and/or the like.
For example, in some embodiments, if a vendor chooses to implement the globally defined crc32 function illustrated in Table 1, the vendor may use the function identifier (OSI-SFI) having the hexadecimal value 000000-0001. This value may represent the vendor's implementation of the globally defined crc32 function without vendor-specific modifications to the algorithm, and therefore, a user of the function (e.g., an application, a host, a device, and/or the like) may expect the definition to be as shown in Table 1. In some embodiments, the vendor's implementation of the globally defined crc32 function may be discoverable using the hexadecimal value of 000000-0001 for the function identifier (OSI-SFI), for example, through a discovery service as described below.
In some embodiments, a vendor may use its OSI in combination with an SFI for a globally defined computational device function to identify a function that may be interoperable with the standardized computational device function, but which may provide additional features, benefits, and/or the like. For example, a vendor may use the hexadecimal value 000FAC-0001 to identify its implementation of the globally defined crc32 function, but which may be compliant with the crc32 function shown in Table 1, but which may implement, for example, an additional optional parameter (e.g., input and/or output parameter) that may provide additional functionality.
In some embodiments, a vendor may use its OSI in combination with an SFI for a globally defined computational device function to override (e.g., supersede) the globally defined function to implement a noncompliant function. For example, a vendor may use the hexadecimal value 000FAC-0001 to identify its implementation of a crc32 function that uses input and/or output parameters that may be different from those shown in Table 1.
In some embodiments, one or more ranges of an SFI may be used to indicate one or more characteristics of the SFI. For example, in some embodiments, SFIs in the hexadecimal range 0001-7FFF may be reserved for globally defined computational device functions, while vendors may use SFIs in the range hexadecimal range 8000-FFFF to identify vendor defined functions.
Referring to
For example, in some embodiments, an application 428 running at the host 402 may invoke a call to the interface 426 to request a list of the computational devices 404 in the system 400 that may implement a functionality identified by a functionality identifier (e.g., an SFI). The interface 426 may query the one or more computational devices 404 to determine if any of the devices 404 implement the requested functionality. If any of the devices 404 implement the requested functionality, they may respond affirmatively to the query. The interface 426 may then respond to the call by returning a list (to the application 428) of the computational devices 404 that implement the requested functionality. In some embodiments, the list may include, for one or more devices in the list, a function identifier that may include both a functionality identifier (e.g., an SFI) and a group identifier (e.g., an OSI). Depending on the implementation details, this may enable the application 428 to determine if the function implemented by one of the computational devices 404 is globally defined (e.g., standardized), vendor-specific, and/or the like.
Additionally, or alternatively, in some embodiments, the application 428 may invoke a call to the interface 426 to request a list of one or more (e.g., all) computational device functions 410 that may be implemented by one or more of the computational devices (e.g., one or more specific ones of the devices 404 or all of the devices 404). The interface 426 may query the one or more computational devices 404 to obtain a list of one or more (e.g., all) computational device functions 410 that may be implemented by one or more (e.g., all) of the devices 404. In some embodiments, this mechanism may enable the one or more devices 404 to advertise the computational device functions they implement. The interface 426 may then respond to the call by returning a list (to the application 428) of one or more (e.g., all) of the computational devices 404 and one or more (e.g., all) of the computational device functions 410 implemented by each device 404. In some embodiments, the list may include, for one or more devices and/or one or more functions in the list, a function identifier that may include both a functionality identifier (e.g., an SFI) and a group identifier (e.g., an OSI).
As another example, after the application 428 has discovered one or more computational device functions 410 implemented by one or more of the computational devices 404, the application may invoke one or more calls to the interface 426, using one or more function identifiers, to configure and/or execute one of the functions 410.
In some embodiments, the interface 426 may be implemented at the host 402, for example, using one or more applications, processes, services, device drivers, and/or the like, running on one or more processors such as one or more CPUs at the host 402. In some embodiments, application 428 (e.g., a user application) may run on one or more processors 427 such as one or more CPUs at the host 402. In some embodiments, the interface 426 and application 428 may run partially or entirely using one or more of the same processors 427, processes, services, device drivers, and/or the like. In some embodiments, the interface 426 and application 428 may run using separate processors, processes, services, device drivers, and/or the like.
In some embodiments, one or more of the computational devices 404 may include access logic 430-1, . . . , 430-N (which may be identified collectively as 430) which may implement one or more operations to enable the host 402, application 428, interface 426, other devices 404, and/or the like, to access one or more of the functions 410 and/or compute resources 414 in the corresponding device 404. For example, the access logic 430 may keep track of, maintain, and/or the like, the one or more functions 410 and report this information to the interface 426, for example, in response to a query, during a discovery process, during an initialization process, and/or the like. As another example, the access logic 430 may configure and/or initiate the execution of one or more of the functions 410, for example, in response to a call by the application 428 to the interface 426. For example, the access logic may invoke one of the functions 410 identified by a function identifier passed with the call, and pass one or more input parameters passed with the call to the function 410. In some embodiments, the access logic 430 may select one or more of the compute resources 414 on which to execute the function 410. The access logic 430 may also pass one or more output parameters, statuses, and/or the like from the function 410 to the interface 426. Depending on the implementation details, the function 410 may be implemented by the one or more compute resources 414 using hardware, software, or a combination thereof, as explained above with respect to the embodiment illustrated in
Although the interface 426 is not limited to any specific implementation details, for purposes of illustration, an example usage of the interface 426 may proceed as follows:
Depending on the implementation details, with the example usage described above, text level information may be used to describe the function as in “crc32,” “CyclicRedundancyCheck32,” “ExecuteChecksum,” and/or the like. In some embodiments, the executing function may no longer have a name and may not need to be bound to a specific library (e.g., at any time). The linkage may instead be created indirectly, e.g., through one or more calls to the interface 426. In some embodiments, the application 428 may therefore not need to take any such dependencies on a library for the invoked function 410 and may depend on a library of the interface 426. In some embodiments, some or all of the code for the actual crc32 function implementation may reside at the device 404, in host memory (in which case it may be downloaded to the device 404), or in any other location.
Although
Thus, the interface 426 may help the application 428 connect to a device 404 if the requested functionality is implemented at a device 404, or to hardware at the host 402 if the requested functionality is implemented at the host 402. As with one or more of the devices 404, in some embodiments, the host 402 may execute a computational device function in an execution environment such as a container, a virtual machine, an eBPF environment, and/or the like, or a combination thereof. Moreover, in some embodiments, the host 402 may include hardware configured to execute one or more computational device functions partially or entirely in hardware, for example, in a manner similar to the hardware implemented functions 118 described above with respect to
Referring to
The interface 526 may enable an application, host, device, and/or the like to advertise, discover and/or access one or more computational device functions 510a and/or 510b, for example, by invoking an interface call using a function identifier for the computational device function. In some embodiments, the interface 526 may interact with an application at a remote host (e.g., application 428 at host 402 illustrated in
In some embodiments, the computational device 504 may implement an execution environment on the device 504 that may be similar to that running on the host 402 illustrated in
In some embodiments, one or more function discovery features disclosed herein may be implemented using a discovery service that may be implemented partially or entirely with an interface (e.g., interface 426 and/or 526) or may be implemented as a separate service. For example, in some embodiments, a discovery service may be implemented partially or entirely with an application, a process, a service, a device driver, and/or the like at a host, a device, or a combination thereof. In some embodiments, a service may run within a specific environment (e.g., a system such as the system 400 illustrated in
In some embodiments, the computational device 504 may implement the one or more computational device functions 510a and/or 510b with software (e.g., using an embedded operating system), with hardware, and/or a combination thereof. In such an embodiment, the device 504 may advertise the one or more computational device functions 510a and/or 510b using a function identifier (e.g., a OUI-SFI). A discovery service and/or one or more interface libraries may understand the distinction between software and/or hardware implementations and may query the device to obtain these implementation details. Moreover, the interface 526 may help configure and/or execute one or more of the computational device functions 510a and/or 510b within the device 504.
Any of the functionality disclosed herein, including, for example, any of the interfaces 426 and 526, access logic 430 and 530, and/or the like, or any of the functionality implemented at a host, a computational device, and/or the like, may be implemented with hardware, software, firmware, or any combination thereof including combinational logic, sequential logic, one or more timers, counters, registers, and/or state machines, one or more complex programmable logic devices CPLDs, FPGAs, ASICs, CPUs, GPUs, NPUs, TPUs, and/or the like, executing instructions stored in any type of memory, or any combination thereof. In some embodiments, one or more components may be implemented as a system-on-chip (SOC).
The device functionality circuit 706 may include any hardware to implement the primary function of the device 700. For example, if the device 700 is implemented as a storage device, the device functionality circuit 706 may include a storage medium such as one or more flash memory devices, an FTL, and/or the like. As another example, if the device 700 is implemented as a network interface card (NIC), the device functionality circuit 706 may include one or more modems, network interfaces, physical layers (PHYs), medium access control layers (MACs), and/or the like. As a further example, if the device 700 is implemented as an accelerator, the device functionality circuit 706 may include one or more accelerator circuits, memory circuits, and/or the like. In some embodiments, the device functionality circuit 706 may include all or a portion of the data memory 109 illustrated in
The embodiments illustrated in
Protocol information 923 may be implemented in a wide variety of manners in accordance with example embodiments of the disclosure. For example, in some embodiments, protocol information 923 may specify that a user may pass one or more parameters (e.g., to a function indicated by functionality identifier 920) within a command (e.g., an NVMe command) used to invoke the function indicated by functionality identifier 920. As another example, in some embodiments, protocol information 923 may specify that a user may pass one or more parameters using a buffer that may be accessed using a reference (e.g., a pointer) to the buffer. For instance, a buffer containing one or more parameters may be referenced by one or more pointers provided with a command used to invoke a function. Depending on the implementation details, one or more parameters may be passed within a command, for example, if there are a relatively small number and/or size of parameters, whereas one or more parameters may be passed using one or more pointers, for example, if there are a relatively large number and/or size of parameters.
In some example embodiments, protocol information 1123 may be implemented in the context of one or more function identifiers 1120 having a group identifier 1124 for a standards organization, vendor, and/or the like. For example, for a function identifier 1120 that includes an group identifier 1124 for a standards organization, vendor, and/or the like, protocol information 1123 may indicate a technique for passing one or more parameters to a function that may be indicated by functionality identifier 1122 and provided by the associated standards organization, vendor, and/or the like.
Some embodiments disclosed above have been described in the context of various implementation details, but the principles of this disclosure are not limited to these or any other specific details. For example, some functionality has been described as being implemented by certain components, but in other embodiments, the functionality may be distributed between different systems and components in different locations and having various user interfaces. Certain embodiments have been described as having specific processes, operations, etc., but these terms also encompass embodiments in which a specific process, operation, etc. may be implemented with multiple processes, operations, etc., or in which multiple processes, operations, etc. may be integrated into a single process, step, etc. A reference to a component or element may refer to only a portion of the component or element. For example, a reference to a block may refer to the entire block or one or more subblocks. The use of terms such as “first” and “second” in this disclosure and the claims may only be for purposes of distinguishing the elements they modify and may not indicate any spatial or temporal order unless apparent otherwise from context. In some embodiments, a reference to an element may refer to at least a portion of the element, for example, “based on” may refer to “based at least in part on,” and/or the like. A reference to a first element may not imply the existence of a second element. The principles disclosed herein have independent utility and may be embodied individually, and not every embodiment may utilize every principle. However, the principles may also be embodied in various combinations, some of which may amplify the benefits of the individual principles in a synergistic manner. The various details and embodiments described above may be combined to produce additional embodiments according to the inventive principles of this patent disclosure.
Since the inventive principles of this patent disclosure may be modified in arrangement and detail without departing from the inventive concepts, such changes and modifications are considered to fall within the scope of the following claims.
This application is a Continuation-In-Part of, and claims priority to, and the benefit of, U.S. patent application Ser. No. 17/730,174 filed Apr. 26, 2022, which claims priority to, and the benefit of, U.S. Provisional Patent Applications Ser. No. 63/229,069 filed Aug. 3, 2021 and Ser. No. 63/319,268 filed Mar. 11, 2022, all of which are incorporated by reference. This application claims priority to, and the benefit of, U.S. Provisional Patent Application Ser. No. 63/359,767 filed Jul. 8, 2022 which is incorporated by reference.
Number | Date | Country | |
---|---|---|---|
63229069 | Aug 2021 | US | |
63319268 | Mar 2022 | US | |
63359767 | Jul 2022 | US |
Number | Date | Country | |
---|---|---|---|
Parent | 17730174 | Apr 2022 | US |
Child | 18218577 | US |