转载:SPDK简介

SPDK(Storage Performance Development Kit)是Intel发布的存储性能开发工具集。

简介

固态存储设备正在取代数据中心。目前这一代的闪存存储,比起传统的磁盘设备,在性能(performance)、功耗(power consumption)和机架密度(rack density)上具有显著的优势。这些优势将会继续增大,使闪存存储作为下一代设备进入市场。

用户使用现在的固态设备,比如Intel® SSD DC P3700 Series Non-Volatile Memory Express(NVMe)驱动,面临一个主要的挑战:因为吞吐量和延迟性能比传统的磁盘好太多,现在总的处理时间中,存储软件占用了更大的比例。换句话说,存储软件栈的性能和效率在整个存储系统中越来越重要。随着存储设备继续发展,它将面临远远超过正在使用的软件体系结构的风险(即存储设备受制于相关软件的不足而不能发挥全部性能),在接下来的几年中,存储设备将会继续发展到一个令人难以置信的地步。

为了帮助存储OEM(设备代工厂)和ISV(独立软件开发商)整合硬件,Inte构造了一系列驱动,以及一个完善的、端对端的参考存储体系结构,被命名为Storage Performance Development Kit(SPDK)。SPDK的目标是通过同时使用Intel的网络技术,处理技术和存储技术来提高突出显著的效率和性能。通过运行为硬件设计的软件,SPDK已经证明很容易达到每秒钟数百万次I/O读取,通过使用许多处理器核心和许多NVMe驱动去存储,而不需要额外卸载硬件。Intel在BSD license许可协议下通过Github分发提供其全部的Linux参考架构的源代码。博客、邮件列表和额外文档可以在spdk.io中找到。

软件体系结构概览

SPDK如何工作?达到这样的超高性能运用了两个关键技术:运行于用户态和轮询模式。让我们进一步了解这两个软件工程术语。

首先,我们的设备驱动代码运行在用户态意味着,在定义上驱动代码不会运行在内核中。避免内核上下文切换和中断将会节省大量的处理开销,允许更多的时钟周期被用来做实际的数据存储。无论存储算法(去冗,加密,压缩,空白块存储)多么复杂,浪费更少的时钟周期总是意味着更好的性能和延迟。这并不是说内核增加了不必要的开销;相反,内核增加了那些可能不适用于专用存储堆栈的通用计算用例的相关开销。SPDK的指导原则是通过消除每一处额外的软件开销来提供最少的延迟和最高的效率。

其次,轮询模式驱动(Polled Mode Drivers, PMDs)改变了I/O的基本模型。在传统的I/O模型中,应用程序提交读写请求后睡眠,一旦I/O完成,中断就会将其唤醒。PMDs的工作方式不同,应用程序提交读写请求后继续执行其他工作,以一定的时间间隔回头检查I/O是否已经完成。这种方式避免了中断带来的延迟和开销,并使得应用程序提高了I/O的效率。在旋转设备时代(磁带和机械硬盘),中断开销只占整个I/O时间的一个很小的百分比,因此给系统带来了巨大的效率提升。然而,在固态设备的时代,持续引入更低延迟的持久化设备,中断开销成为了整个I/O时间中不能被忽视的部分。这个问题在更低延迟的设备上只会越来越严重。系统已经能够每秒处理数百万个I/O,所以消除数百万个事务的这种开销,能够快速地复制到多个内核中。数据包和数据块被立即分发,等待时间减小到最少,使得延迟更低,一致性延迟更多(抖动更少),吞吐量也得到提高。

SPDK由数个子组件构成,相互连接并共享用户态操作和轮询模式操作的共有部分。当构造端对端SPDK体系结构时,每个组件被构造用于克服遭遇到的特定的性能瓶颈。然而,每个组件也可以被整合进非SPDK体系结构,允许用户利用SPDK中使用的经验和技术来加速自己的软件。

SPDK Architecture

我们从下往上构建:

硬件驱动

