FTL算法分析(1)

 

(1)Block Mapping

将块映射地址分为两部分:块地址和块内偏移地址(offset)。映射表只保存块的地址,逻辑块和物理块的块内偏移地址对应相同。因此,在块映射机制中,只保存块的映射关系。

优点:映射表size小,对于读操作非常简单。

缺点:不利于random write,random write会产生大量的数据update。如果一个block中的某个page需要update,需要将这个块的数据复制到另一个物理block中,然后擦除old block,将更新的数据写入新分配的物理block中。导致flash block的空间利用率非常低,且会引起频繁的erase block 和valid page copying。

(2)Page Mapping

LPN->PPN,每个Page对应一个mapping项。

优点:GC时能明显减少valid page copy

缺点:mapping size 大,当flash容量增大时,mapping table 会迅速增大。 

(3)Hybrid Mapping

综合page mapping和block mapping的优点,在block mapping的基础上,对频繁更新的data采用page mapping。由于通常只有小部分数据的更新比较频繁,大部分数据的更新是很少的,所以用block mapping机制减少mapping table size,而对更新频繁的data采用page mapping。

Hybrid mapping把flash分为Data Block和Log Block。Data block用于存储数据,采用block mapping,Log Block用于存储对于Data block更新后的数据,即相当于写缓存来处理更新操作,Log Block采用page mapping。

 

 GC操作:选一个Victim Block,

Switch Merge:当Data Block的所有page都被顺序重写,则只需将Log Block置为Data Block,再Erase 无效的Data Block即可。

Partial Merge:当Log Block中的数据全部有效,且Data Block中的全部有效page可以copy到Log Block的剩余空白页,则在数据copy后,将Log Block置为新的Data Block,再擦除旧的Data Block。

Full Merge:首先从空白块中分配一个Free block,然后把旧数据块和Log Block中的Valid Page写入到新的空白块中,把写入新数据的块置为新的Data Block,把旧的Data Block和Log Block全部擦除。

 

 

BAST:一个Log Block对应一个Data block,当有一个写更新,data 被顺序地写到相应的Log Block中。当一笔写没有Free Log Block时,需要进行Merge操作。包括上面提到的三种merge。当数据更多的是Sequential时,switch merge会增多,效果较好。但是当write pattern变的random时,full merge会增多,效率降低。这种现象称为a log block thrashing problem,即Log block抖动问题。

 

FAST

为了解决BAST的Log Block抖动问题,FAST提出了一个解决方案。一个Log Block可以被多个Data block共享,当Data block有数据更新,data被写到Log Block中,当没有Free log block page可用时,触发GC。FAST 最worse时,GC效率也会非常低。

 

LAST

FAST虽然分了Seq Log Block,Random Log Block,但FAST没有考虑random writes的时间相关性,即random write的冷热数据。LAST对random write分冷热处理,降低了full merge操作。(那么是如何降低的呢?)

首先是冷热数据分类,small size writes具有较高的时间相关性,即访问频率比较高,是hot data,而large size writes访问频率低,是cold data.这个也好理解,比如在文件系统中,写一个document,通常会实时地保存,并频繁修改。而一个大电影,通常写入后不怎么修改。在文件系统中,一个long sequential write会被切成small write requests被发到FTL,和其他task的write request 交替发送。因此,FTL层看到的request size是比original write size(由task直接产生的)小。同时也发现,small writes通常来自small original writes,而large write request是一个long sequential access的一部分。因此,small writes可以认为是random access pattern。Large writes是sequential write。通常小于4K 认为是random write。 

DFTL

   在Hybrid FTL设计中,不论设计多优秀,由于Data block和Log Block映射粒度大小的不同,总会产生开销巨大的full merge,尤其是在大量随机写入的情况下,性能下降非常明显,DFTL在这种背景下产生了。

