]>
Commit | Line | Data |
---|---|---|
11fdf7f2 TL |
1 | # What is SPDK? {#about} |
2 | ||
3 | The Storage Performance Development Kit (SPDK) provides a set of tools and | |
4 | libraries for writing high performance, scalable, user-mode storage | |
5 | applications. It achieves high performance through the use of a number of key | |
6 | techniques: | |
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 | ||
14 | The bedrock of SPDK is a user space, polled-mode, asynchronous, lockless | |
15 | [NVMe](http://www.nvmexpress.org) driver. This provides zero-copy, highly | |
16 | parallel access directly to an SSD from a user space application. The driver is | |
17 | written as a C library with a single public header. See @ref nvme for more | |
18 | details. | |
19 | ||
20 | SPDK further provides a full block stack as a user space library that performs | |
21 | many of the same operations as a block stack in an operating system. This | |
22 | includes unifying the interface between disparate storage devices, queueing to | |
23 | handle conditions such as out of memory or I/O hangs, and logical volume | |
24 | management. See @ref bdev for more information. | |
25 | ||
26 | Finally, 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) | |
30 | servers built on top of these components that are capable of serving disks over | |
31 | the network or to other processes. The standard Linux kernel initiators for | |
32 | NVMe-oF and iSCSI interoperate with these targets, as well as QEMU with vhost. | |
33 | These servers can be up to an order of magnitude more CPU efficient than other | |
34 | implementations. These targets can be used as examples of how to implement a | |
35 | high performance storage target, or used as the basis for production | |
36 | deployments. |