SPDK详解

2023-11-13

一、SPDK简介及基本使用

随着硬盘、闪存技术的高速发展,NVME-ssd已逐渐进入分布式存储的核心领域。伴随着NVME-ssd的出现,涌现出一批新型的存储名词,包括分层存储、分级存储、冷热存储、混合存储等。而这些名词的出现,也意味着ssd在当前大环境下由于其昂贵的价格还无法大量应用。根据预测,ssd价格将在19年末出现大幅下降,藉此,ssd将成为存储领域重要的存储介质。
ssd存储介质正在取代传统数据中心的机械硬盘。ssd无论是从性能、功耗以及密度上都存在巨大的优势,而这些优势将使得ssd成为下一代存储的主要介质。

二.SPDK

众所周知在Linux起源之初,文件系统io栈针对机械盘进行了众多优化,包括page、cache等多种优化方式。内核采用中断的方式进行DMA将数据从内核态拷贝回用户态,再交由用户程序处理,这是机械硬盘时代的io处理方式。而随着nvme-ssd的出现,如果再采用此种方式就会导致大量的硬盘空闲,浪费硬盘性能。为了帮助上游的应用厂商以及存储厂商更好的发挥ssd磁盘的性能,intel开发了一套基于nvme-ssd的开发套件,SPDK。SPDK的目标是通过使用Intel的网络,处理,存储技术,将固态存储介质出色的功效发挥到极致。相对于传统IO方式,SPDK运用了两项关键技术:UIO和pooling。
首先,将设备驱动代码运行在用户态,避免内核上下文切换和中断将会节省大量的处理开销,允许更多的时钟周期被用来做实际的数据存储。无论存储算法(去冗,加密,压缩,空白块存储)多么复杂,浪费更少的时钟周期总是意味着更好的性能和时延。这并不是说内核增加了不必要的开销;相反,内核增加了一些与通用计算用例相关的开销,因而可能不适合专用的存储栈。上文也提及到SPDK实际上是为nvme-ssd开发的一套开发组件,并不适用于机械硬盘。
其次,采用轮询模式改变了传统I/O的基本模型。在传统的I/O模型中,应用程序提交读写请求后进入睡眠状态,一旦I/O完成,中断就会将其唤醒。轮询的工作方式则不同,应用程序提交读写请求后继续执行其他工作,以一定的时间间隔回头检查I/O是否已经完成。这种方式避免了中断带来的延迟和开销,并使得应用程序提高了I/O效率。在机械硬盘时代,中断开销只占整个I/O时间的很小的百分比,因此给系统带来了巨大的效率提升。然而,在固态设备时代,持续引入更低时延的持久化设备,中断开销成为了整个I/O时间中不可忽视的部分。这个问题在更低时延的设备上只会越来越严重。系统已经能够每秒处理数百万个I/O,所以消除数百万个事务的这种开销,能够快速地复制到多个core中。数据包和数据块被立即分发,因为等待花费的时间变小,使得时延更低,一致性时延更多(抖动更少),吞吐量也得到了提高。

三.架构

在这里插入图片描述

注意:图中各颜色有不通含义

整个spdk开发套件提供了一整套完整的开发库支持。包括:

驱动层:

NVMe driver:SPDK的基础组件,高度优化且无锁的驱动提供了前所未有的高扩展性,高效性和高性能
IOAT:基于Xeon处理器平台上的copy offload引擎。通过提供用户空间访问,减少了DMA数据移动的阈值,允许对小尺寸I/O或NTB(非透明桥)做更好地利用。

块设备层:

NVMe over Fabrics(NVMe-oF)initiator:本地SPDK NVMe驱动和NVMe-oF initiator共享一套公共的API。本地远程API调用及其简便。
RBD:将rbd设备作为spdk的后端存储。
Blobstore Block Device:基于SPDK技术设计的Blobstore块设备,应用于虚机或数据库场景。由于spdk的无锁机制,将享有更好的性能。
Linux AIO:spdk与内核设备(如机械硬盘)交互。

存储服务层:

bdev:通用的块设备抽象。连接到各种不同设备驱动和块设备的存储协议,类似于文件系统的VFS。在块层提供灵活的API用于额外的用户功能(磁盘阵列,压缩,去冗等)。
Blobstore:SPDK实现一个高精简的类文件的语义(非POSIX)。这可为数据库,容器,虚拟机或其他不依赖于大部分POSIX文件系统功能集(比如用户访问控制)的工作负载提供高性能支撑。

存储协议层

iSCSI target:现在大多使用原生iscsi
NVMe-oF target:实现了新的NVMe-oF规范。虽然这取决于RDMA硬件,NVMe-oF target可以为每个CPU核提供高达40Gbps的流量。
vhost-scsi target:KVM/QEMU的功能利用了SPDK NVMe驱动,使得访客虚拟机访问存储设备时延更低,使得I/O密集型工作负载的整体CPU负载有所下降。

