SPDK的本地环境搭建和本地测试方法

干货分享 | spdk技术简介一些实践经验 1、SPDK的整体架构图1 / SPDK的架构(图片源自网络)存储协议层:SPDK支持的存储应用类型。NVMe-oF target实现了NVMe-oF规范,对外提供基于NVMe协议的存储服务端,支持RDMATCP网络;iSCSI Target对外提供基于SCSI协议的存储服务端;vhost-scsi或vhost-blk对qemu提供后端存储服务,qemu可以基于SPDK提供的后端存储为虚拟机挂载virtio-scsi或virtio-blk磁盘。存储服务层。... 阅读详情
  【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力,聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域,包含了应用使能套件、软件仓库、软件支持、软件适配认证四大板块,旨在共享尖端技术,为开发者提供一个涵盖多领域的开发平台和工具套件。 点击这里开始你的技术升级之旅吧

image.png

本文分享至飞腾开发者平台

《SPDK的本地环境搭建和本地测试方法》

1 介绍

1.1 SPDK简介

  SPDK(Storage Performance Development Kit),顾名思义是一组用于提高存储性能的开发工具包,提供了一组用于编写高性能、可伸缩、用户态存储应用程序的工具和库。
  SPDK可以通过如下关键技术提高性能:
  1) 将所有必需的驱动程序移至用户空间,这样就避免了系统调用,并允许从应用程序中进行零拷贝访问;
  2) 轮询硬件任务的完成而不是依靠中断,这会降低总延迟和延迟抖动;
  3) 避免在I/O路径中出现锁, 而是依赖消息传递。

1.2 测试工具介绍

1.2.1 perf测试工具

  Perf是SPDK用来测试NVMe SSD 性能的工具,它的代码在spdk/example/nvme/perf路径下。Perf主要用来测试NVMe SSD的IOPS, Bandwidth和Latency,它既可以测本地的target,也可以测远端的target。

1.2.2 fio测试工具

  fio是测试存储设备的常用工具。为了能使用fio工具,SPDK推出fio_plugin机制,该机制与SPDK高度集成,可采用SPDK用户态设备驱动所提供的轮询和异步的方式进行I/O操作,I/O通过SPDK直接写入磁盘。SPDK提供两种形态的fio_plugin,基于裸盘fio_plugin,其特点为I/O通过SPDK直接访问裸盘,常用于评估SPDK用户态驱动在裸盘上的性能;基于bdev的fio_plugin,其特点为I/O测试基于SPDK块设备bdev之上,所有I/O经由块设备层bdev,再传送至裸盘设备。常用于评估SPDK块设备bdev的性能。

2 SPDK安装及测试命令汇总

2.1编译安装

  1) 获取源码

git clone https://github.com/spdk/spdk.git
cd spdk
git submodule update --init (若不成功反复执行直至成功)

  2) 安装依赖包

scripts/pkgdep/centos.sh  (如有些包未被安装,请手动安装)

  部分手动安装的包安装方式如下:

  a) help2man工具:

  方法一:从如下网站下载(注意此是centos8,其他操作系统可通过https://pkgs.org/查找)
  https://vault.centos.org/centos/8/PowerTools/aarch64/os/Packa...
  方法二:

dnf --enablerepo=PowerTools install help2man

  b) Nasm工具:

  方法一:从如下网站下载(注意此是centos8,其他操作系统可通过https://pkgs.org/查找)
  https://vault.centos.org/centos/8/PowerTools/aarch64/os/Packa...
  方法二:

dnf --enablerepo=PowerTools install nasm

  c) Ninja工具:

  首先下载re2c,网址:https://github.com/skvadrik/re2c/releases/tag/1.0.3/re2c-1.0.3.tar.gz
  然后安装re2c,如下:

./autogen.sh
./configure && make && make install

  下载ninja:

git clone https://github.com/ninja-build/ninja.git

  最后安装ninja:

./configure.py --bootstrap
cp ninja /usr/bin/

  d) libcmocka-devel工具:

  方法一:从如下网站下载(注意此是centos8,其他操作系统可通过https://pkgs.org/查找)
  https://vault.centos.org/centos/8/PowerTools/aarch64/os/Packa...
  方法二:

dnf --enablerepo=PowerTools install libcmocka-devel

  e) CUnit-devel工具

  方法一:从如下网站下载(注意此是centos8,其他操作系统可通过https://pkgs.org/查找)
  https://vault.centos.org/centos/8/PowerTools/aarch64/os/Packa...
  方法二:

dnf --enablerepo=PowerTools install CUnit-devel

  3) 安装dpdk

cd  dpdk
git checkout v19.11
./dpdk/usertools/dpdk-setup.sh  选择合适的选项进行编译

  4) 安装fio

