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

SPDK NVMe-oF target多路功能介绍

基本概念

SPDK NVMe-oF target multi-path是基于NVMe协议的multi-path IO和namespace sharing功能。

NVMe multi-path IO指的是两个或多个完全独立的PCI Express路径存在于一个主机和一个命名空间。

而namespace 共享是两个或多个主机使用不同的NVMe控制器访问一个shared namespace。

Multi-path IO和namespace 共享需要NVM 子系统有两个以上的控制器。

两个主机同时访问一个shared namespace需要主机间的协调工作。

SPDK NVMe-oF target 的multi-path功能提供的是namespace的sharing功能。比如,多个客户端通过交换机能够同时发现,连接和操作SPDK NVMe-oFsubsystem下的namespace。这些namespace是可共享的。如图所示

图 1 SPDK NVMe-oF target namespace共享示例

NVMe-oF host1和host2能够同时通过交换机发现和连接到监听地址为192.168.12.11的SPDK NVMe-oF target subsystem1。两个host端可以同时对subsystem1下的namespace进行操作。

如果namespace不能共享,那么同时只能有一个NVMe-oF host连接到SPDK NVMe-oF target。

具体查看方法:

1. 运行SPDK NVMe-oF target 在目标机器端,子系统配置如下:

[Subsystem1]
  NQN nqn.2018-07.io.spdk:cnode1
  Listen RDMA 192.168.12.11:4420
  AllowAnyHost Yes
  Host nqn.2016-06.io.spdk:init
  SN SPDK00000000000001
  MaxNamespaces 20
  Namespace Nvme0n1

2. 在客户端机器运行nvme命令发现和连接SPDK NVMe-oF target, 命令如下:

nvme discover -t rdma -a 192.168.12.11 -s 4420
nvme connect -t rdma -n "nqn.2016-06.io.spdk:cnode1" -a 192.168.12.11 -s 4420

3. 运行nvme id-ns命令, 参数是完整的nvme设备名, 比如/dev/nvme0n1:

nvme id-ns /dev/nvme0n1

在结果中, 我们就能看到如下内容:

nmic    : 0x1

nmic是Namespace Multi-Path I/O and Namespace sharing Capabilities的缩写。该值为1, 就表明这个namespace处于共享状态。

使用场景

在实际使用环境中,可以让SPDK NVMe-oF target子系统同时监听两个IP地址。客户端机器可以通过两个IP地址同时连接SPDK NVMe-oF target子系统。这样如果一个IP连接出现问题,比如网卡出现故障, 可以使用另外一个IP连接访问SPDK NVMe-oF target子系统。如下图所示:

图 2 使用多网络端口访问同一个subsystem

NVMe-oF host端使用192.168.11.0/24和192.168.12.0/24连接到SPDK NVMe-oF target的同一个subsystem。如果192.168.11.0/24的连接出现问题, 我们可以使用192.168.12.0/24的连接, 反之亦然。

具体操作步骤如下:

1. 运行SPDK NVMe-oF target 在目标机器端, 子系统配置如下:

[Subsystem1]
NQN nqn.2016-06.io.spdk:cnode1
Listen RDMA 192.168.11.11:4420
Listen RDMA 192.168.12.11:4420
AllowAnyHost Yes
Host nqn.2016-06.io.spdk:init
SN SPDK00000000000001
MaxNamespaces 20
Namespace Nvme0n1
Namespace Nvme1n1
Namespace Nvme2n1

2. 在客户机,首先查看一下系统的Linux 内核版本及配置。

从Linux 4.15开始,nvme驱动支持multipath功能。 但是需要在编译内核的时候,将NVME_MULTIPATH功能打开。接下来的步骤都是基于4.15以上的带有NVME_MULTIPATH功能的Linux内核。

运行如下命令发现SPDK NVMe-oF target子系统。

nvme discover -t rdma -a 192.168.11.11 -s 4420
nvme discover -t rdma -a 192.168.12.11 -s 4420

两个命令有相同的输出:

Discovery Log Number of Records 2, Generation counter 5
=====Discovery Log Entry 0======
trtype:  rdma
adrfam:  ipv4
subtype: nvme subsystem
treq:    not specified
portid:  0
trsvcid: 4420
subnqn:  nqn.2016-06.io.spdk:cnode1
traddr:  192.168.12.11
rdma_prtype: not specified
rdma_qptype: connected
rdma_cms:    rdma-cm
rdma_pkey: 0x0000
=====Discovery Log Entry 1======
trtype:  rdma
adrfam:  ipv4
subtype: nvme subsystem
treq:    not specified
portid:  1
trsvcid: 4420
subnqn:  nqn.2016-06.io.spdk:cnode1
traddr:  192.168.11.11
rdma_prtype: not specified
rdma_qptype: connected
rdma_cms:    rdma-cm
rdma_pkey: 0x0000

3. 然后使用如下命令连接到子系统。

nvme connect -n nqn.2016-06.io.spdk:cnode1 -t rdma -a 192.168.11.11
nvme connect -n nqn.2016-06.io.spdk:cnode1 -t rdma -a 192.168.12.11

4. 运行”nvme list”命令可以得到如下结果。

Node             SN                   Model                                    Namespace Usage                      Format           FW Rev
---------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- --------
/dev/nvme0n1     SPDK00000000000001   SPDK bdev Controller                     1           2.00  TB /   2.00  TB    512   B +  0 B   18.10
/dev/nvme0n2     SPDK00000000000001   SPDK bdev Controller                     2           1.60  TB /   1.60  TB    512   B +  0 B   18.10
/dev/nvme0n3     SPDK00000000000001   SPDK bdev Controller                     3         800.17  GB / 800.17  GB    512   B +  0 B   18.10

这样我们就可以在两条路径上对磁盘进行操作。如果没有使用Linux内核的nvme multipath功能,运行”nvme list”命令会得到6个node, 因为每条路径3个node,总共2条路径。我们同样也能采用传统的multipath服务,来实现host端的multipath功能。本文不讨论如何使用传统的multipath服务。

原文链接:https://blog.csdn.net/weixin_37097605/article/details/101514526

更多DPDK学习资料有需要的可以自行添加进入学习交流君 羊 793599096 免费获取,或自行报名学习,免费订阅,永久学习,关注我持续更新哦!!!

学习地址:http://ke.qq.com/course/5066203?flowToken=1043717

相关文章:

  • Python网络爬虫简介与环境配置
  • Spring MVC注解Controller源码流程解析--映射建立
  • 三天搞定毕业设计~高校教师数据管理系统
  • matlab神经网络求解最优化,matlab神经网络应用设计
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • Jackson公司蛋白质电印迹方法确认蛋白质转移
  • (附源码)springboot工单管理系统 毕业设计 964158
  • 五金机电行业智能渠道商管理平台搭建,构建数字化渠道管理新模式
  • 使用kubeadm安装kubernetes 集群v1.24之前(后附一键安装脚本)
  • 线性代数 --- 向量的长度
  • 计算机毕业设计ssm软件项目Bug管理系统612ed系统+程序+源码+lw+远程部署
  • Spring——Spring核心基于注解方式的DI实现IoC的设计思想-搭建三层架构项目样例
  • 排序算法重点总结
  • 【详解】Python基础操作之os模块常用命令
  • 计算机毕业设计ssm软件学院社团管理系统l62lq系统+程序+源码+lw+远程部署
  • [译]CSS 居中(Center)方法大合集
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • JavaScript新鲜事·第5期
  • MySQL主从复制读写分离及奇怪的问题
  • npx命令介绍
  • pdf文件如何在线转换为jpg图片
  • redis学习笔记(三):列表、集合、有序集合
  • SAP云平台里Global Account和Sub Account的关系
  • SpriteKit 技巧之添加背景图片
  • tab.js分享及浏览器兼容性问题汇总
  • Vue官网教程学习过程中值得记录的一些事情
  • Vue全家桶实现一个Web App
  • Zsh 开发指南(第十四篇 文件读写)
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 第十八天-企业应用架构模式-基本模式
  • 工程优化暨babel升级小记
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 使用putty远程连接linux
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • #微信小程序:微信小程序常见的配置传值
  • (function(){})()的分步解析
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (十八)SpringBoot之发送QQ邮件
  • (实战篇)如何缓存数据
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (转)iOS字体
  • .net/c# memcached 获取所有缓存键(keys)
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • .NET上SQLite的连接
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作
  • .net专家(高海东的专栏)
  • [2019.3.5]BZOJ1934 [Shoi2007]Vote 善意的投票
  • [Android]Tool-Systrace