大家好,小便时个电脑软件控,今天小编就带领大家学习NVMe 1.4规范深度解读教程?NVMe作为SSD的最主要传输标准,在各个方面都针对NAND颗粒的特性做出了优化。不过随着NAND适用范围变大以及运用程度加强,人们发现NVMe还存在很多能够加强、补足的地方。因而,新的NVMe 1.4标准适应而出,带来了很多的全新特性,尤其纠错、功用加强以及为特殊范畴和企业级的优化更是令人重视。今日,本文就解读一下NVMe 1.4的新特性。
说起来,NVMe的上一次重大更新仍是在大约2年以前。在这段时刻中,NVMe发布了新的SSD NVMe标准。不仅如此,NVMe组织还采用了不同的办法为NVMe标准添加新功用,比方将已经准备好的新功用独自同意,并作为技能提案发布,而不是捆绑在全新的主要更新标准中一次性发布。这样渐次发布的做法能够使得供货商在技能成熟后,立刻便能够开端施行和布置这些新的功用,而不是针对草案进行操作。
这样的状况也呈现在今日的NVMe 1.4中。NVMe 1.4版别包含了NVMe 1.3版别之后发布的全部28个新的技能提案,以及从1.3a版别开端,一直到1.3d版别中加入的各种修正以及阐明。
总的来说,NVMe 1.4相比NVMe 1.3,是一个更大的更新,由于其标准内容更多并且加入了对功用更深入的解释。这样一来,尽管NVMe 1.4标准的页码就大幅度增加到403页(上一代NVMe 1.3d版别只有298页),可是易读性和可操作性更好了。
和之前版别相似的是,NVMe 1.4中加入的新功用和NVMe SSD的运用并非完全相关,部分内容只跟嵌入式体系或许超大规模布置的客户有关,因而很多的功用都不是必备的,而是可选的。相关的配套标准,比方NVMe办理界面和NVMe over Fabrics,都在不断地改进、发展,比方NVMe-MI的1.1版别在2018年12月获得了同意,NVMe over TCP已经成为NVMeof的第三个传输协议,并且加入了光纤通道和RDMA传输。而最基本的NVMe标准中的附加功用,往往被用于适应这些配套标准的变化。
新的可选功用需求操作体系中的SSD和NVMe驱动进行支撑,假如没有驱动和技能的一起支撑,驱动器将会退回到比较旧的功用级。为了更有效地运用新功用,还需求对软件堆栈的上层进行一些修正,尤其是许多存储办理工具会通过了解SSD的参数和信息来供给对应的功用。这些软件更新的开发时刻要比相关SSD固件的开发时刻更长一些,因而对这些新特性的支撑将在专用的环境中呈现,并且早于通用的操作体系发布之前。
现在来看,NVMe SSD商场正处于从PCIe 3.0向PCIe 4.0过渡,一起完结功用改进的早期阶段。在这个阶段中,还不太需求对NVMe标准进行任何根本性的更改。但随着技能演进和更多运用的呈现,NVMe还需求进一步加强它在功用方面的优势。
有鉴于此,NVMe 1.4版别包含了一些功用方面的优化,这些优化依赖于更智能地了解存储的运用方法,以及SSD和主机体系之间更好的协作。另一大类则与功用、过错处理,以及RAID重建等有联系。本文将介绍这些新标准中值得重视的内容,但并不是全部内容的详细列表。需求声明的是,本文中给出的用例或许和最终硬件供货商的实践产品不符,毕竟现在标准刚推出,仍旧还有很大的操作空间。
更多的块巨细和对齐提示
NVMe的行为相似于常规块设备,扇区巨细一般是512字节或许4KB。现代NAND的原始页面巨细大于4KB,擦除块巨细的单位更是MB。这种不匹配状况是SSD闪存数据转换层中绝大多数复杂处理和功用压力的来源。FTL答应软件在假设它们的存储块具有较小巨细的状况下正常作业,但对假如能够对实践的块巨细和页面巨细更为匹配的话将会简化SSD的作业并且支撑更高的功用。
NVMe 1.4规范深度解读教程图标2
NVMe1.3标准引入了名称空间最优化IO鸿沟的特性,答应SSD向主机体系通知读取和写入指令,最基本的要求是让其完结最佳功用。现在在这个特性支撑下,已经有答应更小尺度的块拜访驱动器的状况,可是关于小于4KB的数据,传输功用非常差。
即便是在最糟糕的景象下,驱动器应该只是抛弃对512B扇区的支撑,转而采用默认的4KB扇区,可是在需求和旧操作体系兼容的状况下,关于哪些拜访形式能够兼容性作业的提示或许会对实践的操作有所协助。NVMe 1.4版别下的SSD能够和体系通讯并获得更详细的信息,使得诸如写和存储单元重分配(TRIM)等指令能够匹配相关页面的巨细和擦除块的巨细。
NVMe 1.4规范深度解读教程图标3
在NVMe 1.4版别下,驱动器能够陈述命名空间首选写入对齐和命名空间首选的写入粒度,这些值只对NAND页面的一部分运用最小化的“读取—修正—写入”周期。同样的,命名空间首选的存储单元重分配对齐和命名空间首选的存储单元重分配粒度也适用于NVME的存储单元重分配指令,这个指令与ATA TRIM指令相似。
NVMe 1.4规范深度解读教程图标4
对SSD来说,假如不增加写入放大,就很难处理掩盖小数据范围或大数据范围但没有对齐部分的存储单元重分配指令,不然这将会危害功用并增加写入放大。支撑NVMe 1.4的Streams功用的驱动器还能够在运用Streams功用时,供给首选写入和取消分配粒度的提示,这些值一般是上述提示的倍数。
充分利用这些信息的职责现在将会落在操作体系和文件体系上,能够根据此信息设置RAID的条带巨细和文件体系块的巨细。对数据库之类的运用也需求注意到这一点,由于这类运用往往会试图绕过操作体系的大部分存储堆栈,然后自主优化存储功用,这一点在NVMe 1.4布置后需求进行调整。
更快速的过错检测和数据康复机制
NVMe 1.4引入了一些新的功用来协助处理不可康复的读取过错和损坏的数据,尤其是在RAID和相似场景中,这项技能使得主机体系能够简略地从其他地方获取数据来更快地康复损失的数据。
第一个技能被称为读取康复等级断定,也就是Read Recovery Level。这项功用能够答应主机体系自行装备SSD康复损坏区域数据的难度等级。我们知道SSD一般有多个过错校正层,一般来说上层比下层在数据康复方面更为可靠,可是上层的速度会相应更慢且耗电量更高。
在RAID 1或许相似场景中,主机体系一般倾向于快速获取过错,这样它既能够测验从镜像的另一端读取相同的数据,也不用等候驱动器部分进行数据重读的测验,然后再回来ECC校验这样较慢的办法。现在NVMe已经能够支撑有时刻约束的过错康复,也就是TLER,这项技能只答应主机将过错处理时刻约束在100ms以内。
NVMe 1.4规范深度解读教程图标5
相比之下,读取康复等级断定技能能够答应驱动器保存16个不同等级的过错的处理战略,只需求驱动器拥有2种不同的作业形式即可。这个功用将在每个NVM集的等级上进行装备。
接下来的技能是为了自动防止不可康复的读取过错。NVMe 1.4加入了验证和获取LBA状况(Get LBA status)两个指令。其中验证指令比较简略,这个指令除了将数据回来给主机体系之外,它还能够履行正常读取所需求的全部操作。假如读取指令回来过错,那么验证指令也将回来;假如读取指令成功完结,那么验证指令也会成功完结。这个指令的优势在于,其能够在不受主机接口带宽瓶颈的影响下,对存储的数据进行底层整理成为或许。一些SSD将通过移动或许重写降级的数据来响应可修复的ECC过错,验证指令也能够完结相同的行为。
总的来说,验证指令将削减对文件体系等级校验和铲除/验证的需求。别的,在验证指令履行的过程中,每个履行方位都会加入一个位符号,这个符号将指示SSD是应该康复快速失利仍是应该努力康复数据,位符号的功用和读取康复等级断定功用有很相似。
获取LBA状况指令答应驱动器向主机供给一个区块列表。在这个区块列表中,它包含的内容是那些测验读取或许验证指令后或许导致不可康复的读取过错的块。SSD或许已经在自动后台扫描中检测到了ECC过错,或许在更严重的状况下,这个功用能够陈述有哪些LBA受到了整个NAND通道的毛病影响,然后能够避开这些区域。获取LBA状况指令还能够用于要求在回来或许不可康复的区块列表之前,就预先扫描选定的数据范围。
别的,当主机体系发现损坏或许数据丢掉的LBA状况特性时,或许发出读取、验证指令后收到过错,发现数据丢掉时,这个指令还能够将其他地方的数据副本(比方RAID或许备份数据)从头写入到相同的LBA中,然后正常运用这些逻辑块。SSD将在必要的时分彻底关闭受损的物理块防止再次丢掉数据。