SPDK 17.07 Release: Build system improvements, userspace vhost-blk target, and GPT bdev

The SPDK team is proud to announce the v17.07 release. This release incorporates a number of ease-of-use improvements and API cleanups.

Build System

A configure script has been added to simplify the build configuration process. The existing CONFIG file and make CONFIG_... options are also still supported. Run ./configure --help for information about available configuration options.

A DPDK submodule has been added to make building SPDK easier. If no --with-dpdk option is specified to configure, the SPDK build system will automatically build a known-good configuration of DPDK with the minimal options enabled. See the Building section of README.md for more information.

A Vagrant setup has been added to make it easier to develop and use SPDK on systems without suitable NVMe hardware. See the Vagrant section of README.md for more information.

Userspace vhost-blk target

The vhost library and example app have been updated to support the vhost-blk protocol in addition to the existing vhost-scsi protocol. See the vhost documentation for more details.

Block device abstraction layer (bdev)

A GPT virtual block device has been added, which automatically exposes GPT partitions with a special SPDK-specific partition type as bdevs. See the GPT bdev documentation for more information.

In support of the GPT bdev, a new virtual bdev “examine” interface has been added to the bdev module API. This allows bdev modules to check if a newly-added bdev contains a specific on-disk format, such as a GPT partition table, and gives them the ability to export virtual bdevs as desired.

NVMe driver

The NVMe driver has been updated to support recent Intel SSDs, including the Intel® Optane™ SSD DC P4800X series.

A workaround has been added for devices that fail to recognize register writes during controller reset.

The NVMe driver now allocates request tracking objects on a per-queue basis. The number of requests allowed on an I/O queue may be set during spdk_nvme_probe() by modifying io_queue_requests in the opts structure.

The SPDK NVMe fio_plugin has been updated to support multiple threads (numjobs).

spdk_nvme_ctrlr_alloc_io_qpair() has been modified to allow the user to override controller-level options for each individual I/O queue pair. Existing callers with qprio == 0 can be updated to:

... = spdk_nvme_ctrlr_alloc_io_qpair(ctrlr, NULL, 0);

Callers that need to specify a non-default qprio should be updated to:

struct spdk_nvme_io_qpair_opts opts;
spdk_nvme_ctrlr_get_default_io_qpair_opts(ctrlr, &opts, sizeof(opts));
opts.qprio = SPDK_NVME_QPRIO_...;
... = spdk_nvme_ctrlr_alloc_io_qpair(ctrlr, &opts, sizeof(opts));

Environment Abstraction Layer

The environment abstraction layer has been updated to include several new functions in order to wrap additional DPDK functionality. See include/spdk/env.h for the current set of functions.