github spdk/spdk v23.01
SPDK v23.01: accel chained ops, accel crypto, ublk target

latest releases: v24.09, v25.01-pre, v24.09-rc1...
21 months ago

accel

New library isa-l-crypto has been added, it is used by accel library in crypto operations.

New functions spdk_accel_submit_encrypt and spdk_accel_submit_decrypt were added.

New accel module dpdk_cryptodev has been added. It uses DPDK crypto PMD and support encrypt and
decrypt operations. New RPC dpdk_cryptodev_scan_accel_module has been added to enable this accel module.

New accel module mlx5 was added. It implements crypto operations, enabled when SPDK is configured with
RDMA provider is mlx5_dv and crypto support.

Introduced the concept of chaining multiple accel operations together and executing them all in a
single call. The operation can be chained via one of the spdk_accel_append_* functions and then
executed using spdk_accel_sequence_finish. Currently, copy, decompress, decrypt, encrypt, and
fill operations support this mode. This feature is considered experimental.

bdev

A new API spkd_bdev_part_submit_request_ext was added to specify a custom completion callback.

New APIs spdk_bdev_for_each_channel and spdk_bdev_for_each_channel_continue and
associated function pointers were added to iterate each channel of the required bdev.

The RPC bdev_get_iostat now allows a user to query the per channel IO statistics for
required bdev, and displays maximum and minimum latencies and I/O error counts.

New spdk_bdev_copy_blocks and spdk_bdev_get_max_copy APIs to support copy commands.

A new API spdk_bdev_io_get_submit_tsc was added to get the submit_tsc of the bdev I/O.

Bdevs will no longer have UUIDs generated based on timestamp and are responsible for
setting this field themselves. Generation of UUIDs for NVMe bdevs may be enabled by
running bdev_nvme_set_options RPC with --generate-uuids option. These identifiers
are based on serial number and namespace ID and will always be the same for a given
device.

A new API spdk_bdev_channel_get_histogram was added to get the histogram of a specified
channel for a bdev.

Converted internal use of pthread_mutex_t to struct spdk_spinlock. Consumers of bdev
API functions must be on an SPDK thread or the program will abort. It is now enforced
that no internal bdev locks can be held when a poller or message goes off CPU.

A new RPC bdev_reset_iostat was added to reset I/O statistics of bdevs. Note that if one
consumer reset I/O statistics, it affects all other consumers.

Add function pointers, dump_device_stat_json and reset_device_stat to the bdev module
function table to display and reset I/O statistics specific for the module specific bdev
context.

New APIs spdk_bdev_reset_io_stat, spdk_bdev_add_io_stat and spdk_bdev_dump_io_stat_json
were added to process I/O statistics outside the generic bdev layer, especially in bdev modules.

bdev_crypto

vbdev_crypto is updated to use accel framework instead of DPDK PMDs.

bdev_daos

New RPC bdev_daos_resize was added to allow resizing the daos bdev.

bdev_malloc

Both of interleaved and separated metadata are now supported by the malloc bdev module.

Protection information is now supported by the malloc bdev module.

bdev_nvme

Updated bdev_nvme_set_options RPC (and rpc.py) to support the new transport_tos parameter.

For the active-active policy of the multipath mode, in addition to the default round-robin path
selector, the minimum queue depth path selector was added. The minimum queue depth path selector
selects an I/O path according to the number of outstanding requests of each nvme qpair.

Added RPCs bdev_nvme_start_mdns_discovery, bdev_nvme_get_mdns_discovery_info and
bdev_nvme_stop_mdns_discovery to perform Avahi based mDNS discovery service,
as per NVMe TP 8009 - Automated Discovery of Ethernet Discovery Controllers.

A new option nvme_error_stat was added to the bdev_nvme_set_options RPC to enable
collecting NVMe error counts.

Added I/O statistics per I/O path to the NVMe bdev module for NVMe bdev multipath. It can be
enabled by a new option io_path_stat of RPC bdev_nvme_set_options.

Added RPC bdev_nvme_get_path_iostat to get I/O statistics for IO paths of the NVMe bdev.

Added selector parameter to bdev_nvme_set_multipath_policy RPC to set path selector for multipath.
Option round_robin and queue_depth are available.

