SPDK Vagrant使用入门指南

01

Vagrant基本概况

640?wx_fmt=png

Vagrant是用于创建和提供可移植虚拟机的开源项目。使用Vagrant,您可以在极短的时间内启动多台虚拟机。它将允许您尝试同时使用几个操作系统或发行版本,而不会打断您下载ISO文件。

640?wx_fmt=png
640?wx_fmt=png
640?wx_fmt=png

02

在SPDK中使用Vagrant

640?wx_fmt=png

Vagrant还提供了一种快速方法,可以在不需要任何特殊硬件的情况下运行启用基本NVMe的虚拟机沙箱。 SPDK的Vagrant环境支持Ubuntu 16.04和CentOS 7.2。 此环境需要Vagrant 1.9.4或更高版本、VirtualBox 5.1或更高版本、以及匹配的VirtualBox扩展包。

虚拟机从位于/ SPDK的源构建SPDK和DPDK。

640?wx_fmt=png

注意:

如果您处于公司防火墙之内,请在尝试启动虚拟机之前在您的环境中设置http_proxy和https_proxy。同时还要确保你已经安装了可选的vagrant模块vagrant-proxyconf:

export http_proxy=...

export https_proxy=...

vagrant plugin install vagrant-proxyconf

如果您想使用kvm/libvirt,您还应该安装vagrant-libvirt。

640?wx_fmt=png

 1. Vagrant的环境配置 

本文将演示如何在CentOS 7环境中配置和使用Vagrant。

640?wx_fmt=png

步骤1

640?wx_fmt=png

在 CentOS 7 主机系统上安装 VirtualBox 5.1 (假设主机系统未安装任何依赖项)。首先安装 VirtualBox 依赖项:

#yum –y install gcc dkms make qt libgomp patch

#yum –y install kernel-headers kernel-devel   binutils glibc-headers glibc-devel font-forge

然后添加VirtualBox库:

#cd /etc/yum.repo.d/

#wget http://download/virtualbox.org/virtualbox/rpm/rhel/virtualbox.repo

640?wx_fmt=png

步骤2

640?wx_fmt=png

在CentOS 7中安装Vagrant。在这里,我们使用yum命令安装2.0.2版本。对于64位计算机,请使用以下命令:

#yum -y install https://releases.hashicorp.com/vagrant/2.0.2/vagrant_2.0.2_x86_64.rpm

对于32位计算机,请使用以下命令:

#yum -y install   https://releases.hashicorp.com/vagrant/2.0.2/vagrant_2.0.2_i686.rpm

然后创建一个目录来安装操作系统:

#mkdir ~/vagrant && cd ~/vagrant

安装vagrant-proxyconf,这将使您能够在虚拟机中使用与主机相同的代理:

#vagrant plugin install vagrant-proxyconf

安装 vagrant-cachier:

#vagrant plugin install vagrant-cachier

在虚拟机中安装操作系统, 使用以下命令自动创建Vagrantfile, 以Ubuntu为例:

#vagrant init Ubuntu/xenial64

由于Vagrant cloud box文件已被重定向,我们可能需要执行另一个步骤来更改Vagrantfile中的以下行。

将下面这行:

config.vm.box = "ubuntu/xenial64"

替换为以下内容(这是为了将Vagrant引导到正确的文件夹位置):

config.vm.box = "http://cloud-images.ubuntu.com/releases/xenial/release-201604

20.3/ubuntu-16.04-server-cloudimg-amd64-vagrant.box"

然后使用以下命令在虚拟机上启动和安装操作系统,这将花费几分钟的时间,但具体耗时取决于网络速度:

#vagrant up

现在可以使用以下命令登录到虚拟机:

#vagrant ssh

640?wx_fmt=png

 2.  SPDK虚拟机配置,以及运行简单的Hello World实例 

640?wx_fmt=png

步骤1

640?wx_fmt=png

在主机上下载SPDK并进入文件夹/spdk/scripts/vagrant,SPDK创建了现有的Vagrant文件,您可能需要更改Vagrantfile中的以下行。

