ZNS: Avoiding the Block Interface Tax for Flash-based SSDs
1.背景
现有的存储软件于block interface之上。block interface 特点:
存储设备可以表示为一个大数组,数组的元素是固定大小的block 块;
访问每个block的方式: 读,写,覆盖写;
HDD和SSD都采用这种接口方式;
而现有的基于Flash 介质的SSD,其与生俱来的特性与当前的块设备接口不能很好的适配:
SSD 以append 方式写page 到erased block,每次覆盖写整个block前需要擦除整个block;
数据放置开销:over-provision(%7-28%),这样意味着更高的成本开销和更低的性能
2.方案- ZNS
ZNS(Zoned namespace SSD), 摆脱block interface 的开销,采用zone接口:
将存储空间划分为以zone 操作单位的区间;
每个zone 以append-only 方式写数据,覆盖写zone中的block 需要先擦除整个zone
采用zone interface:
SSD 内部就不需要微粒度的数据放置,这样就可以省掉7%-28%的Op 容量空间,降低成本,提供可预测的高性能。
性能测试结果比较:
传统block SSD擦盘后,性能依次划分为三种状态:FOB state,transition state(“write cliff“ 写性能断崖式下降),steady state。FOB state下,显示的是无GC 下SSD host write的性能; 跟随其后的是1 filled drive,开始trigger GC;steady state 下 后host与GC 以特定速度比例工作。OP 越大,steady state 性能越好。
3.ZNS 实现方案
要达到上面ZNS SSD 的性能,需要依赖SSD 固件和存储软件生态的架构的修改。
-
ZNS SSD
放弃GC功能,将GC 功能上交给host;
暴露给host 软件以zone interface,只允许sequential zone write,这样消除interface- media 的mismatch;
由于不允许random write,并且zone reset交由host 发起,ZNS SSD只负责粗粒度的数据放置,这样细粒度的数据放置功能交由host;
存储介质的可靠性依旧是ZNS 的权责。
host software 使能 ZNS SSD 的三种方法
host side FTL
host side FTL 作为ZNS SSD与随机写和Application 之间的中介,只实现地址映射和GC 功能;
对Application 隐藏 ZNS SSD zone顺序写,呈现传统SSD block interface;
有很高的CPU 和DRAM 开销;
随机写的workload 下,能有很好的性能收益;File system support zone operation(f2fs with zone support)
采用类似的文件系统zone数据布局策略;
文件系统简单的数据布局更高效;
但与Application之间有indirection,这样数据放置的不高效,会导致host GCApplication support zone operation(Rocksdb w/ Zenfs)
采用类似application zone数据布局策略;
没有host side FTL 和file system support zone operation的indirection的开销;
更高的性能和最小的写放大;
4. 实现
增加Linux 生态对ZNS SSD的支持:Zoned Block device;
NVMe driver对zone 特性的支持;
API支持:report zone,zone 管理(zone reset),active zone最大个数
Linux filesystem 支持:扩充F2FS
ZenFS 对zone的支持
5. 性能比较效果
Raw IO 特征-提升write throughput & read latency
总结:
1.通过移交FTL的管理数据放置的功能到host software,ZNS 能消除内部的微粒度的间接映射表,GC和OP;
2.ZNS SSD 能提升性能和降低SSD 的成本;