当前位置: 首页 > news >正文

SPDK NVMe of RDMA 部署

使用SPDK NVMe of RDMA 实现多NVMe设备共享

一、编译、安装spdk

1.1、下载

1.1.1 下载spdk源码
首先,我们需要从GitHub上克隆SPDK的源码仓库。打开终端,输入以下命令:

git clone -b v22.01 https://github.com/spdk/spdk.git
cd spdk

1.1.2 下载子模块

接下来,我们需要初始化并更新SPDK的子模块。

git submodule update --init

1.1.3 安装依赖

为了确保编译过程顺利进行,我们需要安装SPDK所需的依赖项。运行以下命令来自动安装这些依赖:

sudo ./scripts/pkgdep.sh

1.1.4 编译

现在,我们开始编译SPDK。

./configure --with-rdma --with-shared
sudo make

1.1.5 执行单元测试

编译完成后,我们需要运行单元测试来验证SPDK是否安装成功。

./test/unit/unittest.sh

最后如果输出 all unit test passed,代SPDK安装成功

在这里插入图片描述

1.2、配置设备

1.2.1 绑定设备

在开始之前,我们需要将NVMe设备绑定到SPDK。运行以下命令来完成绑定:

sudo scripts/setup.sh# 正确结果:
# 0000:0b:00.0 (15ad 07f0): nvme -> uio_pci_generic# 查看状态
sudo ./scripts/setup.sh status# 解绑设备
sudo ./scripts/setup.sh reset

在这里插入图片描述

0000:b4:00.00000:b5:00.0是设备编号,下面会用到

二、服务端配置

  1. 启动 nvmf_tgt

在服务端,我们需要启动nvmf_tgt来提供NVMe over Fabrics服务。打开一个新的终端,运行以下命令:

build/bin/nvmf_tgt

终端将输出类似以下的内容:

[zhousk@slave02 spdk]$ build/bin/nvmf_tgt -i 0
[2025-04-28 19:26:00.347292] Starting SPDK v22.01 git sha1 47737f1 / DPDK 21.11.0 initialization...
[2025-04-28 19:26:00.347451] [ DPDK EAL parameters: [2025-04-28 19:26:00.347487] nvmf [2025-04-28 19:26:00.347515] -c 0x1 [2025-04-28 19:26:00.347543] --log-level=lib.eal:6 [2025-04-28 19:26:00.347567] --log-level=lib.cryptodev:5 [2025-04-28 19:26:00.347623] --log-level=user1:6 [2025-04-28 19:26:00.347651] --base-virtaddr=0x200000000000 [2025-04-28 19:26:00.347709] --match-allocations [2025-04-28 19:26:00.347737] --file-prefix=spdk0 [2025-04-28 19:26:00.347789] --proc-type=auto [2025-04-28 19:26:00.347815] ]
EAL: No available 1048576 kB hugepages reported
EAL: No free 2048 kB hugepages reported on node 1
TELEMETRY: No legacy callbacks, legacy socket not created
[2025-04-28 19:26:00.532151] app.c: 601:spdk_app_start: *NOTICE*: Total cores available: 1
[2025-04-28 19:26:00.673833] reactor.c: 943:reactor_run: *NOTICE*: Reactor started on core 0
[2025-04-28 19:26:00.673911] accel_engine.c: 510:spdk_accel_engine_initialize: *NOTICE*: Accel engine initialized to use software engine.
  1. 在另一个终端,使用rpc.py脚本来配置NVMe over Fabrics
# 1. 启动 RDMA
scripts/rpc.py nvmf_create_transport -t RDMA -u 8192 -i 131072 -c 8192# 2. 将 NVMe 控制器附加到 SPDK 的块设备层
# 0000:b4:00.0 是上文的 BDF
./scripts/rpc.py bdev_nvme_attach_controller -b NVMe1 -t PCIe -a 0000:b4: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.200.202 -s 4420 -f ipv4# 获取 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.200.202 -s 4420
  1. 获取 subsystem 信息
./scripts/rpc.py nvmf_get_subsystems

输出下面这些信息

[{"nqn": "nqn.2014-08.org.nvmexpress.discovery","subtype": "Discovery","listen_addresses": [],"allow_any_host": true,"hosts": []},{"nqn": "nqn.2016-06.io.spdk:cnode1","subtype": "NVMe","listen_addresses": [{"transport": "RDMA","trtype": "RDMA","adrfam": "IPv4","traddr": "192.168.200.202","trsvcid": "4420"}],"allow_any_host": true,"hosts": [],"serial_number": "SPDK00000000000001","model_number": "SPDK_Controller1","max_namespaces": 32,"min_cntlid": 1,"max_cntlid": 65519,"namespaces": [{"nsid": 1,"bdev_name": "NVMe1n1","name": "NVMe1n1","nguid": "35354A30581000030025384700000003","uuid": "35354a30-5810-0003-0025-384700000003"}]}
]

此时 nvmf_tgt 显示

[2025-04-28 19:26:24.621233] rdma.c:2668:nvmf_rdma_listen: NOTICE: *** NVMe/RDMA Target Listening on 192.168.200.202 port 4420 ***

这样就完成了!!!

三、客户端配置

在客户端,我们可以使用SPDK自带的测试工具来验证NVMe over Fabrics的配置是否成功。

./build/examples/perf -r 'trtype:RDMA adrfam:IPv4 traddr:192.168.200.202 trsvcid:4420' -q 128 -o 4096 -w read -t 10

在这里插入图片描述

http://www.xdnf.cn/news/358561.html

相关文章:

  • DNS DDoS攻击:网络世界中的“洪水猛兽”
  • Spring框架(1)
  • 双端口ram与真双端口ram的区别
  • COASWT区域海-气-浪耦合模式
  • SEMI E94-0200 PROVISIONAL SPECIFICATION FOR CONTROL JOB MANAGEMENT(控制作业管理暂行规范)
  • 从零打造企业级Android木马:数据窃取与远程控制实战
  • 从概念表达到安全验证:智能驾驶功能迎来系统性规范
  • golang -- 如何获取变量类型
  • uniapp-商城-47-后台 分类数据的生成(通过数据)
  • Eclipse SWT 1 等比缩放
  • 菜鸟之路Day30一一MySQL之DMLDQL
  • 常见降维算法分析
  • C++进阶--红黑树的实现
  • .NET高频技术点(持续更新中)
  • 适老化洗浴辅具产业:在技术迭代与需求升级中重塑银发经济新生态
  • Vue——Axios
  • 通信协议选型篇:如何根据项目需求选择合适的通信协议?
  • 线段树:数据结构中的超级英雄
  • kafka学习笔记(四、生产者、消费者(客户端)深入研究(三)——事务详解及代码实例)
  • 一、对linux驱动文件编写时结构认识与记录
  • A* (AStar) 寻路
  • 读取传感器发来的1Byte数据:分低位先行和高位先行的处理方法
  • 【iptables】--命令基本使用
  • Web 架构之数据读写分离
  • 配置Java Selenium Web自动化测试环境
  • 5.0.5 变换(旋转、缩放、扭曲)
  • 云手机解决方案
  • 图像匹配导航定位技术 第 11 章
  • 蓝桥杯青少 图形化编程(Scratch)编程题每日一练——小猫的城堡
  • 电动汽车充换电设施可调能力聚合评估与预测 - 使用说明文档