面向流式数据的嵌入式文件系统

2015-11-02 05:57吴京洪曾学文李明哲
计算机工程 2015年9期
关键词:流式存储空间大容量

吴京洪,曾学文,李明哲,陈 君

(1.中国科学院声学研究所国家网络新媒体工程技术研究中心,北京100190;2.中国科学院大学,北京100039)

面向流式数据的嵌入式文件系统

吴京洪1,2,曾学文1,李明哲1,2,陈 君1

(1.中国科学院声学研究所国家网络新媒体工程技术研究中心,北京100190;2.中国科学院大学,北京100039)

嵌入式服务器相对于传统服务器具有一定的特殊性和专用性,传统的文件系统难以满足特定嵌入式平台高效存储的需求。针对某特定嵌入式平台下大容量流式数据存储效率低下的问题,提出一种面向大容量流式数据的嵌入式文件系统SEFS,其中创建文件时借助三层树状统计结构为新文件快速预分配存储空间,采用基于磁盘饱和度的均衡存储策略。实验结果表明,SEFS创建单个文件用时59 ms,与Ext2和MSFS文件系统相比,读文件速率分别提升了8.63%和6.45%,写文件速率分别提升了6.48%和2.94%,并且具有较好的存储均衡性和稳定性。

大容量;流式数据;嵌入式文件系统;预分配;磁盘饱和度

1 概述

随着网络应用的发展,大量的流式数据在世界各地产生并共享,从而对海量可扩展的存储系统的需求也快速增长,基于流服务的网络应用快速增长,对大容量、高可靠性、高可用性、高性能、动态可扩展性、易维护性和开放性等众多方面提出更高的需求,现有存储技术已受到空前的挑战。同时,流式数据存储系统往往存储大量的大文件,典型的文件有几百MB,甚至一些文件达到几GB,因此要重点考虑大文件的存储[1-2]。

传统的嵌入式系统资源有限,结构和功能比较简单,通用的文件系统因不能发挥其优势而不再适用于某些嵌入式系统。鉴于嵌入式系统的局限性、特殊性和专用性,很少采用完备的文件系统,而是需要为这样的嵌入式系统定制文件系统。本文结合嵌入式系统的特点,提出一种面向流式数据的嵌入式文件系统,以满足流式应用的存储需求。

2 研究背景

现有主流的商用嵌入式文件系统包括QNX提供的POSIX文件系统、VxWorks提供的快速文件系统(FFS)、pSOS文件管理系统pHILE+和VRTX提供的文件系统IFX,以上4种嵌入式文件系统是现在商用嵌入式文件系统的主流,占领大部分的市场,也代表了这个领域的先进技术。但是由于商业机密的限制,源代码和核心技术不可能公开,购买和维护的费用昂贵。而且由于嵌入式系统的专用性,无法形成统一的标准[3-4]。在自由软件方面,嵌入式Linux和LynxOS均提供了实时的类UNIX层次结构文件系统和虚拟文件系统体系结构,因此,嵌入式Linux[5]得到了广泛应用,也产生了很多基于嵌入式Linux的专用文件系统[6],包括Rom fs[7],Cram fs,Ram fs,JFFS2和YAFFS,其特点及缺陷如表1所示。

表1 常见嵌入式Linux文件系统优势与缺陷

嵌入式系统的应用范围非常广泛,不可能有一种文件系统在所有嵌入式系统中一统天下,适用于大到嵌入式服务器,小到嵌入式机顶盒等的所有情况,应根据系统应用环境和目标等来选择构建合适的文件系统[8]。

现有的面向流式数据的文件系统往往应用于集群中,主要解决的问题集中在并发服务能力、磁盘I/O、QoS方面[9],以满足流服务中用户对流式数据实时性、连续性、同步性的需求,其中,磁盘I/O性能往往是服务能力的关键体现,而现有技术尚未完全解决面向流式数据的文件系统的I/O性能低下的问题。

本文对嵌入式文件系统的需求分析一方面考虑了嵌入式存储系统内在与外在的环境要求,另一方面考虑了目前存在的问题[10]。通过将这两方面结合,根据流式数据的特点,设计适用于大容量流式数据的嵌入式文件系统。

