NVMe over Fabrics:概念、应用和实现

对于大部分人来说,NVMe over Fabrics(简称NVMf)还是个新东西,因为其第一个正式版本的协议在今年6月份才发布。但是这并不影响人们对NVMf的关注,因为这项依托于NVMe的技术很可能继续改变存储市场格局。

NVMf的贡献在于提供除PCIe外访问NVM的另一个途径-Fabrics,并且将fabrics链路在latency上增加的overhead维持在10us以内。来自NVMf spec的一张图清晰的展示了它的野心,围绕着NVMe的战场再一次扩大了。

提供fabrics途径后,可以在其他节点直接访问NVMe设备,那么最基本的应用就是替代传统的iSCSI,在闪存系统中导出NVMe。

NVMf以NVMe为基石,适配Fabrics场景,新增或删减了的一些Command、概念。

1,Host,Target和Transport

client端称作Host,处理client请求的部分称作Target端(连接物理NVMe设备),Host和Target之间使用NVMe命令交流。Transport是连接Host和Target的桥梁,可以是RDMA或者FC。在Fabrics传输过程中,NVMe命令会被相应的Transport代码封装(Capsule)和解析。

2,NVMe Subsystem,NVMe Namespace和Port

一个Subsystem就是一个NVMe子系统,Subsystem在target端,Host可以申请连接某个target的Subsystem。一个Port代表一个Transport资源。Subsystem必须和Namespace,Port建立关系,但是他们的联系又是很灵活的:即一个Subsystem可以包含多个Namespace,一个Namespace可以加入多个Subsystem,一个Port可以放入多个Subsystem。如下可以将一个NVMe Namespace放入两个Subsystem中形成Fabric多路径配置。

3,NVMe Subsystem中的NVMe Controller

在NVMe Subsystem中,NVMe Controller是一个虚拟的概念,但是具有NVMe协议规定的属性(如部分NVMe寄存器,NVMe Queue和处理NVMe Command)。当一个host接入Subsystem后,就会创建一个Controller对象。那么如何处理NVMe寄存器的访问呢?这就要涉及到NVMf定义的几个Command。

4,NVMf新增和删减Command

在NVMf下,Host和Target之间的传输舍弃了Doorbell的设计,删除了NVMe Queue Create等Admin Command。NVMe Queue的创建在构建Controller后就已经完成了。

NVMf协议新增加的Command如下图,其中Property用来访问NVMe Controller寄存器(仅限于有限的几个寄存器,如Controller Configuration),Connect用来连接Host与Controller的NVMe Queue,Authentication则用于权限管理。

5,NVMe Command的传输方式

Host和Target间的NVMe命令可以在Transport封装时将I/O 数据置于NVMe Command(64Bytes)之后,或者使用SGL表示。如果是前者,则target直接从offset处读取数据,如果是后者,则需要通过RDMA read获取数据(Transport为RDMA的情况下)。虽然声称使用SGL,但是无论是SPDK还是Kernel 实现的Target在提交给物理设备的时候都会转换成PRP,所以目前的NVMe SSD还无需担心由于无法处理SGL请求导致的问题。

NVMf的推广很大程度上要依赖于其代码的实现,好在从Linux Kernel 4.8开始就被收纳,目前只有RDMA一种Fabric Transport。接下来我们看看内核态NVMf的代码框架。

Host端,主要是Host端代码和非NVMf模式下Local NVMe的处理。不管是Host端,还是Local的请求都会经过Linux blk-mq再下发到物理NVMe设备。当然,在经过Fabrics前,I/O请求会先被封装成NVMe Command格式。

Target端,实现了两种Transport(Loopback和RDMA),用户设置通过configfs进行。在收到Host端的I/O请求后,Target也是经过blk-mq下发到物理设备(其实是通过submit_bio向Host端的Local NVMe代码发起请求,类似于文件系统的方式)。

SPDK也加入了NVMf阵营,实现了Target端的代码。由于SPDK天然的优势,Target端的I/O请求可以直接发给物理Controller(Direct模式下),并且按照NVMf的规定将物理Controller作为NVMf独占,在I/O路径和框架上看起来更简洁。

不过,值得一提的是,无论是SPDK还是内核NVMf,从Host端过来的NVMe Command都要被Target代码解析成普通的I/O Request发给PCIe NVMe代码处理,所以NVMf下无论是NVMe Queue还是NVMe Command都是相对于Subsystem和host之间而言。

说明

本文最先发布于公众号《存储技术最前线》,欢迎关注获取最新NVMe技术和资讯

参考资料

1, NVM Express over Fabrics Revision 1.0 spec

2, NVM Express Over Fabrics by Dave Minturn,Intel undle Openfabrics Alliance

3, Under the Hood with NVMe over Fabrics by Dave Minturn,Intel at SNIA forum

4, NVM Express Device Drivers by Uma M.Parepalli at FlashMemroy Summit

时间: 2024-10-26 21:23:55

