一种数据一致性及磨损均衡的内存文件系统管理方法与流程

文档序号:12469946阅读:546来源:国知局
一种数据一致性及磨损均衡的内存文件系统管理方法与流程

本发明涉及计算机系统软件领域,特别是一种用于内存文件系统的数据一致性及磨损均衡方法。



背景技术:

随着新型非易失性存储器(Non-Volatile Memory,NVM)的出现,企业界和学术界提出将存储密度大、读写速度快、可按字节寻址和抗震动的非易失性存储制作为内存数据存储设备,称为存储级内存(Storage Class Memory,简称SCM)。为了管理这种存储级内存,已经设计出多种内存文件系统。例如Intel设计的PMFS,“System software for persistent memory,”in Proc.9th ACM Euro.Conf.Comput.Syst.,pp 15:1—15:15,2014,ISBN:978-1-4503-2704-6。(“面向持久化内存的系统软件”,第9届美国计算机学会欧洲计算机系统会议,第15篇1到15页,2014年,ISBN:978-1-4503-2704-6),重庆大学设计的SIMFS,“Designing an Efficient Persistent In-Memory File System”,2015IEEE Non-Volatile Memory System and Applications Symposium,pp 1-6,2015,DOI:10.1109/NVMSA.2015.7304365。(“高效持久化内存文件系统的设计”,2015年电气和电子工程师协会非易失性内存系统及应用研讨会,第1-6页,DOI:10.1109/NVMSA.2015.7304365)。持久化内存文件系统是指具有完整的文件系统元数据结构,并且元数据持久化保存于存储级内存。

然而,非易失性存储器(NVM)具有独特的数据读写性能,NVM存储器件对于数据擦(erase)写(write)的耐久度有限,当擦写次数到达一定的程度时,相应存储单元的数据存储特性就会不稳定,使得整个存储芯片失效。如果频繁地擦写同一个NVM区域,会导致NVM在短时间内被写坏,极大地降低NVM的使用寿命。因此,面向NVM的系统设计必须考虑如何均匀地分布对存储介质的写操作,实现写磨损均衡(wear-leveling)。这对延长NVM在计算机内存中的使用寿命具有重要意义。NVM在内存中的使用寿命决定了非易失性内存的实际使用价值。

现有的持久化内存文件系统没有考虑非易失性存储介质上的写磨损均衡问题,难以保证存储介质的使用寿命。

在文件系统中更新数据时,例如用写操作向文件中写数据时,需要保证数据的一致性,即文件的元数据中引用的数据页必须属于该文件,而不是垃圾数据,或者其他文件的数据页。文件数据的一致性对文件系统的正确运行至关重要。然而,对内存文件系统而言,不仅需要保证文件数据更新的一致性,还需要利用内存文件系统的特点,尽可能地减少维持数据一致性导致的性能损耗。

目前,内存文件系统中使用的数据一致性更新技术主要有两种:

一种是写时复制(Copy-on-write)技术:在使用写时复制技术更新文件数据时,首先将新数据写到空闲的物理内存,然后使用原子操作将原文件的元数据指向新的数据页。假设要更新n个数据页,内存文件系统需要首先对每一个数据页执行以下步骤:

1)分配一个空闲物理页;

2)调用一次数据拷贝函数,将新数据写入步骤1)分配的空闲物理页;

3)使用一次原子操作,修改原文件的数据索引结构中相应指针,指向步骤2)中的数据页。

对于n个数据页,内存文件系统需要调用n次空闲页分配函数、n次数据拷贝函数,以及n次原子操作。每一次分配空闲页和调用原子操作都需要使用CPU指令对文件系统代码中的竞争区域加锁、解锁,每一次调用数据拷贝函数都需要检查地址范围、页面权限等操作,产生较大的系统开销。传统的写时复制技术不只对当前数据页进行复制和更新,还会引起一连串向上传播的写时复制,对新数据所影响到的所有文件元数据、文件系统元数据进行写时复制。最终可以导致从文件数据页到文件系统根目录的整条路径上所有页面都需要做写时复制。

因此,传统的写时复制技术会造成极大的性能损耗。