DFTL是一种根据负载访问特点动态加载映射信息到RAM的FTL算法。DFTL采用基于页的映射机制,将整个映射表都存储在闪存中,并将闪存从逻辑上分为数据块区域和翻译块区域,分别用于存储常规数据和映射表信息。然后根据需求动态加载部分映射表(Cached Mapping table,CMT)到RAM中,来处理访问频繁的请求。同时,更新请求会导致翻译页的映射表发生变化,为此,DFTL设置了一个全局翻译目录(Global Translation Directory,GTD)来记录翻译页的变化。

   DFTL本质上是基于页的映射,其请求处理流程非常灵活。请求到来后,DFTL依次做如下判断:(1)查找CMT。若映射信息在CMT中,则读请求可以直接得到服务,对写请求,需要更新CMT中相应的映射信息;若不在CMT中,则需要到闪存中读取映射信息,再加载到RAM中。(2)判断CMT是否满。若CMT未满,则直接加载映射信息到CMT中,同理,需注意为写请求更新映射信息;若CMT已满,则根据S-LRU算法,选取合适的映射项进行剔除。(3)判断剔除项是否更新。若被剔除的映射信息未发生更新,则可以直接剔除;若已发生更新,即与闪存中存储的映射信息内容不同,则需根据GTD查找到相应的翻译页,进行更新,以保证映射信息的一致性。

    DFTL开销主要来源于两个方面:

    首先,从闪存的地址转换页中提取地址映射项到缓存中将产生转换页的读操作,当缓存已满需要进行置换时,置换的更新映射项需要先读取对应的转换页,并在更新后写回闪存.因此,缓存未命中时,最好的情况产生1个读操作,最坏情况会产生2个读操作和1个写操作.以图 1为例,假设数据请求的逻辑地址是28,由于缓存未命中,首先访问GTD获得最新地址转换页的地址,然后从内存中读取该页(TP1),定位到对应的地址映射项(28,56), 最后将其放入地址映射缓存中.当CMT置换出地址映射项(112,84)时,由于该映射项在缓存中被更新过,需要首先根据GTD获得闪存中的地址转换页(TP32),读取该页后更新对应的地址映射项,最后写回到新的转换页中.可以看到,地址映射缓存会带来很多地址转换页读写操作,这些操作穿插在处理数据请求的过程中,影响系统性能.


 

     另一方面,性能开销来源于垃圾回收过程.当数据块被垃圾回收时,所有有效页对应的转换页都需要更新.如图 2(a)所示,在回收块中有4个有效页(PPN从10到13),每个页对应于不同的转换页(分别为TP97,TP100, TP101,TP103).在拷贝有效页后,所有对应的地址转换页也需要被读取、更新、写回到闪存中(写回后分别为TP128,TP129,TP130,TP131).值得注意的是,实际更新的地址映射信息只有4项,却造成对应4个转换页的更新操作.因此,当回收块中存在很多有效数据页时,垃圾回收将产生大量的转换页更新开销.


 

    总体来说,DFTL存在两个主要问题.首先,地址映射缓存的映射信息利用率较低,在读取整个转换页后,只缓存其中一个地址映射项.对于连续读写,某个地址转换页可能被重复多次请求产生大量开销.其次,在处理写请求时,不同逻辑地址的数据被连续写入同一数据块中,在垃圾回收时将产生大量的转换页更新.

 

LazyFTL

 

    LazyFTL把flash memory分为4parts:数据块区域(Data blocking area,DBA),映射块区域(Mapping Block Area,MBA),冷快区域(Cold Block area,CBA)和更新块区域(Update block area,UBA).除了MBA其他都是存用户数据的。

DBA按照Page-Mapping,由全局映射表GMT(Global Mapping table)管理,GMT存储在MBA区域。SRAM中分了一个小Cache来负责GMT频繁访问的部分,这部分cache采用LRU算法管理。另一个表叫全局映射目录GMD(Global Mapping directory)也存在SRAM中负责管理GMT存储的物理地址。

LazyFTL不同于原有的page-Level FTL策略主要不同之处在于LazyFTL保留了两个小分区,CBA和UBA,延缓了由写请求和GC引起的GMT的改动。CBA和UBA由UMT(Update Mapping Table)管理,UMT可以由hash table实现高效的插入,删除,修改等。

在UBA上的一个块被称为CUB(current update block)用来响应host的写操作。当CUB写满时,从Free block中分一个块作为CUB。同样,在CBA区域有一个CCB(current cold block)负责处理GC引起的搬块操作。

 

本文转载于:http://ninayang1987.blog.sohu.com/307981171.html

