首页> 中国专利> 多计算机体系中用于控制软件进程的方法、用于再分布或连续操作的方法和系统

多计算机体系中用于控制软件进程的方法、用于再分布或连续操作的方法和系统

摘要

本发明涉及用于控制多计算机体系(群集)中的软件应用的方法。例如,所述控制可被用于以对所述应用尽可能透明的方式来分析或修改其环境。该控制可用于一个或数个应用进程的状态的分析、捕捉和恢复操作。所述操作使用控制器,其位于该应用外部,且将系统调用指令注入到可控制进程的工作存储器中。

著录项

  • 公开/公告号CN101002177A

    专利类型发明专利

  • 公开/公告日2007-07-18

    原文格式PDF

  • 申请/专利权人 国际商业机器公司;

    申请/专利号CN200580016201.X

  • 发明设计人 马克·弗特斯;

    申请日2005-06-22

  • 分类号G06F11/14;

  • 代理机构北京市柳沈律师事务所;

  • 代理人邸万奎

  • 地址 美国纽约阿芒克

  • 入库时间 2023-12-17 18:50:31

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2012-08-29

    未缴年费专利权终止 IPC(主分类):G06F11/14 授权公告日:20090819 终止日期:20110622 申请日:20050622

    专利权的终止

  • 2009-08-19

    授权

    授权

  • 2007-09-12

    实质审查的生效

    实质审查的生效

  • 2007-07-18

    公开

    公开

说明书

技术领域

本发明涉及管理多计算机(群集)体系中的软件应用机能的方法,例如以对(vis-a-vis)此应用尽可能透明的方式,对其执行环境的分析或修改。本发明还涉及用于通过使用此机能管理方法来修改或调整这样的应用的机能,以在群集内达到对其进程的再分布的方法。具体地,这种再分布的方法可被用来平衡网络中不同机器之间的工作负载,或通过改善操作的连续性而使得应用可靠化。本发明还涉及实现这种机能再分布的方法的多计算机系统。

背景技术

本发明的领域是由一起工作的多个计算机形成的网络或计算机群集。这些群集被用来执行向用户提供一个或多个服务的软件应用。这样的应用可以是单个或多进程,并且在单计算机上执行,或在多个计算机上分布,例如如MPI(“消息传递接口”)的分布应用。

在给定的瞬间,在冗余和通信体系的环境下,在被称为主或操作节点的计算机上、或群集的一组计算机上执行应用,而来自群集的其他计算机被称为次级或“备用”节点。现在,这种群集的使用显示出存在可靠性问题,这可能是由于装备或操作系统的故障、由于人的错误、或由于应用本身的故障。

为解决这些可靠性问题,当前存在被称为高实用性的机制,其在大多数当前群集上实现,并且,其基于群集的一个次级节点中的备份节点上的应用的自动冷重启(cold reboot)。

然而,为了返回到与发生故障时的情况接近的情况,这些基于冷重启的机制常常具有相当长的持续时间和相当大的实现复杂度,这在发生故障时对由执行期间的应用提供的服务的合格连续性产生不利影响。

为改善这种连续性,公知(例如根据专利FR 02/09855)还提供在次级节点上周期性地或实时地更新的、操作节点的一个或多个克隆(clone)。

另外,在使用这样的群集期间,尽管不足地使用其他资源,但是某些硬件资源,如计算机或通信信道或线路可能具有非常高的工作负载,由此带来了瓶颈。

为了改善应用的性能,可以在群集内重组应用的分布。

然而,所有这些技术都需要由机能管理操作介入到执行期间的进程中,如用于应用所使用的进程或资源的分析、捕捉或恢复的操作。

现在,这样的功能不必在应用中提供,并且待追踪或编辑的数据对于该应用外部的机能并不是始终能够例如通过操作系统访问的。

如果不直接在应用内部提供这样的功能,则再在以后集成这些功能是昂贵且复杂的,或者甚至是不可能的,并且这常常需要应用的设计者的介入。为了实现这样的功能而不直接介入应用的编程,可以编辑由应用使用的特定指令,以便用必要的功能来丰富它,或在应用代码的汇编或执行的各个阶段处添加这些功能。

为此,例如,可以在内核(kernel)级上编辑或丰富操作系统的某些模块。

然而,这样的修改对网络内使用的不同配置的一致性是有害的,并且不能在执行期间容易地编辑。

还可在汇编期间集成辅助库,以便将这些功能永久添加到可执行代码中。这样的库甚至可执行在应用中规定的调用与如专利FR 02/00398中所述的原始库之间的插入,允许这些调用被转移到可在执行期间编辑的新库。

然而,这些方法需要在应用汇编阶段介入,这是昂贵且复杂的,可能需要由应用的设计者来做,并且即使不考虑所有这些,也是错误或不兼容的起因。

由此,在这样的体系中,如果没有对应用或系统、或这两者的修改或介入,某些进程管理功能的实现方式是脆弱而难以产生的,这是成本、复杂性和产生错误的风险的起因。

发明内容

由此,本发明的一个目的是允许对此应用的机能、以更透明的方式进行应用进程的更完全的管理。

通过用于管理软件应用的方法来实现此目的,其中该软件应用包括至少一个被称为目标进程的、在至少一个计算机上以及在包括至少一个执行存储器空间的执行环境中执行的主软件进程。

