Flash Translation Layer | My Note

Flash Translation Layer

Updated: Oct 19th, 2023


FTL是SSD中的核心,其负责将主机访问SSD的逻辑地址转换成SSD上真实的闪存物理地址,是NAND Flash与上层应用之间的一个中间层。上层应用通过LBA(Logical Block Address,逻辑块地址)读写SSD,SSD将LBA翻译成实际的物理地址从而对闪存进行读写,并通过修改映射关系与移动数据实现磨损均衡、坏块管理、数据保持、垃圾回收等功能。

FTL的必要性

固态中使用的存储介质,如NAND Flash这一种闪存介质,存在的一些特性导致我们必须使用FTL来对读写闪存的行为进行管理。

  1. 闪存块必须先擦除才能写入,不能覆盖写。
    1. 修改操作变成了1)添加新数据,2)使原有数据无效化(变成垃圾),需要通过FTL修改逻辑块地址->闪存物理地址的映射关系才能实现这样的修改操作。
    2. 需要FTL进行垃圾数据的回收。
  2. 闪存块都是有一定寿命的。
    1. 每个闪存块能够被擦除写入的次数是有限的。
    2. 不进行管理,可能会有几块闪存块由于频繁的读写操作很快坏掉。
    3. FTL会进行磨损均衡(Weal Leveling)来尽可能让所有闪存块磨损的程度相近,延长固态寿命。
  3. 每个闪存块可被读的次数是有限的。
    1. 由于闪存芯片存在读干扰问题,读的次数过多会发生比特翻转。
    2. 因此需要在读的次数到达一定阈值后就对数据进行移动或刷新。
  4. 闪存的数据保持问题。
    1. 闪存在不通电或不读写的情况下,其也会由于电子迁移导致比特翻转。
  5. 闪存中存在坏块。
  6. 等等..

FTL需要实现的功能

  1. 地址翻译
  2. 垃圾回收
    1. Trim
  3. 磨损均衡
  4. 坏块管理
  5. 其他
    1. 掉电恢复
    2. SLC Cache
    3. Read Disturb & Data Retention

FTL实现地址翻译

参考《深入浅出SSD》第四章:FTL 4.2

FTL的功能主要通过地址转换来体现,我们提出两个新问题:

  1. 地址转换的粒度是?(可以类比内存多级页表,一般页表项越大,项数越少,转换效率越高,但内部碎片的问题会更加严重)
  2. 地址映射表存放的位置是?(如果能放DRAM会更快吧)

两种不同的SSD架构对这两个问题分别作出了不同的回答。

质量较好,成本较高的SSD,常常以页为基本单位进行单位转换,映射表存放在SSD内部的DRAM中以进一步提升地址转换的效率。

no title picture (图源《深入浅出SSD》P127)

而比较廉价的SSD,或U盘,往往以块为基本单位,映射表存放在闪存中。考虑到每个块会含有大量页,典型的一般在256个页。如果一个页式4K那读写粒度就是1MB起步了,这样子在完成随机小写任务的时候,就会带来大量的写放大,也就是说你本来只要写几个B的数据,结果因为这几个B分布的比较远,实际上你其实写了几个MB的数据。另外在闪存上的映射表进行地址转换性能非常差,就算加上一个映射表缓存,性能依然难以和前面提到的SSD相抗衡。随机小写更是经常发生映射表缓存不命中的问题。

no title picture (图源《深入浅出SSD》P127)

由此可见,在类似的存储介质下,不同的结构会对SSD的性能有着巨大的影响。

FTL中的垃圾回收

参考《深入浅出SSD》第四章:FTL 4.3, 4.4

考虑到对数据进行修改操作会使旧数据成为“垃圾数据”,这些垃圾数据占据了大量的空间,我们需要对其进行回收以释放出更多的空闲空间。这一个过程就是垃圾回收。具体的回收方法是:寻找垃圾数据较多的闪存块,将其中的有效数据复制出来,那么就可以擦除这些块,成为未来可用的空闲块了。(如下图,对两个闪存块进行垃圾回收,将有效数据复制出来并擦除闪存块后,就得到了两个可用的空闲块)

no title picture (图源《深入浅出SSD》P13)

FTL中的磨损均衡

参考《深入浅出SSD》第四章:FTL 4.5

FTL中的坏块管理

参考《深入浅出SSD》第四章:FTL 4.7

FTL中的其他功能

FTL如何实现掉电可恢复?

参考 《深入浅出SSD》第四章:FTL 4.6

no title picture (图源:《深入浅出SSD》P154)

SLC Cache

参考 《深入浅出SSD》第四章:FTL 4.8

【硬件科普】固态硬盘的缓存是干什么的?有缓存和无缓存有什么区别? - YouTube

RD & DR

参考 《深入浅出SSD》第四章:FTL 4.9

参考资料

  1. 《深入浅出SSD》第四章:FTL

Instead of authenticating the giscus application, you can also comment directly on GitHub.


Notes mentioning this note