【SPDK】什么是SPDK?为什么用SPDK

目录

什么是SPDK

为什么要引入SPDK?

架构

SPDK的组件构成

典型使用场景

SPDK例子

名词解释


作者:bandaoyu 地址:https://blog.csdn.net/bandaoyu/article/details/124740721

什么是SPDK

SPDK 存储性能开发套件(Storage Performance Development Kit ) —— 针对于支持nvme协议的SSD设备。 SPDK是一种高性能的解决方案。

硬件推动软件革新需求。

Intel发布的,提供了一整套工具和库,以实现高性能、扩展性强、全用户态的存储应用程序。它是继DPDK之后,intel在存储领域推出的又一项颠覆性技术,旨在大幅缩减存储IO栈的软件开销,从而提升存储性能,可以说它就是为了存储性能而生。

为什么要引入SPDK?

原因

因为nvme已经快到一定程度了,很多东西,尤其是软件已经赶不上他了,此时软件反而成为了系统IO的瓶颈。

一般来说读写数据的运作方式是这样的:OS kernel请求一组数据,硬盘回应“嗯,没问题”,但是NAND闪存挺慢的,所以需要一点时间。将数据载入到硬盘的缓存中,准备好了就会告诉OS kernel,给CPU发送一个中断信号,“嘿,数据已经准备好了,没问题了,可以来取那组数据了”。

但是如果这个中断信号在去到目标CPU核心的过程中,CPU核心正在忙着处理其他事情,或者暂时处于睡眠状态,或者被重新分配到其他任务上的话(这种情况在多核心CPU中是很常见的),那么这个中断信号永远到不了,那么CPU永远不会去取那组数据。

也就是说当CPU在执行大量的计算任务时或者很繁忙的时候,那么读写任务可能受到严重的影响。

也就是说,使用nvme磁盘的系统,在CPU高负载的情况下可能会出现问题。

对此业界给出了一个解决方案,对于超高速设备(比如这里的nvme磁盘,基于RAM的缓存盘)以一种叫做“轮询”的模式运作。这是一种完全不同的模式。说人话就是:系统内核假定设备非常快,快到“不用问准备好了没,问就是准备好了”。(设备速度很快,马上就可以把数据准备好)。
当然如果在比较慢的硬盘(比如机械硬盘)上这么搞会带来很大的性能损耗。因为系统会不停的问“嘿,准备好了吗?嘿,准备好了吗?”,这样一来,IO时延变高了,同时读写带宽也会受影响。但是对于nvme盘,特别是前面提到的超快速的存储设备,这么做是值得的。
而spdk的存在就是提供一种以轮询的方式来访问硬盘的方式,在高速设备上用于取代中断的访问方式。

https://www.cnblogs.com/powerrailgun/p/12389660.html?ivk_sa=1024320u

针对HDD的方案在面临SSD时的缺点


2、以前的linuxIO栈针对HDD做了诸多优化:page cache等;内核采用中断方式进行DMA(外部设备不通过CPU而直接与系统内存交换数据的接口技术)。

而现在ssd的出现,这样的优化会使ssd的硬盘存在空缺(OS kernel请求数据-->等待对方准备后的过程:去做别的事情/休眠 -->取数据。ssd很快,根本不需要OS kernel 做这个过程来等待),不能充分利用。


3、以前的方式会存在大量的内核上下文切换和中断,造成大量的延迟和开销。

现在spdk采用将设备驱动代码放在用户态,避免内核上下文切换。spdk采用轮询模式代替传统的IO模型。

​ 在传统的I/O模型中,应用程序提交读写请求后进入睡眠状态,一旦I/O完成,中断就会将其唤醒。

轮询的工作方式则不同,应用程序提交读写请求后继续执行其他工作,以一定的时间间隔回头检查I/O是否已经完成。(因为SSD很快,这样一来 “请求后进入睡眠再醒来过程太慢”)

传统的方式:中断开销只占整个I/O时间【io读取慢】的很小的百分比,因此给系统带来了巨大的效率提升。现在的方式:持续引入更低时延的持久化设备,中断开销成为了整个I/O时间中不可忽视的部分。所以我们必须区优化,使其达到平衡。
原文链接:https://blog.csdn.net/qq_41108558/article/details/118102087

针对SSD,SPDK的方案

(SPDK) 提供了一组工具和库,用于编写高性能、可扩展的用户模式存储应用程序。它通过使用一些关键技术实现高性能:

  • 将所有必要的驱动程序移动到用户空间,从而避免 syscalls,并允许从应用程序中访问零拷贝。
  • 对硬件进行完成轮询,而不是依赖中断,这降低了总延迟和延迟方差。
  • 避免 I/O 路径中的所有锁,而是依靠消息传递。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值