根据本发明,该方法包括由至少一个被称为控制器进程的、该应用外部的、且能够对目标进程的运行起作用的第二软件进程将至少一个可执行指令注入到目标进程的执行存储器空间中的操作,此可执行指令产生对该目标进程的执行环境的分析或修改。

更具体地,注入操作包括步骤:

-由控制器进程中断目标进程的执行;

-由控制器进程将产生分析或修改机制的所注入指令写入到用于执行目标进程的存储器空间的、被称为再归因(reattributed)区域的一个部分中;

-由目标进程执行这些所注入的指令;

-由控制器进程通过写入到再归因区域中而恢复在中断之前存储在那里的目标进程指令;

-继续执行目标进程指令。

有利的是,此机能管理方法还包括以下特性的组合:

目标进程中断阶段可以在读取和备份在再归因区域中存储的指令和/或用于在其中断时执行目标进程的环境的状态的至少一个步骤之前。

写入所注入指令的步骤可以在向再归因区域中写入在此再归因区域和另一给定的、被称为映射区域的存储器空间之间产生寻址对应的数据的步骤之后。

执行所注入指令的步骤可以在向再归因区域中写入构成所注入指令的变元的数据的步骤之后。

执行所注入指令的步骤还可以在根据与所注入指令相对应的参数而编辑执行环境的步骤之后。

执行所注入指令的步骤可以在读取再归因区域中存储的数据和/或读取执行目标进程的环境的状态的步骤之前。

写入所注入指令的步骤可包括:在再归因区域中,在所注入的指令之后,写入至少一个用于执行中断的指令。

本发明的另一目的在于,有助于以对此应用尽可能透明的方式、在应用的机能中实现使能此应用的环境的、或其使用的资源的分析、捕捉或修改。

为此,本发明提出如上的用于管理软件应用的机能的方法,该方法执行至少两个自省(introspect)进程的自省操作,这些自省进程中的每一个使用本身包括指针的第一资源,该指针指定本身包括属性的第二资源,所述进程可依靠所述指针访问该属性,并且,该方法包括以下步骤:

-由控制器进程向两个自省进程的每一个中注入至少一个对与每个所述自省进程相对应的第二资源的属性的值进行初始读取的系统指令;

-由控制器进程向两个自省进程中被称为测试进程的一个中注入至少一个对与所述测试进程相对应的第二资源的属性的值进行修改的系统指令;

-由控制器进程向被称为参考或控制进程的另一自省进程中注入至少一个对与所述控制进程相对应的第二资源的属性的值进行第二读取的系统指令;

-由控制器进程将通过所述控制进程第二读取的值与初始读取的值进行比较;

-由控制器进程存储代表所述比较的结果的数据,以及由控制器进程向测试进程注入至少一个对与所述测试进程相对应的第二资源的属性的值进行修改的系统指令,以向其返回其初始读取值。

为此,本发明还提出如上的用于管理软件应用的方法,该方法执行捕捉被称为被捕捉进程的目标进程的状态的操作,并且包括步骤:

-由控制器进程控制被捕捉进程;

-由控制器进程向被捕捉进程中注入至少一个对用于执行该被捕捉进程的环境的结构进行分析的系统调用指令;

-存储或传送代表该分析结果的结果数据,并恢复被捕捉进程的存储器空间;

-继续执行被捕捉进程指令。

当要被管理的应用属于多进程、多任务或“多线程”(multi-thread)类型时,上述的捕捉操作还可由以下特性组合而成。

具体地,机能管理方法可执行此应用的至少两个进程的状态,同时、或在它们中的一个根据另一个计算而各自运行时完成这两个进程的中断。

当被捕捉进程与至少一个其他进程依靠该应用外部的至少一个进程间软件代理来交换通信数据时,该捕捉操作还可包括步骤:

-由控制器进程向被捕捉进程注入至少一个系统调用指令,该系统调用指令在进程间代理中执行来自另一应用进程且还未由被捕捉进程接收的至少一个通信数据的读取;

-作为结果数据而存储或传送该通信数据。

当被捕捉进程的执行环境支持通过遗传关系在进程之间传送特性时,该捕捉操作还可包括步骤:

-由控制器进程向被捕捉进程中注入至少一个对被捕捉进程与至少一个其他应用进程之间的遗传关系进行分析的系统调用指令;

-存储或传送代表被捕捉进程的遗传关系的结果数据。

在相同的环境下,本发明还提出如上的用于管理软件应用的机能的方法,该方法执行由控制器进程从被称为重启(restart)数据的数据恢复至少一个被称为重启进程的软件应用进程状态的操作,该恢复操作包括步骤:

-由控制器进程中断该重启进程的执行;

-作为重启数据的功能,由控制器进程向重启进程中注入至少一个系统调用指令,该系统调用指令创建或修改属于执行该重启进程的环境的至少一个软件对象的结构;

-根据重启数据写入用于执行重启进程的存储空间;

-启动重启进程,并继续执行其指令。

当要被管理的应用属于多进程、多任务或“多线程”类型时,上述的恢复操作还可以组合以下特征。

当用于执行重启进程的环境支持或使用依靠该应用外部的至少一个进程间软件代理来在数个进程之间交换通信数据时,该恢复操作还可包括步骤:

-由控制器进程向被捕捉进程中注入至少一个系统调用指令,该系统调用指令根据重启数据,在进程间代理内写入至少一个代表针对该重启进程的通信数据的数据。

当用于执行重启进程的环境支持通过遗传关系在进程之间传送特性时,该恢复操作还可包括阶段:

-由控制器进程向重启进程中注入至少一个系统调用指令,该系统调用指令基于重启数据,使用至少一个其他应用进程来创建或修改重启进程的至少一个遗传关系。

这样的用于管理应用进程的功能的实现尤其可以以较低的成本介入该应用以及其产生的服务的机能中,同时降低复杂度和错误的风险。

现在,为了管理应用的机能,有用的是,最佳地管理应用使用群集内的硬件资源的方式,同时限制应用的机能内部的介入和其包括的风险和复杂性。

由此,本发明的另一目的在于,能够将此应用的全部或一些的执行从一个硬件资源移动到另一硬件资源,例如从一个计算机到另一个计算机、或从一个节点到另一节点。

为此,本发明提出使用上述方法以执行将至少一个被称为原始进程的应用进程复制为克隆(clone)进程的方法,包括以下步骤:

-通过如上所述的方法来捕捉原始进程的状态;

-使用来自该捕捉的结果数据,以存储代表该原始进程在其执行时的状态的、被称为检查点的软件对象;

-使用来自检查点的数据,以将至少一个克隆进程恢复到再现原始进程的状态的状态。

在相同环境下,本发明还提出使用上述方法,以执行被称为再分布的、在多计算机(群集)体系中执行的且包括至少一个被称为初始进程的进程的软件应用的全部或部分的再分布的方法,当在给定瞬间、在被称为主或操作节点的来自群集的至少一个计算机上执行时,该方法提供数据的处理,来自所述群集的其他计算机被称为次级节点,该再分布的方法包括以下步骤:

-复制在次级节点上执行的至少一个次级进程中的至少一个初始进程;

-将数据处理的全部或部分从初始进程切换到至少一个次级进程。

具体地,这样的再分布可将这样或那样的计算任务从一个节点传输到群集内的其他节点。由此可以再分布各个机器的工作负载,以获得群集内工作负载的更好的平衡。还可以将某些进程移动到距离使用这些进程的资源更近的、或具有更好的通信的机器上,例如,以便降低某些进程与它们使用的数据库之间的传送时间。

根据本发明的一个具体特征,再分布方法还包括以下步骤:

-复制在至少一个次级节点上执行的一个或多个次级进程中由操作节点执行的所有进程;

-将所述进程的全部数据处理切换到至少一个所述次级进程。

由此,可以移动由装备的给定项目使用的所有进程。这尤其能使得应用独立于该装备的项目,例如在计算机由于维护或替换而导致关机(down)的情况下。

带着类似的目的,本发明还提出使用上述方法以产生用于中止包括在至少一个计算机上执行至少一个进程的软件应用的方法,该中止方法包括以下步骤:

-通过如上所述的方法,捕捉该应用的全部进程的状态;

-使用来自该步骤的结果数据,以存储代表该应用在其执行时的状态的、被称为检查点的软件对象;

-使用来自检查点的数据,以将至少一个或多个克隆进程恢复到再现所有被捕捉进程的状态的状态。

由此,可以在存储装置中以其在给定时刻的状态备份全部应用。然后,可保存和存储这样的备份,例如作为证据或为了安全性。

可在选定时刻、在相同机器或在另一机器上执行恢复步骤。由此可以使得机器的维护或替换更容易,尤其当不能将应用传输到群集的另一部分时。由此,还可以利于将应用传输到一个或多个其他机器,例如与其没有直接数字通信的机器。

另一目的在于提出用于执行对正在多计算机体系中执行的软件应用的操作连续性的改善的方法。

通过的以下方法实现这一目的,该方法使得被称为可靠化应用的、在多计算机体系(群集)中执行的、且提供给定服务的软件应用的机能可靠化,在给定时刻、在被称为主或操作节点的来自群集的至少一个计算机上执行该应用的至少一个进程,来自所述群集的其他计算机被称为次级节点。该可靠化方法实现上述的管理方法,以便执行至少一个捕捉操作和至少一个恢复操作,并且包括以下步骤:

-由至少一个控制器进程捕捉该可靠化应用的全部进程的状态;

-使用来自该捕捉的结果数据,以存储代表该可靠化应用在其执行时的状态的、被称为检查点的软件对象;

-在操作节点内检测影响可靠化应用的机能的硬件或软件故障;

-使用检查点数据的全部或部分,以在至少一个次级节点上将备份应用的一个或多个进程恢复为再现可靠化应用的全部进程的状态的状态;

-将全部或部分服务切换到至少一个所述次级节点的备份应用。

更具体地,根据本发明的用于管理机能的方法可选择性地或非选择性地将捕捉操作结合到恢复操作,以进行将被称为原始的应用的状态整体复制为克隆应用。然后实现上述的复制方法,以将来自原始应用的全部进程和资源复制为克隆应用的进程和资源。

根据相同的发明概念,在检测故障之后而不是之前,机能的连续性的此方法当然可以更新或恢复一个或多个克隆进程,或执行这两者的组合。

