实锤,PBlaze5实力演绎multiple namespaces 功能(下)

48 篇文章 14 订阅

上篇文章介绍了一系列的基础概念,并对Multiple namespaces的一些基本使用方法进行了介绍。这篇文章将继续讨论Multiple namespaces的优势,并以PBlaze5为例解读Multiple namespaces的使用和配置。

为什么要用 Multiple Namespaces

看起来用法并不难,那么使用Multiple Namespaces有什么好处呢?简单罗列几个场景:

  • 控制逻辑范围
    可以在创建namespace时,确定利用的逻辑块的范围,有效控制用户空间大小,甚至达到扩大OP,增加寿命的效果。
  • 独立无扰
    多个namespace之间的format格式、逻辑地址、IO路径都是相互独立的。比如,
    nvme0n1 format成512B的,nvme0n2 format成4096B的完全没问题;
    nvme0n3支持数据保护,nvme0n4不支持数据保护,OK;
    nvme0n5做共享namespace,nvme0n6做私有namespace,也OK;

    IO在每个namespace上都是相对独立,互不干扰的,每个namespace的使用者都可以从0开始读写,但之间没有任何干扰,数据没有交集。放心大胆的trim一个namespace,另一个namespace继续读写,高枕无忧。
  • Dual Port
    multiple namespaces的private/shared namespace可以和双端口结合,成为双端口+多命名空间应用场景,给上层应用提供更多可能。这也是PBlaze5的一个重要的功能。
    multiple namespaces的private/shared namespace可以和双端口结合,成为双端口+多命名空间应用场景,给上层应用提供更多可能。这也是PBlaze5的一个功能。如下图所示,NS A是portx的private namespace,NS C是porty的private namespace, NS B是portx和porty的shared namespace。
    在这里插入图片描述
    双端口 + Multiple namespaces
    双端口 + Multiple namespaces
    双端口与 Multiple namespace 结合之后,portx 可以访问 NS A 和 NS B,porty 可以访问 NS B 和 NS C,同时,portx 可以看到 NS C 但是不能访问它,porty 可以看到 NS A 但是不能访问它。可以说,我们从分开端口的角度对 MNS 多了一层保护和控制,我们从 MNS 的角度对端口多了一层扩展和保护,基于这两个功能的强强联合,为上层应用创造了更多高效安全的可能。

如何使用PBlaze5的multiple namespaces

既然 Multiple Namespaces 好处多多,让我们用起来吧,用法也不难,以 PBlaze5 为例,慢慢道来。
让我们先了解一下 NVMe 协议里关于 Multiple Namespaces 的几个概念。

  • NSID
    -每个 namespace 都拥有自己唯一的 NSID。NSID 有效范围:
    1 ~ NN。注:0无效。NN+1 ~ FFFFFFFEh无效。FFFFFFFFh表示广播。
    如下图所示:
    图 2 - NSID规则
  • Active、Inactive、Allocated、Unallocated
    不要蒙圈,这跟 namespace 的创建和使用有关。当使用 Namespace Management command 成功创建了namespace 之后,namespace 就是 Allocated 状态,表示这些逻辑块已经划给这个 NSID 的 namespace 了;那些没有创建没有分配的逻辑块和 NSID 就是 Unallocated,很好理解。
    但是 Allocated namespace 还不能IO,还需要使用 Namespace Attachment command 挂到某个 controller 上,成为 Active namespace 才可以。所以,Active NSID 就是已经创建并且已经挂到某个 controller 上的 namespace 的NSID。
  • Namespace Management command 和Namespace Attachment command
    NVMe协议规定了两个admin命令,Namespace Management和Namespace Attachment,用以创建、管理namespace等操作。另外,Identify命令中也有对namespace的支持,比如获取NSID列表、controller ID列表等。
    图 3 - NVMe 1.3协议中两个admin命令
    图 3 - NVMe 1.3协议中两个admin命令
    拿到一块支持multiple namespace的SSD,比如PBlaze5,用支持这两个admin命令的的工具,比如nvme-cli,就可以create、delete、list、attach、detach一个namespace了:
    图 4 -  nvme-cli中namespace命令
    图 4 - nvme-cli中namespace命令
    命令不多,支持的内容还是很丰富的。比如create-ns命令,可以设置这个namespace的大小、格式化格式、数据保护能力、共享能力等。又比如list-ns命令,可以列出某个NSID之后所有有效的NSID,并可以分别列出Active、Inactive的namespace,方便用户使用。再次声明,经过细致有效的测试,PBlaze5系列产品完全符合NVMe1.3协议之规定。
    再用PBlaze5举个例子 —— 创建namespace举例
    下面以在PBlaze5 U.2 4T上使用nvme-cli工具创建一个500GB的namespace为例。
    第一步,检查SSD上剩余空间是否足够创建目标namespace。使用Identify命令查看unvmcap的值可知剩余可分配容量,单位是Byte。
    图 5 -  使用Identify查询unvmcap
    图 5 - 使用Identify查询unvmcap
    第二步:计算创建 500GB 的 namespace,是多少个LBA。执行create-ns命令时,NSZE和NCAP的单位都是指 LBA的个数,lba count和user capacity的关系符合JEDEC218A,公式如下:
    user capacity = (lbacount- 21168) / 1953504 当LBA size是512B
    user capacity = (lbacount- 2646) / 244188 当LBA size是4096B
    那么,当想创建500GB的namespace,并且该namespace格式化为512B的sector size的话,size参数就设置为:21168 + 1953504 * 500 = 976773168。
    第三步:执行nvme create-ns /dev/nvme0 –s 976773168 –c 976773168 –f 0 –d 0 –m 1即可创建一个namespace。其中,-f 0设定了一个逻辑块的大小是512Byte,PBlaze5还支持4096B等。
    第四步:执行nvme attach-ns /dev/nvme0 –n 1 –c 1即可将这500GB的namespace挂到controller 1上,这是执行IO的先决条件。
    第五步:如果操作系统支持Namespace Attribute Notices,那么此时已经可以在系统中看到这个namespace并使用它了。
    图 6 -  创建500GB namespace举例
    图 6 - 创建500GB namespace举例
    经过两篇文章的讨论,可以发现Multiple namespaces是NVMe SSD一个非常基础而重要的功能,是对SSD不同存储单元进行差异化策略设置和操作的基础。现在PBlaze5已经开始全面支持Multiple namespaces功能,用户可以对不同的namespaces分别执行格式化等操作。未来基于Multiple namespaces还将有更多新的特性加入,用户管理NVMe SSD也更加方便。

下面是Memblaze的技术文章合集:
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值