第二种是简短影子分页(Short-circuit shadow paging)技术:“Better I/O through byte-addressable,persistent memory.”Jeremy Condit,Edmund B.Nightingale,Christopher Frost,Engin Ipek,Benjamin Lee,Doug Burger,and Derrick Coetzee.In Proceedings of the ACM SIGOPS 22nd symposium on Operating systems principles(SOSP'09),Pages 133-146,2009,ISBN:978-1-60558-752-3.(“通过可字节寻址持久化内存获得的更好的I/O”,Jeremy Condit,Edmund B.Nightingale,Christopher Frost,Engin Ipek,Benjamin Lee,Doug Burger,and Derrick Coetzee,第22届美国计算机学会操作系统原理研讨会,第133-146页,2009年,ISBN:978-1-60558-752-3)

简短影子分页技术是微软在内存文件系统BPFS中所使用的数据一致性技术。该技术类似于写时复制技术,即首先将新数据写到空闲的物理内存,然后使用原子操作将原文件的元数据指向新的数据页。不同之处在于,简短影子分页技术只更新直接受影响的数据页和文件元数据,更新操作不会传播到文件系统的其他文件或元数据。

然而,简短影子分页技术和写时复制技术一样,在更新n个数据页时,要对每一个页面重复执行现有技术一中的3个步骤。由此产生较大的开销,降低内存文件系统的性能。



技术实现要素:

本发明的目的是针对上述的文件数据一致性方案没有考虑到存储介质磨损均衡的问题,而提出的一种用于内存文件系统的数据一致性及磨损均衡方法;以实现持久化内存文件系统数据一致性及非易失性存储介质上的写磨损均衡。

本发明的目的是通过以下技术方案来实现的:

本发明提供的一种数据一致性及磨损均衡的内存文件系统管理方法,包括以下步骤:

S1:在非易失性存储介质上设置一段连续的存储空间作为页面写次数记录区,所述页面写次数记录区用于记录并存放所有数据区页面的写次数,当每个内存页面的写次数发生变化时,更新页面写次数记录区内相应内存页面的写次数计数器;空闲页面管理模块根据页面写次数记录区的数据分配出当前系统中写次数最小的内存页面;

S2:当写操作开始时,判断文件的日志记录是否存在,如果是,则从日志记录的尾端继续记录日志;如果否,则从空闲页面管理模块获取日志记录所需要的内存页面;

S3:将当前的文件元数据和受影响的文件数据备份到日志区域;更新所涉及内存页面在页面写次数记录区的相应写次数数值;

S4:从空闲页面管理模块获取目标文件数据更新或追加所需要内存的新页面,写入更新后的相应数据页面的完整数据,当新页面上的写操作完成后,用新页面替换文件系统中的旧页面;更新所涉及内存页面在页面写次数记录区的相应写次数数值;

S5:更新日志记录在的交易状态为“COMMIT”,所述COMMIT表示文件数据的已经正确写入内存页面;并更新所涉及内存页面在写次数记录区的相应写次数数值;

S6:当修改目标文件的元数据时,判断元数据所在页面在写次数记录区中记录的磨损值是否需要迁移元数据,如果是,则执行步骤S7;如果否,则直接修改元数据,并更新所涉及内存页面在写次数记录区的相应写次数数值;

S7:将元数据所在页面内容拷贝到从空闲页面管理模块获得的空闲页中,修改元数据及指针,更新所涉及内存页面在写次数记录区的相应写次数数值;

S8:当修改目标文件的文件索引时,判断文件索引所在页面的在写次数记录区中记录的磨损值是否需要迁移页面,如果是,则执行步骤S8;如果否,则直接修改文件索引,将文件索引指向步骤S2中的存放更新后数据的内存页面;更新所涉及内存页面在写次数记录区的相应写次数数值;;

S9:将文件索引所在页面内容拷贝到从空闲页面管理模块获得的空闲页中,修改文件索引值及指针,更新所涉及内存页面在写次数记录区的相应写次数数值;;

S10:更新日志记录中的交易状态为“CHECKPOINT”,所述CHECKPOINT表示写操作已经正确完成;并更新所涉及内存页面在写次数记录区的相应写次数数值;

S11:释放并回收存放目标文件中的受影响的文件数据的旧页面。

进一步,所述内存页面的写次数均在写次数记录区保存并在所有写操作的过程中进行更新;所述写操作包括文件数据、元数据、日志和文件索引的所有数据的更新和追加;内存页面与页面写次数记录区的记录一一对应。

进一步,所述页面写次数记录区的写操作均匀分布。

进一步,所述每一次写操作需要的新页面均由空闲页面管理模块根据写次数记录区的数值找到的磨损程度最小的空闲页面。

进一步,所述每一次写操作均将更新后的完整数据写入新页面,旧页面的数据不更改,并由新页面替换旧页面。

进一步,还包括以下步骤:当系统崩溃或掉电后重启时,保持日志记录状态为“CHECKPOINT”的文件不变;及将日志记录状态为“COMMIT”的文件恢复为写操作发生之前的完整数据或写操作完成之后的完整数据;将其他日志记录状态的文件恢复为写操作发生之前的完整数据;

进一步,所述页面的磨损阈值按照下述方法设置:

(系统所用非易失性存储器的最大可容忍写次数+系统非易失性内存页面的当前最大写次数)*50%。

进一步,所述步骤S11中的回收旧页面在每次日志设置正确完成状态后、文件下一次产生日志时或者文件关闭时进行旧页面回收。

进一步,所述目标文件通过以下步骤来实现创建及写入过程:

步骤1,生成元数据,判断是否需要申请页面;如果需要申请新页面,则执行步骤2;如果不需要申请新页面,则执行步骤3;

步骤2,从空闲页面管理模块申请一个写次数最少的页面,写入元数据,修改相关数据,执行步骤4;

步骤3,把元数据写入到页面,执行步骤4;

步骤4,增加所涉及内存页面在页面写次数记录区的相应写次数数值,执行步骤5;

步骤5,完成。

进一步,所述目标文件的更新过程,具体步骤如下:

步骤101,接受更新请求,执行步骤102;

步骤102,从空闲页面管理模块申请N个写次数最少的页面,执行步骤103;

步骤103,把日志写到步骤102的页面中,执行步骤104;

步骤104,增加步骤102页面写次数,执行步骤105;

步骤105,判断更新方式,如果是就地更新,执行步骤106,否则执行步骤111;

步骤106,从空闲页面管理模块申请N个写次数最少的页面,执行步骤107;

步骤107,把更新数据写到步骤106的页面,执行步骤108;

步骤108,增加步骤106页面写次数,执行步骤109;

步骤109,日志记录修改页面的新、旧页面的指针,执行步骤110;

步骤110,增加日志页面写次数,执行步骤111;

步骤111,是否是文件追加方式,如果是执行步骤112,否则执行115;

步骤112,从空闲页面管理模块申请N个写次数最少的页面,执行步骤113;

步骤113,把追加内容拷贝到步骤112的页面,执行步骤114;

步骤114,增加步骤112页面写次数,执行步骤123;

步骤115,从空闲页面管理模块申请N个写次数最少的页面,执行步骤116;

步骤116,文件尾部需要修改的内容拷贝到步骤115的页面,执行步骤117;

步骤117,增加步骤115页面写次数,执行步骤118;

步骤118,日志记录修改页面的新、旧页面的指针,执行步骤119;

步骤119,增加日志页面写次数,执行步骤120;

步骤120,从空闲页面管理模块申请写次数最小的页面,执行步骤121;

步骤121,把追加的内容拷贝到步骤120的页面,执行步骤122;

步骤122,增加步骤120页面写次数,执行步骤123;

步骤123,设置日志状态为COMMIT,执行步骤124;

步骤124,增加日志页面写次数,执行步骤125;

步骤125,修改元数据,执行步骤126;

步骤126,增加元数据所在页面写次数,执行步骤127;

步骤127,判断元数据页面写次数是否达到阈值,是则执行步骤128,否则执行132;

步骤128,从空闲页面管理模块申请一个写次数最少的页面,执行步骤129;

步骤129,拷贝需更新的相应文件索引结构到步骤128的页面,执行步骤130,;

步骤130,更新相应文件系统索引结构,执行步骤131;

步骤131,增加步骤130页面写次数,执行步骤132;

步骤132,更新相应文件系统索引结构,执行步骤133;

步骤133,增加相应文件系统索引结构所在页面写次数,执行步骤134;

步骤134,判断索引所在页面写次数达到阈值,是则执行步骤135,否则执行139;

步骤135,从空闲页面管理模块申请一个写次数最少的页面,执行步骤136;

步骤136,拷贝需更新的相应文件索引结构到步骤135的页面,执行步骤137;

步骤137,更新相应文件系统索引结构,执行步骤138;

步骤138,增加步骤137页面写次数,执行步骤139;

步骤139,设置日志CHECKPOINT,执行步骤140;

步骤140,增加日志页面写次数;

结束。

进一步,还包括目标文件的删除过程,具体步骤如下:

步骤21,接到删除文件请求,判断文件是否存在,存在,转步骤22,不存在转步骤23;

步骤22,从空闲页面管理模块申请写次数最小的页面,写日志,修改文件索引结构指针,修改目录文件,释放inode,设置日志状态,转步骤23;

步骤23,完成。

由于采用了上述技术方案,本发明具有如下的优点:

本发明提出的持久化内存文件系统在数据更新操作中同时实现数据一致性和写磨损均衡的设计思想和实现方法,文件的更新操作包括文件就地更新、追加、部分追加三种更新方式。内存文件系统的数据一致性通过元数据管理、数据一致性、日志管理三个模块和文件更新操作协同实现。非易失性存储管理的功能通过页面分配、空闲页面管理、磨损均衡三个模块和文件更新操作协同实现。磨损均衡功能通过数据区页面写次数管理、索引两个子模块和存储管理中的其他模块协同实现,因此,所有文件更新操作都在实现数据一致性更新的同时做到了写磨损均衡。

本发明的其他优点、目标和特征在某种程度上将在随后的说明书中进行阐述,并且在某种程度上,基于对下文的考察研究对本领域技术人员而言将是显而易见的,或者可以从本发明的实践中得到教导。本发明的目标和其他优点可以通过下面的说明书来实现和获得。

附图说明

本发明的附图说明如下。

图1为数据一致性及磨损均衡的内存文件系统管理方法流程图。

图2为存储区域的整体划分。

图3为页面写次数记录区和数据区页面的映射关系。

图4为文件系统总体架构。

图5为打开文件的操作流程图。

图6为更新文件流程图。

图7为删除文件流程图。

具体实施方式

下面结合附图和实施例对本发明作进一步说明。

实施例1

本实施例中涉及的缩略语及关键术语定义如下:

NVM,Non-Volatile Memory,非易失性存储器;

SCM,Storage Class Memory,存储级内存;

文件就地更新,文件内部数据修改,文件大小不变;

文件追加,文件末尾增加内容,文件大小变大;

文件部分追加,文件数据修改及尾部增加内容,文件大小变大;

页面写次数记录区,记录内存页面数据被更新次数的区域;

空闲页面管理模块,负责内存空闲页面分配和回收的系统功能模块。

如图所示,本实施例提供的持久化内存文件系统把非易失性存储区域划分为超级块、页面写次数记录区、数据区三个部分,如图2所示。在超级块区域存放持久化内存文件系统原有超级块(superblock)的所有数据,并增加一个指向页面写次数记录区的指针;在页面写次数记录区记录并存放每个非易失性内存页面的写次数;在数据区页面存放内存文件系统的所有其他数据,包括文件元数据(inode)、日志(log)、文件数据、文件索引,及空闲页等。被更新的文件元数据inode和日志具有一一对映的关系,日志用于记录文件数据及元数据改变的信息。

如图3所示,图3为页面写次数记录区和数据区页面的映射关系,具体内容如下:

页面写次数记录区的每一条记录,即为每个内存页面的写计数器;页面写次数记录区的每一条记录和数据区的内存页面之间具有一一对应的映射关系,如图2所示。数据区的每个页面都映射到页面写次数记录区的一个4字节区域,该4个字节的数值表示对应的数据区页面的写次数。

内存文件系统每次执行写操作,都在对应的页面写次数记录区做增加写次数的操作。内存文件系统每次申请新的内存页面都是通过空闲页面管理模块申请写次数最小或较小的空闲页面。内存文件系统释放的内存页面归还给空闲页面管理模块,该内存页面与写次数记录的映射关系保持不变。

图4为文件系统总体架构;图4为持久化内存文件系统的总体架构。下面根据图3所示的架构描述本专利所提出的文件系统在数据更新操作中同时实现数据一致性和写磨损均衡的设计思想和实现方法。

文件的更新操作包括文件就地更新、追加、部分追加三种更新方式。内存文件系统的数据一致性通过元数据管理、数据一致性、日志管理三个模块和文件更新操作协同实现。非易失性存储管理的功能通过页面分配、空闲页面管理、磨损均衡三个模块和文件更新操作协同实现。磨损均衡功能通过数据区页面写次数管理、索引两个子模块和存储管理中的其他模块协同实现。在本实施例提出的方法中,内存文件系统的每个数据更新操作都需要和一致性功能模块和存储管理功能模块协同完成。

由文件更新模块发起写操作之后,由一致性功能模块中的日志管理子模块实现日志记录,建立目标文件的写操作状态标志,保证在系统异常情况下恢复之后可以识别未完成写操作的状态;由元数据管理子模块完成元数据的相应修改,并建立日志和文件的关联性;由数据一致性子模块完成文件数据写操作的写时复制、新旧页面替换,保证写操作过程中文件数据的完整性,保持旧页面的完整性,数据一致性子模块协同日志管理子模块保证在系统异常情况下恢复之后所有未完成的写操作可以复原为写操作之前的数据。

文件更新功能模块、一致性功能模块均通过存储管理功能模块获得新的内存页面,并完成写磨损均衡。所有对内存页面的请求均由页面分配子模块接受;数据区页面写次数管理子模块复制更新、查找页面写次数记录区的写次数记录数值;索引子模块用于加速对页面写次数记录区的查找过程;空闲页面管理子模块接到由页面分配子模块转发的页面请求后,要求数据区页面写次数管理子模块找到具有最小写次数记录数值的内存页面,并把该磨损程度最低的页面分配给相应的页面请求。由此保证文件数据写操作和日志记录所涉及的所有内存页面的磨损均衡。存放元数据和文件系统索引的内存页面的磨损均衡通过设置磨损阈值实现,数据区页面写次数管理子模块可以提供设置阈值所需要的数据。

因此,所有文件更新操作都在实现数据一致性更新的同时做到了写磨损均衡。文件的一致性更新及存储介质的磨损均衡实现方法描述如下:

1)数据一致性的保证:利用硬件支持的原子性操作保证所有符合原子性要求的数据更新的一致性的,例如,对小于等于8个字节的数据可以实现原子性操作;对于无法实现原子性的操作必须记录日志(log)。如图2所示,被更新的文件元数据inode和日志是一对一的关系;日志记录数据被改变之前的信息。当系统崩溃或者掉电,重启后都能从日志恢复到修改前的状态。

