COMPUTATIONAL STORAGE DEVICES, STORAGE SYSTEMS INCLUDING THE SAME, AND OPERATING METHODS THEREOF

In a storage system, a first computational storage device may be configured to store first data used to execute a program, and a second computational storage device may be configured to store second data used to execute the program. The second computational storage device may be configured to receive the program offloaded from the host device, bring the first data from the first computational storage device, and execute the program using a plurality of data including the first data and the second data.

CROSS-REFERENCE TO RELATED APPLICATION

This application claims priority to and the benefit of Korean Patent Application No. 10-2023-0001246 filed in the Korean Intellectual Property Office on Jan. 4, 2023, and the entire contents of the above-identified application are incorporated herein by reference.

BACKGROUND

The disclosure relates to computational storage devices, storage systems including the same, and operating methods thereof.

(b) Description of the Related Art

In recent years, in order to reduce a computational burden on a host, computational storage devices have been developed that can execute various computational operations or various applications within a storage device. Such a computational storage device may provide computation and data storage, allowing the host to store data in the computational storage device and offload execution of one or more applications to the computational storage device. The computational storage device can execute the application offloaded thereto using the data that is stored by the computational storage device.

On the other hand, if multiple computational storage devices are connected to the host, the application that is offloaded and executed on a first computational storage device may need to use data stored in ones of the multiple computational storage devices other than the first computational storage device. This data may not be available to the first computational storage device.

SUMMARY

Some embodiments may provide computational storage devices, storage systems including the same, and operating methods thereof, in which data distributed and stored in a plurality of computational storage devices may be used.

According to some embodiments, a storage system may include a plurality of computational storage devices and a host device configured to offload a program to one or more computational storage devices among the plurality of computational storage devices. The plurality of computational storage devices may include a first computational storage device and a second computational storage device. The first computational storage device may store first data used to execute the program. The second computational storage device may store second data that are used to execute the program, receive the offloaded program from the host device, bring the first data from the first computational storage device into the second computational storage device, and execute the program using a plurality of data including the first data brought into the second computational storage device and the second data.

According to some embodiments, a computational storage device may include a non-volatile memory device, a local memory, and a compute engine. The non-volatile memory device may store first data used in execution of a first program offloaded from a host device. The local memory may store the first data transferred from the non-volatile memory device, and store second data used in execution of the first program and transferred from other computational storage device. The compute engine may execute the first program offloaded from the host device using a plurality of data including the first data and the second data.

According to some embodiments, a method of operating a storage system including a plurality of computational storage devices and a host device, and the plurality of computational storage devices may include a first computational storage device and a second computational storage device. The method may include offloading a program from the host device to the first computational storage device, transferring first data from a first non-volatile memory device of the first computational storage device to a local memory of the first computational storage device in response to a first command from the host device, transferring second data from a second non-volatile memory device of the second computational storage device to a shared memory space of the second computational storage device in response to a second command from the host device, transferring the second data from the shared memory space to the local memory of the first computational storage device, and executing the program on the first computational storage device using a plurality of data including the first data and the second data.

DETAILED DESCRIPTION OF THE EMBODIMENTS

In the following detailed description, only some embodiments of the present inventive concepts have been shown and described, simply by way of illustration. As those skilled in the art would realize, the described embodiments may be modified in various different ways, all without departing from the spirit or scope of the present inventive concepts.

Accordingly, the drawings and description are to be regarded as illustrative in nature and not restrictive. Like reference numerals designate like elements throughout the specification. Any sequence of operations or steps provided herein is not limited to the order presented in the claims or figures unless specifically indicated otherwise. The order of operations or steps may be changed, several operations or steps may be merged, a certain operation or step may be divided, and/or a specific operation or step may not be performed.

As used herein, the singular forms “a” and “an” are intended to include the plural forms as well, unless the context clearly indicates otherwise. Although the terms first, second, and the like may be used herein to describe various elements, components, steps and/or operations, these terms are only used to distinguish one element, component, step or operation from another element, component, step, or operation.

