首页> 中国专利> 对用于录入和重放确定性事件序列的指令进行计数的方法

对用于录入和重放确定性事件序列的指令进行计数的方法

摘要

本发明涉及一种用于对在一个或者多个计算机处理器中、特别是在具有并行架构的多处理器系统中执行的任务的运行进行监视和管理的透明和非入侵式方法。本发明提出一种用于在计算机处理器中在计算机系统内在称为活动时段(SchJ,SchR)的给定执行时段期间管理称为目标任务的计算机任务的系统和方法,该计算机处理器具有监视或者估计性能的装置并且包括具有加上或者减去称为相对误差的给定可能误差的计数器(PMC),这一过程包括:在一方面使用所述计数器来评估直至所述活动时段的至少一个给定点所执行的指令的数目(NR,NJ);以及在另一方面生成从处理器或者计算机系统的状态中读取或者计算的并且与所述活动时段的至少一个给定点相对应的称为签名(SGJ,SGR)的数据。

著录项

  • 公开/公告号CN101103338A

    专利类型发明专利

  • 公开/公告日2008-01-09

    原文格式PDF

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

    申请/专利号CN200680002251.7

  • 发明设计人 M·韦尔特;

    申请日2006-01-24

  • 分类号G06F11/34;

  • 代理机构北京市金杜律师事务所;

  • 代理人朱海波

  • 地址 美国纽约阿芒克

  • 入库时间 2023-12-17 19:32:51

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2020-01-10

    未缴年费专利权终止 IPC(主分类):G06F11/34 授权公告日:20111123 终止日期:20190124 申请日:20060124

    专利权的终止

  • 2011-11-23

    授权

    授权

  • 2008-02-27

    实质审查的生效

    实质审查的生效

  • 2008-01-09

    公开

    公开

说明书

技术领域

本发明涉及一种用于对在一个或者多个计算机处理器中、特别是在具有并行架构的多处理器系统中执行的任务的运行进行监视和管理的透明和非侵入式方法。本发明具体地应用于在网络中执行的多任务事务应用的各种任务。这一管理特别地实现以录入数据的形式来记录这些任务的运行以及根据这样的录入数据重放这一运行以便呈现与在录入的同时获得的行为和结果相对应的行为和结果。

本发明也涉及一种系统,该系统在它执行的对软件应用的运作管理中实施这样的方法。

背景技术

实施就受管理的应用而言是非侵入式和透明的运作管理是很有用的,特别是对于实现在多个现存应用的原状态下(“旧应用”)以更多的灵活性或者可靠性或者性能来使用它们更是如此。

与本申请同一的申请人已经在专利申请FR 04 07180中提出通过中间捕获以及通过在同步点或者重启点(“检查点”)恢复应用的状态来进行非入侵式运作管理的技术。以补充的方式,相同申请人已经具体地在专利申请FR 05 00605至FR 05 00613中提出非入侵式录入和重放技术。

然而,一个或者多个事件的录入对于所录入的应用或者执行它的系统而言仍然代表工作开销,并且尽可能最小化工作开销非常引人关注。

在构成应用执行的事件之中,相对于应用的状态具有非确定性行为的事件必须通过在录入数据中存储它们的结果来录入和重放,以便在以后重放过程中实现这一结果的强制或者再注入。因此关注于尽可能减少必须被视为非确定性的事件的数目。

在应用外部或者在执行它的系统外部的事件常常具有本质上非确定性的行为,并且一般而言必须加以存储,例如在前文引用的申请中描述的那样。

比较而言,内部事件最经常地具有确定性行为并且也构成在应用的运行中执行的大多数操作。因此关注于对非确定性事件、特别是内部的非确定性事件的录入进行聚集和优化。

如果来自一部分运行的所有事件都是确定性的,则可以简单地通过例如以重启点的形式存储应用的开始状态,以经济的方式录入全部这一部分。然后例如通过将应用恢复到如存储的重启点状态中以及通过起动这些确定性事件的执行来获得重放。于是可以使用术语“逐件确定性执行模型”,该模型包括仅由确定性事件组成的确定性部分的分组。确定性部分的边界由此一般由非确定性事件构成,例如以一个外部消息的到达开始而以另一非确定性事件结束。

发明内容

本发明的一个目的在于简化或者优化这样的确定性部分的录入和重放。

另外,某些类型的计算机架构可以包括有时继承于它们自有性质的非确定性起因,特别是并行架构系统,有时限定为物理并行或者实际并行。

本发明的另一目的因此在于有助于或者优化录入和重放功能的实施以及特别是针对多任务应用在并行环境内减少非确定性的起因。

在冗余架构中的运作管理的背景下,本发明的另一目的于是在于使在并行环境中执行的多任务应用的运作可靠化。

确定性部分按照它的性质将在它始于同一情形并且执行相同指令时总是给出同一结果。为了录入和重放这样的确定性部分,因此有可能仅存储和恢复开始情形并且在数目与这一部分的长度相对应的指令过程中根据同一可执行文件发生执行。

然而,如果在原应用中没有设想到这一点,则对执行的指令进行计数的实施方式对于执行这些指令的一个或者多个机器而言代表了大量工作负荷。对于已知技术,这样的超负荷常常不可接受或者将这样的实施限于实验情形并且在开发利用情形下几乎无用。

本发明的一个目的在于克服这些不足中的所有或者一些不足。

为此,本发明提出一种用于在计算机处理器中在计算机系统内在称为活动时段的给定执行时段期间管理称为目标任务的计算机任务,该计算机处理器具有监视或者估计性能的装置,这些装置包括具有加上或者减去称为相对误差的给定可能误差的计数器。

这一方法包括:在一方面使用所述计数器来评估直至所述活动时段的至少一个给定点所执行的指令的数目;以及在另一方面生成从处理器或者计算机系统的状态中读取或者计算的并且与所述活动时段的至少一个给定点相对应的称为签名的数据。

有利地,对于从受管理的时段的开始起执行的指令的数目的评估结合所述计数器(PMC)而使用了至少一个系统调用指令作为同步障。

这一方法对于在由两个非确定性操作之间的一连串确定性操作组成的活动时段期间管理任务特别地有用。

