理解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

理解SSD核心技术FTL相关推荐

  1. [SSD核心技术:FTL 13] 不求同生,但求同死?固态硬盘闪存磨损均衡技术详解

    声明 主页: 元存储的博客_CSDN博客 依公开知识及经验整理,如有误请留言. 个人辛苦整理,付费内容,禁止转载. 内容摘要 前言 FTL闪存转换层 Wear Leveling磨损均衡 前言 一块2T ...

  2. [SSD核心技术:FTL 15] 固态存储FTL映射表的神秘面纱

    声明 主页: 元存储的博客_CSDN博客 依公开知识及经验整理,如有误请留言. 个人辛苦整理,付费内容,禁止转载. 内容摘要 前言 1 为什么需要映射表? 2 FTL映射管理策略 3 映射表管理的最小 ...

  3. [SSD核心技术:FTL 2] 固态硬盘数据是怎么找到的?神秘的FTL详解

    声明 主页: 元存储的博客_CSDN博客 依公开知识及经验整理,如有误请留言. 个人辛苦整理,付费内容,禁止转载. 内容摘要 FTL 在设备端还是Host 端? Device Based FTL 在设 ...

  4. [SSD核心技术:FTL 1] 谁“偷“走了固态硬盘的容量? 预留空间 (OP )图文全解

    声明 主页: 元存储的博客_CSDN博客 依公开知识及经验整理,如有误请留言. 个人辛苦整理,付费内容,禁止转载. 内容摘要 前言 1. 预留空间OP是什么? 2. 预留空间OP有什么好处? 3. O ...

  5. [SSD核心技术:FTL 16] 固态硬盘预读技术详解

    声明 主页: 元存储的博客_CSDN博客 依公开知识及经验整理,如有误请留言. 个人辛苦整理,付费内容,禁止转载. 内容摘要 什么是预读? 预读原理 基于历史IO请求的预读技术 随机读操作预读技术 混 ...

  6. [SSD核心技术:FTL 11] 固态硬盘Read 技术详解

    声明 主页: 元存储的博客_CSDN博客 依公开知识及经验整理,如有误请留言. 个人辛苦整理,付费内容,禁止转载. 内容摘要 固态硬盘读操作策略 NAND 读操作特性 多个Plane 并行读 小IO ...

  7. [SSD核心技术:FTL 9] 谁是固态硬盘数据的守护神?盘内RAID1/RAID5图文详解_盘内数据冗余保护

    声明 主页: 元存储的博客_CSDN博客 依公开知识及经验整理,如有误请留言. 个人辛苦整理,付费内容,禁止转载. 内容摘要 前言 1.RAID 概述 2.基本原理 3.盘内RAID 技术原理

  8. [SSD核心技术:FTL 3] 固态硬盘SLC缓存技术详解

    声明 主页: 元存储的博客_CSDN博客 https://blog.csdn.net/vagrant0407?type=blog 本文依据公开知识及个人经验整理而成,如有错误请留言. 文章为个人辛苦整 ...

  9. [SSD核心技术:FTL 7] 固态硬盘 FTL 坏块是怎样管理的 | NAND闪存坏块管理研究

    声明 主页:元存储的博客_CSDN博客 依公开知识及经验整理,如有误请留言. 个人辛苦整理,付费内容,禁止转载. 内容摘要 全文9753字 1 闪存背景 2 坏快概念 3 坏块来源

  10. 理解SSD多盒-实时目标检测

    这幅图片解释了构成直观的解释关于SSD多盒目标检测技术. 自从AlexNet在2012年ILSVRC比赛中对于图像识别任务打败传统计算机视觉方法后给研究界带来风暴.在计算机视觉领域,传统神经网络在图像 ...

最新文章

  1. vs 添加ico图 到资源
  2. php验证码内置函数,刚写了一个PHP的高效验证码函数 | 学步园
  3. [转贴]经济学人:Win7拉开新时代序幕 云计算群雄逐鹿
  4. js的变量作用域 ,变量提升
  5. Facebook开源算法代码库,轻松复现前沿视频理解模型
  6. Mysql 查询一天中,每个小时数据的数量
  7. zookeeper伪集群部署
  8. php观察者模式使用场景,php设计模式系列--观察者模式
  9. LED显示驱动(五):视频设备显示驱动调试步骤总结
  10. STM32学习——半天学完正点原子入门篇例程,STM32:学会了吗?我:学废了✨
  11. android采集声卡,农步祥作品 - Android系统下使用USB声卡音质测评报告 [Soomal]
  12. 约瑟夫环(简单理解版)
  13. 五年程序员一般多少工资?网友:能活下来我都觉得是庆幸的!
  14. qq音乐播放小Demo
  15. 一个程序员的减肥方法(男女通用); 饮食+运动
  16. 小秘谈币:什么是实在的佛系炒币?
  17. 在Linux中运行Nancy应用程序
  18. Top 10 Performance Problems taken from Zappos, Monster, Thomson and Co
  19. 记一次Oracle 11.2.0.4 RAC异地还原到单实例
  20. 穿透还原卡或还原软件

热门文章

  1. 初识ARM嵌入式系统
  2. 基于javaweb+jsp的在线书城书店系统(java+jdbc+Servlet+mysql)
  3. 5G十大细分应用场景研究报告
  4. 在Android中Unity3D透明背景的实现
  5. VLAN划分和网络配置实例
  6. 浅谈存储之SAN基本概念
  7. 哈夫曼编码(Huffman Coding)多图详细解析
  8. 微信3D小游戏已达数百款,这里肯定有你没玩过的小游戏!
  9. 计算机游戏软件制作,游戏制作软件,制作游戏的软件
  10. 改进后的第二版Retropie树莓派掌机(二)