NVMe over Fabrics:概念、应用和实现的相关文章

NVMe over Fabrics又让RDMA技术火了一把

RDMA是个什么鬼?相信大部分不关心高性能网络的童鞋都不太了解.但是NVMe over Fabrics的出现让搞存储的不得不抽出时间来看看这个东西,这篇文章就来介绍下我所了解的RDMA. RDMA(Remote Direct Memory Access)意为在远端直接访问主机的内存,而不需要主机参与.如下图,当主机和Client端都配备RDMA NIC的时候,数据通过NIC的DMA引擎直接在两端内存之间转移,而不需要经过OS的网络协议栈.这种技术对于局域网高带宽的存储系统非常有吸引力. 网络技术

NVMe over Fabrics 协议Discovery服务交互过程跟踪

Discovery服务过程跟踪 对于NVMe over Fabrics的subsystem,有两种类型:Discovery子系统和NVM子系统.这里介绍与Discovery子系统相关的交互内容(即:在Linux系统上使用nvme discover命令后的交互过程). Discovery子系统无Namespace存储空间,只响应相关的Fabric命令和Admin命令.这也就意味着主机与Discovery子系统只需要NVMe协议规格说明书中定义的Admin Submission Queue,而不需要

详谈NVMe和NVMe-oF基础架构新西兰45秒彩数据采集地址和概念

NVMe传输是一种抽象协议层,旨在提供新西兰45秒彩数据采集地址vip7.maltapi.com可靠的NVMe命令和数据传输.为了支持数据中心的网络存储,通过NVMe over Fabric实现NVMe标准在PCIe总线上的扩展,以此来挑战SCSI在SAN中的统治地位.NVMe over Fabric支持把NVMe映射到多个Fabrics传输选项,主要包括FC.InfiniBand.RoCE v2.iWARP和TCP. 然而,在这些Fabrics选项协议中,我们常常认为InfiniBand.Ro

文章汇总(包括NVMe SPDK vSAN Ceph xfs等)

基础部分 NVMe驱动解析-前言 NVMe驱动解析-注册设备 NVMe驱动解析-关键的BAR空间 NVMe驱动解析-DMA传输(热门) NVMe驱动解析-响应I/O请求 用一个简单的例子窥探NVMe的PRP规则 SPDK预备知识-DPDK SPDK的NVMe协议实现-上半部分 SPDK的NVMe协议实现-下半部分 NVMe融合blk-mq(从centos7.2开始) 强势回归,Linux blk用实力证明自己并不弱!(热门) NVMe over Fabrics NVMe over Fabrics

[转帖]InfiniBand, RDMA, iWARP, RoCE , CNA, FCoE, TOE, RDMA, iWARP, iSCSI等概念

InfiniBand, RDMA, iWARP, RoCE , CNA, FCoE, TOE, RDMA, iWARP, iSCSI等概念 2017-12-15 15:37:00 jhzh951753 阅读数 1358更多 分类专栏: 存储 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/jhzh951753/article/details/78813666 核心基础概念 FCoE:以太网

企业级SSD市场接口之争:SATA会被NVMe取代吗?

众所周知,NVMe是建立在NVM(Non-Volatile Memory,以Nand-flash为主)和PCIe基础上的一种新的传输协议,区别于SATA/SAS接口上使用的SCSI.SATA由于继承了HDD的生态系统,在成本和兼容性等方面皆具优势,所以成为多数用户的优先选择. 但是进入2017年,这个趋势可能发生变化,我们一起来看看为什么这么说. 首先,NVMe比SATA更能发挥Nand-flash的性能 NVMe在硬件层面省去HBA这一套东西,直接将SSD与主机PCIe对接.这不仅简化了系统的

nvme hardware queue 初始化流程

主要步骤 To setup and initialize I/O Submission Queues and I/O Completion Queues for use, host software follows these steps: Configures the Admin Submission and Completion Queues by initializing the Admin Queue Attributes (AQA), Admin Submission Queue Ba

RoCE vs iWARP

两种以太网 RDMA 协议: iWARP 和 RoCE 转载 2017年03月08日 16:10:09 1510 http://weibo.com/p/1001603936363903889917?mod=zwenzhang 本文是讲演 How Ethernet RDMA Protocols iWARP and RoCE Support NVMe over Fabrics[1]的摘要. 如果 NVMe 存储系统与主机是分离的,显然需要某种 fabric 把它们连接,这样主机才能使用存储系统.目前

[转帖]两种以太网 RDMA 协议: iWARP 和 RoCE

两种以太网 RDMA 协议: iWARP 和 RoCE https://weibo.com/p/1001603936363903889917?mod=zwenzhang 写的挺好的呢. 本文是讲演 How Ethernet RDMA Protocols iWARP and RoCE Support NVMe over Fabrics[1]的摘要. 如果 NVMe 存储系统与主机是分离的,显然需要某种 fabric 把它们连接,这样主机才能使用存储系统.目前,支持远程连接的 fabric 包括: