Skip to content

v18.01: Blobstore Thin Provisioning

Choose a tag to compare
released this 31 Jan 22:40
· 15907 commits to master since this release

Build System

The build system now includes a make install rule, including support for the common DESTDIR and prefix variables as used in other build systems. Additionally, the prefix may be set via the configure --prefix option. Example: make install prefix=/usr.


A JSON RPC listener is now enabled by default using a UNIX domain socket at /var/run/spdk.sock. A -r option command line option has been added to enable an alternative UNIX domain socket location, or a TCP port in the format ip_addr:tcp_port (i.e. The Rpc configuration file section is now deprecated and will be removed in the v18.04 release.

I/O Channels

spdk_poller_register() and spdk_poller_unregister() were moved from the event framework (include/spdk/event.h) to the I/O channel library (include/spdk/io_channel.h). This allows code that doesn't depend on the event framework to request registration and unregistration of pollers.

spdk_for_each_channel() now allows asynchronous operations during iteration. Instead of immediately continuing the interation upon returning from the iteration callback, the user must call spdk_for_each_channel_continue() to resume iteration.

Block Device Abstraction Layer (bdev)

The poller abstraction was removed from the bdev layer. There is now a general purpose abstraction for pollers available in include/spdk/io_channel.h


A set of changes were made in the SPDK lib code altering instances of calls to exit() and abort() to return a failure instead wherever reasonably possible. This has resulted in return type changes of
the API for:

  • spdk_env_init() from type void to int.
  • spdk_mem_map_init() from type void to int.

Applications making use of these APIs should be modified to check for a non-zero return value instead of relying on them to fail without return.

NVMe Driver

SPDK now supports hotplug for vfio-attached devices. Only physical removal events are supported; removing devices via the sysfs remove file will not work.

NVMe-oF Target

Subsystems are no longer tied explicitly to CPU cores. Instead, connections are handed out to the available cores round-robin. The "Core" option in the configuration file has been removed.


A number of functions have been renamed:

  • spdk_bs_md_resize_blob() => spdk_blob_resize()
  • spdk_bs_md_sync_blob() => spdk_blob_sync_md()
  • spdk_bs_md_close_blob() => spdk_blob_close()
  • spdk_bs_md_get_xattr_names() => spdk_blob_get_xattr_names()
  • spdk_bs_md_get_xattr_value() => spdk_blob_get_xattr_value()
  • spdk_blob_md_set_xattr() => spdk_blob_set_xattr()
  • spdk_blob_md_remove_xattr() => spdk_blob_remove_xattr()
  • spdk_bs_md_create_blob() => spdk_bs_create_blob()
  • spdk_bs_md_open_blob() => spdk_bs_open_blob()
  • spdk_bs_md_delete_blob() => spdk_bs_delete_blob()
  • spdk_bs_md_iter_first() => spdk_bs_iter_first()
  • spdk_bs_md_iter_next() => spdk_bs_iter_next()

The function signature of spdk_blob_close() has changed. It now takes a struct spdk_blob * argument
rather than struct spdk_blob **.

The function signature of spdk_bs_iter_next() has changed. It now takes a struct spdk_blob * argument
rather than struct spdk_blob **.

Thin provisioning support has been added to the blobstore. It can be enabled by setting the
thin_provision flag in struct spdk_blob_opts when calling spdk_bs_create_blob_ext().

NBD device

The NBD application (test/lib/bdev/nbd) has been removed; the same functionality can now be
achieved by using the test/app/bdev_svc application and start_nbd_disk RPC method. See the GPT documentation for more details.

FIO plugin

SPDK fio_plugin now suports FIO 3.3. The support for previous FIO 2.21 has been dropped, although it still remains to work for now. The new FIO contains huge amount of bugfixes and it's recommended to do an update.

Virtio library

Previously a part of the bdev_virtio module, now a separate library. Virtio is now available via spdk_internal/virtio.h file. This is an internal interface to be used when implementing new virtio backends, namely virtio-blk.


The MinConnectionIdleInterval parameter has been removed, and connections are no longer migrated to an epoll/kqueue descriptor on the master core when idle.