绝对有料 发表于 2020-8-10 10:00

NVMe 2.0:自带“分区”的固态硬盘

如今固态硬盘已经在电脑当中得到普及,但是固态硬盘在电脑中其实过得并不如意,因为它必须把自己变成机械盘的样子去活着。


固态硬盘模拟机械盘的三策:
操作系统的文件系统不大可能为了照顾固态硬盘而专门为固态硬盘新开一扇窗,所以固态硬盘必须遵守过去由机械硬盘时代建立起来的一套工作方式。一个人要装成另外一个人去生活是很累的,而且固态硬盘一装就是一辈子,还不能出纰漏。


固态硬盘要想和机械硬盘一样工作,实现方式有上、中、下三策,下策是让固态硬盘完全去模拟机械硬盘的工作方式,比如对外表明自己是一颗512字节扇区的硬盘(闪存Page页的大小通常为16KB),而把各种模拟带来的额外负担留给自己,这也是当代大多数固态硬盘所走的路线。下图所示为Sector扇区映射,当代固态硬盘主要采用的是Page页映射。为了实现模拟,复杂的FTL闪存映射层必不可少,而大多数固态硬盘变砖都和FTL损坏有关。


上策是OpenChannel标准所提倡的,将固态硬盘当中的闪存等底层信息公开给软件,包括FTL、闪存磨损均衡等原本由固态硬盘主控/固件执行的工作都将交给软件接手进行管理,以期达到最高效率。代价是软件架构必须重新设计,成本很高,一些对性能有极高要求的企业级应用会重点考虑,而消费级领域由于闪存类型繁多,实际上很难在短时间内应用。下图所示为Open Channel SSD原理,允许驱动程序直接访问SSD中的物理闪存Page页。



上策太急,下策太缓,幸好我们还有中策,也就是本文将重点讨论的NVMe 2.0路线:通过新的“ZNS分区命名空间”让软件层有机会了解固态硬盘内的闪存配置并加以合理利用,提高固态硬盘的工作效率。ZNS是一个可选功能,如果软件层没有对此进行重新编程,不认识这些新特性,也不会影响到固态硬盘的可用性。ZNS预计可带来减少8倍的DRAM缓存容量需求,并减少约10倍的OP预留空间需求。既降低了DRAM缓存配置成本,又提高了用户可用容量,可谓是开源节流双管齐下,对大容量的企业级固态硬盘非常有吸引力。



ZNS分区命令空间:
我们平时给硬盘分区,是在文件系统层面,由于FTL闪存映射表这个中间层的存在,逻辑分区和实际闪存地址并不是固定的对应关系,起不到在数据分类存放的作用。不同的数据最终会混杂地存储在一起(下图左):



而支持ZNS分区(Zone)命名空间的固态硬盘可以根据数据类型的不同选择单独的存放位置,从而降低因垃圾回收带来的写入放大(减少对闪存磨损)。此外,ZNS的一个Zone区域可以定义为一个或多个Block闪存块的大小(一个Block通常为16MB),在Zone区域内只支持顺序写入(但支持随机读取),这样就可以达到降低写放大的目的。


ZNS在一定程度上是受到了SMR机械硬盘的启发,闪存和SMR叠瓦磁记录机械盘有一定的相同之处:前者的最小擦除和读取/写入单位大小不同,后者由于原理的限制不支持对单一磁道直接覆盖写入(会破坏到相邻磁道的内容)。在引入分区命名空间之后,可以优化固态硬盘的性能以及写放大表现。


ZNS分区命名空间还能减少对DRAM缓存容量的需求。传统上的4K扇区映射需要按照1GB:1MB的比例去配备DRAM缓存,才能确保良好的存取性能。而在采用ZNS分区之后,每个映射分区的容量在十几兆乃至几百兆,而不是过去的4KB。对于1TB以下的家用固态硬盘来说,1GB的缓存可能无所谓,但对于几十TB容量的大容量企业级固态硬盘,ZNS对于DRAM缓存容量需求的降低是非常有利的。



ZNS分区命名空间将作为NVMe 2.0标准的一部分提供,并且已被最新的Linux内核所支持。不过短期内应该不会和我们常用的家用固态硬盘产生太多联系。

devondon 发表于 2020-8-11 09:09

凡是有上中下三策的场景出来,最后选择的一般都是下策。

Darkteeth 发表于 2020-8-11 11:02

这是个利好啊。

nighttob 发表于 2020-8-11 12:03

就跟Host-award SMR一样,还是落在了OS、File-System和Application上面去解决HW的问题

转回来说,现在NVMe就可以在中间层通过namespace去“分区”,虽然这也是SAS玩剩下的东西了

haierccc 发表于 2020-8-13 11:04

听说可以降低读写延迟,是好事。
如果OS真的能为SSD开扇窗就好了,专用的文件系统,专用的访问逻辑,尽量减小模拟HDD带来的转换环节
页: [1]
查看完整版本: NVMe 2.0:自带“分区”的固态硬盘