搜索
您的当前位置:首页正文

面向Android系统的目录自适应日志模式选择机制

来源:易榕旅网
龙源期刊网 http://www.qikan.com.cn

面向Android系统的目录自适应日志模式选择机制

作者:徐远超等

来源:《计算机应用》2015年第10期

摘要:在写磁盘的过程中如果意外掉电或系统崩溃很有可能导致文件系统中用户数据和元数据不一致,现有文件系统主要采取写前日志或写时拷贝等一致性技术来解决该问题,但均没有考虑目录对可靠性需求的差异性。针对现有的文件自适应日志模式存在的需要逐一修改应用程序的不足,提出了面向Android系统的目录自适应的日志模式选择机制,即针对不同的目录对可靠性需求的高低等级,选择相应的强弱程度不同的日志模式,同时分配可靠性不同的存储区域,这种机制对开发者完全透明,也符合Android系统的应用特征,在可靠性需求不变的前提下最大限度地减少了一致性保证引入的额外开销。实验结果表明,修改后的文件系统可以识别文件所在目录,并根据目录选择预先定义的日志模式。

关键词:文件系统;一致性;目录自适应;系统崩溃;日志模式;Android 中图分类号: TP311.563 文献标志码:A

Abstract: The unexpected power loss or system crash can result in data inconsistency upon updating a persistent data structure. Most existing file systems use some consistency techniques such as writeahead logging, copyonwrite to avoid this situation. These mechanisms, however, introduce a significant overhead, and fail to adapt to the diversity of directory and heterogeneity of data reliability demands. Existing fileadaptive journaling technique is required to modify legacy applications. Therefore, a directoryadaptive journaling mode selective mechanism for Android systems was proposed to choose different journaling modes with strong or weak consistency guarantees in terms of different directories reliability demands. This mechanism is transparent to developers, and also matches the feature of Android systems, hence, it greatly reduces the consistency guarantee overhead without sacrifice of reliability. The experimental results show that modified file system can identify directories in which a file resides, meanwhile, choose reasonable predefined journaling mode.

Key words: file system; consistency; directory adaptive; system crash; journaling mode; Android 0引言

龙源期刊网 http://www.qikan.com.cn

在写磁盘的过程中,如果异常掉电[1-2]或系统崩溃[3-4],可能导致一个完整语义对应的部分新数据丢失,使得磁盘上与该语义对应的数据一部分是新数据而另一部分是旧数据,这种现象称之为数据的不一致,由此引发的问题称为崩溃一致性(crash consistency)问题。崩溃一致性可能导致多种问题,如磁盘空间泄露(space leakage)、元数据指向垃圾数据等。这些问题在航空航天、汽车电子、医疗仪器、金融电子等安全攸关领域中不仅会导致巨大损失,甚至带来安全隐患。异常掉电可以通过备用电源或超级电容来缓解,而系统崩溃却很难避免。因为软硬件设计日益复杂,使得软件缺陷或硬件故障频发且很难预测。

为了解决上述问题,很多文件系统都采取了一致性保证技术,如,写前日志(WriteAhead Logging,WAL)[5]、写时拷贝(CopyonWrite,CoW)[6]等。WAL的核心思想是,在数据写到其最终所在位置前先记录一个副本(称为日志),以便在系统崩溃或异常掉电后根据该副本进行数据恢复;WAL方法将同一个数据先后写入磁盘两次,用时间和空间换取一致性保证。CoW的核心思想是,在更新某一个数据前,先将该数据的新版本写到某一块空闲区域,写入成功后通过更新文件数据块索引指针让其指向新数据,旧数据置为无效;CoW虽然不需要二次写操作,但也存在缺陷,比如滚雪球效应。一致性技术引入了额外开销,降低了系统性能,缩短了Flash、相变存储器(Phase Change Memory,PCM)等存储介质的使用寿命,因为这些存储介质都有耐用性问题,即:写入和擦除次数有限。为此,学术界一直在尝试各种办法来降低一致性保证技术引入的各种开销,提出了很多方法[7-13],但仍存在不足,表现在,不区分目录和文件存在的差异性,都采取完全一样的一致性保证技术。这种单一策略没有满足不同数据的不同一致性需求。针对这种情况,本文提出目录自适应的日志模式选择机制,即:根据不同目录的一致性需求,选择与其最匹配的日志模式。评估结果显示,修改后的内核代码可以根据文件所在目录选择预先定义的日志模式,实现了可靠性需求与日志模式的按需匹配,在没有降低可靠性的前提下,降低了日志引入的额外开销。 1相关研究