将下面这行:

config.vm.box = "ubuntu/xenial64"

替换为以下内容(这是为了将Vagrant引导到正确的文件夹位置):

config.vm.box = " https://vagrantcloud.com/puppetlabs/boxes/ubuntu-16.04-64-nocm/versions/1.0.0/providers/virtualbox.box"

或者您可以将virtualbox.box文件直接下载到本地文件夹,并将其分配给config.vm.box,如下所示:

config.vm.box = "ubuntu-16.04-x86_64-virtualbox-nocm-1.0.0.box"

然后运行以下命令来启动虚拟机,这将花费几分钟的时间:

#vagrant up

然后可以使用以下命令登录到虚拟机中:

#vagrant ssh

 使用以下命令更改为root用户:

#sudo su

640?wx_fmt=png

步骤2

640?wx_fmt=png

使用以下命令检查虚拟机中是否存在NVMe设备:

#lspci -nn | grep "Non"

00:0e.0 Non-Volatile memory controller [0108]: InnoTek Systemberatung GmbH Device [80ee:4e56]

640?wx_fmt=png

步骤3

640?wx_fmt=png

在虚拟机上下载最新的DPDK和SPDK。

#git clone https://github.com/spdk/spdk.git

#cd spdk/

#git submodule update --init

640?wx_fmt=png

步骤4

640?wx_fmt=png

在虚拟机上安装相关依赖包。

#./scripts/pkgdep.sh

640?wx_fmt=png

步骤5

640?wx_fmt=png

编译SPDK,探测uio, uio_pci_generic驱动并运行setup.sh脚本:

#./configure

#make

#modprobe uio

#modprobe uio_pci_generic

#./scripts/setup.sh

0000:00:0e.0 (80ee 4e56): nvme -> uio_pci_generic

640?wx_fmt=png

步骤6

640?wx_fmt=png

在示例中运行“Hello World”:

#./examples/nvme/hello_world/hello_world

Starting SPDK v18.07-pre / DPDK 18.02.0 initialization...

[ DPDK EAL parameters: hello_world -c 0x1 --file-prefix=spdk0 --base-virtaddr=0x1000000000 --proc-type=auto ]

EAL: Detected 2 lcore(s)

EAL: Auto-detected process type: PRIMARY

EAL: Multi-process socket /var/run/.spdk0_unix

EAL: Probing VFIO support...

Initializing NVMe Controllers

EAL: PCI device 0000:00:0e.0 on NUMA socket 0

EAL:   probe driver: 80ee:4e56 spdk_nvme

Attaching to 0000:00:0e.0

Attached to 0000:00:0e.0

Using controller ORCL-VBOX-NVME-VER12 (VB1234-56789        ) with 1 namespaces.

  Namespace ID: 1 size: 1GB

Initialization complete.

INFO: using host memory buffer for IO

Hello world!

640?wx_fmt=png

03

故障分析

640?wx_fmt=png

 1   虚拟机操作系统1404无法加载uio_pci_generic模块,导致./script/setup.sh失败。

 解决方案: 

您可以从网站 :

https://vagrantcloud.com/puppetlabs/boxes/

直接下载 virtualbox 文件到您的本地环境, 然后将其分配给您的 vm.config.box

 2  启动的操作系统无法加载uio_pci_generic,这是运行SPDK驱动程序的基础。

 解决方案:

使用以下命令将相应的内核源文件下载到虚拟机。

#wget https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/linux-4.15.1.tar.gz

解压并编译相应的内核:

#tar zxvf linux-4.15.1.tar.gz

#cd linux-4.15.1

从现有内核复制配置文件:

#cp /boot/config-4.15.0-20-generic .config

#make menuconfig

#apt-get install libncurses5-dev

#make

检查已编译的uio_pci_generic.ko文件:

#find / -name uio_pci_generic*

 3  调整vmdk文件的大小

