首页 > 范文大全 > 正文

面向航电应用的FLASH文件系统分析

开篇:润墨网以专业的文秘视角,为您筛选了一篇面向航电应用的FLASH文件系统分析范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:当前航空电子系统的大容量存储设备一般选用NAND Flash作为存储介质,需使用具有高可用性和高可靠性的Flash文件系统,针对现有主流Flash文件系统,如Reliance、JFFS2、YAFFS2等,面向航电应用深入对比分析各自工作原理,给出航空电子系统选用Flash文件系统的建议。

关键词:航空电子系统;大容量存储;NAND flash;文件系统

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2013)35-8081-03

1 概述

NAND Flash是一种具有高存储密度、低功耗、非易失、大容量、优异的稳定性的存储介质,非常适用于体积小、功耗低、环境恶劣、可靠性要求高的系统,当前已被航空电子系统的大容量存储设备广泛采用。[1]随着技术的发展,航空电子系统中普遍需要通过文件系统来管理大容量存储设备。机载环境的特殊性对文件系统提出了诸多可用性和可靠性方面的需求,例如崩溃恢复、快速启动、损耗均衡、垃圾回收和高实时性等。

现有很多Flash文件系统,例如Reliance、JFFS2、YAFFS2等,都具有上述功能。该文基于机载嵌入式文件系统的需求,对现有的部分文件系统的工作原理和特点进行对比分析,对机载嵌入式Flash文件系统进行评估并给出相关选用建议。[2]

2 机载嵌入式文件系统需求

航电系统对大容量存储设备提出了抗恶劣环境、高可用、高可靠和高安全的要求。其中抗恶劣环境、高安全主要采取硬件手段实现,而高可用、高可靠需软硬件结合保证。因此,对于机载嵌入式文件系统来说,具体需求包括:

1) 可用性:可用性是指在机载领域嵌入式系统中系统资源受限的应用情景下,文件系统能够充分考虑系统资源,保证实时性,并能够高效的完成擦除、读写等操作。同时,文件系统能够根据基于NAND Flash的大容量存储器的操作特点,做相应针对性设计,具有NAND Flash的基本管理功能,如根据NANF Flash的异地更新(out-of-place)、有限的擦写次数等特征,提供垃圾回收、损耗均衡等。

2) 可靠性:机载大容量存储设备的工作环境恶劣,工作电源不稳定和突发性断电等状况极易导致存储设备中数据的灾难性损坏。因此,机载嵌入式文件系统的可靠性包含两方面的内容:一是Flash文件系统能够在程序崩溃或系统掉电时,保证文件系统的一致性和完整性不受影响,即具备崩溃恢复能力;二是能够通过灵活的校验机制与坏损管理,维护数据正确性,确保现存储单元的可靠管理,以保证数据的一致性和延长物理存储硬件的使用寿命。

3 典型Flash文件系统的实现方法

典型的Flash文件系统的实现方法有两种:

一是基于转译层(Flash Translation Layer, FTL)的文件系统。从系统层看来,转译层将Flash设备被转变为一个可覆写的块设备,从而可应用传统的磁盘文件系统。FTL把块设备上的文件系统直接应用到闪存上,直观而方便的隐藏Flash的诸多限制。但转译层往往涉及产权保护,从而阻碍了Flash文件系统的发展和推广,同时,影响了工作效率。

另一类是Flash专用文件系统。针对传统文件系统的问题,从实施掉电保护,确保数据可靠性、完整性的角度,针对Flash的特点设计了一些专用文件系统。Flash专用文件系统可分为两大类,一类是通用Flash文件系统,既可用于NOR Flash,也可在NAND Flash上运行;二是专门针对NAND Flash设计的Flash文件系统。

此外,用于Flash大容量存储器的具有高崩溃恢复能力的文件系统的工作机制还分为日志型和事务型两种。

日志型文件系统基于日志模型,会详细记录元数据中的操作和所修改的文件数据信息。每当修改文件的访问权限或者所有权,则新建一个结点将新元数据信息储存于日志最后。若是更新文件内容,不会用新数据直接覆盖旧数据,而会在Flash上合适的区域中存储新建的数据结点,并用version属性值将新旧数据结点加以区分。一旦系统发生故障,比如突然掉电或程序崩溃,由于旧数据还在,只需重放日志,即可将文件系统恢复到故障前状态。[3]

