SSD的垃圾回收-GC

SSD的垃圾回收

SSD的数据写入过程

当前大多数SSD盘的内部实现,单个single block中的物理空间一般是按照4K顺序分配(与NAND的物理结构有关,可以调整分配大小,也可以组成super block的所有single block交替分配若干个4K)。

假如只有一个single  block,有1024个4K的空间,总空间为1024*4K = 1MB大小。APP向这个SSD盘写入2个文件file1和file2的数据,file1和file2分别为512KB大小。那么会有如下2种写入方式:

  • 1 顺序写入file1和file2的内容

file1和file2分别占据了NAND上这一个single block一半的空间,file1占用前512KB,file2占用后512KB,数据在物理空间上没有交叠。

  • 2 并发的写入file1和file2的内容

file1和file2是交错排布在NAND上这一个single block上的。

不管是按照上述哪一种方式写入file1和file2的数据,都占据了single block的一半空间。

垃圾回收过程 

假如file1和file2的数据的生命周期没有关联。fil1的数据被修改了一部分,那么被修改部分的新数据就会搬移到另一个single block上去。如下图所示:

或者:

上述的情况中,block1上出现了垃圾数据,如果垃圾数据多到一定程度,block1就会被选中为垃圾回收的目标block。垃圾回收主要有如下步骤:

1、选中做GC的block,一般选择有效4K数据块最小的block;

2、将block上有效的4K数据块依次读出,并写入另一个空白block;

3、将做GC的block执行擦除操作,该block重新变为空白block,可以继续使用;

第2步中的将有效数据读出并写入另一个空白块的过程,导致了写放大WA的产生。

降低写放大的尝试

写放大的产生对SSD的可用空间、性能、寿命等都有非常大的影响,如何降低SSD的写放大一直都是业界的一个热点问题。

写放大WA产生的关键:

  • NAND FLASH的擦除单位是以一个block为单位。
  • 写入数据时的空间分配单位是以4K、8K为单位,与block不一致。在部分数据被更新后,导致单个block上出现垃圾数据、有效数据并存的情况。

降低写放大WA的关键:

  • 一个block被选中擦除时,block中的数据全部为垃圾数据,或者尽可能接近这个目标。

降低写放大WA的一条巨大鸿沟:

  • 数据的生命周期是由应用决定的(与应用强相关),而NAND空间的分配是由SSD盘的主控芯,片/FW决定,二者难以协调一致。

正是由于数据的生命周期是由应用决定,所以大部分尝试降低写放大的尝试方案,都是需要从应用入手,期望将数据的生命周期与NAND空间的生命周期(block的生命周期)关联起来,以减少擦除block时搬移数据带来的写放大WA。

然后,不同应用的数据更新的方式各不相同。所以,降低写放大的问题,最终是如何组织和更新数据的问题,决定权在数据应用程序手中。而NVMe协议和SSD需要做到的是,提供一种简洁、标准的手段,让应用或者驱动能够控制SSD盘上NAND空间的分配、擦除

按照这个思路,业界分别做过以下方案的尝试:

  • open chennel
  • Denali
  • ZNS
  • FDP(TP)

上述尝试,后续再做进一步分析。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值