cd ../
git clone https://github.com/axboe/fio
cd fio && git checkout fio-3.3
make
mv fio spdk

  5) 编译spdk预准备
  为保证支持fio的spdk,需做如下操作:
    a) 查看gcc版本,保证gcc版本大于4.8,暂时性升级gcc的操作如下:

yum install centos-release-scl
yum install devtoolset-7-gcc*
scl enable devtoolset-7 bash

    b) 修改dpdk的配置文件

cd dpdk/config
vim defconfig_arm64-armv8a-linuxapp-gcc
在末尾添加:EXTRA_CFLAGS=-fPIC

  6) 编译spdk

git checkout v20.07
./configure --with-fio=./fio --with-dpdk=./dpdk/arm64-armv8a-linuxapp-gcc --with-igb-uio-driver
注:如若在CONFIG文件中直接设置configure则在./configure后不需加相应参数,参考如下:
CONFIG_FIO_PLUGIN=y
CONFIG_FIO_SOURCE_DIR=/path/to/fio
CONFIG_IGB_UIO_DRIVER=y
make -j16

2.2 测试汇总

  首先测试spdk是否能使用:

./scripts/setup.sh(若要加参数可根据-h查看参数,注意该脚本的参数均得在该脚本名字前)
./examples/nvme/hello_world/hello_world

  1) perf 裸盘测试

./examples/nvme/perf/perf -q 32 -s 1024 -w randwrite -t 600 -c 0x1 -o 4096 -r 
'trtype:PCIe traddr:0000:02:00.0'

  2) fio 裸盘测试

LD_PRELOAD=./examples/nvme/fio_plugin/fio_plugin
fio/fio ./examples/nvme/fio_plugin/example_config.fio

  3) fio bdev测试

LD_PRELOAD=./examples/bdev/fio_plugin/fio_plugin
fio ./examples/bdev/fio_plugin/example_config.fio

3 具体测试及部分截图

  目前实际测试均只针对本地target和使用uio驱动。

3.1 perf测试

3.1.1 perf裸盘测试

  使用的测试命令行:

./examples/nvme/perf/perf -q 32 -s 1024 -w randwrite -t 600 -c 0x1 -o 4096 -r
'trtype:PCIe traddr:0000:02:00.0'

  参数简要介绍:q --表示使用的队列深度
  s -- 表示dpdk使用的巨页内存大小,单位是MB
  w -- 表示使用的io模式类型,必须为read, write, randread, randwrite, rw, randrw中的一种
  t -- 表示运行时间,单位s
  c -- 表示使用的core mask
  o -- 表示io大小,单位byte
  r -- 指定本地PCIe NVMe或NVMeoF的传输ID
  全部具体参数请参考perf说明。

  测试截图如图所示。

image.png

3.2 fio测试

3.2.1 fio裸盘测试

  使用的测试命令行:

LD_PRELOAD=./examples/nvme/fio_plugin/fio_plugin 
fio/fio ./examples/nvme/fio_plugin/example_config.fio

  可通过如下命令查看相关参数说明:

LD_PRELOAD=./examples/nvme/fio_plugin/fio_plugin fio/fio --enghelp=spdk

  其中通过修改example_config.fio文件对测试进行控制,文件如下:

[global]
ioengine=spdk
thread=1
group_reporting=1
direct=1
verify=0
time_based=1
ramp_time=0
runtime=10
iodepth=128
rw=randrw
bs=4k

[test]
numjobs=1
filename=trtype=PCIe traddr=0000.02.00.0 ns=1

  测试截图如图所示:

image.png

3.2.2 fio bdev测试

  使用的测试命令行:

LD_PRELOAD=./examples/bdev/fio_plugin/fio_plugin 
fio ./examples/bdev/fio_plugin/example_config.fio

  通过修改./examples/bdev/fio_plugin/bdev.conf.in对spdk测试进行配置,在裸盘之上架构一个bdev层。示例如下:

[Malloc]
  NumberOfLuns 1
  LunSizeInMB 128
[Nvme]
  TransportID "trtype:PCIe traddr:0000:02:00.0" Nvme0
  RetryCount 4
  TimeoutUsec 0
  AcctionOnTimeout None
  AdminPollRate 100000

  该示例中创造了命名为Nvme0的bdev层。
  通过修改./examples/bdev/fio_plugin/example_config.fio文件对fio进行配置。文件示例如下:

[global]
ioengine=spdk_bdev
spdk_conf=./examples/bdev/fio_plugin/bdev.conf.in
thread=1
group_reporting=1
direct=1
verify=0
time_based=1
ramp_time=0
runtime=600
iodepth=128
rw=randrw
bs=4k

[test]
numjobs=1
filename=Nvme0n1

4 所遇问题汇总

  1) 如遇到缺少libcrypto.so.10 文件,进行如下操作:

yum install compat-openssl10.aarch64 -y

  2) 编译DPDK遇到如下图所示错误