FIG.1is a block diagram illustrating an example of a storage system according to some embodiments, andFIG.2is a block diagram illustrating an example of a computational storage device according to some embodiments.

Referring toFIG.1, a storage system100may include a host device110and a plurality of computational storage devices1201,1202. . .120n. In some embodiments, the storage system100may be a computing device.

The host device110may include a host processor111and a host memory112. The host processor111may control an overall operation of the host device110. The host processor111may be implemented as at least one of various processing units, including, for example, a central processing unit (CPU), an application processor (AP), a graphic processing unit (GPU), a neural processing unit (NPU), a field-programmable gate array (FPGA), and/or a microprocessor. In some embodiments, the host processor111may be implemented as a system-on-a-chip (SoC). The host memory112may store data, instructions, and programs required for operations of the host processor111. The host memory112may be, for example, a dynamic random-access memory (DRAM).

The computational storage devices1201to120nmay be semiconductor devices (e.g., storage devices) that provide computational services and data storage services. The computational storage devices1201to120nmay be used as both data storage in the storage system100and computational devices to execute an offloaded program. In some embodiments, the computational storage devices1201to120nmay be, for example, data center or artificial intelligence training data devices.

In some embodiments, the host device110may control operations of the computational storage devices1201to120nvia a computer express link (CXL) interface. The CXL interface may include CXL.io, CXL.cache, and CXL.mem as subprotocols.

The host device110may offload a program130to one or more computational storage devices (e.g.,1201) from among the plurality of computational storage devices1201to120n. The host device110may offload various types of programs130, such as an application, a kernel, and/or a computation, to the computational storage device1201. The program130may include, for example, an encryption program, a compression program, an image recognition program, a filtering program, and/or an artificial intelligence program.

When data DATA1, DATA2. . . DATAn required for execution of the program130are distributedly stored in the plurality of computational storage devices1201to120n, the computational storage device1201may bring the distributed data DATA2to DATAn from the other computational storage devices1202to120n. The computational storage device1201may execute the program130using the data DATA1that it stores and the data DATA2to DATAn obtained from the other computational storage devices1202to120n.

Referring toFIG.2, in some embodiments, a computational storage device200may include a storage controller210, a local memory230, a non-volatile memory device240, and a compute engine250. The computational storage device200may correspond to one of computational storage devices1201to120, shown inFIG.1.

The storage controller210may store data in the non-volatile memory device240and/or read data stored in the non-volatile memory device240in response to an input/output (I/O) request from a host device (e.g., the host device110inFIG.1). In some embodiments, the computational storage device200may use a non-volatile memory express (NVMe) protocol as a storage protocol, and the storage controller210may be an NVMe controller210.

In some embodiments, the storage controller210may perform various operations to control the non-volatile memory device240. The various operations may include, for example, an address mapping operation, a wear-leveling operation, and/or a garbage collection operation. The address mapping operation may be a translation operation between a logical address managed by the host device110and a physical address of the non-volatile memory device240. The wear-leveling operation may be an operation that equalizes the frequency or number of uses of a plurality of memory blocks included in the non-volatile memory device240. The garbage collection operation may an operation that copies valid data from a source block of the non-volatile memory device240to a target block, and then erases the source block, thereby securing available blocks or free blocks in the non-volatile memory device240.

The compute engine250may execute a program221that is offloaded from the host device110. In some embodiments, the program221may be stored in a program slot. The program slot may be formed in the compute engine250, or may be allocated in a separate memory. In some embodiments, the program slot in which the program221is stored may be within or may form a compute namespace220, which is an entity that is able to execute the program221. The compute namespace220may be, for example, an entity in an NVMe subsystem. The compute namespace220may access the local memory230. In some embodiments, the computational storage device200may include one or more compute namespaces220. If the computational storage device200includes a plurality of compute namespaces220, the host device110may offload a plurality of programs respectively to the plurality of compute namespaces220(e.g., in a one-to-one relationship). Thus, each offloaded program221may be managed in a respective compute namespace220, with the understanding that the present disclosure is not limited thereto.

