2020-03-20 21:41:56 +00:00
|
|
|
{
|
|
|
|
global:
|
|
|
|
|
|
|
|
# public functions
|
2022-08-08 20:51:25 +00:00
|
|
|
spdk_accel_initialize;
|
|
|
|
spdk_accel_finish;
|
|
|
|
spdk_accel_get_io_channel;
|
2020-03-20 21:41:56 +00:00
|
|
|
spdk_accel_submit_copy;
|
2020-04-30 15:43:02 +00:00
|
|
|
spdk_accel_submit_dualcast;
|
2020-04-29 22:27:23 +00:00
|
|
|
spdk_accel_submit_compare;
|
2020-03-20 21:41:56 +00:00
|
|
|
spdk_accel_submit_fill;
|
2020-04-28 22:20:57 +00:00
|
|
|
spdk_accel_submit_crc32c;
|
2021-01-18 16:07:49 +00:00
|
|
|
spdk_accel_submit_crc32cv;
|
2021-06-01 19:17:50 +00:00
|
|
|
spdk_accel_submit_copy_crc32c;
|
2021-06-07 20:00:15 +00:00
|
|
|
spdk_accel_submit_copy_crc32cv;
|
2022-08-16 06:46:49 +00:00
|
|
|
spdk_accel_submit_compress;
|
|
|
|
spdk_accel_submit_decompress;
|
2022-10-04 19:16:21 +00:00
|
|
|
spdk_accel_submit_encrypt;
|
|
|
|
spdk_accel_submit_decrypt;
|
2022-08-08 21:43:24 +00:00
|
|
|
spdk_accel_get_opc_module_name;
|
2022-06-01 00:13:04 +00:00
|
|
|
spdk_accel_assign_opc;
|
2020-03-20 21:41:56 +00:00
|
|
|
spdk_accel_write_config_json;
|
accel: initial operation chaining support
This patch introduces the concept of chaining multiple accel operations
and executing them all at once in a single step. This means that it
will be possible to schedule accel operations at different layers of the
stack (e.g. copy in NVMe-oF transport, crypto in bdev_crypto), but
execute them all in a single place. Thanks to this, we can take
advantage of hardware accelerators that supports executing multiple
operations as a single operation (e.g. copy + crypto).
This operation group is called spdk_accel_sequence and operations can be
appended to that object via one of the spdk_accel_append_* functions.
New operations are always added at the end of a sequence. Users can
specify a callback to be notified when a particular operation in a
sequence is completed, but they don't receive the status of whether it
was successful or not. This is by design, as they shouldn't care about
the status of an individual operation and should rely on other means to
receive the status of the whole sequence. It's also important to note
that any intermediate steps within a sequence may not produce observable
results. For instance, appending a copy from A to B and then a copy
from B to C, it's indeterminate whether A's data will be in B after a
sequence is executed. It is only guaranteed that A's data will be in C.
A sequence can also be reversed using spdk_accel_sequence_reverse(),
meaning that the first operation becomes last and vice versa. It's
especially useful in read paths, as it makes it possible to build the
sequence during submission, then, once the data is read from storage,
reverse the sequence and execute it.
Finally, there are two ways to terminate a sequence: aborting or
executing. It can be aborted via spdk_accel_sequence_abort() which will
execute individual operations' callbacks and free any allocated
resources. To execute it, one must use spdk_accel_sequence_finish().
For now, each operation is executed one by one and is submitted to the
appropriate accel module. Executing multiple operations as a single one
will be added in the future.
Also, currently, only fill and copy operations can be appended to a
sequence. Support for more operations will be added in subsequent
patches.
Signed-off-by: Konrad Sztyber <konrad.sztyber@intel.com>
Change-Id: Id35d093e14feb59b996f780ef77e000e10bfcd20
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/15529
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Aleksey Marchuk <alexeymar@nvidia.com>
2022-11-16 07:22:55 +00:00
|
|
|
spdk_accel_append_copy;
|
|
|
|
spdk_accel_append_fill;
|
2022-11-22 13:36:09 +00:00
|
|
|
spdk_accel_append_decompress;
|
2023-01-11 15:36:19 +00:00
|
|
|
spdk_accel_append_encrypt;
|
|
|
|
spdk_accel_append_decrypt;
|
accel: initial operation chaining support
This patch introduces the concept of chaining multiple accel operations
and executing them all at once in a single step. This means that it
will be possible to schedule accel operations at different layers of the
stack (e.g. copy in NVMe-oF transport, crypto in bdev_crypto), but
execute them all in a single place. Thanks to this, we can take
advantage of hardware accelerators that supports executing multiple
operations as a single operation (e.g. copy + crypto).
This operation group is called spdk_accel_sequence and operations can be
appended to that object via one of the spdk_accel_append_* functions.
New operations are always added at the end of a sequence. Users can
specify a callback to be notified when a particular operation in a
sequence is completed, but they don't receive the status of whether it
was successful or not. This is by design, as they shouldn't care about
the status of an individual operation and should rely on other means to
receive the status of the whole sequence. It's also important to note
that any intermediate steps within a sequence may not produce observable
results. For instance, appending a copy from A to B and then a copy
from B to C, it's indeterminate whether A's data will be in B after a
sequence is executed. It is only guaranteed that A's data will be in C.
A sequence can also be reversed using spdk_accel_sequence_reverse(),
meaning that the first operation becomes last and vice versa. It's
especially useful in read paths, as it makes it possible to build the
sequence during submission, then, once the data is read from storage,
reverse the sequence and execute it.
Finally, there are two ways to terminate a sequence: aborting or
executing. It can be aborted via spdk_accel_sequence_abort() which will
execute individual operations' callbacks and free any allocated
resources. To execute it, one must use spdk_accel_sequence_finish().
For now, each operation is executed one by one and is submitted to the
appropriate accel module. Executing multiple operations as a single one
will be added in the future.
Also, currently, only fill and copy operations can be appended to a
sequence. Support for more operations will be added in subsequent
patches.
Signed-off-by: Konrad Sztyber <konrad.sztyber@intel.com>
Change-Id: Id35d093e14feb59b996f780ef77e000e10bfcd20
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/15529
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Aleksey Marchuk <alexeymar@nvidia.com>
2022-11-16 07:22:55 +00:00
|
|
|
spdk_accel_sequence_finish;
|
|
|
|
spdk_accel_sequence_abort;
|
|
|
|
spdk_accel_sequence_reverse;
|
2022-11-29 11:38:53 +00:00
|
|
|
spdk_accel_get_buf;
|
|
|
|
spdk_accel_put_buf;
|
2022-10-04 19:16:21 +00:00
|
|
|
spdk_accel_crypto_key_create;
|
|
|
|
spdk_accel_crypto_key_destroy;
|
|
|
|
spdk_accel_crypto_key_get;
|
2023-01-05 13:55:04 +00:00
|
|
|
spdk_accel_set_driver;
|
2020-03-20 21:41:56 +00:00
|
|
|
|
|
|
|
# functions needed by modules
|
|
|
|
spdk_accel_module_list_add;
|
2022-08-08 20:36:34 +00:00
|
|
|
spdk_accel_module_finish;
|
2020-07-28 17:51:20 +00:00
|
|
|
spdk_accel_task_complete;
|
2023-01-05 13:55:04 +00:00
|
|
|
spdk_accel_sequence_continue;
|
|
|
|
spdk_accel_driver_register;
|
2023-01-04 10:49:15 +00:00
|
|
|
spdk_accel_get_memory_domain;
|
2020-03-20 21:41:56 +00:00
|
|
|
|
|
|
|
local: *;
|
|
|
|
};
|