本发明由此提出了管理在称为录入处理器的处理器中录入的任务,并且包括存储与称为录入时段的所述任务的这一活动时段相对应的录入数据。这样的录入数据于是包括所执行指令的数目的至少一个假设值以及与所述录入时段的结束相对应的称为录入签名的签名。

由此有可能通过在称为处理器日志的至少一个文件中以有序的方式存储录入数据来录入处理器的使用,所述录入数据代表了来自在所述处理器中执行的多个任务的一连串活动时段的录入,并且包括针对这些时段中各时段的标识所执行任务的数据项。

根据这样的录入数据,本发明也提出了从与录入处理器或者录入系统在录入时段开始时的状态相对应的状态开始,通过在重放计算机系统内管理由称为重放处理器的处理器执行的称为重放任务的任务来重放录入时段。所述方法于是也包括:

-受监视的执行阶段,从重放时段的开始起执行计数器所评估的数目的指令,该数目小于或者等于录入时段的指令数目的假设值减去所述计数器的相对误差;

-确认阶段,包括如下步骤的重复:

-在重放中的给定点处中断重放任务的执行;

-在录入签名和与重放中断点相对应的签名之间进行比较测试。

具体而言,录入签名包括称为录入指针的数据,该数据代表了在录入时段结束时录入任务的指令指针的值。该方法于是也包括在与录入指针数据相对应的重放指令上设置断点。

根据本发明,对重放任务的执行的监视特别地包括计数器的溢出,该计数器被预先初始化以便确定必须从重放时段的开始起执行的指令的数目,并且该计数器的溢出引起了重放任务的中断。

然而,由于没有针对这样的确切使用而设想这一类计数器,所以这样的中断可能在计数器溢出之后以某一延迟而出现。

本发明因此提出了以某一裕度在重放时段开始时初始化计数器以便足够早地溢出,从而在计数器的溢出与已经引起该溢出的任务的中断之间存在延时时段的情况下,重放任务所执行的指令的数目小于或者等于录入时段的指令数目的假设值减去所述计数器的相对误差。

另外,作为一种安全措施,确认阶段可以包括安全步骤:如果重放指令的数目超过录入指令的数目的假设值加上给定的指令数目则发送错误信号。

根据代表以这一方式录入的数个时段的日志,本发明可以由此在称为重放处理器的处理器中实现通过使用来自在所述录入处理器中录入的一连串活动时段的有序录入数据集来重放对录入处理器的使用。

本发明也提供了对与多个录入任务所访问的称为目标资源的共享资源有关的一连串归属独占性访问的录入,这一方法也发送或者存储称为资源日志的至少一个文件。这一资源日志由此包括代表了已经获得这些独占性访问的各不同连续任务的标识的录入数据。

从这些技术出发,本发明提出了管理在系统软件内至少两个应用任务的运作,该系统软件通过顺序激活来管理所述任务在具有并行结构的计算机系统中的执行,该并行结构包括能够在至少两个算术单元中同时执行数个应用任务的计算装置。对于访问至少一个共享资源的这样的应用任务,该方法在一个方面包括如下步骤:

-在第一算术单元中录入这些任务中的一个任务或者其它任务的第一串激活时段;以及

-在第二算术单元中录入这些任务中的一个任务或者其它任务的第二串激活时段;

-以及录入响应于对访问所述目标资源的请求而把对所述目标资源的称为独占性访问的访问一连串地归属到所述任务之中的所谓访问任务,即这样的归属排除了在紧接于所述访问请求之后的所述访问任务的激活时段的整个其余时段期间这些任务中的另一任务对所述目标资源的任何访问。

在另一方面,该方法也包括:在称为重放串行的有序结构中将代表了各算术单元中多个一连串激活时段的录入数据与代表了一连串归属独占性访问的录入数据相组合。安排这一组合是为了维持各任务内一连串激活任务相对于所述共享资源而言的次序。

根据本发明,可以在用于重放录入任务的录入运行的重放计算机系统中使用重放串行数据。

另外,该方法可以包括在重放计算机系统内虚拟化可由录入任务在录入期间访问的软件资源中的所有或者部分软件资源。

根据本发明的方法特别地实现了对于包括至少两个任务的录入应用的运作的称为活动复制的复制,该至少两个任务在具有计算机网络的并行结构的称为主要节点的至少一个节点上执行并且访问至少一个共享资源。这一复制包括在重放系统上的至少一个重放应用中重放源自于录入数据的重放串行,该录入数据在被生成时从主要节点被立即发送到第二节点。

在一个实施例中,本发明然后可以使包括至少两个任务的应用可靠化(reliabilization),该至少两个任务在具有计算机网络的并行结构的称为主要节点的至少一个节点上执行并且访问至少一个共享资源。这一可靠化由此也包括将服务从主要节点切换到在主要节点内检测到故障或者给定事件时启动的取代主要节点的至少一个辅节点。

在另一实施例中,本发明也可以实现通过在至少一个辅节点上执行在主要节点上执行的目标应用的活动副本来平衡或者调节计算机网络内的工作负荷。这一负荷平衡由此包括将受管理的目标应用所提供的所有或者部分服务切换到活动副本。

因此,根据本发明的方法可以实施于计算机网络的至少一个节点内,该计算机网络例如是构成了通过中间件型的一个或者多个运作管理应用来管理的集群的网络。该方法由此特别地通过指令序列的录入和重放来实现扩展或者优化这一运作管理的性能和功能。

在同一背景下,本发明也提出一种应用于并行类型的或者构成并行系统的一个或者多个计算机系统并且可能用于网络中的实施该方法的系统。

附图说明

本发明的其它特征和优点将从不以任何方式具有限制性的具体实施例以及附图中变得明显,在附图中:

-图1和图2根据本发明图示了通过对处理器内的任务进行计数来录入对任务执行的调度;

-图3和图4根据本发明图示了通过对处理器中的指令进行计数来重放任务的活动时段;

-图5根据本发明图示了从通过对指令进行计数而进行的对处理器中任务调度的录入中获得的在单处理器系统中多任务应用的确定性重放;

-图6是根据现有技术对于在来自单一环境的两个不同处理器所并行执行的两个任务之间共享的存储器的访问的运作;

