v18.01: Blobstore Thin Provisioning
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
.
RPC
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. 127.0.0.1:5260). 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
Lib
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
toint
. - spdk_mem_map_init() from type
void
toint
.
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.
Blobstore
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.
iSCSI
The MinConnectionIdleInterval parameter has been removed, and connections are no longer migrated to an epoll/kqueue descriptor on the master core when idle.