The compute engine250may include a hardware accelerator251. In some embodiments, the accelerator251may be implemented as at least one of various processing units including a GPU, a digital signal processing unit (DSP), a NPU, and/or a coprocessor. In some embodiments, the accelerator251may copy data stored in the non-volatile memory device240to the local memory230and/or a shared memory space231, and/or may copy data stored in the local memory230and/or the shared memory space231to the non-volatile memory device240.

The local memory230may be a memory accessed and used by the compute engine250, which may store data to be used by the offloaded program221or store a result from execution of the program221. In some embodiments, the local memory230may also be accessed by the storage controller210. In some embodiments, the local memory230may be a local memory in the NVMe subsystem, which may be referred to as a subsystem local memory (SLM). The computational storage device200may further include the shared memory space231that may be accessed by other computational storage devices. The data stored in the shared memory space231may be transferred to the local memory230of another computational storage device200. In some embodiments, the local memory230and the shared memory space231may be provided as separate memory devices. In some other embodiments, the shared memory space231may be provided as a memory space within the local memory230. In this case, the host device110may designate a space within the memory device that is accessible by other computational storage devices as the shared memory space231. For example, the host device110may designate a space that supports the CXL.mem and/or CXL.cache protocols of the CXL protocol and set the space to the shared memory space231. The local memory230and the shared memory space231may be implemented as, for example, a DRAM.

In some embodiments, the storage controller210and/or the compute engine250may further include a memory controller (not shown) that controls the local memory230and/or the shared memory space231. In some embodiments, the memory controller may be provided as a separate chip from the storage controller210and/or the accelerator251. In some other embodiments, the memory controller may be provided as an internal component of the storage controller210and/or the accelerator251.

The non-volatile memory device240may store data of the storage system100. The non-volatile memory device240may include, for example, a flash memory such as a NAND flash memory. In another example, the non-volatile memory device240may include, for example, a phase-change memory, a resistive memory, a magnetoresistive memory, a ferroelectric memory, or a polymer memory. The non-volatile memory device240may form a non-volatile memory (NVM) namespace. In some embodiments, the computational storage device200may further include a memory controller (e.g., a flash memory controller) that controls or is configured to control the non-volatile memory device240, and the non-volatile memory device240and the flash memory controller may form the NVM namespace.

FIG.3is a diagram illustrating an example of program offloading in a storage system according to some embodiments.

Referring toFIG.3, a host device310may offload a program to a computational storage device320. InFIG.3, the computational storage device320is shown to include two compute namespaces322and323, but the number of compute namespaces322and323is not limited thereto.

In some embodiments, the compute namespaces322and323may support device-defined programs and/or downloadable programs. A device-defined program may be, for example, a fixed program provided by a manufacturer, and a downloadable program may be a program that is loaded into the computational storage devices322and323by or from the host device310. For example, the device-defined program323amay be provided in the compute namespace323.

Compute engines (e.g.,250inFIG.2) may execute the programs322a,323a, and323bin the compute namespaces322and323using data stored in the local memory324in response to a program execution command from the host device310.

FIG.4is a diagram illustrating an example of program execution in a storage system according to some embodiments. InFIG.4, it is assumed that a program422ais offloaded to a compute namespace422of a computational storage device420.

Referring toFIG.4, a host device410may send a data read command to a storage controller421of the computational storage device420in operation S431. In response to the data read command, data stored in a non-volatile memory device (e.g., NVM namespace)424may be copied to a local memory423in operation S432. In some embodiments, the storage controller421may control the NVM namespace424and the local memory423in response to the data read command to transfer the data from the NVM namespace424to the local memory423. In some embodiments, the storage controller421may send the data read command to a compute engine (e.g., compute engine250inFIG.2), and the compute engine250may control the NVM namespace424and the local memory423in response to the data read command to transfer the data from NVM namespace424to the local memory423. For example, under a control of the storage controller421or the compute engine250, a flash memory controller may read the data from NVM namespace424and store the data in the local memory423.

