**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]]