-图7根据本发明图示了在任务内创建和维护如下结构,该结构实现了控制对于在来自单一环境的数个不同处理器上并行执行的多个任务之间共享的存储器页面的访问;

-图8根据本发明图示了对于在来自单一环境的两个不同处理器上并行执行的两个任务之间共享的存储器页面的访问的控制的运作;

-图9根据本发明图示了在多处理器计算机上多任务应用的录入以及它在单处理器机器上的立即重放。

具体实施方式

这里描述的技术对应于使用在PC型计算机中所用类型的处理器的某些特征的本发明实施例,这些处理器例如是AMD公司的Athlon型处理器或者Intel公司的Pentium处理器。例如在工作站中使用的其它当前的处理器或者将来的处理器理所当然可以呈现这些特征或者相似特征中的所有或者一些特征并且可以用来实现本发明。

图1至图2呈现了一种用于录入单个μProX处理器或者算术单元连续执行的确定性内部事件的不同部分的技术。

如图1中所示,不同任务TA和TV可以由称为激活时段Sch1至Sch3的部分来执行,这些激活时段由形成系统代理中如下部分的调度器SCH连续地起动,该部分称为上下文管理器并且管理这些交替或者交织。

在计算机系统或者处理器内执行的不同任务之间,一些任务可能是应用中人们寻求管理的一部分并且将被限定为“受监视的”任务。这些任务通过任务描述符内在这里称为管理位MmA或者MmB(见图7)的通常未用的数据位的状态(设置为1)来标识。受监视的任务以及未受监视的其它任务可以于在处理器中执行的一连串激活时段内交替。

对于在图2中标记以字母“m”的受监视的任务TA和TB而言,选择激活时段使得它们仅由确定性事件组成。这些确定性时段通过一个或者多个录入软件代理来定义。这一录入代理可以包括作为运作管理应用的任务的、在计算机系统的用户存储器空间中执行的单元。这一录入代理也可以包括或者使用在系统软件内、例如在调度器内修改或者添加的单元。

由于应用的事件中的多数是内部事件,并且它们之中的许多事件是确定性的,所以各个受管理的任务中的大部分由确定性事件组成。每当出现非确定性事件,录入代理就关闭确定性时段。非确定性事件然后可能以未受监视的任务的形式来加以执行,并且根据已知方法利用它的结果来加以录入。在完成这一非确定性事件时,录入代理定义新的确定性部分的开始并且再次起动对指令的计数。

非确定性事件的录入以及可能的处理是在确定性激活时段以外进行的,或者是例如在内核模式Klv下的执行时段K1或者K2中、即在相对于用于用户模式UIv的值3而言处理器特许模式处于值0的时候进行的。

为了能够以与录入时的方式相同的方式重放各激活时段,本发明在录入时执行对于在这一确定性部分期间执行的指令的计数。由此,在以后重放RSCH(见图3和图4)这些任务期间,只需从与录入时的状态相同的状态起动这一录入部分以便它自行执行数目总计与在录入时由此同一部分执行并且针对此同一任务的指令的数目准确对应的重放指令。因此进行这一重放而不会有任何干预强加于确定性部分内的结果,因为该确定性部分仅含确定性事件。

当确定性部分延展到调度器所建立的多个激活时段时,这些激活时段各包括这一确定性部分的一部分,这些部分可以作为完整的确定性部分来自行处理。在其余描述中,将仅描述确定性激活时段的录入,但是不言而喻,许多确定性激活时段可以一个接一个地在单个确定性部分之内。

根据本发明,对确定性激活时段的指令的这一计数使用了性能和监视计数器,该计数器目前是很多处理器中的现有硬件特征,例如自Intel公司的Pentium家族的Pentium 2之后。提供这一性能和监视计数器是为了在持续时间中或者在多个事件中测量处理器的运作,并且该计数器主要用来测量性能,例如以便通过对它的值的定期采样来进行对应用简档(profile)的统计分析。处理器制造商也指明这些性能计数器没有受保障的准确度并且必须用于相对或者差分测量以求应用的优化。

与能够出于性能原因而使某些指令预先执行的各种推测性或者高速缓存技术无关地,本发明提出使用这一性能计数器PMC的特征之一,也就是对于称为退役(retired)指令的指令的计数,即这些指令被解析或者已经离开待执行的指令列表。

然而,对退役指令的这一计数呈现出在Intel和AMD公司的文档中描述的某些限制性特征。这些特征之一是用于这一计数器的读指令(“RDPWC”)没有直接结合于待解析的指令中,这对于与本发明有联系的对这一计数器的使用没有直接影响。

另一方面,两个其它限制性特征可能引起用于录入和重放的指令计数的不准确性并且应当加以考虑。

能够构成障碍的第四特征是如下事实:计数器溢出所引起的执行中断可能在已经造成这一溢出的指令之后以某一延迟出现。

这些不准确性限制在一方面涉及到某些复杂指令如果在解析之前被中断则可能对该指令计数两次的情况,而在另一方面涉及到具有可能造成指令无法计数的硬件中断的指令。为了克服这一不准确性,本发明使用一种实现消除与激活时段的结束的准确确定有关的不确定度的补充确认技术。

如图1中所示,在日志文件JμProX中录入和记录在μProX处理器中执行的一连串确定性激活时段Sch1、Sch2和Sch3。

在处理器正在执行受监视的任务TA的录入激活时段Sch3期间,计数器PMC的值UICX的一个或者多个读数RDPMC供应退役指令的数目NJ3。在这一时段Sch3的挂起(结束Sch3)时,录入代理JSCH使用任务TA及其上下文的状态所输出的一项或者多项状态数据,以便计算以基本上单义的方式代表这一状态的一项或者多项数据,从而去除可能存在的与在这一激活时段Sch3期间执行的指令的准确数目有关的不确定度。这一状态数据构成与这一时段结束(结束Sch3)相对应的签名SG3。这一签名特别地包括紧接在这一时段的最后指令之后的指令指针的准确值IPJX3,即最后执行的程序指令在任务TA的可执行文件内的位置的准确标识。这一签名也包括根据来自在这一挂起(结束Sch3)时任务TA的上下文的寄存器RegJX3和调用栈PileJX3中读取的值而计算的控制数据(“校验和(checksum)”)。

