SPDK v21.07: Kernel DSA, Init lib, Userspace DTrace
accel_fw
Added API spdk_accel_submit_copy_crc32c to perform a CRC32C while copying data.
Added API spdk_accel_batch_prep_copy_crc32c to batch CRC32C + copy commands.
Added API spdk_accel_submit_copy_crc32cv to submit chained CRC32C + copy commands.
bdev
Change spdk_bdev_read_blocks_with_md arg offset definition from int64_t to uint64_t.
Red-black tree has been used to organize the bdev names and aliases uniformly
to provide faster lookup.
Removed ZCOPY emulation: The bdev module can be checked to see if it supports ZCOPY
and if not supported then use existing READ/WRITE commands.
Added iov to spdk_bdev_zcopy_start.
dpdk
Updated DPDK submodule to DPDK 21.05.
idxd
Remove the probe_cb parameter in spdk_idxd_probe function. And remove the definition
of spdk_idxd_probe_cb function pointer. It should be implemented in idxd_user.c.
Added API spdk_idxd_submit_copy_crc32c to perform a CRC32C while copying data.
Added API spdk_idxd_batch_prep_copy_crc32c to prepare a batch operation to perform
a CRC32C while copying data.
We have userspace idxd driver under accel_engine library (module/accel/idxd/accel_engine).
And kernel idxd driver usage is also added under the accel_engine library. This approach
implemented a wrapper library to use IDXD device by leveraging the kernel DSA driver in
SPDK idxd library (lib/idxd). Then users can leverage the RPC later to configure how to
use the DSA device by user space driver or kernel driver.
init
Added new init library that initializes the SPDK subsystems, which previously was
internal to application framework. That functionality has been made public and for
use by applications which don't leverage SPDK's application framework.
iscsi
New parameters, pdu_pool_size, immediate_data_pool_size, and data_out_pool_size,
were added to the RPC iscsi_set_options to run iSCSI target with varying amount of
available memory.
json
Added API spdk_json_write_named_uint128 and spdk_json_write_uint128 to perform
the uint128 related data.
net
Removed deprecated net library.
Added support for ZCOPY. ZCOPY is used in preference to READ and WRITE if the
bdev module supports ZCOPY and the bdev module has ZCOPY enabled.
nvme
spdk_nvme_map_prps and spdk_nvme_map_cmd were moved to nvmf/vfio-user as internal APIs
as vfio-user is the only user for the above two APIs.
Added a new function spdk_nvme_ns_cmd_copy to submit a Simple Copy Command to a Namespace.
Update the spdk_nvme_generic_command_status_code structure with new status code
according to the definition in NVMe 1.4 spec.
spdk_nvme_ctrlr_get_default_ctrlr_opts now sets use_cmb_sqs to false. This means
that if a controller has a CMB and supports SQs in the CMB, SPDK will not use
the CMB for SQs by default - the user must set use_cmb_sqs to true in
the spdk_nvme_ctrlr_opts structure prior to controller attach.
Add a new function spdk_nvme_detach_poll to simplify a common use case to continue
polling until all detachments complete.
Added new argument timeout_admin_us to spdk_nvme_ctrlr_register_timeout_callback so callers
can specify a different timeout for admin commands vs. io commands.
An existing function spdk_nvme_detach_async was updated to add one or more detachments
to an active context while it is being polled.
Rename a variable in the member cmic of the struct spdk_nvme_ctrlr_data from
multi_host to multi_ctrlr. The variable means that the NVM subsystem may have two or
more controllers if set to 1. However multi_host had indicated a particular use case
such that the NVM subsystem is used by multiple hosts.
A new option disable_read_ana_log_page was added to struct spdk_nvme_ctrlr_opts to disable
reading ANA log page. The upper layer is expected to read ANA log page instead if true.
The default value is false.
New APIs, spdk_nvme_ctrlr_reset_async and spdk_nvme_ctrlr_reset_poll_async, have been added to
reset a controller asynchronously.
New RPC bdev_nvme_reset_controller was added, to reset an NVMe controller.
Added spdk_nvme_ns_get_nguid function to get NGUID for the given namespace.
Added spdk_nvme_ctrlr_is_fabrics function to indicate whether a ctrlr handle
is associated with a fabrics controller.
nvmf
Added min_cntlid and max_cntlid to nvmf_create_subsystem to limit the controller ID range.
Added spdk_nvmf_subsystem_get_min_cntlid and spdk_nvmf_subsystem_get_max_cntlid to request those values.
spdk_nvmf_request_get_buffers_multi API is removed.
Added the nvmf_set_crdt RPC for setting command retry delay times.
Expanded spdk_nvmf_poll_group_stat with current qpair count statistics.
Removed following deprecated APIs:
spdk_nvmf_poll_group_get_stat(function innvmf.h),spdk_nvmf_transport_poll_group_get_stat(function innvmf.h),spdk_nvmf_transport_poll_group_free_stat(function innvmf.h),spdk_nvmf_rdma_device_stat(struct innvmf.h),spdk_nvmf_transport_poll_group_stat(struct innvmf.h),poll_group_get_stat(transport op innvmf_transport.h),poll_group_free_stat(transport op innvmf_transport.h).
rpc
New RPC bdev_rbd_register_cluster and bdev_rbd_unregister_cluster was added, it allows to create
and delete the rados object cluster, then users can choose the cluster to create related rbd
device.
Revised bdev_rbd_create parameter, it allows to use an optional parameter --cluster-name
to create a rbd bdev with an already registered Rados Cluster Object.
New RPC bdev_rbd_get_clusters_info was added, it allows to get the info of the registered
Rados Cluster names.
New optional parameter, timeout_admin_us, added to the bdev_nvme_set_options RPC.
Revised a parameter --stripe-size_kb to --stripe-size-kb of bdev_raid_create method
provided in scripts/rpc.py for consistency.
An new optional parameter config_kernel_mode was added to the RPC idxd_scan_accel_engine,
and this is used to enable using the kernel mode IDXD driver.
Removed deprecated parameter enable-zerocopy-send of RPC sock_impl_set_options,
use enable-zerocopy-send-server or enable-zerocopy-send-client instead.
Removed deprecated parameter disable-zerocopy-send of RPC sock_impl_set_options,
use disable-zerocopy-send-server or disable-zerocopy-send-client instead.
rpm
Removed deprecated pkg/spdk.spec, please use rpmbuild/spdk.spec instead.
See RPM documentation for more details.
thread
Red-black tree has been used for timed pollers to provide faster insertion and deletion
and for io_devices to provide faster lookup.
Removed spdk_io_channel structure from public header and moved it to thread_internal.h.
trace
Added spdk_trace_register_description_ext function to register variable number of tracepoint arguments.
Added ability to chain multiple trace entries together to extend the size of the argument buffer.
util
Red-black tree macros has been added by using the macros provided by the FreeBSD operating system
under the same BSD license.
Add an new macro SPDK_SIZEOF_MEMBER to get the size of a member of a struct.
spdk_crc32c_iov_update function was added to support calculating the crc32c of the iovs.
Added zipf random number generator with power law probability distribution.
When applied to performance testing of block devices, it will select blocks over
the full range of LBAs, but will more frequently select lower-numbered LBAs.