2)文件数据就地更新操作:从元数据结构inode找到日志,并记录日志,如果当前没有日志记录,则从空闲页面管理模块申请写次数最少的页面,记录日志;从空闲页面管理模块申请N个写次数最少的页面,把更新后的完整的数据页面内容写入新的页面;在日志中记录新、旧页面的指针,使得旧页面指针指向未被更改的原数据页面,新页面指针指向存放更新后数据的新数据页面;设置日志状态变量为COMMIT;更新文件系统元数据inode中相应的内容,用新的数据页面替换旧的数据页面;更新相应文件系统索引结构;设置日志状态变量为CHECKPOINT;释放未被更改的原来的数据页面。在所有数据页面的写操作之后需要在页面写次数记录区的相应记录中更新页面写次数。

3)文件数据做追加操作:从元数据结构inode找到日志,并记录日志,如果当前没有日志记录,则从空闲页面管理模块申请写次数最少的页面,记录日志;从空闲页面管理模块申请N个写次数最少的页面,写入追加后的完整数据内容;如原文件数据的最后一个页面被更新,则需要在日志中记录新、旧页面的指针;设置日志状态变量为COMMIT;更新文件系统元数据inode中相应的内容,替换并增加追加后的新数据页面;更新相应文件系统索引结构;设置日志状态变量为CHECKPOINT;释放未被更改的原来的数据页面。在所有数据页面的写操作之后需要在页面写次数记录区的相应记录中更新页面写次数。