通常,vagrant将为vm分配10G磁盘空间,在配置期间,我们需要安装大量的库,因此空间将在短时间内耗尽。 您可以参考以下关于如何调整大小的链接:

https://www.jeffgeerling.com/blogs/jeff-geerling/resizing-virtualbox-disk-image

我们列出了以下步骤作为参考:

a. Vagrant halt <vm id>

b. cd ~/VirtualBox\ VMs/

c.  cd vagrant_default_1531825753654_13384/

d.  vboxmanage clonehd ubuntu-artful-17.10-cloudimg.vmdk ubuntu-artful-17.10-cloudimg-disk001.vdi --format vdi

e. vboxmanage modifyhd ubuntu-artful-17.10-cloudimg-disk001.vdi --resize 40960

f.  vboxmanage clonehd ubuntu-artful-17.10-cloudimg-disk001.vdi ubuntu-artful-17.10-cloudimg-disk001.vmdk --format vmdk(在这里,您将获得一个UUID,记录它并在下一步中用旧的UUID替换)

g. vim vagrant_default_1531908878564_1555.vbox, 在两个地方更改相应的ubuntu-artful-17.10-cloudimg-disk001.vmdk的UUID以及vmdk文件名

h. vagrant up

i.  vagrant ssh

j.  df –h

然后您将看到磁盘空间现在是40GB。

640?wx_fmt=png

04

常见问题

640?wx_fmt=png

  1.  对于笔记本电脑和个人电脑等服务器,只有一个单独的CPU,因此分配给虚拟机的CPU应该只有一个,这意味着虚拟机中的CPU不应超过主机上的CPU。

  2. RDMA支持在虚拟机中运行NVMf loopback。限于篇幅,关于这部分的介绍会在之后的推送中进行。

  3. RDMA支持在主机上同时运行两个vagrant来运行NVMf测试。限于篇幅,关于这部分的介绍会也将在之后的推送中进行。敬请期待。

640?wx_fmt=png

