为了部落:NVMe over Fabric诞生记(协议细节及市场现状篇)

2023-10-14 11:20

本文主要是介绍为了部落:NVMe over Fabric诞生记(协议细节及市场现状篇),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前序文章阅读:

《为了部落:NVMe over Fabric诞生记》

《为了部落:NVMe over Fabric诞生记——RDMA篇》

对于NVMe over Fabrics协议来说,要解决下面几个问题:

  1. 提供对于不同互联透明的消息和数据的封装格式。
  2. 将NVMe进行操作所需要的接口方式映射到互联网络。
  3. 解决互联网络的节点发现、多路径等互联引入的新问题。

针对数据封装,协议定义了一整套封装方案。与传统的NVMe协议相比,这套封装方案针对互联做了一些调整和适配。NVMe定义了一套异步的由软件驱动硬件执行相应动作的异步操作机制,发送和完成包仅仅携带必要的描述,而真正的数据和SGL描述符都是放在内存中并且由硬件通过DMA方式取得的。

这是基于PCIe的DMA操作延迟很短(1us)的前提而设计的。在互联协议中,节点之间的交互时间大大增加,为了降低两个节点之间不必要的交互,发送请求可以直接携带附加的数据或SGL描述符,完成请求也可以携带需要回传的数据,节约了两者之间交互的负担。


与此同时,为了节约系统交互,在NVMe over Fabrics协议中,完成队列没有使用流控机制,因此需要接收端有足够容纳所有已经发出去的命令的完成队列空间,来容纳所有完成请求。
一次IO的传输过程如下图所示:
  1. Initiator端驱动程序封装发送请求并派发给硬件。
  2. Initiator端硬件将发送请求发到Target端的发送队列。
  3. Target端控制器处理完成IO请求,并准备出来完成请求派发给硬件。
  4. Target端硬件将完成请求发到Initiator端的接收队列。
由于发送请求和完成请求可以直接携带数据,从而降低互联中消耗的交互时间。如果不需要请求中携带数据,也可以由Target端在过程中直接从Initiator端获得相应的数据,如下图所示。

通过上述机制,NVMe over Fabrics协议实现了对于NVMe协议的命令和数据传输的扩展。普通的NVMe命令都可以通过这套机制映射,NVMe的标准命令摇身一变,就成为了互联协议的命令。不过还是有一些场景是需要特殊考虑的,为了支持这些场景,协议扩展了NVMe命令,增加了与互联相关的5个命令:Connect,Property Get/ Set,Authentication Send/ Receive。Authentication Send/ Receive主要用于做Initiator端和Target端的安全协议的传递,服从SPC-4。下面重点说一说Connect和Property Get/ Set。
在NVMe over Fabrics协议中,约定每个发送队列都与一个接收队列对应,不允许多个发送队列使用同一个接收队列。发送接收队列对是通过Connect命令来创建的。Connect命令携带有Host NQN,NVM Subsystem NQN和Host Identifier信息,并且可以指定连接到一个静态的控制器,或者连接到一个动态的控制器。一个主机可以通过不同的Host NQN或不同的Fabric Port建立到一个NVM Subsystem的多重连接。这种灵活性赋予了NVMe over Fabrics极大的灵活性。按照协议规定,同一个控制器的所有发送接收队列对既可以共享底层的互联通道,也可以分别独占一格底层互联通道,方便根据传输层的特点来进行灵活的选择。

在NVMe协议中,控制器是一个代表与主机进行沟通的接口实体。由于PCIe协议是一种树状拓扑结构,因此一旦控制器所处的PCIe Port定下来后,接口所关联的控制器就完全定下来了。而对于NVMe over Fabrics协议来说,一个Fabric的Port可以嵌入多个控制器,因此根据需要不同,可以选择实现静态控制器或动态控制器。动态控制器是一种简单的模型,适用于对主机具有相同的服务特性的需求。静态控制器则适用于有不同需要的场景,Initiator可以查询了解一个Fabric Port内部包含的静态控制器各自的能力,然后选择连接到指定的控制器以满足自身的需要。

在经典的NVMe协议中,PCIe空间的BAR0(BAR1)描述了一段内存空间用于对控制器进行基本的寄存器级别的配置。由于Fabrics结构没有等效的实现,因此NVMe over Fabrics协议定义了Property Get/ Set分别表示对于控制器端的寄存器读取和写入动作。

至此,NVMe的标准操作就完全被准确和高效地映射成互联网络所对应的使用方式了。为了能满足互联网络的发现机制,NVMe over Fabrics协议定义了发现服务,用于让Initiator主动发现NVM Subsystem和对应的可访问的名字空间。这个服务还同时用于支持多路径功能。该功能依赖于一个特殊的配置成支持发现服务的NVMe Subsystem。Initiator可以连接到该服务器并使用Discovery Log Page命令来获取可用的资源。

与NVMe over Fabrics协议一同发布的,还有一份在Linux平台上实现的基于RDMA和FC传输层的NVMe协议的Initiator和Target端的参考代码。这份代码不仅仅包含了协议的驱动实现,也包含了对应的CLI工具和Linux OS集成支持。相信对整个生态圈来说这会是一个良好的开端。在刚刚落下帷幕的DCTC2016数据中心技术大会中,我们也看到了业界对于此方案的良好的兴趣。其中Broadcom高级架构师Frankie介绍了下一代NVMe Over Fabrics 存储架构、以太网控制器及 SoC的设计。Xilinx的展示更加直接揭示了借助Xilinx的FPGA的硬件加速,NVMe over Fabrics在RoCE网络上提供了仅有10us的极低延迟时延。

