【翻译】SPDK简介

原文:Introduction to the Storage Performance Development Kit (SPDK)

介绍

      SSD正逐步成为数据中心,同旋转介质(HHD)相比,当前的闪存在性能、功耗和机架密度上具有明显优势,随着下一代媒介进入市场,这些优势将持续扩大。
      集成当前固态介质的用户,例如Intel® SSD DC P3700 Series Non-Volatile Memory Express* (NVMe*) drive,面临的主要挑战是:由于吞吐量和延迟性能比旋转磁盘好得多,存储软件现在占用了更大比例的总处理时间,也就是说,存储软件堆栈的性能和效率对整个存储系统越来越重要。随着存储介质继续发展,它有超越使用它的软件架构的风险,未来几年,存储介质领域将继续以惊人的速度发展。
      为帮助存储OEMs(原始设备制造商)和ISVs(独立软件开发商)集成此硬件,英特尔创建了一组drivers和一个完整的end-to-end(端对端)参考存储架构,称为Storage Performance Development Kit(SPDK,存储性能开发套件)。SPDK的目标是通过同时使用Intel的网络、处理和存储技术来突出其卓越的效率和性能。通过运行从芯片开始设计的软件,SPDK证明了无需额外的删除硬件而仅通过使用一些处理器内核和一些NVMe drivers即可轻松实现每秒数百万个I / O。Intel在宽泛的BSD许可下提供了完整的Linux*参考架构源代码,并通过GitHub*分发给社区。可以在spdk.io上找到博客、邮件列表和其他文档。

软件架构概述

      SPDK如何工作?通过结合两种关键技术来实现极高的性能:运行在 user level和使用Poll Mode Drivers(PMDs,轮询模式驱动程序)。让我们看看这两个软件工程术语。
      首先,根据定义,在用户级别运行设备驱动程序代码意味着驱动程序不在内核中运行。避免内核上下文切换和中断可以节省大量的处理开销,从而可以将更多的时间花费在真实的数据存储。无论存储算法的复杂性如何(删除重复数据,加密,压缩或普通block存储),更少的无用周期都意味着更好的性能和延迟。这并不是说内核会增加不必要的开销,相反,内核增加了与通用计算用例相关的开销,而这些用例可能不适用于专用存储堆栈。SPDK的指导原则是通过消除每个额外的软件开销来源来提供最低的延迟和最高的效率。
      其次,PMDs更改了I / O的基本模型。在传统的I / O模型中,应用程序先提交读取或写入请求,然后休眠,在I / O完成后等待中断将其唤醒。而PMDs的工作方式有所不同,应用程序先提交读取或写入请求,然后去做其他工作,每隔一段时间检查一次I / O是否已完成,这避免了使用中断的等待时间和开销,并允许应用程序提高I / O效率。在旋转媒介(磁带和HDD)的时代,中断的开销仅占总I / O时间的一小部分,因此极大地提高了系统的效率。但是,随着固态媒体时代的到来,持续引入低延迟的持久性介质,中断开销已成为整个I / O时间的重要部分。更低延迟的介质只会使这一挑战更加明显。系统已经能够每秒处理数百万个I / O,消除数百万个事务的开销,从而迅速节省了多个内核。数据包和数据块被立即分派,等待时间最少化,从而降低了等待时间,提高了等待时间的一致性(减少了波动)并提高了吞吐量。
      SPDK由许多子组件组成,这些子组件相互链接并共享用户级和轮询模式操作的通用元素。创建每个组件都是为了克服创建end-to-end SPDK架构时遇到的特定性能瓶颈。但是,每个组件也可以集成到非SPDK架构中,从而使客户可以利用SPDK的经验和技术来加速自己的软件。

SPDK简介

硬件驱动
  • NVMe驱动:SPDK的基础组件,这个高度优化的无锁驱动程序提供了极好的可扩展性,效率和性能。
  • Intel® QuickData Technology:也称为Intel® I/O Acceleration Technology(Intel® IOAT,Intel® I / O加速技术),这是内置基于Intel® Xeon®处理器平台中的复制卸载引擎。通过提供用户空间访问,减少了DMA数据移动的阈值,从而更好地利用小型的I/O或NTB。
后端块设备
  • NVMe over Fabrics (NVMe-oF) 启动器:关于NVMe和NVMe-oF的关系,可参考《谈谈关于NVMe和NVMe-oF的那些事》,从程序员的角度来看,本地SPDK NVMe驱动程序和NVMe-oF启动器共享一组通用的API命令,这意味着local/remote复制非常容易启用。
  • Ceph* RADOS Block Device (RBD):支持Ceph作为SPDK的后端设备,这可能允许Ceph用作另一个存储层。
  • Blobstore Block Device:一个由SPDK Blobstore分配的块设备,这是一个虚拟设备,VMs或数据库可以与之交互。这些设备享受SPDK基础设施带来的好处,这意味着零锁和极佳的可扩展性能。
  • Linux* 异步 I/O (AIO): 允许SPDK与HDD之类的内核设备进行交互。