由此,本发明还提出用于使得被称为可靠化的、在多计算机体系(群集)中执行的、且提供给定服务的软件应用的机能可靠化的方法,在给定时刻、在被称为主或操作节点的来自群集的至少一个计算机上执行被称为可靠化进程的该应用的至少一个进程,来自所述群集的其他计算机被称为次级节点,该可靠化方法包括以下步骤:

-实现整体复制方法,以在至少一个次级节点上复制处于与可靠化应用的状态相同状态下的备份应用;

-在操作节点内检测影响可靠化应用的机能的硬件或软件故障;

-将全部或部分服务切换到至少一个所述次级节点的备份应用。

本发明还提出实现根据本发明的方法的多计算机系统。

使用不同于要被管理的进程、即不同于目标进程的控制器进程的一个优点具体在于,能够以该应用外部的、即目标进程的存储器空间外部的操作的形式实现连续性的、或机能的再分布的功能所必需的操作。这些外部操作是例如检查点、触发捕捉、或状态恢复的定义,资源结构的分析或修改,或对这些资源中的数据的读取或写入。

这些计算和操作事实上代表某一计算量(volume),其仅仅一小部分需要从目标进程执行。由此,这有利于注入该小部分,同时实现必须被再分布或可靠化的应用外部的操作的连续性或再分布的管理的剩余部分。这使得目标进程以及由此的全部目标应用能够在检查点(检验指示)或恢复点(通过启动或更新克隆)期间的捕捉操作前后保持不变。

与应用外部的控制器的管理相结合,从而,使用通过节点的注入的实现的方法的事实使得能够访问应用内部的系统功能,用于需要它的任务,而无需介入到应用中。与由例如“GDB”的调节程序(或调试器)使用的介入的外部方法相比,这种从内部的访问使得能够管理进程,而不依赖于对这些调试器指定的功能的限制。例如,通过来自目标应用的“调试码元”的列表,本发明不需要被限制到在此目标应用中已存在的功能。

此外,由注入产生的系统调用使得能够使用在寄存器中存储的、且位于堆栈顶部的参数,作为用于多个调试器的情况。由此,通过注入的方法还可免于对特定资源的访问授权,如可能在诸如SELinux、SUN-Solaris或OpenBSD之类的某些操作系统中存在的堆栈执行准入。

控制器和指令注入的组合使得能够产生用于触发检查点的捕捉的、简单并直接的方法。作为量级的指示,产生用于不带有文件也不带连接的单个进程的这些复制功能的基本示范程序,可表现为大约500行的C语言程序。

另外,本方法对系统调用注入的限制和临时的方面使得能够将仅仅少量指令注入到要被管理的进程的存储器空间中,而其中在该操作的结尾不保留任何指令。从而,这能避免“污染”目标进程,这从应用的可靠性和维护这两方面来看都是有利的。

根据本发明的方法具有如下优点:对使用静态可执行文件(即包括全部必要例程)和使用动态可执行文件(即调用该应用外部的子程序的库)的目标应用都可使用。

另外,根据本发明的方法使得能够执行机能的再分布或连续性,而在用户的工作区域外仅仅很少或完全不介入。具体地,检查点捕捉(检验指示)的实现和恢复操作本身仅仅需要对系统(内核)或系统资源(内核模块)的添加进行非常少或不进行修改。通过避免介入问题中的节点的系统或内核,此方面能够使得对系统专家的需求最小化,并且使得在群集的各个计算机上安装的系统配置均匀化,等等。

另外,控制器进程可执行对重启进程的状态的恢复而本身无需影响该重启进程启动的事实使得能够对现有重启进程起作用。该可能性使得能够管理操作的再分布或连续性,以不干扰启动目标应用或其进程的方法,例如,这利于本发明对分布应用(MPI)的应用。

附图说明

根据对不是限制的一个实施例的详细说明以及附图,本发明的其他特征和优点将变清楚,附图中:

图1a表示执行软件应用的群集的结构,由实现根据本发明的方法以执行完全再分布的再分布应用可靠化其机能;

图1b表示执行软件应用的群集的结构,由实现根据本发明的方法以执行部分再分布的再分布应用调整其机能;

图2是由目标进程内的控制器进程执行的程序指令的注入操作的运行的符号图;

图3是捕捉进程的状态的操作的机能的符号图;

图4是恢复重启进程的操作的机能的符号图;

图5是示出使用共享的或分离的文件描述符的两个进程的结构的图;

图6是示出使用系统调用的注入的多进程自省方法的运行的图。

具体实施方式

在下面的说明中,使用C语言、并对Unix类型或从其导出的尤其是POSIX类型的环境或操作系统而给出为实现根据本发明的方法而使用的命令或指令的例子。当然,其他语言或系统环境可以被用来实现本发明。

在图1a和图1b中示出了在用于机能的再分布的应用中、根据本发明的复制方法的使用。这种用于机能再分布的应用被用来对被称为再分布应用的、在来自多计算机体系或群集的操作节点OP中执行的软件应用的机能进行再分布。这样的节点可以是群集内的单个计算机,或者可包括在群集内一起工作的多个计算机。

再分布应用包括至少一个在执行环境中工作的、被称为原始进程PCA的进程,在该执行环境中,其可访问某一数量的不同类型的资源。这些资源通常包括:

-在节点OP的工作存储器中分配的执行存储器空间,并且在其中存储构成进程的执行指令;

-执行环境(context),包括存储器寄存器和各种类型的状态资源,如标志、互斥(mutex)等;

-由计算机使用的I/O(输入/输出)存储器区,以便管理与用户或其他软件或硬件参与者的输入和输出;

-存储数据,例如由该进程管理的变量,或数据文件,其中一些可与其他应用(未示出)共享、与再分布应用通信。

在进程可访问的资源中,其中一些可恰好被分布在多个计算机或数个节点上,特别是在分布应用的情况下,例如共享存储器区中、或以共享文件或外部数据库形式存储的变量。

在来自群集的、与应用的操作节点并与至少一个次级节点SB通信的一个或多个计算机上执行机能再分布应用。通过以常规方式进行存储,或通过检查点中的事件、来自再分布应用的一个或多个原始进程PCA的瞬间状态来完成这种机能的再分布。

当触发检查点时,再分布应用根据下面说明的方法执行检查点捕捉操作。根据本发明,该检查点捕捉操作使用如下所述由作用于再分布应用的原始进程PCA的临时控制器进程PC1实现的、管理再分布应用的机能的方法。

一旦完成该检查点捕捉,再分布应用就将被称为检查点状态的软件对象存储在群集内的存储装置中。除根据本发明的捕捉操作外,还可实时或由根据已知手段的级备份或复制再分布应用的某些资源,如数据库或文件。

在实施例中,再分布应用执行再分布应用的完全再分布,即,所有它的进程和使用这些进程的链接。

如图1a所示,具体地,通过构建备份应用,该完全再分布可被用来使得再分布应用可靠化,在操作节点OP的故障事件中,这将维持所提供服务的某种连续性。

为此,机能再分布应用使用检查点状态,以至少一个备份应用的形式,执行再分布应用的一个或多个恢复,这被称为重启应用。该重启操作包括在群集的次级节点SB上、和向其确保与该检查点的捕捉时的原始进程PCA的状态相对应的状态的资源上执行的克隆进程。

可以以常规方式或通过事件来执行该恢复,并且该恢复可包括通过克隆进程(也被称为重启进程)的创建的完全启动,或通过更新已有的克隆进程来执行恢复。

在该恢复期间,再分布应用根据下面说明的方法,执行根据检查点更新克隆进程的操作。根据本发明,通过如下所述的系统调用的注入,该更新操作使用由作用于重启应用的克隆进程的临时控制器进程PC2实现(如下所述)的用于管理机能的方法。

在影响可靠化应用的、在操作节点上的机能的故障事件中,由用于监测或检测故障的功能根据已知方法来提醒机能再分布的应用。由此,机能再分布应用引起到备份应用的服务的切换,然后克隆进程接管原始进程PCA在故障前扮演的角色。

在未示出的其他实施例中,根据本发明的方法,服务再分布应用还可在故障后执行重启应用的更新,或在更新前执行此重启应用的完全启动。

在此处未示出的其他具体特征中,这样的完全再分布还可被用来将应用从一个节点完全地移动到另一节点,例如,以便为硬件介入而释放此节点。

通过在恢复该重启应用之前保存某一时间的检查点状态数据,例如在操作节点上的硬件介入的时间期间,可以执行再分布的应用的存档(archiving),或该应用的中止(suspension)。通过将检查点数据存储到可移动介质上,还可以将此应用移动到另一计算机或另一群集,而无需计算机链接。

在图1b示出的实施例中,再分布应用执行再分布应用的部分再分布,即,通过其进程和联合这些进程的链接的仅仅一部分的副本,同时更新将它们与其他进程联合的链接。

当机能再分布应用接收到部分再分布命令时,其执行应用于待复制的进程的检查点状态,或标识应用于这些相同进程的、已存储的检查点。

对于待复制的每个进程(被称为原始进程PCA),机能再分布应用在节点SB中创建克隆进程PCA’,对该节点将再分布原始进程PCA。

基于此检查点状态,机能再分布应用执行克隆进程PCA’到建立检查点时的原始进程PCA的状态的恢复。此恢复还包括不同克隆进程之间的、在它们各自的原始进程之间存在的链接状态的恢复。如果原始进程PCA包括与还未被复制的另一进程PCB的链接,则将在该其他进程PCB和克隆进程PCA’之间创建并恢复相同状态下的链接。

为了使得再分布应用能继续正确地运作,机能再分布应用还将为克隆进程PCB创建由原始进程PCA使用的资源的全部或部分的虚拟化版本,或这些资源的拷贝。例如,这样的虚拟化可被应用于进程标识符(PID)、或文件描述符标识。

如有需要,则机能再分布应用将能够删除原始进程PCA,而不会中断再分布应用的机能的、或所提供服务的连续性。

这样的部分再分布尤其可被用来通过将某些进程移动到其他节点以便修改群集内的工作负载的分布(例如以便改善性能)而调整再分布应用的机能。例如,该工作负载可以是计算、或文件访问、或在群集内部或与外部世界的网络通信。部分再分布还可被用来释放节点、或群集内的通信线路,例如以便执行对构成其的硬件的介入。

图2更精确地示出管理上述机能的方法。