3 结构设计

本文设计并开发出了一种面向大容量流式数据的嵌入式文件系统(Stream ing based Embedded File System,SEFS),该文件系统实现了特定嵌入式平台下大容量流式数据可靠、稳定的存储。SEFS整体结构如图1所示。

图1 SEFS整体结构

3.1 数据区

数据区的组成单元是数据块,用来存放流文件内容,每一个数据块对应若干个物理上连续的磁盘扇区,如图2所示,从而将对扇区的物理寻址转换成对数据块的逻辑地址空间的寻址,数据块的大小取决于文件系统管理的流文件的容量,在HDFS中数据块大小为64 MB[11],本文所述的SEFS中采用同样大小的数据块。

图2 数据块和扇区映射图

数据区占据了绝大多数存储空间,海量的数据块中既有已存储流式数据的“忙碌”数据块,也有尚未被使用的“空闲”数据块,为保障已存文件的数据安全,也为了更好的利用空闲存储空间,文件系统需要对这些数据块的状态进行准确、高效的管理。

3.2 位图区

位图的作用是标记数据块的使用状态。其中,忙碌的数据块用“1”标识,而空闲的数据块则用“0”标识,如图3所示。

图3 位图示意图

数据块的数量极其庞大,当需要为新文件分配存储空间时,需找到一系列空闲数据块[12],若轮询整个位图区将会大大降低创建文件的效率。考虑将数据块分组管理[13-14],每个组的数据块状态用一个位图块来表征,只在单个组内为一个新文件分配存储空间,从而创建文件时只需要轮询一个位图块而不是整个位图区,可大大提高创建文件的效率。

3.3 统计块

一个位图块表征了一个数据块组内所有数据块的使用状态,而统计块则对每个位图块中“0”的数量和最大“连续0的数量”进行统计,分别表示组内空闲数据块总数和最大连续空闲数据块的数量。

为新文件分配存储空间时,首先计算出需要分配的数据块数量,查询统计块中各数据块组的统计信息,找到一个能满足分配需求的数据块组,最终将新文件创建和分配定向到该数据块组内进行。

3.4 索引区

索引区由若干索引节点组成,索引节点中存储着流文件的元数据,包括文件大小、文件所在磁盘编号、文件索引号、文件类型、文件创建时间和存储文件的数据块位置信息等。其中,索引节点中采用若干区段的形式记录数据块位置信息,每个区段包含起始数据块编号和连续存放文件内容的数据块的数目,区段信息和数据块位置的映射关系如图4所示。

图4 数据块区段映射

3.5 文件目录

本文所述文件系统未采用传统的树状文件目录结构,而是采用了扁平式目录结构,简化后的扁平式目录结构易于管理和维护。文件目录作为文件系统的入口,将文件名映射成索引节点号,如图5所示。

图5 文件目录映射

通过索引节点号可直接访问文件元数据(索引节点),再通过索引节点信息可查询文件和读写文件数据。

文件名的长度不可预知,一般从几字节(Byte)到几十字节不等,有的甚至上百字节,若文件系统中直接存储文件名,则需要为其预留不小的存储空间,这不仅会造成空间浪费,且当文件名长度超过预留的空间时文件系统还将无法响应创建新文件的请求。通过选取合适的哈希算法(MD5摘要算法)可将长度不可控的文件名映射成长度固定为16 Byte的MD5码,既避免了浪费空间,又能解除对文件名长度的限制。

3.6 超级块

超级块中记录了磁盘扇区大小、扇区数、索引节点总数及空闲索引节点数、数据块大小、物理磁盘信息及磁盘逻辑卷信息等,超级块中的信息对文件系统至关重要,当系统异常或崩溃时,需要借助超级块中信息来完成恢复。因此,超级块中数据需写入磁盘的特殊位置进行保护,还需有多个备份以确保数据安全。

4 功能实现

SEFS主要提供创建文件、删除文件、读写文件、查询文件的功能。

4.1 文件的创建及删除

本文所述文件系统采取为新文件预分配存储空间的策略,即创建文件时便为文件指定大小,且创建后文件大小不再更改。文件创建和删除时最主要的操作就是为文件分配和释放存储文件内容的数据块。

