NVMe-oF 1.1规范:多路径、非对称命名空间和NVMe/TCP

这篇具有很好参考价值的文章主要介绍了NVMe-oF 1.1规范:多路径、非对称命名空间和NVMe/TCP。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

提到NVMe over Fabric,我就会想到它的几种应用场景:

1、 存储阵列到主机的网络连接(替代FC、iSCSI等);

2、 服务器、本地NVMe存储解耦(跨机箱/JBOF),SSD存储资源池化共享;

3、 分布式存储/超融合系统内部互连?

关于上面第3点,对技术专家来说应该早有答案,而我会在下文中写出自己的理解和分析,班门弄斧还望大家多指正。

首先,我们来看看当初新闻里宣布的NVMe-oF 1.1主要特性:

  • TCP transport supports NVMe-oF on current data center TCP/IP network infrastructure.
  • Asynchronous discovery events inform hosts of addition or removal of target ports in a fabric-independent manner.
  • Fabric I/O Queue Disconnect enables finer grain I/O resource management.
  • End-to-end (command to response) flow control improves concurrency.

我想先聊下这次被正式加入规范的NVMe/TCP。

NVMe/TCP加入、网卡卸载的重要性

NVMe-oF 1.1规范:多路径、非对称命名空间和NVMe/TCP,# 介质专栏,nvmeof

与之前的1.0版一样,NVMe over FC protocol (FC-NVMe) 在新规范里的篇幅还是一点点,却仍被排在3种传输协议层的头一个。原因不难想到——那就是光纤通道(Fibre Channel)存储网络的已有投资、用户群,包括SAN交换机和HBA卡等,以及相对更早、更成熟的应用,比如Dell EMC PowerMax等全闪存阵列。

NVMe-oF 1.1规范:多路径、非对称命名空间和NVMe/TCP,# 介质专栏,nvmeof

NVMe over Fabric跑在RDMA协议层上可以有3种选择:iWARP、InfiniBand和RoCE,其中IB主要集中应用于HPC领域、iWARP普及的不太乐观,而RoCE的主导和领先者也是Mellanox。

NVMe-oF 1.1规范:多路径、非对称命名空间和NVMe/TCP,# 介质专栏,nvmeof

上面我引用了2018年5月一篇The Register记者的采访文章《CTO观点:关于FC-NVMe与NVMe-oF的那些事儿》,当然今天的情况应该会更乐观。

NVMe-oF 1.1规范:多路径、非对称命名空间和NVMe/TCP,# 介质专栏,nvmeof

上图中的PDUs是Protocol Data Units(协议数据单元)的缩写,我想这张图不用解释大家也能看懂。

根据我看到的信息,NVMe/TCP并不是在所有的网卡上都能跑出比较理想的性能。这个有点像早期的iSCSI和FCoE,纯软件支持会比较差一些,推荐使用驱动/Firmware支持NVMe/TCP硬件卸载的网卡。

NVMe-oF 1.1规范:多路径、非对称命名空间和NVMe/TCP,# 介质专栏,nvmeof

在《VMware vSAN下一目标:NVMe-oF存储扩展?》中我曾列出过上面这张图,Lightbits使用一张FPGA卡来跑NVMe/TCP target和全局FTL等数据服务。这个要想大规模普及,估计离不开initiator端网卡的优化支持。

如今vSAN对NVMe-oF的支持还没有正式宣布,前文中我介绍过2种具体的技术实现方式:

使用RoCE连接JBOF SSD扩展柜

使用NVMe/TCP连接lightbits闪存“阵列”

除了vSAN之外,对于更多的分布式存储/Server SAN和超融合(HCI)而言,NVMe-oF可以被用于计算资源与存储介质(SSD盘)之间的连接吗?在解释这一点之前,我们先来看看NVMe的另外2个新特性:

Multipath和ANA(Asymmetric Namespace Access)

NVMe-oF 1.1规范似乎简单了点,除了协议本身之外没有写更多的东西,所以这部分就要参考NVMe1.4规范了。

