NVMe 2.0 简介

news2024/11/27 8:34:12

随着全新一代PCIe 5.0 SSD的发布,新的NVMe 2.0规范协议也是如期而至。作为PCIe SSD最为重要的底层协议,NVMe 2.0都有哪些重要调整?又有哪些值得我们关注的新功能?本文简单解答。

NVMe 演化史

NVMe自诞生以来,其关注的焦点几经变化。一开始,NVMe的目标是定义NVMe架构和NVMe命令集,用一个共同的接口来统一PCIe SSD,让PCIe SSD可以很方便的在当时系统环境下布署使用起来。而在NVMe正式落地之前,客户只能安装由PCIe SSD厂商提供的专用驱动程序,使用场景存在一定限制。值得一提的是,忆恒创源(Memblaze)不仅仅是全球最早一批做PCIe SSD的厂商,同时也是国内首家实现NVMe协议规范支持的厂商。

之后,NVMe架构和命令集继续扩展,以支持更多的应用场景,更多的Transport 协议,如Ethernet,Fiber Channel等,而不仅仅局限在机箱内部。完成上述目标之后,NVMe又开发出了一些新的命令集,同时也将NVMe扩展到了新的应用场景,如自动驾驶,仓库规模存储,计算存储等。

NVMe 技术演化图(引自 NVM Express)
NVMe从1.0发展到1.4,逐渐形成NVMe Base Specification(NVMe)、NVMe Management Interface Specification(NVMe-MI)和NVMe Over Fabrics Specification(NVMe-oF)三大Spec合集,它们看似独立,但又彼此关联,相互依赖。
NVMe 1.0 到 NVMe 1.4 的发展历程(引自 NVM Express)
随着Spec的增多,如何组织这些Spec就成了新的问题。在NVMe 1.4架构下,如果我们想要添加新的命令集,或区分不同的Transports协议,使用当前Spec架构就会带来诸多不便,牵一发而动全身。所以NVMe 2.0最重要的使命,就是通过对Spec结构进行调整以方便在最小化已有方案影响的前提下进行新的开发。

新的Spec架构更加趋于模块化,将Command Set和Transport Spec从原有三大合集中独立出来,与Base Spec、NVMe-MI一同,构成了新的NVMe 2.0协议族,也方便未来有更多新的功能添加进来。如下图所示,当有新的功能出现,只需要对Command Set Spec进行扩充即可。

(引自 NVM Express)
此外,NVM Express还发布了名为“NVM Express Boot Specification”的规范文件,对NVMe设备的启动做了规范。所以,最新的NVMe协议族如下:

(引自 NVM Express Boot Spec)

NVMe 2.0

2021年6月3日,NVMe 2.0协议族发布,它由8个具体的协议规范组成,其中,NVM Command Set、Zoned Namespace Command Set、Key Value Command Set共同组成了新的Command Set协议族,Transport Spec也被细分为PCIe、RDMA和TCP三种。

NVM Commend Set Spec、PCIe Transport Spec是NVMe最开始想要实现的目标,在此基础上又有6个Spec被开发出来,可见NVMe的技术发展确实是非常快的。

NVMe 2.0 协议族(引自 NVM Express)
NVMe 2.0定义了3种命令类型:Admin命令、I/O命令和Fabrics命令。跟之前版本一样,Admin命令用于控制器的管理,有专用的Admin SQ/CQ来实现命令传递。I/O命令使用I/O SQ/CQ,如我们熟悉的读和写,都由I/O命令完成,在NVMe 2.0协议族中,I/O命令集又分为NVM命令集、Zoned Namespace命令集和Key Value命令集三种。Fabrics命令则专用于NVMe over Fabrics。

(引自 NVM Express Base Spec 2.0c)

NVMe Transport是基于物理连接属性抽象的协议层,分为Memory-Based和Message-Based两种,其中,Message-Based Transport又可以分为Message-Only型和Message/Memory混合型。

  • Memory-Based Transport指Host和NVM Subsystem之间的命令、应答和数据是由显性的内存读写命令来完成的,代表协议是NVMe over PCIe Transport Spec。
  • Message-Based指Host和NVM Subsystem之间通过发送Message封装命令和响应数据,代表协议有Fiber Channel、TCP Transport Spec。
  • Message/Memory混合型则会组合使用Message和显性的内存读写命令,代表协议是RDMA Transport Spec。