4)文件数据做部分追加操作:从元数据结构inode找到日志,并记录日志,如果当前没有日志记录,则从空闲页面管理模块申请写次数最少的页面,记录日志;从空闲页面管理模块申请N个写次数最少的页面,写入更新并追加后的完整数据;更新日志记录中的被更新的新、旧页面指针,使得旧页面指针指向未被更改的原来的数据页面,新页面指针指向新的数据页面;设置日志状态变量为COMMIT;更新文件系统元数据inode中相应的内容,替换并增加新的数据页面;更新相应文件系统索引结构;设置日志状态变量为CHECKPOINT;释放未被更改的原来的数据页面。在所有数据页面的写操作之后需要在页面写次数记录区的相应记录中更新页面写次数。

5)对于文件系统磨损均衡的保证:所有文件数据的写操作都发生在新分配的内存页面,对于旧的数据页面没有写操作,由于新的内存页面是通过空闲页面管理模块获得的写次数最少的页面,页面的磨损均衡在数据更新时自动完成。对于文件系统元数据inode和文件系统索引要采用限定阈值的方法达到写磨损均衡的目的。例如,修改inode时,比较inode所在页面的写次数记录值和一个给定的阈值;如果写次数记录值小于阈值,则直接修改inode数据;如果写次数记录值达到或超过阈值,从空闲页面管理模块申请一个写次数最少的页面,把该inode所在页面的所有数据拷贝到新的页面中,修改inode数据,修改相应文件系统索引指针,使其指向新的inode。文件索引的磨损均衡采用类似的方法。