对于各录入时段SchJ(图3),这一处理器的日志JμProX由此包括特别地与下述内容相关联的行:

-在这一时段中执行的任务TJ的标识idJ,例如这一任务的“PID”;

-计数器PMC所发送的撤消(withdraw)指令NJ的数目的值;

-为这一时段的结束而计算的签名SGJ。

由此,对于图1中所示的一连串任务,首先TA、然后TB、然后TA,处理器μProX的日志JμProX包括如下连续行:

″idA:NJ3:SG3

  idB:NJ2:SG2

  idA:NJ1:SG1″

如图2中所示,在给定μProX处理器内录入应用APPJ的一连串不同录入任务也可以由录入代理JSCH初始地传输到FIFO(“先入先出”)型的录入队列QJμProX。通过一个存储任务的日志TJμProX来读取在这一队列的输出处的录入行,这启动了要么通过本地MEM要么通过传输TRANS到另一节点或者备份站或者外设在这一处理器的日志JμProX中以有序的方式存储这些行。这种录入队列的使用特别地充当缓存器区以便调节录入数据的流量以及避免干扰被录入的应用或者进行这一录入的应用。

这一益处在如下全局架构的情况下特别地明显,在该全局架构中立即将录入数据如它出现的那样传输到例如在备用机器上重放同一运行的另一应用以便进行具有容错性和服务连续性的运作。

在这一计数技术中使用系统调用指令作为用于指令计数的同步点可能是有利的。因此这涉及到实施系统调用例程使得它们递增系统调用计数器。硬件计数器PMC对指令的计数因此可以作用于保持较低的值,这改进了它的性能。

图3和图4呈现了一种录入时段SchJ的在重放处理器μProZ中的重放技术。图3代表在处理器内的被重放任务TR的最近状态TR至TR4。图4代表用来实施这样的重放的方法的流程图。视实施例或者使用参数而定,也可以根据与用于不同重放处理器的原理相同的原理,在与例如用于应用跟踪类型的运作管理的录入处理器相同的处理器中完成重放。

例如,在这样的重放过程中,作为由可能加以修改以便包括重放代理RSCH的调度器SCH所调度的激活时段,所讨论的任务TJ利用它在所提及的处理器中的上下文来加以恢复,然后释放这一任务(41)并且起动它的执行。

为了能够在与完成录入的计算机系统不同的重放计算机系统中加以恢复和执行,任务或者应用所能访问的所有或者部分资源必须被虚拟化(即例如以虚拟方式被实例化或者被重建),以便针对重放的应用以与在录入时相同的方式来表现。一般涉及到的项是用于线程或者进程的任务标识符TIP或者PID以及应用所访问的并且视主机系统而定的大部分资源。这一虚拟化在重放任务或者应用开始时加以执行,并且根据在录入过程中存储的数据在重放过程中加以修改以便以与在录入过程中相同的方式改变。

有利地,在内核模式下完成这一虚拟化,这特别地实现了避免它的操作在性能计数器PMC对指令进行计数时被纳入考虑之中。

Intel公司的文档规定了归因于硬件中断的误差限于加上或者减去一个指令的相对误差。对于包括至多一个单硬件中断(即造成它的关闭的中断)的录入确定性时段而言,监视需要将计数器PMC的下述两个值纳入考虑之中:在重放时段开始时的值和在监视点处的值。最大相对误差因此是加上或者减去两个指令。

在用于重放录入任务TJ的重放任务TR的整个执行中,重放代理RSCH监视通过读取RDPMC进行重放的处理器μProZ的计数器PMC并且比较这一读数和与这一录入任务TJ相对应的录入数据IdJ、NJ、SGJ来监视退役指令的数目。安排这一监视是为了一旦达到其在这一重放执行中的顺序值等于NJ-2的指令就中断重放任务TR的执行。例如通过在预期值对计数器PMC的溢出进行编程来完成这一中断。

由于上文引用的第四限制性特征,可以通过以某一裕度对溢出进行编程(41,图4)来补偿在溢出与中断之间存在的延时,以便确信在预期值NJ-2之前产生中断。这一裕度取决于实验并且可以例如是50个指令的级别。

因此在NJ-50与NJ-20之间的指令数目时中断重放时段SchR的初始执行。重放代理RSCH然后在与签名SGJ中存储的指令指针的值IPJ相对应的程序指令BKI上在重放任务TR的可执行文件内设置(42)执行断点BK。然后重新起动执行直至被这一断点BK中断(43),继续测试(44)来自计数器PMC的指令的数目,直至重放指令的数目大于或者等于录入指令的数目减去两个指令,即NR=NJ-2。

录入时段SchJ的实际结束的准确位置由此位于具有相应顺序值NJ-1至NJ+2的四次后续单位指令执行Instr0至Instr3中,即处于在相较于这一同一时段SchJ的假设结束的位置NJ而言减去二与加上二之间包含的相对位置。

确认阶段40(图4)然后实现通过在签名SGJ与根据重放任务TR在后续单位指令执行Instr1至Instr4之后的状态TR1至TR4以同一方式计算的值SG1至SG4(图3)之间的比较来确定这一实际位置。

在这一确认阶段开始时,重放代理检查(45)根据重放任务TR紧接在先前监视所引起的中断之后的状态而计算的重放签名SGR的值SG0。

根据本发明,如果SGJ和SG0不对应,则任务TR的执行被重新起动并且在这一断点指令BKI的第一次新的执行TR2上停止(46)。

然而关于这一新的停止位置TR2可能有不确定度,例如录入任务TJ在被挂起之前是否已经通过数次执行这一断点指令BKI来进行很短的循环。在这一断点指令BKI上的执行的各间断TR2、TR4处,重放代理再次验证(47)签名SGJ和SGR的匹配并且重新起动执行直至获得这一匹配。当签名对应时(在本例中SGJ=SG4),意味着断点指令BKI的最后执行Instr4对应于在录入时段SchJ中录入的最后操作。重放代理然后关闭(48)重放时段SchR。