由控制器进程实现此方法,并将其应用于要被管理的进程、或目标进程,在其上,该方法执行用于注入程序指令的机制。在此图中,对于某些步骤或步骤组,以图形示出由讨论中的步骤执行的某些操作:垂直矩形代表包含由目标进程执行的指令的执行存储器ME,其右边的矩形组代表由该进程使用的工作寄存器R,并且其左边的三角形代表执行存储器内的进程的执行指针PE。

在示出的第一步骤201中,控制器进程控制目标进程,例如通过基于“ptrace”例程的“附加”(attach)命令。

在步骤202中,控制器进程中断目标进程的执行,并且在该目标进程的执行存储器中定义再归因(reattributed)区域SA、或“刮擦区域”(scratch area)。

然后,控制器进程执行(203)再归因区域SA的内容、执行指针PE的位置、以及工作寄存器R的状态的读取;并执行这些元件的初始状态的备份(204)。

控制器进程检查(205)再归因区域SA对执行后续操作是否足够大。如果不是这种情况,则其可执行(206)根据已知方法的该区域的寻址(映射),以便使其对应于目标进程的执行存储器ME外部给出的另一更大的存储器空间(被称为映射区域)。然后可由目标进程使用该映射区域替换并取代再归因区域。

然后(207),控制器进程向再归因区域SA内写入与将要被注入的程序指令相对应的代码IIJ,并在再归因区域SA的末尾写入断点指令。

然后(208),控制器进程可以在再归因区域SA中写入与必须使用指令IIJ的可选变元(argument)相对应的数据ARJ。

然后(209),控制器进程编辑工作寄存器R的状态,以向它们赋予与要被注入IIJ的指令的执行相对应的值RIJ。

然后(210),控制器进程会将执行指针PE设置到注入机制的第一指令IIJ上,并启动目标进程的执行。

然后,目标进程执行(211)注入机制的指令IIJ,例如执行对目标进程的资源结构的分析或修改的系统调用。根据其类型,注入机制的执行可接收所返回的数据,其将被存储在再归因区域SA中、或工作寄存器R中,例如,由操作系统返回的、对注入机制中包括的系统调用的响应。

当(212)执行指针PE到达先前写入(207)的断点指令时,再次中断目标进程,并重新调用控制器进程。

然后(213),控制器进程将以在再归因区域SA中和在工作寄存器R中读取的结果数据的形式,从注入机制的执行中收集结果,并且独立于目标进程执行环境而备份该结果数据。

然后(214),控制器进程使用先前备份(204)的初始状态数据,以便写入到再归因区域SA和工作寄存器R中,并将它们恢复到它们在初始中断(202)处所处的状态。

然后将执行存储器空间恢复到其在注入指令IIJ前所处的状态。由此,可将注入操作看作临时的或暂时的,这避免了污染(pollute)目标进程或使用其的应用。

然后(215),控制器进程可将执行指针PE重设到一开始应被继续执行的指令上,并重启目标进程。

一旦再次执行目标进程,就例如通过“分开”(detach)指令或命令,基于与“附加”命令相似的方式的“ptrace”例程,控制器进程从其控制中释放该进程。

图3示出根据本发明的管理机能的方法的使用,以由控制器进程执行对其执行环境的进程(被称为被捕捉进程)的状态的捕捉操作。

在示出的第一阶段301中,例如通过基于ptrace”例程的“附加”命令,控制器进程首先控制目标进程。然后控制器进程在此步骤期间中断被捕捉进程的执行,并中止其使用的资源的全部或部分。

接着的步骤302由以下组成:执行对被捕捉进程的操作环境的自省(introspection),以建立该执行环境的资源的列表(303)。控制器进程分析其具有访问权限的资源的结构。

这些资源的大部分可由控制器进程直接访问,例如通过伪文件系统指令“/proc”。

相应地,指令

“/proc/pid/fd”:为讨论中的进程(pid)提供当前打开的并由此将被备份的文件描述符(fd)的列表;

“/proc/pid/maps”:提供所用的存储器区段的构成和寻址。

一旦标识了(304)不能直接访问的资源,控制器进程就例如以系统调用(305)及其参数的列表的形式,建立要被注入到被捕捉进程的指令的列表,以访问这些资源。

在递归步骤306中,根据上述的管理机能的方法,控制器进程注入来自此列表的每个指令或指令组,并收集来自其的结果数据。通过该系统调用的注入,控制器进程获得代表不能直接访问的资源的结构的数据(307)。

为了由单个目标进程内的系统调用不能直接访问其结构的某些资源的自省,此步骤306通过系统指令的注入来执行多进程自省方法。此方法执行被用于数个目标进程的、多个相互协同注入操作。注入操作利用这些目标进程中的至少一个,在这样的资源中引入修改。然后将来自这些操作的结果相互比较,以获得用于经自省的资源的机能的方式(way)的信息。

根据通过直接自省(302)或通过系统调用的注入(306)获得的结构,控制器进程可捕捉(308)这些相同资源的内容,并对其进行备份(310),以构成检查点状态311,即,被捕捉进程的状态的映像。

相应地,指令

“/proc/pid/mem”使得能够以读取访问文件的形式读取存储器空间的内容;

“ptrace(PT_GETREGS,...)”使得能够访问工作寄存器。