NVMe-oF 1.1规范:多路径、非对称命名空间和NVMe/TCP,# 介质专栏,nvmeof

上图是一个双控制器/双端口的NVM子系统示例,在EMC DSSD之后,使用PCIe直连服务器和存储阵列的应用估计寥寥无几,所以该子系统基本上代表了双端口NVMe SSD 和JBOF机箱的设计。比如这里的NS(NameSpace)B,就可以通过2个NVMe控制器同时提供前端访问。

NVMe-oF 1.1规范:多路径、非对称命名空间和NVMe/TCP,# 介质专栏,nvmeof

系统的规模再大点,就不是只靠双端口SSD能解决了。多主机通过多个NVMe控制器来访问同一个SSD命名空间,我理解这里的Namespace就类似于传统存储的(SCSI)LUN,而控制器和NVMe盘之间应该会有PCIe Switch。

上图中Host A对NSID 1的访问就有2个路径。具体到4个Controller,可能是x86“刀片”、FPGA或者像Mellanox Bluefield、Broadcom StingrayPS1100R那样的SoC“智能网卡”。

至于什么是Asymmetric Namespace Access(ANA,非对称命名空间访问)呢?这有点让我想起了传统存储阵列的ALUA(Asymmetric LogicalUnit Access)。

NVMe-oF 1.1规范:多路径、非对称命名空间和NVMe/TCP,# 介质专栏,nvmeof

如上图,我理解NVMe Controller 1和2可能位于同一模块或者机箱内,而NVMe Controller 3位于另一模块/机箱。这时如果是PCIe Fabric,虚线两边应该拥有各自的PCIe Switch,之间又有互通。举例来说,SSD Namespace B和D同时连接到3个NVMe控制器,位于左边的Controller 1和2访问性能效率应该较高,而Controller 3不是最优路径。

我注意到NS B和D被划在了一个ANA Group,这个感觉也比较像传统存储的LUN分组,包括分配/解除映射、路径策略切换、QoS等操作都可以统一发起。如果存储软件支持快照等高级特性,创建时间点一致的快照可能也会调用这个ANA Group吧。

如果用基于RDMA或者TCP以太网的NVMe Fabric,情况会比PCIe要复杂一些,毕竟系统拓扑的规模也增大了,但原理应该和上面这个基本相同。

分布式存储/超融合支持NVMe-oF的要点

最后是前面留下的那个问题,NVMe规范对SSD的管理粒度只到NameSpace,而大多数对等节点的分布式存储/超融合都需要将底层磁盘(闪存)空间打散成更小粒度的数据块,这时就需要底层有个文件系统或者类似的对象组织结构,读写时产生的跨节点数据操作一般应该是通过私有协议来实现。

NVMe-oF 1.1规范:多路径、非对称命名空间和NVMe/TCP,# 介质专栏,nvmeof

那么vSAN在计划中之所以能支持NVMe-oF,应该是将计算节点与JBOF/Lightbits解耦的原因,服务器节点更像是SDS管理网关的感觉。同时带有本地盘的服务器节点也能一起组成异构集群。

NVMe-oF 1.1规范:多路径、非对称命名空间和NVMe/TCP,# 介质专栏,nvmeof文章来源地址https://www.toymoban.com/news/detail-786843.html

