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

文档序号:9646600阅读:817来源:国知局
一种用于内存文件系统的文件数据一致性更新方法
【技术领域】
[0001]本发明属于计算机系统软件领域,具体涉及一种保证内存文件系统文件数据更新一致性的方法。
【背景技术】
[0002]内存文件系统
随着新型非易失性存储器的出现,企业界和学术界提出将存储密度大、读写速度快、可按字节寻址和抗震动的非易失性内存制作为持久性的数据存储设备,称为存储级内存(Storage Class Memory,简称SCM)。为了管理这种存储级内存,已经设计出多种内存文件系统。例如 IBM 设计的 PMFS, “System software for persistent memory,” in Proc.9thACM Eur0.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),重庆大学自主研发的 SMFS,“Designingan Efficient Persistent In-Memory File System”,2015 IEEE Non-VolatileMemory System and Applicat1ns Symposium, pp 1-6,2015,D01: 10.1109/NVMSA.2015.7304365。(“高效持续性内存文件系统设计”,2015年电气和电子工程师协会非易失性内存系统及应用研讨会,第1-6页,D01: 10.1109/NVMSA.2015.7304365)。
[0003]在内存文件系统S頂FS中,文件的数据都存放在物理内存页面上。这种存放文件数据的物理内存页面称为“数据页”。所有文件都使用类似系统页表的数据结构组织其数据页,该数据结构称为“文件页表”。每当进程打开内存文件系统SIMFS中的一个文件时,文件系统通过以下三步将文件映射到系统的虚拟地址空间中:
1)给文件分配一段足够大的空闲系统虚拟地址空间;
2)找到这段虚拟地址空间对应的系统页表项;
3)把文件的文件页表插入到第2步中的系统页表项。
[0004]此后,文件所管理的物理内存就直接映射到系统的虚拟地址空间,进程可以通过系统虚拟地址空间连续访问文件的数据页。传输数据的过程只需要一次数据拷贝,从而获得较高的文件系统性能。
[0005]数据一致性更新技术
在文件系统中更新数据时,例如用写操作向文件中写数据时,需要保证数据的一致性,即文件的元数据中引用的数据页必须属于该文件,而不是垃圾数据,或者其他文件的数据页。文件数据的一致性对文件系统的正确运行至关重要。然而,对内存文件系统而言,不仅需要保证文件数据更新的一致性,还需要利用内存文件系统的特点,尽可能地减少维持数据一致性导致的性能损耗。
[0006]目前,内存文件系统中使用的数据一致性更新技术主要有两种:
1.现有技术一:写时复制(Copy-on-write)技术在使用写时复制技术更新文件数据时,内存文件系统首先将新数据写到空闲的物理内存,然后使用原子操作将原文件的元数据指向新的数据页。具体而言,使用写时复制技术时,假设要更新个数据页,内存文件系统需要重复以下步骤Λ次:
1)分配一个空闲物理页;
2)调用一次数据拷贝函数,将新数据写入步骤1)分配的空闲物理页;
3)使用一次原子操作,修改原文件的数据索引结构中相应指针,指向步骤2)中的数据页。
[0007]可见使用写时复制技术更新文件数据时,内存文件系统需要调用/7次空闲页分配函数、Λ次数据拷贝函数,以及Λ次原子操作。
[0008]每一次分配空闲页和调用原子操作都需要使用CPU指令对文件系统代码中的竞争区域加锁、解锁,每一次调用数据拷贝函数都需要检查地址范围、页面权限等操作。因此,这种操作会产生较大的开销,降低内存文件系统的性能。
[0009]此外,传统的写时复制技术不只对当前更新的数据页进行更新,还必须向上传播,对新数据所影响到的文件元数据、文件系统元数据进行写时复制。最终可能导致从待更新文件数据到文件系统根目录整条路径上的所有页面全部执行写时复制。因此,写时复制技术会造成极大的性能损耗。
[0010]2.现有技术二:简短影子分页(Short-circuit shadow paging)技术 “Better I/O through byte-addressable, persistent memory.,,Jeremy Condit,
Edmund B.Nightingale, Christopher Frost, Engin Ipek, Benjamin Lee, DougBurger, and Derrick Coetzee.1n Proceedings of the ACM SIGOPS 22nd symposiumon Opera ting systems principles (S0SP ’09),Pages 133-146,2009, ISBN:978-1-60558-752-3.( “可字节寻址持久化内存上的先进 1/0”,Jeremy Condit, EdmundB.Nightingale, Christopher Frost, Engin Ipek, Benjamin Lee, Doug Burger, andDerrick Coetzee,第22届美国计算机学会操作系统原理研讨会,第133-146页,2009年,ISBN: 978-1-60558-752-3)
简短影子分页技术是微软在他们的内存文件系统BPFS中所使用的数据一致性更新技术。该技术类似于写时复制技术,即首先将新数据写到空闲的物理内存,然后使用原子操作将原文件的元数据指向新的数据页。不同之处在于,简短影子分页技术只更新直接受影响的数据页和文件元数据,更新操作不会传播到文件系统的其他文件或元数据。
[0011]然而,简短影子分页技术和写时复制技术有同样的缺点,也就是在更新个数据页时,要重复现有技术一中的3个步骤次。由此产生较大的开销,降低内存文件系统的性會泛。