image.png

  可通过如下操作消除错误:

sudo vim /home/lso/spdk/dpdk/drivers/net/ifc/base/ifcvf.h +16 注释该行

推荐阅读 

如开发者在使用飞腾产品有任何问题可通过在线工单联系我们


版权所有。飞腾信息技术有限公司 2023。保留所有权利。

未经本公司同意,任何单位、公司或个人不得擅自复制,翻译,摘抄本文档内容的部分或全部,不得以任何方式或途径进行传播和宣传。

商标声明

Phytium和其他飞腾商标均为飞腾信息技术有限公司的商标。

本文档提及的其他所有商标或注册商标,由各自的所有人拥有。

注意

本文档的内容视为飞腾的保密信息,您应当严格遵守保密任务;未经飞腾事先书面同意,您不得向任何第三方披露本文档内容或提供给任何第三方使用。

由于产品版本升级或其他原因,本文档内容会不定期进行更新。除非另有约定,本文档仅作为使用指导,飞腾在现有技术的基础上尽最大努力提供相应的介绍及操作指引,但飞腾在此明确声明对本文档内容的准确性、完整性、适用性、可靠性的等不作任何明示或暗示的保证。

本文档中所有内容,包括但不限于图片、架构设计、页面布局、文字描述,均由飞腾和/或其关联公司依法拥有其知识产权,包括但不限于商标权、专利权、著作权等。非经飞腾和/或其关联公司书面同意,任何人不得擅自使用、修改,复制上述内容。

收藏: 浅析SPDK技术知识点 首先,我们的设备驱动代码运行在用户态。用户使用现在的固态设备,比如 Intel SSD DC P4600 Series Non-Volatile Memory Express(NVMe)驱动,面临一个主要的挑战:因为固态设备的吞吐量延迟性能比起传统的磁盘好太多,如今总的处理时间中,存储软件占用了更大的比例。随着存储设备继续发展,它将面临远远超过现今使用的软件体系结构的风险(即存储设备受制于相关软件的不足而不能发挥全部性能)同时,在接下来的几年里,存储设备将会继续飞快发展到令人难以置信的程度。... 阅读详情

相关推荐

根据 cadence 设计图学习硬件知识 day02 了解飞腾 X100芯片

根据 cadence 设计图学习硬件知识 day02 了解飞腾 X100芯片

she666666的博客 7131

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

什么是SPDK SPDK 存储性能开发套件(Storage Performance Development Kit ) —— 针对于支持nvme协议的SSD设备。 SPDK是一种高性能的解决方案。 存储性能开发套件 (SPDK) 提供了一组工具库,用于编写高性能、可扩展的用户模式存储应用程序。它通过使用一些关键技术实现高性能: 将所有必要的驱动程序移动到用户空间,从而避免 syscalls,并允许从应用程序中访问零拷贝。 对硬件进行完成轮询,而不是依赖中断,这降低了总延迟延迟方差。 避免

我的笔记本 1万+

SPDK对接Ceph性能优化

SPDK是intel公司主导开发的一套存储高性能开发套件,提供了一组工具库,用于编写高性能、可扩展用户态存储应用。它通过使用一些关键技术实现了高性能:SPDK是一个框架而不是分布式系统,它的基石是用户态(user space)、轮询(polled-mode)、异步(asynchronous)无锁的NVMe驱动,其提供了零拷贝、高并发直接用户态访问SSD的特性。SPDK的最初目的是为了优化块存储落盘性能,但伴随持续的演进,已经被用...

天翼云开发者社区 2569

SPDK入门】