NVMe Driver:SPDK的基础组件,这个高优化无锁的驱动提供了高扩展性,高效性和高性能。

Inter QuickData Technology:也称为Intel I/O Acceleration Technology(Inter IOAT,英特尔I/O加速技术),这是一种基于Xeon处理器平台上的copy offload引擎。通过提供用户空间访问,减少了DMA数据移动的阈值,允许对小尺寸I/O或NTB的更好利用。

后端块设备

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)。这可以为数据库,容器,虚拟机或其他不依赖于大部分POSIX文件系统功能集(比如用户访问控制)的工作负载提供高性能基础。

存储协议

iSCSI target:建立了通过以太网的块流量规范,大约是内核LIO效率的两倍。现在的版本默认使用内核TCP/IP协议栈。

NVMe-oF target:实现了新NVMe-oF规范。虽然这取决于RDMA硬件,NVMe-oF的目标可以为每个CPU核提供高达40Gbps的流量。

vhost-scsi target:KVM/QEMU的功能利用了SPDK NVMe驱动,使得访客虚拟机访问存储设备时延迟更低,使得I/O密集型工作负载的整体CPU负载减低。

SPDK不适应所有的存储体系结构。这里有一些问题可能会帮助用户决定SPDK组件是否适合你们的体系结构。

这个存储系统是否基于Linux或FreeBSD?
SPDK主要在Linux上测试和支持。硬件驱动被FreeBSD和Linux支持。

存储系统的硬件平台是否要求是Intel体系结构?
SPDK被设计为充分利用Intel平台的特性,并针对Intel芯片和系统测试和调整。

这个存储系统的高性能路径是否运行在用户态?
SPDK通过更多地在用户态下运行从网卡到磁盘的高性能路径,提高性能和效率。通过将具有SPDK功能(比如NVMe-oF目标,NVMe-oF启动器,Blobstore)的应用程序结合起来,整个数据通路可能能够在用户空间运行,从而提供显著的高效率。

系统体系结构可以合并无锁的PMDs到它的线程模型吗?
因为PMD持续运行在它们的线程中(而不是睡眠或者不用时让出处理器),所以它们有特殊的线程模型需求。

系统现在是否用DPDK处理网络数据包的工作负载
SPDK和DPDK共享早期的编程模型,所以现在使用DPDK的用户可能会发现与SPDK紧密整合非常有用。同样地,如果正在使用SPDK的用户为网络处理添加DPDK功能可能是个重要的机遇。

开发团队自己是否具有理解和解决问题的专业技能?
Intel没有为相关软件提供支持的义务。当Intel和围绕SPDK的开源社区将付出商业上合理的努力去调出未修改的发布版本软件的潜在错误,任何情况下Intel都没有任务义务为用户提供针对该软件任何形式的维护和支持。