【发明内容】

[0012]针对现有技术的不足,本发明所要解决的技术问题是提供一种用于内存文件系统的文件数据一致性更新方法,减少数据一致性更新操作的开销,提高内存文件系统的性能。
[0013]要解决的上述技术问题,
本发明提供的一种用于内存文件系统的文件数据一致性更新方法,包括以下步骤: 步骤1,在进程初始化时,系统在内核空间为进程打开一个伪文件;
步骤2,进程请求更新“目标文件”,内存文件系统按照需要更新的数据量,一次性分配全部所需的物理内存给伪文件;
步骤3,构建伪文件中索引数据页的数据结构,称为“数据索引”;
步骤4,调用一次数据拷贝函数,把新数据一次性全部写入伪文件;
步骤5,使用一个原子操作,把伪文件的数据索引插入目标文件的数据索引中相应的位置;
步骤6,进程结束,删除该进程对应的伪文件。
[0014]由于新数据首先写在伪文件中,如果在写的过程中系统崩溃或丢失电源,目标文件的数据不会受到影响。将新数据更新到目标文件中是由修改目标文件中的一个指针完成,整个操作仅需要一个由硬件保证完成的原子操作。因此,文件的数据不会出现一致性问题。此外,整个更新操作中只需要调用一次数据分配、数据拷贝函数和原子操作。所以,本发明具有如下的优点:对于数据量较大的更新操作,避免了大量数据拷贝函数调用以及原子操作,可以在保证文件数据更新一致性的情况达到较高的性能。
【附图说明】
[0015]本发明的【附图说明】如下:
图1为本发明的流程图;
图2为实施例的数据一致性更新的示意图。
【具体实施方式】
[0016]下面结合附图和实施例对本发明作进一步说明:
本发明的构思是:首先在创建进程的时候,给进程创建一个专有的伪文件;然后在进程运行的过程中,每当进程要更新文件数据时,都通过该伪文件作数据一致性更新;最后,当进程结束时,删除该进程对应的伪文件。
[0017]本发明包括以下步骤:
步骤1,在进程初始化时,系统在内核空间为进程打开一个伪文件;
伪文件和常规文件一样,有索引节点和内核虚拟地址空间等元数据信息,但是该文件的文件描述符并没有提供给进程,所以这种文件称为“伪文件”。
[0018]步骤2,进程发出更新文件数据的请求,进程所请求更新的文件称为“目标文件”,此时,内存文件系统按照需要更新的数据量,一次性分配全部所需的物理内存给伪文件。
[0019]步骤3,构建伪文件中索引数据页的数据结构,称为“数据索引”;
索引数据结构的形式与系统页表的形式相同,可以是单级索引,也可以是多级索引,每一级索引包含一块或多块物理内存,每一块物理内存分成多个相同长度的条目,每一个条目都可以存放下一级索引的一块物理内存的起始物理地址;
在伪文件的索引节点中,存有一个指针指向伪文件的数据索引,称为“索引指针”。索引指针可以指向存放伪文件的最高级数据索引的第一物理页,也就是说,索引指针可以是第一物理页的起始物理地址;
假设数据索引由高到底分级,编号由小到大,即一级索引指向二级索引,二级索引指向三级索引。如果修改的数据页只涉
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1