可以说,行业的热情是对于NVMe over Fabrics协议的最好的回应。可以预见,随着Flash成本的持续下降和集成密度的持续增加,随着新型基于相变存储的存储介质的出现和应用,随着业界对于闪存定义存储和存储虚拟化的需求的强化,NVMe over Fabrics必将在高性能存储以及数据中心中发挥越来越大的价值。

这篇关于为了部落:NVMe over Fabric诞生记(协议细节及市场现状篇)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/210140

相关文章

从戴尔公司中国大饭店DTF大会,看科技外企如何在中国市场发展

【科技明说 | 科技热点关注】 2024戴尔科技峰会在8月如期举行,虽然因事未能抵达现场参加,我只是观看了网上在线直播,也未能采访到DTF现场重要与会者,但是通过数十年对戴尔的跟踪与观察,我觉得2024戴尔科技峰会给业界传递了6大重要信号。不妨简单聊聊:从戴尔公司中国大饭店DTF大会,看科技外企如何在中国市场发展? 1)退出中国的谣言不攻自破。 之前有不良媒体宣扬戴尔将退出中国的谣言,随着2

【Linux】应用层http协议

一、HTTP协议 1.1 简要介绍一下HTTP        我们在网络的应用层中可以自己定义协议,但是,已经有大佬定义了一些现成的,非常好用的应用层协议,供我们直接使用,HTTP(超文本传输协议)就是其中之一。        在互联网世界中,HTTP(超文本传输协议)是一个至关重要的协议,他定义了客户端(如浏览器)与服务器之间如何进行通信,以交换或者传输超文本(比如HTML文档)。

SprinBoot+Vue网络商城海鲜市场的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平台Java领域优质创作者,全网30w+

【Go】go连接clickhouse使用TCP协议

离开你是傻是对是错 是看破是软弱 这结果是爱是恨或者是什么 如果是种解脱 怎么会还有眷恋在我心窝 那么爱你为什么                      🎵 黄品源/莫文蔚《那么爱你为什么》 package mainimport ("context""fmt""log""time""github.com/ClickHouse/clickhouse-go/v2")func main(

2024.9.8 TCP/IP协议学习笔记

1.所谓的层就是数据交换的深度,电脑点对点就是单层,物理层,加上集线器还是物理层,加上交换机就变成链路层了,有地址表,路由器就到了第三层网络层,每个端口都有一个mac地址 2.A 给 C 发数据包,怎么知道是否要通过路由器转发呢?答案:子网 3.将源 IP 与目的 IP 分别同这个子网掩码进行与运算****,相等则是在一个子网,不相等就是在不同子网 4.A 如何知道,哪个设备是路由器?答案:在 A

Modbus-RTU协议

一、协议概述 Modbus-RTU(Remote Terminal Unit)是一种基于主从架构的通信协议,采用二进制数据表示,消息中的每个8位字节含有两个4位十六进制字符。它主要通过RS-485、RS-232、RS-422等物理接口实现数据的传输,传输距离远、抗干扰能力强、通信效率高。 二、报文结构 一个标准的Modbus-RTU报文通常包含以下部分: 地址域:单个字节,表示从站设备

vscode中使用go环境配置细节

1、在docker容器中下载了go的sdk 2、在/etc/profile.d/go.sh里填入如下内容: #!/bin/bashexport GOROOT=/home/ud_dev/goexport PATH=$GOROOT/bin:$PATH  3、设置go env go env -w GOPROXY=https://goproxy.cn,directgo env -w GO

网络原理之TCP协议(万字详解!!!)

目录 前言 TCP协议段格式 TCP协议相关特性 1.确认应答 2.超时重传 3.连接管理(三次握手、四次挥手) 三次握手(建立TCP连接) 四次挥手(断开连接)  4.滑动窗口 5.流量控制 6.拥塞控制 7.延迟应答 8.捎带应答  9.基于字节流 10.异常情况的处理 小结  前言 在前面,我们已经讲解了有关UDP协议的相关知识,但是在传输层,还有

使用WebP解决网站加载速度问题,这些细节你需要了解

说到网页的图片格式,大家最常想到的可能是JPEG、PNG,毕竟这些老牌格式陪伴我们这么多年。然而,近几年,有一个格式悄悄崭露头角,那就是WebP。很多人可能听说过,但到底它好在哪?你的网站或者项目是不是也应该用WebP呢?别着急,今天咱们就来好好聊聊WebP这个图片格式的前世今生,以及它值不值得你花时间去用。 为什么会有WebP? 你有没有遇到过这样的情况?网页加载特别慢,尤其是那

DNS协议基础笔记

1.定义 DNS(Domain Name System,域名系统)是互联网的一项核心服务,它作为将域名和 IP 地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。 2.域名解析过程 当用户在浏览器中输入一个域名,浏览器首先会检查自己的缓存中是否有该域名对应的 IP 地址。本地 DNS 服务器收到查询请求后,首先会检查自己的缓存中是否有该域名对应的 IP 地址。根域名服务器收到查询请