随着全新一代PCIe 5.0 SSD的发布,新的NVMe 2.0规范协议也是如期而至。作为PCIe SSD重要的底层协议,NVMe 2.0都有哪些重要调整?又有哪些值得我们关注的新功能?本文简单解答。
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架构更加趋于模块化,将Commend 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)
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混合型。
(引自 NVM Express Base Spec 2.0c)
NVMe 2.0有很多新增Feature以及基于原有Feature做出的改进。接下来,我们着重介绍大家关心的部分:
NVMe 2.0 New Features(引自NVMe官网)
该命令属于I/O Command命令集,旨在提供更快捷、更简化的数据复制方法,以改进数据管理和传输操作的性能。它允许Host将一段或者多段LBA上的数据拷贝到一个连续的LBA上,Host只需要规定源地址和目的地址即可,NVMe SSD在收到命令后会自己进行数据的拷贝工作,从而大大减少了对总线和Host资源的占用并降低延迟。
而在没有这个命令之前,要完成这样的拷贝工作,需要先将数据读到Host的内存里,然后再写入到SSD上。
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存储架构中两个可选的层级,NVM Set由单个或多个Namespace构成,单个或多个NVM Set又共同构成了一个Endurance Group。在同一个Endurance Group中,这些NVM Sets使用相同的耐用性属性和管理策略,受到相似的写入和擦除次数的约束,也有利于平衡NVMe设备的使用并优化写入寿命。
NVMe 2.0 新增了Lockdown Command,其功能是阻止某些命令执行。该命令属于Admin Command命令集,作用范围包括:
当然,对于已经上锁的命令也可以使用该命令进行解锁。此外,NVM Subsystem在重新上电时,这些命令也将恢复到解锁状态。
如前文所述,NVMe 2.0在I/O命令集中加入了NVMe KV和Zoned Namespaces 这两个命令集,因此相应地也需要不同类型的Namespace Types。
这是NVMe 2.0新增的一个Identify数据结构,它所提供的信息是跟IO命令集无关的。这个数据结构的特殊之处在于,它可以在Namespace attach到Controller之前提供一些信息。
增加对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等新的功能特性,也将为用户的数据完整性、虚拟化环境下的业务性能带来巨大提升。