Nand Flash管理算法介绍之FTL简介
和传统磁盘相比,Nand Flash存储设备存储延迟低、功耗低、更高的存储密度、抗震型号更好和噪声低。但是,由于Nand Flash的特性影响(读写擦的单位不一致,每个块有P/E次数限制),Nand Flash不能直接通过简单的接口转换就拿来使用。所以我们需要在Nand Flash上增加一个管理软件FTL(Flash Translation Layer)进行管理,对外就是一个黑盒子,上层应用可以通过逻辑地址来对这个黑盒子进行访问。
图1
如上图,上层应用通过逻辑地址来访问存储设备,FTL把不同的逻辑地址映射到Nand Flash中的不同位置,FTL简单来说,主要就是映射管理。
固态存储相对于传统磁盘的一些特点:
- 异处更新(out-of-place Update)。正如之前所说,Nand Flash编程操作只能把存储单元从1变为0,所以在重新编程之前需要进行擦除操作。而且编程以页为单位,擦除以块为单位(一个块包括多个页)。如果使用同处更新(in-place update),就是把同逻辑地址重复更新到同样的位置上,那么每一次更新,都需要先进行一次擦除操作。由于擦除操作耗费时间和对Flash有损伤,所以一般FTL使用异处更新,把更新的数据映射到一个新的位置上。 如下图,上层应用先写逻辑地址0、1,FTL把数据映射到Nand Flash的物理块0、1页上,然后上层应用又写逻辑地址0,此时物理块0第0页不能重新编程,所以FTL把数据存放在物理块0的第2页上。 图2
- P/E次数有限制。之前有提到,Nand Flash每个块是有擦除次数限制的,在擦除一定次数后,这个块会变得不稳定,编程进去的数据容易出错,甚至会擦除失败。
- 性能更好。和传统机械硬盘不同,Flash存储是没有机械设备的,比如说不需要寻道,对所有的地址访问开销都一样,特别是在随机读性能上,SSD远远好于传统机械硬盘。按这个道理,Flash设备随机访问和顺序访问的速度是一样,但现实上,Flash支持Cache操作,在顺序访问中可以提前把下一个页的数据读取放到内部寄存器中,可以更快响应读请求。所以在顺序访问上速度要比随机访问要快的。
- 读、写速度不一致。如之前文章描述的,把电子从浮动门中吸进去(写操作)比检测浮动门电场状态(读操作)要耗时。所以FTL在管理时,尽量减少写和擦除的操作。
FTL功能
- 地址映射管理。闪存设备对外是一个黑盒子,里面集成了Nand Flash和FTL等,上层应用使用逻辑地址来访问,FTL把逻辑地址映射到不同物理地址上,管理着每个逻辑地址最新的数据存放的物理位置,如图1。
- 垃圾回收。随着数据的写入,闪存设备上有些块的部分数据已经无效了,需要把有效的数据从块上搬走,然后擦除用来接收新的数据。
- 磨损均衡和坏块管理。因为每个块的P/E次数是有限的,某些块可能被重复使用而损坏了,而有些块数据很少被访问,所以一直没有进行操作过。为了避免这种情况,FTL加入磨损均衡的功能,大致是通过控制垃圾回收和空块池的管理,从而平衡每个块的使用次数,最理想是所有块一起达到磨损阈值。
由于Flash本身就存在部分坏块,在使用的过程中部分块会变坏,所以FTL在管理的时候需要避开这些无用块,把使用后变得不稳定块上的数据及时拷贝到稳定位置。
FTL研发关注点
- 映射管理性能。映射分为两种:逻辑地址到物理地址映射,成为直接映射;物理地址到逻辑地址映射,称为逆映射。大部分时候使用的都是直接映射,直接映射可以可能保存在SRAM中,也可能存放在Flash中。逆映射需要通过扫描Flash来建立映射关系,因为逆映射关系存放在Flash页的冗余空间中。可见,映射关系存放在SRAM中时获取对应关系速度是最快的,但由于SRAM资源比较紧张,所以会把所有映射关系存放在Flash中,软件只会加载使用的那段映射关系。逆映射需要扫描Flash来建立映射关系,所以速度最慢,一般用于特殊情况映射关系的恢复,比如说操作过程中断电了,或者某张映射表格所在的物理页坏了,需要重建。
映射影响着我们数据的存放,比如说需要区分顺序数据和随机数据,随机数据可能区分为热数据、冷数据。如果把热数据和冷数据存放在同一个块中,由于热数据更新频繁,导致物理块有效页利用率不高,把此块进行垃圾回收时,要把其中冷数据有效页拷贝到其它地方,导致写放大。如果冷热数据区分开,可以避免在垃圾回收中回收到冷数据。
映射管理是FTL中最重要的一点。 - 垃圾回收效率。垃圾回收需要考虑到冷热数据、磨损平衡和读写延迟。回收过程中把热数据和冷数据混合在一个块中,会导致冷数据的频繁读、写,加剧Flash损耗和影响性能。而且,热数据会被经常更新,在垃圾回收流程中应该避免回收热数据块。所以垃圾回收流程,需要综合考虑几大方面。
- 读写延迟。 读写延迟主要是指上层应用发送读写指令,设备处理、回复数据的时间。理想情况是,收到指令,软件在RAM中找到映射关系,返回数据。事实上影响的因素很多,比如说存在后台操作,在指令执行中间,软件可能进行垃圾回收,不能及时响应命令,如果垃圾回收流程控制不好,会造成上面这种情况,写速度波动很大,给人感觉就是在打CS,时而流畅,时而卡顿。
- SRAM需求。SRAM价格比较高昂,所以一般产品会严格控制SRAM的大小。如果SRAM足够大,可以把映射信息都保存在SRAM上,也把Flash中的数据都读取到SRAM上,性能是最好的(此外最好得有个备用电源或者超级大电容,意外掉电时可以把SRAM中被更新的数据写回Flash~)。事实上SRAM大小远远不够的,所以有块管理算法、混合管理算法和把映射关系存放在Flash中的方案,缓存上层应用数据也要考虑把部分冷数据回写到Flash中。
- Flash并行操作。闪存设备底层,每片Flash可以进行Multi Plane操作,多片Flash间同时操作,也可能有多通道可以并行操作。这些操作可以大大加速对Flash的访问速度,有点类似于RAID技术。 以上提到的FTL基本功能是相互关联的。比如说,上层应用写数据到某个逻辑地址上,地址映射管理在空块池中获取一个物理块来接收数据,然后触发了垃圾回收。垃圾回收在选择物理块的时候需要考虑到块的磨损情况、是否坏块,在回收这个块的时候需要使用并行操作,提高回收速率。
- 异常处理。在Nand应用场景中,比如说SSD、U盘、eMMC,均存在一些突然断电的情况。如何在突发掉电的情况后恢复数据,保持映射关系正常。比如说,RAM中缓存着最新的映射关系,没有保存在Flash中,此时掉电后,如何在下次上电后把RAM中的映射关系恢复;如何保证当前找到的映射表格是最新的等等。 还有规避Flash特性造成的错误,如驻留错错误(Data Retention)、Disturb。
Nand Flash管理算法介绍之FTL简介相关推荐
- GD32学习笔记(3)NAND Flash管理
目录 NAND Flash介绍 ECC算法 FTL 参考代码 ECC 写入数据后获取ECC并写入相应区域 读出数据.获取ECC并重新计算ECC,校验 ECC校正 FTL 标记某一个块为坏块 标记某一个 ...
- NAND Flash ECC算法长度计算
转载地址:https://blog.csdn.net/kangear/article/details/9009301 NAND Flash中常用的纠错方式 因为闪存中会有出错的可能,如果没有使用ECC ...
- 2019关于闪存芯片NAND FLASH的封装介绍
随着目前产品小型化的需求越来越多,且可穿戴设备的逐渐普及,工程师们对于芯片小型化的需求也越来越强烈,这个就涉及到了芯片的封装工艺.这次,我们只针对NAND flash的封装进行介绍. 芯片常用封装有: ...
- NAND FLash基础概念介绍
@TOC一.引脚介绍 1. 命令.地址.数据都通过8个I/O口传输 2. 写命令.地址.数据时,都需要将WE.CE信号同时拉低 3. 数据在WE信号的上升沿被NAND Flash锁存 4. 命令锁存信 ...
- nand flash 个人觉得写得比较好的文章
[详解]如何编写Linux下Nand Flash驱动 版本:v2.2.1 Crifan Li 摘要 本文先解释了Nand Flash相关的一些名词,再从Flash硬件机制开始,介绍到Nand Flas ...
- nand flash 经典 全面 ------如何编写Linux下Nand Flash驱动
Crifan Li 摘要 本文先解释了Nand Flash相关的一些名词,再从Flash硬件机制开始,介绍到Nand Flash的常见的物理特性,且深入介绍了Nand Flash的一些高级功能,然后开 ...
- 小内存堆管理算法详细解析
1.小内存堆管理算法介绍 本文所介绍的内存堆管理是RT Thread操作系统中的小内存管理算法,参考mem.c源文件.这个程序适用于小内存的CPU,比如像STM32F这样的只有几十-几百KB内存的处理 ...
- Android AccountManager 账户同步管理简单介绍
Android AccountManager 账户同步管理简单介绍 文章目录 Android AccountManager 账户同步管理简单介绍 前言 AccountManager 简介 如何让自己的 ...
- XGBoost算法介绍
XGBoost算法介绍 一.简介 二.基本原理 三.目标函数 三.节点分裂 3.1 贪心算法 3.2 近似算法 四.其它特点 4.1 缺失值处理 4.2 防止过拟合 五.总结 一.简介 XGBoo ...
最新文章
- Linux 服务器日志文件查找技巧精粹
- 不可错过的 GAN 资源:教程、视频、代码实现、89 篇论文下载
- sap IUT255 Integration of SAP CRM and SAP IS-U_EN_Col62.pdf
- 浅谈Java中的数据类型以及面向对象
- centos7输入systemctl status network.service出现Unit network.service could not be found的解决办法
- Kibana Guide ( Kibana 向导 )
- RBF、GRNN和PNN神经网络的深入浅出
- 无需用户输入,Adobe提出自动高质量图像合成新方法
- InstallShield 2012 Spring新功能试用(6): InstallScript工程支持64位组件(Components)...
- C#之整数与字符串互转
- Echarts滚动条
- CAD测量图纸时数据显示不出来怎么办?
- 品读 泰戈尔 飞鸟集 之六 伤往昔
- origin中画双y轴
- 网络带宽和下载速度的换算
- 旷视科技2018暑期实习-算法研究员面试记
- 阳光宽频加密算法破解,找出隐藏真实地址。
- Win10应用程序无法正常启动 提示0xc0000142怎么解决?
- 2022-07-31:给出一个有n个点,m条有向边的图, 你可以施展魔法,把有向边,变成无向边, 比如A到B的有向边,权重为7。施展魔法之后,A和B通过该边到达彼此的代价都是7。 求,允许施展一次魔法
- matlab 画网格