一种内存文件系统中的数据一致性更新方法

文档序号:10654101阅读:257来源:国知局
一种内存文件系统中的数据一致性更新方法
【专利摘要】本发明公开了一种内存文件系统中的数据一致性更新方法,包括分配一个备份文件;获取原文件的索引节点号、请求的更新位置和长度;将新数据写入备份文件的文件数据区域;若数据更新的量大于阈值T,则用备份文件的索引结构替代原文件中待更新数据对应的第一索引;若数据更新的量小于阈值T,则计算待更新数据的第一起始虚拟地址,一次性新数据拷贝到原文件中待更新的数据位置。本发明根据更新数据量的大小,即利用内存文件系统拷贝速度快的优点,又使用原子性更新的方式进行更新,保证文件数据更新一致性的情况提高了内存文件系统的性能。
【专利说明】
一种内存文件系统中的数据一致性更新方法
技术领域
[0001]本发明属于计算机系统软件领域,具体涉及一种保证内存文件系统文件数据更新一致性的方法。
【背景技术】
[0002]中国专利文献CN105404667A于2016年3月16日公开了一种用于内存文件系统的文件数据一致性更新方法,它包括以下步骤:1,在进程初始化时,系统在内核空间为进程打开一个伪文件;2,进程请求更新“目标文件”,内存文件系统按照需要更新的数据量,一次性分配全部所需的物理内存给伪文件;3,构建伪文件中索引数据页的数据结构,称为“数据索引”;4,调用一次数据拷贝函数,把新数据一次性全部写入伪文件;5,使用一个原子操作,把伪文件的数据索引插入目标文件的数据索引中相应的位置;6,进程结束,删除该进程对应的伪文件。该发明针对简短影子分页技术,解决了在更新η个数据页时,要重复现有技术3个步骤η次所产生的较大开销问题,提高了内存文件系统的性能。
[0003]简短影子分页技术是传统影子分页技术针对内存文件系统的改进版。传统面向磁盘的文件系统中,每一次I/o操作至少更新一个物理块(大小通常为512Β至4ΚΒ)。因此,传统的影子分页技术都是以块为粒度,每次更新一个块中的数据时,都会影响到整个块,必须对整个块做备份。所以,传统影子分页技术会从底层的文件数据开始,逐层向上更新涉及到的文件索引结构、元数据结构、目录文件的数据和元数据等,产生极大的开销。
[0004]简短影子分页技术利用了非易失性内存具有字节更新的特性,只更新受影响的数据。具体而言,每次更新时,文件系统将新数据写入新分配的数据块中,然后用CHJ自带的原子更新操作,就地更新受影响的索引结构中的相关指针。不需要更新上层的数据块。
[0005]简短影子分页技术的不足在于,对任何数据量的更新请求都使用单一方式更新文件数据。对于有数据修改的页面而言,无论更新的数据量多大,都要分配新的页面。例如原页面A有4ΚΒ数据,此次请求需要更新最后的IKB数据,简短影子分页就需要执行以下3步:
1)分配一个新页面B;
2)将原页面A中的不应覆盖的数据(即前3ΚΒ)拷贝到新页面B中,然后把新数据写到页面B的最后1ΚΒ。
[0006]3)用新页面B的起始地址替换原页面A在索引结构中的指针。
[0007]简短影子分页一共写4ΚΒ数据,修改I个指针。
[0008]除简短影子分页技术外,内存文件系统中数据一致性更新技术还有一种自适应写日志(Adaptive logging)技术:
与简短影子分页不同,为了减少更新数据量,自适应日志根据单个页面的更新大小不同,而采用不同的策略。例如上述例子,自适应日志如下更新:
1)分配一个新页面C;
2)将IKB新数据写入新页面C中;
3)将IKB新数据写入原页面A中。
[0009]自适应写日志一共写2KB数据,不需要修改指针。
[0010]“Design and Implementat1n of a Journaling File System for Phase-Change Memory” Eunji Lee, Seung Hoon Yoo, and Hyokyung Bahn.1EEETransact1ns on Computer Systems, VOL.64,N0.5,MAY 2015, Pages 1349-1360,2015,DO1: 10.1109/TC.2014.2329674.( “设计并实现一个针对相变存储器的日志文件系统”,Eunji Lee, Seung Hoon Yoo, and Hyokyung Bahn.,国际电子电气工程师协会计算机系统学报,第64期第5篇,第1349-1360页,2015年五月,DO1: 10.1109/TC.2014.2329674)。该文在使用自适应写日志技术更新文件数据时,内存文件系统首先根据当前更新请求在原文件中的起始位置,将新数据拆分为多个子部分,每个子部分的大小不超过一个页面的大小。如果某个子部分更新内容小于页面大小的一半,则把新数据写到一个新分配的页面中,然后拷贝到原文件相应位置;如果某个子部分更新内容超过了页面大小的一半,则把新数据写到一个新分配的页面,再把原文件中要保留的数据拷贝到新页面对应的位置,最后把这个新页面的指针改回原文件的索引结构中。
[0011 ]如图1所示,自适应写日志的一个页面为4KB,一个请求要从数据块B的位置开始,更新4KB数据,新数据被拆分为IKB和3KB两个部分(因为此次写请求要求的起始位置是数据块B的最后1KB)。按引用文献的方法:IKB的新数据被写入日志区域的数据块B'中(新分配的页面B'),然后拷贝到数据块B(原文件的位置),覆盖数据库B最后的IKB旧数据。3KB的部分新数据被写入日志区域的数据块C'中,数据块C中不需要修改(要保留)的最后100字节数据也写入数据块C'中,最后通过修改指针的方式,在原文件中用数据块C'替代数据块C。
[0012]现有自适应写日志技术更新文件数据时的问题是:忽略了数据更新过程中的性能差异,导致的数据更新请求的开销增大。本专利发明人通过实验发现:在文件系统中,一次数据更新请求的数据量少于T时,直接用虚拟地址拷贝数据的速度要高于搜索并修改文件索引结构的速度。其中,T是一个阈值,根据系统的不同略有差异。