After copying the data from the NVM namespace424to the local memory423is complete, the storage controller421may send a read success message to the host device410in operation S433.

To execute the program, the host device410may send a command to the computational storage device420to execute the program422ain the compute namespace422in operation S441. In some embodiments, the storage controller421may receive the program execution command from the host device410and may send the program execution command to the compute engine250. In response to the program execution command, the compute engine250may execute the program422ain the compute namespace422using the data stored in the local memory423in operation S442. The compute engine250may store an execution result of the program422ain the local memory423in operation S443. After the execution of the program422ain the compute namespace422is complete, the storage controller421may send a message indicating successful execution of the program to the host device410in operation S444.

In some embodiments, the host device410may send to the computational storage device420a read command of instructing to read data from the local memory423in operation S451. The storage controller421may read the data from the local memory423(e.g., the execution result of the program422a) and transfer it to the host device410in operation S452.

The storage system may execute the program on the computational storage device420by performing the above-described operations. Further, if requested by the host device410, the storage system may provide the result execution of the program from the computational storage device420to the host device410.

FIG.5is a diagram illustrating an example of an operating method of a storage system according to some embodiments, andFIG.6,FIG.7, andFIG.8each are a flowchart illustrating an example of an operating method of a storage system according to some embodiments.

Referring toFIG.5, a storage system may include a host device510and a plurality of computational storage devices520and530. Data used to execute a program522ato be offloaded from the host device510may be distributedly stored in the computational storage devices520and530(e.g., a first part of the data may be stored in the computational storage device520, and a second part of the data may be stored in the computational storage device530). Although a case where the data are distributedly stored in the two computational storage devices520and530is shown for convenience inFIG.5, the number of computational storage devices in which the data are distributedly stored is not limited thereto.

The computational storage device520may include a storage controller521, a compute namespace522, a local memory523, an NVM namespace524, and a compute engine525. The computational storage device530may also include a storage controller531, a compute namespace532, a local memory533, an NVM namespace534, and a compute engine535. The computational storage device530may further include a shared memory space536. In some embodiments, the host device510may set the shared memory space536in the computational storage device530(e.g., the local memory533).

Some data DATA0of the data used to execute the program522amay be stored in the NVM namespace524of the computational storage device520, and some other data DATA1of the data used to execute program522amay be stored in the NVM namespace534of the computational storage device530. For example, the program522amay be an image recognition program, and the data that are a subject of image recognition may be distributedly stored in the computational storage devices520and530. In this case, if the computational storage device520executes the image recognition program522ausing only its own stored data DATA0, an incomplete image recognition result may be obtained. Accordingly, the storage system according to some embodiments may transfer the data stored in the computational storage device530to the computational storage device520.

Referring toFIGS.5and6, the host device510may select a computational storage device (e.g.,520) to which the program522ais to be offloaded from among the computational storage devices520and530, and may offload (transfer) the program522ato the selected computational storage device520in operation S610. In some embodiments, when the host device510offloads the program522ato the computational storage device520, the host device510may send a data read command to the computational storage device520in operation S610. For example, the host device510may transfer the data read command to the computational storage device520along with the program522a. In another example, the host device510may send the data read command to the computational storage device520after offloading the program522ato the computational storage device520.

Additionally, the host device510may send a data share command to the other computational storage devices530where the data are distributed in operation S620. In some embodiments, the host device510may set a shared memory space536in the computational storage device530and send the data share command to the computational storage device530. In some embodiments, the data share command may include location information (e.g., an address range) of the shared memory space536to which the data are to be transferred.

In some embodiments, when transferring the program522aor the data read command from the host device510to the computational storage device520in operation S610, the host device510may provide the computational storage device520with identification information of the other computational storage device530in which the data are distributedly stored. For example, the data read command or a command indicating to offload the program may include the identification information of the other computational storage device530. Accordingly, the computational storage device520may identify the other computational storage device530where the data are distributedly stored (e.g., the computational storage device530to which a ready message is to be sent in operation S650).

