您的位置:首页 > 其它

SPDK简介

2016-07-12 16:28 274 查看
Storage Performance Development Kit, 存储性能开发工具包,简称SPDK。

点击此处打开Intel原文链接

简介

固态存储媒介正在取代旧的数据中心。这一代闪存存储相对于传统磁盘介质在性能,功耗,盘架密度上都有着巨大优势,这些优势将使闪存存储成为存储市场下一代的霸主。

使用固态存储介质,如Intel的P3700 非易失内存高速驱动器(Non-Volatile Memory Express,NVMe)的用户,面临一个很大的挑战:由于吞吐量和延迟性能比传统磁盘介质高出太多,使得在整个事务处理时间中,软件部分占用时间的比例大大提升。换句话说,存储系统中软件栈的性能和效率变得更加重要。随着存储介质的进一步发展,现有的软件体系结构将不能发挥出其全部的性能,而且在接下来的几年中存储介质还会继续飞速发展。

为了帮助存储设备代工厂(OEM)和独立软件开发商(ISV)整合固态存储介质,Intel创造出一系列驱动和一个完备的,端到端参考的存储体系结构,即存储性能开发工具包,简称SPDK。SPDK的目标是通过使用Intel的网络,处理,存储技术,将固态存储介质出色的功效发挥到极致。

软件体系结构概览

SPDK如何工作?其超高的性能基于2点核心技术:运行于用户态轮询模式。让我们进一步深入这两个关键词。

首先,我们的设备驱动代码运行在用户态,而非内核态。免去内核上下文切换和中断将节省大量的处理器时间开销,从而有更多的时钟周期来做真正的存储工作。抛开存储算法(去冗,加密,压缩,空白块存储)的复杂度,更少的浪费掉的时钟周期将意味着更高的性能。

其次,轮询模式驱动(Polled Mode Drivers)即持续等待工作,而不是被派遣工作。举个例子,想象你在周六晚上繁忙的市中心打出租,对着一辆辆已经载客的计程车挥手。等待的时间将是不可预期的,很难说要在人行道上等多久才能打到车。这就像传统的中断-派遣存储I/O驱动中一个包或一个数据块等待一次传送。另一方面,想象在机场打出租的过程,出租车司机只需要在队首观望,等待几秒钟,就可以载上乘客,把他们送到目的地。这就是轮询的工作模式和SPDK的设计思想。包和数据块被立即分发,等待时间很小,使得延迟更低,连续延迟更多(抖动更小),吞吐量更大。

SPDK由数个子构件组成,它们相互连接,并且共享用户态和轮询模式操作的共有部分。在创造端对端的SPDK体系结构时,每个子构件都是为了解决一个特定的性能瓶颈。不过,这些子构件也可以整合进非SPDK的结构中,让用户可以使用SPDK技术来加速他们的软件。举例来说,用户态网络服务库(UNS library)用来克服Linux内核中TCP/IP协议栈带来的性能瓶颈。通过实现一个用户态,轮询模式的TCP/IP协议栈,SPDK能够在更少的处理器周期完成TCP/IP包的排序和处理,从而得到更高的IOPS性能。



子构件分为3类:网络前端处理框架后端

前端由数据平面开发工具包(Data Plane Development Kit)、网卡驱动(Network Interface Card Driver)、用户态网络服务(Userspace Networking Services)构件组成。DPDK给网卡提供一个高性能的包处理框架;网卡驱动提供一个从网卡到用户态空间的数据快速通道;然后用户态网络服务则破解TCP/IP包并生成iSCSI命令。

这时,处理框架得到包的内容,并将iSCSI命令翻译为SCSI块级命令。不过,在将这些命令送给后端驱动之前,SPDK提供一个API框架以加入用户指定的功能,即spcial sauce(上图绿框中)。例如缓存,去冗,数据压缩,加密,RAID和纠删码计算等,诸如这些功能都包含在SPDK中。不过这些功能仅仅是为了帮助我们模拟真实世界的应用场景,所以不要和产品级的实现混淆。

最终,数据到达后端驱动,在这一层中与物理块设备发生交互,即读与写。SPDK包括了几种存储介质的用户态轮询模式驱动:NVMe设备,Linux异步IO设备如传统磁盘,基于块地址的内存应用的内存驱动(如RAMDISKS),以及可以使用Intel I/O加速技术(I/O Acceleration Technology,代号Crystal Beach DMA,CBDMA)的设备。这套后端驱动涵盖了各种性能的存储设备,保证了几乎每种存储应用的可用性。

SPDK并不是适合所有的存储体系。接下来一些问答也许可以帮助用户决定SPDK是否适合他们的存储体系结构:

这个存储系统是基于Linux的吗?

SPDK现在仅仅在Linux上提供测试和支持。

这个存储系统的高性能通路运行在用户模式吗?

SPDK通过把从网卡到磁盘的高性能通路运行于用户模式以提升性能和效率。

这个系统体系结构能把无锁的轮询驱动包含进线程模型吗?

由于轮询驱动持续地运行在他们的线程中(而不是睡眠或不用时让出CPU),所以他们有着特殊的线程模型需求。

这个系统现在用DPDK来处理网络包的工作负载?

DPDK包含SPDK的框架,所以现在使用DPDK的用户很可能会发现与SPDK的紧密整合非常有用。

你们的许可模型可以使用不可再发行的源吗?

SPDK部分是开源,可以获得的,BSD许可协议的组件(比如NVMe和CBDMA的用户态驱动)。其他部分暂时是在Intel许可协议之下,但肯定会改变。所有SPDK的代码都可以免费获得。

开发团队可以得到专家意见来理解并解决问题吗?

Intel没有提供支持的义务。然而Intel和SPDK的开源社区将付出商业上合理的努力来调查未修改的发行版本潜在的问题。任何情况下Intel都没有义务给用户提供软件的支持。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息