Skip to content

SPDK v24.09: fsdev, NVMe-oF TCP interrupt mode

Choose a tag to compare

@ksztyber ksztyber released this 27 Sep 14:47
· 2231 commits to master since this release

accel

Added spdk_accel_submit_compress_ext() and spdk_accel_submit_decompress_ext() API. They differ
from the non-ext variants in that these functions allow users to specify a compression algorithm and
compression level.

Added spdk_accel_get_compress_level_range() to get the valid level range of a given compression
algorithm.

Added API to generate and verify DIX.

Added append version of dif_verify, dif_verify_copy, dif_generate, and dif_generate_copy.

Added support for lz4 compression.

bdev

spdk_bdev_io_get_aux_buf and spdk_bdev_io_put_aux_buf are deprecated and
will be removed in the 25.01 release. We do not believe these are in use currently.

bdev_compress

Added support for specifying compression algorithm and level.

bdev_nvme

Introduced new header file /module/bdev/nvme.h and added public APIs spdk_bdev_nvme_create,
spdk_bdev_nvme_set_multipath_policy and spdk_bdev_nvme_get_default_ctrlr_opts
to get connectivity and multipathing capabilities of bdev_nvme.

Added bdev_nvme_set_keys RPC to change DH-HMAC-CHAP keys and force reauthentication of all qpairs
of a controller.

dif

Each element in enum spdk_dif_pi_format was subtracted by 1 to match the definition
of the Protection Information Format in the NVMe specification. This is necessary change
but breaks ABI compatibility. Please recompile your application if you added code using
this enum of older SPDK.

dma

Added spdk_memory_domain_transfer_data() function to transfer data between two memory domains.

env

Added spdk_env_core_get_smt_cpuset() API to get the list of SMT sibling
cores for a given core ID.

Added spdk_pci_device_get_numa_id(), spdk_env_get_numa_id(), and SPDK_ENV_NUMA_ID_ANY to
replace socket_id with numa_id when referring to a NUMA node.

Added spdk_env_get_first_numa_id(), spdk_env_get_last_numa_id(), spdk_env_get_next_numa_id(),
and SPDK_ENV_FOREACH_NUMA_ID() API to iterate over available NUMA nodes in a system.

Added enforce_numa option to spdk_env_opts. This option forces all hugepage memory
allocations to allocate memory only from the specified NUMA node without trying to fallback to other
NUMA nodes if it fails.

env_dpdk

spdk_get_tid is added to get the tid of the current thread.

event

The framework_get_reactors RPC method supports getting pid and tid.

fsdev

Added the fsdev library providing a filesystem abstraction.

fuse_dispatcher

Added the fuse_dispatcher library that manages fsdevs and implements FUSE <-> fsdev API
translation.

idxd

Added spdk_idxd_submit_dix_generate() function to generate DIX using DSA.

nvme

Added spdk_nvme_ctrlr_set_keys(), spdk_nvme_ctrlr_authenticate(), and
spdk_nvme_qpair_authenticate() API to change the DH-HMAC-CHAP keys of a given controller and force
reauthentication on its qpairs.

nvmf

Added support for interrupt mode in the NVMe-of TCP transport.

Enable iobuf based queuing for nvmf requests when there is not enough free buffers available.
Perspective from the user of the spdk_nvmf_request_get_buffers() API is that whenever all iovecs
are allocated immediately then nothing changes compared to the previous implementation.
If iobuf does not have enough buffers then there are two flows now:

  • if req_get_buffers_done is not set in the spdk_nvmf_transport_ops then again, nothing
    changes. All (if there were any) ioves are released and caller must try again later.
  • if callback was set then caller will be notified once all iovecs are allocated.

As requests waiting for the buffer might get aborted, another API to remove such request from
the iobuf queue is also added.

Added public API spdk_nvmf_subsystem_set_cntlid_range() to set controller ID range for a
subsystem.

Added nvmf_subsystem_set_keys RPC to change DH-HMAC-CHAP keys for a given subsystem/host pair
without having to remove and readd a host.

Added spdk_nvmf_subsystem_set_ns_ana_group() function to change ANA group ID of an active
namespace of a subsystem.

scheduler

Added framework_get_governor RPC to retrieve the power governor name,
power env and the frequencies available, frequency set to the cpu cores.

sock

New functions that allows to register interrupt for given socket group:
spdk_sock_group_register_interrupt() and spdk_sock_group_unregister_interrupt(). Both uses API
exposed by the thread.h, see below for details. Support implemented only for the POSIX and SSL
sockets.

thread

New function spdk_interrupt_register_for_events() build on top of spdk_fd_group_add_for_events().
See below for details.

util

New function spdk_fd_group_add_for_events() was added alongside the existing spdk_fd_group_add().
Difference is that new API allows for specifying a set of events to be monitored instead of default
SPDK_INTERRUPT_EVENT_IN.

Added API to calculate md5 hash.