Storage Performance Development Kit driver

Storage Performance Development Kit (SPDK) is a user space, polled-mode, asynchronous, lockless NVMe driver. It provides zero-copy, highly parallel access directly to an SSD from a user space application. SPDK provides NVMe-oF target that is capable of serving disks over the network or to other processes.


SPDK NVMe-oF target installation

Follow instructions available on to install and configure environment with SPDK NVMe-oF target application. Starting from Ussuri release SPDK release v19.10 or higher is required.

Storage pools configuration

SPDK Cinder driver requires storage pools to be configured upfront in SPDK NVMe-oF target application. SPDK driver uses Logical Volume Stores (LVS) as storage pools. Details on configuring LVS are available on After storage pools are configured remote access has to be enabled. Launch scripts/ script from SPDK directory to start an http server that will manage requests from volume driver.

Supported operations

  • Create, delete, attach, and detach volumes.

  • Create, list, and delete volume snapshots.

  • Create a volume from a snapshot.

  • Copy an image to a volume.

  • Copy a volume to an image.

  • Clone a volume.

  • Extend a volume.

  • Get volume statistics.


Use the following options to configure for the SPDK NVMe-oF transport:

volume_driver = cinder.volume.drivers.spdk.SPDKDriver
target_protocol = nvmet_rdma          # SPDK driver supports only nvmet_rdma target protocol
target_helper = spdk-nvmeof           # SPDK volume driver requires SPDK NVMe-oF target driver
target_ip_address =       # NVMe-oF target IP address
target_port = 4260                    # NVMe-oF target port
target_prefix =  # NVMe-oF target nqn prefix
Description of SPDK configuration options

Configuration option = Default value


spdk_max_queue_depth = 64

(Integer(min=1, max=128)) Queue depth for rdma transport.

spdk_rpc_ip = None

(String) The NVMe target remote configuration IP address.

spdk_rpc_password = None

(String) The NVMe target remote configuration password.

spdk_rpc_port = 8000

(Port(min=0, max=65535)) The NVMe target remote configuration port.

spdk_rpc_protocol = http

(String(choices=[‘http’, ‘https’])) Protocol to be used with SPDK RPC proxy

spdk_rpc_username = None

(String) The NVMe target remote configuration username.