SPDK (Storage performance development kit, http://spdk.io) 是由Intel发起、用于加速使用NVMe SSD作为后端存储的应用软件加速库。Intel对SPDK的定义是利用**用户态、异步、轮询方式**的NVMe驱动,用于加速**NVMe SSD**作为后端存储使用的应用软件的**加速库**

weixin_43273308的博客 3811

高性能技术之SPDKDPDK(一)

DPDK(Data Plane Development Kit)SPDK(Storage Performance Development Kit)都是由英特尔开源的项目,它们都旨在提高特定领域的性能,但是它们的关注点应用场景有所不同。总的来说,DPDKSPDK的核心思想大致相同,都涉及到用户空间的直接资源访问减少操作系统内核的介入,但是DPDK主要针对网络性能,而SPDK主要针对存储性能。SPDK则专注于存储性能的提升,特别是针对NVMe SSD等新一代存储介质的优化。

axyw_的博客 2821

SPDK初步安装测试

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

肥叔菌的博客 5412

SPDK 的测试 fio 与 pref 方法及结果

测试磁盘型号:Intel® SSD D5-P4420 型号官网相关性能参数: 测试指标: 通常,对于一个磁盘的性能,我们主要从三方面去评估:IOPS、bandwidth、latency。 IOPS:通常评估磁盘的IOPS,主要关注块大小为4k,随机读写的情况。因此,通常fio关键参数为:bs=4k,iodepth=128,direct=1,rw=randread/randwrite。 Bandwidth:评估磁盘的bandwidth,通常是关注块大小为128k,顺序读写的情况。因此,通常fio

caijunliyanqing的专栏 4337

基于SPDK的NVMe SSD性能评估指南-更新

例如刚刚所提到的线程模型,perf中是使用DPDK所提供的线程模型,通过使用CPU的亲性将CPU核与线程捆绑,不再受内核调度,因此可以充分发挥SPDK下发I/O时的异步无锁化优势。通常在fio中,指定的iodepth表示所有的job一共的iodepth,而在perf指定的iodepth(perf中-q参数)通常指的是每个job所使用的iodepth。其中,-c是指定bdevperf的配置文件,需要测试的bdev设备都在配置文件中指定,例如,若需要测试本地的两块NVMe设备,则bdevperf的配置文。

哦哦 会议中 1219

SPDK中常用的性能测试工具

本文主要介绍磁盘性能评估的方法,针对用户态驱动Kernel与SPDK中各种IO测试工具的使用方法做出总结。其中fio是一个常用的IO测试工具,可以运行在Linux、Windows等多种系统...

weixin_37097605的博客 2431

SPDK配置文件从INI到JSON的转换

作者简介王海亮 英特尔SPDK测试工程师一为什么SPDK要使用JSON格式配置文件?众所周知,配置文件是软件应用中常用的初始化参数的配置方式,而配置文件的格式有很多种。不同的配置文件格式...

weixin_37097605的博客 1713

SPDK用户态iSCSI客户端库功能介绍

以下内容是SPDK用户态iSCSI 客户端库的基本使用介绍。目标机器端的配置:1.从github 获取 spdk软件源,进行编译。

lingshengxiyou的博客 615

一文评估基于SPDK的NVMe SSD性能

本文主要介绍磁盘性能评估的方法,针对用户态驱动SPDK与Kernel,并且对常见问题做出总结。

lingshengxiyou的博客 628

Fuzz方法在SPDK iSCSI的应用实例

点击上方蓝字 关注我们Fuzz方法在SPDK iSCSI的应用实例王海亮 |英特尔SPDK测试工程师一Fuzz 简介本文目的是介绍如何使用fuzz方法写出测试代码。首先了解一下fuzz...

weixin_37097605的博客 503

基于SPDK的NVMe SSD性能评估指南(文末有福利)

作者简介周雁波,存储软件工程师,从事SPDK的开发与性能测试工作。本文主要介绍磁盘性能评估的方法,针对用户态驱动SPDK与Kernel,并且对常见问题做出总结。 一通过f...

weixin_37097605的博客 1878

SPDK | 每秒8千万次I/O性能实现

欲阅读更多信息,请访问SPDK主文档页面(https://spdk.io/doc/),特别推荐阅读引言(https://spdk.io/doc/intro.html)概念(https://spdk.io/doc/concepts.html)两章节。下图显示了SPDK NVMe驱动程序在增加CPU核数量时执行I/O操作时的I/O吞吐量的性能扩展性。此外,SPDK NVMe驱动程序呈线性IOPS可扩展性,因为没有对I/O路径添加锁,且将I/O线程固定在CPU核上,数据得以保留在访问过的CPU的核缓存上。

weixin_60043341的博客 271

SPDK——每秒8千万次I/O性能实现

结合最新的第三代英特尔® 至强® 可扩展处理器(代号为Ice Lake)英特尔® Optane™ SSDs,SPDK社区构建了2U英特尔® 至强® 服务器系统,该系统能够承载 8千万的512字节的随机I/O读取操作。SPDK在过去几年实现了超1千万IOPS(使用一个CPU核心)的系统,如今,我们将大幅提升技术水平,向8千万IOPS进发。此外,SPDK NVMe驱动程序呈线性IOPS可扩展性,因为没有对I/O路径添加锁,且将I/O线程固定在CPU核上,数据得以保留在访问过的CPU的核缓存上。

lingshengxiyou的博客 469

SPDK性能测试与基准:如何评估验证存储应用性能

前往项目官网免费下载:[https://ar.openeuler.org/ar/](https://ar.openeuler.org/ar/?utm_source=csdn_blog) SPDK(Storage Performance Development Kit)是一款专为提升存储应用性能而设计的开发工具集,通过用户态驱动轮询模式等技术,显著降低存储I/O路径的延迟并提高吞吐量。对于开发者

gitblog_06831的博客 218
上一篇: KVM虚拟化系统解决方案(四)--虚拟桌面
下一篇: 基于飞腾腾云S2500的SPECWeb2009部署指南
飞腾开发者
博客等级 码龄3年 707粉丝 43原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值