**SPDK** (Storage Performance Development Kit) is an Intel-originated open source set of tools and libraries for writing high-performance, scalable, user-mode storage applications. It enables NVMe-over-Fabrics (NVMe-oF), user-space NVMe drivers, and extreme-low-latency storage — the kind of performance needed at the base of a storage-intensive hyperscaler.
---
### First Principle: For maximum storage performance, eliminate the OS kernel from the data path.
Traditional storage I/O goes through the kernel: application → syscall → kernel VFS → block layer → driver → device. Each hop adds latency. SPDK moves the NVMe driver into userspace, uses polling instead of interrupts, and pins threads to CPU cores — achieving single-digit microsecond latencies that kernel-based I/O cannot match.
---
### Key Considerations
- **User-Space NVMe Driver**: SPDK's NVMe driver runs entirely in userspace via DPDK, bypassing the Linux kernel block I/O stack. This yields 1–2 µs storage latency vs ~10–50 µs for kernel-based NVMe.
- **NVMe-over-Fabrics (NVMe-oF)**: SPDK implements NVMe-oF Target — allowing remote hosts to access local NVMe devices over RDMA (RoCE, iSER) or TCP with near-local performance.
- **Block Device Abstraction (bdev)**: SPDK's bdev layer provides a common API across different storage backends — NVMe, malloc (RAM), AIO, virtio, and [[Ceph]] RBD.
- **Building Block, Not Turnkey**: SPDK is a library, not a complete storage product. [[Ceph]] BlueStore uses SPDK optionally. Storage vendors build their own products on top of SPDK.
- **Use Case**: Most relevant for the lowest layer of a high-performance storage stack — NVMe fabric targets and storage-intensive AI/HPC workloads.
---
### How It Fits
```
NVMe SSDs on [[Bare Metal]] storage nodes
→ SPDK (user-space driver + NVMe-oF target)
→ NVMe-oF fabric (RDMA/TCP)
→ [[Ceph]] or custom storage services
```
[[Ceph]] | [[Bare Metal]] | [[Open Source Hyperscaler MoC]]