由于记录日志既需要将数据写入日志又需要写入外存,造成一些额外的开销,学术界开始慢慢的转入对事务型管理模式的研究上。事务型文件系统具有较高的可靠性,且不要求更快的CPU或是更大的存储空间。该类文件系统保护措施的理念类似于银行事务的思想,保留原始数据直到新数据写成功并且文件事务完成。在文件事务中,所有的文件系统修改,包括目录、文件、的修改,都将保存在介质中某个空闲并且不含活跃数据的区域。由于新事务的数据被写入到介质的空闲区域,从而消除了错误发生的可能性。写入到介质的空闲区域,可保持文件系统的状态。因此,之前事务的有效数据将一直有效。当写入操作期间发生系统错误时,如掉电,事务型文件系统总能提供有效的文件系统数据。

4 典型文件系统原理分析

由于基于转移层的文件系统如EXT2、FAT等对程序崩溃或系统掉电时的崩溃恢复能力较差,该文主要分析JFFS2、YAFFS2、Reliance三种常用的flash文件系统。

根据NANF Flash的异地更新策略,以页为单位进行读写,以块为单位进行擦除;更新Flash中数据时,仅是将原有数据页标记为无效,在空闲页写入更新的数据;这样,一段时间后需擦除无效页较多的块以回收存储资源,该过程称为垃圾回收。同时,每一个块的擦写次数有限,为平衡设备中每一块的擦出次数以达到最大的设备寿命,还需引入损耗均衡的思想。下面对三种文件系统的实现原理和各自针对性设计的技术策略进行简要分析。

4.1 JFFS2

JFFS2是一种日志型的专用Flash文件系统。JFFS 最初由Axis Communications 公司专门为NOR Flash 开发,后由RedHat对其进行改进,产生了支持NAND Flash 的JFFS2。

JFFS2的数据操作全部按照日志方式保存在Flash设备中,完全按照日志进行管理。JFFS2 的基本结构为一长列的节点,每个节点包含了文件的实际数据或者关于文件的其他一些信息。[4]

以垃圾回收为基础,JFFS2具有简单的损耗均衡算法,也为垃圾回收的处理机制。JFFS2将闪存上所有擦除块分为三个队列,分别为干净块链表(clean_list)、脏块链表(dirty_list)和空闲块链表(free_list),基于这些链表来完成垃圾回收操作。JFFS2文件系统基于概率算法来选定垃圾回收操作的目标链表。系统定义全局变量jiffies,表示系统时钟;当jiffies模100不为0时,系统对脏块链表中某一块进行回收操作;当jiffies模100为0时,系统对干净块链表中某一块进行回收。[5]

尽管JFFS2 解决了Flash存储器文件系统的一些问题,但是随着Flash存储器的容量越来越大,它也表现出一些严重的缺陷。首先,JFFS2 的挂载时间比较长;其次,随着容量的增加,其内存消耗增大;最后,它不能保证损耗平衡的确定性。

4.2 YAFFS2

YAFFS2是一种日志型的专用Flash文件系统。YAFFS文件系统由Aleph One公司开发,专为NAND Flash存储器设计的嵌入式文件系统,适用于大容量的存储设备。YAFFS2是YAFFS的第二个版本。

YAFFS2中,文件是以固定大小的数据块进行存储的。这种实现依赖于它能够将一个数据块头和每个数据块关联起来。每个文件(包括目录)都有一个数据块头与之相对应,数据块头中保存了ECC和文件系统的组织信息,用于错误检测和坏块处理。[6]YAFFS2把这个数据块头存储在Flash的备用空间中,充分考虑了NAND Flash的特点。当文件系统被挂载时,只须扫描存储器的备用空间就能将文件系统信息读入内存,并且驻留在内存中,不仅加快了文件系统的加载速度,也提高了文件的访问速度。

YAFFS2也提供损耗均衡和垃圾回收功能。在YAFFS2文件系统中设立Blockstate结构用于表示擦除块的各种状态,如空、满、已损坏和分配等状态。另有B1ockInfo结构,用于描述块属性,记录块内剩余空闲页数、块的状态等信息。YAFFS2采用数组管理所有块,分配空间时,按顺序对存储空间进行分配,从而实现损耗均衡。YAFFS2采用综合垃圾回收策略,具有两个垃圾回收线程,分别负责在不同情况下完成垃圾回收任务。[7]一个线程具有最低优先级,只在系统空闲时才会启动,该线程采用贪心算法,针对具有最多无效数据的擦除块,这样可以一次回收尽可能多的存储空间。另一个线程具有最高优先级,当系统负载较大,需要很多存储区空间时,启动该线程,它最先适应算法以便提高执行速度。

但是上述繁复的日志操作会增加一定的内存消耗,也会增加系统的加载时间。

4.3 Reliance

Reliance是Datalight公司开发的事务型文件系统,结合Flash FX转译层可用于管理Flash设备。[8]

