SPDK v20.10: NVMe-oF multipath, NVMe ZNS, iSCSI login redirection
accel
New APIs spdk_accel_batch_cancel
and spdk_idxd_batch_cancel
were added to allow
cancelling a batch sequence.
bdev
A new spdk_bdev_part_base_construct_ext
function has been added and the
spdk_bdev_part_base_construct
has been deprecated. The
spdk_bdev_part_base_construct_ext
function takes bdev name as an argument instead
of bdev structure to avoid a race condition that can happen when the bdev is being
removed between a call to get its structure based on a name and actually opening it.
Removed spdk_bdev_config_text
function for bdev modules to report legacy config.
blobstore
A new spdk_bdev_create_bs_dev_ext
function has been added and spdk_bdev_create_bs_dev_from_desc
function has been deprecated.
dpdk
Updated DPDK submodule to DPDK 20.08.
env
A new API spdk_mem_get_fd_and_offset
was added to get file descriptor and offset for
a given virtual address.
event
Removed spdk_subsystem_config
callback for submodules as part of legacy config removal.
Removed spdk_app_get_running_config
function that printed configuration in legacy format,
and removed usr1_handler
from struct spdk_app_opts
callback that was used to call it.
Added SPDK thread scheduler framework which is used to rebalance load among CPU cores.
The scheduler implementation is pluggable and two schedulers are added first, static
scheduler
and gscheduler
scheduler.
static
scheduler is used by default and does not reschedule threads and keeps the initial
assignments.
CPU frequency governor framework and implementation are also added.
dpdk_governor
is the first implementation and is based on rte_power library of DPDK.
gscheduler
scheduler utilizes the CPU frequency governor.
Scheduler and governor frameworks are experimental features.
fio
Bdev fio_plugin no longer supports legacy configuration files. Options spdk_conf
and
spdk_json_conf
have to point to valid JSON configuration.
gpt
Removed option to disable GPT probing via legacy configuration. Please use generic
bdev functionality to replicate the behavior. See bdev_set_options --disable-auto-examine
and bdev_examine
RPC.
intel-ipsec-mb
Updated intel-ipsec-mb submodule to v0.54
isa-l
Updated ISA-L submodule to v2.29.0.
iscsi
The iSCSI target supports iSCSI login redirection feature to achieve fault tolerance
and load balancing particularly in scale out iSCSI target system, which runs multiple
SPDK iSCSI targets.
json
A new API spdk_json_decode_object_relaxed
was added to allow parsing json values
even if decoder for a given key is not found.
A new API spdk_json_free_object
was added to free memory allocated by spdk_json_decode_object
.
log
A log flag structure, spdk_log_register_flag
, spdk_log_get_first_flag
,
spdk_log_get_next_flag
and macro SPDK_LOG_REGISTER_COMPONENT
, have been added which
enable registering and interacting with log flags. Added SPDK_INFOLOG
, SPDK_DEBUGLOG
and SPDK_LOGDUMP
macros to display logs for specified log flag.
The log flags in the event framework -L
and several SPDK applications has been enabled on
release builds of SPDK. On debug builds this option will additionally set
log print level to SPDK_LOG_DEBUG
.
A new API spdk_log_enable_timestamps
and new RPC log_enable_timestamps
was added to
toggle log timestamps.
miscellaneous
The contents of the log_rpc library have been moved to the event library. The log_rpc
library now no longer exists.
The contents of the app_rpc library have been moved to the event library. The app_rpc
library now no longer exists.
The contents of the bdev_rpc library have been moved to the bdev library. The app_rpc
library now no longer exists.
The bdevperf application now disables the zcopy API by default. Prior to this change,
bdevperf enabled using the zcopy API by default which caused a performance impact of
up to 25% on bdevs that don't natively support zcopy because the API emulates zero-copy
by allocating a buffer. The bdevperf -x
param was renamed to -Z
and the default
value changed to false. For bdevs that support zcopy, use the -Z flag to enable
using zcopy API.
net
Net framework intended for use by user-space TCP stacks was removed.
nvme
Zoned Namespace Command Set support has been added to NVMe driver, see nvme_zns.h
for details.
New APIs, spdk_nvme_detach_async
and spdk_nvme_detach_poll_async
, have been added to
detach multiple controllers in parallel to mitigate lengthy shutdown notification of
a few NVMe SSDs.
New APIs, spdk_nvme_ns_get_ana_group_id
and spdk_nvme_ns_get_ana_state
, have been
added to get ANA group ID and ANA state of the given namespace, respectively.
If no specific command set is requested (by setting the command_set member in the
spdk_nvme_ctrlr_opts
structure), SPDK will automatically select the most appropriate
command set based on what the controller supports.
nvmf
A new API spdk_nvmf_subsystem_add_ns_ext
has been added and the API spdk_nvmf_subsystem_add_ns
has been deprecated.
The NVMe-oF target now supports Asymmetric Namespace Access (ANA) Reporting to provide
multipath to NVMe-oF initiator.
Add no_wr_batching
parameter to spdk_nvmf_transport_opts
struct to disable
Work Requests batching in RDMA transport.
NVMf Target transports can now parse any additional JSON params in the nvmf_create_transport RPC
through the JSON context provided via spdk_nvmf_target_opts->transport_specific.
A new RPC nvmf_subsystem_set_options
was added to allow transport specific options within subsystem.
A new API spdk_nvmf_transport_stop_listen_async
was added to stop accepting new connections
at the provided address. nvmf_subsystem_remove_listener
RPC now uses this function.
A new API spdk_nvmf_subsystem_disconnect_host
was added to disconnect all connections
originating from the provided hostnqn. nvmf_subsystem_remove_host
RPC now uses this function.
ocf
Updated OCF submodule to v20.03.1
rpc
New optional parameters, enable_placement_id
and enable_quickack
were added to the
sock_impl_set_options
RPC.
A new RPC bdev_examine_bdev
was added to allow users to examine a bdev explicitly.
It can be used only if bdev_auto_examine is set to false by the RPC bdev_set_options
.
Add optional 'no_wr_batching' parameter to 'nvmf_create_transport' RPC method.
New RPCs, iscsi_target_node_set_redirect
and iscsi_target_node_request_logout
, have
been added, and a new optional parameter private
has been added to the RPC
iscsi_create_portal_group
to support iSCSI login redirection feature.
A new optional parameter ana_reporting
was added to the RPC nvmf_create_subsystem
, and
a new RPC nvmf_subsystem_listner_set_ana_state
was added for ANA reporting.
New RPCs, nvmf_subsystem_get_listeners
and nvmf_subsystem_get_qpairs
, were added to
retrieve configuration of the NVMe-oF subsystem.
scsi
Two new APIs have been added spdk_scsi_dev_construct_ext
and
spdk_scsi_dev_add_lun_ext
that allow the upper layer(e.g. vhost-scsi) to
receive the notification when the scsi bdev has been resized.
The spdk_scsi_dev_construct
and spdk_scsi_dev_add_lun
eventually may be
deprecated and removed.
sock
The enable_placement_id
field was added in the struct spdk_sock_impl_opts
to
make the placement_id feature configurable by users. The default setting is
not enabled.
The enable_quick_ack
field was added in the struct spdk_sock_impl_opts
to enable
or disable quick ack for the POSIX sock module. The default setting is not enabled.
thread
fd_group
is applied to support interrupt mode.
New APIs were added to support an experimental interrupt mode. This allows modules or
libraries to selectively register file descriptors that the spdk_thread can wait on,
as an alternative to polling. In v20.10, this functionality is enabled in a very small
subset of SPDK libraries and modules.
util
A new utility named fd_group
was add. It is now
implemented by epoll on Linux platform. It can be used by
spdk_thread and reactor to implement interrupt mode.
Added spdk_bit_pool
utility, see bit_pool.h
for details.
vhost
SPDK has switched to DPDK's rte_vhost library since 19.07 release, removed the internal
rte_vhost library which is used for DPDK older than 19.05, removed the experimental vhost
nvme target which depends on the internal rte_vhost library.
vpp
Removed socket abstraction for VPP.