Skip to content

SPDK v21.10: DMA lib, Async NVMe driver, Container scripts

Choose a tag to compare

@tomzawadzki tomzawadzki released this 29 Oct 07:14
· 6 commits to v21.10.x since this release

bdev

New API spdk_bdev_get_memory_domains has been added, it allows to get SPDK memory domains used by bdev.

New API functions spdk_bdev_readv_blocks_ext and spdk_bdev_writev_blocks_ext have been added.
These functions accept spdk_bdev_ext_io_opts structure with extended IO request
options, e.g. DMA memory domain which describes data that may belong to another memory domain and
can't be accessed directly.

Added async_fini_start to allow bdev modules to complete the fini_start asynchronously,
with new spdk_bdev_module_fini_start_done API.

Deprecated spdk_bdev_module_finish_done() API, which will be removed in SPDK 22.01.
Bdev modules should use spdk_bdev_module_fini_done() instead.

The ocssd bdev has been removed. The Open Channel specification has been largely superseded by
zoned namespaces, few if any devices have been brought to market, and there is little reason to
continue to support this. OCSSD support in the nvme driver will remain for now.

dma

A new library, lib/dma, has been added. This library provides the necessary infrastructure for
handling systems and devices with multiple memory domains. For example, a PCIe add-in card with an
SoC may be running SPDK on the SoC. That SoC has its own local memory, but SPDK may be controlling
devices that can also access the host system memory. This library provides infrastructure to enumerate
the memory domains and request hardware perform DMA transfers between them.

dpdk

Updated DPDK submodule to DPDK 21.08.

event

Added the disable_signal_handlers flag to the spdk_app_opts struct.

idxd

Added spdk_idxd_get_socket to query the socket that the idxd device
is on.

json

Added API to allow for writing and decoding of new types:

  • spdk_json_write_named_uint16
  • spdk_json_write_named_uint8
  • spdk_json_write_uint16
  • spdk_json_write_uint8
  • spdk_json_number_to_uint8
  • spdk_json_decode_uint8

log

Added API spdk_log_to_syslog_level to return syslog level based on SPDK's
log level.

nvme

Added new functions spdk_nvme_zns_set_zone_desc_ext and spdk_nvme_zns_ext_report_zones
to set zone descriptor extension and to get extended zone report respectively.

New API spdk_nvme_ctrlr_get_memory_domains has been added, it allows to get SPDK memory domains used by nvme controller.

New API functions spdk_nvme_ns_cmd_readv_ext and spdk_nvme_ns_cmd_writev_ext
have been added. These functions accept spdk_nvme_ns_cmd_ext_io_opts structure with extended IO request
options, e.g. DMA memory domain which describes data that may belong to another memory domain and
can't be accessed directly.

Added a new function spdk_nvme_ctrlr_get_regs_bpinfo to get boot partition info of a controller.
Added new functions spdk_nvme_ctrlr_write_boot_partition,
spdk_nvme_ctrlr_read_boot_partition_start and spdk_nvme_ctrlr_read_boot_partition_poll
to write and read the boot partitions of a controller.

Added spdk_nvme_ctrlr_get_opts to retrieve the current controller options.

Added async_mode to spdk_nvme_io_qpair_opts to enable creation of submission and completion
queues asynchronously. This mode is currently supported at PCIe layer,
which tracks the qpair creation with state machine and returns to the user immediately.
Default mode is set to false to create io qpairs synchronously.

Added spdk_nvme_ctrlr_get_regs_cc to retrieve NVMe controller CC (Configuration) register.

Added spdk_nvme_ctrlr_prepare_for_reset to inform the driver that the application is preparing
to reset the specified NVMe controller. This function allows the driver to make decisions
knowing that a reset is about to happen.

nvmf

Added oncs to struct spdk_nvmf_ctrlr_data so that the transport layer
can decide support RESERVATION feature or not.

An opts_size element was added in the spdk_nvmf_ns_opts structure to solve the
ABI compatibility issue between different SPDK version. An new option anagrpid was
added in the spdk_nvmf_ns_opts structure.

An new parameter anagrpid was added to the RPC nvmf_subsystem_add_ns.

An new parameter anagrpid was added to the RPC nvmf_subsystem_listener_set_ana_state.

spdk_nvmf_subsystem_destroy is now can be asynchronous, it accepts a callback and callback argument.

A new parameter, poll_groups_mask was added to the nvmf_set_config RPC that allows specifying
a subset of cores for the nvmf poll groups. This helps to avoid imbalances when some cores are
busy with periodic timer tasks that run very frequently.

A new parameter, commit was added to nvmf_bdev_ctrlr_end_zcopy that allows indicating whether
the buffers should be committed.

Added listen_dump_opts to spdk_nvmf_transport_ops so that the transport layer can display
listen opts.

Added fabrics_connect_timeout_us to bdev_nvme_attach_controller RPC to allow specifying
timeout for connect operation.

Added multipath to bdev_nvme_attach_controller RPC to allow specifying multipath behavior.

Structure spdk_nvmf_target_opts has been extended with new member discovery_filter which allows to specify
filtering rules applied during discovery log generation. Refer to enum spdk_nvmf_tgt_discovery_filter for more info.

scheduler

New API for implementing schedulers and governors. Please see include/spdk/scheduler.h for details.

scsi

New functions, spdk_scsi_dev_get_first_lun and spdk_scsi_dev_get_next_lun
have been added to iterate LUNs of a SCSI device.

Each SCSI device supports 256 LUNs at the maximum now and the macro constant
SPDK_SCSI_DEV_MAX_LUN was removed.

trace_parser

A new library, lib/trace_parser, has been added. This library provides functions that parse traces
recorded by an SPDK application. That includes merging traces from multiple cores,
sorting them by their timestamp and constructing trace entries spanning across multiple buffers.

util

The spdk_fd_group_add API now takes a name parameter.