(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
侵权立删