一种减少检查点文件大小的方法

文档序号:10569797阅读:266来源:国知局
一种减少检查点文件大小的方法
【专利摘要】本发明涉及容错技术中检查点技术领域,提出了一种减少检查点文件大小的方法。该方法是根据检查点文件中存储内容的冗余性,采取不同的策略来达到最大限度的减少检查点文件大小的目的。本发明将设置检查点的程序分为两类:单节点程序和分布式程序。图一显示了本发明在分布式程序中的原理示意图。在进行设置检查点的时对于单节点程序和分布式程序采取如下方法:对单节点程序中的栈段采取Gzip压缩+重复数据删除的方法;在分布式程序中,堆栈段采取Gzip压缩+重复数据删除的方法,代码段、动态链接库以及同一节点上的共享内存采取只存储一份内容到其中一个节点的检查点中,而其余的检查点文件只存储该内容索引的方法。
【专利说明】
一种减少检查点文件大小的方法
技术领域
[0001]本发明涉及容错技术中检查点技术领域,特别是涉及减少检查点文件的大小。具体涉及通过对检查点文件中具体内容的冗余性来制定不同的策略,最终通过消除检查点文件中的冗余数据来达到减少检查点文件大小的方法。
【背景技术】
[0002]随着计算机硬件水平的不断提高,促进了高性能计算不断的向前发展。而随着机群系统的规模越来越大,机群系统发生故障的概率也不断的上升。对于分布式系统和高性能计算来说,一个节点发生了故障将导致整个任务运行失败。这将带来巨大的资源浪费,因此容错技术已经成为避免造成资源的巨大浪费的不可或缺的需求。
[0003]在分布式系统和高性能计算中,检查点技术是提供错误容忍的一个很重要的方式。检查点技术是指在程序正常运行时,通过每隔一段时间进行设置检查点,将程序正常运行的状态信息保存到稳定的存储设备中,如果此程序在接下来的运行过程中发生了故障,那么可以从存储设备中读取前一个检查点保存的检查点文件中的状态信息,使其卷回恢复继续正确执行。然而随着计算规模的增大,检查点的文件大小也会变大,同时也会频繁的进行设置检查点。例如在1000个节点中,每个节点需要存储IGB的内存空间,那么每次设置检查点将消耗ITB的存储空间,这将会给存储的可扩展性带来严峻的挑战。
[0004]目前减少检查点文件的大小主要有四个方法:增量检查点,内存排除,检查点压缩,重复数据删除。增量检查点通过仅仅保存内存中改变过的内容来达到减少检查点文件的目的。在恢复阶段,程序状态的信息通过获取增量检查点文件和最近一次保存的完全检查点文件来进行恢复。内存排除是指通过跳过临时或者未使用的缓存区来减少检查点文件的大小。而检查点压缩则是最普遍使用的方法,它是先将程序的状态信息进行压缩之后在保存到检查点文件中。重复数据删除技术是目前主流的存储技术,它通过删除数据集中重复的数据,只保留其中一份,从而消除冗余数据。在重复数据删除技术中,首先是将数据文件分割为一组数据块,为每个数据块计算指纹,然后以指纹为关键字进行Hash查找,匹配则表示该数据块为重复数据块,仅存储数据块索引号,否则则表示该数据块是一个新的唯一块,对数据块进行存储并创建相关的元信息。这样,当进行读取文件时,首先读取所有块的元信息,根据元信息找到对应块的内容,最后还原数据文件。这种技术可以很大程度上减少对物理存储空间的需求,从而满足日益增长的数据存储需求。
[0005]在进程地址空间中一般会涉及到5个不同的数据段,这5个数据段分别是:代码段、数据段、BSS段、堆、栈。有研究对进程的地址空间内容进程了实验分析[I],结果显示了栈段中具有较高的冗余数据,而代码段、数据段、BSS段、堆则具有较高的压缩率。这就给减少检查点文件的大小提供了一个有效的方法。

【发明内容】

