SPDK,软件定义存储的催化剂

  • 时间:
  • 浏览:0

Q:SPDK包是基于Linux的吗?

A:SPDK仅仅在Linux平台上得到测试和支持。

来源:51CTO

SPDK中为宜有三类子组件:网络前端、防止框架、后端。

Q:SPDK的系统架构中的多线程 模型暗含无锁化的PMD吗?

A:SPDK的一帕累托图源代码是BSD许可的,类似于NVMe和CBDMA用户态驱动。其他帕累托图以Intel License许可开源(UNS和用户态iSCSI Target)。但原本的安排你说在将来会改变。无论如可,SPDK的所有源代码都将向社区免费提供。

用户在集成新一代的NVMe设备,如英特尔®P3700原本的“性能怪兽”时,会碰到很大的挑战。将会NVMe硬盘的吞吐量和时延表现太好了(2GB/s左右的读写时延,4十五万的每秒随机读和1十五万的每秒随机写,20μm级别的时延)——就IOPS而言,比传统SAS或SATA温氏磁盘快上千倍,也比原本的SATA SSD快5~10倍。一般存储软件的表现,相对于NVMe来说,在整个IO事务中消耗的时间百分比就显得不多了。换言之,存储软件协议栈的性能和时延在存储整体系统中的地位就显得那末 关键了。举个类似于的例子,亲们从北京乘飞机到美国三藩,按照现在的飞行时延,在天上时需13个小时。其他情况下,你安检的时间,过海关的时间,候机的时间,加起来3个小时,相对于总共的13+3=16个小时只是算长。设想现在飞机的飞行时延提高了30倍,从首都机场T3起飞后,非要10分钟的飞行时间,就可在加州落地,这时3个小时的地面手续就显得很那末 时延了。存储系统中软硬件的公司媒体合作 关系,以及网络、数据库等其他计算机领域就有类似于的情况或命题。亲们里能把NVMe看做一3个硬件进步推动软件革新需求的例子,随着后续比它加快时延的存储介质投入市场,其他推动力将更为急迫。

其次,传统的中断式IO防止模式,采用的是被动的挂接式工作,有IO时需防止时就请求一3个中断,CPU收到中断后才进行资源调度来防止IO。举一3个出租车的例子做拈连,传统磁盘设备的IO任务就像出租车乘客,CPU资源被调度用来防止IO中断就像出租车。当磁盘时延远慢于CPU时,CPU中断防止资源丰厚,中断机制是能对其他IO任务应对自如的。这就好比是非高峰时分,出租车供大于求,路上一个劲有空车在扫马路,乘客随时都能叫到车。然而,在高峰时分,比如周五傍晚在闹市区叫车(不用滴滴将会专车),常常是看了个油车溜溜的近前来,而后却发现后座将会有乘客了。时需等待的图片 多久,往往是不可预知的。相信你一定见过在路边滞留,招手拦车的人群。同样,当硬盘时延上千倍的提高后,将随之产生多量IO中断,Linux内核的中断驱动式IO防止(Interrupt Driven IO Process)就显得时延不高了。

作者:福叔

这只是为其他亲们在学习计算机课程时,老师会讲所谓“中断驱动IO防止”是比其他大帕累托图IO防止机制更好的调度措施。将会在那个年代,CPU的时延远大于磁盘等存储设备,CPU也那末 什么都有有有核或多线程 交给操作系统用来做更特殊的事情。无论如可,是终端驱动防止还是轮询驱动防止,取决于系统硬件的搭配措施,不同的条件会匹配不同的优化策略。

A:SPDK暗含了对DPDK的支持框架,后后 熟悉DPDK的开发人员能发现SPDK很容易集成。

网络前端子组件包括DPDK网卡驱动和里边提到的用户态网络服务(UNS)。DPDK在网卡侧提供了一3个高性能的发包收包防止框架,在数据从网卡到操作系统用户态之间提供了四根快速通道。UNS代码则接续其他帕累托图防止,“crack”了TCP/IP数据包的标准防止措施,并形成iSCSI命令。

固态硬盘正在太快扩展它在数据中心中的份额,相较于传统存储介质,新的闪存介质具有性能,耗电,机架空间等等方面的优势。随着更新的闪存介质投入市场(如3D NAND),其他优势还在不断扩大。

技术背景

最后,数据到达了“后端”驱动层,在这里SPDK和物理块设备交互(读和写操作)。如前所述,SPDK提供了用户态的PMD,支持NVMe设备、Linux AIO设备(传统spinning硬盘)、RAMDISK设备,以及利用到英特尔I/O加速技术的新设备(CBDMA=3D XPoint?)。其他系列后端设备驱动暗含了不同性能的存储分层,保证SPDK几乎与帕累托图存储应用形成关联。事实上,英特尔在2015年9月首先开源的SPDK帕累托图就主要暗含支持NVMe的用户态轮询模式驱动。

SPDK是如可工作的?它超高的性能实际上来自于两项核心技术:第一3个是用户态运行,第3个是轮询模式驱动。下面,让亲们分析一下个人所有 细节。

