SPDK v20.01: Optimized thin provisioning, FTL bdev, VMD hot plug, FUSED support

On behalf of the SPDK community I’m pleased to announce the release of SPDK 20.01!

The 20.01 release will be SPDK’s first long term support release. This release will be supported for 1 year and will have bug fix releases quarterly. This release will guarantee API stability (but not ABI stability) for its lifetime.

This release contains the following new features:

  • Optimized thin provisioning: Metadata format in blobstore changed to allow for more optimized cluster allocation with thin provisioned blobs. This improves write performance and reduces the number of writes on each cluster allocation.
  • Flash Translation Layer bdev: FTL library is now based on zoned bdev API, instead of Open Channel interface. Added FTL virtual bdev, that can be created on top of any bdev supporting zoned bdev API.
  • VMD hot plug: Added support for hot plug and hot remove detection for devices behind the VMD.
  • Compare and write: Support for NVMe FUSED commands in NVMe-oF target and NVMe driver has been added. Along with compare and write operations on bdev layer this allows for atomic operations on supported hardware or via emulation.
  • NVMe-oF custom NVMe admin command: Added support for implementing handler for specific NVMe admin commands in NVMe-oF target. This can be used to implement or replace NVMe admin commands that are currently not handled by the NVMe-oF subsystem.
  • NVMe-oF pluggable transports: The NVMe-oF target now supports plugging out of tree NVMe-oF transports.
  • NVMe-oF/TCP and iSCSI performance improvements: The posix module in SPDK’s socket abstraction layer has received a number of major improvements, including an asynchronous writev that automatically batches writes to minimize syscalls and support for MSG_ZEROCOPY. Further improvements have been made specifically to NVMe-oF/TCP to batch receives. These improvements yield as much as 3x improvements in I/Ops per core on some workloads.
  • Crypto bdev: Significant performance improvement in encryption (writes) for both AESNI and QAT polled mode drivers. Additionally, QAT queue pair load balancing improves scaling with cores in all workloads.
  • DPDK: Added support for DPDK 19.11.

The full changelog for this release is available here.

New Contributors

This release contains 935 commits from 42 authors with over 52k lines of code changed.

We’d especially like to recognize all of our first time contributors:

  • Alok Kataria
  • Artur Paszkiewicz
  • Ivan Betsis
  • Łukasz Radomski
  • Suhua
  • Zhang Junfeng

Thanks to everyone for your contributions, participation, and effort!