[0006]本发明针对检查点文件中不同数据内容的冗余性来采取不同的处理方法,最终能够最大程度的减少检查点文件的大小。
[0007]本发明将应用程序分为两类:单节点程序和分布式程序。图一显示了本发明在分布式程序中的原理示意图。本发明在单节点程序和分布式程序在使用检查点技术时所采取的策略如下:
[0008]I)在单节点程序中,对进程地址空间中的栈段采取重复数据删除和Gzip压缩的方法,对于其他需要存储的部分均采用Gzip压缩的方法。
[0009]2)在分布式程序中,由于不同进程间的堆、栈段之间的冗余率比较大,对于堆、栈段采取重复数据删除和Gzip压缩的方法,而对于代码段、动态链接库以及同一个节点上的共享内存由于不同的进程间的内容都是相同的,故在所有的检查点文件中只需要存储一份内容,其余的检查点文件存储该内容的索引,最后进行Gzip压缩即可。
[0010]在设置检查点时,会将进程的状态信息保存到检查点文件中。而在保存进程地址空间中的内容时,将采用本发明的方法对进程地址空间中的内容进行处理,最后保存至检查点文件中。通过使用本发明的方法,可以很大程度的减少检查点文件的大小。
【附图说明】
[0011 ]图1:本发明针对于分布式程序的原理示意图.
[0012]图2:应用级检查点系统构架图.
[0013]图3:proc文件系统中的maps文件示意图.
[0014]图4:堆栈在检查点文件中存储的示意图
【具体实施方式】
[0015]DMTCP是一个成熟的应用级检查点工具。其构架图如图2所示。安装好DMTCP之后,DMTCP会将检查点功能编译为一个链接库。在使用检查点时,DMTCP会将该库链接到应用程序中。然后会在应用的进程中创建检查点线程,并创建一个协调器进程。协调器进程用来保持各个进程的状态一致性。当开始设置检查点时,协调器进程会向每一个检查点线程发送消息,检查点线程接收到消息后,通过信号联系用户线程来暂停当前的运行。当所有的用户线程暂停运行之后,检查点线程开始保存用户进程的状态信息到检查点文件中。所有进程的状态信息保存到检查点文件中之后,协调器通知各个检查点线程,检查点线程通过信号联系用户线程继续运行下去。
[0016]本发明在DMTCP中进行了实现。实现中主要涉及的是对进程地址空间中的内容进行处理。在DMTCP中,进程地址空间中的内容主要是从proc虚拟文件系统中的maps文件获取。maps文件中的格式如图3所示。在图3中,从左到右是:该映射所在的地址空间、该映射的有关权限、偏移量、该映射文件所在的设备、文件的inode号、文件名。本发明在DMTCP中的实现主要由2部分构成:I)检查点设置阶段,堆、栈段的处理模块和代码段、动态库以及共享内存的处理模块。2)检查点恢复阶段,对于堆、栈段、动态库以及共享内存的恢复模块。
[0017]下面是本发明在DMTCP中实现的几个模块描述:
[0018]1.检查点设置阶段堆、栈段的处理模块
[0019]输入:Memorydata
[°02°]说明:Memorydata是从内存中读取的堆或者桟的相关信息,即proc文件系统maps中每行的信息。图4显示了堆、栈在检查点文件中存储的示意图。
[0021]步骤:
[0022]I)向协调器发送请求查询该应用是不是分布式程序。在使用检查点时,协调器会接收到各个进程发送过来的连接信息,协调器收集到每个进程运行的程序名,当相同程序名的数量大于2时,则表明当前运行程序是分布式程序。
[0023]2)如果该应用不是分布式程序,则使用普通的数据去冗余算法,算法结束。
[0024]3)如果该应用是分布式程序,按照4KB大小将Memorydata内存地址进行分块,并计算每一块内容的哈希值,继续下面的步骤。当数据块不能被划分时,存储该内存数据的元数据信息,以便以后进行恢复,算法结束。
[0025]4)如果该哈希值存在于本地哈希库,表明该块不是唯一块,不需要进行存储,接着从本地哈希库中获取该块所对应的唯一块的块号并记录起来。跳至步骤3。
[0026]5)如果该哈希值在本地哈希库中不存在,那么发送信息到协调器,查询该块是否存在于其他的节点上。
[0027]6)如果该块存在于其他的节点上,那么从协调器获取该块的索引信息。跳至步骤8。
[0028]7)如果该块不存在于其他节点上,那么表示该块是唯一块,直接存储该块的内容至IJ检查点文件中,并生成该块的索引信息,将块的索引信息上传到协调器。块的索引信息包括该块所在的检查点文件名和唯一块的块号。跳至步骤8。
[0029]8)将索引信息添加到本地的哈希库并将块的数目加I,最后将该块的哈希值添加到本地哈希库中。跳至步骤3。
[0030]2.检查点设置阶段动态链接库、代码段以及同一个节点上的共享内存处理模块
[0031]输入:Memorydata
[0032]说明=Memorydata是从内存中读取的动态链接库、代码段以及共享内存的相关信息,即proc文件系统maps中每行的信息。
[0033]步骤:
[0034]I)向协调器发送请求查询该该应用是不是分布式程序。
[0035]2)如果该应用不是分布式程序,那么算法结束,转向正常的处理流程。
[0036]3)如果该应用是分布式程序,那么向协调器发送信息,查询该数据名是否存在于协调器上。
[0037]4 )如果该数据名不存在于协调器上,那么直接存储该数据信息并将Memorydata.flag标记为I,表示该块信息内容存储的是内容而不是索引。然后上传索引信息至协调器,用于其他节点的查询。如果该数据名存在于协调器上,那么需要从协调器下载该数据的索引信息,然后将索引信息保存到检查点文件中。
[0038]3.对于堆、栈段、代码段、动态库以及共享内存的恢复模块
[0039]输入:Fd
[0040]说明:Fd是打开的检查点文件描述符。在进行检查点恢复阶段,会打开检查点文件,从检查点文件中读取内容然后重新映射到内存中去,当读取的内容是堆、栈、代码段、动态库和共享内存的头信息时,开始下面的算法。
[0041 ]步骤:
[0042]I)首先检查该恢复程序是否是分布式程序,如果该不是分布式程序,那么算法结束,跳至正常的检查点恢复处理。如果是分布式程序,那么自身进程创建一个监听线程,该监听线程用来监听从其他节点发送过来的请求信息,并将监听线程的相关信息上传到协调器,进行注册。
[0043]2)当所有的进程都在协调器注册成功后,协调器会将所有的监听线程信息汇总发送回各个恢复进程。
[0044]3)从检查点文件中读取头文件信息。
[0045]4)如果读取的头文件信息中显示该部分是共享内存并且存储内容是索引信息,这就表示该共享内存的内容保存在索引信息中的检查点文件中。那么只需要打开本地的索引信息中的检查点文件,定位到指定的位置,然后读取相应的内容。
[0046]5)如果读取的头文件信息中显示该部分是堆、栈段,那么首先需要恢复堆、栈段的内容。首先读取堆、栈段的元信息,根据元信息读取每一块所对应的唯一块内容,如果唯一块中的内容显示该块的内容在其他检查点文件上,那么就需要向该检查点所在的进程拿取相应的内容。需要向该进程的监听线程发送请求,该进程的监听线程收到请求信息后,根据索引信息找到相应的内容数据,然后将这些内容数据发送回请求进程。
[0047]6)如果读取头文件信息中显示的是代码段和动态库,跟堆、栈段的恢复一样,如果读取到的内容是索引信息,那么就需要向该内容所在的进程拿取相应的内容。
[0048]7)将读取到的内容映射到相应内存地址中。
[0049]参考文献
[0050][I]Rai A,Ramjee R,Anand A,et al.MiG:Efficient Migrat1n of DesktopVMs Using Semantic Compress1n[C]//USENIX Annual Technical Conference.2013:25-36o
【主权项】
1.一种减少检查点文件大小的方法,其特征是:针对检查点文件中不同数据内容的冗余性来采取不同的处理方法,最终达到最大限度的减少检查点文件大小的目的。2.根据权利要求1所述的方法,其特征是:在单节点的应用程序设置检查点时,为了减少检查点文件的大小,进程的栈段采取Gzip压缩+重复数据删除的方法,而其他的部分采用Gz ip压缩的方法。3.根据权利要求1所述的方法,其特征是:在分布式程序设置检查点时,为了减少检查点文件的大小,进程的堆栈段采取Gzip压缩+重复数据删除的方法,代码段、动态链接库、同一节点上的共享内存采取只存储一份内容到一个检查点文件中而其他的检查点文件只存储索引信息,其他的部分采用Gzip压缩的方法。
【文档编号】G06F11/07GK105930223SQ201610257288
【公开日】2016年9月7日
【申请日】2016年4月24日
【发明人】孙建华, 陈政宇, 刘俊
【申请人】湖南大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1