ZNS v.s. FDP
ZNS沿着Open Channel的路线演进,Open Channel方式本身是把NAND Flash操作向系统应用呈现,通过系统直接控制NAND Flash操作来极大化利用NAND。这样的问题是,系统应用需要知道SSD上的NAND具体操作方式和物理拓扑,NAND代次演进和厂家差异,系统应用也需要进行适配。ZNS是在这基础上进行一层抽象,抽象成Zone粒度和追加写方式,把NAND Flash具体操作和粒度进行了一层屏蔽。
Multi-Stream多流则是在标准命令接口上,添加数据的冷热度标识,由SSD对数据进行分类存放和GC,来减少SSD的写放大,这对系统就容易适配多了。SSD在支持多流情况下,也是需要做GC的,这样只能一定程度的削减OP,譬如从3DWPD盘改为1DWPD盘就能符合系统应用;另外,系统应用层面的GC和SSD层面GC冲突,会带来QoS不利影响。后来IO Determinism主要在于通过NVM Set对SSD空间进行划分和性能隔离,通过Deterministic Window (DTWIN)和Non-Deterministic Window (NDWIN)的机制交互,让系统应用知道SSD的NVM Set的QoS状态,系统按一定规则可以得到确定性时延。与Open Channel路线相比,多流路线更看重系统和SSD盘片的解耦,以及系统应用的向下兼容。由此也更容易获得系统应用的支持和落地。FDP就是在此路线上做进一步精细化演进。
FDP 设计
FDP是在IO写命令上,使用Directive Specific (DSPEC)字段(也是stream标识字段),来标识Reclaim Group和Placement Handle。Placement Handle在SSD内映射到Reclaim Unit Handle。
SSD可以将并发NAND拓扑划分为多个Reclaim Group,做成Reclaim Group间性能隔离。将SSD内的NAND物理block(或者Super block),划为Reclaim Unit。那么,Reclaim Unit Handle指向不同的Reclaim Unit,可以理解成写入不同的NAND物理block的写指针。从系统应用看来,就是在标准IO写时,通过DSPEC标识,指定写入到特定性能隔离区域Reclaim Group里面,放置到按类别(不同业务类型或者冷热度)区分的Reclaim Unit(即NAND block)。
与ZNS不同,FDP的写方式并没有与Reclaim Unit对齐,而且FDP是允许SSD盘内GC的。这样,SSD盘片在NAND异常处理的主动权就大得多。FPD定义Reclaim Unit Open时间,超过时间会造成Reclaim Unit切换。而且,SSD盘内由于异常处理等原因造成的Reclaim Unit切换都要事件上报。这样看,FPD就是要求更严格的多流或者IOD模式。
FDP通过一些机制,避免与系统应用GC冲突,尽量减少SSD盘内GC。FDP定义Estimated Reclaim Unit Time Limit (ERUTL),用于表示Reclaim Unit写入后到被SSD盘内主动回收的时间。在未到时间前,系统应用主动回收,就不会触发SSD盘内GC。事实上,对系统应用中的热数据或者前台写入数据,在一定时间内系统应用进行整理回收。而系统中的冷数据,系统应用不会搬移,SSD内部会根据NAND特性主动进行GC和Wear Leveling。对于SSD应用能力较强的系统,可以通过感知Reclaim Unit粒度,根据Reclaim Unit制定系统GC策略,从而获得更好的效果。 FDP通过与系统间的模糊策略交互,使SSD盘只有弱GC,减少写放大,降低SSD盘的OP。同时也减少系统和SSD两层GC冲突,保障系统侧的时延和QoS。