利用写次数记录区,结合最少写次数的空闲页面分配、写时复制和记录日志,以及限定阈值的方法,文件系统写操作的数据一致性和写磨损均衡都在写数据的同时同步完成。

实施例2

本实施例提供的一种数据一致性及磨损均衡的内存文件系统管理方法,包括以下步骤:

S1:在非易失性存储介质上设置一段连续的存储空间作为页面写次数记录区,所述页面写次数记录区用于记录并存放所有数据区页面的写次数,每个内存页面的写次数发生变化时更新该记录区内相应内存页面的写次数计数器;空闲页面管理模块可以根据这个区域记录的数据分配出当前系统中写次数最小的内存页面;只要系统按照本实施例专利所提出的架构和方法实施,页面写次数记录区本身的写操作是比较均匀分布的,不会先于其他任何内存页面超出非易失性内存的最大可容忍写次数;

S2:当写操作开始时,判断文件的日志记录是否存在,如果是,则从日志记录的尾端继续记录日志;如果否,则从空闲页面管理模块获取日志记录所需要的内存页面;

S3:将当前的文件元数据和受影响的文件数据备份到日志区域;更新所涉及内存页面在写次数记录区的相应写次数数值;将在文件被关闭时释放该文件的日志区域的内存页面;

S4:从空闲页面管理模块获取目标文件数据更新或追加所需要的内存页面,写入更新后的相应数据页面的完整数据,当新页面上的写操作完成以后,用新页面替换文件系统中的旧页面;更新所涉及内存页面在写次数记录区的相应写次数数值;此步骤保证了每次写操作的数据完整性;