(引自 NVM Express Base Spec 2.0c)
NVMe 2.0有很多新增Feature以及基于原有Feature做出的改进。接下来,我们重点介绍大家最为关注的部分:

NVMe 2.0的新功能

NVMe 2.0 New Features(引自NVMe官网)

Simple Copy Command

该命令属于I/O Command命令集,旨在提供更高效、更简化的数据复制方法,以改进数据管理和传输操作的性能。它允许Host将一段或者多段LBA上的数据拷贝到一个连续的LBA上,Host只需要指定源地址和目的地址即可,NVMe SSD在收到命令后会自己进行数据的拷贝工作,从而大大减少了对总线和Host资源的占用并降低延迟。

而在没有这个命令之前,要完成这样的拷贝工作,需要先将数据读到Host的内存里,然后再写入到SSD上。

Domains and Partitioning

NVMe 2.0将NVM的存储结构分为5个层级:NVM Subsystem、Domain、Endurance Group、NVM Set和Namespace,它们的层级关系如下:

(引自 NVM Express Base Spec 2.0c)
下图则展示了这些层级在一个相对复杂的NVM Subsystem中的关系,它包含了多个Domain、Endurance Group、NVM Set和Namespace。

(引自 NVM Express Base Spec 2.0c)
NVM Subsystem可以由1个或多个Domain(域)组成,每个Domain都独立存在,具备各自的状态信息,如电源状态、容量信息,Domain之间存在通信边界,如故障边界、管理边界。如果一个NVM Subsystem中存在多个Domain,它们将以协作的方式运行。通过将NVM Subsystem划分为不同的Domain,有利于提供更加灵活、安全和高性能的数据管理和隔离能力,使NVMe设备可以适用于更加复杂的存储场景。

NVM Set和Endurance Group

NVM Set和Endurance Group是NVM存储架构中两个可选的层级,NVM Set由单个或多个Namespace构成,单个或多个NVM Set又共同构成了一个Endurance Group。在同一个Endurance Group中,这些NVM Sets使用相同的耐用性属性和管理策略,受到相似的写入和擦除次数的约束,也有利于平衡NVMe设备的使用并最大化写入寿命。

Command and Feature Lockdown

NVMe 2.0 新增了Lockdown Command,其功能是阻止某些命令执行。该命令属于Admin Command命令集,作用范围包括:

• 带内Admin命令集中的命令和Set Feature命令下的各种feature;
• NVMe-MI中的Management Interface命令集中的命令和PCIe命令集中的命令。

当然,对于已经上锁的命令也可以使用该命令进行解锁。此外,NVM Subsystem在重新上电时,这些命令也将恢复到解锁状态。

NVMe KV、Zoned Namespaces和Namespace Types

如前文所述,NVMe 2.0在I/O命令集中加入了NVMe KV和Zoned Namespaces 这两个命令集,因此相应地也需要不同类型的Namespace Types。

IO Command Set Independent Data Structure

这是NVMe 2.0新增的一个Identify数据结构,它所提供的信息是跟IO命令集无关的。这个数据结构的特殊之处在于,它可以在Namespace attach到Controller之前提供一些信息。

Rotational Media

增加对HDD的支持。

此外,全新NVMe 2.0规范协议还对一些原有Feature做出优化或调整,如Telemetry统一接口日志收集、Persistent Event Log持久化日志等,内容比较多,在此就不一一介绍了。而在后面的文章中,我们也将对NVMe 2.0以及全新一代PCIe 5.0 SSD的一些新功能做更加详细的介绍,欢迎大家持续关注。

PBlaze7 7940系列PCIe 5.0企业级NVMe SSD
忆恒创源作为国内老牌的企业级PCIe SSD厂商,高度重视企业客户需求,以精心打磨的技术、持续优化的产品功能,不断为客户业务应用带来更好支撑。最新发布的PBlaze7 7940不仅实现了两倍于上一代产品的性能,更升级到NVMe 2.0规范协议,提供如Simple Copy Command、Feature Lockdown等重要NVMe 2.0企业级功能的支持。另外,Get LBA Status、128K原子写,SR-IOV等新的功能特性,也将为用户的数据完整性、虚拟化环境下的业务性能带来巨大改善。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1207763.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Blazor 附件上传和下载功能

