SPDK和容器相结合的应用场景分享

容器技术通过打包运行环境和依赖到可移植的镜像中实现轻量级的资源隔离,真正做到了一次编译,随处运行,且各个实例的初始状态均一致。这种快捷部署、扩展和一致性的特性,让容器技术在近些年来广泛流行,衍生出了多种相关的技术类型并吸引了各大应用向容器环境迁移。本文将以docker容器为例,介绍SPDK与容器相结合的3个主要应用场景:(1)“在容器中实现高性能的用户态存储应用”;(2)“为容器提供高性能的外部存储”;(3)“与IPU (Infrastructure Processing Unit,业界也称DPU-- Data Processing Unit) 结合加速容器镜像的准备和容器启动过程”。

一. 在容器中实现高性能的用户态存储应用

将SPDK的应用程序在docker环境中运行的案例在SPDK的官方网站上其实已有简单的介绍[1] 。概括起来就是将SPDK应用和相应的依赖包打包到与编译环境相匹配的镜像中运行。此处将列举在Host下编译容器镜像和运行容器实例的主要步骤。在系统中安装好docker命令工具、设置好源&代理等配置参数并使用docker pull hello-world测试网络访问正常后,即可按如下步骤来执行具体的步骤。

1) 准备编译docker容器镜像的Dockerfile (内容参见如下,此处选择fedora 35作为目标镜像)

# start with the latest Fedora 35

FROM fedora:35

# if you are behind a proxy, set that up now

ADD dnf.conf ./dnf.conf

# these are the min dependencies for the hello_world app

RUN dnf install libaio-devel -y

RUN dnf install numactl-devel -y

# set our working dir

WORKDIR /app

# add the hello_world binary

ADD hello_world hello_world

# run the app

CMD ./hello_world

2) 准备docker容器文件

在目标镜像对应的OS环境编译SPDK的用户态NVMe驱动example 程序hello_world以及用于docker中使用的配置代理的文件dnf.conf(dnf.conf文件是一个通用的文件,并无特殊的地方,其内容参考系统下/etc/dnf/dnf.conf) ,与前步中的Dockerfile放在同一个目录下。

3) 编译容器镜像

进入存放上述文件的目录执行如下命令编译相应的hello镜像。

docker build ./ -t hello:1.0

编译生成image后即可使用docker images 命令进行查询,输出可举例如下所示。

REPOSITORY    TAG       IMAGE ID       CREATED         SIZE

hello         1.0       f650b0c3ffba   5 weeks ago     452MB

4) 运行容器

编译镜像完成后即可按如下操作运行相应的容器。

A. 在系统中执行SPDK源码目录下的./scripts/setup.sh将系统下看到的NVMe设备(如bus/device/fun为d9:00.0)指定给vfio_pci或者uio_pci_generic驱动。

B. 执行如下命令启动docker实例

docker run --privileged -v /dev/hugepages:/dev/hugepages -v /dev/shm:/dev/shm hello:1.0

//命令执行过程的输出可参考如下。

[2022-12-10 13:40:17.888222] [ DPDK EAL parameters: [2022-12-10 13:40:17.888253] hello_world [2022-12-10 13:40:17.888263] --no-shconf [2022-12-10 13:40:17.888275] -c 0x1 [2022-12-10 13:40:17.888284] --log-level=lib.eal:6 [2022-12-10 13:40:17.888293] --log-level=lib.cryptodev:5 [2022-12-10 13:40:17.888303] --log-level=user1:6 [2022-12-10 13:40:17.888312] --iova-mode=pa [2022-12-10 13:40:17.888320] --base-virtaddr=0x200000000000 [2022-12-10 13:40:17.888330] --match-allocations [2022-12-10 13:40:17.888339] --file-prefix=spdk_pid1 [2022-12-10 13:40:17.888359] ]

EAL: No available 1048576 kB hugepages reported

TELEMETRY: No legacy callbacks, legacy socket not created

Initializing NVMe Controllers

Attaching to 0000:d9:00.0

Attached to 0000:d9:00.0

  Namespace ID: 1 size: 1600GB

Initialization complete.

INFO: using host memory buffer for IO

Hello world!

当然,也可使用docker run -itd --privileged --name=hello -v /dev/hugepages:/dev/hugepages hello:1.0 /bin/bash命令后台运行docker实例,然后通过docker exec -it hello /bash/bin登录到docker实例中手动执行

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值