Reliance基于事务模型来保护文件系统并且维护数据完整性。Reliance可以不必进行数据恢复操作,保留原始数据直到新数据写成功并且文件事务完成,如果数据写入期间发生中断,文件系统的原始状态还保存在介质中,使得文件系统总能处于有效状态。

Reliance的垃圾回收功能由FTL层的Flash FX组件完成。在Flash FX中,将大量无效块划入擦除区域并请求回收操作。在垃圾回收过程中,先复制擦出区域的有效数据到空闲备用擦除区,然后擦除旧区域并将其作为新的备用擦除区。Flash FX的损耗均衡包含动态损耗均衡和动态损耗均衡两部分操作。动态损耗均衡算法针对频繁更新的数据和较少使用的存储空间。当更新数据或者写入新数据缺乏足够空间时,则会触发动态垃圾回收。该算法将从当前可用块中确定一个擦除次数最少的块作为目标块,并将有效数据写入该目标块。每次都对使用次数最少的可用块进行操作,一定程度上达到均衡利用频繁更新或较少损耗的设备块。然而,一些数据写入数据块后,基本不会再更新(比如地图信息),这些块称为冷数据块。这些冷数据块无法被动态损耗均衡算法顾及,导致其使用频率很低。作为补充,静态损耗均衡算法能够有效地解决该问题。静态损耗均衡算法,会比较擦除次数最多的块和次数最少的块,二者擦除次数的差超过一定阈值时,交换二者所存储的数据,目的是在满足损耗均衡的同时,尽可能减少存储器总的擦除次数。

基于事务型理念,Reliance文件系统在大容量介质中可快速启动,并可长时间保持有效状态,系统初始化不需要执行存储介质检测或扫描从而减少加载时间。

5 测试结果与理论分析

文件系统应针对NAND Flash的特点,提供高效的损耗均衡和垃圾回收机制的同时,尽可能提高加载速度和读写性能,满足实时性。基于广泛的资料收集和实验验证,我们对上述三种文件系统对比分析。

在加载时间方面,Flash文件系统的加载时间已经为系统启动延迟的最重要的原因,当Flash容量和存储数据大小都很庞大时其影响更为明显。文件大小的改变、整个分区的利用率,都将影响到文件系统的加载时间。我们很容易通过加载指令来测量加载时间。

由于基于事务结构的Relaince在加载速度上比日志型的JFFS2和YAFFS2文件系统存在明显的优势。

在读写性能方面,影响Flash文件系统读写性能的因素非常复杂,涉及映射机制、垃圾回收算法、Flash结构、压缩算法等等。文件系统标准检测程序Benchmark可以用于直接测试读写性能。由此,Relaince的读写性能优于JFFS2和YAFFS2。

由图可知,由于日志型文件系统在系统启动和读写操作过程中加入一些日志记录操作,从而增加了加载时间,降低了读写数据的速度,而在事务型文件系统中,通过事务型操作改善了前者的问题。上述测试结果符合原理分析。

6 结束语

本文针对航电需求,分析了典型Flash文件系统的实现方法和工作原理,对JFFS2、YAFFS2和Reliance进行了分析比较,认为针对NAND Flash的专用文件系统JFFS2和YAFFS2的功能完备、原理简单高效,而通用文件系统Reliance的工作机制更为复杂;但基于事务模型的Reliance相比于基于日志型的JFFS2和YAFFS2,具有相近的可靠性的同时,可以保证更高的性能,对航空电子系统中Flash文件系统的选择具有重要意义。

参考文献:

[1] 陈智育.嵌入式系统中的Flash文件系统[J].单片机和嵌入式系统应用,2002(2):5-8.

[2] Chin-Hsien Wu, Tei-Wei Kuo, Li-Pin Chang. Efficient initialization and crash recovery for Log-based file systems over flash ACM symposium on Applied computing, 2006:837-863.

[3] MMCA Technique Committee[C]. The Multimedia Card System Specification. US: Multimedia card association,2003.

[4] Li-Pin Chang. On efficient wear-leveling for large-scale flash memory storage systems. Proceedings of the 2007 ACM symposium on Applied computing, 2007: 1126-1130.

[5] 张小平.嵌入式系统中NAND Flash文件系统的研究[D].太原:太原理工大学,2010:17.

[6]CHEN TIANZHOU, HU WEI. Smart File System: Embedded File System Based on Nand Flash[C]. IEEE Computer Society, 2006, 14(4):65-66.

[7] 张磊.基于闪存的嵌入式文件系统的研究与实现[D].成都:电子科技大学,2005:1-2.

[8] Datalight Reliance? Developers Guide for Wind River VxWorks. Datalight, 2006.