基于NAND闪存的FMNFS文件系统的设计

2009-06-05 03:59江珊珊
新媒体研究 2009年9期

全 蕾 江珊珊

[摘要]通过对NAND闪存使用的文件系统YAFFS实现原理的分析与研究,针对其两点不足:加载时间随着存储容量的增大而增大;对静态数据没有很好的实现损耗均衡,提出一种快速加载的文件系统FMNFS (Fast-Mounting NAND File-System)。

[关键词]NAND闪存 YAFFS 加载时间 损耗均衡

中图分类号:TP2文献标识码:A文章编号:1671-7597(2009)0510041-01

一、引言

闪存作为目前嵌入式系统中应用最为广泛的存储器,按照存储矩阵结构的不同分为NOR型和NAND型两种。NAND Flash强调降低每比特的成本,更高的性能并且像磁盘一样可以通过接口轻松升级,是高密度数据存储的理想解决方案,被大量应用于移动存储设备、移动媒体设备和嵌入式设备中[1]。

目前可用于NAND型闪存的文件系统包括集中索引的文件系统和专门为NAND闪存设计的文件系统。到目前为止,YAFFS系列是唯一专门针对NAND闪存而设计的文件系统,YAFFS解决了集中索引文件系统中,数据易丢失及损耗均衡等问题。但随着NAND闪存存储容量的快速增加,YAFFS也日益暴露其缺点,在大容量的NAND闪存上设计专门的文件系统成为了目前的一个研究热点。

二、FMNFS的设计思想

YAFFS的启动过程虽然不需要像JFFS系列一样扫描每一个Flash的存储单元。但是要扫描 NAND Flash上每一页的附加存储区,根据其中的控制信息来建立文件系统的结构。所以YAFFS的启动加载时间是同Flash的存储容量成正比的[2]。目前,NAND Flash的存储容量越来越大,所以其加载时间是比较长的。

YAFFS采用一种多策略混合的算法来进行垃圾回收,将贪心策略和随机选择策略分别用在不同的情况下。虽然就更新频繁的数据而言,YAFFS实现了损耗均衡[3],但是YAFFS没有对占用大部分存储空间的静态数据实现损耗均衡。因此YAFFS不能实现整个闪存器件的损耗均衡。

针对上面这两点,本文提出了一种新的文件系统:快速加载的闪存文件系统FMNS(Fast -Mounting NAND File-system)。

在YAFFS中,文件的控制信息和数据信息混合存储在同一个块中,所以在加载时需要扫描所有的块,这大大延长了文件系统的加载时间。为了能更快的加载文件系统,FMNFS采用了一种新的方法,它将集中索引的文件系统和日志文件系统两者的优点结合起来。在FMNS中,不再将文件的控制信息和数据信息混合在一起存储,而是将文件的控制信息和数据信息分离,分开存储,一个擦除块或完全用于存储文件信息节点,或者用于存放纯数据节点。其中文件信息节点中包括对数据节点的索引。除此之外,FMNFS还将所有存储文件信息节点的擦除块的地址存储在特定的位置。这样,在加载的时候只要扫描文件信息节点块中各个节点便可以建立文件系统的整体结构,而不用扫描整个的NAND Flash,从而大大减少了文件系统的加载的时间。

为了实现损耗均衡,使每个物理块的使用寿命趋向于平均,延长闪存的寿命,FMNFS在垃圾回收和空闲块的分配过程中使用了冷热数据[4]的概念。所谓热数据即需要被频繁更新的数据,冷数据则是相对来说较少访问、更新的数据。下面详细介绍FMNFS中损耗均衡算法的设计。

三、FMNFS中损耗均衡算法的设计

为了让NAND闪存上每个擦除块的寿命趋于平均,根据上述的冷热数据的概念,针对冷数据和热数据采用了不同的算法,以延长NAND闪存的使用寿命。

FMNFS中,为了更好的实现擦除均衡,其所采用的算法为:

1.通过在附加区设置 Erase_Num字段来记录每个擦除块的擦除次数;

2.针对更新频繁的索引信息 (热数据),在分配擦除块的时候每次都将擦除块次数最小的擦写块分配给它;

3.对于不经常更新的只读静态数据 (冷数据),则在经过“一段时间”后,需要对其进行拷贝移动。这个“一段时间”是擦除次数的差值来决定的,即当所有块中擦除次数最多的块与擦除次数最小的块的差值大于某个阈值时,则按下列步骤进行:(1)找到擦除次数最大的块,将其上面的数据复制到一个空白块上面;(2)对擦除次数最大的块进行擦除操作;(3)将静态数据从擦除次数最小的块复制到之前刚刚擦除好的块;(4)将静态数据所在的块作为垃圾块进行回收并在分配过程中将其分配给更新频繁的数据。

改进的垃圾回收算法的设计思想是:不再预先设置一个阈值,当空闲块链表中的擦除块小于这个数目时才启动垃圾回收操作。而是在空闲链表中的所有擦除块被用完后,才启动垃圾回收。

具体方法:预先设置一个空闲块链表中单元块数的最小值Min,Min需要尽量满足下次更新操作所需的空闲块数。Min的值不可以过大,这样空闲块数过多,从而减少闪存中的可用空间。Min的值也不能过小,这样便起不到改进的作用。由于垃圾回收时不存在空闲块,脏块上面的有效数据便没有办法保存,所以在回收脏块的时候采用基于阈值的贪心策略对垃圾块进行回收,即开始时每次选择块内无效页数量最多的脏块进行回收,当空闲块上的擦除块数量到达一定值时,便从脏块链表的开始处对垃圾块进行回收。

四、FMNFS损耗平衡测试结果及分析

测试使用的目标板是Blackfin531,NAND闪存的大小是512M,每页的大小是2048+64字节,RAM的大小是64M。

按照冷热数据的思想,文件系统中存放占据闪存大部分空间的只读静态数据文件3个,大小分别为:1M、10M、16M;存放300个小文件,其容量不超过10K。其中冷数据文件被访问的概率为20%,热数据被访问的概率为80%。

对YAFFS2和FMNFS中擦除块擦除的平均程度比较得:

1.在YAFFS2中存在一部分擦除次数接近于零的擦除块;而在FMNFS中不存在这样的块。

2.FMNFS的擦除块的擦除次数更加平均,且擦除次数的值比较低,从而可以延长闪存寿命;而YAFFS2中擦除块的擦除次数较FMNFS普遍偏高。

参考文献:

[1]潘玉华、孙涛,NAND FLASH的数据管理方法[J].苏南科技开发,Sunan Sci-Tech,Devel,2006(12):1-3.

[2]龙瑞,YAFFS嵌入式文件系统原理分析[J].电脑编程技巧与维护,2006(10):76-79.

[3]王同洋、董永帅、吴俊军,基于阑值控制的损耗均衡算法设计[J].计算机工程与科学,2008(3):72-74.

[4]杨春林、雷航,基于NAND Flash的嵌入式文件系统的改进与优化[J].计算机应用,2007(12):3102-3104.

作者简介:

全蕾,女,江西临川人,讲师,研究方向:嵌入式系统及核仪器;江珊珊,讲师。