SPDK 17.03 Release: VM Optimization & Blobstore

Today, the SPDK team is proud to announce the v17.03 release. This release features two significant new sets of components which will unlock a broader set of use cases for SPDK.

The first new set of components is a vhost-scsi library and vhost-scsi target application. These components give QEMU guest VMs direct access to an SPDK storage service running on the host system. SPDK vhost-scsi leverages software such as DPDK rte_vhost to extend existing accelerations for networking to a storage context. Note this requires a few unmerged QEMU patches that are available here. We hope these patches are merged to mainline QEMU shortly. A vhost-based storage stack can have the following effects on systems running QEMU/KVM:

  1. Applications in VMs will notice improved latency, especially for small-block I/O, by eliminating a substantial amount of software overhead from each I/O. The impact of this reduced latency is especially critical with next-generation NVMe media based on Intel Optane(tm).
  2. Systems using vhost-scsi will use substantially fewer CPU cycles to perform block I/O, allowing additional VMs to be deployed.

You can read the SPDK vhost Getting Started Guide for more details.

The second major set of components released in 17.03 are the SPDK Blobstore and BlobFS. The vast majority of applications require file semantics such as creating and opening files based on a filename. Adapting these applications to interface directly to a block-focused SPDK can be challenging. Fortunately, some applications such as databases tend to require a smaller subset of filesystem features than are available in mainstream filesystems such as ext4 and XFS. Blobstore and BlobFS have been designed specifically to enable accelerated performance for these types of applications. See Blobstore Design Overview and the BlobFS Getting Started Guide for additional information.

To demonstrate the value of Blobstore and BlobFS, SPDK was integrated with RocksDB. RocksDB is a popular persistent, transactional key-value store with a modular, pluggable back-end. Details for setting up RocksDB with SPDK can be found in the SPDK BlobFS Getting Started Guide.

While we are very excited about the arrival of these new SPDK components, we must take a moment to set expectations. This code is brand new and subject to change: APIs for the new components are still taking their final form as the broader community looks at them through the lens of specific applications and expertise. The best way to stay in sync going forward is to participate: on the mailing list, at SPDK Meetups, or directly with other contributors via GitHub. Together, we’ll build the framework for tomorrow’s storage!