参考文献

  1. https://www.tecmint.com/how-to-install-vagrant-on-centos-7/

  2. https://ci.spdk.io/download/events/2018-summit/day2_01_VerkampLogicalVolumes.pdf

  3. http://www.spdk.io/doc/logical_volumes.html

 推荐阅读 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SPDK(存储性能开发套件)官方文档中文版。 第一章 简介 1 1.1.什么是SPDK? 1 1.2.入门 1 1.3. Vagrant开发环境 3 1.4.更新日志(略) 6 第二章 概念 6 2.1. 用户空间驱动程序** 6 2.2. 来自用户空间的DMA** 7 2.3. 消息传递和并发** 9 2.4. NAND Flash SSD内部 13 2.5. 将I / O提交到NVMe设备** 15 2.5.1 NVMe规范 15 2.5.2 SPDK NVMe驱动程序I / O路径 15 2.6. 使用Vhost-user进行虚拟化I / O. 16 2.6.1 介绍 16 2.6.2 QEMU 17 2.6.3 设备初始化 18 2.6.4 I / O路径 19 2.6.5 SPDK优化 20 2.7. SPDK目录结构概述 20 2.8. SPDK移植指南 22 第三章 用户指南 22 3.1. 系统配置用户指南 22 3.1.1 IOMMU配置 22 3.2. SPDK应用程序概述 23 3.2.1 配置SPDK应用程序 23 3.3. iSCSI Target 26 3.3.1. iSCSI Target入门指南 26 3.3.2. 通过配置文件配置iSCSI Target 27 3.3.3. 通过RPC方法配置iSCSI Target 28 3.3.4. 配置iSCSI启动器 29 3.3.5. rpc配置示例*** 30 3.3.6. iSCSI 热插拔 32 3.4. NVMe over Fabrics Target 32 3.5. Vhost Target(略) 37 3.6 块设备用户指南 38 3.6.1 bdev介绍 38 3.6.2 通用RPC命令 38 3.6.3 Ceph RBD 39 3.6.4 压缩虚拟Bdev模块 40 3.6.5 加密虚拟Bdev模块 41 3.6.6 延迟vbdev模块 41 3.6.7 GPT(GUID分区表) 42 3.6.8 iSCSI bdev 43 3.6.9 Linux AIO bdev 43 3.6.10 OCF虚拟bdev 43 3.6.11 Malloc bdev 44 3.6.12 NULL bdev 44 3.6.13 NVMe bdev 44 3.6.14 逻辑卷Lvol 45 3.6.15 RAID 46 3.6.16 Passthru 46 3.6.17 Pmem 46 3.6.18 Virtio Block 47 3.6.19 Virtio SCSI 47 3.7 BlobFS(Blobstore文件系统) 48 3.7.1 RocksDB集成 48 3.7.2 FUSE插件 49 3.8 JSON-RPC方法(略) 49 第四章 程序员指南 49 4.1. Blobstore程序员指南 49 4.1.1 介绍 50 4.1.2 运作理论 50 4.1.3 设计注意事项 52 4.1.4 例子 54 4.1.5配置 54 4.1.6 组件细节 54 4.2. 块设备层编程指南 56 4.3 编写自定义块设备模块 58 4.3.1 介绍 58 4.3.2 创建一个新模块 59 4.3.3创建虚拟Bdev 60 4.4 NVMe over Fabrics目标编程指南 61 4.4.1 介绍 61 4.4.2 原语结构体 61 4.4.3 基础函数 62 4.4.4访问控制 62 4.4.5发现子系统 62 4.4.6 传输 63 4.4.7选择线程模型 63 4.4.8 跨CPU核心扩展 63 4.4.9 零拷贝支持 63 4.4.10 RDMA 63 4.5 Flash传输层 64 4.5.1 术语 64 4.5.2 使用方法 67 4.6 GDB宏用户指南 69 4.6.1 介绍 69 4.6.2 加载gdb宏 71 4.6.3 使用gdb数据目录 72 4.6.4 使用.gdbinit加载宏 72 4.6.5 为什么我们需要显式调用spdk_load_macros 72 4.6.6 以上可用的宏总结 73 4.6.7 添加新宏 73 4.7 SPDK “Reduce”块压缩算法 73 4.7.1 介绍 73 4.7.2 例子 74 4.8 通知库 78 第五章 基本信息 79 5.1 事件框架 79 5.1.1 事件框架设计注意事项 80 5.1.2 SPDK事件框架组件 80 5.1.3 应用框架 80 5.2 逻辑卷 81 5.2.1 术语 81 5.2.2 配置逻辑卷 84 5.3 矢量数据包处理(略) 86 第六章 杂项 86 6.1 介绍 86 6.2 NVMe的P2P API 86 6.3 确定设备支持 87 6.4 P2P问题 87 第七章 驱动程序 88 7.1 NVMe驱动程序*** 88 7.1.1 介绍 88 7.1.2 例子 88 7.1.3 公共接口 89 7.1.4 NVMe驱动程序设计 89 7.1.5 NVMe over Fabrics主机支持 91 7.1.6 NVMe多进程 91 7.1.7 NVMe Hotplug 92 7.2 I/OAT驱动程序 93 7.2.1 公共接口 93 7.2.2 关键功能 93 7.3 Virtio驱动程序 93 7.3.1 介绍 93 7.3.2 2MB大页面 93 第八章 工具 94 8.1 SPDK CLI 94 8.1.1 安装所需的依赖项 94 8.1.2 运行SPDK应用程序实例 94 8.1.3 运行SPDK CLI 94 8.1.4 可选 - 创建Python虚拟环境 94 8.2 nvme-CLI 95 8.2.1 nvme-cli with SPDK入门指南 95 8.2.2 使用场景 95 第九章 性能测试报告(略) 96 第十章NVMe-oF Target跟踪点*** 96 10.1 介绍 96 10.2 启用跟踪点 97 10.3 捕获事件的快照 97 10.4 捕获足够的跟踪事件 98 10.5 添加新的跟踪点 99

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值