SSD核心技术——FTL(Trim和磨损平衡)

Trim

一句话解释:
是一个新增的ATA命令,当用户删除一个文件时,操作系统会发 Trim 命令给 SSD,告诉 SSD 该文件对应的数据无效了。一旦 SSD 知道哪些数据无效之后,在做垃圾回收的时候就可以把这些删除掉的数据抛弃掉,不做无谓的数据搬移。


磨损平衡

闪存都是有寿命的,即闪存块有擦写次数限制。磨损平衡就是让SSD中的每个闪存块的磨损(擦除)都保持均衡。
SSD一般有动态磨损平衡(Dynamic WL)和静态磨损平衡(Static WL)两种算法。动态磨损平衡算法的基本思想是把热数据写到年轻的块上,即在拿一个新的闪存块用来写的时候,挑选擦写次数小的;静态磨损平衡算法基本思想是把冷数据写到年老的块上,即把冷数据搬到擦写次数比较多的闪存块上。
动态磨损平衡算法比较好理解,重点说静态磨损平衡算法。
冷数据由于不经常更新,它写在一个或者几个闪存块上后,基本保持不动,这样,这些闪存块的擦写次数就不会增加;相反,对别的闪存块,由于经常拿来写入用户数据,擦写次数是一直增长的。这样就导致闪存块的擦写不均衡,这不是我们期望的。因此,固件需要做静态磨损平衡,把冷数据搬到擦写次数比较多的闪存块上,让那些劳苦功高的年老闪存块休息一下,腾出来的年轻闪存块去替年老的闪存块承受用户数据的写入。
固件在做静态磨损平衡时,一般使用GC机制来做,它会挑选出冷数据所在的闪存块,其他和GC差不多,读取源闪存块上的有效数据,然后把它写到擦写次数相对大的闪存块上。
静态磨损平衡算法会导致

  1. 静态磨损平衡数据和用户数据写在同一个内存块上
    SSD核心技术——FTL(Trim和磨损平衡)_第1张图片
  2. 静态磨损平衡数据和GC数据写在同一个内存块上
    SSD核心技术——FTL(Trim和磨损平衡)_第2张图片
  3. 三者全都混写在同一个内存块上
    SSD核心技术——FTL(Trim和磨损平衡)_第3张图片
    冷数据是用户不经常更新的数据,热数据是用户更新频繁的数据
    混在一起有不好的地方:
    在做GC时,由于冷数据掺杂其中(冷数据由于不经常被用户更新,这些数据往往是有效数据),这些冷数据就可能经常地从一个闪存块搬到另外一个闪存块,然后再从另一个内存块搬到其他的闪存块上去,长此以往,引入了不少额外的写,导致写放大增大。
    解决方案:
    做静态平衡时,用专门的闪存块来放冷数据,不与用户或GC写入同一个内存块,如下图:
    SSD核心技术——FTL(Trim和磨损平衡)_第4张图片
    这样冷数据就单独写在某些闪存块上,它们一般不会挑选为 GC 的源闪存块,也就避免了这些冷数据的频繁搬移。它只有在下一次需要做静态磨损平衡的时候,才会从一个闪存块搬到另外一个闪存块。
    不同的 SSD 有不同的静态磨损平衡做法。如果不在乎写放大(EC 预算够大,不差钱),也不在乎冷数据搬移导致的性能下降,那么冷热数据混在一起就一起,毕竟实现简单(不需要另外管理静态磨损平衡的闪存块);相反,如果对写放大比较敏感的话,那么最好还是冷热数据分开。

你可能感兴趣的:(java,jvm,开发语言)