传统SSD
SSD是Solid State Drive(固态硬盘)。一块SSD封装有10-100个NAND芯片和一个SSD控制器。SSD控制器通过接口来管理NAND芯片并且向用户提供服务,其中NVMe就属于一种接口。
NVMe是Non Volatile Memory Host Controller Interface Specification。曾经广泛使用的SATA接口传输速度太慢,拖了SSD的后腿。NVMe性能高,可以自动适配很多平台,无需厂家提供驱动。
图片来源: 2020 Storage Developer Conference. © Western Digital, Inc. All Rights Reserved.
在传统的SSD中,管理SSD的软件叫做flash translation layer(FTL)。主要的任务是将逻辑块映射到物理地址。不同的文件写入到介质上以后没有办法分开,也就是说不同生命周期的文件存储在相同的擦除单元里。
图片来源: 2020 Storage Developer Conference. © Western Digital, Inc. All Rights Reserved.
由于擦除是按擦除单元进行的,要删就要删一整个单元,所以在删掉之前必须要做垃圾回收(garbage collection, GC),也就是说把有用的部分先写到其他的地方,这样原来的擦除单元就可以删掉了。
图片来源: 2020 Storage Developer Conference. © Western Digital, Inc. All Rights Reserved.
垃圾回收的开销叫写入放大因数( Write Amplification Factor, WAF),WAF越大,写入吞吐量越低、读出的延迟越高、设备的开销越大、设备寿命越短。
如果在写入的时候,可以把不同的文件就写入到不同的擦除单元里,上面的问题就好解决了。ZNS SSD就可以达到这种要求。
图片来源: 2020 Storage Developer Conference. © Western Digital, Inc. All Rights Reserved.
垃圾回收机制需要一定的预留空间( over-provisioning)来存放暂时不需要删掉的信息,影响了吞吐量;而ZNS SSD不需要垃圾回收,写入吞吐量明显大很多。
ZNS SSD
ZNS就是Zoned Namespaces的意思,通过NVMe的新规范(https://nvmexpress.org/developers/nvme-specification/)就可以实现。
分区存储模型(Zoned Storage Model)
zone(分区)在namespace(命名空间)里线性分布,所有的zone都要顺序地写入,在再一次写入前必须要先重置。
图片来源: 2020 Storage Developer Conference. © Western Digital, Inc. All Rights Reserved.
每个zone都有相关联的属性,如
-
线性地指向下一个写入单元的写指针
-
指向第一个LBA(逻辑区块地址,Logical Block Address)的指针:ZSLBA(Zone Starting LBA)
-
Zone容量,用可写入的LBA的数量表示
-
zone状态,包括读写访问规则
图片来源: The NVM Express Zoned Namespace Command Set 1.0 specification
分区大小(zone size)和分区容量(zone capacity)
Zone size就是zone里面所有逻辑块的总数,命名空间里的所有zone都是相同的。zone capacity是一个zone里可以写入的LBA的数量,也就是可用的逻辑块总数(一个LBA对应一个逻辑块)。通常是固定的,但是标准允许它变。分区容量总是小于等于分区大小。
图片来源: 2020 Storage Developer Conference. © Western Digital, Inc. All Rights Reserved.
分区状态(zone state)
每一个zone都有一个状态机,LBA是否可读写就取决于它的状态。
图片来源: The NVM Express Zoned Namespace Command Set 1.0 specification
分区资源限制(Zone Resources Limits)
ZNS标准允许控制器设置同时能够在隐式、显式开放状态下的zone总数,还可以定义活跃zone的总数。
分区命名空间指令集(Zoned Namespace Command Set)
就是NVMe的那一套,包括命名空间、控制器的数据结构和 Flush (0h), Read (1h), Write (2h), Verify (0Ch) 。
图片来源: 2020 Storage Developer Conference. © Western Digital, Inc. All Rights Reserved.
写入的时候为什么要用Append
NVMe标准允许设备以任何顺序执行指令,但是在一个zone里面必须要顺序写入。所以必须要把写入指令排好顺序。由于SSD本来就很快,需要消耗很多CPU资源,这样一来开销更大,因此要改用append指令。
append指令需要3个参数:ZSLBA,数据长度,数据缓存区。
标签:zone,写入,Storage,ZNS,2020,简介,SSD From: https://www.cnblogs.com/hushrush/p/16918925.html参考