基于检查点的计算机的容错方法与流程

文档序号:11286053阅读:395来源:国知局
基于检查点的计算机的容错方法与流程

本发明涉及计算机技术领域,尤其涉及一种基于检查点的面向计算机(特别是超级计算机)的容错方法。



背景技术:

随着信息技术的发展,超级计算机的节点和处理器数目在持续增加,性能也在呈倍增加,然而,据统计,整个超级计算机系统的平均故障间隔时间(mtbf,meantimebetweenfailure)却减少到了只有几个小时。例如,中国的天河2号超级计算机由16000个节点组成,每个节点有2颗基于ivybridge-exeone52692处理器和3个xeonphi协同处理器,累计共有32000颗ivybridge处理器和48000个xeonphi协同处理器,总计有312万个计算核心。假如天河2号超级计算机中的每个处理器的mtbf是876000小时(100年),那么整个天河二号的mtbf是876000/(48000+32000)=8.76个小时。而且,内存容量的增加也会导致系统出错概率升高,超大规模计算机系统每1到3个小时就会出现软件或者硬件错误。在未来的10年间,cpu和内存的短暂性错误会增加30倍,因此,对于超大规模计算机系统,保证其可靠性越发重要。

目前,基于检查点的容错技术是保证大规模计算机系统可靠性的主要技术,该技术将正在运行的进程的状态数据保存到永久存储中,然后在必要的时候使用保存的状态数据将当前的进程状态卷回到执行检查点的时刻,被保存的进程状态数据称为检查点文件。检查点技术的开支主要包括保证所有进程处于检查点全局一致状态的时间、将庞大的检查点文件保存到永久存储中的时间和检查点的设置频率等。检查点文件越大,检查点设置频率越高,检查点技术的开支就越大。大规模计算机系统会由于周期性地执行检查点导致性能下降超过50%并且额外增加80%的i/o访问。例如,将由128000个处理器组成的bluegene/l超级计算机中所有ram的数据(1.6pb)保存到并行文件系统需要大约20分钟的时间。随着计算机系统的规模增加,使用的部件增多,整个系统的mtbf会急剧降低,系统需要更频繁地执行检查点。检查点的时间开支将会主导用户程序的执行时间,导致计算机系统的性能进一步下降。

此外,在当前的大规模计算机系统中,在执行检查点时,由于完整的检查点文件能达到pb级别的大小,这些检查点文件通常被写到永久存储中,例如,本地磁盘或者raid5设备等,甚至通过网络发送到远程存储设备上,会造成大量集中的i/o访问或者网络传输。而且,在执行检查点过程中,大部分计算资源处于空闲状态。由于检查点文件特别大,存储i/o带宽或者网络传输带宽远远小于系统内存大小,整个系统的性能就会极大下降。并且,当节点出错的情况下,使用检查点文件卷回或恢复到出错前的状态的时,需要从并行文件系统读取整个检查点文件到内存中,同样会发生大量集中的i/o访问或者网络传输,同样也会造成超级计算机的性能下降。因此,随着超大规模计算机系统的发展,检查点技术的性能成为非常严峻的问题。

现有技术的检查点方法通常是基于操作系统提供的页保护机制。该方法以页大小作为进程状态数据的分块大小,这种方式会导致检查点判断进程状态数据修改内容的粒度较大,并且基于页保护机制的检查点需要操作系统和硬件支持,该检查点方法使用操作系统的写时拷贝技术也会导致父子进程抢夺计算资源和内存资源。该方法没有利用执行检查点过程中的空闲计算资源,并且也没有能有效利用并行文件系统的i/o带宽,不能满足在出错情况下快速卷回和降低卷回的并行文件系统的i/o带宽要求。



技术实现要素:

本发明的目的在于克服上述现有技术的缺陷,提供一种基于检查点的计算机的容错方法,以缩短检查点文件保存和卷回的时间。

根据本发明的第一方面,提供了一种基于检查点的计算机的容错方法。该方法包括以下步骤:

步骤1:在判断为执行检查点时,暂停用户进程;

步骤2:利用计算机中空闲的计算资源对所述用户进程的进程状态数据进行分块并计算每个分块的hash值,以确定需要保存的分块;

步骤3:在计算分块的hash值的过程中,将已经确定的需要保存的分块和相应的hash值进行保存,以形成用于恢复出错的用户进程的检查点文件。

在本发明的方法中,所述需要保存的分块是相对于前一次执行检查点时被修改的分块。

在本发明的方法中,所述确定需要保存的分块包括:将每个分块的所计算的hash值与在前一次执行检查点时该分块的hash值进行比较,如果不同,则将该分块确定为需要保存的分块。

在本发明的方法中,在步骤3中通过rdma将所述需要保存的分块和相应的hash值保存至计算机的并行文件系统中。

在本发明的方法中,还包括:在确定需要保存的分块完成之后,如果存在未进行保存的剩余分块,则将所述剩余分块分成两部分,其中第一部分被复制到内存中,以用于在启动所述用户进程之后写入到所述并行文件系统中,第二部分被直接保存至所述并行文件系统中。

在本发明的方法中,所述第一部分占所述剩余分块的比例为a/(a+1),所述第二部分占所述剩余分块的比例为1/(a+1),其中,内存复制速度和并行文件系统的保存速度比是a:1。

在本发明的方法中,还包括在存在出错用户进程的情况下,利用所述检查点文件卷回出错的用户进程。

在本发明的方法中,还包括利用出错的用户进程的进程状态数据的分块的hash值判断被修改的分块,并将所述被修改的分块替换为所述检查点文件中的相应分块。

与现有技术相比,本发明的优点在于:

能够有效地利用大规模计算机系统中空闲的计算资源来执行检查点,以提高系统的资源利用率,缩短检查点的执行时间;使用流水线和异步方式将检查点文件写入到并行文件系统中,以降低i/o带宽要求;使用两级检查点备份数据以防止检查点的执行出错;在节点出错的恢复过程中,使用hash算法比较并只替换被修改的进程状态数据,从而有效地降低并行文件系统的i/o访问和带宽要求,加速检查点卷回。

附图说明

以下附图仅对本发明作示意性的说明和解释,并不用于限定本发明的范围,其中:

图1示出了根据本发明一个实施例的执行检查点的流程图;

图2示出了根据本发明一个实施例的用户进程恢复的流程图;

图3示出了根据本发明的一个实施例的第一次执行检查点的示例;

图4示出了根据本发明一个实施例的第二次执行检查点的示例;

图5示出了根据本发明一个实施例的用户进程的恢复示例。

具体实施方式

为了使本发明的目的、技术方案、设计方法及优点更加清楚明了,以下结合附图通过具体实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。

图1示出了根据本发明一个实施例的执行检查点的流程图。简言之,检查点机制是指在进程正常运行的适当时刻设置检查点,将进程状态数据(或称检查点文件)保存到稳定存储器中,如果在随后运行过程中发生故障,将进程状态数据从存储器中读出以执行进程的卷回/恢复操作。具体步骤如下:

步骤101:在检查点时刻,暂停用户进程

检查点周期(也即检查点时刻之间的间隔)的设置时间越长,重新执行进程的时间就越长,检查点文件也会越大;检查点周期的时间太短,则会导致频繁的执行检查点,从而影响计算机系统的性能,在实际应用时,可根据计算机系统的规模、性能、用户进程的数据量等因素设置适当的检查点周期。

当检查点时刻到达时,暂停所有节点上的用户进程,以维护用户进程的一致性。在用户进程暂停之后,节点上的处理器资源将空闲,因此存在丰富的空闲计算资源。在本文中,超级计算系统的空闲计算资源由多节点、多处理器、多核心等组成。

步骤102:对进程状态数据内存分块并进行hash值计算