S5:更新日志记录在的交易状态为“COMMIT”,表示文件数据的已经正确写入内存页面;更新所涉及内存页面在写次数记录区的相应写次数数值;

S6:修改目标文件的元数据。修改元数据之前根据元数据所在页面在写次数记录区中记录的磨损值判断是否需要迁移元数据,如果是,则执行步骤S7;如果否,则直接修改元数据,并更新所涉及内存页面在写次数记录区的相应写次数数值;

S7:将元数据所在页面内容拷贝到从空闲页面管理模块获得的空闲页中,修改元数据及指针,更新所涉及内存页面在写次数记录区的相应写次数数值;

S8:修改目标文件的文件索引。修改文件索引之前根据文件索引所在页面的在写次数记录区中记录的磨损值判断是否需要迁移页面,如果是,则执行步骤S9;如果否,则直接修改文件索引,将文件索引指向步骤S2中的存放更新后数据的内存页面;更新所涉及内存页面在写次数记录区的相应写次数数值;;

S9:将文件索引所在页面内容拷贝到从空闲页面管理模块获得的空闲页中,修改文件索引值及指针,更新所涉及内存页面在写次数记录区的相应写次数数值;

S10:更新日志记录中的交易状态为“CHECKPOINT”,表示写操作已经正确完成;更新所涉及内存页面在写次数记录区的相应写次数数值;

S11:释放并回收存放目标文件中的受影响的文件数据的旧页面。

所有内存页面的写次数都在专门设置的写次数记录区保存并在所有写操作的过程中实时更新。写操作的是指包括文件数据、元数据、日志、文件索引的所有数据的更新和追加;内存页面与页面写次数记录区的记录一一对应。

每一次写操作需要的新页面都是由空闲页面管理模块根据写次数记录区的数值找到的磨损程度最小的空闲页面,由此完成了写磨损均衡。

