What is SPDK
The Storage Performance Development Kit (SPDK) provides a set of tools and libraries for writing high performance, scalable, user-mode storage applications. It achieves high performance through the use of a number of key techniques:
- Moving all of the necessary drivers into userspace, which avoids syscalls and enables zero-copy access from the application.
- Polling hardware for completions instead of relying on interrupts, which lowers both total latency and latency variance.
- Avoiding all locks in the I/O path, instead relying on message passing.
The bedrock of SPDK is a user space, polled-mode, asynchronous, lockless NVMe driver. This provides zero-copy, highly parallel access directly to an SSD from a user space application. The driver is written as a C library with a single public header. See NVMe Driver for more details.
SPDK further provides a full block stack as a user space library that performs many of the same operations as a block stack in an operating system. This includes unifying the interface between disparate storage devices, queueing to handle conditions such as out of memory or I/O hangs, and logical volume management. See Block Device User Guide for more information.
Finally, SPDK provides NVMe-oF, iSCSI, and vhost servers built on top of these components that are capable of serving disks over the network or to other processes. The standard Linux kernel initiators for NVMe-oF and iSCSI interoperate with these targets, as well as QEMU with vhost. These servers can be up to an order of magnitude more CPU efficient than other implementations. These targets can be used as examples of how to implement a high performance storage target, or used as the basis for production deployments.
中文翻译
Storage Performance Development Kit(SPDK)提供了一组工具和库,用于编写高性能、可扩展的用户态存储应用程序。它通过使用一些关键技术实现高性能:
- 将所有必要的驱动程序移至用户空间,避免系统调用,实现应用程序对数据的零拷贝访问。
- 使用轮询硬件完成而不是依赖中断,降低总延迟和延迟变化。
- 在I/O路径中避免使用锁,而是依赖消息传递。
SPDK的基础是一个用户空间、轮询模式、异步、无锁的NVMe驱动程序。它可以使用户态应用程序直接从固态硬盘(SSD)进行零拷贝、高并发访问。该驱动程序以C库的形式编写,并有一个公共头文件。有关更多详细信息,请参阅NVMe驱动程序。
此外,SPDK还提供了一个完整的块栈作为用户态库,执行与操作系统中的块栈类似的操作。这包括统一不同存储设备之间的接口、队列处理(处理内存不足或I/O挂起等情况)和逻辑卷管理。有关更多信息,请参阅块设备用户指南。
最后,SPDK还提供了基于这些组件构建的NVMe-oF、iSCSI和vhost服务器,可通过网络或向其他进程提供磁盘服务。标准的Linux内核NVMe-oF和iSCSI initiator与这些目标进行互操作,以及使用vhost的QEMU。与其他实现相比,这些服务器的CPU效率可提高一个数量级。这些目标可以用作实现高性能存储目标的示例,或用作生产部署的基础。
- SPDK:存储性能开发工具包(Storage Performance Development Kit)。
- tools:工具,指用于完成特定任务或操作的软件或硬件工具。
- libraries:库,指一组可重用的代码和功能,用于帮助开发人员实现特定的任务或解决特定的问题。
- high performance:高性能,指在速度、吞吐量或响应时间等方面表现出优异的性能。
- scalable:可扩展的,指能够适应不断增长的需求和负载的能力。
- user-mode:用户态,指在用户空间执行的应用程序。
- storage applications:存储应用程序,指用于处理和管理存储数据的软件应用程序。
- Moving:移动,指将某些组件或驱动程序放入用户空间。
- necessary:必要的,指在特定环境中不可或缺的。
- drivers:驱动程序,指用于控制和管理硬件设备的软件组件。
- userspace:用户空间,指操作系统中的一部分,用于执行用户应用程序而不涉及内核功能。
- syscalls:系统调用,应用程序通过操作系统提供的接口访问操作系统功能的方法。
- zero-copy:零拷贝,指在数据传输过程中避免不必要的数据拷贝,提高性能。
- access:访问,指获取或使用某个资源或服务的能力。
- application:应用程序,指为特定目的而开发的软件程序。
- Polling:轮询,通过主动查询的方式获取硬件操作的完成状态,而不依赖中断。
- hardware:硬件,指计算机系统中的物理设备和电子元件。
- completions:完成,指某个操作或任务的结束或完成。
- relying:依赖,指依靠或依赖于某个因素或组件。
- lowers:降低,指减少或降低某个指标或属性的程度。
- total:总的,指涉及所有相关方面的。
- latency:延迟,指从发起请求到获得响应之间的时间间隔。
- variance:差异,指在一系列测量值中的差异程度。
- Avoiding:避免,指不使用或规避某个特定的方法或操作。
- locks:锁,用于同步多个线程对共享资源的访问。
- I/O path:输入/输出路径,指数据在应用程序和存储设备之间传输的路径。
- relying:依赖,指依靠或依赖于某个因素或组件。
- message passing:消息传递,指进程或线程之间通过发送和接收消息进行通信的机制。
- bedrock:基础,指某个系统或框架的核心或基础。
- user space:用户空间,指操作系统中的一部分,用于执行用户应用程序而不涉及内核功能。
- polled-mode:轮询模式,指通过主动查询的方式进行操作和处理的模式。
- asynchronous:异步的,指操作或任务在启动后可以独立于主程序进行执行。
- lockless:无锁的,指在并发环境下无需使用锁进行同步的特性。
- NVMe:非易失性内存快速存储(Non-Volatile Memory Express),一种高性能存储接口协议。
- driver:驱动程序,指用于控制和管理硬件设备的软件组件。
- C library:C 库,指用 C 语言编写的可重用的函数和数据结构的集合。
- public header:公共头文件,指对外公开的用于访问库的函数和结构的头文件。
- block stack:块堆栈,指在操作系统中处理块设备的软件层次结构。
- operating system:操作系统,指管理计算机硬件和软件资源的系统软件。
- unifying:统一,指将多个不同的元素或接口整合为一个统一的整体。
- interface:接口,指两个系统、设备或组件之间进行通信和交互的边界或方法。
- disparate:不同的,指不同类型或性质的事物。
- queueing:排队,指将任务或数据按照一定的顺序进行排列的操作。
- conditions:条件,指影响或触发某个操作或行为的因素。
- out of memory:内存不足,指系统无法分配足够的内存资源以满足需求。
- hangs:挂起,指某个操作或任务因为某种原因而停滞或无法继续。
- logical volume management:逻辑卷管理,用于管理逻辑卷(如磁盘分区、RAID等)的软件技术。
- NVMe-oF:NVMe over Fabrics,一种通过网络传输 NVMe 命令和数据的技术。
- iSCSI:Internet Small Computer System Interface,一种用于在 IP 网络上传输 SCSI 命令和数据的协议。
- vhost:虚拟主机,指在虚拟化环境中提供虚拟设备服务的软件模块。
- servers:服务器,指提供特定服务的计算机硬件或软件。
- capable:能够,指具备某种能力或功能。
- serving:提供,指为客户或其他系统提供所需的服务或资源。
- disks:磁盘,指用于存储和读取数据的物理存储设备。
- network:网络,指连接多个计算机和设备的通信系统。
- processes:进程,指计算机系统中正在运行的程序实例。
- Linux kernel:Linux 内核,指 Linux 操作系统的核心组件。
- initiators:发起者,指在存储网络中发起请求的设备或应用程序。
- interoperate:互操作,指不同系统、设备或程序之间相互交互和协同工作。
- targets:目标,指在存储网络中接收请求并提供存储服务的设备或应用程序。
- QEMU:Quick Emulator,一种用于虚拟化的开源软件。
参考
https://zhuanlan.zhihu.com/p/663871727