SPDK v23.05: NVMe-oF/TCP TLS, Logical Volume External Snapshots

On behalf of the SPDK community I’m pleased to announce the release of SPDK v23.05!

This release contains the following new features:

  • NVMe-oF/TCP TLS: Added support for establishing a TCP fabric secure channel using TLS in compliance with NVM Express TCP Transport Specification. Both the NVMe-oF target and NVMe driver can be configured to use TLS. This feature is considered experimental.
  • Logical volume external snapshots: It is now possible to create clones of any bdev, not only of logical volume bdevs. Such clones are called esnap clones (external snapshot clones). A bdev that is used as an external snapshot cannot be opened for writing so long as an esnap clone exists.
  • ublk optimizations: Implemented various ublk improvements, most notably added support for UBLK_F_NEED_GET_DATA, which allows ublk target to allocate buffers on demand, rather than pre-allocate it during initialization.
  • Zero copy sock receive interface: Added APIs allowing users to provide buffers to a sock group which will then get filled with the next portions of the stream on each socket.
  • nvmf transport iobuf pool: The nvmf transports no longer allocate their own buffer pools and, instead, they will acquire the buffers from the iobuf pool. This means that the nvmf library shares the same memory pool with the bdev layer and other parts of the code base, reducing overall memory usage.
  • Accel operation chaining bdev support: bdev layer, bdev crypto, and bdev malloc are now using Acceleration Framework’s sequence interface. This makes it possible to chain accel operations scheduled by these components and execute them all at once.
  • Accel framework statistics: It is now possible to retrieve statistics on the operations executed by the Acceleration Framework.
  • bdev quiesce interface: Added APIs to quiesce a bdev. All I/Os submitted after a bdev is quiesced will be queued until the bdev is unquiesced.
  • fd_group nesting optimizations: Added new interfaces making it possible to nest one fd_group in another providing an efficient way of monitoring the file descriptors of both groups at the same time.

The full changelog for this release is available here. Deprecation notices for users updating from previous releases can be found here.

New Contributors

This release contains 822 commits from 60 authors with over 46k lines of code changed.

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

  • Antti Kervinen
  • Yuri Kirichok
  • Wojciech Panfil
  • plestk
  • Slawomir Ptak
  • Marcin Spiewak
  • Lukas Stockner
  • Tim Zhang

Many thanks to everyone for your contributions, participation, and effort!