文献[7]提出积极提交(eager commit)和猜测持久化(speculative persistence)两种方法来弱化一个事务内部中和多个事务之间的顺序约束,核心思想是“有序提交事务,乱序执行检查点”;文献[8]提出了OptFS文件系统,将顺序操作和持久化操作解耦,分别采用校验和(checksum)和延迟写(delayed writes)两种技术来代替ext4日志文件系统中ordered日志模式中的两个同步操作,提高了事务提交的性能;文献[9]还提出了无序的文件系统NoFS,利用向后指针技术,消除了写操作的顺序约束;文献[10]提出将文件系统中的日志区和块缓冲区合为一个整体,减少了数据在两个区域之间的交换;文献[11]提出使用非易失Cache和非易失主存,通过原子就地更新(atomic inplace update),即使不使用WAL和CoW一致性技术也能保证持久化操作的一致性。以上这些方法主要从两个角度出发:一是尽可能降低顺序约束(ordering constraints)引入的开销[7-9];二是充分利用新型存储介质的非易失特性,减少数据的移动和减少写入数据量[10-11]。但这些方案均没有考虑目录的差异性。与本文最接近的工作是文献[12]提出的文件自适应策略,针对不同的文件采取不同的一致性技术,该方法以文件为粒度实现了细粒度的一致性保证,不足之处在于需要修改应用程序源代码,通过系统调用ioctl()告知文件系统当前文件所期望的日志模式,但逐一修改源程序无疑增加了程序员的负担。

龙源期刊网 http://www.qikan.com.cn

本文面向Android系统,提出以目录为粒度的自适应一致性保证策略,不同目录下的文件可以使用不同的日志模式,同一目录下的所有文件均采取同一种日志模式。这种方式无需逐一修改应用程序源代码,只需要手机出厂时一次性设定好即可,对用户和开发者完全透明,也符合实际应用场景。

2可靠性需求和开销不对称分析

计算机系统中存在很多的不对称性,本章将从目录可靠性需求的不对称、一致性技术开销的不对称、存储区域可靠性需求的不对称和存储介质可靠性的不对称等四个方面进行分析,以实现需求和开销的合理匹配。 2.1目录可靠性需求的不对称

与PC不同,手机等移动终端的目录结构相对固定,存放的内容也相对单一。如果所有目录均采取强一致性保证技术,则对可靠性要求不高的目录而言,就增加了不必要的一致性保证开销;相反,如果均采取弱一致性保证技术,则对可靠性要求较高的目录,就削弱了其可靠性保证。通过观察发现,在面向Android系统的移动终端中,每个目录存放的文件具有非常相似的属性。比如,download目录通常用于存放下载的手机应用,如果在下载过程中由于异常掉电或系统崩溃导致下载失败,可以进行重新下载,因此,从降低开销的角度考虑,完全没有必要采取一致性保证技术,更没有必要采取强一致性保证技术,因为一致性保证的强度与引入的开销成正比。相反,对于Android系统中十分重要的关系数据库SQLite而言,则需要采取强一致性保证技术,因为Android系统中很多重要信息都是通过SQLite来存放的,一旦数据丢失将很难恢复。可见,以目录为粒度定义一致性保证的强弱级别要比文件自适应方式更为可行,并且一个目录下文件属性相似的假设对Android等移动终端系统而言也是成立的。 2.2一致性技术开销的不对称