SPDK简介(其与Ceph rbd的关系)相关推荐

  1. 牛批,Ceph RBD 备份与恢复完全指南

    一.RBD 回收机制 ceph RBD 默认提供回收站机制trash,也就是我们可以把块数据放在回收站,在回收站中保持一定的存储周期,当我们后期还需要使用的时候可以在回收站在拿回来. 同样,在公有云也 ...

  2. k8s主从自动切换mysql_K8S与Ceph RBD集成-多主与主从数据库示例

    参考文章: 感谢以上作者提供的技术参考,这里我加以整理,分别实现了多主数据库集群和主从数据库结合Ceph RDB的实现方式.以下配置只为测试使用,不能做为生产配置. K8S中存储的分类 在K8S的持久 ...

  3. ceph rbd mysql_如何在 Kubernetes 环境中搭建 MySQL(三):使用 PVC 挂接 RBD

    MySQL in Kubernetes MySQL 中的数据是关键信息,是有状态的,不可能随着 MySQL pod 的销毁而被销毁,所以数据必须要外接到一个可靠的存储系统中,目前已经有了 Ceph 系 ...

  4. ceph(2)--Ceph RBD 接口和工具

    本系列文章会深入研究 Ceph 以及 Ceph 和 OpenStack 的集成: (1)安装和部署 (2)Ceph RBD 接口和工具 (3)Ceph 物理和逻辑结构 (4)Ceph 的基础数据结构 ...

  5. 理解 OpenStack + Ceph (3):Ceph RBD 接口和工具 [Ceph RBD API and Tools]

    本系列文章会深入研究 Ceph 以及 Ceph 和 OpenStack 的集成: (1)安装和部署 (2)Ceph RBD 接口和工具 (3)Ceph 物理和逻辑结构 (4)Ceph 的基础数据结构 ...

  6. Ceph rbd的寻址(rbd块文件的下载)

    1. Ceph rbd 与 rgw的寻址(rbd块/对象存储文件的下载) 1.1. 索引的存储 1.2. rbd 的寻址 1.3. 小笔记 1.4. rgw的寻址 1.5. 数据恢复思路 1.5.1. ...

  7. Ceph RBD:条带(stripe)详解

    文章目录 引言 条带的概念 基本概念 条带数据如何分布? 为什么要有条带? Ceph RBD如何使用条带? 条带观察实践 创建rbd image,stripe_unit为1M,stripe_count ...

  8. k8s(十二)、分布式存储Ceph RBD使用

    前言 上篇文章介绍了k8s使用pv/pvc 的方式使用cephfs, k8s(十一).分布式存储Cephfs使用 Ceph存储有三种存储接口,分别是: 对象存储 Ceph Object Gateway ...

  9. K8S使用Ceph RBD作为后端存储

    一.准备工作 Ceph版本:v13.2.5 mimic稳定版 1.Ceph上准备存储池 [root@ceph-node1 ceph]# ceph osd pool create k8s 128 128 ...

最新文章

  1. poj2724(二分图匹配)
  2. 【SAP技术】SAP MM 如何看一个自定义移动类型是复制哪个标准移动类型而创建的?
  3. vue input文本框中文字整体添加整体删除_揭秘神奇的PPT文本框,高手都喜欢这样的招数...
  4. TCP/IP详解--第十章
  5. ROS-Solidworks转URDF
  6. 20155230 2016-2017-2 《Java程序设计》第十周学习总结
  7. Dlib机器学习库安装
  8. 操作系统:体验Windows 11,不到1M的小工具来了!
  9. 为什么离开学校后,学习能力直线下降?
  10. Windows Store App 获取文件及文件夹列表
  11. HBuilder工作笔记001---HBuilder打包安卓和ios应用
  12. 微信终于良心一回,更新了语音识别功能可识别粤语,广东人有福了
  13. layui框架简单解读,为什么要使用layui框架,layui框架的好处,后端程序员快速学习掌握layui框架技术型文档博文,layui学习笔记,快速掌握前端技术框架
  14. SQL Server数据库可疑处理
  15. Excel翻译公式之谷歌翻译公式
  16. 【斯科德C200立式访客机】
  17. 晚上的笔记:p2p vod
  18. 小伙利用C++打造QQ登录器,成功获得称赞
  19. 《结构思考力》思维导图
  20. 【博学谷学习记录】超强总结,用心分享 | 【Java】自定义异常

热门文章

  1. 禁用一个右下角广告弹窗的程序 popwndexe.exe
  2. spark agg算子使用
  3. 线性代数物理意义学习(从几何角度出发,不同于数值解析解)
  4. 大数据的4v特征、数据预处理
  5. kubectl查看node状态_K8S常用命令
  6. template不支持v-show
  7. STM32CubeMX | 基于STM32使用HAL库硬件SPI驱动WK2124一拖四SPI转四路串口芯片
  8. 百分点“数据隧道”玩转大数据平台实时数据复制
  9. 关于前端的HTML+CSS基础知识汇总(较为全面)
  10. SpaceX完成世界首次海上回收火箭(图)