从流程上来看,spdk有数个子构件组成,包括网络前端、处理框架和存储后端。
引用图片

前端由DPDK、网卡驱动、用户态网络服务构件组成。DPDK给网卡提供一个高性能的包处理框架;网卡驱动提供一个从网卡到用户态空间的数据快速通道;用户态网络服务则破解TCP/IP包并生成iSCSI命令。

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

数据到达后端驱动,在这一层中与物理块设备发生交互,即读与写。SPDK包括了几种存储介质的用户态轮询模式驱动:

NVMe设备;
inux异步IO设备如传统磁盘;
基于块地址的内存应用的内存驱动(如RAMDISKS)
可以使用Intel I/O加速技术设备。

四.编译使用

4.1spkd的安装

由于spdk的版本实时更新,并且spdk和系统的差异性,我建议您直接参考: https://github.com/spdk/

4.2测试

至此,spdk的基本安装已经完成,下面要做的就是插入nvme ssd设备并把盘进行4k对齐就可以进行开始测试。

4.21 确认待测盘的id
            # ll /sys/block/nvme*

在这里插入图片描述

4.22设置合适的参数进行测试

#./perf_overlap -q 1 -s 8192 -w write -r ‘trtype:PCIe traddr:0000:05:00.0’ -d 2048MB -t 36000 -L -l -c 0x2 >> testlog.txt

4.3实现原理 :

通过UIO这个的驱动接口,将驱动中共性的一部分放在内核态实现,eal层次通过解析sysfs的相关节点获取设备信息(bar,function等)传递给用户态的设备模型,之后eal层次用mmap建立内核和用户空间的数据传递通道和同步机制,实现了驱动的用户态功能实现。
Spdk提供了多种存储接口(scsi,nvme等)不同层次的操作接口,可以供用户直接调用完成设备识别,控制,数据传输等。