除Apple手机外,目前其他绝大多数手机采用的都是Android系统,包括三星、华为、小米、联想等主要手机厂商。三星公司研发了自己的手机文件系统F2FS[14],但不确定是否已经采用。其他厂商使用的Android系统均采用的是ext4文件系统。ext4文件系统采用的是WAL一致性保证技术,提供了三种日志模式,分别是writeback、ordered和 journal。在writeback日志模式下,ext4不记录用户数据的日志,只记录元数据的日志;ordered日志模式也只记录元数据的日志,但是它要求对应的用户数据必须已经写入到了存储介质中,避免了出现垃圾数据;journal日志模式同时记录用户数据和元数据的日志,当用户数据和元数据都成功写完日志之后,才能将它们写入到非易失性存储介质的数据区中。因此, journal日志模式提供的一致性保证是最强的,但开销也是最大的;writeback日志模式提供的一致性保证最弱,开销也最小;ordered日志模式介于writeback和journal两种日志模式之间。图1显示的是filebench基准测试集中的三个程序fileserver、varmail、webproxy在不使用日志和使用三种不同日志模式时的性能比较,可以看出,无日志时的性能要优于有日志,writeback日志模式下的性能要平均优于ordered日志模式下的性能,ordered日志模式下的性能要平均优于journal日志模式下的性

龙源期刊网 http://www.qikan.com.cn

能,writeback日志模式与ordered日志模式在性能上相差不大,性能与写操作所占比重关系很大。

2.3存储区域可靠性需求的不对称

移动终端各目录存放着不同的内容,除了读写过程中对一致性保证的需求不对称外,对存储区域的可靠性需求也不尽相同。比如,存放启动(Boot)分区、操作系统、文件系统等重要内容的存储区域对可靠性要求高,不能容忍数据的损坏,而存放临时数据的存储区域则可以容忍数据的损坏和丢失。

对用户数据而言,重要性程度也不尽相同。比如,用户往往希望存放照片的存储区域比存放手机APP的存储区域可靠性高,因为照片损坏了将无法恢复,而手机APP损坏了可以再重新下载。

机械式硬盘的所有存储区域的可靠性级别基本相同,而手机存储介质eMMC采用的是Flash芯片,有SLC(singlelevel cell)、MLC(multilevel cell)、TLC(triplelevel cell)等多个版本。简单而言,在一个存储单元(cell)上存放的比特数越多,容量也越高,但可靠性随之下降,因此,应该根据数据对可靠性的实际需求进行设计,从而达到更好的性能与可靠性的平衡。

2.4存储介质可靠性的不对称

eMMC是目前手机等移动终端使用最多的存储芯片,最新的5.0版本规范提供了丰富的可靠性特性,如分区管理、可靠写、安全擦除、写保护管理、断电通知、器件健康报告、错误保护等。

eMMC的分区管理是指将存储区域进行划分,设定不同的访问级别和读写属性,可以有效保护启动代码、操作系统、文件系统等重要数据,避免被非法改写或意外掉电时损坏。eMMC默认由三类不同区域组成,分别是:用户数据区域(User Data Area),启动分区(Boot)和重放保护存储块(Replay Protected Memory Block,RPMB)分区。除了默认的两个Boot分区和一个RPMB分区之外,还可以从默认的用户数据区域中划出部分物理空间将其配置成通用分区,最多可以配置四个通用分区,余下的物理空间仍然作为传统的用户数据区域。通用分区和用户数据区域都可以配置成增强(enhanced)属性。所谓增强,是指将MLC闪存当作SLC 闪存来使用,牺牲容量,提高性能和可靠性。用户数据区域默认均配置为MLC,转换成SLC以后,容量减半。默认情况下,boot分区和RPMB分区是增强型的,为SLC闪存,其他分区是MLC闪存,如图2所示。根据系统中不同数据的可靠级别需求,通常将启动代码存放在boot分区,RPMB存放敏感数据,增强属性的通用分区和用户数据区域用于存放操作系统、文件系统元数据、重要的应用程序及数据等,其余默认属性的通用分区和用户数据区域用于存放一般的用户数据。

