什么是SPDK?
SPDK是一套存储开发套件,专门为专用设备(NVME)设计。全称是The Storage Performance Development Kit。SPDK提供了一系列的高性能、可扩展、用户态下面的工具和库。它有如下三个优势
存储设备的驱动代码运行在用户态,不会运行在内核态,避免了内核的上下文切换节省了大量的处理开销,节省下来的CPU时间片可以用于实际的数据处理,比如重复数据剔除、压缩、加密。SPDK的原则是通过消除每一处额外的软件开销来提供最少的延迟和最高的效率。
轮询模式驱动(Polled Mode Drivers, PMDs),改变了I/O的基本模型。在传统的I/O模型中,应用程序提交读写请求后睡眠,一旦I/O完成,中断就会将其唤醒。PMDs的工作方式不同,应用程序提交读写请求后继续执行其他工作,以一定的时间间隔回头检查I/O是否已经完成。这种方式避免了中断带来的延迟和开销,并使得应用程序提高了I/O的效率。在旋转设备时代(磁带和机械硬盘),中断开销只占整个I/O时间的一个很小的百分比,因此给系统带来了巨大的效率提升。然而,在固态设备的时代,持续引入更低延迟的持久化设备,中断开销成为了整个I/O时间中不能被忽视的部分。这个问题在更低延迟的设备上只会越来越严重。系统已经能够每秒处理数百万个I/O,所以消除数百万个事务的这种开销,能够快速地复制到多个内核中。数据包和数据块被立即分发,等待时间减小到最少,使得延迟更低,一致性延迟更多(抖动更少),吞吐量也得到提高。
SPDK核心组件
NVMe驱动
SPDK的基础组件,这个提供优化无锁的驱动提供高扩展、高效、高性能。
Intel I/O Acceleration Technology 是一种基于Xeon处理器的copu offload的引擎,通过提供用户控件访问,减少DMA的数据移动的阈值,允许对小尺寸IO的更好利用
后端块设备
NVMe over Fabrics(NVMe-oF)initiator,从技术角度是从本地SPDK NVMe驱动和NVMe-Of启动器共享一套共同的API命令,这样实现本地/远程复制就非常容易实现
Ceph RADOS Block Device(RBD):使Ceph成为SPDK的后端设备,比如这可能允许Ceph用作另一个存储层。
Blobstore Block Device, 这是SPDK Blobstore的分配的块设备,是虚拟机或者数据可以交互的虚拟设备,这些设备得到SPDK的基础架构的优势,可是显示零拷贝和非常高的扩展性
Linux Asynchrounous I/O(AIO),允许SPDK和内核设备(比如机器硬盘)交互
存储服务
Block device abstration layer(bdev),这种通用的块设备抽象是连接各种不同设备驱动和块设备的存储协议粘合剂,在块层中提供灵活的API用于额外的用户功能,比如压缩和去重
Blobstore:为SPDK实现高精的文件式语义,为数据库、容器、虚拟机或者不依赖POSIX文件系统功能集的工作负载提供高性能基础
存储协议
iSCSI target,建立通过以太网的块流量规范,大约是内核LIO效率的两倍,现在模式是使用TCP/IP协议栈
NVMe-Of target:实现新的NVMe-oF规范,这个取决于RDMA的硬件,NVMe-Of的目标是为每个CPU核心提供高达40bps的流量
vhost-scsi target:KVM/QEMU的功能利用了SPDK NVMe驱动,使得访客虚拟机访问存储设备时延迟更低,使得I/O密集型工作负载的整体CPU负载减低。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有