Skip to content
Choose a tag to compare

SPDK v20.07: SPDK CSI driver, new accel_fw commands, I/O abort support

@tomzawadzki tomzawadzki released this
· 1 commit to v20.07.x since this release
Choose a tag to compare


A new API was added spdk_accel_get_capabilities that allows applications to
query the capabilities of the currently enabled accel engine back-end.

A new capability, CRC-32C, was added via spdk_accel_submit_crc32c.

The software accel engine implemenation has added support for CRC-32C.

A new capability, compare, was added via spdk_accel_submit_compare.

The software accel engine implemenation has added support for compare.

Several APIs were added to accel_engine.h to support batched submission
of operations.

Several APIs were added to accel_engine.h to support dualcast operations.


The accel_fw was updated to no longer require the app to allocate an
accel_task on its behalf. All public APIs now take a callback arg as
the parameter that used to be the accel_task.

The accel_fw API spdk_accel_task_size was removed as it is no longer

The accel_fw was updated to support compare, dualcast, crc32c.

The accel_fw introduced batching support for all commands in all plug-ins.
See docs for detailed information.


A new API spdk_bdev_abort has been added to submit abort requests to abort all I/Os
whose callback context match to the bdev on the given channel.


The fio plugins now compile to build/fio and are named spdk_bdev and spdk_nvme.
Existing fio configuration files will need to be updated.


Updated DPDK submodule to DPDK 20.05.


A new public API spdk_env_get_primary_core returns the index of the primary core of
the SPDK process.

Several new APIs have been added to provide greater flexibility in registering and
accessing polled mode PCI drivers. See env.h for more details.


The idxd library and plug-in module for the accel_fw were updated to support
all accel_fw commands as well as batching. Batching is supported both
through the library and the plug-in module.

IDXD engine support for CRC-32C has been added.


A new API spdk_ioat_get_max_descriptors was added.


An opts_sizeelement was added in the spdk_nvme_ctrlr_opts structure
to solve the ABI compatiblity issue between different SPDK version.

A new API spdk_nvme_ctrlr_cmd_abort_ext has been added to abort previously submitted
commands whose callback argument match.

Convenience functions, spdk_nvme_print_command and spdk_nvme-print_completion were added
to the public API.

A new function, spdk_nvmf_cuse_update_namespaces, updates the cuse representation of an NVMe

A new function qpair_iterate_requests has been added to the nvme transport interface. ALl
implementations of the transport interface will have to implement that function.


The NVMe-oF target no longer supports connecting scheduling configuration and instead
always uses what was previously called "transport" scheduling.

spdk_nvmf_tgt_accept no longer takes a function pointer as an argument. New connections
are automatically assigned to poll groups by the underlying transport. Further,
spdk_nvmf_transport_ops has changed such that the accept function pointer no longer
takes a function pointer as an argument. Instead, transports should call
spdk_nvmf_tgt_new_qpair whenever they previously would have called that callback.

The NVMe-oF target now supports aborting any submitted NVM or Admin command. Previously,
the NVMe-oF target could abort only Asynchronous Event Request commands.


A new rdma library has been added. It is an abstraction layer over different RDMA providers.
Two providers are available - verbs (used by default when RDMA is enabled or enabled explicitly
using --with-rdma=verbs) and mlx5 Direct Verbs aka DV (enabled by --with-rdma=mlx5_dv).
Using mlx5_dv requires libmlx5 installed on the system.


Parameter -p or --max-qpairs-per-ctrlr of nvmf_create_transport RPC command accepted by the script is deprecated, new parameter -m or --max-io-qpairs-per-ctrlr was added.

Added sock_impl_get_options and sock_impl_set_options RPC methods.

Command line parameters -r and --rpc-socket will longer accept TCP ports. RPC server
must now be started on a Unix domain socket. Exposing RPC on the network, as well as providing
proper authentication (if needed) is now a responsibility of the user.

The bdev_set_options RPC has a new option, bdev_auto_examine to control the auto examine function
of bdev modules.

New RPCs sock_impl_get_options and sock_impl_set_options been added to expose new socket features.
See sock section for more details.


Added spdk_sock_impl_get_opts and spdk_sock_impl_set_opts functions to set/get socket layer configuration
options. Options can be set independently for each implementation.

Added recv_buf_size and 'send_buf_size' socket layer options. They are used only in posix implementation.

Added uring based socket implementation, the code is located in module/sock/uring. This feature is only
available in Linux which requires kernel version is greater than 5.4.3. Currently, our CI pool added the uring
based socket tests for iSCSI target and also the tests for SPDK NVMe-oF tcp transport.

Added enable_recv_pipe socket layer option to allow disabling of double buffering on receive.
New option is used only in posix implementation.

Added enable_zerocopy_send socket layer option to allow disabling of zero copy flow on send.
New option is used only in posix implementation.


Some previously exposed CRC32 functions have been removed from the public API -
spdk_crc32_update, spdk_crc32_table_init, and the spdk_crc32_table struct.


The function spdk_vhost_blk_get_dev has been removed.