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

  【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力,聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域,包含了应用使能套件、软件仓库、软件支持、软件适配认证四大板块,旨在共享尖端技术,为开发者提供一个涵盖多领域的开发平台和工具套件。 点击这里开始你的技术升级之旅吧

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和其他飞腾商标均为飞腾信息技术有限公司的商标。

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

注意

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

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

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

  • 15
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SPDK(Storage Performance Development Kit)环境上部署NVMe(Non-Volatile Memory Express)可以提供高性能的存储解决方案。下面是在SPDK环境上部署NVMe的一般步骤: 1. 安装SPDK:首先,您需要下载和安装SPDK。您可以从SPDK的官方网站(https://spdk.io/)上获取最新版本的SPDK,并按照官方文档中的说明进行安装。 2. 配置SPDK:安装完成后,您需要进行SPDK的配置。您可以使用`./configure`命令来配置SPDK,并根据您的需求选择相应的选项。配置完成后,使用`make`命令编译SPDK。 3. 初始化NVMe设备:在SPDK环境中,您需要初始化NVMe设备以便进行后续操作。使用`./scripts/setup.sh`脚本可以帮助您初始化NVMe设备。该脚本将检测系统中的NVMe设备,并为每个设备创相应的配置文件。 4. 运行SPDK应用程序:在完成初始化后,您可以运行SPDK应用程序来管理和操作NVMe设备。SPDK提供了一些示例应用程序,如`hello_world`和`perf`等。您可以使用这些示例应用程序来测试和验证NVMe设备的性能。 5. 配置NVMe命名空间:在SPDK环境中,您可以通过配置NVMe命名空间来管理存储空间。使用`./scripts/rpc.py`脚本可以帮助您配置NVMe命名空间。该脚本提供了一些命令,如`bdev_nvme_attach_controller`和`bdev_nvme_attach_namespace`等,用于配置NVMe设备和命名空间。 6. 运行应用程序:最后,您可以编写自己的应用程序来使用SPDK和NVMe设备。您可以使用SPDK提供的API来访问和管理NVMe设备。在编写应用程序时,您可以参考SPDK的官方文档和示例代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值