本发明也设想一种安全机制,例如测试49,该测试中断重放TR并且在某一数目的具体指令执行之后(例如在八次单位指令执行结束时)返回(401)重放错误以便避免在错误的情况下无限循环。

为了例如在与录入应用APPJ相对应的重放应用APPR(图5)的重放时重放多个录入时段,重放代理RSCH连续地读取日志JμProX的不同行并且使用这些行中的各行以便重放与有关行相对应的激活时段。

如图5中所示,通过在重放处理器μProZ中执行的日志读取任务TμProZ直接接收TRANS或者本地读取MEM这一日志JμProX的不同行。

这一日志JμProX中各自与录入时段相对应的所有行然后以它们被录入的次序而被传输到FIFO型的重放队列QJμProZ。在这一队列的输出处,重放代理RSCH使用这些日志行中的各行以使它所代表的时段由与录入任务TA、TB和TC相对应的重放任务TA’、TB’和TC’加以重放。

为了进行这些时段在重放处理器μProZ内的调度,重放代理RSCH在无语义变化的情况下与调度器SCH在标准系统软件中存在时一样地使用它的运作。这一方面特别地实现了维持与在同一处理器中执行的其它TNM’任务的兼容性。为了获得与在录入的同时相同的调度而不干扰调度器SCH的正常运作,重放代理RSCH仅要求阻止(55b,55c)各重放任务TB’、TB’的释放,只要它们的标识符TID或者PID不对应于在它必须获得其重放的行中存储的标识符idA。

正如在上文引用的申请中描述的那样,用于确定性时段的录入和重放的这些技术实现了优化运作管理应用在一个或者多个单处理器计算机内的性能和功能性。

在比如多处理器计算机或者包括并行工作的多个计算机的网络这样的并行架构情况下,使用可由多个任务访问的共享资源增添了非确定性起因,该起因可能是在这一运作管理的背景下显著性能损失的起源或者甚至是无法实施某些重要和有用功能的起源。

为了去除所有或者一些这些非确定性起因,本发明提出一种如下方法,该方法实现了管理或者控制对共享资源、特别是直接访问资源的访问,使得各任务可以在它被系统激活的整个时段都获得对共享资源的独占性访问。

在图6中图示了并行多处理器环境的运作例子,该环境在例如Linux型系统这样的多处理器环境下包括第一处理器μProX和第二处理器μProY。这两个处理器各自可以在单个工作存储器空间RAM内分别并行执行任务TA和TB,并且通过调度器来加以协调。在各任务TA和TB的激活时段期间,将在处理器μProX、μProY中执行来自它的程序EXEA、EXEB的指令序列SchA、SchB。在来自这一序列的指令InstrA、InstrB的执行过程中,处理器将能够使用在它内部的资源,比如寄存器RegA、RegB、栈PilA、PilB。

在工作存储器RAM内数个共享存储器区ShMPi至ShMPk例如按照“映射”型指令来定义并且直接按照它们的物理地址可由不同任务TA和TB访问。

图6图示了现有技术的如下情形,在该情形中任务TA和TB在公共时段被并行执行并且各自包括请求对单个共享存储器区ShMPi进行访问的指令InstrA和InstrB。这两个访问请求将由各处理器的存储器管理器单元MMU以独立方式加以处理(11,13)并且将彼此独立地到达(12,14)这一共享存储器区。

对于仅可从某些系统调用型指令来访问的资源,有可能实施进行这些指令的系统例程,即修改这些例程或者把截获这些系统调用或者对这些系统调用做出反应的单元插入到系统中。在通过录入和重放所进行的运作管理背景下,这一实施可以特别地实现对它们行为的记录以便能够以后相同地重放或者修改这一行为使得它变得具确定性并且无需加以记录。

反言之,对于无需系统调用、因此潜在地从任何程序指令可直接访问的资源,大多数操作系统、特别是Unix或者Linux型操作系统不能实现控制这些访问到达这一共享存储器区ShMPi的级别。

为了解决这一问题,如图7和图8中所示,本发明提出修改某些系统软件单元的代码或者添加某些其它代码以便修改或者拓展当前用于其它功能的某些现存硬件功能。

具体而言,有可能通过修改Unix或者Linux型系统软件的少量单元而不修改当前处理器的硬件特征来解决这一问题。因此有可能使用普通型的因此既经济又经良好证实的机器以便通过为现存系统软件带来增添功能性而无损于它们的向上兼容性的少许修改来执行和管理略有修改或者未经修改的多任务应用。

本发明为此使用在许多新近微处理器中存在的某些机制,这些微处理器比如是在PC型的架构中使用的处理器,例如Intel公司的Pentium处理器或者AMD公司的Athlon处理器。特别是自Pentium 2起的这些处理器在它们的存储器管理单元内集成了虚拟存储器管理机制。使用这一机制是为了将工作存储器中定义的某些页面在它们不被使用时“卸载”到硬盘上并且将它们存储于此以便释放物理存储器内的对应空间。对于当前运行的应用,在工作存储器中仍然列出这些页面,但是必须从硬盘到该物理存储器中再次“加载”它们以便任务能够实际访问该页面。

为了管理这一虚拟存储器,如图8中所示,系统软件包括虚拟存储器管理器VMM,该VMM针对可虚拟化存储器的各页面在各不同应用进程中创建页面表条目(“P.T.E.”)。由此,对于各自以进程形式来执行的、即具有专属于它的执行上下文的两个任务TA和TB,页面ShMPi至ShMPk将各自获得在任务TA的进程中的页面表条目PTEiA至PTEkA以及在任务TB的进程中的页面条目表PTEiB至PTEkB。

虚拟存储器管理器VMM包括页面加载器软件PL,该PL加载和卸载存储器页面到硬盘上的“交换”文件中,例如在Microsoft公司的Windows系统中具有扩展名“.swp”的文件。在ShMPi页面的每次加载或者卸载过程中,它在物理存储器中的存在或者不存在状态由VMM管理器存储和维护(30)于与它相对应的各页面表条目PTEiA和PTEiB中。在这些表PTEiA和PTEiB中,这一存在状态分别以数据位PriA和PriB的形式来存储,值为1表示存在而值为0表示不存在。

