spdk intel
前言
继为SDN和NFV领域带来福音的DPDK之后,英特尔于2015年9月开始,逐步将为NVMe等新一代存储规范优化的Linux性能工具包SPDK(Storage Performance Developmen Kit)对合作伙伴与社区开源,试图将Linux用户态存储服务程序与底层硬件设施打通,大幅度缩短IO路径,充分利用无锁机制,为NVMe等新一代的存储介质打通软件层瓶颈,使其能够在有限的系统资源消耗下支撑关键业务存储系统足够的带宽和延时要求。
spdk动机
市售的基于NVMe硬盘动辄可达到单盘GB级的读写带宽和十万量级的随机IOPS,为SATA固态硬盘的5~10倍。然而,由于Linux内核驱动实现与调度机制的限制,一般存储软件的表现,相对于NVMe来说,在整个IO事务中消耗的时间百分比就显得太多了。换言之,主流的软件定义存储系统并不能完全释放其性能,存储软件协议栈的性能和效率在存储整体系统中的地位就显得越来越关键了。
我们可以把NVMe看做一个硬件进步推动软件革新需求的例子,随着后续比它更快的存储介质投入市场,这种推动力将更为急迫。
spdk基本原理
SPDK(Storage Performance Development Kit),包含一套驱动程序,以及一整套端到端的存储参考架构。SPDK的目标是能够把硬件平台的计算、网络、存储的最新性能进展充分发挥出来。自芯片而上进行设计优化,SPDK已展示出超高的性能指标。
它的高性能实际上来自于两项核心技术:第一个是用户态运行,第二个是轮询模式驱动。
用户态运行:降低指令周期
将设备驱动代码运行在用户态,是和运行在“内核态”相对而言的。把设备驱动移出内核空间避免了内核上下文切换与中断处理,从而节省了大量的CPU负担,允许更多的指令周期用在实际处理数据存储的工作上。无论存储算法复杂还是简单,也无论进行去重(deduplication),加密(encryption),压缩(compression),还是简单的块读写,更少的指令周期浪费意味着更好的整体性能。
轮询模式驱动:
中断式IO处理模式:有IO需要处理时就请求一个中断,CPU收到中断后才进行资源调度来处理IO,采用的是被动的派发式工作。当硬盘速度上千倍的提高后,将随之产生大量IO中断,Linux内核的中断驱动式IO处理(Interrupt Driven IO Process)就显得效率不高了。
定点轮询(polling)模式:使用专门的计算资源(特定的CPU核)用来主导存储设备的轮询式处理——就像专门的出租车道和车流用来处理乘客任务,数据包和块得到迅速派发,等待时间最小化,从而达到低延时、更一致的延时(抖动变少)、更好的吞吐量的效果。
关于两种方式的比较和讨论,参考这里...,注意:spdk使用轮询模式的前提是高性能的磁盘设备,最终是终端驱动处理还是轮询驱动处理,取决于系统硬件的搭配方式,不同的条件会匹配不同的优化策略
基本组件:
SPDK中大概有三类子组件:网络前端、处理框架、后端。
图1 spdk基本架构
网络前端
网络前端子组件包括DPDK网卡驱动和用户态网络服务UNS(这是一个Linux内核TCP/IP协议栈的替代品,能够突破通用TCP/IP协议栈的种种性能限制瓶颈)。DPDK在网卡侧提供了一个高性能的发包收包处理框架,在数据从网卡到操作系统用户态之间提供了一条快速通道。UNS代码则接续这一部分处理,“crack”了TCP/IP数据包的标准处理方式,并形成iSCSI命令。
处理框架
“处理框架”部分拿到了数据包内容,将iSCSI命令转换为SCSI块级命令。然而,在它将这些命令发到“后端”驱动之前,SPDK提供了一套API框架,让厂商能够插入自己定义的处理逻辑(架构图中绿色的方框)。通过这种机制,存储厂商可在这里实现例如缓存、去重、压缩、加密、RAID计算,或擦除码(Erasure Coding)计算等功能,使这些功能包含在SPDK的处理流程中。在SPDK的开源软件包里,会有这些功能的实现样例。
后端
数据到达了“后端”驱动层,在这里SPDK和物理块设备交互(读和写操作)。如前所述,SPDK提供了用户态的PMD[2],支持NVMe设备、Linux AIO设备(传统spinning硬盘)、RAMDISK设备,以及利用到英特尔I/O加速技术的新设备(CBDMA=3D XPoint?)。这一系列后端设备驱动涵盖了不同性能的存储分层,保证SPDK几乎与每种存储应用形成关联。事实上,英特尔在2015年9月首先开源的SPDK部分就主要包含支持NVMe的用户态轮询模式驱动。
spdk在ceph中的使用
Ceph长期以来就其计算资源占用率和性能方面,虽不断提高,但在闪存环境下仍难觅突破性进展。顺应业界趋势,将SPDK的支持在Ceph中实现势在必行。
Ceph与SPDK结合架构图
引用参考:
1、spdk介绍:http://www.spdk.io/
2、dpdk原理:http://blog.csdn.net/jincm13/article/details/50972641
3、SPDK,软件定义存储的催化剂:http://www.techweb.com.cn/network/hardware/2016-01-26/2268226.shtml
4、Introduction to the SPDK by intel:https://software.intel.com/en-us/articles/introduction-to-the-storage-performance-development-kit-spdk
5、XSKY借助英特尔SPDK提升Ceph性能:http://news.watchstor.com/news-153050.htm
6、中断与轮询的比较:http://www.cnblogs.com/jhxk/articles/1893314.html
spdk intel的更多相关文章
- [SPDK/NVMe存储技术分析]005 - DPDK概述
注: 之所以要中英文对照翻译下面的文章,是因为SPDK严重依赖于DPDK的实现. Introduction to DPDK: Architecture and PrinciplesDPDK概论:体系结 ...
- [SPDK/NVMe存储技术分析]003 - NVMeDirect论文
说明: 之所以要翻译这篇论文,是因为参考此论文可以很好地理解SPDK/NVMe的设计思想. NVMeDirect: A User-space I/O Framework for Application ...
- [SPDK/NVMe存储技术分析]002 - SPDK官方介绍
Introduction to the Storage Performance Development Kit (SPDK) | SPDK概述 By Jonathan S. (Intel), Upda ...
- [SPDK/NVMe存储技术分析]001 - SPDK/NVMe概述
1. NVMe概述 NVMe是一个针对基于PCIe的固态硬盘的高性能的.可扩展的主机控制器接口. NVMe的显著特征是提供多个队列来处理I/O命令.单个NVMe设备支持多达64K个I/O 队列,每个I ...
- Intel Media SDK H264 encoder GOP setting
1 I帧,P帧,B帧,IDR帧,NAL单元 I frame:帧内编码帧,又称intra picture,I 帧通常是每个 GOP(MPEG 所使用的一种视频压缩技术)的第一个帧,经过适度地压缩,做为随 ...
- [Intel Edison开发板] 05、Edison开发基于MRAA实现IO控制,特别是UART通信
一.前言 下面是本系列文章的前几篇: [Intel Edison开发板] 01.Edison开发板性能简述 [Intel Edison开发板] 02.Edison开发板入门 [Intel Edison ...
- [Intel Edison开发板] 04、Edison开发基于nodejs和redis的服务器搭建
一.前言 intel-iot-examples-datastore 是Intel提供用于所有Edison开发板联网存储DEMO所需要的服务器工程.该工程是基于nodejs和redis写成的一个简单的工 ...
- [Intel Edison开发板] 03、Edison开发IDE入门及跑官方提供的DEMO
一.启动Eclipse爱迪生开发板IDE eclipse开发环境在iss-iot-win_03-14-16中,但是一定每次都是点bat脚本启动,否则就会少东西(windows->preferen ...
- [Intel Edison开发板] 02、Edison开发板入门
一.前言 Start from the link: 开始学习的链接 上面链接是官网的教程,按照教程可以开发板入门: 其中第一步是了解开发板,涉及到如何组装.如何连线.一些主要的接口简单介绍等信息: 第 ...
随机推荐
- 统一配置管理-百度disconf
之前一直采用properties文件管理配置信息,若是集群则每个机器上都要拷贝一份,每次修改也需要依次修改.一直在寻找统一修改,实时生效,方便修改,分环境分系统的配置管理,自己也在整理设计,若找不到合 ...
- UVA 11464 暴力+位运算 ***
题意:给你一个 n * n 的 01 矩阵,现在你的任务是将这个矩阵中尽量少的 0 转化为 1 ,使得每个数的上下左右四个相邻的数加起来是偶数.求最少的转化个数. 新风格代码 lrj书上说的很清楚了, ...
- 当年只会C# 所以写C++就成这样了!
这应该是4-5年前了. 当年之会c#敲敲代码也不会C++但深信开发这东西只要思想有了. 只是语法问题. 对于C++这貌似只有大牛才能胜任的,而对于我来说是如此困难. 所以想想办法搞了很多通用类来避免C ...
- post NSURLConnection请求网络数据
#import "ViewController.h" @interface ViewController () @end @implementation ViewControlle ...
- cve-2015-5122漏洞分析
HackTem爆出的第二枚0day,分析了下,做个记录. Poc中一开始会分配一个Array类型的_ar结构. 第一次赋值 此时在a[0 ] –a[1e-1] 处已被赋值为Vector.<uin ...
- 前台json 的一些 处理 (转)
JS解析json数据并将json字符串转化为数组的实现方法 转自(http://www.jb51.net/article/32795.htm) <!DOCTYPE HTML PUBLIC &qu ...
- hdu分类 Math Theory(还有三题!)
这个分类怎么觉得这么水呢.. 这个分类做到尾的模板集: //gcd int gcd(int a,int b){return b? gcd(b, a % b) : a;} //埃氏筛法 O(nlogn) ...
- 请问MVC4是不是类似于html页+ashx页之间用JSON通过AJAX交换数据这种方式、?
不是,可以讲mvc模式是借鉴于java下面的mvc开发模式,为开发者公开了更多的内容和控制,更易于分工合作,与单元测试,借用官方的说法:MVC (Model.View.Controller)将一个We ...
- ViewPager打造轮播图(Banner)\引导页(Guide)
今年7月时,在Github发布了一个开源的Banner库,虽然Star不多,但还是有少部分人使用. Banner效果: 昨天,有使用此库的同学提出需求,想在引导页的时候用这个库并且最后一页有进入按钮 ...
- 【改】iOS学习之NSAttributedString(富文本)
NSAttributedString 叫做富文本,是一种带有属性的字符串,通过它可以轻松的在一个字符串中表现出多种字体.字号.字体大小等各不相同的风格,还可以对段落进行格式化,一般都是对可变富文本(N ...