然后控制器进程重启被捕捉进程的执行,并且例如通过“分开”命令,基于与“附加”命令相似的方式的“ptrace”例程,从其控制中释放该进程(312)。

如有必要,还可使用系统调用注入部分(306),以通过注入相应读取指令而获得某些资源的内容或状态。

作为用于POSIX环境的C语言的例子,以下显示在控制器进程PC1中使用的、以便控制(301)其标识符是“pid”(即,其值被包含在名为“pid”的变量中)的程序指令。

用于加载“ptrace”函数的指令:

#include<sys/ptrace.h>

执行此接管的“attach”(附加)函数的定义:

int attach(int pid)

{

         int status;

         /*takeover of a process by ptrace.The process

         *is defined by its process id

         */

         ptrace(PTRACE_ATTACH,pid,0,0);

        /*if the process is blocked,SIGSTOP is sent to us*/

        waitpid(pid,&status,0);

        if(WIFSTOPPED(status))/*STOP is in the signal template*/

        return OK;

        return ERROR;

}

作为用于POSIX环境的C语言的例子,以下显示执行意图捕捉指针的设置的指令注入的程序指令,该指针用于写入由被捕捉进程打开的文件的描述符。

在标识符是“pid”的进程中,用来注入与变元“argc”相关联的任何系统调用“syscall”的名为“ptrace_syscall”的函数的声明:

Int ptrace_syscall(pid_tpid,pid_t*tpid,int scratch,int syscall,int argc,...);

使用要被用于执行将系统调用“I_seek”注入其标识符是“p”的进程的“ptrace_syscall”函数的宏的定义:

#define PT_LSEEK(p,fd,off, w)\

ptrace_syscall(p,0,0,SYS_lseek,3,\

         0,0,fd,        \

         0,0,off,       \

         0,0,w)

在标识符是“pid”的进程中,在机能再分布应用中使用的、通过注入系统调用“Iseek”调用宏“PT_SEEK”以捕捉写入指针的设置、与参数“SEEK_CUP”匹配的函数的定义:

int get_file_pos(int pid,/*process id of the attached program*,

                 intfd)/*descriptor of the file opened by pid/*

{

        int_file_pos=PT_LSEEK(pid,fd,0,SEEK_CUR);

        return file_pos;

}

图5和图6示出被用于文件描述符的分析的多进程自省的方法的例子。当子进程(child process)使用从父进程(parent process)遗传的文件描述符时,两个进程(父和子)使用两个不同的描述符,但其都指向相同的文件或配有个单位置指针的数据容器。从而,这些是单个初始对象的两个不同实例,称为“共享”描述符,与“分离”描述符相对。现在,这可有助于备份与状态捕捉有关的这些文件描述符的类型,以在接着被从该捕捉恢复的进程内维持单一一致性。

然后使用自省的多进程方法,以确定由两个不同进程PA和PB使用的、且指向文件FA和FB的两个文件描述符FDA和FDB是分离的还是共享的描述符。

在步骤501中,控制器进程PC1将系统调用注入到第一目标进程PA中。该系统调用执行该第一目标进程PA的文件描述符FDA的读/写指针的设置的读取ptA0。

该控制器进程PC1将系统调用指令注入到第二目标进程PB中。在步骤502中,这些系统调用中的一个首先执行该第二目标进程PB的文件描述符FDB的读/写指针的设置的读取ptB0。

在步骤503中,这些系统调用的另一个,例如指令“Iseek”接着执行此相同指针的设置的修改。

在步骤504中,控制器进程PC1将系统调用注入到第一目标进程PA中。此系统调用执行该第一目标进程PA的文件描述符FDA的读/写指针的设置的新读取ptA1。

然后,在步骤505中,控制器进程PC1对通过两次读取第一描述符FD1的指针的设置而获得的值ptA0与ptA1进行比较。

如果这些值相等,则这意味着两个描述符FDA、FDB使用相同的指针,因而是共享描述符。然后,在步骤506中,控制器进程PC1存储代表此信息的数据。

然后,在步骤507中,控制器进程PC1将系统调用指令注入到两个目标进程的一个中,例如PB,以将指针返回到其初始设置ptB0。

如果这些值不同,则这意味着这两个描述符FDA、FDB不使用相同的指针,因而是分离描述符。然后,在步骤507中,控制器进程PC1存储代表此信息的数据。

然后,在步骤508中,控制器进程PC1将系统调用指令注入到第二目标进程PB中,以将其指针返回到初始设置ptB0。

在两种情况下,修改的指针都被返回到其初始设置,并因此,该方法对两个目标进程都是透明的。

图4示出由控制器进程根据本发明管理机能的方法的使用,以便执行更新或恢复进程(被称为重启进程)以及其执行环境的操作。

该图代表恢复操作,包括重启进程的创建的部分401、402、403。

控制器进程通过在其控制下(“分叉”(forking)技术)初始化(401)新进程(被称为重启进程)、然后通过在启动其执行前使用指令“ptrace(TRACEMEN,...)”来触发该创建。

然后,如传统冷引导那样,重启进程通过加载(402)各种资源来正常地引导。

在这一步骤,用于更新重启进程的状态的严格来说的方法开始,即可在现有的重启进程上使用的方法。

如果紧随着重启进程启动而执行该更新,则由于其启动方法,此重启进程在其加载后立即停止(404),并重新调用控制器进程。

如果在已有的重启进程上执行该更新,则通过控制(405)被捕捉进程(例如通过基于“ptrace”例程的“附加”指令),控制器进程开始。

然后控制器进程执行(406)先前备份的、且构成检查点的数据的选择和读取。根据该检查点的内容,控制器进程评价要在重启进程(在其被找到时)的执行环境中执行的结构和内容的修改,以使得其处于所选的检查点状态。

如果可以直接从控制器进程进行对结构的某些修改,则控制器进程通过其自身实现这一点(407)。

根据本发明的用于管理机能的方法,为了修改对其不能访问的结构,控制器进程准备系统调用的列表,将其注入(408)重启进程。

例如,使用该注入,以通过注入一个或多个“mmap”系统调用而修改所用的存储器区段的寻址或映射。相同的原则被用于必须被重新创建以达到与所选检查点状态相同的状态的系统资源的全部或部分。例如,这些系统资源是“文件”、“套接字”、“管线”、“定时器”、“终端控制”等类型的资源。

一旦资源结构适当,控制器进程就根据来自检查点状态的数据,执行(409)这些系统资源的写入,以使得重启进程处于被捕捉进程在所选检查点的建立期间所处的状态。

然后例如通过“分开”命令,基于与“附加”命令相似的方式的“ptrace”例程,控制器进程重启(410)重启进程的执行,并从其控制下释放(411)该进程。

如有必要,还可使用系统调用注入部分(408),以通过注入相应读取指令而写入某些资源的内容或状态。

因为这是从重启进程外部的进程操作的,所以,与必须由该重启进程本身之内提供的操作完成其的情况相比,该恢复操作相当简单且更有效。

例如以用于POSIX环境的C语言,下面示出执行意图恢复指针的设置的指令注入的程序指令,该指针用于写入由或为重启进程打开的文件的描述符。

这些指令使用与上面对捕捉操作所述的相同的“ptrace_syscall”函数以及“PT_SEEK”宏。

在标识符是“pid”的进程中,在机能再分布应用中使用的、通过注入系统调用“Iseek”调用宏“PT_SEEK”以恢复写入指针的设置、与参数“SEEK_SET”匹配的函数的定义:

int get_file_pos(int pid,

           intfd)

           int filepos)/*extract from the checkpoint*/

{

         return PT_LSEEK(pid,fd,filepos,SEEK_SET);

}

在应用包括很可能同时被执行的数个进程或任务的情况下,检查点的建立可能需要捕捉这些进程中的一些的状态。为此,对要被捕捉的进程外部的一个或多个控制器进程的使用是根据本发明的方法提供的优点。

在此情况下,机能再分布应用在多个被捕捉进程上执行根据本发明的捕捉操作,以同步或协同每个捕捉操作的初始中断(301)和讨论中的资源的中止。

在数个进程的捕捉期间,可能会发现在多个进程之间被传送的某些数据被“固定”在管理这些传送的进程间软件机制IPC内,例如在Unix类型的环境下的“进程间通信”软件对象。

为避免打乱将被备份的检查点状态的一致性,机能再分布应用使用根据本发明的用于管理机能的方法,以向每个中断进程中注入用于管理此传送中数据的系统调用。例如,这可以是从未结合在检查点期间捕捉进程状态的操作而处理的数据的IPC中清除队列(管线),或在进程更新的情况下恢复该相同的数据。

事实上,在捕捉数个相互通信的进程的状态的情形中,如果进程被中止以便被捕捉,则在进程间代理(agent)IPC内可能存在意图用于该中止进程的数据列队。一旦中断了所有要被捕捉的进程,则对要被捕捉的每个进程,捕捉操作还包括对所有通信数据或分组(针对其但还未被接收)的分析和存储。在由系统管理此进程间代理的系统中,例如在用于Unix情况的内核模块中,不必介入系统是有利的。由此,控制器进程PCI使用根据本发明的管理机能的方法,以向经历捕捉的进程中注入系统调用,该系统调用将请求读取此传送中的通信数据。然后控制器进程复原此数据,并在检查点状态内对其备份。

在恢复情形中,如果中止了所有的重启进程,则控制器进程PC2还使用根据本发明的管理进程,以向每个重启进程中注入系统调用,该系统调用将向进程间代理IPC中写入以检查点状态存储的、传送中的分组。

另外,如果应用包括数个进程,则这些进程中的一些可具有相互遗传的关系。换言之,可以从“父”进程创建“子”进程,并且通过该遗传关系而从其操作环境继承某些特性或资源,尤其是“文件描述符”类型。

在应用的进程的捕捉期间,控制器进程PC1将使用根据本发明的管理进程,已向每个被捕捉进程中注入系统调用,该系统调用将分析其与一个或多个其他进程之间的可能的遗传关系。然后将以经历构造的检查点状态备份这些分析的结果。

在这些相同进程的恢复期间,控制器进程PC1将使用根据本发明的管理进程,以向每个重启进程中注入系统调用,该系统调用将重新创建以检查点状态存储的相同的遗传关系。

当然,本发明不仅仅限于已经被描述的例子,并且可将多种修改应用于这些例子,而不会超出本发明的范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号