]> git.proxmox.com Git - ceph.git/blame - ceph/src/spdk/doc/about.md
update sources to ceph Nautilus 14.2.1
[ceph.git] / ceph / src / spdk / doc / about.md
CommitLineData
11fdf7f2
TL
1# What is SPDK? {#about}
2
3The Storage Performance Development Kit (SPDK) provides a set of tools and
4libraries for writing high performance, scalable, user-mode storage
5applications. It achieves high performance through the use of a number of key
6techniques:
7
8* Moving all of the necessary drivers into userspace, which avoids syscalls
9 and enables zero-copy access from the application.
10* Polling hardware for completions instead of relying on interrupts, which
11 lowers both total latency and latency variance.
12* Avoiding all locks in the I/O path, instead relying on message passing.
13
14The bedrock of SPDK is a user space, polled-mode, asynchronous, lockless
15[NVMe](http://www.nvmexpress.org) driver. This provides zero-copy, highly
16parallel access directly to an SSD from a user space application. The driver is
17written as a C library with a single public header. See @ref nvme for more
18details.
19
20SPDK further provides a full block stack as a user space library that performs
21many of the same operations as a block stack in an operating system. This
22includes unifying the interface between disparate storage devices, queueing to
23handle conditions such as out of memory or I/O hangs, and logical volume
24management. See @ref bdev for more information.
25
26Finally, SPDK provides
27[NVMe-oF](http://www.nvmexpress.org/nvm-express-over-fabrics-specification-released),
28[iSCSI](https://en.wikipedia.org/wiki/ISCSI), and
29[vhost](http://blog.vmsplice.net/2011/09/qemu-internals-vhost-architecture.html)
30servers built on top of these components that are capable of serving disks over
31the network or to other processes. The standard Linux kernel initiators for
32NVMe-oF and iSCSI interoperate with these targets, as well as QEMU with vhost.
33These servers can be up to an order of magnitude more CPU efficient than other
34implementations. These targets can be used as examples of how to implement a
35high performance storage target, or used as the basis for production
36deployments.