在各处理器μProX和μProY内,存储器管理器MMUX或者MMUY包括页面故障中断机制PFIntX或者PFIntY,通过该机制来传递源自于所执行的程序指令InstrA或者InstrB的任何访问请求。如果来自由处理器μProX的任务TA的指令InstrA请求(33)与存储器页面ShMPi有关的访问,则处理器的中断机制PFIntX通过读取这一页面在对应条目表PTEiA中的存在位PriA的值来验证该页面是否存在于物理存储器RAM中。

如果这一位PriA指示了页面的存在,则中断机制PFIntX批准访问。在相反情况下,中断机制PFINtA中断任务TA的执行并且将错误参数发送到在系统软件的虚拟存储器管理器VMM中包含的“页面故障处理器”软件代理PFH。这一故障处理器PFH然后被执行并且管理这一错误在系统软件和相对应用内的结果。

图7图示了如何修改和改变或者转换这些现存机制以便根据本发明管理对共享资源的访问。

为了管理来自在这样的并行环境下执行的应用APP的这些访问,如图7中所示,起动器软件LCH被用来起动这一应用例如在Unix或者Linux型的系统中的执行。在应用APP的起动时,以如下进程的形式利用第一任务TA来创建该应用APP,该进程包括执行“线程”ThrA1并且使用形成任务描述符TDA的数据表。

在这一任务描述符TDA内,起动器存储(21)如下事实:必须通过将通常未用数据位(这里称为管理位MmA)的状态修改成1来管理或者“监视”这一任务TA。

在形成页面存储器结构PMStrA的数据表中在任务TA内列出在这里限定为共享存储器页面ShMPi、ShMPj和ShMPk的在工作存储器中的不同共享存储器区。在这一结构PMStrA中,以页面表条目PTEiA1至PTEkA1的形式来描述和更新共享页面,其中各条目并入有如前所述由虚拟存储器管理器VMM使用的数据位PriA1至PrKA1。通常,这一页面结构PMStrA与任务TA同时被创建,并且通过确保共享存储器中任何变化的不同系统例程(比如“映射”型的例程)随同这些变化一起被更新(20)。

在受管理的应用APP的执行过程中,可以通过来自这一第一任务TA或者来自以相同方式创建的其它任务的“创建”型指令CRE来创建其它任务。任何新创建的任务TB也可以包括线程TrB1和任务描述符TB以及页面存储器结构PMStrB。通过源于它的父任务的继承关系INH,新页面存储器结构PMStrB也包括以相同方式维持最新的不同页面表条目PTEiB1至PTEkB1,这些条目具有它们的存在位PriB1至PrkB1。

在从受监视的任务TA创建CRE新任务TB时,新任务描述符TDB也包括管理位MmB,该管理位的值是从来自父任务的管理位MmA的值继承INH的。

在受管理的应用APP的执行过程中,可以在起初以具有单个线程THrB1的进程的形式来运作的任务TB内创建其它线程。

在现存的受监视的任务TB内,通过系统调用如“克隆”指令来创建任何新线程ThrB2。通常,形式为多线程进程的任务在它的页面结构PMStrB内仅包括一组条目表PTEiB1至PTEkB1。根据本发明,能够创建新线程的任何系统例程如“克隆”系统调用的运作例如通过在它之中结合一个补充部分CSUP来加以修改。这一修改被设计为使得在现存任务TB中创建任何新线程ThrB2都包括读取(22)现存的一组表PTEiB1至PTEkB1以及创建(23)与相同共享页面ShMPI至ShMPk相对应并且针对新线程ThrB2来运作的新的一组页面表条目PTEiB2至PTEkB2。正如在相同申请人的专利FR 2 820 221中描述的那样,这一修改例如可以通过在系统内加载共享库而使用动态插入技术实施这些例程CLONE来完成。

以如下方式来完成这一创建,该方式确保了新表PTEiB2至PTEkB2以与它们的父表PTEiB1至PTEkB1相似的方式也维持为最新(24,25),这或者通过对它们进行登记以便将它们更新到管理这一更新的系统例程MAP中来完成,或者例如也通过在这些系统例程MAP中结合补充部分MSUP而实施这些系统例程来完成。

图8图示了使用这一结构的访问管理的运作,其中该结构被应用于包括在两个处理器μProX和μProY中并行执行的两个单线程任务TA和TB的例子。应当注意,将页面表条目PTE的结构扩展到在各任务内克隆的各线程ThrB2也实现了以同一方式管理来自属于受监视的任务的所有线程的任何访问,无论这些任务是单线程的还是多线程的。

在这里描述的实施例中,安排根据本发明的访问管理是为了就进程TA或者TB而言以及就各线程ThrB 1或者ThrB2而言向各任务保证其对共享存储器页面的访问在激活时段的整个持续时间内都是独占性的,其中在该激活时段期间共享存储器页面的连贯性(或者一致性)由系统软件保证。这样的时段在这里被描述为由系统软件的调度器SCH分配和管理的激活时段。不言而喻可以在同一精神下选择其它类型的连贯时段。

另外,在这里以定义为具体存储器区或者存储器页面的共享存储器的形式来描述所受访问被管理或者被控制的共享资源。同一概念也可以借助与资源相对应的系统例程的相似实施而应用于其它类型的资源。

本发明的实施可以包括修改系统软件的某些单元,使得它们如下文描述的那样运作。必要的修改级别当然可以视系统软件的类型或者版本而变化。在Linux型系统的情况下,这些修改一般包括如先前描述的“克隆”和“映射”型例程的实施以及在产生调度器SCH、页面故障处理器PFH和页面加载器PL的代理内的修改和代码添加。有待加以修改以产生这里所述的访问控制类型的系统功能性可以有利地构成相较于标准系统的功能性而言的纯粹扩展,即无需去除功能性或者至少无损于为标准系统版本而开发的应用的向上兼容性。

另外,虽然使用在用于虚拟存储器管理的处理器中设想的硬件机制,但是所述访问控制可能并不一定需要这一虚拟存储器的去激活并且可以与它兼容。页面加载器PL可以例如被实施或者修改为使得如果虚拟页面ShMPi已经被另一任务TA使用则受监视的任务TB在这一页面的存在位PriB中并不反映这一页面到物理存储器RAM中的加载。