在本文中,进程状态数据是指为了恢复进程所必需保存的信息,包括但不限于程序、寄存器组和变量的当前值等,例如,进程包括在内存中执行的程序、执行状态和数据等。

在此步骤中,利用空闲的计算资源将用户进程在每个节点上的进程状态数据内存分块并计算每个分块对应的hash值。

考虑hash值计算工作量和内存分块粒度等因素,可选择以128kb、512kb、1024kb等粒度将进程状态数据内存进行分块。在下文中将以512kb分块进行描述。

每个分块的hash(哈希)值计算可采用md4、md5或sha-1等以加密或非加密的方式进行。在一个实施例中,为了提高执行检查点的速度,采用非加密的方法对各个分块计算hash值。

步骤103:从检查点文件中读取上一次检查点时刻各分块的hash值

此步骤的目的在于,读取上一次执行检查点时刻保存的各分块的hash值,以判断在上次检查点之后到本次检查点时刻是否存在被修改的分块。

检查点文件可保存在稳定性存储器中,例如,本地磁盘或者raid5设备、或者通过网络进行远程存储。在本文中,为了充分利用超级计算机的资源将检查点文件写入到并行文件系统中,并以此为例描述本发明。

应理解的是,如果是第一次执行检查点,则此时并不存在检查点文件,因此也就不需要执行步骤103以及下文的步骤104,而是直接将各内存分块和对应的hash值保存到并行文件系统中,所有的内存分块和hash值构成完整的检查点文件。在一个实施例中,在计算hash值的同时,使用rdma(远程直接数据存取)技术快速将内存分块保存到并行文件系统中。由于rdma技术在确定分块的源地址和目的地址之后,就不需要处理器的参与,因此这种方式能够充分挖掘并行文件系统的带宽,减少处理器的占用时间。

步骤104:判断hash值是否相等

在此步骤中,将从并行文件系统中读取的上一次检查点时刻各分块的hash值与在步骤102中计算的本次检查点时刻计算的新的hash值进行比较。对于hash值不相同的内存分块说明相对于上次检查点时刻该内存分块已经被修改。

步骤105:将内存分块和新的hash值写到并行文件系统。

为了进一步提高执行检查点的速度,在步骤104的判断结果为否的情况下,执行步骤105,以只将已被修改的内存分块和新的hash值保存到并行文件系统中。所有改变的内存分块和对应的新的hash值构成增量检查点文件。

步骤106:判断进程状态数据的所有分块的hash值是否计算完毕

在此步骤中,判断是否已经完成所有内存分块的hash值计算,如果还有内存分块没有完成hash值计算,则返回步骤102进行下一个内存分块的处理,否则,执行步骤107。

步骤107:判断是否有未保存的被修改的内存分块

判断是否还剩余未被保存到并行文件系统的被修改内存分块,如果没有,则执行步骤1012,否则执行步骤108。

步骤108:将剩余的未被保存到文件系统的被修改的内存分块分成两部分

为了提高保存检查点文件的处理速度,将剩余的未被保存到文件系统的被修改的内存分块分成两部分,其中一部分用于首先复制到内存以备后续处理,另一部分用于保存到并行文件系统。

在一个实施例中,根据内存的复制速度(例如,对于512kb分块的复制速度)与并行文件系统的保存速度比将剩余的内存分块分成两部分。例如,假设内存复制速度和并行文件系统的保存速度比是a:1,则两部分的大小分别为剩余内存分块总和的a/(a+1)、1/(a+1)。

步骤109:分别将两部分复制到内存和保存到并行文件系统

在此步骤中,将步骤108中获得的需要复制到内存的一部分内存分块复制到内存,同时将另一部分保存到并行文件系统。

步骤1010:启动用户进程。

启动所有节点上的相关的用户进程。

步骤1011:启动后台程序将之前复制到内存的内存分块保存到文件系统。

在用户进程启动之后,启动后台程序将之前复制到内存的一部分内存分块保存到并行文件系统中。