到了这里,关于NVMe-oF 1.1规范:多路径、非对称命名空间和NVMe/TCP的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 编码规范之命名规范

    前言: textcolor{Green}{前言:} 前言: 💞这个专栏就专门来记录一下寒假参加的第五期字节跳动训练营 💞从这个专栏里面可以迅速获得Go的知识 今天的笔记是昨天的补充,对编码规范中的命名规范进行总结。主要包含 变量的命名规范 、 函数的命名规范 、 包的命名规范 。通

    2024年02月10日
    浏览(27)
  • 写代码时候的命名规则、命名规范、命名常用词汇

    版权声明 这个大部分笔记是观看up主 红桃A士 的视频记录下来的,因为本人在学习的过程中也经常出现类似的问题,并且觉得Up主的视频讲解很好,做此笔记反复学习,若有侵权请联系删除,此推荐视频地址:【改善丑陋的代码】 https://www.bilibili.com/video/BV1844y1N7S8/p=28share_sou

    2024年02月10日
    浏览(38)
  • 【C++】命名空间 namespace 与 标准流 iostream ( 命名空间概念简介 | 命名空间定义 | 命名空间使用 | iostream 中的命名空间分析 )

    命名空间 namespace 又称为 名字空间 , 名称空间 , 名域 , 作用域 , 是 C++ 语言 对 C 语言 的扩展 之一 ; C++ 中的 命名空间 namespace 指的是 标识符 的 可见范围 , C++ 标准库中的 所有 标识符 , 都定义在 std 命名空间中 ; 命名空间 英文名称是 \\\" namespace \\\" , name 是 名字 , 名称 的意思 ,

    2024年02月12日
    浏览(32)
  • 数据库表设计(一):字段设计规范和命名规范

    1.1.是否需要自增ID? 数据库表,一定要有id,而且要用自增id! 有些人喜欢用自定义的,用UUID或者其他七七八八的id,如果在架构设计,代码比较好的情况下,不会出啥大问题,但是一旦代码写的不行,极有可能就造成id重复之类的问题。 自增id另外还有一个好处,就是在数

    2023年04月08日
    浏览(89)
  • 命名规范,进制

    包名小写 类名或者接口明,所有单词首字母大写。大驼峰命名法 方法名和方法名,第一个单词小写,后面的单词首字母大写。小驼峰命名法 简称驼峰法 常量,所有的字母大写,单词之间用_线连接 二进制 0b或者0B开头 如: int n1 = 0b1010; 八进制 以0开头 如:int n2 = 01010; 十进制

    2024年02月09日
    浏览(25)
  • git分支命名规范

    格式: master 功能概述: 永远是可用的稳定版本,不能直接在该分支上开发。 1.开发主分支 格式: dev 功能概述: 所有新功能以这个分支来创建自己的开发分支,该分支只做合并操作,不能直接在该分支上进行开发。 2.功能开发分支 格式: feature-{功能描述}-{姓名拼音首字母连写}

    2024年02月12日
    浏览(28)
  • SQL sever命名规范

    目录 一、标识符 二、表名(Table): 三、字段名(fields): 四、约束(Constraint): 五、索引(Index): 六、存储过程(Stored Procedure): 七、函数(Function): 八、触发器(Trigger): 九、视图(View): 十、大小写       在生活实际工作中,常需要在SQL sever数据库中开发一

    2024年02月09日
    浏览(28)
  • Python的命名规范

    python变量名区分大小写,也就是Student和student在python语言中代表两个不同的名字。 也就是说,student_id、student1、student_1、student、_student、_等都是合理的命名,但是1student就是非法的命名。 python变量命名一般采用蛇形命名法(毕竟python的本意就是大蟒蛇),也就是如果变量名由

    2024年02月09日
    浏览(27)
  • 数仓命名规范大全!

    01 数据分层 一、数据运营层:ODS(Operational Data Store) ODS层,是最接近数据源中数据的一层,为了考虑后续可能需要追溯数据问题,因此对于这一层就不建议做过多的数据清洗工作,原封不动地接入原始数据即可,至于数据的去噪、去重、异常值处理等过程可以放在后面的DWD层

    2024年02月13日
    浏览(31)
  • 数据仓库命名规范详解

    养成良好的编程习惯 写出清楚、易懂、易维护的程序代码 提高代码质量与沟通效率 减少编码中的不必要的错误 (1)数据仓库命名规范 (2)表命名规范 (3)字段命名规范 (4)字段类型规范 (1)数据仓库命名规范 (2)表命名规范 命名全部采用小写字母和数字构成,只能

    2024年02月02日
    浏览(87)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包