如图8中所示,在任务TA的激活时段SchA之一开始时,调度器SCH在时刻SCHAL释放任务TA。在释放这一任务之前,调度器SCH测试(31)这一任务TA的管理位MmA以确定是否必须对该任务施加访问控制。如果必须对该任务施加访问控制,则调度器SCH然后会将与这一访问控制器所涉及的所有共享页面相对应的页面表条目PTEiA至PTEkA的所有存在位PriA至PrkA设置为0(32),以便这一任务TA的任何访问请求对于能够执行这一任务TA的所有处理器μProX都会在中断机制PFIntX中缺省地引起页面错误。

在处理器μProX内的这一激活时段SchA期间,指令InstrA请求(33)对共享存储器页面ShMPi的访问。由于对应存在位PriA为0,所以处理器μProX的中断机制PFIntX挂起这一访问请求的执行并且调用系统软件的故障页面处理器PFH,同时向它发送有关页面和任务的标识。

当处理这一错误时,页面故障处理器PFH的补充功能性PFHSUP因此在如下数据表内进行测试和/或修改,该数据表在系统软件的虚拟存储器管理器VMM内形成内核存储器结构KMStr(“内核存储器结构”)代理。

通常,这一内核存储器结构KMStr以单义的方式为全部工作环境或者全部工作存储器存储如下数据,该数据代表了存储器资源及其发展的结构。根据本发明,这一内核存储器结构KMStr也包括在这里称为访问位KSi、KSi和KSk的一组数据位,这些数据位对于各有关共享页面ShMPi至ShMPk而言代表了如下事实:目前向任务准予(该位为1)或者不准予(该位为0)对这一页面的访问。

当页面故障处理器PFH处理处理器μProX所发送的错误时,它查询(34)与有关ShMPi页面相对应的访问位KSi。如果这一访问位不指示任何当前访问,则它修改(34)这一访问位KSi以便存储它准予对这一页面的访问,并且也修改(35)与请求任务TA相对应的存在位PriA(将该位改变为1)以便存储如下事实:这一任务TA现在具有对有关页面ShMPPi的独占性访问。

应当注意,内核存储器结构KMStr的访问位KSI的这些测试和修改操作构成了以原子(atomic)方式来实施的操作34,即确保即使在多处理器环境下也仍然要么完全地实现该操作要么完全不实现该操作。

一旦页面故障处理器PFInt已经确定了关于所请求的页面ShMPi的独占性的归属,它就重新起动指令InstrA的执行使得它实际访问(36)这一页面的内容。

此后,如果来自由另一处理器μProY并行执行的任何另一受监视的任务TB的指令InstrB请求(37)对这一已经确定归属的页面ShMPi的访问,则这一处理器的中断机制PFIntY也将查询这一页面中用于请求任务TB的存在位PriB。由于任务TB是受监视的任务,所以所查询的存在位PriB处于不存在位置(值为0)。中断机制PFIntY因此将终止请求指令InstrB并且发送(38)错误到页面故障处理器PFH。

此时,这一页面故障处理器PFH注意到这一页面的访问位KSi为1,指示了已经将对于这一页面ShMPi的独占性准予给另一任务。页面故障处理器PFH因此将例如通过结束请求任务TB的激活时段来启动(39)将整个请求任务TB挂起到系统软件上下文改变管理器中。在它的下一激活时段期间,这一任务TB因此会把它的执行准确地重复到它被中断过的点并且将能够再一次尝试访问该同一页面ShMPi。

在请求任务是属于多线程进程的线程ThrB2(图7)的情况下,这一单个线程ThrB2所特有的一组页面表条目PTEiB2的存在使得仅挂起请求对已经在独占性访问中分配的页面进行访问的线程而不挂起不会与这一独占性相冲突的其它线程ThrB1。

在各任务的激活时段SchA完成SCHAS时,调度器挂起这一任务的执行并且备份它的执行上下文。

关于这一挂起SCHAS或者关于对已经分配的页面请求的挂起(39),本发明也设想了这一任务所收到的独占性访问所针对的所有共享存储器页面的释放阶段。由此,如果调度器SCH通过管理位MmA注意到(301)在挂起过程中的任务TA受到监视,则它扫描这一任务的所有页面表条目PTEiA至PTEkA以通过查询不同存在位PriA至PrKA的状态来确定该任务具有对哪些页面的独占性访问。基于这一信息,它然后将通过在内核存储器结构KMStr中把所有这些页面ShMPi的访问位KSi重置为0来释放所有这些页面ShMPi。

在其它未述及的变型中,也有可能例如通过在单个任务描述符内设想数个管理位而将管理或者监视的概念分离为数种管理类型。因此可以监视任务以便就某些任务类别而言使任务受益于独占性访问。类似地,可以仅就某些任务类别而言排除任务。

由此,通过挂起所有寻求对已经分配的页面进行访问的任务,为请求这一页面的第一任务获得对该页面的独占而不干扰由此挂起的其它任务的执行连贯性。

通过避免对同时执行的两个任务所共享的单个存储器区的任何修改,因此这避免了在这一存储器区的内容有变时在它们之间的任何冲突。从用于这一存储器区的给定初始状态起,在访问该存储器区的任务的各激活时段开始时,它的内容的变化由此仅依赖于这一任务在这一激活时段期间的动作。对于由这一任务例如在调度的激活时段所执行的给定指令序列,并且通过从已知的初始状态开始,由此有可能获得相对于这一任务而言具确定性并且可重复的这一序列的执行。

特别是由于将原子操作用于存储对于所访问的存储器区的独占性的分配,所以该方法实现了避免或者减少在竞相寻求访问的多个任务之间共享的单个资源的死锁风险。

有利地,当把在这一时段的其余时间对共享存储器页面ShMPi的独占性访问归属于访问任务TA时,页面故障处理器PFH、PFHSUP可以预备代表这一归属的录入数据。这一录入数据包括这一独占性访问所归属于的任务TA的标识以及可能包括如下其它补充数据,该补充数据应用于上下文或者代表了请求指令InstrA在有关任务TA的执行中的位置以及在所得独占性访问的持续时间中这一任务TA所执行的指令的数目。