效果图 page "/uploadFile" inject Microsoft.AspNetCore.Hosting.IWebHostEnvironment WebHostEnvironment inject ToastService ToastService inject DownloadService DownloadService<h3>UploadFile</h3><Button OnClick"ButtonClick" C…

cmd窗口中文乱码

问题&#xff1a;今天电脑重装了&#xff0c;跑程序的时候&#xff0c;cmd窗口汉字出现乱码&#xff0c;看起来很不舒服 解决方案&#xff1a;在注册表中修改cmd的属性设置&#xff0c;实现一次修改永远有效 1. 打开 winR 输入 regedit 进入注册表 2. 找到 HKEY_CURRENT_USER…

AWTK实现汽车仪表Cluster/DashBoard嵌入式GUI开发(六):FREERTOS移植

前言: 一般的GUI工程都需要一个操作系统,可能是linux,重量级的,也可能是FreeRTOS,轻量级的。 一句话理解那就是工程就是FreeRTOS task任务的集合。 一个main函数可以看到大框架: 很显然,除了第一个是硬件配置的初始化,中间最重要的部分就是要创建任务。而一个任务主…

STM32H750之FreeRTOS学习--------(六)FreeRTOS的列表和列表项

六、FreeRTOS的列表和列表项 文章目录 六、FreeRTOS的列表和列表项列表相关结构体列表项相关结构体迷你列表项列表相关API函数介绍初始化列表vListInitialise()函数vListInitialiseItem()函数vListInsert()函数 vListInsertEnd()函数 uxListRemove() 列表就是一个双向链表&…

RT-DETR算法优化改进:Backbone改进 | LSKNet:遥感旋转目标检测新SOTA | ICCV 2023

💡💡💡本文独家改进:LSKNet 助力RT-DETR ,替换backbone,Large Selective Kernel Network (LSKNet),可以动态地调整其大空间感受野,以更好地建模遥感场景中各种物体的测距的场景。 推荐指数:五星 RT-DETR魔术师专栏介绍: https://blog.csdn.net/m0_63774211/cat…

Windows装机必装软件|每款都好用到起飞!

1.GeekUninstaller&#xff1a;这款软件是一款功能强大的卸载工具&#xff0c;可以完全删除无用的程序和插件&#xff0c;并清理与之相关的文件夹。它没有广告或捆绑软件&#xff0c;非常干净。 2.PotPlayer&#xff1a;作为一款纯粹的播放器&#xff0c;PotPlayer可以流畅播放…

【数据结构】面试OJ题——带环链表(数学推论)

目录 1.环形链表Ⅰ ​编辑 思路 &#xff1a; 思路拓展 问题一&#xff1a; 问题二&#xff1a; 总结&#xff1a; 问题三&#xff1a; 证明总结第三点 总结&#xff1a; 2. 环形链表Ⅱ 思路一 思路二 3.相交链表 思路&#xff1a; 1.环形链表Ⅰ 141. 环形链…

ebSocket connection to ‘wss://xxx.xxxxxxx.xxx/‘ failed:

目录 1&#xff1a;网络连接问题&#xff1a;检查您是否已连接到互联网&#xff0c;您的网络是否稳定。您还可以尝试重置您的Internet连接或切换到另一个网络。 排除方法&#xff1a;直接打开个网址就知道了&#xff0c;这应该不用教了吧 2&#xff1a;防火墙或代理设置&…

桌面便签软件用哪个?10款全球好用的便签软件推荐,告别杂论无章!

在如今的快节奏社会中&#xff0c;我们的生活和工作节奏越来越快&#xff0c;每天面对的信息成倍地增长。有时候&#xff0c;我们需要随手记下一些重要的事情&#xff0c;或者是一些突然的灵感&#xff0c;这时候就需要一款好用的桌面便签软件。 桌面便签软件可以帮助我们更好…

【机器学习5】无监督学习聚类