新建文件时,根据指定的文件大小,计算出存储该文件需要的数据块数目,查询如图6所示树状统计结构,便能在最短时间内找到能满足分配需求的数据块组,继而将新文件创建定向到找到的数据块组内。

图6 三层树状统计结构

具体来说,先通过超级块中信息定位到某统计块,再通过统计块中信息定位到某位图块,找到一个位图块即找到了一个数据块组,在该组内为该新文件分配存储空间,分配时采用尽可能连续分配的策略,以保证文件的快速读写。

删除文件时,通过将位图块中与该文件对应的位“1”置为“0”来回收存储文件的数据块,重新扫描该位图块,将位图块中最新统计信息更新到统计块中,再扫描对应统计块,并将其统计信息更新到超级块中,以此维护位图信息。最后,清空文件索引节点数据,并删除文件目录中对应项。

4.2 文件访问

访问文件包括对文件的读、写和查询操作,首先需要通过文件目录将文件名映射到索引号,通过索引号找到文件对应的索引节点,该索引节点中存储了文件相关元数据,即可实现对文件的访问。

如需查询文件大小,访问文件对应索引节点相关字段,可直接从该文件元数据中获取;若需读/写文件,则需要索引节点中的区段信息进行引导,通过区段信息找到存储文件的数据块,进一步通过计算可以把文件读/写的位置偏移映射到具体某个磁盘扇区和扇区内偏移,最后调用底层I/O接口便可读/写文件。

4.3 均衡存储

在流式数据应用场景中,流文件最终被存储到磁盘阵列中,每一个新文件被存储到哪块磁盘完全由文件系统(SEFS)决定,考虑存储的均衡性是很有必要的,否则可能造成某些磁盘存储大量数据而其他磁盘被浪费的情况,且当存储大量数据的磁盘损坏时大量数据丢失会带来灾难性损失。

为实现均衡存储,首先定义磁盘饱和度C,由磁盘已使用容量和存放文件数量共同决定。存放文件数量越多,磁盘已使用容量越大,则磁盘饱和度越高。计算饱和度采用对已使用容量和已存储文件数归一化后加权的方法,详细定义如下:

其中,Vu表示已使用容量;V表示磁盘总容量;表示已存储文件的数量,表示按典型文件大小存储,磁盘最多能存储的文件数,和的值均不能超过1,和为调节因子。

新建文件时查询各磁盘使用情况,得到各磁盘已使用容量和已存文件数量,计算各磁盘饱和度,将饱和度最低的磁盘作为本次分配的目标磁盘,创建成功后更新该磁盘使用情况,供下一次新建文件时查询,以此实现均衡存储的目标。

5 实验数据及分析

本文设计的文件系统所基于的嵌入式平台是以Cavium OCTEON CN5860为核心的多核嵌入式网络处理器[15],每个多核网络处理器具有16个处理核心,每个处理核心主频为800 MHz,物理内存大小配置为4 GB。本文在上述嵌入式平台下针对SEFS创建文件的效率、I/O性能、存储均衡性及稳定性方面做了测试。

5.1 创建效率测试

实验记录了创建一批大小随机的文件所用的时间,测试结果如图7所示。

图7 文件创建效率测试结果

对于文件系统而言,创建文件的速率是衡量其好坏的一项重要指标,从图中数据可以看出,创建一批文件所用时间跟文件数成正比,创建4 096个文件用时242 s,计算可得创建一个新文件平均用时为59 ms,此创建效率在流式数据应用中较高。

鉴于SEFS创建文件时已为文件预分配存储空间,它创建文件的机制与通用文件系统有很大差异,因此,它与通用文件系统在创建文件的效率上不具有可比性。

5.2 I/O性能测试

Linux的主流文件系统是Ext2/Ext3,其中Ext3是日志文件系统,比Ext2功能更健全,但在文件读写速率方面两者相差无几;MSFS[10]是一种基于μCinux的大容量媒体文件系统,它较传统的嵌入式文件系统有更好的存储性能和稳定性。所以本文选取Ext2和MSFS分别作为嵌入式Linux文件系统和嵌入式流媒体文件系统的代表,与SEFS进行I/O性能对比。实验使用不同的缓存区(32 KB、64 KB等)对不同大小文件(512 MB、1 GB等)进行了多次读写测试,统计3种文件系统的平均读写速率,对比结果如图8所示。

