NVME 2.0与1.4差异概述
一、NVME2.0介绍
1.1 本文目的和背景
在NVMe1.4架构下,如果想要添加新的命令集,或区分不同的Transports协议,使用当前Spec架构就会带来诸多不便,牵一发而动全身。所以NVMe2.0最重要的使命,就是通过对Spec结构进行调整以方便在最小化已有方案影响的前提下进行新的开发。
1.2 NVME 2.0协议族构成介绍
NVMe2.0协议族发布,它由5个大类,8个具体的协议规范组成:
• NVM Express® Base Specification Revision
• I/O Command Set Specifications
o NVM Express® NVM Command Set Specification Revision
o NVM Express® Zoned Namespaces Command Set Revision
o NVM Express® Key Value Command Set Revision
• Transport Specifications
o NVM Express® over PCIe Transport Revision
o NVM Express® RDMA Transport Revision
o NVM Express® TCP Transport Revision
• NVM Express® Management Interface Revision
• Boot Specification
其中,NVM Command Set、Zoned NS Command Set、Key Value Command Set共同组成了新的I/O Command Set协议族,Transport Spec也被细分为PCIe、RDMA和TCP三种。
NVME 2.0与1.4的差异
NVMe 2.0 中的许多新功能都是对现有功能的次要扩展,使这些功能更有用、更广泛地使用。例如,NVMe 1.4 中引入了将设备的存储划分为 NVM Set和Endurance Group,但规范并未说明如何创建这些划分;该配置要么需要由驱动器的固件进行硬编码,要么需要使用特定于供应商的命令进行处理。NVMe 2.0 为要分配的Endurance Group和 NVM 集增加了标准容量管理机制,并且还为大规模存储设备添加了另一层分区(Domain),这些设备需要更多工具来切片其可用存储池,或隔离不同用户对共享驱动器或阵列的性能影响。
大致可以分为几类:
New Features: 可选的新功能
Feature Enhancement: 向前兼容,对过去功能进行扩展
Required Changes: 不向前兼容以及新的需求
2.1.1 新增功能:
NVME2.0全新引入的新概念,包括新的Command和Feature,以及容量管理等,具体内容如下:
Simple copy command
新的I/O Command Set,提供更高效、更简化的数据复制方法,以改进数据管理和传输操作的性能。允许Host将一段或者多段LBA的data copy到连续LBA上。
NVM Set and Endurance Group Management
Domain and Partitioning
NVME2.0将NVM Subsystem重新定义构造层级关系,引入Endurance Group Management
允许对SSD进行调整和改进机制,以实现动态容量管理和混合式NAND操作。将NVM Subsystem细分为六层结构,从小到大依次是:
Name Space < NVMSET < Endurance Group < Domain < NVM Subsystem
NVM Set指:由一个或多个独立的NVM存储介质(NS)组成的集合。a collection of NVM that is separate (logically and potentially physically) from NVM in other NVM Sets。
即NVM Set由多个NS (allocated and unallocated )组成,并且每个NS被NVM Set独占,并继承NVM Set的属性。
Endurance Group指:由一个或多个NVM Set组成的集合。描述Endurance Group的信息可以通过Log Page Command获取。在同一个Endurance Group中,这些NVM Sets使用相同的耐用性属性和管理策略,受到相似的写入和擦除次数的约束,也有利于平衡NVMe设备的使用并最大化写入寿命
Domain是指:最小的不可分割的可分享状态的Unit(power state, capacity information).
每个Domain互相独立,并且之间存在通信边界communication boundaries(故障边界,管理边界)。Domain由一个或多个Controller+Endurance group组成。NVM Subsystem 由一个或者多个Domain组成。
每个NS, NVM Set,Endurance Group, Domain 都被上一级独占,一个单位只能属于一个大范围。
如果一个NVM Subsystem中存在多个Domain,它们将以协作的方式运行。通过将NVM Subsystem划分为不同的Domain,有利于提供更加灵活、安全和高性能的数据管理和隔离能力,使NVMe设备可以适用于更加复杂的存储场景。(层级关系如下图)
Lockdown Command
Lockdown command用于对指定的admin Command或Feature等命令进行上锁功能的操作,可以通过Lockdown Command禁用或者解锁指定的admin Command和Feature。
对于被Lockdown命令禁用的admin command和Feature,如果发送该command或Set feature命令,将会被abort with 0x128( Prohibition of Command Execution Not Supported)。
如果要回复功能,可以再次用Lockdown命令解锁,或者通过power cycle重新上电的方式解锁。
可影响的命令范围
Zoned Namespaces
NVME Key Value
Namespace Types
NVMe2.0在I/O命令集中加入了NVME KV和Zoned Namespaces 这两个命令集,因此相应地也需要不同类型的Name space Types。
Zoned Namespaces规范提供了分区存储设备接口,允许 SSD 和主机在数据放置上进行协作。ZNS 允许数据与 SSD 的物理介质对齐这项新技术能够根据不同的使用频率,将数据分门别类地放置在存储设备的特定区域中,从而减少对存储数据的重写和重新排列。此前由于“写入放大比”(WAF)过大,固态存储驱动器的性能和寿命都受到了很大的影响。Key Value,该指令集允许应用程序使用 KV 对(而不是通过块地址)与硬盘控制器展开通讯,从而降低 CPU 的计算负载
New added CNS Identifiers for Identify Command
NVME2.0新增了一系类新的CNS ID,并在Identify命令结构中增加CSI以及CNS Specific Identifier域。新增的CNS value包括0x5~0x8 , 0x18~ 0x1c
CNS 0x6 : IO Command Set Independent Data Structure,可以用于在Namespace没有attach到controller之前,提供一些通用信息。
Rotational Media
支持HDD
2.1.2 功能完善
Command and Effect Log (CEL) Enhancements
1.增加新的Log Page : Supported Log Pages (00h),描述SSD支持的所有LID 列表.
2.增加新的Log Page : Feature Identifiers Supported and Effects (12h),描述所有支持的Features ID以及属性
3.增加新的Log Page : NVMe-MI Commands Supported and Effects (13h),描述所有SSD支持的MI命令以及属性
4.在Commands Supported and Effects Log Page (5h)的Data Structure中增加check NVM Subsystem,Domain,Endurance Group等新的fields
Aborting Commands During Format NVM Command
增加了一个允许在Format Command in progress状态下可以正常进行的admin command列表,并定义了不被允许在Format过程中同步进行的命令,如果发该命令并导致被abort 掉时应return 的status code。
Non-MDT Command Size Limits
重新定义部分command data limit机制,不再受到MDTS大小约束,涉及的command有Dataset Management, Verify,Write Uncorrectable and Write Zeros。对应的limit域可以用 CNS 0x6 来获取。
Dataset Management Command
NVME2.0新增定义了对于Dataset Management Command的Size限制域:DMRL,DMRSL以及DMSL。分别限制了Dataset Command的单次命令最大LBA Range数量,单Range的最大LBA数量以及Dataset management涉及的LBA总数量。
Get Log Page Index Offsets
增加新的Log Page offset 机制,除了可以by Byte进行偏移外,还可以通过Log Page的entry index 作为offset值来进行偏移,由新增的LID 0x0的Log Page中IOS域来控制是否支持,并在Command Dword14中设置OT为1来实现。
Persistent Event Log (PEL) State and Source Reporting
增加了Reporting Context Information域来提供Persistent Event Log context信息,通过RCE域确认log context是否已establish,如果已存在context,则可以通过PCPIT和RCPID域确认NVME,MI以及NVMEoF的接口信息状态。
Persistent Event Log Context Counter and Action field
在Persistent Event Log中增加一个Generation Number field来report context是否有增加。并在Action field中增加Action4的操作类型,用于establish context header。
Telemetry Log Size Changes and Enhancements
拓展了Telemetry Log Page的Size,除了原本的3个Block Area外,增加Block Area4 来手机更加详细的内部数据。通过Identify Controller Data中的LPA.bit6和Host Behavior Support feature配合控制是否增加Block Area4。
Namespace Attachment Limits
增加定义在同一个Domain中所有Controller和Namespace的attach限制,在Identify Controller Data Structure中增加MAXDNA和MAXCNA域,分别限制了domain内所有I/O Controller分别可被attach的最大NS总数之和,以及当前Controller可被attach的最大NS数量。如果超过限制,attach NS命令将会被abort
CMB Write Elasticity Status
定义了一种机制,使Controller向主机指示用于防止由于CMB PCIe写请求而导致的PCI Express结构中的拥塞的信息。状态包括弹性写入大小和单位,以及持续写入的吞吐量
Multiple Controller Shutdown Enhancement
Updates the process of shutting down a domain that contains multiple controllers
Multiple Controller Firmware Update
Defines the process of a firmware update to a domain that contains multiple
controllers by updating the specification to state that overlapping downloads
results in undefined behavior and allow a domain to optionally report the
detection of overlapping downloads to a host.
Time To Ready Enhancements
Distinguishes two controller ready modes for attached namespaces during
controller initialization namely Controller Ready with Media Mode and Controller
Ready Independent of Media Mode. Adds support bits and ready timeout values
for both controller ready modes along with an indication of which mode is
currently in use.
Graceful Disconnection
Defines adding a Disconnect command to delete an NVMe I/O Queue. This
command also provides a basic mechanism for an association to survive the
deletion or termination of an individual I/O Queue and the loss of the associated
NVM Transport connection.
SGL Optimizations
Defines a backward-compatible optional threshold for any single command for
the number of SGL Data Block Descriptors and SGL Bit Bucket Descriptors that
have a non-zero length.
Protection Information Enhancement
Defines a new 16 bytes protection information with two separate formats to
provide a 32b Guard field and a 64b Guard Field. The new Storage Tag and
Logical Block Reference Tag fields are also defined that have viable size.
ZNS Status Code and Async Notification
Allows the Zone Management command to return new status codes if the request
new zone state is not achieved due to a controller excursion, allows more than
one time for reporting controller recommendations, and allow the host to get a list of zones with pending controller recommendations.
In-band Authentication Protocol for NVMe over Fabrics
Defines the Diffie-Hellman HMAC-CHAP (DH-HMAC-CHAP) in-band authentication protocol for NVMe over Fabrics.
Transport Layer Security (TLS) 1.3 Support
Adds support for NVMe/TCP TLS 1.3.
Set/Get Features Ported from NVMe-MI to the NVMe 2.0 Base Spec
Ports the Set/Get Features from the NVMe-MI 1.1 spec to the NVMe 1.4 spec
and extends Namespace Metadata.
Boot Partition Read Access using OOB
Enables access of Boot Partitions via a log page to allow SMBus access in the
event PCIe is not accessible
Additional Controller Metadata Types
Adds additional controller metadata types useful for creating an installation
record and a host-determined failure record in the Set Features event in the
Persistent Event log page. Adds the new Enhanced Controller Metadata feature