Nand Flash管理算法介绍之主要模块介绍

本文把FTL管理划分为5个相对独立的模块,FTL的实现的过程中,可以根据需求进行组合。

Data Organization:

本模块主要是管理Flash空块的分配和组织。
在FTL管理中,Flash一般划分为两个部分:元数据区域(meta-data)、数据区域(data)。元数据区域用于FTL的表格管理,和提供冗余块(over-provision)。数据区,存放Host发的逻辑数据。
在数据区域,FTL还会对Flash划分为一个个物理空间集合,比如说,按Nand Flash页大小(4KB、8KB、16KB)或者按块大小(256KB、512KB、1MB)进行划分。算法页会对整个逻辑区间划分为一个个逻辑片段进行管理,和Nand Flash物理空间集合一一对应。一个逻辑片段大小为16KB,对应一个Nand 16KB的物理位置。如下图,Nand Flash集合可能来自不同块、页、或者不同LUN、DIE、Channel。

Nand Flash管理算法介绍之主要模块介绍_第1张图片

Data Mapping:

本模块主要是负责逻辑空块到物理空块的映射。FTL映射均是使用键-值的方式对映射进行管理,把逻辑片段按顺序排号当做键,对应的Nand位置为值。
当前主流的FTL,数据映射方案大致有三种:页映射方式,块映射方式,混合映射方式。
1. 页管理算法:以Nand页大小对整个逻辑区间进行划分,划分为很多个页大小的逻辑片段,对应着一个个Nand物理页。优点:映射灵活,随机性能较其它两种映射方案好。缺点:映射关系对Ram需求大,Ram中一般不能全部缓存所有映射关系,所以需要把大部分逻辑映射关系存到Flash中。更新映射效率低,管理复杂。如果把页映射管理的逻辑片段变得更小,比如说4K、8K,当前主流高性能设备很多都采用这种方式,和文件系统最小操作单位对应。
2. 块管理算法:以Nand块大小对整个逻辑区间进行划分,划分为很多个块大小的逻辑片段,对应着一个个Nand物理块。优点:映射关系简单,管理简单。缺点:回收效率低,满满的都是缺点。
3. 混合管理算法:把Nand数据区域划分为两种类型,Log块和Data块,数据更新先写到Log块上,然后通过Merge、Switch方式转换为Data块。Log块使用页管理,Data块使用块管理。优点缺点是上述两种的折中。
没有哪种映射方案是最优的,随机存取的话,页管理算法比较好,顺序存取,块管理算法会好。不过从应用上来说,写入的方式多种多样,页管理算法适应性是最好的。不过,高性能的设备,绝大部分使用页管理算法(4K、8K等扇区管理算法)。

Data Clustering:

主要用于把Host写下来的数据进行分类,存放于不同的物理位置中。
主要有以下几种类型:
1. 区分原数据和新写入的数据写入的位置,新、原数据写到不同的地方(新数据写到Log块,原数据保存在Data块)。--PS:此为最基本的方式。
2. 根据写入数据长度,划分为顺序数据和随机数据。顺序数据可以采用块映射管理,而随机数据可以使用页映射进行管理,从而提高性能。
3. 根据存取的频率,划分为热数据和冷数据。热数据更新频繁,产生很多的无效页,因此和冷数据区分开的话,可以减少垃圾回收损耗。

Data Recycling:

当空闲页或者当前符合触发条件,那么FTL就会执行数据回收,也称为Garbage Collection。
数据回收触发条件主要有2种:
1. 静态回收:当空闲页数据少于阈值,那么触发回收。回收阈值不好选定,设置太高,那么会频率进行数据回收;设置较低的话,数据回收不及时。
2. 动态回收:触发数据回收的条件是根据当前的工作负荷等因素动态调整的。
数据回收块的选择方案:
点击打开链接

Data Space Management:

此模块主要是管理空闲块队列的使用,大概有以下方式:
1. FIFO原则(先进先出)
2. 取一个擦除次数最小的块
3. 根据要存的数据类型(冷数据、热数据)去选择不同擦除次数的块

你可能感兴趣的:(FTL)