(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

侵权立删

FTL算法分析(1)相关推荐

  1. 基于FCN,U-Net的深度学习医学影像分割算法(细胞分割算法)以及传统算法分析

    本博文主要分析了基于传统计算机视觉的细胞分割算法和基于深度学习的细胞分割算法.主要针对医学影像分割算法.包括了FCN全卷积网络的细胞分割效果,U-Net细胞分割效果.查阅了采用深度学习分割医学影像的几 ...

  2. ftl模板导出excel_freemarker导出复杂Excel

    原文: freemarker导出复杂Excel date: 2017-04-20 12:39:04 [TOC] 序言 用Freemarker做Excel导出确实很容易. 但是导出复杂Excel, 例如 ...

  3. Weiss的数据结构与算法分析(C++版)源码编译说明

    最近尝试编译Weiss的那本数据结构与算法分析(C++版)提供的源代码时,遇到一些问题,特记录如下: 考虑到该书提供的代码是使用模板技术较多,这在提供简洁代码的同时,也给源码的编译带来了一些问题.因而 ...

  4. 反汇编算法介绍和应用——递归下降算法分析

    上一篇博文我介绍了Windbg使用的线性扫描(linear sweep)反汇编算法.本文我将介绍IDA使用的递归下降(recursive descent)反汇编算法.(转载请指明来源于breaksof ...

  5. 数据结构与算法分析(C++版)(第二版)

    查看书籍详细信息: 数据结构与算法分析(C++版)(第二版) 内容简介 本书采用程序员最爱用的面向对象C++语言来描述数据结构和算法,并把数据结构原理和算法分析技术有机地结合在一起,系统介绍了各种类型 ...

  6. 总结:DCIC算法分析赛完整方案分享!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:阿水,北航计算机硕士,Datawhale成员 DCIC2020 本 ...

  7. 算法分析赛:从数据中挖掘价值,72万奖金,DCIC 2020 大数据赛道来了!

    01  DCIC 2020:数字中国创新大赛 DCIC 是国内赛事中少有的开放政府真实数据的经典赛事,除了高知名度,高影响力,高奖金,对能力履历,学术研究和企业技术应用都提供了很好的机会.作为数字中国 ...

  8. 线性排序算法分析总结

    线性排序(Linear sort),指的是 时间复杂度为 O(n) 的排序算法.之所以时间复杂度能达到线性,是因为这种排序不是基于比较的,但它的适用场景也有很大的局限性. 线性排序有三种:桶排序.计数 ...

  9. python数据结构与算法分析_数据结构与算法(Python版)

    为什么研究数据结构与算法 本周带大家进入Python版数据结构与算法的学习.想必大家都听过"算法"一词,算法的学习对编程者来说是至关重要的.首先我们先了解一下为什么要研究数据结构与 ...

  10. Kmeans聚类算法分析(转帖)

    原帖地址:http://www.opencvchina.com/thread-749-1-1.html k-means是一种聚类算法,这种算法是依赖于点的邻域来决定哪些点应该分在一个组中.当一堆点都靠 ...

最新文章

  1. C# 给PDF添加图片背景
  2. 外媒列举2011年十大IT预测:鲍尔默卸任微软CEO
  3. Loj#114-k大异或和【线性基】
  4. ZK的实际应用:MVVM –以编程方式更新视图
  5. systemctl命令
  6. Windows系统的32位和64位系统区别
  7. 精于图片处理的10款jQuery插件
  8. rmarkdown+flexdashboard制作dashboard原型
  9. html打开ppt自动播放,PPT怎么自动播放
  10. Ubuntu 查询IP地址,设置静态IP、网关
  11. text to image(八):《Image Generation from Scene Graphs》
  12. Python Cannot open E:\Python36\Scripts\pip-script.py
  13. Talk to AI,揭秘背后的语音识别数据
  14. 竞赛获奖系统解读:远场说话人确认中基于两阶段迁移学习解决域不匹配问题
  15. bugku 我永远喜欢穹妹
  16. 一些基于SWT的项目
  17. 阿里云和腾讯云这两家对比哪个比较好一些?
  18. Java语言程序设计与数据结构(基础篇)梁勇第九章 *9.3
  19. 基于FPGA的复杂的数字时钟设计(代码)
  20. 数学 {有界性定理,最值定理,零点定理,介值定理}

热门文章

  1. Keytool命令来生成CA数字证书
  2. iterator的用法
  3. java调用百度Ocr识别以及报错SDK108的解决办法
  4. 公共基础知识:地震逃生注意事项
  5. 除了Google Adsense外比较适合英文站投放的国外广告联盟
  6. Android产品研发(十六)--开发者选项
  7. android 实现果冻动画效果,Android果冻效果(阻尼动画)
  8. 创业者两大特征:喜欢折腾与坚持不懈
  9. 响铃:含着金钥匙的HomeKit如何才能大器晚成?
  10. 独立游戏开发入门的 6 个步骤