SPDK v26.09: NVMe-oF KV support, NVMe RDMA interrupt mode, reduced NVMe namespace memory usage
On behalf of the SPDK community, I’m proud to announce the release of SPDK v26.09!
This release brings several major features and improvements:
- NVMe-oF Key-Value namespace support: The NVMe-oF target can now expose Key-Value namespaces backed by KV-capable bdevs. The new
kvmallocbdev provides an in-memory KV backend, making it possible to develop and test NVMe KV applications without KV-capable SSDs. - NVMe RDMA initiator interrupt mode: The NVMe RDMA transport now supports interrupt-driven queue pairs. Applications can wait for I/O completion events instead of continuously polling, reducing CPU usage when I/O activity is low.
- Reduced NVMe namespace memory usage: The NVMe library’s base per-namespace allocation is approximately 50% smaller by default. Applications that do not need vendor-specific Identify data can save another 3.6 KiB per namespace. The
bdev_nvmemodule uses this smaller allocation automatically. Deployments at scale will experience drastically lower memory overhead. - NVMe-oF Extended Discovery Log Page support: The NVMe-oF target and initiator now support the NVMe 2.1 Extended Discovery Log Page. Administrators can assign descriptive labels to subsystems and retrieve them with
spdk_nvme_discover --extended, making discovered storage easier to identify. - NVMe-oF Error Information Log Page support: The NVMe-oF target can now report Error Information Log Page entries for instrumented command failures with known command-field error locations.
- Namespace refresh after reconnect: Capacity changes and namespaces added while a controller is disconnected are applied when it reconnects. Existing bdevs are retained during reconnect.
- NVMe Identify and AER fixes: Identify failures preserve cached namespace geometry for in-flight I/O, and ambiguous namespace descriptor or command-set-specific Identify errors no longer mark namespaces inactive. Namespace lookups used from I/O threads are protected against concurrent namespace updates. In multi-process applications, only the process completing the AER reads the Changed Namespace List.
- RISC-V build support: SPDK now supports RISC-V cross-compilation, including ISA-L support.
You can view the full changelog here. Deprecation notices for users upgrading from previous releases are available here.
New Contributors
This release includes 340 commits from 49 authors, with over 46k lines of code changed.
We’d especially like to recognize our first-time contributors:
- Pauline Bouvier
- Huilin Cen
- Sunghwan Kim
- Mohamed Feroz Abdul Majeeth
- Yehor Malikov
- Akhil Mishra
- Ayush Rathi
- Ruiery
- Sun Yuechi
Many thanks to everyone for your contributions, participation, and effort!