图8 I/O性能测试结果

测试结果显示,SEFS的I/O性能优于其他2种嵌入式文件系统,读文件的速率分别比Ext2和MSFS快8.63%和6.45%,写文件的速率分别比Ext2和MSFS快6.48%和2.94%,实验证明SEFS具有较好的I/O性能,能支持大容量流式数据的快速读写。

5.3 均衡存储测试

实验创建了2 048个大小随机的文件,对应于64个磁盘,统计各磁盘中文件数量和消耗的磁盘容量,测试结果如图9所示。

图9 均衡存储测试结果

从图9中可以看出2 048个文件被相对均匀地创建到各磁盘中,每个磁盘中文件数在32左右波动;由于新建的文件大小随机,在文件数和每个文件大小均具有一定随机性的前提下,各磁盘中消耗的容量在96 GB左右波动。综上所述,图9的测试结果显示SEFS具有很好的均衡存储性。

5.4 稳定性测试

实际使用场景中,系统会频繁地创建新文件和删除旧文件,使用一段时间后系统中会产生一定数量的磁盘碎片,位图信息也会变得复杂凌乱。这时候系统是否还能正常工作或性能是否会有明显下降,这在很大程度上取决于文件系统的稳定性。

实验中模拟实际场景中的用户行为,周期性地随机创建和删除一批文件,记录总共创建过的文件数和删除过的文件数,每次创建或删除文件后更新磁盘中数据块使用的理论值,直到磁盘使用率达到设定的饱和状态时才结束,统计实际使用的数据块数目,通过对比被使用数据块的理论值和实际值来判断系统是否正常工作。测试结果如表2所示。

表2 稳定性测试结果

上表测试结果表明,频繁地在系统中创建和删除文件,系统运行较长时间后,数据块被使用数的实际值和理论值吻合,系统工作正常,数据块管理准确无误,说明SEFS具有较高的系统稳定性。

6 结束语

与通用文件系统不同,本文设计的文件系统(SEFS)结构简单,易于维护,主要用于特定嵌入式系统中大容量流式数据的存储。在流式数据应用场景中,存储后的文件不需要改变文件大小,因此文件系统创建新文件时采用为其预分配存储空间的策略,且按尽可能连续分配的思想,最大限度保障文件存储的连续性,以实现文件的高速吞吐和高效存储。实验结果显示SEFS创建单个文件平均用时59 ms,考虑到该创建过程完成了新文件注册、存储空间分配、元数据管理等诸多操作,可认为SEFS创建新文件的效率较高,SEFS读写文件的速率相比于嵌入式文件系统Ext2也分别有8.63%和6.48%的提升;此外,SEFS具有很好的存储均衡性和稳定性,能满足嵌入式系统中大容量流式数据的存储需求。下一步目标是完善SEFS对外提供的接口,为用户提供可靠稳定的文件操作服务,进一步优化文件系统内部的I/O调度机制,支持流式数据的高并发读写,并尽可能地降低系统开销。

[1] 万继光,詹 玲.集群多媒体存储系统的两级元数据管理[J].小型微型计算机系统,2009,30(4):752-756.

[2] Sun Yanhua,Fang Jun,Han Yanbo.A Distributed Realtime Storage Method for Stream Data[C]//Proceedings of Web Information System and Application Conference. Washington D.C.,USA:IEEE Press,2013:314-317.

[3] 余婷婷.嵌入式文件系统的研究与设计[D].武汉:武汉理工大学,2007.

[4] 徐 晟.嵌入式文件系统的研究与实现[D].成都:电子科技大学,2006.

[5] 吴 娴.嵌入式Linux文件系统的设计和实践[D].苏州:苏州大学,2003.

[6] 余东东.基于μC/OS II的嵌入式文件系统的研究与实现[D].上海:上海交通大学,2007.