存储服务
  • Block device abstraction layer (bdev,块设备抽象层):这种通用的块设备抽象层是将存储协议连接到各种设备驱动程序和块设备的粘合剂。还为块层中的其他y用户功能(RAID,压缩,删除重复数据等)提供了灵活的API。
  • Blobstore:为SPDK实现高度简化的类似于文件的语义(非POSIX *)。这可以为数据库,容器,虚拟机(VM)或其他不依赖于POSIX文件系统功能集(例如用户访问控制)的大部分工作负载提供高性能基础。
存储协议
  • iSCSI target:实现已建立的以太网块通信规范;效率是内核 LIO(linux IO)的两倍。当前版本默认使用内核TCP/IP栈。
  • NVMe-oF target:实现新的NVMe-oF规范。尽管它取决于RDMA硬件,但NVMe-oF target 可以为每个CPU核心提供高达40gbps的流量。
  • vhost-scsi target:KVM / QEMU的一项功能,它利用SPDK NVMe驱动程序,使访客虚拟机(Guest VMs)可以更低延迟地访问存储介质,并减少I / O密集型工作负载的总体CPU负载。

SPDK并不适合所有的存储架构。这里有一些问题可以帮助您确定SPDK组件是否适合您的架构。


1. 存储系统是基于Linux还是FreeBSD *?
      SPDK主要在Linux上经过测试和支持。FreeBSD和Linux都支持硬件驱动程序。


2. 存储系统是否是英特尔®系统架构的硬件平台?
      SPDK旨在充分利用英特尔®的平台特性,并针对英特尔®芯片和系统进行了测试和调整。


3. 存储系统的性能路径当前是否在用户模式下运行?
      SPDK可以通过在用户空间中运行更多性能路径(performance path)来提高性能和效率。通过将应用程序与SPDK功能(例如NVMe-oF target,启动器或Blobstore)组合在一起,整个数据路径可能在用户空间中运行,从而提高了效率。


4. 系统架构能否将无锁PMD纳入其线程模型?
      由于PMD持续在其线程上运行(而不是在未使用时休眠或转让处理器),因此它们具有特定的线程模型要求。


5. 系统当前是否使用DPDK(Data Plane Development Kit,数据平面开发套件)来处理网络数据包工作负载?
      SPDK与DPDK共享原语和编程模型,因此当前使用DPDK的客户可能会发现与SPDK的紧密集成很有用。同样,如果客户使用SPDK,则添加DPDK功能进行网络处理可能会带来巨大的机会。


6. 开发团队是否具有专业知识,可以自己理解问题并进行故障排除?
      英特尔对该参考软件不承担任何支持义务。尽管英特尔和SPDK周围的开源社区将采取商业上合理的努力来调查未经修改的已发布软件的潜在勘误,但在任何情况下,英特尔均不对客户承担任何提供软件维护或支持的义务。
      性能测试中使用的软件和工作负载可能仅针对英特尔微处理器的性能进行了优化。使用特定的计算机系统,组件,软件,操作和功能来测量性能测试(例如SYSmark *和MobileMark *)。这些因素的任何变化都可能导致结果变化。

性能测试配置:
  • 2S Intel® Xeon® 处理器 E5-2699 v3: 18 C, 2.3 GHz (超线程关闭)
    注意:性能测试时使用了单个插槽
  • 32 GB DDR4 2133 MT/s
    每个CPU 4个内存通道
    每个通道1x 4GB 2R DIMM
  • Ubuntu *(Linux)服务器14.10
  • 3.16.0-30-通用内核
  • Intel® Ethernet Controller XL710 for 40GbE
  • 8x P3700 NVMe drive for storage
  • NVMe configuration
    Total 8 PCIe* Gen 3 x 4 NVMes
    4 NVMes coming from first x16 slot
    (bifurcated to 4 x4s in the BIOS)
    Another 4 NVMes coming from second x16 slot (在BIOS中分散为4 * 4)
    Intel® SSD DC P3700 Series 800 GB
    固件: 8DV10102
  • FIO BenchMark Configuration
    Direct: Yes
    Queue depth
    4KB Random I/O: 32 outstanding I/O
    64KB Seq. I/O: 8 outstanding I/O
    Ramp Time: 30 seconds
    Run Time:180 seconds
    Norandommap: 1
    I/O Engine: Libaio
    Numjobs: 1
  • BIOS 配置
    Speed Step: Disabled
    Turbo Boost: Disabled
    CPU Power and Performance Policy: Performance
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值