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版别中参加的各种批改以及阐明。
现在绝大部分中高端SSD都支撑NVMe技能
总的来说,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的作业而且支撑更高的功用。
SSD在读写不同巨细的区块时存在功用差异,比方小于4KB的数据功用会暴降。
NVMe1.3标准引入了称号空间最优化IO鸿沟的特性,答应SSD向主机体系告诉读取和写入指令,最基本的要求是让其完结最佳功用。现在在这个特性支撑下,现已有答应更小尺度的块拜访驱动器的状况,可是关于小于4KB的数据,传输功用十分差。
即便是在最糟糕的景象下,驱动器应该仅仅抛弃对512B扇区的支撑,转而选用默许的4KB扇区,可是在需求和旧操作体系兼容的状况下,关于哪些拜访形式能够兼容性作业的提示或许会对实践的操作有所协助。NVMe 1.4版别下的SSD能够和体系通讯并取得更具体的信息,使得比方写和存储单元重分配(TRIM)等指令能够匹配相关页面的巨细和擦除块的巨细。
NVMe 1.4对命名空间做出了改善
在NVMe 1.4版别下,驱动器能够陈述命名空间首选写入对齐和命名空间首选的写入粒度,这些值只对NAND页面的一部分运用最小化的“读取—修正—写入”周期。相同的,命名空间首选的存储单元重分配对齐和命名空间首选的存储单元重分配粒度也适用于NVME的存储单元重分配指令,这个指令与ATA TRIM指令类似。
过小的写入数据或许会引发一个完好的“读取——修正——写入”周期,然后影响功用。
对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以内。
西部数据SSD中的纠错计划
比较之下,读取康复等级断定技能能够答应驱动器保存16个不同等级的过错的处理战略,只需求驱动器具有2种不同的作业形式即可。这个功用将在每个NVM集的等级上进行装备。
接下来的技能是为了主动防止不行康复的读取过错。NVMe 1.4参加了验证和获取LBA状况(Get LBA status)两个指令。其间验证指令比较简略,这个指令除了将数据回来给主机体系之外,它还能够履行正常读取所需求的全部操作。假如读取指令回来过错,那么验证指令也将回来;假如读取指令成功完结,那么验证指令也会成功完结。这个指令的优势在于,其能够在不受主机接口带宽瓶颈的影响下,对存储的数据进行底层整理成为或许。一些SSD将经过移动或许重写降级的数据来响应可修正的ECC过错,验证指令也能够完结相同的行为。
总的来说,验证指令将削减对文件体系等级校验和铲除/验证的需求。别的,在验证指令履行的过程中,每个履行方位都会参加一个位符号,这个符号将指示SSD是应该康复快速失利仍是应该尽力康复数据,位符号的功用和读取康复等级断定功用有很类似。
获取LBA状况指令答应驱动器向主机供给一个区块列表。在这个区块列表中,它包括的内容是那些测验读取或许验证指令后或许导致不行康复的读取过错的块。SSD或许现已在主动后台扫描中检测到了ECC过错,或许在更严峻的状况下,这个功用能够陈述有哪些LBA受到了整个NAND通道的毛病影响,然后能够避开这些区域。获取LBA状况指令还能够用于要求在回来或许不行康复的区块列表之前,就预先扫描选定的数据规模。
别的,当主机体系发现损坏或许数据丢掉的LBA状况特性时,或许宣布读取、验证指令后收到过错,发现数据丢掉时,这个指令还能够将其他当地的数据副本(比方RAID或许备份数据)从头写入到相同的LBA中,然后正常运用这些逻辑块。SSD将在必要的时分完全关闭受损的物理块防止再次丢掉数据。
未完待续……详见《微型计算机》2019年8月上刊。
对本篇待续内容感爱好的读者请给咱们留言,咱们有爱好咱们会持续放出后续内容。