[7] 徐 菲,胡迪青.对ROMFS文件系统的分析和改进[J].微计算机信息,2007,23(12-2):75-77.

[8] 姜春茂,段 莹,黄春梅.嵌入式Linux文件系统剪裁方法研究[J].计算机科学,2008,35(9):282-284.

[9] 胡国栋.基于网络存储的流媒体服务器系统[D].杭州:浙江大学,2012.

[10] 栾德杰,倪 宏,潘 梁,等.基于μClinux的大容量媒体文件系统[J].计算机工程,2011,37(6):32-34.

[11] 付东华.基于HDFS的海量分布式文件系统的研究与优化[D].北京:北京邮电大学,2012.

[12] 栾德杰,倪 宏,潘 梁,等.一种基于启发式算法的数据块扩展预分配策略[J].微计算机信息,2010,26(12-2):70-71,101.

[13] 黄 华,张建刚,许 鲁.蓝鲸分布式文件系统的分布式分层资源管理模型[J].计算机研究与发展,2005,42(6):1034-1038.

[14] 杨德志,黄 华,张建刚,等.大容量、高性能、高扩展能力的蓝鲸分布式文件系统[J].计算机研究与发展,2005,42(6):1028-1033.

[15] Cavium.OCTEON Plus CN58XX Multi-core M IPS64 Processors[EB/OL].[2014-07-25].http://www.cavium.com/Table.html#Octeonplus.

编辑 金胡考

Em bedded File System Oriented to Stream ing Data

WU Jinghong1,2,ZENG Xuewen1,LIM ingzhe1,2,CHEN Jun1
(1.National Network New Media Engineering Research Center,Institute of Acoustics,Chinese Academy of Sciences,Beijing 100190,China;2.University of Chinese Academy of Sciences,Beijing 100039,China)

Embedded servers have some specificities com pared with traditional servers.Traditional file systems can no longermeet the demands of efficient storage for some specific embedded systems.This paper proposes a Streaming Embedded File System(SEFS),which is oriented to large capacity of streaming data,for a particular embedded system to solve the problem of low efficiency storage.In SEFS,storage space is rapidly pre-allocated in virtue of a three-layers tree structure of statistics while creating new files.In addition,it applies disk saturability-based strategies to guarantee storage balance of SEFS.Testing results show that this system creating a new file by SEFS costs 59 ms,the reading rate of SEFS is faster than Ext2 and MSFS by 8.63%and 6.45%respectively,and the writing rate of SEFS is faster than Ext2 and MSFS by 6.48%and 2.94%.Testing results also demonstrates SEFS has better storage balance and stability.

large capacity;stream ing data;embedded file system;pre-allocation;disk saturability

吴京洪,曾学文,李明哲,等.面向流式数据的嵌入式文件系统[J].计算机工程,2015,41(9):92-96.

英文引用格式:Wu Jinghong,Zeng Xuewen,Li Mingzhe,et al.Embedded File System Oriented to Stream ing Data[J]. Computer Engineering,2015,41(9):92-96.

1000-3428(2015)09-0092-05

A

TP311

10.3969/j.issn.1000-3428.2015.09.016

国家科技支撑计划基金资助项目“新媒体资源编解码与高密度内容实时适配关键技术研究及原型系统”(2012BAH18B04);中国科学院重点部署基金资助项目“NGB智能接入网关关键技术研究与验证”(KGZD-EW-103-4)。

吴京洪(1988-),男,博士研究生,主研方向:网络存储,新媒体技术;曾学文,研究员;李明哲,博士研究生;陈 君(通讯作者),副研究员。

2014-09-13

2014-11-11 E-m ail:chenj@dsp.ac.cn

猜你喜欢
流式存储空间大容量
基于多种群协同进化算法的数据并行聚类算法
苹果订阅捆绑服务Apple One正式上线
辐流式二沉池的结构优化研究
用好Windows 10保留的存储空间
12-20升大容量PET瓶装式吹瓶机
微球测速聚类分析的流式液路稳定性评估
能变出雨衣的18升大容量背包
基于大容量指纹识别的实时身份认证系统
自调流式喷管型ICD的设计与数值验证
流式在线直播视频的采集