The computational storage device520may transfer (e.g., copy) some data DATA0stored in the non-volatile memory device (e.g., NVM namespace)524to the local memory523in response to the data read command in operation S630. In some embodiments, the storage controller521of the computational storage device520may receive the data read command, and the NVM namespace524may transfer the data DATA1to the local memory523under a control of the storage controller521. In some other embodiments, the storage controller521of the computational storage device520may receive the data read command and send it to the compute engine525, and the NVM namespace524may transfer the data DATA1to the local memory523under a control of the compute engine525. For example, under the control of storage controller521or compute engine525, a flash controller in the NVM namespace524may read the data DATA0from the non-volatile memory device and transfer the data DATA0to the local memory523.

Additionally, the computational storage device530may transfer (e.g., copy) some data DATA1stored in the non-volatile memory device (e.g., NVM namespace)534to the shared memory space536in response to the data share command in operation S640. In some embodiments, the storage controller531of the computational storage device530may receive the data share command, and the NVM namespace534may transfer the data DATA1to the shared memory space536under a control of the storage controller531. In some other embodiments, the storage controller531of the computational storage device530may receive the data share command and send it to the compute engine535, and the NVM namespace534may transfer the data DATA1to the shared memory space536under a control of the compute engine535. For example, under the control of storage controller531or compute engine535, a flash controller in the NVM namespace534may read the data DATA1from the non-volatile memory device and transfer the data DATA1to the shared memory space536.

Next, the computational storage device520may send to the computational storage device530a ready message of querying whether the data DATA1are ready in the shared memory space536in operation S650. In some embodiments, the storage controller521of the computational storage device520may send the ready message to the storage controller531of the computational storage device530. In some other embodiments, the compute engine525of the computational storage device520may send the ready message to the compute engine535of the computational storage device530.

If the transfer of data DATA1from the NVM namespace534to the shared memory space536has been complete, the computational storage device530may send to the computational storage device520an acknowledgment (ACK) message indicating completion of the transfer of the data DATA1in response to the ready message in operation S660. In some embodiments, the storage controller531of the computational storage device530may send the ACK message to the storage controller521of the computational storage device520. In some other embodiments, the compute engine535of the computational storage device530may send the ACK message to the compute engine525of the computational storage device520. If the transfer of the DATA1from NVM namespace534to the shared memory space536is not complete, the computational storage device530may send a negative acknowledgment (NACK) message to the computational storage device520. In some embodiments, the storage controller531of the computational storage device530may send the NACK message to the storage controller521of the computational storage device520. In some other embodiments, the compute engine535of the computational storage device530may send the NACK message to the compute engine525of the computational storage device520. Upon receiving the NACK message, the computational storage device520may send the ready message to the computational storage device530again after a predetermined time has clasped.

In response to the ACK message, the computational storage device520may access the shared memory space536of the computational storage device530to bring the data DATA1from the shared memory space536of the computational storage device530into the local memory523of the computational storage device520in operation S670. In some embodiments, the computational storage device520, for example, the storage controller521or the compute engine525, may access the shared memory space536of the computational storage device530and read the data DATA1from the shared memory space536without intervention of the host device510. In some embodiments, the computational storage device520may access the shared memory space536using a CXL protocol. The CXL protocol may include, for example, a direct peer-to-peer access protocol defined in a CXL standard (e.g., CXL specification 3.0). In some embodiments, for direct data transfer from the shared memory space536to the local memory523, the computational storage devices520and530each may include a direct memory access (DMA) engine.