安装详细步骤参考:https://blog.csdn.net/weixin_40343504/article/details/107982225

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SPDK详解 的相关文章

  • 使用 SPDK 技术优化虚拟机本地存储的 IO 性能

    SPDK Storage performance development kit 是由 Intel 发起 xff0c 用于使用 NVMe SSD 作为后端存储的应用软件加速库 该软件库的核心是实现了用户态 异步 无锁 轮询方式的 NVMe
  • Cannot install ubuntu or other linux flavours on citrix Xen server

    Citrix Xen sucks When u try to install linux stuff on its Xen servers u will get an error complaining errors like below
  • 命令行mvn打包的时候报错:No compiler is provided in this environment. Perhaps you are running on a JRE

    一 前言 这部分是安装Elasticsearch ik中文分词的时候 用mvn打包报错 No compiler is provided in this environment Perhaps you are running on a JRE
  • 代码静态分析工具的误报原因分析

    1 引言 本篇文章分析了代码静态分析的基本原理以产生误报的根本原因 并介绍了形式化方法在LDRA工具套件中的应用情况 文章从实际工程应用的角度阐述了这些形式化方法的局限性 在参考文献1 Formal Methods Implemented
  • Edge插件导入到chrome浏览器

    在 Edge 浏览器输入 edge version 按回车键后 可以看到 用户配置路径 xxx 复制下来 粘贴到文件管理器 然后找到Extensions 文件夹 打开文件夹 此时会看到一大堆文件夹 这里对应的是你安装的插件多少 然后我们打开
  • 第三方依赖库 AG Grid调研分析

    AG Grid依赖 为实现页面表格的展示需求 进行的技术调研 官网地址 https www ag grid com GitHub地址 https github com ag grid ag grid 核心需求 1 大数据量的支持 AG Gr
  • 编程职业的乐趣

    编程职业的乐趣 美酒的酿造需要年头 美食的烹饪需要时间 片刻等待 更多美味 更多享受 Good cooking takes time If you are made to wait it s to serve you better and
  • 新型的编程语言:eC

    http www cnbeta com articles 61048 htm eC 是一位加拿大人jerome历时十二年开发的一门编译型编程语言 拥有C 项目的性能和Java的跨平台性以及Python的方便性 目前eC拥有自己的IDE 专用
  • Unicode(UTF-8, UTF-16)令人混淆的概念

    为啥需要Unicode 我们知道计算机其实挺笨的 它只认识0101这样的字符串 当然了我们看这样的01串时肯定会比较头晕的 所以很多时候为了描述简单都用十进制 十六进制 八进制表示 实际上都是等价的 没啥太多不一样 其他啥文字图片之类的其他
  • 一次注册表事故--无法打开exe文件

    下载了腾讯手游助手之后发现exe 的安装程序打不开 这就很郁闷了 下载了不同版本的都是打不开 难道是安装包有问题 为什么别人的电脑就能安装 我的电脑exe文件都能打开 为什么就腾讯手游助手不能打开呢 去网上搜集解决方法 百度经验上看到 说是
  • Homebrew 更换国内源

    eval opt homebrew bin brew shellenv export HOMEBREW BREW GIT REMOTE https mirrors ustc edu cn brew git export HOMEBREW C
  • 动态规则表达式解析

    import cn hutool core util StrUtil import com alibaba fastjson JSONArray import com alibaba fastjson JSONObject import j
  • Checkout conflict with files: src/main/resources/jeesite.properties Checkout

    这次使用git突然出现这样的错误Checkout conflict with files src main resources jeesite properties Checkout 最后才明白在你pull新的东西的时候应该先提交到本地仓库
  • 用 EasySysprep 4 封装XP图文教程

    根据文件内的教程一步一步的操作就可以了 基本上是傻瓜式的哦 下载地址 http pan baidu com s 1gdjhP0B
  • 祝您健康:抢救脑溢血患者的神奇秘方:针刺十宣穴,涌泉穴

    中风 脑出血 的抢救方法 中风 脑血管意外 是临床常见的急性病症 特别是对于中老人 更是致死致残的高发病 脑溢血抢救放血急救法是对中风最有效的一种急救方法 如能正确掌握和及时施救 将能很大程度地减少中风对人体的伤害 我想 对于每个血压有点高
  • 基于Jekyll创建免费的静态博客站点

    完整版请参考 https mazhaoxin github io 2018 08 04 Create Free Static Blog Base On Jekyll http 483v7j coding pages com 2018 08
  • 【Docker】ubuntu20.04 X86机器搭建NVIDIA ARM64 TX2的Docker镜像

    文章目录 1 设置ubuntu为清华源 1 1 备份源文件 1 2 替换清华源 1 3 更新清华源 2 Ubuntu Docker 安装 3 安装qemu 4 安装Nvidia TX2 Docker镜像 5 如何使用TX2容器 6 参考资料
  • cpu三大架构 numa smp mpp

    系统的性能很大程度上依赖于cpu 硬件架构的支持 从系统架构来看 目前的商用服务器大体可以分为三类 即 对称多处理器结构 SMP Symmetric Multi Processor 非一致存储访问结构 NUMA Non Uniform Me
  • Type Incompatible operand types String and int

    今天eclipse包了一个错误 意思就是Description Resource Path Location Type Incompatible operand types String an 但是昨天还没有错误为什么那 最后找了好久发现不
  • 如何在windows的DOS窗口中正常显示中文(UTF-8字符)

    打开CMD exe命令行窗口 通过 chcp命令改变代码页 UTF 8的代码页为65001 ANSI OEM 简体中文 GBK为936 window default OEM 美国为437 如果chcp命令得到437 那么一定不能显示中文 此