【发明内容】

[0013]针对自适应写日志技术更新文件数据时存在的问题,本发明所要解决的技术问题是提供一种内存文件系统中的数据一致性更新方法,它根据更新数据量选取相应的更新方式,能减少各种数据更新请求的开销,提高内存文件系统的性能。
[0014]本发明的构思是:在文件系统初始化时创建一系列文件,并为这些文件分配一定的物理空间,与一般文件不同的是这些文件并不会被分配给用户,而是专门为维护文件系统一致性所创建的,这种文件称为“备份文件”。备份文件中有一个标志位,用于标识写一致性过程进行到哪一步,构建备份文件中索引数据页的数据结构,称为“数据索引”。
[0015]进程发出更新文件数据的请求,进程所请求更新的文件称为“原文件”。在进程打开一个原文件时,文件系统会为它分配一个备份文件用于写一致性的维护。在原文件从打开到关闭的整个过程中,原文件始终持有该备份文件。
[0016]把文件系统的写一致性过程分为预写日志和检查点两个阶段:
预写日志阶段:当一个写请求到达后,首先把原文件的索引节点号、被更新的数据在原文件中的起始位置和长度记录到备份文件中,并把备份文件的标志位设为PENDING状态,表示已经做好备份,等待更新。然后调用一次数据写函数,把新数据一次性全部写入备份文件的数据区域。把原文件将被改变的元数据信息记录到备份文件的文件信息存储区域,然后把备份文件的标志位设为COMMIT状态。这时可以保证无论此后的任何时刻发生系统故障,备份文件中都有一份本次更新的一致性数据。
[0017]检查点阶段:在该阶段需要把备份文件中的数据写回原文件中。根据写请求数据量大小的不同需要分为两种情况:
a.该次写的数据量小于等于阈值T,则直接通过虚拟地址空间把备份文件中的新数据拷贝的到原文件中;
b.该次写请求的数据量大于阈值Τ,则使用一个原子性操作,把备份文件的索引结构插入原文件的索引结构中的相应位置;
在数据写回到原文件后,再把备份文件中的标志位设为CHECKPOINT状态。至此一次写操作就完成了。
[0018]如果系统故障发生在预写日志阶段,标志位为PENDING状态,这说明本次数据更新操作的备份工作并未完成,数据的一致性由原文件维护。这时舍弃本次更新,只是简单地重置备份文件存储信息后把它回收。如果系统故障发生在检查点阶段,标志位为COMMIT状态,这说明本次数据更新操作的备份工作已经完成,可以根据备份文件中存储的原文件inode号找到需要更新的数据的原文件,重新把本次更新的元数据和数据写回到原文件中,之后再重置备份文件信息存储区域并回收。因此,文件的数据不会出现一致性问题。此外,整个更新操作中只需要调用一次数据页分配和数据拷贝函数或原子操作。
[0019]本发明所要解决的技术问题是通过这样的技术方案实现的,它包括以下步骤:
步骤1、为请求更新数据的原文件分配一个备份文件;
步骤2、获取数据更新请求对应的原文件的索引节点号、请求的更新位置和长度;
步骤3、将步骤2中获取的信息记录到备份文件的元数据区域;
步骤4、将新数据写入备份文件的文件数据区域;
步骤5、判断此处数据更新请求的大小,如果大于阈值T,执行步骤6,否则执行步骤8;步骤6、搜索原文件的索引结构,找到待更新数据对应的第一索引;所述第一索引可以是第一级索引或其它几级的索引;
步骤7、用备份文件的索引结构替代步骤6中找到的第一索引,执行步骤10;
步骤8、用原文件的起始虚拟地址和请求更新的数据的偏移量,计算待更新数据的第一起始虚拟地址;
步骤9、用步骤8中得到的第一起始虚拟地址和备份文件的起始虚拟地址,一次性新数据拷贝到原文件中待更新的数据位置;
步骤10、完成更新请求,按需回收备份文件。
[0020]上述步骤I中,备份文件为预留的专用备份文件,或者临时获取的普通文件。
[0021 ]上述步骤5中,所述阈值T根据单进程、双进程或多进程的数量设置相应的值。
[0022]本发明的技术效果:
本发明根据更新数据量的大小灵活调整数据写回策略,当更新数据量较小(小于等于阈值T)时,利用内存文件系统拷贝速度快的优点直接拷贝数据;当跟新数据量较大(大于阈值T)时,使用原子性更新的方式进行更新,避免了大量数据拷贝,可以在保证文件数据更新一致性的情况达到较高的性能。
[0023]所以本发明具有如下的优点:依据更新数据量选取相应的更新方式,减少了数据更新请求的开销,提高了内存文件系统的性能。
【附图说明】
[0024]本发明的【附图说明】如下:
图1为【背景技术】中自适应写日志的数据更新过程的示意图;
图2为本发明的流程图;
图3为本发明的数据一致性更新过程的示意图。
【具体实施方式】
[0025]下面结合附图和实施例对本发明作进一步说明:
本发明方法是:首先在文件被打开的时候,给该文件分配一个专有的备份文件。然后在以后的过程中,每当要更新文件数据时,都通过该备份文件作数据一致性更新。最后,当文件关闭时,回收对应的备份文件。
[0026]如图2所示,本发明的流程开始于步骤101,然后:
在步骤102,判定文件是否是第一次打开,若是,则执行步骤103;否则,执行步骤105; 在步骤103,内存文件系统分配一个空闲索引节点,给该文件分配一个备份文件; 在步骤104,内存文件系统在内核虚拟地址空间中打开该备份文件;
在打开备份文件时,首先给备份文件分配一段内核虚拟地址空间,然后找到内核页表中该虚拟地址空间对应的页表项,最后把备份文件的索引结构已经插入到该页表项中;此后,该备份文件已经拥有一段连续的虚拟地址空间。
[0027]在步骤105,判断是否要关闭文件,如果要关闭,则执行步骤117;否则执行步骤106;
在步骤106,判断进程是否收到写文件的请求,如果是,执行步骤107,否则返回步骤
105;
在步骤107,把此次更新数据请求的相关信息记录到备份文件中;
请求的相关信息,例如原文件的索引节点号,被更新的数据在原文件中的起始位置和长度记录。把备份文件的标志位设为PENDING状态。
[0028]在步骤108,把新数据一次性写入备份文件的文件数据区域,设标志位为COMMIT;在步骤109,判断本次写的数据量是否大于阈值T,如果是则执行步骤110,否则执行步骤113;
发明人在试验中取阈值T为16KB。
[0029]在步骤110,获取原文件待更新数据的文件内偏移量;
在步骤111,根据步骤110获取到的偏移量,在原文件的索引结构中查找待更新数据对应的索引;
在步骤112,用备份文件的索引结构,即指向新数据的索引,替换步骤111中找到的原文件待更新数据(即旧数据)对应的索引,然后执行步骤116;
在步骤113,获取原文件中待更新数据(即旧数据)的文件内偏移量;
在步骤114,用原文件的起始虚拟地址和步骤113中获取的偏移量,计算待更新数据的起始虚拟地址。
[0030]在步骤115,使用备份文件数据区域的起始虚拟地址和步骤114中计算得到的起始虚拟地址,一次性将新数据拷贝到原文件中,覆盖旧数据,然后执行步骤116;
在步骤116,设置备份文件的标志位为CHECKPOINTING,表示已完成此次更新操作,然后返回步骤106;
在步骤117,回收备份文件;
在步骤118,流程结束。
[0031]如图3所示,在备份文件中更新10M数据。
[0032]图3(a)中,备份文件的文件页表已经建好,其中3级索引包含50个页面,文件数据包含25601个页面。此次更新是从备份文件偏移量为2KB位置开始。此时内存文件系统调用一次数据拷贝操作,把新数据一次性写入备份文件中,新数据如图3(a)中灰色部分;
如图3(b)所示,在备份文件2级索引、3级索引和文件数据各自第一页中不需要修改的部分,填入原文件中相应的数据,原文件数据如图3(a)中深色部分;
如图3(c)所示,内存文件系统使用一个原子操作,把备份文件I级索引中的一个指针写入原文件中相应的位置。此时,原文件的数据已经更新完成。
【主权项】
1.一种内存文件系统中的数据一致性更新方法,其特征是,包括以下步骤: 步骤1、为请求更新数据的原文件分配一个备份文件; 步骤2、获取数据更新请求对应的原文件的索引节点号、请求的更新位置和长度; 步骤3、将步骤2中获取的信息记录到备份文件的元数据区域; 步骤4、将新数据写入备份文件的文件数据区域; 步骤5、判断此处数据更新请求的大小,如果大于阈值T,执行步骤6,否则执行步骤8; 步骤6、搜索原文件的索引结构,找到待更新数据对应的第一索引; 步骤7、用备份文件的索引结构替代步骤6中找到的第一索引,执行步骤10; 步骤8、用原文件的起始虚拟地址和请求更新的数据的偏移量,计算待更新数据的第一起始虚拟地址; 步骤9、用步骤8中得到的第一起始虚拟地址和备份文件的起始虚拟地址,一次性新数据拷贝到原文件中待更新的数据位置; 步骤10、完成更新请求,按需回收备份文件。2.根据权利要求1所述的内存文件系统中的数据一致性更新方法,其特征是:步骤I中,所述备份文件为预留的专用备份文件,或者临时获取的普通文件。3.根据权利要求1所述的内存文件系统中的数据一致性更新方法,其特征是:步骤5中,所述阈值T根据单进程、双进程或多进程的数量设置相应的值。
【文档编号】G06F3/06GK106020736SQ201610400153
【公开日】2016年10月12日
【申请日】2016年6月8日
【发明人】沙行勉, 陈咸彰, 诸葛晴凤, 孙志龙, 姜炜文
【申请人】重庆大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1