理解SSD核心技术FTL

理解SSD核心技术FTL

Flash的基本操作

不同于HDD,Flash的基本操作除了读和写,还包括擦除操作。这三种操作的具体表现是:读操作以page为单位读取存储单元中的0或1,写操作以page为单位将存储单元从1变成0,擦除以block为单位将存储单元从0变成1(一个block包含若干个page)。

所以在SSD中三种操作的速度关系是:擦除操作 < 写操作 < 读操作。

在一个page中,除了data area,还包括一个叫Out-Of-Band area(OOB)的部分,这部分记录了这个page的相关信息,包括ECC、逻辑页号(LPN)、页状态。

页状态包括:valid,invalid,erased/free。

  • 当页没有存储数据时,状态是erased;
  • 写操作的对象只能是erased页,写入数据后,这个页的状态就变成了valid;
  • 异地更新后,存储了旧(脏)数据的页的状态变成invalid。

Flash的特性

  • 读写操作速度不对称,擦除操作 < 写操作 < 读操作;
  • 异地更新
    就地更新开销大,主要操作包括:1)读取整个block到缓冲区; 2) 更新部分页; 3) 擦除整个block; 4) 把整个block写回到Flash。
    异地更新的主要操作包括:1) 标记更新的页为invalid;2) 向erased页写入新的数据。这也就需要记录逻辑页和物理页的映射关系,这部分由Flash Trabslation Layer (FTL)完成。
  • 需要GC。异地更新导致部分页invalid,需要GC回收这些invalid。GC操作先将选中的victim block中的valid全部迁移到一个erased block,然后对victim block执行擦除操作。
  • 磨损均衡(wear-leveling)。Flash的存储单元寿命有限,持续对某些存储单元擦写(Program/Erase),会加速这部分单元损坏。执行磨损均衡的独立会影响性能,粒度越小,会导致磨损越均匀,但是带来的开销也越大,所以在粒度和性能之间存在trade-off。

SSD的FTL

大部分SSD的存储介质是NAND flash,所以也就需要FTL模块。FTL的主要工作是将面向用户的逻辑页映射到具体物理页,根据映射粒度大小不同,可以分为页映射、块映射和混合映射。

  • 页映射:
    页映射将每一个逻辑页映射到每一个物理页,映射关系如图1(a)所示,FTL从块设备的上层(如文件系统层)接收到LPN(logic page number),通过映射表获取到PPN(physical page number),然后将这个PPN分成PBN(physical block number)和块内偏移offset,拿着PBN和offset即可寻址到对应的页面。
  • 块映射:
    块映射将每一个逻辑块映射到每一个物理块,映射关系如图1(b)所示,FTL从块设备的上层接受到LPN,将这个LPN分成LBN和offset,通过映射表将LBN转换成对应的PBN,拿着PBN和offset即可寻址到对应的页面。块映射的基本原理就是组映射,也就是块中的页面都是连续的,假如不是连续的,那也就不可能通过offset寻址到目的页面。
    在这里插入图片描述
    图 1
  1. 混合映射:
    页映射的优点是效率高,直接通过映射表就能将LPN转换成PPN,获取到对应的页,但是缺点是要为每一个page维护一个映射条目,例如512GB的SSD和2KB的page,就需要256MB的映射表。
    块映射的映射表占用空间较小,同上面的例子,512GB的SSD和2KB的page,一个block包含512个page,所以仅需要512KB的映射表。但是块映射的灵活性差,例如对某个block中的第p个page更新,就需要找到另一个blcok,并且该block的page是erased,这会降低到目的block的概率,并且降低性能。
    为中和页映射和块映射的优缺点,提出混合映射的结构。以前SSD采用如图2的混合映射,即将Flash中的block分成Data Block和 Log Block,前置采用块映射记录全量的数据,后者采用页映射记录增量的数据。GC的时候就将Data Block和Log Block合并。
    在这里插入图片描述
图 2
DFTL认为应该合并Data Block和Log Block 可能会导致性能低下,所以应该完全抛弃Log Block,全部采用页映射。通过局部性原理,将全量的映射条目存放在Flash,部分经常使用的映射条目放在SRAM,如图3所示。当在SRAM中没有命中映射条目时,从Flash中取出需要的映射条目并缓存到SRAM;当SRAM空间不足以存放更多条目时,利用LRU算法把最近最少使用的映射条目放回到SRAM。由于全量的映射条目放在Flash的page中,那么当SRAM没有命中时,如何找到映射条目存放在哪一个page呢?这里涉及了一个GTD(Global Translation Directory) 用于记录存储映射条目的page的映射关系,也就是通过这个可以找到需要的映射条目所在物理页面。

在这里插入图片描述

图 3



现代SSD广泛使用DFTL,DFTL的核心思想是利用局部性原理,将可能访问的映射条目放在SRAM,全量的映射条目放在Flash,所以其性能与命中率密切相关。



参考:
【1】DFTL: A Flash Translation Layer Employing Demand-based Selective Caching of Page-level Address Mappings

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值