Today we have released SPDK 16.12. This release contains the following major additions since our last release:

  • NVMe-oF initiator (including common NVMe API)
  • NVMe hotplug
  • Multi-process NVMe support
  • Ceph RBD blockdev module

The first major change is the release of a userspace NVMe over Fabrics host driver, otherwise known as an NVMe-oF initiator. This enables access of remote NVMe storage using the same SPDK programming model as direct-attached NVMe storage. As part of this host driver, we have modified the NVMe driver API so that it is common across direct-attached and NVMe-oF use cases. We have spent a lot of time on the NVMe driver API in this release and plan to mark the API as stable in our next release in early 2017. We will publish an update with more details on this in a future blog post after the holidays.

NVMe hotplug is another critical feature required for building robust and extensible storage applications. This release adds the ability to dynamically discover surprise hotplug events, including handling of threads attempting to submit and complete NVMe I/O in conjunction with a surprise removal on that same device. Hotplug use cases have also driven some of the NVMe driver API changes incorporated into this release.

One commonly requested feature has been the ability for multiple SPDK processes to access the same NVMe device. This release adds that capability, building on top of the DPDK multi-process support. This capability can be used to run management utilities to query NVMe devices, while those devices are being targeted by I/O from an SPDK iSCSI or NVMe-oF target application. It can also be used to drive I/O to an NVMe device from multiple applications, with each application allocating its own I/O queues for the device.

Finally, a Ceph RBD blockdev module has been added to SPDK. This enables an SPDK target application to accept NVMe-oF or iSCSI commands and output Ceph I/O commands on the backend. This extends the list of supported block devices (NVMe, AIO, NVMe-oF host) and enables further integration of SPDK with existing storage architectures.