SSD核心技术——FTL(1)

FTL综述

什么是FTL

FTL是Flash Translation Layer(闪存转换器)的缩写,完成主机(或用户)逻辑地址空间到内存(Flash)物理地址空间的翻译(Translation),或者说映射(Mapping)。SSD每吧一笔用户逻辑数据写入内存地址,便记录下该逻辑地址到物理地址的映射关系。当主机想读取该数据时,SSD便会根据这个映射,从闪存读取这笔数据然后返回给用户。
完成逻辑地址空间到物理地址空间的映射,这是 FTL 最原始且基本的功能。事实上,SSD 中的 FTL 还有很多事情可做。SSD 使用的存储介质一般是 NAND Flash。

闪存块的重要特性

  1. 闪存块(Block)需要先擦除才能写入,不能覆盖写(Update in Place)
    当写入一笔新的数据时,不能直接在老地方更改(闪存不允许在一个闪存页上重复写入,一次擦除只能写入一次),必须写到一个新的位置,因此FW(FirmWare,固件)需要维护一张逻辑地址到物理地址的映射表。
    另外,往一个新的位置写入数据,会导致原本位置上的数据无效,这些数据需要被回收,FTL会把若干个闪存块上的有效数据搬出,写到某个新的闪存块,然后把之前存储无效数据的闪存块擦除,得到可用的闪存块,这就是GC(Garbage Collection,垃圾回收),是FTL需要做的一件重要的事情。
    GC如下图所示:
    在这里插入图片描述
    在Block x和Block y上有很多垃圾数据,其中Block x上的A、B、C 为有效数据,Block y上的D、E、F、G 为有效数据。垃圾回收就是把一个或者几个 Block上的有效数据搬出来集中写到某个空闲 Block 上(比如 Block z)。当这些Block上的有效数据都搬走后,FTL 便能擦除这些 Block,然后又能把这些 Block 拿出来供 SSD 写入新的数据了。
  2. 闪存块都是有一定寿命的。
    每擦除一次闪存块,都会对闪存块造成磨损,因此闪存块都是有寿命的,可以用PE(Program/EraseCount)数衡量。我们不能集中往某几个闪存块上写数据,不然这几块很快就会因 PE 耗尽而死亡,这不是我们想看到的。我们期望所有闪存块都用来均摊数据的写入,而不是有些块飞快磨损,而其他块毫无作为。所以 FTL需要做 Wear Leveling,让数据写入均摊到每个闪存块上,即让每个块磨损都差不多,从而保证 SSD 具有最大的数据写入量。
  3. 每个闪存块读的次数是有限的,读得太多,上面的数据会出错,造成读干扰(Read Disturb)问题
    FTL 需要处理读干扰问题,当某个闪存块读的次数将要达到一定阈值时,FTL 需要把这些数据从该闪存块上搬走,从而避免数据出错。
  4. 闪存的数据保持(Data Retention)问题
    由于电荷的流失,存储在闪存上的数据是会丢失的。这个时间长则十多年,短则几年、几个月,甚至更短(这是在常温下,如果是在高温环境下,电荷流失速度会加快,数据保存的时间就更短了)。
    如果 SSD 不上电,FTL 对此也是毫无办法,因为没有运行机会。但一旦上电,FTL就需要对此做点什么,比如扫描闪存,发现是否存在数据保持问题,如果存在,则需要搬动数据,防患于未然。好的 FTL,就需要有处理数据保持问题的能力。
  5. 闪存天生就有坏块。另外,随着 SSD 的使用,也会产生新的坏块。
    坏块的症状是擦写失败或者读失败(ECC 不能纠正数据错误)。坏块管理也是 FTL的一大任务。
  6. 对 MLC 或 TLC 来说,存在 Lower Page corruption 的问题。
    即在对 Upper Page/ExtraPage(和 Lower Page 共享存储单元的闪存页)写入时,如果发生异常掉电,也会把之前 Lower Page 上成功写入的数据破坏掉。好的 FTL,应该有机制尽可能避免这个问题;
  7. MLC 或 TLC 的读写速度都不如 SLC,但它们都可以配成 SLC 模式来使用。
    好的 FTL,会利用该特性去改善 SSD 的性能和可靠性。
    上面说的这些特性是闪存的共性,不同的闪存间还会有各自的问题。FTL 除了完成基本的地址映射,还需要处理垃圾回收(GC)、磨损平衡(Wear Leveling)、坏块管理、读干扰(ReadDisturb)处理、数据保持(Data Retention)处理等事情。
    随着闪存质量变差,FTL 除了完成上述常规处理,还需要针对具体闪存特性,去做一些特殊处理以获得好的性能和高的可靠性。

FTL 分为 Host Based(基于主机)和 Device Based(基于设备)。Host Based 表示的是,FTL 是在 Host(主机)端实现的,用的是自己计算机的 CPU 和内存资源:
在这里插入图片描述
相反,Device Based 表示的是,FTL 是在 Device(设备)端实现的,用的是 SSD上的控制器和 RAM 资源:
在这里插入图片描述
目前主流 SSD 都是 Device Based FTL。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值