龙源期刊网 http://www.qikan.com.cn

2.5可靠性需求不对称设计

根据以上分析,本文提出了目录自适应策略,根据不同目录对一致性需求的强弱程度分别采取相应的一致性策略,根据数据的重要程度选择普通属性或增强属性的存储分区,实现按需分配,减少不必要的日志开销,降低一致性技术保障对性能的影响。合理配置分区,在不降低整个系统可靠性需求的前提下,提高存储介质的性价比。 3目录自适应可靠性策略 3.1目录自适应的强弱一致性保证

其主要思想是,根据目录对可靠性的不同需求,ext4文件系统自动从已有的日志模式中选择一种最匹配的日志模式。目前,ext4提供了三种日志模式,根据强弱程度划分为三个等级,分别为writeback、ordered和journal。算上不需要记录任何日志,可以定义四个级别。当然,如果有更多的日志模式,该方法也是适用的。每一个目录采取什么样的日志模式,由手机厂商根据可靠性需求级别在出厂时进行一次性设定,无需用户干预,当然,也可以预留接口让用户手工调节。

日志模式的选择是在ext4文件系统中进行的,日志模式的具体操作在独立的JBD2(journaling block device)模块中,其负责实现WAL写前日志的功能,JBD2不仅服务于ext4文件系统,也可以服务于其他文件系统,因此,本文方法对其他文件系统也适用。本文修改了ext4文件系统的部分代码,其在整个存储软件栈中所处的位置如图3所示。

根据目录设置不同日志模式的流程如图4所示。首先,当文件系统初始化时,读取“目录可靠性需求表”,这是一个configure文件,按照“目录名称:0/1/2/3”的条目格式定义每个目录的可靠性需求级别,0表示不需要可靠性保证,使用延迟分配(delayed allocation)模式;1代表较弱的一致性保证,对于ext4文件系统而言,对应于选择writeback日志模式;同理,2表示选择ordered日志模式;3表示选择journal日志模式。对于没有在“目录可靠性需求表”中定义可靠性需求级别的目录,采取文件系统挂载时默认的日志模式,如ordered日志模式。当每打开一个文件时,首先获取该文件所在的目录名称,根据该名称在“目录可靠性需求表”中查找对应的日志模式,如果找到,则根据可靠性需求级别设置对应的日志模式;如果没有找到,则采取默认的日志模式。举例来说,如果“目录可靠性需求表”中定义了一个条目“/download:0”,则表示/download目录下的所有文件都不需要一致性保证,使用延迟分配模式即可。 就具体实现而言,基本流程是:首先,在ext4_file_open函数中根据struct file结构体中的f_path成员得到当前打开文件的路径;然后根据该路径判断该文件所在的目录;最后根据上述策略设置该文件的inode→i_mapping→a_ops成员。ext4文件系统定义了四种address_space_operations操作,分别为ext4_ordered_aops、ext4_writeback_aops、

ext4_journalled_aops和ext4_da_aops。前三种为三种不同的日志模式对应的操作,最后一种为延迟分配对应的操作。

龙源期刊网 http://www.qikan.com.cn

3.2目录自适应的分区管理

eMMC是基于Flash的可管理的手机存储芯片,自带控制器,包含了大量的寄存器。其中,EXT_CSD寄存器的PARTITIONING_SUPPORT字段有3个位与分区管理相关:第0位表示器件是否支持分区特性;第1位表示器件的通用分区和增强用户数据区域是否支持增强特性;第2位表示器件的通用分区是否支持扩展特性。eMMC规范5.0的器件要求这3个位都必须为1,表明以上描述的特性必须都支持。通用分区和增强用户数据区域的属性在EXT_CSD寄存器中设置,该属性在器件整个生命周期中只能被设置一次,因此,在初次设置eMMC器件的配置参数时就要做好存储区域的用途规划。具体而言,主机通过发送SWITCH命令设置分区特性的读写字段,具体如下:

1)对于通用分区而言,包括4个分区的大小和属性。EXT_CSD寄存器中的GP_SIZE_MULT_GP0到GP_SIZE_MULT_GP3字段用于设置分区的大小;

PARTITIONS_ATTRIBUTE 字段用来设置是否为增强属性;EXT_PARTITIONS_ATTRIBUTE用于设置扩展属性。

2)对于增强用户数据区域而言,包括区域的起始地址和属性。EXT_CSD寄存器中的ENH_START_ADDR字段用于设置用户区域的起始地址;ENH_SIZE_MULT用于设置用户区域的大小;PARTITIONS_ATTRIBUTE 用来设置是否为增强属性。

将eMMC器件划分为默认分区和增强属性分区后,实际上是将一部分MLC闪存转换成了SLC 闪存,存储容量减小了,但可靠性提高了。然后就可以把可靠性要求较高的目录,如/photo,安排在SLC分区上,把可靠性要求不高的目录,如/download,安排在MLC分区上,分区属性在手机出厂时一次性设置好,对用户完全透明。通过这种方式,实现了目录级的可靠性需求与存储资源的按需分配,不仅保证了可靠性,还最大限度地提高了资源的利用率。 4实验与分析

4.1实验平台及测试程序

本文验证平台采用的是Arndale开发板,该开发板采用的是基于ARM CortexA15处理器核的三星Exynos 1.7GHz双核处理器,32KB一级指令缓存,32KB一级数据缓存,1MB二级缓存;2GB内存,4GB容量的eMMC芯片;软件为Uboot 1.3.4,Android JellyBean 4.2操作系统,使用Linux Kernel 3.4.5版本。

在不影响结论的前提下,本文实现了一个简单的原型系统,定义了3个文件夹/data/0/、/data/1/和/data/2/,分别采取journal、ordered、writeback等3种日志模式。在3个文件夹下运行同样的程序,且参数完全相同,通过输出的调试信息及性能的比较来判断该程序是否确实使用了不同的日志模式,如果是,说明原型系统是成功的。在实际应用中,只需要预先定义一个

龙源期刊网 http://www.qikan.com.cn

配置文件,在配置文件中设置不同目录的可靠性需求级别,采用该方法就可以选择不同的日志模式。

测试程序采用postmark程序,它是NetApp公司开发的用来测试其产品后端存储性能的基准测试程序,主要用于测试文件系统在邮件系统或者电子商务系统中的性能,这类应用的特点是需要频繁、大量的存储小文件。Postmark运行时的参数配置如下: 程序前

set number 50000

set transactions 10000(20000,30000,40000,50000) set size 1024 102400 set read 4096

set write 512 (4096,8192) set location /data/0 (/data/1,/data/2) 程序后

其中:事务(transaction)数量测了5组,写数据块大小测了3组。 4.2实验结果及分析

分别测试了三个文件夹下的postmark程序的运行时间、写吞吐量随事务数量及写入块大小的变化情况,结果如图5~6所示。

每个图有9组柱状,每3个为一大组,代表同一个目录下的postmark程序,大组内按照写入块大小又分为3个小组,每一个小组按照事务数量从10000~50000共有5个柱。可以看出,/data/0下的postmark运行的时间要比另外两个文件夹中的postmark程序长,写数据的吞吐率低,原因在于/data/0定义的是journal日志模式,这符合三种日志模式的工作原理,从调试信息来看,系统正确地选择了预先定义的不同的日志模式。 5结语

异常掉电或系统崩溃会带来数据的丢失、损坏,甚至元数据和用户数据的不一致,导致存储空间泄露、元数据指向垃圾数据等,不仅影响了可靠性,也带来了安全隐患。

龙源期刊网 http://www.qikan.com.cn

各种一致性保证技术引入了额外开销,本文根据移动终端Android系统中的目录相对固定、存放的内容相对单一这一特点,提出一种弹性的可靠性保障机制,实现了不同的目录根据其重要程度和对一致性需求保障的强弱程度分别采取不同的一致性技术,将不同的目录存放在可靠性不同的存储分区上,实现可靠性的按需分配,提高存储资源的利用率,降低一致性保证的开销。本文提出的目录自适应思想对于PCM等新型存储介质也同样适用,因为PCM也有SLC、MLC等类别。 参考文献:

[1]ZHENG M, TUCEK J, QIN F, et al. Understanding the robustness of SSDS under power fault[C]// Proceedings of the 11th USENIX Conference on File and Storage Technologies. Berkeley: USENIX, 2013: 271-284.

[2]JOSE J, BANIKAZEMI M, BELLUOMINI W, et al. MetaData persistence using storage class memory: experiences with flashbacked DRAM[C]// Proceedings of the 1st Workshop on Interactions of NVM/FLASH with Operating Systems and Workloads. New York: ACM Press, 2013: 3-9.

[3]FRYER D, SUN K, MAHMOOD R, et al. Recon: verifying file system consistency at runtime[J]. ACM Transactions on Storage, 2012, 8(4): 15-28.

[4]PILLAI T S, CHIDAMBARAM V, ALAGAPPAN R, et al. All file systems are not created equal: on the complexity of crafting crashconsistent applications[C]// Proceedings of the 11th USENIX Symposium on Operating Systems Design and Implementation. Berkeley: USENIX, 2014: 50-65.

[5]HAGMANN R. Reimplementing the Cedar file system using logging and group commit [C]// Proceedings of the 11th ACM Symposium on Operating Systems Principles. New York: ACM Press, 1987:155-162.

[6]ROSENBLUM M, OUSTERHOUT J K. The design and implementation of a logstructured file system[J]. ACM Transactions on Computer Systems, 1992, 10(1): 26-52.

[7]LU Y, SHU J, SUN L, et al. Looseordering consistency for persistent memory[C]// Proceedings of the 32nd IEEE 2014 International Conference on Computer Design. Piscataway: IEEE Press,2014: 216-223.

[8]CHIDAMBARAM V, PILLAI T S, ARPACIDUSSEAU A C, et al. Optimistic crash consistency[C]// Proceedings of the TwentyFourth ACM Symposium on Operating Systems Principles. New York: ACM Press, 2013: 228-243.

龙源期刊网 http://www.qikan.com.cn

[9]CHIDAMBARAM V, SHARMA T, ARPACIDUSSEAU A C, et al. Consistency

without ordering[C]// Proceedings of the 10th USENIX Symposium on File and Storage Technologies. Berkeley: USENIX, 2012: 9-26.

[10]LEE E, BAHN H, NOH S H. Unioning of the buffer cache and journaling layers with nonvolatile memory[C]// Proceedings of the 11th USENIX Conference on File and Storage Technologies. Berkeley: USENIX, 2013: 73-80.

[11]ZHAO J, LI S, YOON D H, et al. Kiln: closing the performance gap between systems with and without persistence support[C]// Proceedings of the 46th Annual IEEE/ACM International Symposium on Microarchitecture. New York: ACM Press, 2013: 421-432.

[12]SHEN K, PARK S, ZHU M. Journaling of journal is (almost) free[C]// Proceedings of the 12th USENIX Conference on File and Storage Technologies. Berkeley: USENIX, 2014: 287-293.

[13]LEE C, SIM D, HWANG J, et al. F2FS: a new file system for flash storage[C]// Proceedings of the 13th USENIX Conference on File and Storage Technologies. Berkeley: USENIX, 2015: 273-286.

[14]GILES E, DOSHI K, VARMAN P. SoftWrAP: a lightweight framework for

transactional support of storage class memory[C]// Proceedings of the 31st IEEE Symposium on Massive Storage Systems and Technologies. Piscataway: IEEE Press, 2015: 29-43.

龙源期刊网 http://www.qikan.com.cn

龙源期刊网 http://www.qikan.com.cn

龙源期刊网 http://www.qikan.com.cn

龙源期刊网 http://www.qikan.com.cn

龙源期刊网 http://www.qikan.com.cn

因篇幅问题不能全部显示,请点此查看更多更全内容

Top