随机推荐

  • CUDA中动态Global Memory分配和操作

    CUDA中动态Global Memory分配和操作 CUDA中动态Global Memory分配和操作 1 Heap Memory Allocation 2 Interoperability with Host Memory API 3 E
  • vue中利用自定义指令修改elementUI对话框到顶部的距离

    Vue directive alterELDialogMarginTop 修改elementUI中el dialog顶部的距离 传入值eg marginTop 5vh inserted el binding vnode el firstEl
  • python基于机器学习的姓名预测性别网页app开发

    前言 做这个项目的起因是之前csdn给我推荐了一个问答 基于机器学习的姓名预测性别的手机app开发 我点进去发现已经有人回答了 链接点进去一看 好家伙 这不是查表算概率吗 和机器学习有半毛钱关系 而且我觉得用姓名预测性别挺扯淡的 去查了一下
  • ##顺序表 编码##

    ifndef LIST H define LIST H class List public List int size List 析构函数 void ClearList 清空线性表 bool ListEmpty 判断线性表是否为空 int
  • VXLAN 大二层网络构建实战

    1 VXLAN 大二层网络 1 VXLAN背景 传统vlan可划分1 4094个子网 如果租户数量超过4094 就需要使用vxlan了 vxlan支持1670万个隔离网络通信 可以满足众多不同租户设计自己的内部网络 租户申请的云服务器来自不
  • 简单实用的数据库文档生成器

    哈喽 大家好 我是指北君 大家有没有过这样的经历 在DeadLine即将来临之际 文档尚未完成 面对纷繁复杂的数据库中各种表 视图 关联 存储过程等 你都不知道如何清晰准确的描述他们 不得不一个个打开表 视图 存储过程等查看 甚至可能因为疏
  • springboot自定义kafka消费者KafkaListenerContainerFactory配置说明和实验

    1 说明 实验一下 在spring boot中自行创建kafkaConsumer实例 进行消费 根据配置的不同 得出相应的结果 此例中 我使用 kafkaListenerContainerFactory自行创建了kafkaListener实
  • WSL环境中Pycharm的python控制台中报错 ModuleNotFoundError: No module named ‘xxx‘(WSL+Pycharm环境搭建系列之四)

    WSL环境中Pycharm的python控制台中报错 ModuleNotFoundError No module named xxx 0 前言 1 问题现象 2 问题分析 3 解决办法 0 前言 经过前面几次的努力 我们基本上完成了环境中的
  • 《python数据分析与应用》第四章:pandas统计分析基础

    第四章 4 1 读写不同数据源的数据 4 1 1 读 写数据库数据 1 数据库数据读取 注意 数据库的用户名 一般都是root 和密码 自己设置的 都是要用自己的 地址默认的127 0 0 1 读取函数 你自己把文件存在哪了 和存储函数 你
  • 解密蓝牙mesh系列

    转载自 蓝牙技术联盟 蓝牙mesh网络基本概念 本周跟大家分享解密蓝牙mesh系列第四篇 点这里查看第一篇 第二篇和第三篇文章 同时也是蓝牙mesh网络基本概念的第二部分 借助蓝牙mesh 您将能够创建大型网络并支持成千上万的设备之间进行安
  • css的新玩法,语法与规则

    css的新玩法 语法与规则 important 语法 Selector sRule important 说明 提升指定样式规则的应用优先权 IE6及以下浏览器有个比较显式的支持问题存在 important并不覆盖掉在同一条样式的后面的规则
  • 将Javaweb项目部署到云服务器

    一 前言 由于业务需要 要搞一个文件上传下载服务器 代码当前已经在localhost上调试成功 现在需要把这个项目部署到云服务器上 选择的服务器是vultr的vps 系统是Ubuntu16 04 二 环境准备 1 jdk安装 常规安装即可
  • [Spring][Redis]@Cacheable与redis整合时Value和Key的理解

    更新于2019年11 08 首先 多谢CHENFU ZKK同学指出我的错误 卧槽 吓我一跳 我还以为我以前学的搞错了 若不是我亲自测试一遍 差点信你了 这两天趁有空 跟踪了 Cacheable相关的源码再次确认结果如下 1 直接使用Spri
  • 华为OD机试 - 星际篮球争霸赛(Java)

    题目描述 在星球争霸篮球赛对抗赛中 最大的宇宙战队希望每个人都能拿到MVP MVP的条件是单场最高分得分获得者 可以并列所以宇宙战队决定在比赛中尽可能让更多队员上场 并且让所有得分的选手得分都相同 然而比赛过程中的每1分钟的得分都只能由某一
  • 虚拟机联网图标丢失,连不上网的问题

    虚拟机连不上网 网络图标也消失不见了 输入ifconfig 发现也不显示ens33网卡 盲猜是由于关闭虚拟机的时候 一些配置出错 导致ens33网卡没有启动成功导致的 解决办法 重新开启网卡即可 1 关闭网络服务 sudo service
  • J2EE基础之集合框架List

    前言 今天跟大家发分享的是J2EE基础之集合框架List以及JavaWeb团队项目UML 昨天自己记录了J2EE一些基础知识 希望今天分享的知识对大家有用 首先跟大家讲一下今天要分享的知识 见思维导图 一 UML 1 含义 UML建模技术是
  • 异常日志分析

    从上往下看异常信息 直到第一行是自己写的代码为止 集成第三方工具 比如百度地图 先看demo 按着demo先跑来 然后再优化 跑demo出错了 先看异常日志 解决不了百度 百度地图集成注意类冲突 慢慢来
  • 无源定位入门(三)AOA(1)

    AOA交叉测向 基本原理 以M元均匀线阵为例 设单站匀速运动 第n个时刻的位置为 静止目标 则入射角方向为 设基站上有个M元均匀线阵 相邻阵元之间的间隔为d 其中为波长 第n个时刻线阵的方位角 与X正方向的夹角 为 与XY平面的夹角为 则线
  • 如何用sql语句创建一个表(简单基础)

    使用CREATE TABLE 语句 CREATE TABLE 语句用于创建数据库中的表 SQL CREATE TABLE 语法 CREATE TABLE 表名称 列名称1 数据类型 列名称2 数据类型 列名称3 数据类型 例题 创建一个ac
  • SPDK详解

    一 SPDK简介及基本使用 随着硬盘 闪存技术的高速发展 NVME ssd已逐渐进入分布式存储的核心领域 伴随着NVME ssd的出现 涌现出一批新型的存储名词 包括分层存储 分级存储 冷热存储 混合存储等 而这些名词的出现 也意味着ssd