After bringing the data DATA1from the shared memory space536into the local memory523, the compute engine525of the computational storage device520may execute the program522aon the compute namespace522using the data DATA0and DATA1stored in the local memory523, and store an execution result of the program522ain the local memory523in operation S680. In some embodiments, the host device510may send a program execution command (e.g., S441inFIG.4) to the storage controller521of the computational storage device520, and the compute engine525may execute the program522ain response to the program execution command transferred from the storage controller521. In some embodiments, after the compute engine525completes executing the program522a, the storage controller521may send a message (e.g., S444inFIG.4) indicating successful program execution to the host device510.

The computational storage device520may provide the execution result of the program522afrom the local memory523to the host device510in operation S690. In some embodiments, the host device510may send to the storage controller521of the computational storage device520a read command (e.g., S451inFIG.4) of instructing the storage controller521to read data from the local memory523. In response to the read command, the storage controller521may read the execution result of the program522afrom the local memory523and provide the execution result to the host device510.

As described above, when the data DATA0and DATA1are distributedly stored in the plurality of computational storage devices520and530, the computational storage device520for executing the program522amay bring the data of the other computational storage device530into the computational storage device520, thereby executing the program522a.

Referring toFIGS.5and7, in some embodiments, unlike embodiments described with reference toFIG.6, the computational storage device520may not send to the computational storage device530the ready message of inquiring whether the data DATA1are ready in the shared memory space536. Detailed descriptions of operations similar to the operations described with reference toFIG.6are omitted.

A host device510may offload a program522ato a computational storage device520and send a data read command to the computational storage device520in operation S710. The host device510may also send a data share command to the other computational storage device530where data are distributed in operation S720. In some embodiments, when sending the data share command to the computational storage device530in operation S720, the host device510may provide the computational storage device530with identification information of the computational storage device520to which the program is offloaded. For example, the data share command may include the identification information of the computational storage device520. Accordingly, the computational storage device530may identify the computational storage device520on which the program522ais to be executed.

The computational storage device520may transfer (e.g., copy) some data DATA0stored in a non-volatile memory device (e.g., NVM namespace)524to a local memory523in response to the data read command in operation S730. Further, the computational storage device530may transfer (e.g., copy) some data DATA1stored in a non-volatile memory device (e.g., NVM namespace)534to a shared memory space536in response to the data share command in operation S740.

If the data DATA1are ready in the shared memory space536, the computational storage device530may send to the computational storage device530a ready message indicating that the data DATA1are ready in operation S750. In response to the ready message, the computational storage device520may access the shared memory space536of the computational storage device530to bring the data DATA1from the shared memory space536of the computational storage device530into the local memory523of the computational storage device520in operation S770.

After bringing the data DATA1from the shared memory space536into the local memory523, the compute engine525of the computational storage device520may execute the program522aon the compute namespace522using the data DATA0and DATA1stored in the local memory523, and may store an execution result of the program522ain the local memory523in operation S780. The computational storage device520may provide the execution result of the program522afrom the local memory523to the host device510in operation S790.

Referring toFIGS.5and8, in some embodiments, the host device510may perform authentication on the computational storage devices520and530in operation S805before sharing data distributed between the computational storage devices520and530. After performing the authentication, the storage system may perform operations S610to S690described with reference toFIG.6or operations S710to S790described with reference toFIG.7. In this way, by performing the authentication on the computational storage devices520and530, the computational storage device520may access the computational storage device530while maintaining security.

In some embodiments, the host device510may send an authentication request message to the computational storage device520and authenticate the computational storage device520based on a response message from the computational storage device520. Similarly, the host device510may send an authentication request message to the computational storage device530and authenticate the computational storage device530based on a response message from the computational storage device530. That is, the host device510may authenticate cach of the plurality of computational storage devices520and530.

In some other embodiments, the host device510may send an authentication initiate message to one or more computational storage devices among the plurality of computational storage devices520and530. Then, a computational storage device520receiving the authentication initiate message may send an authentication request message to the other computational storage device530and perform authentication based on a response message from the computational storage device530. For example, the host device510may send the authentication initiate message to the computational storage device520to which the program is to be offloaded, and the computational storage device520may act as a master or primary computational storage device and authenticate the other computational storage devices530, which may act as secondary computational storage devices530.