从其他环节开使英语 ,“防止框架”帕累托图拿到了数据包内容,将iSCSI命令转换为SCSI块级命令。然而,在它将其他命令发到“后端”驱动原本,SPDK提供了一套API框架,让厂商并能插入买车人定义的防止逻辑(架构图中绿色的方框)。通过其他机制,存储厂商可在这里实现类似于缓存、去重、压缩、加密、RAID计算,或擦除码(Erasure Coding)计算等功能,使其他功能暗含在SPDK的防止流程中。在SPDK的开源软件包里,会有其他功能的实现样例——其实不建议用户直接在为生产环境准备的产品代码里照搬。

软件架构概览

操作系统的世界里,除了中断式IO防止的措施(即里边提到的被动的挂接式工作),还有某种IO防止措施叫做定点轮询(polling)。还是用出租车的例子,试想在机场外出租车排队接客是为什么在么在工作的——有一3个将会多个专门的出租车道,排着一队队等待的图片 的图片 的出租车,当乘客从航站楼中一涌而出时,个油辆出租车并能用少于十来秒的时间高效的接走一位乘客,里边的车紧接着跟上防止下一位客人。

Q:SPDK的IO路径是运行在用户态吗?

PMD只是按照类似于的机制工作的,SPDK中其他所有的组件也是按照其他理念设计的。专门的计算资源(特定的CPU核)用来主导存储设备的轮询式防止——就像专门的出租车道和车流用来防止乘客任务,数据包和块得到太快挂接,等待的图片 时间最小化,从而达到低延时、更一致的延时(抖动变少)、更好的吞吐量的效果。

Q:SPDK中使用了与DPDK类似于的机制防止网络数据包流量吗?

首先,将设备驱动代码运行在用户态,是和运行在“内核态”相对而言的。把设备驱动移出内核空间防止了内核上下文切换与中断防止,从而节省了多量的CPU负担,允许更多的指令周期用在实际防止数据存储的工作上。无论存储算法冗杂还是简单,也无论进行去重(deduplication),加密(encryption),压缩(compression),还是简单的块读写,更少的指令周期浪费原因着更好的整体性能。

那末 ,轮询模式驱动是与非 在所有的情况下就有最高效的防止IO的措施呢?答案是“只是尽然”。设想一下,将会航站楼里那末 其他旅客出来,乘车的人稀稀拉拉的原本,亲们里能看了出租车候车区等待的图片 的图片 派工的车辆长龙,其他等待的图片 的车子完整篇 里能到市区去扫活儿,做些更有意义的事情。同样的道理,对于抢挡 时的SATA HDD,PMD的防止机制不但给IO性能带来的提升不明显,反而浪费了CPU资源。

Q:SPDK的源代码使用其他开源许可,是与非 禁止代码再挂接?

A:SPDK能将IO路径从网卡到硬盘排他化的运行在用户态,提高整体性能和时延。

为帮助存储OEM和软件定义存储开发商充分利用好新的硬件,英特尔开发了SPDK(Storage Performance Development Kit),暗含一套驱动多线程 ,以及一整套端到端的存储参考架构。SPDK的目标是并能把硬件平台的计算、网络、存储的最新性能进展充挂接挥出来。自芯片而上进行设计优化,SPDK已展示出超高的性能指标。在仅仅有好多个CPU核参与下,配上一定数量的NVMe硬盘,并没使用任何附加的offload硬件(如FPGA),使用SPDK的存储系统能轻松达到数百万IOPS。英特尔计划将基于Linux的整个SPDK参考架构源代码免费提供,其中,用户空间的NVMe驱动源代码帕累托图将会通过01.org[2]向社区开放,SPDK中的其他帕累托图组件也将在2016年逐步开源。

当然,SPDK暂且适用于所有的存储架构,这里是官方给出的其他Q&A,帮助存储开发人员太快找到这项技术的定位:

去年第四季度开使英语 ,XSKY团队[3]开使英语 研究英特尔向社区开源的SPDK。福叔在学习之中发现,就像软件定义网络(SDN)和网络功能虚拟化(NFV)中的性能利器DPDK,SPDK也极有将会给SDS领域带来革命性的影响。将会亲们们谁能谁能告诉我DPDK是干其他的,那末 关系,我将在原本抽时间给亲们分享下DPDK的学习心得,以及亲们把它用在存储领域的其他想法,今天先看看SPDK。(这篇文章的图和大帕累托图内容来自英特尔官方网站公开的技术资料[1][2],去掉 买车人的理解,原英文帕累托图内容的著作权归英特尔公司所有……)

SPDK中暗含了多个子组件,通过用户态防止机制和轮询驱动模式相互联系。每个子组件就有为了防止整个存储系统中的某一帕累托图瓶颈大问题而居于的。当然,用户里能确定只将其他子组件单独拆出来,用到非SPDK的框架中,去优化亲们买车人的存储防止堆栈。举例来说,SPDK暗含个组件叫用户态网络服务(UNS,UserSpace Network Services)库,这是一3个Linux内核TCP/IP协议栈的替代品,并能突破通用TCP/IP协议栈的种种性能限制瓶颈。通过使用用户态的,轮询措施的TCP/IP协议栈,SPDK并能在更少的CPU指令周期条件下防止TCP/IP数据包排序和计算,达到极高的IOPS性能。

A:事实上,PMD连续的在它所占用的物理多线程 上运行(在那末 IO时暂且休眠或放弃防止器资源),后后 PMD有买车人的多线程 模型,里能认为是无锁的。