抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

记录 SPDK NVMe over RDMA 的部署过程。

环境准备

文件准备

需要下载的文件:(严格控制版本,不同版本可能会导致很多错误)

安装与构建

clone 项目源码

更新子模块

安装依赖

打上 patch、修改代码

开发者说明 master 分支已经整合该 patchv24.05.x 还未整合。

位于 lib/log/log.c。添加和修改以下代码(共 3 处):

构建项目

执行单元测试

绑定 NVMe 设备

绑定 NVMe 设备:

则绑定成功。lsblk 中看不到 NVMe 设备。

若输出结果为:

且运行 build/examples/hello_world,若出现以下结果:

说明没有 NVMe 设备或者 NVMe 设备处于挂载状态,无法解除内核驱动,此时需要将该设备初始化或者其他的方法。

添加 NVMe 设备后,NVMe 设备不能处于挂载状态,lsblk 结果:

再次绑定后测试,出现正确结果则成功。

取消绑定


部署 RDMA Soft-RoCE

参考 【学习笔记】NVMeoF(二):NVMe over RDMA 环境部署 部署 RDMA 部分,部署好 RDMA Soft RoCE 软件栈。

仅部署 RDMA 部分,sh 脚本中从 # 1. config nvme subsystem 后的代码全部注释掉。

重启后需要重新部署一遍 RDMA 软件栈。


这部分结束可以对 dev1 进行克隆。


配置 SPDK NVMe over RDMA Target 端

Target 端 ip:192.168.246.130

运行 nvmeof-setup.sh 脚本部署 RDMA Soft-RoCE

绑定 NVMe SSD 设备

这个 BDF 0000:0b:00.0 可能会变化,需要记住。

给 SPDK 分配大页(非必须)

启动 tgt 并监听

# 具体参数代表含义还没完全弄清,可以通过 --help 查询

# 1. 启动 nvmf_tgt 并监听
# 这里第一次可能没能启动成功,再试一次看到 succeed 就是成功
build/bin/nvmf_tgt & scripts/rpc.py nvmf_create_transport -t RDMA -u 8192 -i 131072 -c 8192

# 2. 将 NVMe 控制器附加到 SPDK 的块设备层
# 0000:0b:00.0 是上文的 BDF
./scripts/rpc.py bdev_nvme_attach_controller -b NVMe1 -t PCIe -a 0000:0b:00.0
# output:
# NVMe1n1

# 3. 创建 subsystem
# cnode1、SPDK00000000000001 可以自定义
./scripts/rpc.py nvmf_create_subsystem nqn.2016-06.io.spdk:cnode1 -a -s SPDK00000000000001 -d SPDK_Controller1

# 4. 添加 namespace
./scripts/rpc.py nvmf_subsystem_add_ns nqn.2016-06.io.spdk:cnode1 NVMe1n1
# NVMe1n1 是 2 中的输出

# 5. 添加监听
# -a 是本机 ip,-s 是端口,可修改
./scripts/rpc.py nvmf_subsystem_add_listener nqn.2016-06.io.spdk:cnode1 -t rdma -a 192.168.246.130 -s 4420

# 6. 再添加 namespace
再加一个ns
./scripts/rpc.py bdev_nvme_attach_controller -b NVMe2 -t PCIe -a 0000:0b:00.0
# outout:
# NVMe2n1
./scripts/rpc.py nvmf_subsystem_add_ns nqn.2016-06.io.spdk:cnode1 NVMe2n1

# 获取 subsystem 信息
./scripts/rpc.py nvmf_get_subsystems
# 删除 subsystem
./scripts/rpc.py nvmf_delete_subsystem nqn.2016-06.io.spdk:cnode1
# 删除 ns
# ns_id 通过 nvmf_get_subsystems 获取
./scripts/rpc.py nvmf_remove_ns <nsid>
# 移除监听
./scripts/rpc.py nvmf_subsystem_remove_listener nqn.2016-06.io.spdk:cnode1 -t rdma -a 192.168.246.130 -s 4420

配置 SPDK NVMe over RDMA Host 端

Host 端 ip:192.168.246.129

运行 nvmeof-setup.sh 脚本部署 RDMA Soft-RoCE

SPDK 初始化

发现 Target 并连接(与 SPDK 无关)

这一步执行的是 nvme-cli 的命令,需要经过 kernel 驱动,而 SPDK 是用户态驱动。可以直接跳过这一步直接运行 SPDK 的应用程序。

简单测试

测试结果图:

这里测试结果的值较低,可能是因为虚拟机的缘故?

取消连接(与 SPDK 无关)

如果执行了前面的 nvme connect 命令连接设备,则这里执行 nvme disconnect 命令取消连接。

恢复内核态驱动




本站采用 Volantis 主题设计