Added rr_min_io option to RPC bdev_nvme_set_multipath_policy. It switches I/O to
another path after rr_min_io I/Os are routed to current io path for the round-robin
path selector.

Added option --io-path-stat for RPC bdev_nvme_set_option to enable collecting io path stat.

bdev_raid

Changed bdev_raid_get_bdevs RPC output format to include raid_bdev details.

bdevperf

Promoted the application to example to match similar programs: fio_plugin and perf.
It can now be found inside examples/bdev/bdevperf.

env

Added spdk_mempool_mem_iter that allows to get start address and length of each memory
chunk in order to create app-specific resources.

event

Added core lock file mechanism to prevent the same CPU cores from being used by multiple
SPDK application instances.

Added --disable-cpumask-locks command line switch to disable CPU locks on SPDK startup.

Added RPCs framework_enable_cpumask_locks and framework_disable_cpumask_locks to enable
and disable CPU core locks in runtime.

Added --rpcs-allowed command line option. Users can specify a comma-separated list of RPC
names with this option to restrict allowed RPCs to only that list.

Added --vfio-vf-token command line option to specify a VF token (UUID)
shared between SR-IOV PF and VFs for vfio_pci driver.

json

Added API spdk_json_write_double and spdk_json_write_named_double to allow
for writing and decoding of the the double data type.

log

Added consistent tracking of use of deprecated behavior. Deprecations continue to be
listed in deprecation.md and now are in subsections with headers matching a tag
used in SPDK_LOG_DEPRECATED() calls. When deprecated behavior is used, these
tags will appear in SPDK's log at the warn level. As the SPDK application exits, it
will log a summary of how many times SPDK_LOG_DEPRECATED() was called for each
tag that was logged at least once.

nvme

NVMe transport options were newly introduced. The NVMe transport options are defined via
the spdk_nvme_transport_opts structure and configured via spdk_nvme_transport_get_opts
and spdk_nvme_transport_get_opts functions.

Shared receive queue was supported by the RDMA transport. It can be configured by
a new NVMe transport option rdma_srq_size.

Added transport_tos to spdk_nvme_ctrlr_opts to support setting of the "type of service"
value in the IPv4 header. Only RDMA is supported at this time.

Added API spdk_nvme_qpair_get_num_outstanding_reqs to get the number of outstanding reqs of
a specified qpair.

nvmf

Added API spdk_nvmf_tgt_pause_polling and spdk_nvmf_tgt_resume_polling to allow
pausing polling on poll group of a given target.

rpc

Added spdk_rpc_set_allowlist to restrict allowed RPCs to the specified list.

scheduler

Changing scheduler from dynamic back to static is no longer possible,
as there is no way of saving original SPDK thread distribution on reactors.

thread

Added spdk_thread_get_app_thread which returns the first thread that was created using
spdk_thread_create.

Added spdk_thread_is_running. This returns true for a running thread, or false if
its exit process has started using spdk_thread_exit.

Added API spdk_spin_init, spdk_spin_destroy, spdk_spin_lock, spdk_spin_unlock, and
spdk_spin_held to support spinlocks that are aware of the SPDK concurrency model.

Added iobuf buffer pool, set of API calls for allocating data buffers across libraries.
Please see new API spdk_iobuf_*.

trace

New trace_get_info RPC was added to get name of shared memory file, list of the
available trace point groups and mask of the available trace points for each group.

ublk device

The ublk application supports the ublk kernel driver. It's implemented as a ublk backend
in spdk_tgt and could be started with specifying configuration. See the
ublk documentation for more details.

ublk bdev could export a block device via Linux ublk. It will move this backend device into userspace
as /dev/ublkb*. Before to adding ublk device, need to create ublk target by RPC method.

util

New API spdk_fd_group_get_epoll_event that returns the epoll(7) event that
caused a function callback in file descriptor group to execute.

Added API spdk_strarray_from_string, spdk_strarray_dup and spdk_strarray_free
for handling arrays of strings.

A new API spdk_strcpy_replace was added to replace all occurrences of the search string
with the replacement string.

New API spdk_iov_memset() was added to memset an iovec.

New API spdk_iov_one() was added to initialize an iovec for a single buffer.

Don't miss a new spdk release

NewReleases is sending notifications on new releases.