步骤1012:从文件系统中删除冗余的分块。

如果该用户进程是第一次执行检查点,则跳过此步骤,否则,从并行文件系统中将本次增量检查点文件中被修改的分块和hash值从上次检查点文件中删除,以减小并行文件系统中增量检查点文件中多余无效的内容。

需要说明的是,虽然上文按照特定顺序描述了各个步骤,但是并不意味着必须按照上述特定顺序来执行各个步骤,实际上,这些步骤中的一些可以并发执行,甚至改变顺序,只要能够实现所需要的功能即可。类似地,在下文中描述的各种方法也不限于在介绍时使用的特定顺序。

为了进一步理解本发明中执行检查点时各步骤的时序关系或过程,图3和图4分别示出了执行第一次检查点和执行第二次检查点的示例,其中示出了处理器1至n的处理时序,横轴表示时间。

参见图3,第一次执行检查点具体过程如下:

步骤301:首先将该用户进程暂停,以保持该用户所有进程的一致性。

步骤302:在暂停进程之后,利用丰富的空闲计算资源直接计算用户进程的进程状态数据内存分块的hash值。通过这种方式能够并行计算上万个进程状态数据内存分块的hash值。

步骤303:在计算hash值的同时,使用rdma技术快速将内存分块保存到并行文件系统中,计算得到的hash值也会被保存到并行文件系统中。

步骤304:启动所有的用户进程。

参见图4,对于第二次执行检查点过程如下:

步骤305:首先将该用户进程暂停,以保持该用户所有进程的一致性。如图t0到t1时刻,在t0时刻暂停所有用户进程,t1时刻表示所有进程都已处于暂停状态。从t1时刻之后,每个节点上的处理器将空闲,存在丰富的空闲计算资源。

步骤306:利用空闲计算资源直接计算用户进程的状态数据内存分块的hash值。

步骤307:在一个处理器核心计算hash值的同时,通过rdma技术从并行文件系统读取执行上一次检查点时保存的整块进程状态数据的所有内存分块的hash值。

步骤308:将新计算得到的hash值与相同内存分块的hash值比较;

步骤309:如果hash值不相同,则使用rdma技术将该内存分块和hash值保存到并行文件系统中。

步骤3010:同时,处理器核心可以继续执行下一个内存分块的hash值计算和比较。

通过这种方式处理器核心计算hash值的工作与将内存分块保存到并行文件系统的工作可以流水线执行。尽管hash值的计算工作比内存分块的保存工作快,可能会导致流水线等待,但是由于并不是所有的进程状态数据的内存分块都会在两个检查点时刻被改变的,即有不需要保存到并行文件系统中的内存分块,因此通过流水线式的执行hash值计算和并行文件系统的保存能够有效利用超级计算机系统的资源,缩短执行检查点的时间。

步骤3011:将剩余的未被保存到并行文件系统的被修改的内存分块分成两份。

当进程状态数据内存分块被修改的比例较大时,可能存在进程状态数据内存分块的hash值计算和比较工作完成之后,还有被修改的内存分块没有保存到并行文件系统的情况,因此,为了进一步挖掘计算资源,在t2时刻将剩余的未被保存到并行文件系统中的被修改内存分块分成两份,其中第一份将被复制到内存,第二份继续保存到并行文件系统中。

步骤3012:将第一份复制到内存。

步骤3013:同时将第二份使用rdma技术保存到并行文件系统。

步骤3014:启动用户进程继续执行。

步骤3015:在进程执行的同时,将复制到内存的第一部分内存分块保存到并行文件系统中。

由于在超大规模的计算机系统中,即使在执行高负载进程的时候,系统中也会存在处理器核心空闲的时候,这段空闲的时间就可以将复制到内存的分块利用rdma保存到并行文件系统中。

步骤3016:从文件系统中删除重复内容