每一次写操作都把更新后的完整数据写入新的页面,旧页面的数据不更改,通过新旧页面的替换保证了所有写操作的数据完整性;所述页面的磨损阈值为用户预先设置或根据系统运行状态自动设置的数值。随着系统使用时间的延续,非易失性内存页面的写磨损程度上升,阈值可以按照下述方法设置并作调整:

(系统所用非易失性存储器的最大可容忍写次数+系统非易失性内存页面的当前最大写次数)*50%。

系统崩溃或掉电后重启,对于日志记录状态为“CHECKPOINT”的文件保持不变;对于日志记录状态为“COMMIT”的文件可以恢复为写操作发生之前的完整数据、或写操作完成之后的完整数据;对于其他日志记录状态的文件可以恢复为写操作发生之前的完整数据。

阈值的取值范围为大于等于系统最大可容忍写次数的50%,小于等于系统的最大可容忍写次数。

所述步骤S11中的回收旧页面在每次日志设置正确完成状态后、文件下一次产生日志时或者文件关闭时进行旧页面回收。

实施例3

如图5所示,图5是本发明打开文件流程图,具体过程如下:

打开文件,判断文件是否存在,如果存在,则打开文件,如果文件不存在,做创建文件流程,所述创建文件流程如下:

步骤1,生成元数据,判断是否需要申请页面;如果需要申请新页面,则执行步骤2;如果不需要申请新页面,则执行步骤3;

步骤2,从空闲页面管理模块申请一个写次数最少的页面,写入元数据,修改相关数据,执行步骤4;

步骤3,把元数据写入到页面,执行步骤4;

步骤4,增加所涉及内存页面在页面写次数记录区的相应写次数数值,执行步骤5;

步骤5,完成。

其中,图6是本发明更新文件数据的流程图,步骤如下:

开始

步骤101,接受更新请求,执行步骤102;

步骤102,从空闲页面管理模块申请N个写次数最少的页面,执行步骤103;

步骤103,把日志写到步骤102的页面中,执行步骤104;

步骤104,增加步骤102页面写次数,执行步骤105;

步骤105,判断更新方式,如果是就地更新,执行步骤106,否则执行步骤111;

步骤106,从空闲页面管理模块申请N个写次数最少的页面,执行步骤107;

步骤107,把更新数据写到步骤106的页面,执行步骤108;

步骤108,增加步骤106页面写次数,执行步骤109;

步骤109,日志记录修改页面的新、旧页面的指针,执行步骤110;

步骤110,增加日志页面写次数,执行步骤111;

步骤111,是否是文件追加方式,如果是执行步骤112,否则执行115;

步骤112,从空闲页面管理模块申请N个写次数最少的页面,执行步骤113;

步骤113,把追加内容拷贝到步骤112的页面,执行步骤114;

步骤114,增加步骤112页面写次数,执行步骤123;

步骤115,从空闲页面管理模块申请N个写次数最少的页面,执行步骤116;

步骤116,文件尾部需要修改的内容拷贝到步骤115的页面,执行步骤117;

步骤117,增加步骤115页面写次数,执行步骤118;

步骤118,日志记录修改页面的新、旧页面的指针,执行步骤119;

步骤119,增加日志页面写次数,执行步骤120;

步骤120,从空闲页面管理模块申请写次数最小的页面,执行步骤121;

步骤121,把追加的内容拷贝到步骤120的页面,执行步骤122;

步骤122,增加步骤120页面写次数,执行步骤123;

步骤123,设置日志状态为COMMIT,执行步骤124;

步骤124,增加日志页面写次数,执行步骤125;

步骤125,修改元数据,执行步骤126;

步骤126,增加元数据所在页面写次数,执行步骤127;

步骤127,判断元数据页面写次数是否达到阈值,是则执行步骤128,否则执行132;

步骤128,从空闲页面管理模块申请一个写次数最少的页面,执行步骤129;

步骤129,拷贝需更新的相应文件索引结构到步骤128的页面,执行步骤130,;

步骤130,更新相应文件系统索引结构,执行步骤131;

步骤131,增加步骤130页面写次数,执行步骤132;

步骤132,更新相应文件系统索引结构,执行步骤133;

步骤133,增加相应文件系统索引结构所在页面写次数,执行步骤134;

步骤134,判断索引所在页面写次数达到阈值,是则执行步骤135,否则执行139;

步骤135,从空闲页面管理模块申请一个写次数最少的页面,执行步骤136;