相比于监督学习&#xff0c; 非监督学习的输入数据没有标签信息&#xff0c; 需要通过算法模型来挖掘数据内在的结构和模式。 非监督学习主要包含两大类学习方法&#xff1a; 数据聚类和特征变量关联。 1 K均值聚类及优化及改进模型 1.1 K-means 聚类是在事先并不知道任何样…

为什么说美味、珍贵的高贵甜酒是“来自大自然的礼物”?

当德国葡萄酒产区的主要葡萄收获季节成功结束时&#xff0c;人们可以观察到在某些地区个别葡萄园还没有收获。它们没有被酿酒师遗忘&#xff0c;而是在等待成为高贵甜美的佳肴。在秋天的好天气里&#xff0c;葡萄继续生长&#xff0c;每天自然都会增加它们的甜度。来自云仓酒庄…

负公差轧钢测径仪 多规格可定制 普通智能随意选择

负公差轧制的意义&#xff1a; 轧钢厂生产的螺纹钢是按理论重量销&#xff0c;因此稳定的高负差产品极具市场竞争力。负差率即实际重量与理论重量的差值&#xff0c;除以理论重量&#xff0c;乘100%。以螺纹12为例&#xff0c;不按负差生产&#xff0c;在坯重2450kg的情况下&am…

React Hooks实战:Web开发与设计

目录 前言 一、React Hooks 简介 二、React Hooks 的基本用法 1. 使用 useState 创建状态 2. 使用 useEffect 添加副作用 3. 使用 useContext 获取上下文 三、React Hooks 的常见问题 1. 循环引用问题 2. 副作用问题 四、React Hooks 实战案例 1. 使用 useState钩子…

竞赛选题 深度学习的智能中文对话问答机器人

文章目录 0 简介1 项目架构2 项目的主要过程2.1 数据清洗、预处理2.2 分桶2.3 训练 3 项目的整体结构4 重要的API4.1 LSTM cells部分&#xff1a;4.2 损失函数&#xff1a;4.3 搭建seq2seq框架&#xff1a;4.4 测试部分&#xff1a;4.5 评价NLP测试效果&#xff1a;4.6 梯度截断…

thinkphp 自定义错误页面

在访问无效的UI 这个效果不好&#xff0c;要改成自定义的 <?php namespace app\controller;class ErrorController {public function __call($method,$args){return error request!;} }之后就是提示

【第2章 Docker容器基础入门】 课程介绍 + docker容器介绍

一、课程介绍 1.1、容器运行时 1.2、官网 1.3、私有镜像 二、什么是 Docker &#xff1f; 2.1 Docker 的思想来自于集装箱&#xff0c;集装箱解决了什么问题&#xff1f; 2.2 、K8S 1.25版本之后可能废弃docker&#xff0c;为什么还需要学习docker&#xff1f; 一、课程介…

Docker学习——⑧

文章目录 1、什么是 Docker Compose(容器编排)2、为什么要 Docker Compose&#xff1f;3、Docker Compose 的安装4、Docker Compose 的功能和使用场景5、Docker Compose 文件&#xff08;docker-compose.yml&#xff09;5.1 文件语法版本5.2 文件基本结构及常见指令 6、Docker …

Postgresql数据类型-数据类型转换

PostgreSQL数据类型转换主要有三种方式&#xff1a;通过格式化函数、CAST函数、::操作符&#xff0c;下面分别介绍。 通过格式化函数进行转换 PostgreSQL提供一系列函数用于数据类型转换&#xff0c;如表所示。 通过CAST函数进行转换将varchar字符类型转换成text类型&#xf…

【excel技巧】如何取消excel隐藏?

Excel工作表中的行列隐藏了数据&#xff0c;如何取消隐藏行列呢&#xff1f;今天分享几个方法给大家 方法一&#xff1a; 选中隐藏的区域&#xff0c;点击右键&#xff0c;选择【取消隐藏】就可以了 方法二&#xff1a; 如果工作表中有多个地方有隐藏的话&#xff0c;还是建…

使用select实现定时任务

selectOutOfTime.c里边的代码如下&#xff1a; #include<stdio.h> #include<sys/time.h> #include<sys/types.h> #include<unistd.h> #include <string.h>#define BUF_SIZE 100int main(void){fd_set reads;struct timeval tv;int errorNum;cha…