在系统软件内,可以在如下访问日志中对这一录入数据进行分组,该访问日志代表了在某一时间段或者某一执行时段期间确定归属的一连串独占性访问。这一日志特别地包括如下有序数据集,该数据集例如按照已经获得这些独占性访问的一连串任务的PID或者TID来标识这些任务。受监视的任务所访问的各资源因此可以使得开始建立专属于它的日志,并且对已经获得对这一资源的独占性访问的一连串任务进行分组。

通过将这些访问控制技术(图7至图8)与上述用于录入确定性时段的技术(图1至图5)以及与在上文引用的申请中描述的检查点设置以及录入和重放技术相组合,本发明提出在并行架构系统中也实施前述不同类型的运作管理。

图9因此根据本发明图示了多任务应用APPJ在多处理器系统MP1上的录入以及它根据需要在单处理器系统UP2中的重放。

对于录入的应用APPJ,录入代理JSCH为各处理器μProX或者μProY录入用于不同受监视的任务TA、TB和TC的一连串所有激活时段。如上所述,它将这些任务分别作为队列QJμProX和QJμProY来单独地发送。应当注意,如果任务在一个处理器中被执行一次以及在另一处理器中被执行一次,则用于这一任务的激活时段将存在于两个队列中。

利用由录入的应用APPJ所访问的共享资源ShMPi至ShMPk,录入代理JVMM为这些资源中的各资源记录如下录入数据,该数据代表了针对这一资源而分配的一连串独占性访问。页面故障处理器PFH在虚拟存储器管理器VMM内连同它向不同任务所分配的独占性访问一起生成这一独占性访问录入数据。

这一访问录入数据的各次记录特别地包括:

-有关共享资源的单义标识符,例如用于共享存储器区的地址;

-获得这一访问的任务的标识符(PID或者TIP);

-例如通过这里描述的计数技术而获得的这一独占性访问的持续时间;

-允许补偿这一技术的不准确性的补充数据,例如前述签名;

-以及例如对于系统资源以及不同外部事件或者输入/输出事件的虚拟化而言有用的某些补充数据。

这一录入数据被发送到FIFO型的录入队列QJShMPi。

视实施例而定,有可能在一个或者多个日志文件中存储这些队列QJμProX、QJμProY、QJμMPi的内容例如以供以后使用。

不同录入数据通过通信装置如计算机通信网络从这些队列中被发送到重放系统UP2。

来自各录入队列QJμProX、QJμProY、QJμMPi的数据由与发出队列相对应的重放队列QRμProX、QRμProY、QRμMPi分别接收。

在这些重放队列的输出中,不同录入处理器μProX以及μProY的录入数据根据访问录入数据被组合在一起,以便恢复录入的激活时段和分配的(连续)独占性访问的组合串行。

在重放系统内,在定义这一重放串行或者重放调度之后,在重放处理器中起动重放的执行。

应当注意,一旦以不打破对这一重放串行的调度的方式在这些重放处理器之间分布任务,重放处理器的数目可能就不具有重要性(除了会影响在重放时的性能之外)。

因此,由在多处理器系统MP 1中的录入应用APPJ,有可能在重放机器UP2中以重放任务TA’、TB’、TC’的形式获得它的应用的不同任务TA、TB、TC的确定性时段的重放。通过将确定性时段的这一重放与非确定性事件以及特别是外部事件的录入和重放相组合,本发明实现了以高性能的方式获得一种再现对录入应用APPJ的执行的重放应用APPJ。

通过将录入数据一经生成就从录入系统发送到重放系统(立即),有可能产生一种以与录入应用完全相同的方式(仅有时间延迟)生成后续或者“影像”重放应用。例如与存储应用的状态作为未来储备的技术相对照,可以在两个应用均在执行之中的这一类情形下使用术语“活动-活动”配置。

在这样的“活动-活动”配置中,可以认为重放应用APPR构成了主应用或者主要应用的活动副本。这一活动副本呈现出主要添加了录入数据的传输和处理时间、可以视比如两个系统的比较性能这样的因素而定的少量时间延迟。典型延迟是少数几个通常为几毫秒的调度时段。

在第一考虑下,这里描述的技术可以允许实施运作管理,该运作管理仅代表了相较于原应用或者旧应用而言的较小开销以及仅代表了在开发利用情形下可能接受的某种性能的损失。

本发明有利地实现了将这一类“活动-活动”配置应用于对应用可靠化(reliabilization)的实施,其中活动副本可以用作原应用的镜像应用并且在故障情况下或者在特定事件时从它进行接管。相较于镜像系统的硬件实施而言,本发明由于相对于所用机器的硬件特征的改进的独立性而在运作中以及硬件管理中实现了多得多的灵活性。

这样的配置由此实现了即使在并行架构中仍以灵活和非入侵式同时限制性能损失的方式给现存应用带来容错功能。

在使用这样的“活动-活动”配置以便通过将所有或者部分服务从录入应用重新分布到活动副本来产生工作负荷的平衡或者调整(“负荷平衡”)的同时也存在这些优点。这可以例如优化硬件的使用或者释放硬件的一部分以便实施重定位的维护。

应当注意,这里描述的不同机制以与硬件部分无联系的方式来使用软件部分。于是获得相对于硬件的良好独立性,这特别地使实施更简易和更可靠并且通过允许该架构最佳地自行管理不同计算单元(这些单元可以是处理器或者计算机)的并行性来保留良好性能。

另外,由于本发明最经常是纯软件实施的,所以有可能使用具有所述所有优点的标准硬件。

本发明特别地实现了将为在单个计算单元上在共享时间内运作的多任务应用而开发的运作管理技术扩展到并行环境。由此,本发明实现了将这样的并行环境结合到如下网络或者集群中,在该网络或者集群中这一运作管理在中间件类型的应用内被实施以便例如管理分布式应用或者提供“按需”服务的可变部署应用。

不言而喻,本发明不限于刚才描述的例子,并且可以对本发明做出许多修改而不脱离本发明的框架。

去获取专利,查看全文>

相似文献

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

客服邮箱:kefu@zhangqiaokeyan.com

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

  • 服务号