在本发明中,通过流水线执行内存分块的hash计算和内存分块的保存工作,处理器计算资源和并行文件系统的带宽被进一步挖掘,因此能够尽可能地使用丰富的剩余计算资源以及并行文件系统的带宽。

当用户进程所在的一个或多个节点出现错误时,例如,节点瘫痪的情况下,需要暂停用户进程,然后使用文件系统中的保存的检查点文件对用户进程进行卷回,以恢复到上一次检查点执行时刻。图2示出了根据本发明一个实施例的恢复用户进程的流程图。具体包括以下步骤:

步骤201:判断节点是否出错

首先,判断是否是出错的节点,如果是,则执行步骤202,否则执行步骤206。

步骤202:为出错的节点寻找空闲节点。

为出错的节点寻找新的空闲节点或者负载相对较轻的节点,作为恢复出错节点上的用户进程的卷回节点,有多少个出错节点就寻找多少个卷回节点。

步骤203:读取完整的检查点文件到空闲节点。

将完整的检查点文件从并行文件系统上读取到空闲节点或卷回节点上。

步骤204:恢复错误节点的用户进程。

使用读取到的检查点文件卷回出错节点上的用户进程。

步骤205:判断是否所有节点处理完成。

判断所有节点是否处理完成,如是,则执行步骤2011,否则执行步骤201。

步骤206:判断是否所有分块的hash值计算完成。

对于节点没有出错的情况,只需要恢复进程状态数据即可,在此步骤中,判断是否所有分块的hash值计算完毕,如是,则执行步骤205,否则执行步骤207。

步骤207:计算内存分块的hash值。

计算内存中用户进程的进程状态数据分块的hash值。

步骤208:从并行文件系统中读取分块hash值。

从并行文件系统的检查点文件中读取对应分块的hash值。

步骤209:判断hash值是否相等。

将计算得到的分块的hash值与读取的hash值进行比较,如果hash值相同,则说明无需替换该分块,继续执行步骤206,否则执行步骤2010。

步骤2010:将内存中的分块替换为检查点文件的相应分块。

在此步骤中,对于hash值不相同的分块,使用检查点文件中的分块替换内存中的相应分块。

步骤2011:恢复错误节点的用户进程。

启动用户进程,完成从出错中恢复进程执行。

为了进一步理解本发明中用户进程卷回过程中各步骤的时序关系,参见图5所示,其中,包括非出错节点上的处理过程和空闲节点上的处理过程,横轴表示时间(time)。

步骤401:首先,将用户进程暂停,以保持所有进程的一致性。

步骤402:计算分块的hash值。

在暂停所有进程之后,利用空闲的计算资源直接计算用户进程的进程状态数据分块的hash值。

步骤403:在一个处理器核心计算hash值的同时,通过rdma技术从并行文件系统的读取上一次整块进程状态数据的所有分块的hash值。

步骤404:将新计算得到的hash与读取的相应分块的hash值进行比较。

步骤405:如果hash值不相同,则使用rdma技术将对应的内存分块替换为并行文件系统中的分块;

步骤406:同时,处理器核心可以继续执行下一个分块的hash值计算和比较。

步骤407:当进程状态数据分块被修改的比例较大时,进程状态数据块的hash值计算工作完成之后,还可能仍没有完成被修改内存块的替换工作,在这种情况下,继续使用rdma技术完成被修改的内存块的替换工作。

步骤408:对于出错的节点,则寻找空闲节点或负载较轻的节点作为卷回节点。

步骤409:从并行文件系统上将完整检查点文件中属于出错节点的部分读入到卷回节点中。

步骤4010:在卷回节点中重新构建用户进程。

步骤4011:启动暂停的用户进程,以继续执行用户任务。

本发明可以是系统、方法和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于使处理器实现本发明的各个方面的计算机可读程序指令。

计算机可读存储介质可以是保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以包括但不限于电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、静态随机存取存储器(sram)、便携式压缩盘只读存储器(cd-rom)、数字多功能盘(dvd)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。

以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。

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