侵权立删

 

  • 3
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: NAND Flash FTL (Flash Translation Layer) 层算法是用来管理 NAND Flash 存储设备的软件层。它负责将逻辑块地址映射到物理块地址,并处理错误校正和块擦除等操作。 FTL 的主要功能包括: 1. 将逻辑地址映射到物理地址,以实现对 NAND Flash 的访问。 2. 维护块映射表,并在写操作期间进行页映射。 3. 处理块的擦除和重定位,以确保 NAND Flash 的有效使用。 4. 实现错误校正,确保数据的完整性。 FTL 的实现方式可以有很多种,如页映射、块映射、段映射等。各种 FTL 算法的差别在于它们的映射方式、空间利用率、写操作效率、读操作效率等方面的不同。因此,选择适合的 FTL 算法可以提高 NAND Flash 存储设备的性能。 ### 回答2: NAND FLASH FTL (Flash Translation Layer)层算法是一种用于管理 NAND Flash 存储器的技术。NAND Flash 存储器是一种非易失性存储设备,广泛应用于固态硬盘(SSD)等设备中。 在 NAND Flash 中,数据以页(page)的形式存储,页通常包含多个扇区(sector)。然而,由于 NAND Flash 存储特性,写操作必须先将整个块(block)擦除,然后再进行写入。这个擦除和写入操作的过程称为擦写操作。由于每个块可以进行有限次擦写操作,当一个块的所有扇区都被写满后,该块就无法再进行写入操作,这就导致了块擦除和写入次数平衡的问题。 FTL算法的目标是解决上述平衡问题。FTL 通过对 NAND Flash 存储的逻辑和物理地址进行映射来实现。在 FTL 中,逻辑地址是由操作系统或文件系统直接访问的地址,而物理地址则是对应的 NAND Flash 存储地址。 最基本的 FTL 算法是页级映射(Page Mapping),它将逻辑页地址直接映射到物理页地址。为了解决块擦除平衡问题,FTL 实现了垃圾回收(Garbage Collection)机制。垃圾回收的过程是将没有被写满的块中的有效数据移动到新的块中,然后擦除旧块以便可被再次使用。 此外,还有其他高级的 FTL 算法,如 Log-structured FTL 和 Hybrid-Mapping FTL。Log-structured FTL 将所有写入操作都记录在一个写日志中,当需要读取数据时,可以根据写日志中的记录获取数据。Hybrid-Mapping FTL 则结合了页级映射和块级映射,在空间利用率和写性能之间取得了平衡。 总之,NAND Flash FTL算法通过逻辑和物理地址映射以及垃圾回收机制解决了 NAND Flash 存储的块擦除和写入次数平衡的问题,提高了存储器的性能和寿命。 ### 回答3: NAND FLASH FTL(Flash Translation Layer)是嵌入式ssd(Solid-State Drive)中的一种关键算法,用于管理和操作NAND Flash存储芯片。以下是对NAND FLASH FTL算法的详细描述: NAND FLASH FTL算法的核心目标是对NAND Flash芯片进行逻辑管理,隐藏其内部特性和复杂性,并提供快速和可靠的数据访问。主要功能包括地址映射、垃圾回收和错误管理。 首先,地址映射是NAND FLASH FTL算法的核心部分。由于NAND Flash芯片以页为单位进行读写操作,而应用程序以逻辑块为单位进行操作,因此FTL层需要建立逻辑块到物理页的映射关系。这个映射表通常是一个磁盘上的数据结构,可以通过查询快速获取逻辑地址相对应的物理地址。 其次,垃圾回收是为了解决NAND Flash芯片的特殊特性而引入的。NAND Flash存储单元需要整体擦除才能再次写入,这会导致写入速度的下降和寿命的缩短。而垃圾回收算法通过识别并整理已经被删除数据占用的块,将有效数据移动到其他块,并擦除空闲块,以便重新利用。其中的核心思想是尽可能减少整体擦除操作的触发次数,从而提高写入效率和NAND Flash的使用寿命。 最后,错误管理是为了应对NAND Flash存储芯片的可靠性问题,因为NAND Flash在读写操作中可能出现位翻转和坏块等问题。FTL算法通过实时监测和处理这些错误,使用冗余数据或纠错码对数据进行保护和修复,从而提供数据的可靠性和完整性。 综上所述,NAND FLASH FTL算法通过地址映射、垃圾回收和错误管理等核心功能,对NAND Flash存储芯片进行逻辑管理,提供快速、可靠的数据访问,并最大限度地提高NAND Flash的使用寿命。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值