Next, a method of selecting a computational storage device to which a program is to be offloaded in a storage system according to various embodiments is described with reference toFIG.9toFIG.11.

FIG.9is a diagram illustrating an example of a method of selecting a computational storage device in a storage system according to some embodiments.

Referring toFIG.9, before offloading a program to be executed on a computational storage device, a host device (e.g., a host processor of the host device) may search for a computational storage device in which data (referred to as “target data”) used to execute the program are stored in operation S910. In some embodiments, the host device may search for the computational storage device where the target data are stored based on a storage history of the target data or address information of a location where the target data are stored. If one computational storage device is detected as the computational storage device storing the target data in operation S920, the host device may offload the program to the detected computational storage device in operation S925.

On the other hand, a plurality of computational storage devices may be detected as the computational storage device storing target data in operation S920. In this case, each of the plurality of computational storage devices may store a part of the target data. Accordingly, the host device may determine an amount of target data stored in each of the plurality of computational storage devices in operation S930. The host device may select the computational storage device having the largest amount of stored target data among the plurality of computational storage devices as the computational storage device to which the program is to be offloaded in operation S940, and may offload the program to the selected computational storage device in operation S950.

As described above, offloading the program to the computational storage device having the largest amount of target data may minimize data movement between the plurality of computational storage devices.

FIG.10is a diagram illustrating an example of a method of selecting computational storage device in a storage system according to some embodiments.

Referring toFIG.10, before offloading a program to be executed on a computational storage device, a host device may search for a computational storage device that stores target data used to execute the program in operation S1010. If one computational storage device is detected as the computational storage device storing the target data in operation S1020, the host device may offload the program to the detected computational storage device in operation S1025.

On the other hand, if a plurality of computational storage devices are detected as the computational storage device storing the target data in operation S1020, the host device may check a state of an accelerator in each of the plurality of computational storage devices in operation S1030. The host device may offload the program to a computational storage device including an accelerator that is in an idle state among the plurality of computational storage devices in operation S1030. In some embodiments, the host device may manage the states of the accelerators in the plurality of computational storage devices and identify the idle accelerator based on the managed states of the accelerators. In some other embodiments, the host device may query each of the plurality of computational storage devices for the state of the accelerator, and receive the state of the accelerator from each of the plurality of computational storage devices.

As described above, by offloading the program to the computational storage device having the idle accelerator, the program may be executed efficiently.

FIG.11is a diagram illustrating an example of a method of selecting a computational storage device in a storage system according to some embodiments.

Referring toFIG.11, before offloading a program to be executed on a computational storage device, a host device may search for a computational storage device that stores target data used to execute the program in operation S1110. If one computational storage device is detected as the computational storage device storing the target data in operation S1120, the host may offload the program to the detected computational storage device in operation S1125.

On the other hand, if a plurality of computational storage devices are detected as the computational storage device storing the target data in operation S1120, the host device may determine a utilization of an accelerator in each of the plurality of computational storage devices in operation S1130. In some embodiments, the host device may manage a state of the accelerator in each of the plurality of computational storage devices, and may determine the utilizations of the accelerators based on the states of the managed accelerators. In some embodiments, the host device may query each of the plurality of computational storage devices for the utilization of the accelerator, and may receive the utilization of the accelerator from each of the plurality of computational storage devices.

The host device may select the computational storage device including the accelerator with the lowest utilization among the plurality of computational storage devices as the computational storage device to which the program is to be offloaded in operation S1140, and may offload the program to the selected computational storage device in operation S1150.

As described above, by offloading the program to the computational storage device including the accelerator with the lowest utilization, the program may be executed efficiently.

While the inventive concepts disclosed herein have been described in connection with what is presently considered to be practical embodiments, it is to be understood that the inventive concepts are not limited to the disclosed embodiments. On the contrary, the present disclosure is intended to cover various modifications and equivalent arrangements included within the scope of the appended claims.