步骤136,拷贝需更新的相应文件索引结构到步骤135的页面,执行步骤137;

步骤137,更新相应文件系统索引结构,执行步骤138;

步骤138,增加步骤137页面写次数,执行步骤139;

步骤139,设置日志CHECKPOINT,执行步骤140;

步骤140,增加日志页面写次数;

结束。

图7本发明中删除文件流程如,删除文件的流程步骤如下:

步骤21,接到删除文件请求,判断文件是否存在,存在,转步骤2,不存在转步骤23;

步骤22,从空闲页面管理模块申请写次数最小的页面,写日志,修改文件索引结构指针,修改目录文件,释放inode,设置日志状态,转步骤23;

步骤23,完成;

综上所述,本实施例提供的保证内存文件系统在非易失性内存上的数据一致性和磨损均衡的方法,具体步骤如下所述:

S1:在非易失性存储介质上划出一段连续的存储空间(称为页面写次数记录区),记录并存放所有数据区页面的写次数;

S2:当写操作开始时,判断文件的日志记录是否存在,如果是,则从日志记录的尾端继续记录日志;如果否,则从空闲页面管理模块获取日志记录所需要的内存页面;日志记录所需要的页面是从空闲页面管理模块申请磨损程度最小或较小的空闲页;

S3:将当前的文件元数据和受影响的文件数据备份到日志区域;更新所涉及内存页面在写次数记录区的相应写次数数值;

S4:从空闲页面管理模块获取目标文件数据更新或追加所需要的内存页面,写入更新后的相应数据页面的完整数据,当新页面上的写操作完成以后,用新页面替换文件系统中的旧页面;更新所涉及内存页面在写次数记录区的相应写次数数值;此步骤保证了每次写操作的数据完整性;

S5:更新日志记录在的交易状态为“COMMIT”,表示文件数据的已经正确写入内存页面;更新所涉及内存页面在写次数记录区的相应写次数数值;

S6:修改目标文件的元数据。修改元数据之前判断元数据所在页面在写次数记录区中记录的磨损值是否超过磨损阈值,如果是,则执行步骤S7;如果否,则直接修改元数据,并更新所涉及内存页面在写次数记录区的相应写次数数值;

S7:将元数据所在页面内容拷贝到从空闲页面管理模块获得的空闲页中,修改元数据及指针,更新所涉及内存页面在写次数记录区的相应写次数数值;

S8:修改目标文件的文件索引。修改文件索引之前判断文件索引所在页面的在写次数记录区中记录的磨损值是否超过磨损阈值,如果是,则执行步骤S9;如果否,则直接修改文件索引,将文件索引指向步骤S2中的存放更新后数据的内存页面;更新所涉及内存页面在写次数记录区的相应写次数数值;;

S9:将文件索引所在页面内容拷贝到从空闲页面管理模块获得的空闲页中,修改文件索引值及指针,更新所涉及内存页面在写次数记录区的相应写次数数值;

S10:更新日志记录中的交易状态为“CHECKPOINT”,表示写操作已经正确完成;更新所涉及内存页面在写次数记录区的相应写次数数值;

S11:释放并回收存放目标文件中的受影响的文件数据的旧页面。

其中,在步骤S3、S4、S5、S7、S9、S10中,由于写次数记录区保存了每个内存页面的写次数,即写磨损程度,空闲页管理模块可以分配当前磨损最小的页面,或者磨损值在一定范围之内的页面。

在步骤S2中,分配的日志区域的大小根据更新的数据量而定,可以是单个或多个页面。

在步骤S3中,备份的元数据可以是全部inode信息或受影响的部分信息,备份的文件数据可以是受影响的全部文件数据或指向存放文件数据的页面的索引。

在步骤S6、S8中,页面的磨损阈值可以是用户预先设置的值,也可以是根据系统运行状态自动设置的一个值。

在步骤S11中,依照空闲页管理的方式不同,回收旧页面可以是每次日志设置正确完成状态后、文件下一次产生日志的时候或者是文件关闭的时候。

在步骤S1-S10中,利用写次数记录区,结合最少写次数的空闲页面分配、写时复制和记录日志,以及限定阈值的方法,文件系统写操作的数据一致性和写磨损均衡都在写数据的同时同步完成。

最后说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本技术方案的宗旨和范围,其均应涵盖在本发明的保护范围当中。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1