Repository navigation
SPDK v22.09: FTL, xNVMe bdev, DAOS bdev, SMA crypto and QoS
accel
Many names were changed in the accel framework to make them consistent both with themselves and
the rest of SPDK. The primary public header file is now named include/spdk/accel.h.
Added a new runtime RPC accel_get_opc_assignments to get a list of current opcode to engine
assignments.
Added a new startup RPC accel_assign_opc to assign/override a specific opcode to
an engine.
bdev
New RPCs bdev_xnvme_create and bdev_xnvme_delete were added to support the xNVMe bdev.
A new API spdk_bdev_for_each_bdev_io was added to execute the function on the appropriate
thread for each bdev_io submitted to the bdev.
A new API spdk_bdev_get_current_qd was added to measure and return the queue depth from a
bdev. This API is available even when queue depth sampling is disabled.
Added spdk_bdev_seek_data, spdk_bdev_seek_hole and spdk_bdev_io_get_seek_offset functions
that start from a given offset and seek for next data or for next hole. At this time only
supported by lvol bdev module.
A new parameter io_drain_timeout has been added to spdk_bdev structure. It controls how long
a bdev reset must wait for IO to complete prior to issuing a reset to the underlying device.
If there is no outstanding IO at the end of that period, the reset is skipped.
Best defined for bdevs that share an underlying bdev, such as multiple lvol bdevs sharing
an nvme device, to avoid unnecessarily resetting the underlying bdev and affecting other
bdevs that are sharing it.
Modifying this field is optional. Setting the value to 0 keeps the original behavior
to always send resets immediately, even if there is no I/O outstanding.
blobstore
Reserve space for used_clusters bitmap. The reserved space could be used for blobstore growing
in the future.
Added is_zeroes operation to spdk_bs_dev. It allows to detect if logical blocks are backed
by zeroes device and do a shortcut in copy-on-write flow by excluding copy part from zeroes device.
Added spdk_blob_get_next_allocated_io_unit and spdk_blob_get_next_unallocated_io_unit functions
that start from a given offset and seek for first io_unit belonging to an allocated cluster
or first io_unit belonging to an unallocated cluster.
Added spdk_bs_grow function to grow blobstore size if the underlying bdev size is increased.
This is used by lvol bdev via bdev_lvol_grow_lvstore RPC.
daos
Added new DAOS bdev module, that creates SPDK block device on top of DAOS DFS.
Please see documentation for more details.
env
Added spdk_pci_register_device_provider and matching SPDK_PCI_REGISTER_DEVICE_PROVIDER
functions for registering PCI device providers. That allow the VMD driver to be notified
when users want to attach a device under a given BDF and when a device is detached.
init
spdk_subsystem_init_from_json_config now fails if the JSON configuration file is not
an object with an array named "subsystems".
iscsi
Added bdev_iscsi_set_options RPC to modify options of the iSCSI bdev module.
json
Added spdk_json_find API return errcode: EPROTOTYPE - json not enclosed in {}.
spdk_json_find now returns -EPROTOTYPE instead of -ENOENT if the object parameter
does not point to a JSON object (i.e. is not enclosed with {}).
lvol
Add num_md_pages_per_cluster_ratio parameter to the bdev_lvol_create_lvstore RPC.
Calculate num_md_pages from num_md_pages_per_cluster_ratio, and pass it to spdk_bs_opts.
nvme
Added SPDK_NVME_TRANSPORT_CUSTOM_FABRICS to enum spdk_nvme_transport_type to support custom
fabric transport. SPDK_NVME_TRANSPORT_CUSTOM was intended to be non-fabric custom transport.
Added a new function spdk_nvme_ns_cmd_verify to submit a Verify Command to a Namespace.
Added spdk_nvme_ctrlr_disable_read_changed_ns_list_log_page to allow an application to
tell the driver to not read the CHANGED_NS_LIST log page in response to a NS_ATTR_CHANGED
AEN. When called the application is required to read this log page instead to clear the
AEN.
Added psk field to spdk_nvme_ctrlr_opts struct in order to enable SSL socket implementation
of TCP connection and set the PSK. Applicable for TCP transport only.
raid
Renamed the raid5 module to raid5f to reflect that it is not a traditional
RAID5 implementation - only full stripe writes are supported, partial stripe
writes (read-modify-write) are not.
rpc
Added psk parameter to bdev_nvme_attach_controller RPC in order to enable SSL socket implementation
of TCP connection and set the PSK. Applicable for TCP transport only.
New options enable_ktls and tls_version were added to the sock_impl_set_options structure.
New options psk_key and psk_identity were added to the sock_impl_set_options structure.
Added warning message for bdev_rbd_create, if it is used without -c.
bdev_rbd_create() API without specifying -c is deprecated and will be removed in future release.
Renamed enable_vmd RPC to vmd_enable to make it consistent with our naming scheme of
<subsystem>_<action>. For now, the old name is still available, but is marked as deprecated.
New function spdk_rpc_get_method_state_mask was added to RPC library.
sma
Extended VolumeParameters with crypto parameters allowing the user to configure crypto when
attaching a volume to a device. This interface is now supported by all upstream device types
(nvmf-tcp, virtio-blk, vfio-user) using bdev_crypto. Users must specify the crypto engine to use
under crypto section in config. It is also possible to register out-of-tree crypto engines by
inheriting from the CryptoEngine class.
Added two new methods: SetQos and GetQosCapabilities allowing the user to configure QoS on a
per-device or per-volume level. Not all QoS settings have to be supported by each device, so users
can use GetQosCapabilities to query them for that. All upstream device types support QoS on a
per-volume level using bdev layer's QoS mechanism.
sock
Added new ssl based socket implementation, the code is located in module/sock/posix.
For now we are using hard-coded PSK and only support TLS 1.3.
util
Added new functions: spdk_hexlify and spdk_unhexlify.
A new API spdk_xor_gen was added to generate XOR from multiple source buffers. It is going to be
used by raid5f for calculating parity.
vfu_tgt
Added vfu_tgt library abstraction based on libvfio-user for PCI device emulation.
Besides the NVMe device emulation, its now possible to emulate virtio-blk and virtio-scsi
devices.
virtio
virtio-vhost-user no longer tries to support dynamic memory allocation. The vhost target does
not support the high rate of SET_MEM_TABLE vhost messages that result from dynamic memory
allocation, so a virtio-vhost-user device will now present an ERRLOG, assert, and skip the
SET_MEM_TABLE vhost message if a memory notification is received outside of the normal device
start/stop. Applications using the virtio library in vhost-user mode should now pre-allocate
the application's memory using the -s/--mem-size option and use single shared memory file
segments using the -g/--single-file-segments option.
Added vfio-user transport type for virtio-blk and virtio-scsi devices.
vmd
Fixed hotplug when a device is inserted in a slot in which a disk was already enumerated previously.
Added two new RPCs: vmd_remove_device simulating a hotremove, and vmd_rescan, which rescans all
buses managed by the VMD driver and hotplugs all newfound devices.