SPDK (Storage Performance Development Kit)
C libraries and ready-made targets for building storage software that drives NVMe SSDs from user space, polling for completions instead of waiting on kernel interrupts.
Linux Foundation project- What it is
- Block storage
- Type
- Open source
- Made by
- SPDK project (Linux Foundation), started at Intel
- Foundation
- The Linux Foundation, joined April 2025. A series of LF Projects, LLC, since Intel handed it over in 2025
- License
- BSD-3-Clause
- Facts checked
- 28 October 2026
What it is
SPDK moves the storage stack out of the kernel. Its foundation is a user-space NVMe driver: the SSD is unbound from the kernel’s nvme driver (the scripts/setup.sh script does this and reserves hugepages), the application maps the device’s queues into its own memory, and one thread per core submits commands and polls for completions without system calls, interrupts, locks or copies. Threads pass messages instead of sharing data. On top sit a block device layer (bdev) that gives NVMe drives, Ceph RBD images, AIO files, RAID, logical volumes and RAM disks one asynchronous interface, Blobstore, a power-fail-safe block allocator for databases and storage services that don’t need a POSIX file system, and an acceleration framework that hands copies, CRC32C and other operations to engines such as Intel DSA, or to software.
Most users run one of its targets rather than write their own application. nvmf_tgt serves bdevs over NVMe over Fabrics (TCP or RDMA), vhost serves them to QEMU virtual machines as virtio-blk or virtio-scsi disks over vhost-user, iscsi_tgt speaks iSCSI, and the ublk target exposes them back to the local kernel as block devices. All are configured over a JSON-RPC socket with scripts/rpc.py. Ceph’s NVMe-oF gateway and Longhorn’s V2 data engine are built on SPDK. Intel started it in 2013 and open-sourced it in 2015; in 2019 the community’s NVMe driver passed 10 million IOPS on a single CPU core, and in 2023 a two-socket Xeon server reached 120 million IOPS. In December 2024 Intel announced it was divesting from SPDK, and the project moved to the Linux Foundation in 2025 under a Technical Steering Committee whose participating organisations include Arm, Dell, HPE, Nutanix, NVIDIA, Samsung, Solidigm, StarWind and Tencent. Releases are named by year and month, three a year: 26.09 came out on September 25, 2026.
Why teams pick it
- Very high IOPS per core: no interrupts, system calls, locks or copies on the I/O path, so one core can drive millions of operations per second
- Ready-made NVMe-oF, vhost, iSCSI and ublk targets, so you get a fast storage server or VM disk backend without writing C
- Building blocks for your own storage engine: the bdev layer, logical volumes, RAID, Blobstore and hardware acceleration modules
- Permissive BSD-3-Clause licence and vendor-neutral governance since the move to the Linux Foundation
Watch out for
- Polling keeps its cores busy even when idle; interrupt modes for NVMe over PCIe (25.05) and other modules are newer and narrower
- Takes devices away from the kernel: once an SSD is bound to SPDK, kernel file systems and ordinary tools can’t use it unless SPDK exports it back, for example as a ublk device
- Needs hugepages, root to set up, and real tuning (CPU masks, queue depths, NUMA placement); it is a development kit, not a finished storage product
- Its main sponsor left: Intel divested in December 2024, and per-patch CI and merges were paused until the Linux Foundation project set up new CI in 2025
Alternatives
What all block storage have in common →Compare side by side →How it fits with other technologies
What SPDK (Storage Performance Development Kit) uses
Export a RAM disk over NVMe/TCP with nvmf_tgt, from the SPDK docs (run from the SPDK directory as root) · bash
scripts/setup.sh # reserve hugepages, unbind NVMe devices from the kernel
build/bin/nvmf_tgt &
scripts/rpc.py nvmf_create_transport -t TCP -m 8 -c 8192
scripts/rpc.py bdev_malloc_create -b Malloc0 512 512 # 512 MiB, 512-byte blocks
scripts/rpc.py nvmf_create_subsystem nqn.2016-06.io.spdk:cnode1 -a -s SPDK00000000000001 -d SPDK_Controller1
scripts/rpc.py nvmf_subsystem_add_ns nqn.2016-06.io.spdk:cnode1 Malloc0
scripts/rpc.py nvmf_subsystem_add_listener nqn.2016-06.io.spdk:cnode1 -t tcp -a 192.168.100.8 -s 4420
# on a Linux host: nvme connect -t tcp -n "nqn.2016-06.io.spdk:cnode1" -a 192.168.100.8 -s 4420Ways to serve SPDK storage#
| Target | Who connects | Typical use |
|---|---|---|
| NVMe-oF (`nvmf_tgt`) | Remote hosts with the kernel’s nvme-tcp or nvme-rdma drivers | Disaggregated flash, storage gateways such as Ceph’s |
| vhost (`vhost`) | QEMU VMs on the same host, through vhost-user-blk-pci or vhost-user-scsi-pci | Fast VM disks without the guest’s I/O going through the host kernel |
| iSCSI (`iscsi_tgt`) | Any iSCSI initiator | Older SANs and hosts without NVMe-oF |
| ublk | The local Linux kernel, as a /dev/ublkb* block device, over io_uring | Using SPDK volumes with ordinary file systems and tools |
See it in a real stack
No architecture uses SPDK (Storage Performance Development Kit) yet. Drop it into the playground and wire it up yourself.Open playground →Where it came from2013–2026
NVMe SSDs made storage fast enough that the kernel became the bottleneck: an interrupt, a context switch and a trip through the block layer for every I/O cost more than the drive’s own latency on media such as Intel’s Optane. Intel started SPDK in 2013 to rebuild the storage stack for that hardware, borrowing the approach of its packet-processing kit DPDK, on which SPDK’s environment layer still builds: drivers in user space, polling instead of interrupts. It opened the project to the community in 2015 under a BSD licence.
The project measured itself in IOPS per core. A redesigned NVMe driver passed 10 million IOPS on one core in 2019, a system scaled to 80 million IOPS in 2021, and a 2U server with two Sapphire Rapids Xeons and Optane SSDs reached 120 million 512-byte random reads per second in 2023. Over the same years SPDK grew targets for NVMe-oF, vhost and iSCSI, and storage vendors such as Nutanix built products on it.
On December 5, 2024 Intel announced that it was divesting from SPDK and that the project would move to the Linux Foundation in 2025. Eleven days later it switched off its CI, which ran most per-patch and nightly testing, and merges to the main branch stopped. The new LF project set up open-source CI infrastructure, formed a Technical Steering Committee, and shipped v25.05 on May 29, 2025, the first release after the transition.
Why it’s built this way
- Drivers in user space
- Mapping the device’s queues into the application avoids a system call and a copy for every I/O, and lets the application, not the kernel, decide how requests are queued.
- Poll instead of waiting for interrupts
- At millions of I/Os per second, an interrupt and context switch per completion cost more than the device’s latency. Checking completion queues in a loop lowers both latency and its variance, at the price of a busy core.
- No locks on the I/O path; pass messages between threads
- Each thread owns its queues and data, and work for another thread is sent to it as a message, so throughput scales with cores instead of stalling on shared locks.
Timeline
- 2013
Intel starts SPDK
- 2015
Opened to the community under a BSD licence
- 2019
New NVMe driver passes 10 million IOPS on one CPU core
- 2023
120 million IOPS from one 2U Xeon server
- 2024
Intel announces it will divest and hand SPDK to the Linux Foundation (December 5)
- 2025
v25.05, the first release under the Linux Foundation (May 29)
- 2026
v26.09 released (September 25)
- SPDK: 120 million I/O per second with a standard 2U Intel Xeon system (February 2023; started 2013, community 2015, 10M IOPS per core in 2019, 80M in 2021)
- SPDK: Intel’s SPDK transition to the Linux Foundation (December 5, 2024)
- SPDK: Updates on SPDK Linux Foundation transition (December 16, 2024)
- SPDK: v25.05 release (first release after the Linux Foundation transition)
- DPDK Summit 2018: Accelerate storage service via SPDK (started 2013, open-sourced 2015, BSD)
- SPDK news (Nutanix .Next 2019: BlockStore and SPDK)
- Intel: Introduction to the Storage Performance Development Kit
Sources16 · facts checked 28 October 2026
- SPDK docs: What is SPDK (user-space drivers, polling, lockless message passing, bdev, targets)
- GitHub: spdk/spdk README (components, hugepages and device binding, polled mode, Linux and FreeBSD)
- GitHub: spdk/spdk LICENSE (BSD-3-Clause)
- GitHub: spdk/spdk GOVERNANCE.md (core maintainers, TSC, participating organisations)
- SPDK docs: NVMe over Fabrics target (RPC example, TCP and RDMA)
- SPDK docs: vhost target (vhost-user-blk and vhost-user-scsi with QEMU)
- SPDK docs: ublk target
- SPDK docs: Blobstore programmer’s guide
- SPDK docs: Block device user guide
- SPDK docs: Acceleration framework (IOAT, DSA, software module, CRC32C)
- GitHub: spdk/spdk releases (v26.01, v26.05, v26.09 on September 25, 2026)
- SPDK: v25.05 release (Linux Foundation transition, TSC, NVMe PCIe interrupt mode, LTS)
- SPDK: Intel’s SPDK transition to the Linux Foundation (December 5, 2024)
- SPDK: Updates on SPDK Linux Foundation transition (CI turned off, merges paused)
- GitHub: ceph/ceph-nvmeof (Ceph NVMe-oF gateway, SPDK submodule)
- GitHub: longhorn/longhorn (V2 data engine built on SPDK)
