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-oF subsystem下的namespace。这些namespace是可共享的。如下图所示:

640?wx_fmt=jpeg

图 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子系统。如下图所示:

640?wx_fmt=jpeg

图 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服务。


送!京东电子卡

活动规则:带文字将本文转发至朋友圈,并将截图发至公众号后台,小编将随机抽取四位幸运读者:

一等奖1名,送50元京东电子卡

二等奖1名,送30元京东电子卡

三等奖2名,送10元京东电子卡

领取方式:后台发送卡号及卡密。

 推荐阅读 

640?wx_fmt=png
640?wx_fmt=jpeg

-长按关注-

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值