On behalf of the SPDK community I'm pleased to announce the release of SPDK 21.01 LTS!
The SPDK 21.01 release is a long term support release that will be supported for 1 year.
This release contains the following new features:
- Dynamic scheduler: SPDK lightweight threads are now scheduled onto reactors in SPDK's event framework dynamically. The scheduler rebalances idle threads, adjusts CPU frequency, and turns idle reactors to interrupt mode. Please see https://www.spdk.io/doc/scheduler.html for details. This feature is considered experimental.
- vfio-user NVMe-oF transport: Added support for the new vfio-user NVMe-oF transport that emulates an NVMe device over shared memory to a virtual machine or separate process. This feature is considered experimental.
- vfio-user NVMe transport: Added support for the vfio-user NVMe transport to allow connecting to emulated NVMe devices directly from a process. This feature is considered experimental.
- NVMe ZNS Zone Append: Added support for the Zone Append command from the Zoned Namespace Command Set.
- pkg-config: SPDK now generates pkg-config files to simplify the process of determining which libraries must be linked into an SPDK application. See https://spdk.io/doc/pkgconfig.html.
- DPDK: Added support for DPDK 20.11.
Users updating from the previous 20.01 LTS release should note that legacy configuration (.ini) files have been removed in favor of JSON-RPC. Please see https://spdk.io/doc/jsonrpc.html#jsonrpc_convert for information on the new configuration mechanism.
The full changelog for this release is available at:
This release contains 587 commits from 45 authors with over 31k lines of code changed.
We'd especially like to recognize all of our first time contributors:
Madhu Adav MJ
Thanks to everyone for your contributions, participation, and effort!
The Open Channel support in the SPDK bdev nvme module includes a little-known and sparsely documented feature called parallel unit ranges. This feature enables splitting one Open Channel namespace into multiple zoned bdevs, using the bdev_ocssd_create RPC multiple times with non-overlapping parallel unit ranges. Specifics on this feature are currently not described in the rpc.py help nor jsonrpc.md documentation.
As part of adding multipath support to the SPDK bdev nvme module, the core maintainers have conferred and plan to remove this parallel unit range feature. This will eliminate the only case today where one namespace can map to multiple bdevs. This simplifies the bdev nvme module in general and significantly simplifies the ongoing implementation of multipath.
We believe this feature is currently unused. If you happen to be using this feature in some capacity, please respond here on the mailing list, or join the discussion on the SPDK #nvme Slack channel to discuss mitigations.
Just to clarify, SPDK is not removing the Open Channel support, only this ability to emulate multiple zoned bdevs from a single Open Channel namespace.