容错系统和用于执行容错的方法.pdf

上传人:a1 文档编号:6174657 上传时间:2019-05-17 格式:PDF 页数:27 大小:5.54MB
返回 下载 相关 举报
摘要
申请专利号:

CN201310429933.8

申请日:

2013.09.18

公开号:

CN103678022A

公开日:

2014.03.26

当前法律状态:

授权

有效性:

有权

法律详情:

授权|||实质审查的生效IPC(主分类):G06F 11/07申请日:20130918|||公开

IPC分类号:

G06F11/07; G06F9/455

主分类号:

G06F11/07

申请人:

横河电机株式会社

发明人:

吉田善贵; 植原正太; 大野毅

地址:

日本东京

优先权:

2012.09.18 JP 2012-204607

专利代理机构:

北京天昊联合知识产权代理有限公司 11112

代理人:

陈源;李铭

PDF下载: PDF下载
内容摘要

本发明公开了容错系统和用于执行容错的方法。所述容错系统包括:在主机上形成的主虚拟机,主管理程序在该主机中运行,该主虚拟机被配置为将基于来自主管理程序的外部中断的虚拟中断输入至主客户OS;以及在次机上形成的次虚拟机,次管理程序在该次机中运行,该次虚拟机被配置为基于与主虚拟机所发送的虚拟中断有关的定时信息来将虚拟中断输入至次客户OS。主虚拟机被配置为将关于虚拟中断的定时信息发送至次虚拟机,该定时信息包括主客户OS在输入虚拟中断之前执行的分支指令的数量、并包括输入虚拟中断时的执行挂起位置。

权利要求书

权利要求书
1.  一种容错系统,包括:
在主机上形成的主虚拟机,主管理程序在所述主机中运行,所述主虚拟机被配置为将基于来自所述主管理程序的外部中断的虚拟中断输入至主客户OS;以及
在次机上形成的次虚拟机,次管理程序在所述次机中运行,所述次虚拟机被配置为基于与所述主虚拟机所发送的虚拟中断有关的定时信息来将虚拟中断输入至次客户OS,
其中所述主虚拟机被配置为将所述关于虚拟中断的定时信息发送至所述次虚拟机,所述定时信息包括所述主客户OS在输入虚拟中断之前执行的分支指令的数量、并包括输入虚拟中断时的执行挂起位置。

2.  如权利要求1所述的容错系统,
其中所述执行挂起位置由程序计数器值表示。

3.  如权利要求1所述的容错系统,
其中所述主客户OS和在所述主客户OS上运行的应用程序由中间语言来描述,并且
其中所述执行挂起位置由输入虚拟中断时所执行的中间语言的指令的位置来表示。

4.  如权利要求1至3中任一项所述的容错系统,
其中所述次虚拟机被配置为:当所述定时信息被发送时,允许所述次客户OS操作,直至分支指令被执行的次数达到所述定时信息中所指定的分支指令的数量,随后在第一次被执行的执行挂起位置处挂起所述次客户OS,并且将虚拟中断输入至所述次客户OS。

5.  如权利要求4所述的容错系统,
其中所述次虚拟机被配置为在所述执行挂起位置处切换上下文,以挂起所述次客户OS。

6.  如权利要求5所述的容错系统,
其中所述次虚拟机被配置为通过生成上下文切换指令或用于切换上下文的事件来切换上下文。

7.  如权利要求4所述的容错系统,
其中所述次虚拟机被配置为:如果所述次虚拟机允许次客户OS操作直至分支指令被执行的次数达到所述定时信息中所指定的分支指令的数量,且随后在所述执行挂起位置被执行之前执行了所述分支指令,则所述次虚拟机确定发生了故障。

8.  一种用于通过主虚拟机和次虚拟机执行容错的方法,所述主虚拟机形成在主机上,主管理程序运行在所述主机中,所述主虚拟机被配置为将基于来自主管理程序的外部中断的虚拟中断输入至主客户OS,所述次虚拟机形成在次机上,次管理程序运行在所述次机中,所述次虚拟机被配置为基于与主虚拟机所发送的虚拟中断有关的定时信息来将虚拟中断输入至次客户OS,所述方法包括:
将关于虚拟中断的定时信息从主虚拟机发送至次虚拟机,所述定时信息包括主客户OS在输入虚拟中断之前执行的分支指令的数量、并包括输入虚拟中断时的执行挂起位置。

说明书

说明书容错系统和用于执行容错的方法
技术领域
本发明涉及使用虚拟机的容错系统以及使用虚拟机来执行容错的方法。
背景技术
容错系统是这样一种系统,即使在系统配置的一部分中出现缺陷的情况下,容错系统也能够继续操作,而不会使整个系统崩溃,并且容错系统尤其适用于要求具有高度有效性和不间断系统有效性的系统。例如,即使在发生硬件故障的情况下,采用了容错系统的服务器计算机也可以输出正确的数据,而不会有对来自外部装置的客户应用程序进行的网络访问作出响应的通信错误。
如JP-A-2009-80695所公开的,已知一种在运行于两台彼此通信的计算机上的虚拟机中实现容错系统的技术。使用虚拟机的容错系统将这两台虚拟机的执行状态同步,以进行相同的操作。当在其中一台计算机中出现故障时,在另一台计算机中操作的虚拟机接管处理,由此连续而不中断地提供系统的服务。
在使用虚拟机的容错系统中,将一台虚拟机作为主虚拟机,而将另一台虚拟机设为次虚拟机。将主虚拟机构造为领先于次虚拟机执行同一操作并接管对关于外部装置进行输入/输出的控制。
通常,当执行相同程序的两台计算机以完全相同的定时从外部装置接收输入时,这两台计算机会进行相同的操作,并且输出相同的数据。因此,当在使用虚拟机的容错系统中基于外部输入发生中断时,该容错系统令主虚拟机将中断发生的时刻作为同步信息发送至次虚拟机。然后,以一定延迟运行的次虚拟机在与同步信息所通知的时刻相同的时刻产生虚拟中断,由此主虚拟机和次虚拟机以彼此同步的方 式执行相同的操作。
图6是示出了传统的使用虚拟机的容错系统的配置的框图。如图6所示,容错系统60包括了在网络上彼此连接的主机600和次机700。
在主机600中,主管理程序620在作为物理计算机环境的主硬件610上运行,并且主机600中配置了主虚拟机630。在主虚拟机630中运行主客户OS(操作系统)640,并且在主客户OS640上执行应用程序650。
主硬件610配备有诸如CPU(中央处理单元)、内存、网络接口卡(NIC)、和存储器之类的多种装置。
主虚拟机630分配有主硬件610的一部分硬件资源,并且在虚拟计算机环境中接管与外部装置相关的输入/输出的控制。主虚拟机630由主管理程序620管理。
同样,在次机700中,次管理程序720在作为物理计算机环境的次硬件710上运行,并且次机700中配置了次虚拟机730。在次虚拟机730中运行次客户OS740,并且在次客户OS740上执行应用程序750。
次硬件710配备有诸如CPU、内存、网络接口卡(NIC)、和存储器之类的多种装置。
次虚拟机730分配有次硬件710的一部分硬件资源,并且在虚拟计算机环境中与主虚拟机630同步地操作。次虚拟机730由次管理程序720管理。
在传统的容错系统60中,在以下过程中主虚拟机630与次虚拟机730的执行状态彼此同步。
一旦接收到来自主硬件610的外部中断,主管理程序620则将该外部中断输入至主虚拟机630。
然后,主虚拟机630将虚拟中断输入至主客户OS640。现在,将要描述将虚拟中断从主虚拟机630输入至主客户OS640。
当在主客户OS640的处理期间出现诸如外部中断、特权指令、或异常之类的虚拟机上下文切换事件时,主客户OS640的处理被挂 起,客户OS上下文被切换至虚拟机上下文,处理转移至主虚拟机630。
若主虚拟机630根据在其定时时刻的各种事件而需要在主客户OS640上输入虚拟中断,则主虚拟机630配置虚拟中断。当配置了虚拟中断时,主虚拟机630终止处理,当处理返回至在生成事件时刻被挂起的主客户OS640时,虚拟中断被输入至主客户OS640。
当主虚拟机630将虚拟中断输入至主客户OS640时,主虚拟机630将同步信息发送至次虚拟机730。同步信息包括对虚拟中断的识别信息、以及用于输入虚拟中断的同步定时信息。
同步定时信息是关于在与虚拟中断被输入至主客户OS640相同的时刻将虚拟中断输入至次客户OS740的信息,并且包括指示了执行挂起位置和CPU特有的执行指令的数量的信息。
作为执行挂起位置,可以使用表示当输入虚拟中断时所执行的指令地址的程序计数器的值。执行指令的数量可以由CPU中提供的性能计数器的CPU执行指令数量计数器来测量。
在测量执行指令数量的情况下,当主虚拟机630将虚拟中断输入至主客户OS640时,将CPU执行指令数量计数器清零,并且在重新开始执行主客户OS640前使CPU执行指令数量计数器启动。因此,计算出了自先前的虚拟中断输入以后由主客户OS640执行的指令的数量。
当仅有执行挂起位置被用作同步定时信息时,在表示执行挂起位置的指令包括在循环处理中或者包括在条件分支目的地中的情况下无法指定虚拟中断输入的时刻,这是因为每次当进行到循环或条件分支进程都会执行该指令。
同样,当仅有执行指令的数量被用作同步定时信息时,由于诸如流水线处理之类的高速化技术,使得次客户OS740不能以所指定的执行指令的数量来挂起,并且不可避免地在超出执行指令的数量后被挂起。由此,虚拟中断不能在与主客户OS640相同的时刻被输入到次客户OS740。
在该情形下,将执行挂起位置和执行指令的数量结合在一起作为同步定时信息,并且每次在次客户OS740中对执行挂起位置所表 示的指令进行处理时确认执行指令的数量。因此,在与将虚拟中断输入到主客户OS640中相同的时刻来将次客户OS740挂起。
因此,当在挂起了主客户OS640的执行之后主虚拟机630将虚拟中断输入至主客户OS640时,主虚拟机630获取挂起主客户OS640的执行时刻的程序计数器的值、以及CPU执行指令数量计数器的值,以生成同步定时信息。然后,主虚拟机630将有关虚拟中断的识别信息和同步定时信息发送至次虚拟机730作为同步信息。
接收到了同步信息的次虚拟机730根据同步定时信息来挂起次客户OS740的执行。将参照图7的流程图来描述该情形下次虚拟机730的操作。
将暂停(break)指令嵌入同步定时信息的执行挂起位置所指定的程序位置中(S401),并且重新启动次客户OS740(S402)。然后,当次客户OS740停止(S403中为是)时,确认CPU执行指令数量计数器,并且若计数器值匹配执行指令的指定数量(S404中为是),则次客户OS740在停止位置处挂起(S405)。若计数器值不匹配执行指令的指定数量(S404中为否),则次客户OS740重新启动(S402)并重复确认执行指令的数量。
当次虚拟机730挂起次客户OS740时,次虚拟机730根据同步信息的虚拟中断识别信息来配置虚拟中断(S406),并且重新启动次客户OS740(S407)。因此,在与主客户OS640相同的时刻将虚拟中断输入至次客户OS740,并且主虚拟机630和次虚拟机730的执行状态彼此同步。
当在主机600和次机700的任何一个中发生硬件故障时,打乱了执行状态的同步。当执行状态的同步被打乱时,主虚拟机630和次虚拟机730之间的输出数据的值变得不同。在该情况下,容错系统60对比次虚拟机730的输出来检查主虚拟机630的输出,若输出数据的值彼此不同,则确定发生硬件故障。
为了进行该故障确定处理,次虚拟机730装配有输出数据检查单元731,其搜集主虚拟机630的输出数据,并对比次虚拟机730的输出数据来检查所搜集的输出数据。
如上所述,从主虚拟机630发送至次虚拟机730的同步信息包括关于虚拟中断的识别信息和同步定时信息,同步定时信息包括由程序计数器表示的执行挂起位置、以及由程序计数器测量的CPU执行指令的数量。
但是,存在这样的情况,对于特定CPU特有的特定指令可能发生性能计数器的计数遗漏,并且有可能未能准确地对在输入虚拟中断之前由主客户OS640执行的CPU执行指令的数量进行计数。例如,在英特尔公司制造的Pentium(注册商标)处理器中,对于当REP指令的执行由于发生外部中断而被挂起时的REP指令的执行就没有被计入。由此,CPU执行指令计数可能变得小于执行指令的实际数量。
这样,因为对CPU执行指令数量的计数可能不准确,所以不能准确地将主客户OS640的虚拟中断输入定时发送至次虚拟机730。
同样,在挂起次客户OS740的执行过程中,若使用如传统系统中的嵌入暂停指令以配置断点的技术,则当在虚拟机(630,730)上调试客户OS(640,740)或应用程序(650,750)时,挂起干扰了调试的断点,从而不利地影响到彼此的处理。因为可能存在用户想要对彼此同步的虚拟机(630,730)上的应用程序(650,750)操作进行检查的情况,所以希望避免断点的干扰。
同样,在没有虚拟化支持功能的CPU中,通过设置断点不能使处理从次客户OS740转移至次虚拟机730。
发明内容
本发明的示例性实施例提供了一种容错系统和一种用于执行容错的方法,其将基于主虚拟机中的外部中断的虚拟中断以相同的定时输入至次虚拟机,从而让主虚拟机和次虚拟机执行平行同步操作,其中主虚拟机输入的虚拟中断定时被准确地发送至次虚拟机,从而在相同的定时将虚拟中断输入至次虚拟机。
根据本发明的示例性实施例的容错系统,包括:
在主机上形成的主虚拟机,主管理程序在所述主机中运行,主虚拟机被配置为将基于来自主管理程序的外部中断的虚拟中断输入 至主客户OS;以及
在次机上形成的次虚拟机,次管理程序在所述次机中运行,次虚拟机被配置为基于与主虚拟机所发送的虚拟中断有关的定时信息来将虚拟中断输入至次客户OS,
其中主虚拟机被配置为将关于虚拟中断的定时信息发送至次虚拟机,所述定时信息包括主客户OS在输入虚拟中断之前执行的分支指令的数量、并包括输入虚拟中断时的执行挂起位置。
执行挂起位置可以由程序计数器的值表示。
主客户OS和在主客户OS上运行的应用程序可以由中间语言来描述,并且执行挂起位置可以由输入虚拟中断时所执行的中间语言的指令位置来表示。
次虚拟机可以被配置为:当定时信息被发送时,使得次客户OS操作,直至分支指令被执行的次数达到定时信息中所指定的分支指令的数量,随后在第一次被执行的执行挂起位置处将次客户OS挂起,并且将虚拟中断输入至次客户OS。
次虚拟机可以被配置为在执行挂起位置处切换上下文,以挂起次客户OS。
次虚拟机可以被配置为通过生成上下文切换指令或用于切换上下文的事件来切换上下文。
次虚拟机可以被配置为,如果所述次虚拟机使得次客户OS操作直至分支指令被执行的次数达到定时信息中所指定的分支指令的数量,且随后在执行挂起位置被执行之前执行了分支指令,则次虚拟机确定发生了故障。
根据本发明的示例性实施例的用于通过主虚拟机和次虚拟机执行容错的方法,所述主虚拟机形成在主机上,主管理程序运行在所述主机中,所述主虚拟机被配置为将基于来自主管理程序的外部中断的虚拟中断输入至主客户OS,所述次虚拟机形成在次机上,次管理程序运行在所述次机中,所述次虚拟机被配置为基于与主虚拟机所发送的虚拟中断有关的定时信息来将虚拟中断输入至次客户OS,所述方法包括:
将关于虚拟中断的定时信息从主虚拟机发送至次虚拟机,所述定时信息包括主客户OS在输入虚拟中断之前执行的分支指令的数量、并包括输入虚拟中断时的执行挂起位置。
根据本发明的示例性实施例,在将基于主虚拟机中的外部中断的虚拟中断以相同的定时输入至次虚拟机从而使得主虚拟机和次虚拟机执行平行同步操作的容错系统和用于执行容错的方法中,主虚拟机输入的虚拟中断定时可以被准确地发送至次虚拟机,从而以相同的定时将虚拟中断输入至次虚拟机。
附图说明
图1是示出了根据一个实施例的容错系统的配置的框图。
图2是示出了主虚拟机和次虚拟机的并行同步操作的概要的流程图。
图3A和图3B是示出了通过分支数和执行挂起位置来识别虚拟中断输入位置的示图。
图4是示出了当CPU架构的细节已知时,虚拟中断定时调节操作的具体过程的流程图。
图5是示出了当CPU架构的细节未知时,虚拟中断定时调节的具体过程的流程图。
图6是示出了相关技术中的使用虚拟机的容错系统的配置的框图。
图7是示出了让已经接收到同步信息的次虚拟机根据同步定时信息来挂起次客户OS的执行的操作流程图。
具体实施方式
将参照附图来描述根据本发明的实施例。图1是示出了根据本实施例的容错系统的配置的框图。如图1所示,容错系统10包括通过网络彼此连接的主机100和次机200。主机100和次机200可以由诸如服务器计算机或个人计算机之类的通用计算机来配置。
在主机100中,主管理程序120在作为物理计算机环境的主硬 件110上运行,并且主虚拟机130由主管理程序120构成。在主虚拟机130中,主客户OS140运行,并且在主客户OS140上执行应用程序150。
主硬件110配备有以下多种装置,诸如CPU111、内存112、定时器113、网络接口卡(NIC)114、和存储器之类的装置115。
主虚拟机130分配有主硬件110的部分硬件资源,并且接管对于与外部装置相关的输入/输出的控制。主虚拟机130用作虚拟计算机环境。主虚拟机130由主管理程序120管理。主程序管理120能够管理多个主虚拟机130。
同样,在次机200中,次管理程序220在作为物理计算机环境的次硬件210上运行,并且次虚拟机230由次管理程序220构成。在次虚拟机230中,次客户OS240运行,并且在次客户OS240上执行应用程序250。
次硬件210配备有以下多种装置,诸如CPU211、内存212、定时器213、网络接口卡(NIC)214、和存储器之类的装置215。
次虚拟机230分配有次硬件210的部分硬件资源,并且在虚拟计算机环境中与主虚拟机130同步地运行。次虚拟机230由次管理程序220管理。次管理程序220能够管理多个次虚拟机230。
在容错系统10中,仅由主虚拟机130来控制与外部装置相关的输入/输出,主虚拟机130在次虚拟机230之前运行。
在本实施例中,为主虚拟机130提供了虚拟中断生成单元131和同步信息生成单元135,并且为次虚拟机230提供虚拟中断输入转换单元231和同步校正单元235。
主虚拟机130的虚拟中断生成单元131生成虚拟中断,该虚拟中断是通过调节中断频率和实际从主管理程序120输入外部中断输入的定时而得到的,并且该虚拟中断生成单元131将生成的虚拟中断输入至主客户OS140。为虚拟中断生成单元131提供了用于调节中断频率的中断频率调节单元132以及用于调节中断定时的中断定时调节单元133。
主虚拟机130的同步信息生成单元135基于执行挂起位置和分 支执行数量来指定被调节并输入至主客户OS140的虚拟中断的定时。同步信息生成单元135配备有用于计算在输入虚拟中断以前主客户OS140中的程序分支数的分支执行数量生成单元136。
同步信息生成单元135在主虚拟机130和次虚拟机230的并行同步操作前,从次虚拟机230搜集操作性能信息。当主硬件110和次硬件210之间的硬件配置不同时,同步信息生成单元135生成用于校正处理速度差的同步校正信息,并且将同步校正信息发送至次虚拟机230的同步校正单元235。同步信息生成单元135按场合要求来调节主虚拟机130的操作。
次虚拟机230的虚拟中断输入转换单元231根据从主虚拟机130发送的同步信息的同步定时信息来使次客户OS240的处理前移至虚拟中断输入位置,并且挂起次客户OS240。然后,虚拟中断输入转换单元231接收虚拟中断。为了使次客户OS240的处理前移至虚拟中断输入位置,并且挂起次客户OS240,为虚拟中断输入转换单元231提供了指定分支数执行单元232和指定位置上下文切换单元233。
次虚拟机230的同步校正单元235在并行同步操作之前基于从主虚拟机130的同步信息生成单元135发送的同步校正信息来调节次虚拟机的操作。同步校正单元235按场合要求在并行同步操作中调节主虚拟机130和次虚拟机230之间的处理速度差。
(并行同步操作的概要)
随后,将参照图2的流程图来描述在如上所述配置的容错系统中主虚拟机130和次虚拟机230彼此之间使执行状态同步的并行同步操作的概要。具体地,将描述当主管理程序120从主硬件110接收到外部中断时的操作序列。
一旦接收到来自主硬件110的外部中断(S101),主管理程序120就将外部中断输入至主虚拟机130(S102)。
从主管理程序120接收到外部中断的主虚拟机130将虚拟中断输入至主客户OS140。在该情形下,主虚拟机130不针对所有输入的外部中断将虚拟中断输入至主客户OS140,而中断频率调节单元132对输入至主客户OS140的虚拟中断的频率进行调节(S103)。
在使用虚拟机的容错系统10中,当把虚拟中断输入至主客户OS104时,为了同步彼此的执行状态,还要进行在相同时刻将虚拟中断输入至次客户OS240的处理。由此,当在主虚拟机130中频繁地出现虚拟中断时,增加了用于对执行状态进行同步的处理负荷,并且减少了要分配给原服务的诸如CPU时间或通信带宽之类的资源。
在根据本实施例的容错系统10中,中断频率调节单元132调节虚拟中断的频率以使得用于对执行状态进行同步的处理负荷最小,并且防止用于原服务的处理能力减小。稍后将描述由中断频率调节单元132所执行的中断频率调节操作的细节。
作为由中断频率调节单元132调节虚拟中断的频率(S103)的结果,若确定生成了虚拟中断(S104中为是),则将虚拟中断输入至主客户OS140。若确定没有生成虚拟中断(S104中为否),则该处理完成,进程等待后续的来自主管理程序120的外部中断的输入。
当虚拟中断被输入至主客户OS140时,应在一个位置挂起主客户OS140,在同一位置处将次客户OS240也挂起。
例如,当根据诸如外部中断之类的虚拟机上下文切换事件挂起主客户OS140以传送对主虚拟机130的控制时,主客户OS140的挂起位置可能在临界段中。该临界段是当多个处理同时在单个资源上执行时用来毁损进程的程序段,并且是由程序执行诸如暂停指令无效之类的互斥控制所在的段。
在该情况下,当虚拟中断在位于临界段中的挂起位置处输入至主客户OS140时,即使暂停指令被嵌入相同的位置中,次客户OS240也不能在相同的位置处挂起,而是在处理该临界段之后将次客户OS240挂起。在这种情况下,虚拟中断位置转移,执行状态不同步。
在该情况下,在根据本实施例的容错系统10中,中断定时调节单元133调节虚拟中断定时(S105),并且在避开临界段的情况下挂起主客户OS140,由此能够在相同的位置处挂起第二客户OS240。稍后将描述中断定时调节单元133进行的虚拟中断定时调节操作的细节。
当调节了虚拟中断定时时,主虚拟机130将虚拟中断输入至主 客户OS140(S106)。然后,同步信息生成单元135生成同步信息(S107)。
同步信息包括关于虚拟中断的识别信息和同步定时信息。同步定时信息包括由程序计数器表示的执行挂起位置,以及由性能计数器测量的CPU执行指令的数量。
但是,对于特定CPU特有的特殊指令,存在这样的情况:可能发生性能计数器的计数遗漏,并且有可能未能准确地对在输入虚拟中断以前由主客户OS140执行的CPU执行指令的数量进行计数。例如,在英特尔公司制作的Pentium(注册商标)处理器中,对于当REP指令的执行由于发生外部中断而被挂起时的REP指令的执行就没有被计入。由此,CPU执行指令计数可能变得小于执行指令的实际数量。
这样,因为对CPU执行指令数量的计数可能不准确,所以根据本实施例的容错系统10不将CPU执行指令的数量用于同步定时信息。
但是,因为程序通常包括大量的循环语句、跳转语句、和分支语句,所以相同的指令会执行多次。为此,可能无法仅通过执行挂起位置来指定虚拟中断的输入定时。
在该情况下,根据本实施例的容错系统10使得同步定时信息包括执行挂起位置和分支数。分支数代表从前一虚拟中断至当前虚拟中断所执行的分支指令的数量,该数量是执行顺序从依次执行发生改变的次数。
通过提前在主客户OS140中计算分支数,可以通过找出在执行了所计数量的分支之后被第一次执行的位置,来将执行挂起位置正确地指定为次客户OS240中的虚拟中断输入位置。
例如,如图3A所示,假设当指令代码CodeA、CodeB、CodeC、...被分配于指令地址a1、a2、a3、…,并且CodeC至CodeG循环三次时,在主客户OS140中的第十六次程序执行顺序的“a6”处输入虚拟中断。该同步定时可以由分支数的计数值“2”和执行挂起位置“a6”表示。
在该情况下,在次虚拟机230中,对分支数计数两次,在第一次执行挂起位置“a6”处挂起次客户OS240,由此能够在与主客户 OS140相同的定时处输入虚拟中断。
由此为了执行对分支数进行计数的处理,为同步信息生成单元135提供了分支执行数生成单元136。在指令代码级别中,所有的循环语句、跳转语句、和分支语句都被分支指令替代。因此,在运行应用程序150时,分支执行数生成单元136对由主客户OS140执行的分支指令的数量进行计数,由此能够对分支数计数。为了对分支数计数,可以使用性能计数器。
返回至图2的描述,主虚拟机130生成包括有关虚拟中断的识别信息和同步定时信息在内的同步信息,然后将同步信息传送至次虚拟机230(S108)。
为了根据同步定时信息来挂起次客户OS240的执行,在接收到同步信息的次虚拟机230中,指定分支数执行单元232首先对执行次客户OS240时的分支数进行计数。当分支计数达到同步定时信息中的分支数所表示的值时,次虚拟机230挂起次客户OS240。也就是,次虚拟机230执行次客户OS240的次数达到指定分支数量(S109)。为此,在分支计数达到指定分支数量以前不需要监控执行挂起位置和CPU执行指令的数量,减小了处理负荷。稍后将描述指定分支数执行单元232所执行的指定分支数执行操作的细节。
指定位置上下文切换单元233在同步定时信息的执行挂起位置所表示的位置处挂起次客户OS240的执行(S110)。
在对次客户OS240的执行进行挂起过程中,若使用了如在传统系统技术中嵌入暂停指令以配置断点的技术,则当客户OS(140,240)或应用程序(150,250)在虚拟机(130,230)中调试时,挂起干扰了调试的断点,并且不利地影响到相互的处理。因为可能存在用户想要对彼此同步的虚拟机(130,230)上的应用程序(150,250)操作进行检查的情况,所以希望避免对断点的干扰。
同样,在不具有虚拟化支持功能的CPU中,处理不能通过设置断点而从次客户OS240转移至次虚拟机230。
在该情况下,在根据本实施例的容错系统10中,指定位置上下文切换单元233执行上下文切换,而不使用暂停指令来挂起次客户 OS240的执行。稍后将描述指定位置上下文切换单元233执行的指定位置上下文切换操作的细节。
当次虚拟机230挂起次客户OS240时,次虚拟机230根据同步信息的虚拟中断识别信息来配置虚拟中断以重新启动次客户OS240。因此,在与主客户OS140相同的定时处将虚拟中断输入至次客户OS240(S111),并且主虚拟机130和次虚拟机230的执行状态彼此同步。
若在主机100和次机200之一中出现硬件故障,则执行状态变为不同步。在本实施例中,执行状态可以准确地彼此同步,而不受到性能计数器的计数遗漏的影响。为此,若硬件正常,则不会扰乱执行状态的同步。因此,对执行状态的同步的扰乱被检测,由此能够检测到硬件故障。
由于传统系统不能确定对执行状态的同步的扰动来源于硬件故障还是来源于对执行指令数量的计数遗漏所产生的影响,所以需要检查输出数据。另一方面,在根据本实施例的容错系统10中,因为可以通过执行状态的同步的扰动来检测到硬件故障,因此不需要检查用于故障检测的输出数据。因此,可以减少用于检查输出数据的CPU处理负荷和通信负荷。同样,可以立即检测硬件故障的发生。
对执行状态的同步的扰动检测可通过在例如次虚拟机230的虚拟中断输入转换单元231中检测同步定时信息所指定的执行挂起位置被执行之前分支数超过同步定时信息中所指定的次数时的同步扰乱来确定。
(各块的操作细节)
接下来将参照第一实施例、第二实施例、和第三实施例来描述容错系统10中各块的操作。
在传统容错系统中,假设主机的CPU和次机的CPU具有相同的架构。这是因为传统的同步技术依赖于CPU架构和CPU操作规范,若CPU的类型不同,则执行指令均不能彼此同步,并且可能不同步。
另一方面,如第一实施例和第二实施例所述,根据本各个实施例的系统并不仅适用于主机100的CPU111和次机200的CPU211 具有相同架构的情况,而是还适用于架构不同的情况。
通常,当容错系统被操作很长一段时期后,由于故障和老化,该装置强制被新的取代。在该情况下,很难准备与先前的装置具有相同规范的装置。为此,根据本实施例的容错系统10具有即使CPU架构不同也能够继续并行同步操作的结构。
<第一实施例>
作为第一实施例,将描述主机100的CPU111和次机200的CPU211具有相同架构的情况下的操作。在本说明书中,相同的CPU架构意味着CPU指令集在两个处理器之间具有兼容性。
在该情况下,主虚拟机130和次虚拟机230通过同步CPU指令级来执行并行同步操作。为此,在两台虚拟机(130,230)中,客户OS(140,240)和应用程序(150,250)的程序通常相对于CPU(111,211)具有符合本机CPU指令代码的代码格式。假设该并行同步操作叫做“CPU指令同步模式”。
(中断频率调节操作)
首先,将描述中断频率调节单元132执行的中断频率调节操作(S103)。主虚拟机130的中断频率调节单元132不会输入针对所有外部中断的虚拟中断,而是将虚拟中断的频率调节至达到应用程序150所需的性能和精度以及容许的通信延迟的程度。
通常,可以将外部中断分类为使用定时器113的固定周期中断和使用网络接口卡(NIC)114或装置115的非固定周期中断。中断频率调节单元132分别根据固定周期中断和非固定周期中断来执行频率的调节。
在固定周期的外部中断中,通过省略一些外部中断来以每固定周期的几个外部中断一次的速度来将虚拟中断输入到主客户OS140。
例如,当固定周期的定时器中断被输入至主客户OS140时,由此主客户OS140可以计算准确的时间。但是若应用程序150所需的时间精度不高,则可以没有任何问题地省略定时器中断的一些输入。
例如,当来自主管理程序120的定时器中断的周期为1ms,并且应用程序150中所需的时间精度为100ms时,即使虚拟中断周期变稀 疏至10ms,仍可以保证100ms的精度。在该情况下,因为虚拟中断的频率减小至1/10,所以执行状态的同步处理也减小至1/10。
可以根据应用程序150所需的精度提前设置稀疏率,或者通过参数对其进行调节。同样,关于固定周期的外部中断可一致地设置该稀疏率,或者可以针对固定周期的外部中断每个因素来设置稀疏率。
在非固定周期的外部中断中,省去与处理期间外部中断输入相关的虚拟中断,仅将已经完成处理的最后的外部中断输入至主客户OS140来作为虚拟中断。
例如,每当数据到达NIC114时,就发生一次来自NIC114的网络接收中断。为此,在接收作为重要单元的数据期间发生多个外部中断。传统方法是,每当外部中断发生时就将虚拟中断输入至主客户OS140,以使得接收到数据从NIC114转移至主客户OS140。另一方面,中断频率调节单元132省去与接收数据期间的外部中断有关的虚拟中断,并且将接收到数据后的一个外部中断相关的虚拟中断输入至主客户OS140。因此,可以减少执行状态的同步处理的数量,并且可以在同一时间处理大尺寸的数据。
作为适用于本技术的非固定周期的外部中断,有网络的发送/接收中断、存储器的读/写中断、串联通信的发送/接收中断、以及诸如模拟/数字I/O板之类的各种I/O装置的读/写中断。
(虚拟中断定时调节操作)
接下来将描述由中断定时调节单元133执行的虚拟中断定时调节操作(S105)。虚拟中断定时调节被配置为在避开主客户OS140的临界段的情况下输入虚拟中断,使得次客户OS240在相同的位置处被挂起。
对于CPU架构的细节已知和CPU架构的细节未知这两种情况之间,处理中的虚拟中断定时调节操作是不同的。CPU架构的细节已知的情况代表可以根据CPU指令或挂起位置的状态标志来确定挂起位置是否在临界段中。
首先,将参照图4的流程图来描述当CPU架构的细节已知时的具体的操作过程。
一旦从主管理程序120接收到外部中断的输入(S201),主虚拟机130等待对主客户OS140的执行挂起(S202)。
当主客户OS140的执行被挂起,并且处理转移至主虚拟机130时,主虚拟机130获取主虚拟机130的状态(S203)。要获取的状态是用于判定挂起位置是否在临界段中的信息,例如,CPU111的中断屏蔽的配置信息、或者标志寄存器的内容。
然后,基于获取的信息来判定挂起位置是否在临界段中(S204)。例如,基于以下原因可以判定挂起位置不在临界段中:中断屏蔽中未禁止中断的输入,以及在标志寄存器中没有设定使暂停指令的配置无效的标志。
若挂起位置不在临界段中(S204中为否),则挂起位置被配置为虚拟中断的输入定时(S205)。
若挂起位置在临界段中(S204中为是),则在确认主虚拟机130的状态时提前主客户OS140的执行(S206)。在该情况下,例如,进行逐步执行(step execution)以确认每个指令的状态(S203)。然后,判定挂起位置是否在临界段(S204),并且挂起位置不在临界段中(S204中为否)。然后挂起位置被配置为虚拟中断的输入定时(S205)。
随后,将参照图5的流程图来描述当CPU架构的细节未知时的具体操作过程。若CPU架构的细节未知,即使获取了主虚拟机130的状态,也不能判定挂起位置是否在临界段中。因此,配置挂起事件,将实际可以进行挂起的位置设置为用于输入虚拟中断的挂起位置。
一旦接收到来自主管理程序120的外部中断的输入(S301),主虚拟机130等待主客户OS140的执行挂起(S302)。
当主客户OS140的执行被挂起,并且处理转移至主虚拟机130时,主虚拟机130在主客户OS140中配置一个在执行了给定数量的指令之后(例如,在执行了一条指令之后)进行挂起的事件。
然后,通过逐步执行重新启动主客户OS140的执行(S304),为单条指令的执行获取中断的因素(S305)。这是因为挂起的因素不总是由配置的挂起事件引起的。
若挂起的因素由配置的挂起事件引起(S306中为是),则确定挂起位置不在临界段内,并且确定在相同位置处挂起次客户OS240,并且挂起位置被配置为虚拟中断的输入定时(S307)。
如果挂起的因素不是由配置的挂起事件引起(S306中为否),则确定挂起位置在临界段中,并且不能在相同的位置处挂起次客户OS240。然后,配置一个在执行一条指令之后挂起次客户OS240的事件(S303),并且重复已经重新启动主客户OS140的执行(S304)之后的处理。若进程前进到临界段以外(S306中为是),则挂起位置被配置为虚拟中断的输入定时(S307)。
(同步信息生成操作)
随后,将描述同步信息生成单元135进行的生成同步信息的操作(S107)。若主机100的CPU111和次机200的CPU211具有相同的架构,则同步信息的同步定时信息中的执行挂起位置由CPU指令代码的执行停止位置表示,并且可以使用程序计数器的值。
同步定时信息中分支执行的数量由主客户OS140自前一同步定时信息生成时间起所执行的分支数来表示。可以通过对在CPU指令代码级别处执行的分支指令进行计数来得到分支数。
(指定的分支数执行操作)
随后,将描述由指定分支数执行单元232执行的指定分支数执行操作(S109)。指定分支数执行操作被配置为对次客户OS240进行由同步定时信息中的分支数所表示的次数的挂起。
指定分支数执行单元232对在CPU指令代码级别所执行的分支指令进行计数。若计数值达到指定的分支数,则指定分支数执行单元232通知次虚拟机230该事实。因此,上下文切换至次虚拟机230,并且次客户OS240的执行被挂起。
在由于CPU211的流水线功能的加速导致在执行指定数量的分支后不能立即停止的CPU架构中,计数值被设置为小于指定的分支数,从而次客户OS240可以被进行指定分支数量的次数的挂起。
(指定位置上下文切换操作)
随后,将描述指定位置上下文切换单元233进行的指定位置上 下文切换操作(S110)。指定位置上下文切换操作被配置为在对次客户OS240挂起了指定分支数量的次数后不使用暂停指令的情况下,在指定的执行挂起位置处将上下文切换至次虚拟机230。
当为次虚拟机230实现了专用的上下文切换指令时,在次客户OS240的执行挂起位置处嵌入上下文切换指令。例如,上下文切换指令可以是英特尔公司制造的CPU的VMCALL指令。
当次客户OS240执行上下文切换指令时,上下文从次客户OS240切换至次虚拟机230,次客户OS240的执行被挂起。
当没有实现专用上下文切换指令时,使虚拟中断或CPU异常的事件在执行挂起位置处发生,使得执行上下文切换。当执行上下文切换时,上下文从次客户OS240切换至次虚拟机230,次客户OS240的执行被挂起。
在任何情况下,当次客户OS240的执行被挂起时,次虚拟机230配置虚拟中断,并且重新启动次客户OS240的执行,那时,虚拟中断被输入至次客户OS240。
<第二实施例>
作为第二实施例,将描述当主机100的CPU111和次机200的CPU211具有不同架构时的操作。在本说明书中,不同CPU架构意味着两个处理器之间的CPU指令集不具有兼容性。
在该情况下,主虚拟机130和次虚拟机230通过同步中间语言级别来执行并行同步操作。在本说明书中,“中间语言”也被叫做“中间代码”或“字节代码”,并且代表作为高级语言的源代码与机器语言的代码之间的中间体的中间表示语言。并行同步操作被叫做“中间语言同步模式”。
因为CPU指令集在两台虚拟机(130,230)之间没有兼容性,所以客户OS(140,240)和应用程序(150,250)的程序是中间语言的程序,其中,Java(注册商标)和C#被转换而取代本地CPU指令代码。
两台虚拟机(130,230)通过现有的诸如解释程序或即时编译器(JIT编译器)之类的CPU指令转换技术,针对虚拟机CPU将中间语 言转换为本地CPU指令。
类似地,当主机100的CPU111和次机200的CPU211具有相同的架构时,可以执行使用中间语言同步模式的并行同步操作。但是,使用CPU指令同步模式的并行同步操作的执行速度高于中间语言同步模式的并行同步操作的执行速度。
随后,将描述根据第二实施例的各块的操作。由于大部分的操作与第一实施例中CPU指令同步模式的操作相同,因此将仅描述与第一实施例不同的处理。
(虚拟中断定时调节操作)
在根据第一实施例的CPU指令同步模式中,在CPU架构的细节已知和CPU架构的细节未知这两种情况之间的处理中,虚拟中断定时调节操作(S105)是不同的。另一方面,在根据第二实施例的中间语言同步模式中,执行与CPU架构的细节已知时相同的处理。
也就是,因为可以根据CPU指令或挂起位置的状态标志来确定挂起位置是否在临界段中,所以根据图4所示的流程图,在避开临界段的情况下配置主客户OS140的挂起位置,并将虚拟中断输入至主客户OS140。
同样,在中间语言同步模式中,除了CPU指令和挂起位置的状态标志以外还能够以中间语言级别来确定挂起位置是否在临界段中。例如,若中间语言是Java(注册商标)的字节代码,则假设在同步互斥控制下实现临界段。为此,在确认所执行的中间语言的指令的同时,主虚拟机130可以确定挂起的Java(注册商标)的中间语言是否在临界段中。
(同步信息的生成操作)
在根据第一实施例的CPU指令同步模式中,在同步信息的生成操作(S107)中,同步定时信息中所包括的执行挂起位置通过使用程序计数器值而由CPU指令代码的执行停止位置表示。同样,包括在同步定时信息中的分支执行数量由自前一同步定时信息生成时间起执行的CPU指令代码的分支数表示。
相反,在根据第二实施例的中间语言同步模式中,执行挂起位 置由输入虚拟中断时执行的中间语言级别的执行挂起位置表示。同样,分支执行的数量由自前一同步定时信息生成时间起执行的中间语言级别的分支数表示。
(指定位置上下文切换操作)
在根据第一实施例的CPU指令同步模式中,在指定位置上下文切换操作(S110)中,当针对次虚拟机230实现了专用上下文切换指令时,在次客户OS240的执行挂起位置处嵌入上下文切换指令。当没有实现专用上下文切换指令时,使虚拟中断或CPU异常的事件在执行挂起位置处发生,使得上下文切换被执行。即使在根据第二实施例的中间语言同步模式中,在中间语言级别的执行挂起位置处由CPU指令转换执行相同设定。
<第三实施例>
随后,作为第三实施例,将描述当主机100与次机200之间的硬件配置不同时的并行同步操作。主机100的主硬件110和次机200的次硬件210均由诸如CPU(111,211)、内存(112、212)、诸如存储器之类的装置(115、215)之类的各种硬件装置配置而成。但是,双方硬件的功能或性能可能并不相互一致。
例如,存在CPU(111,211)的规格彼此不同、或者内存(112、212)的容量彼此不同的情况。同样,在容错系统10的操作处理中,由于装置(115,215)的替换会出现两个装置(115,215)不同。
为此,主虚拟机130和次虚拟机230在操作上相同,但是在处理速度上可能不同。如上所述,在容错系统10中,主虚拟机130配置为在次虚拟机230之前操作。但是,例如,若次虚拟机230处理速度更高,则进程的推进会反转,并且基于来自主虚拟机130的同步信息,执行状态不同步。若主虚拟机130处理速度更高,则次虚拟机230的延迟会累积。
同样,由于装置(115,215)不同,因此在主客户OS140和次客户OS240之间驱动器处理的执行可能不同,并且它们之间的操作不同,结果操作可能不同步。
在该情况下,在容错系统10中,提供了一种基于主硬件110和 次硬件210之间的差异来校正处理速度差和不同步的结构。具体来说,主虚拟机130的同步信息生成单元135和次虚拟机230的同步校正单元235执行同步校正。同步校正可以在执行并行同步操作之前被执行,或者可以在并行同步操作的执行期间被执行。
(执行并行同步操作之前的同步校正操作)
主虚拟机130的同步信息生成单元135在主虚拟机130和次虚拟机230的并行同步操作以前从次虚拟机230搜集关于次虚拟机230的操作性能信息。
操作性能信息是这样的信息,其包括了与次虚拟机230中的次客户OS240接口的操作规范以及作为次虚拟机230的程序执行速度指标的基准信息。同步信息生成单元135被配置为在可得到的范围内获取有关多个项目的操作性能信息。
同步信息生成单元135还获取有关主虚拟机130自身的操作性能信息,并且将获取到的操作性能信息与有关次虚拟机230的操作性能信息进行比较。然后,同步信息生成单元135设置主虚拟机130和次虚拟机230所使用的操作性能,使得主虚拟机130的并行同步操作中的操作性能与次虚拟机230的并行同步操作中的操作性能基本上相等。
操作性能例如是关于以下项目的基准信息:操作频率、内存大小、缓存大小、诸如TLB(翻译后援缓冲器)/EPT(增强页表)规范之类的操作规范、MIPS值、或SPEC值。在中间语言同步模式中,可以使用中间语言的基准值。例如,当使用Java(注册商标)的字节代码作为中间语言时,SPECjbb、CaffeineMark等被列举为基准值。
然后,同步信息生成单元135将次虚拟机230使用的操作性能作为同步校正信息通知给次虚拟机230的同步校正单元235。次虚拟机230的同步校正单元235根据所通知的同步校正信息来在执行并行操作时设置次虚拟机230的操作性能。
将描述通过调节操作频率的同步校正的示例。如上所述,当主机100和次机200之间的硬件配置不同时,存在操作相同但是处理速度不同的情况,以及操作本身不同的情况。在该示例中,将描述操作 相同但是处理速度不同时的同步校正。
在虚拟机(130,230)的操作频率的调节中,可使用为了节省电力而准备的电力控制功能。例如,针对标准电力控制功能可以使用ACPI(高级配置和电源接口),针对调节操作频率的功能可以使用Linux(注册商标)的cpfreq子系统。使用这些功能,虚拟机(130,230)均准备多个可用的操作频率。
主虚拟机130的同步信息生成单元135从次虚拟机230获取在次虚拟机230中可用的操作频率的列表,还获取可以被主虚拟机130自身使用的操作频率的列表,并且选择主虚拟机130和次虚拟机230之间基本上相同的操作频率。同步信息生成单元135将所选操作频率作为同步校正信息通知给次虚拟机230的同步校正单元235。
在主虚拟机130和次虚拟机230的并行同步操作期间,各虚拟机(130,230)基于主硬件110和次硬件210之间的操作频率的差异来以所选操作频率操作,从而消除处理速度差。
例如,若主虚拟机130的可用操作频率中没有与次虚拟机230的可用操作频率相匹配的频率,则将次虚拟机230设置为更高的操作频率,并且如稍后所述,可以有暂停地地来执行次虚拟机230的操作。
在中间语言同步模式中,由于基准值不同,因此主虚拟机130和次虚拟机230之间的处理速度不同。因此,基于所获取的两个基准值来执行与针对操作频率的调节相同的调节,以校正处理速度的差异。
随后,将给出当由于硬件配置的差异导致主虚拟机130和次虚拟机230之间操作本身不同时的同步校正的描述。
例如,当CPU架构相同但装置(115,215)的操作规范不同时,改变虚拟机的执行,以使两个客户OS(140,240)执行相同的驱动器处理。通过这样的改变,两个客户OS(140,240)能够执行相同的操作,并能够防止不同步。具体来说讲,在并行同步操作开始前,将吸收操作规范中的差异的功能并入主虚拟机130或次虚拟机230的设备模拟器。
该功能根据待校正对象可以分为以下两种类型。
(1)对硬件功能的有无之间的差异的校正
当某一硬件功能仅安装于一台虚拟机(130,230)时,具有该功能的虚拟机(130,230)不使用该功能,使得两台虚拟机(130,230)在各虚拟机均不具有该硬件功能的状态下操作。
例如,若虚拟机在FPU(浮点处理单元)功能的有无方面不同,则两台虚拟机(130,230)在虚拟机均不具有FPC功能的状态下操作。在该情况下,浮点处理由客户OS(140,240)内的仿真代码执行。具体来说,在执行浮点处理时发生异常,客户OS(140,240)的异常处理程序获取该异常,通过软件仿真该处理。
可替代地,不具备该功能的虚拟机(130,230)可以通过在客户OS(140,240)以外的外部环境中处理软件来仿真该功能,以吸收它们之间的差异。客户OS(140,240)以外的外部环境可以是虚拟机(130,230)或者管理程序(120,220)。
例如,不具有FPC功能的虚拟机(130,230)通过虚拟机(130,230)内的仿真代码来执行浮点处理。具体来说,由在执行浮点处理时发生的异常来执行到虚拟机上下文的切换,由虚拟机(130,230)内的软件来仿真该处理,并且随后进程返回至客户OS上下文。因为,在客户OS(140,240)中没有获取异常,所以没有执行客户OS(140,240)内的仿真代码。
(2)对硬件功能的性能或容量的差异的校正
当硬件功能的性能或容量不同时,在客户OS(140,240)以外的外部环境中执行操作方面不同的处理。客户OS(140,240)以外的外部环境可以是虚拟机(130,230)、管理程序(120,220)、或硬件(110,210)。
例如,若TLB的缓存大小不同,则存在仅虚拟机(130,230)中的一个未命中缓存的情况,发生TLB未命中。在该情况下,在客户OS(140,240)的外部执行从TLB未命中的恢复处理。在英特尔公司制造的CPU中,可以由硬件的功能来执行恢复处理。另一方面,当CPU(111,211)不具备硬件的恢复功能时,由虚拟机(130,230)或管理程序(130,230)的软件来执行恢复处理。
在中间语言同步模式中,虚拟机(130,230)使用诸如解释器或虚拟内存之类的软件功能来执行由中间语言表达的客户OS程序。为此,不会因为操作规范上的差异导致客户OS(140,240)的操作上发生差异。
(在并行同步操作的执行期间的同步校正操作)
当即使通过并行同步操作开始前的调节也不能消除主虚拟机130和次虚拟机230之间的处理速度差异时,同步信息生成单元135和同步校正单元235在并行同步操作期间执行以下同步校正。
首先,将描述当调节了操作性能后的主虚拟机130比调节了操作性能后的次虚拟机230的速度高时的同步校正。
同步信息生成单元135选择主虚拟机130的操作性能或者次虚拟机230的操作性能作为要被通知给次虚拟机230的同步校正信息的操作速度信息。例如,基于参数配置来进行选择。
若选择了主虚拟机130的操作性能,则因为主虚拟机130的在前操作扩大,所以执行用于消除次虚拟机230的延迟的处理。在该情况下,若次虚拟机230的延迟大于假定量,则可以检测机器中出现故障。
现在,将描述两种校正方法作为消除延迟的处理的示例。首先,将描述重新设置延迟和执行再同步的方法作为第一校正方法。
次虚拟机230的同步校正单元235确认次虚拟机230中的程序的执行速度的测量延迟时间是否等于从同步校正信息得到的假定延迟时间。
现在,将描述测量延迟时间。次虚拟机230从主虚拟机130接收使用定时器的固定周期虚拟中断的同步定时信息。同步定时信息代表通过将主虚拟机130的执行速度转换为执行指令的数量而得到的周期时间,其是次虚拟机230的理论值。另一方面,在次虚拟机230中发生使用定时器的固定周期虚拟中断时的周期时间是测量值。通过从测量值中减去理论值得到的值是测量延迟时间。
例如,当主虚拟机130中实际发生的定时器中断的周期值是10ms时,若次虚拟机230在进行与主虚拟机130相同的操作后接收 虚拟中断,则假设次虚拟机230中定时器中断的周期的测量值为15ms。在该情况下,因为理论值为10ms,而测量值为15ms,所以计算出定时器中断有5ms的延迟。
若测量延迟时间与从同步校正信息得到的假定延迟时间可比较,则确定为正常延迟,继续处理。因为测量延迟时间随着处理的继续而累积,所以提前设置作为可容许范围的可容许延迟时间,在当测量延迟时间超过可容许延迟时间的时点处再次执行与并行同步操作启动时相同的同步初始化处理以重设延迟。
例如,当主虚拟机130的程序执行速度为1500MIPS(百万指令每秒),并且次虚拟机230的程序执行速度为1000MIPS时,若在次虚拟机230中出现延迟,该延迟为每秒处理500MI(5亿指令)所需的时间,则确定为正常延迟。同样,连续10秒累积的用于处理5000MI(50亿指令)的时间在次虚拟机230中对应于5秒,若时间超过可容许延迟时间,则执行再同步以重设延迟。
随后,将描述提前某一时间以克服延迟的方法作为第二校正方法。在该方法中,当主客户OS140变为空闲状态,并且操作停止直至随后的虚拟中断输入至主客户OS140时,也就是当CPU处理的负荷小于100%时,将次客户OS240重新开始的时间提前以克服延迟。
主客户OS140的空闲状态代表没有待执行的处理并且主客户OS140的操作停止的状态。主客户OS140直至输入虚拟中断以执行处理程序处理才重新启动操作。直到那时,主虚拟机130等待外部中断的输入。
主虚拟机130继续等待外部中断的实际输入,次虚拟机230继续等待用于输入虚拟中断的同步信息的接收。
当次虚拟机230被延迟时,因为同步信息累积,所以可以已知接下来要输入的虚拟中断。为此,次虚拟机230不需要等待与主虚拟机130相同的时间,而是可以将重新启动次客户OS240的时间提前,并且输入虚拟中断。
例如,如第一校正方法,假设主虚拟机130的程序执行速度为1500MIPS,次虚拟机230的程序执行速度为1000MIPS。当主客户OS 140的CPU负荷为20%时,执行每秒300MI的处理,使主虚拟机130停止达一秒内的剩余时间。主虚拟机130的停止时间是当主虚拟机130执行1200MI的处理期间的时间。
另一方面,在次虚拟机230已经在一秒内执行了与主虚拟机130相同的300MI的处理后,次虚拟机230不在执行与主虚拟机130相同的1200MI的处理的持续时间内停止,而是在一秒的剩余时间内停止,即,当次虚拟机230执行700MI的处理的持续时间内停止。由此,次虚拟机230的停止时间从1200MI减少至700MI处理时间,因此能够克服次虚拟机230的延迟。
随后,将描述当主虚拟机130比次虚拟机230的速度高时提供次虚拟机230的操作性能作为通知给次虚拟机230的同步校正信息的操作速度信息。
在该情况下,因为主虚拟机130以次虚拟机230的操作性能运行,所以主虚拟机130的同步信息生成单元135在并行同步操作期间执行同步校正处理以调节程序执行速度。具体来说,主虚拟机130在依照次虚拟机230的程序执行速度进行暂停的情况下执行操作。
其后,将描述当调节了操作性能后的次虚拟机230比调节了操作性能后的主虚拟机130的速度更高时的同步校正。同步信息生成单元135设置要通知给次虚拟机230的同步校正信息的操作速度信息作为主虚拟机130的操作性能。
然后,主虚拟机130在并行同步操作期间不执行同步校正处理,并且次虚拟机230在依照主虚拟机130的程序执行速度进行暂停的情况下执行操作。
例如,当主虚拟机130的程序执行速度为1000MIPS,次虚拟机230的程序执行速度为1500MIPS时,次虚拟机230执行1000MI的处理并随后在每个固定周期的虚拟中断执行用于执行500MI的处理的持续时间的暂停。因此,两台虚拟机(130,230)可以同样地执行1000MIPS的处理。
(针对具有不确定访问时间的存储器装置的处置)
当虚拟机(130,230)访问诸如磁盘、SSD、CD、DVD、或磁带之 类的存储装置(115,215)时,由于存储装置(115,215)的个体差异或老化,针对访问请求的完成等待时间有变化。为了防止该变化导致的不同步,需要适合于较晚完成等待时间,并且发生同步等待,由此导致执行速度减小。
在根据本实施例的容错系统10中,当装置(115,215)是存储装置时,虚拟机(130,230)在内存上仿真装置(115,215),并且用内存访问代替对装置(115,215)的访问,由此能够将对装置(115,215)的读/写请求的完成等待时间减小至零。
在该情况下,对装置(115,215)的读/写请求的完成中断不需要等待实际的完成中断,而是当请求时与内存访问一起将虚拟中断输入至客户OS(140,240),由此能够以共同的同步定时处理读/写请求和完成虚拟中断。因此,对由于完成中断而导致的虚拟中断的同步处理变得不必要,减小了处理负荷,可以防止由于同步等待导致的执行速度的减小。
在内存中仿真的装置(115,215)内容中的改变与来自客户OS(140,240)的访问不同步地反映在装置(115,215)上。在应对方法中,处理可能根据分配内存的位置而不同。
(1)分配虚拟机(130,230)内的内存的情况:
虚拟机(130,230)在分配给虚拟机(130,230)的内存上加载存储装置(115,215)的内容,并用内存访问替换对存储装置的访问。该内存叫做“虚拟存储器”。当更新虚拟存储器的内容时,虚拟机(130,230)与来自客户OS(140,240)的访问不同步地在存储装置(115,215)上反应内容的改变。
具体来说,在以下过程中读写数据。首先,作为虚拟存储器的初始化,在提前分配给虚拟机(130,230)的内存上加载存储装置(115,215)的内容。
在读数据时,当客户OS(140,240)向虚拟存储器请求读数据时,虚拟机(130,230)向客户OS(140,240)通知虚拟存储器上的内容,将读完成的虚拟中断输入至客户OS(140,240)。
在写数据时,当客户OS(140,240)向虚拟存储请求写数据时, 虚拟机(130,230)在虚拟存储中写数据,将写完成的虚拟中断输入至客户OS(140,240)。然后,虚拟机(130,230)异步地将虚拟存储器的改变部分写进存储装置(115,215)。在将数据写进存储装置(115,215)完成后,完成的外部中断被输入至虚拟机(130,230)。但是,不需要生成基于完成的外部中断的虚拟中断。
(2)分配客户OS(140,240)内的内存的情况
当客户OS(140,240)可以使用RAM(随机访问存储器)盘时,在客户OS(140,240)中配置的RAM盘用于存储装置(115,215)的仿真。RAM盘是读和写的等待时间为零并且没有完成中断发生的装置。例如,RAM盘可以被诸如Linux(注册商标)之类的OS使用。
在客户OS(140,240)内的RAM盘上进行关于上述虚拟存储器的读和写,不在虚拟机(130,230)上进行读和写的请求。因为在客户OS(140,240)内部已经完成了处理,针对读/写请求或完成中断的同步处理变得不必要。
具体地,在随后的过程中进行RAM盘的数据读写。首先,作为RAM盘的初始化,提前在客户OS(140,240)的内存上加载存储装置(115,215)的内容。
在读数据时,当客户OS(140,240)向RAM盘请求读数据时,将RAM盘上的存储装置(115,215)的内容通知给客户OS(140,240)。不需要读完成的虚拟中断。
在写数据时,当客户OS(140,240)向RAM盘请求写数据时,数据被写进RAM盘。不需要写完成的虚拟中断。然后,客户OS(140,240)使RAM盘的内容周期性地保存在存储装置(115,215)中。

容错系统和用于执行容错的方法.pdf_第1页
第1页 / 共27页
容错系统和用于执行容错的方法.pdf_第2页
第2页 / 共27页
容错系统和用于执行容错的方法.pdf_第3页
第3页 / 共27页
点击查看更多>>
资源描述

《容错系统和用于执行容错的方法.pdf》由会员分享,可在线阅读,更多相关《容错系统和用于执行容错的方法.pdf(27页珍藏版)》请在专利查询网上搜索。

1、(10)申请公布号 CN 103678022 A (43)申请公布日 2014.03.26 CN 103678022 A (21)申请号 201310429933.8 (22)申请日 2013.09.18 2012-204607 2012.09.18 JP G06F 11/07(2006.01) G06F 9/455(2006.01) (71)申请人 横河电机株式会社 地址 日本东京 (72)发明人 吉田善贵 植原正太 大野毅 (74)专利代理机构 北京天昊联合知识产权代理 有限公司 11112 代理人 陈源 李铭 (54) 发明名称 容错系统和用于执行容错的方法 (57) 摘要 本发明公开了。

2、容错系统和用于执行容错的方 法。所述容错系统包括 : 在主机上形成的主虚拟 机, 主管理程序在该主机中运行, 该主虚拟机被配 置为将基于来自主管理程序的外部中断的虚拟中 断输入至主客户 OS ; 以及在次机上形成的次虚拟 机, 次管理程序在该次机中运行, 该次虚拟机被配 置为基于与主虚拟机所发送的虚拟中断有关的定 时信息来将虚拟中断输入至次客户 OS。主虚拟机 被配置为将关于虚拟中断的定时信息发送至次虚 拟机, 该定时信息包括主客户 OS 在输入虚拟中断 之前执行的分支指令的数量、 并包括输入虚拟中 断时的执行挂起位置。 (30)优先权数据 (51)Int.Cl. 权利要求书 1 页 说明书 。

3、18 页 附图 7 页 (19)中华人民共和国国家知识产权局 (12)发明专利申请 权利要求书1页 说明书18页 附图7页 (10)申请公布号 CN 103678022 A CN 103678022 A 1/1 页 2 1. 一种容错系统, 包括 : 在主机上形成的主虚拟机, 主管理程序在所述主机中运行, 所述主虚拟机被配置为将 基于来自所述主管理程序的外部中断的虚拟中断输入至主客户 OS ; 以及 在次机上形成的次虚拟机, 次管理程序在所述次机中运行, 所述次虚拟机被配置为基 于与所述主虚拟机所发送的虚拟中断有关的定时信息来将虚拟中断输入至次客户 OS, 其中所述主虚拟机被配置为将所述关于虚。

4、拟中断的定时信息发送至所述次虚拟机, 所 述定时信息包括所述主客户 OS 在输入虚拟中断之前执行的分支指令的数量、 并包括输入 虚拟中断时的执行挂起位置。 2. 如权利要求 1 所述的容错系统, 其中所述执行挂起位置由程序计数器值表示。 3. 如权利要求 1 所述的容错系统, 其中所述主客户 OS 和在所述主客户 OS 上运行的应用程序由中间语言来描述, 并且 其中所述执行挂起位置由输入虚拟中断时所执行的中间语言的指令的位置来表示。 4. 如权利要求 1 至 3 中任一项所述的容错系统, 其中所述次虚拟机被配置为 : 当所述定时信息被发送时, 允许所述次客户 OS 操作, 直 至分支指令被执行。

5、的次数达到所述定时信息中所指定的分支指令的数量, 随后在第一次被 执行的执行挂起位置处挂起所述次客户 OS, 并且将虚拟中断输入至所述次客户 OS。 5. 如权利要求 4 所述的容错系统, 其中所述次虚拟机被配置为在所述执行挂起位置处切换上下文, 以挂起所述次客户 OS。 6. 如权利要求 5 所述的容错系统, 其中所述次虚拟机被配置为通过生成上下文切换指令或用于切换上下文的事件来切 换上下文。 7. 如权利要求 4 所述的容错系统, 其中所述次虚拟机被配置为 : 如果所述次虚拟机允许次客户 OS 操作直至分支指令被 执行的次数达到所述定时信息中所指定的分支指令的数量, 且随后在所述执行挂起位。

6、置被 执行之前执行了所述分支指令, 则所述次虚拟机确定发生了故障。 8. 一种用于通过主虚拟机和次虚拟机执行容错的方法, 所述主虚拟机形成在主机上, 主管理程序运行在所述主机中, 所述主虚拟机被配置为将基于来自主管理程序的外部中断 的虚拟中断输入至主客户 OS, 所述次虚拟机形成在次机上, 次管理程序运行在所述次机中, 所述次虚拟机被配置为基于与主虚拟机所发送的虚拟中断有关的定时信息来将虚拟中断 输入至次客户 OS, 所述方法包括 : 将关于虚拟中断的定时信息从主虚拟机发送至次虚拟机, 所述定时信息包括主客户 OS 在输入虚拟中断之前执行的分支指令的数量、 并包括输入虚拟中断时的执行挂起位置。。

7、 权 利 要 求 书 CN 103678022 A 2 1/18 页 3 容错系统和用于执行容错的方法 技术领域 0001 本发明涉及使用虚拟机的容错系统以及使用虚拟机来执行容错的方法。 背景技术 0002 容错系统是这样一种系统, 即使在系统配置的一部分中出现缺陷的情况下, 容错 系统也能够继续操作, 而不会使整个系统崩溃, 并且容错系统尤其适用于要求具有高度有 效性和不间断系统有效性的系统。 例如, 即使在发生硬件故障的情况下, 采用了容错系统的 服务器计算机也可以输出正确的数据, 而不会有对来自外部装置的客户应用程序进行的网 络访问作出响应的通信错误。 0003 如 JP-A-2009-。

8、80695 所公开的, 已知一种在运行于两台彼此通信的计算机上的虚 拟机中实现容错系统的技术。使用虚拟机的容错系统将这两台虚拟机的执行状态同步, 以 进行相同的操作。当在其中一台计算机中出现故障时, 在另一台计算机中操作的虚拟机接 管处理, 由此连续而不中断地提供系统的服务。 0004 在使用虚拟机的容错系统中, 将一台虚拟机作为主虚拟机, 而将另一台虚拟机设 为次虚拟机。 将主虚拟机构造为领先于次虚拟机执行同一操作并接管对关于外部装置进行 输入 / 输出的控制。 0005 通常, 当执行相同程序的两台计算机以完全相同的定时从外部装置接收输入时, 这两台计算机会进行相同的操作, 并且输出相同的。

9、数据。 因此, 当在使用虚拟机的容错系统 中基于外部输入发生中断时, 该容错系统令主虚拟机将中断发生的时刻作为同步信息发送 至次虚拟机。然后, 以一定延迟运行的次虚拟机在与同步信息所通知的时刻相同的时刻产 生虚拟中断, 由此主虚拟机和次虚拟机以彼此同步的方式执行相同的操作。 0006 图 6 是示出了传统的使用虚拟机的容错系统的配置的框图。如图 6 所示, 容错系 统 60 包括了在网络上彼此连接的主机 600 和次机 700。 0007 在主机 600 中, 主管理程序 620 在作为物理计算机环境的主硬件 610 上运行, 并且 主机 600 中配置了主虚拟机 630。在主虚拟机 630 。

10、中运行主客户 OS(操作系统) 640, 并且 在主客户 OS640 上执行应用程序 650。 0008 主硬件 610 配备有诸如 CPU (中央处理单元) 、 内存、 网络接口卡 (NIC) 、 和存储器之 类的多种装置。 0009 主虚拟机 630 分配有主硬件 610 的一部分硬件资源, 并且在虚拟计算机环境中接 管与外部装置相关的输入 / 输出的控制。主虚拟机 630 由主管理程序 620 管理。 0010 同样, 在次机 700 中, 次管理程序 720 在作为物理计算机环境的次硬件 710 上运 行, 并且次机 700 中配置了次虚拟机 730。在次虚拟机 730 中运行次客户 。

11、OS740, 并且在次 客户 OS740 上执行应用程序 750。 0011 次硬件 710 配备有诸如 CPU、 内存、 网络接口卡 (NIC) 、 和存储器之类的多种装置。 0012 次虚拟机 730 分配有次硬件 710 的一部分硬件资源, 并且在虚拟计算机环境中与 主虚拟机 630 同步地操作。次虚拟机 730 由次管理程序 720 管理。 说 明 书 CN 103678022 A 3 2/18 页 4 0013 在传统的容错系统 60 中, 在以下过程中主虚拟机 630 与次虚拟机 730 的执行状态 彼此同步。 0014 一旦接收到来自主硬件 610 的外部中断, 主管理程序 62。

12、0 则将该外部中断输入至 主虚拟机 630。 0015 然后, 主虚拟机 630 将虚拟中断输入至主客户 OS640。现在, 将要描述将虚拟中断 从主虚拟机 630 输入至主客户 OS640。 0016 当在主客户 OS640 的处理期间出现诸如外部中断、 特权指令、 或异常之类的虚拟 机上下文切换事件时, 主客户OS640的处理被挂起, 客户OS上下文被切换至虚拟机上下文, 处理转移至主虚拟机 630。 0017 若主虚拟机630根据在其定时时刻的各种事件而需要在主客户OS640上输入虚拟 中断, 则主虚拟机 630 配置虚拟中断。当配置了虚拟中断时, 主虚拟机 630 终止处理, 当处 理。

13、返回至在生成事件时刻被挂起的主客户 OS640 时, 虚拟中断被输入至主客户 OS640。 0018 当主虚拟机 630 将虚拟中断输入至主客户 OS640 时, 主虚拟机 630 将同步信息发 送至次虚拟机730。 同步信息包括对虚拟中断的识别信息、 以及用于输入虚拟中断的同步定 时信息。 0019 同步定时信息是关于在与虚拟中断被输入至主客户 OS640 相同的时刻将虚拟中 断输入至次客户 OS740 的信息, 并且包括指示了执行挂起位置和 CPU 特有的执行指令的数 量的信息。 0020 作为执行挂起位置, 可以使用表示当输入虚拟中断时所执行的指令地址的程序计 数器的值。执行指令的数量可。

14、以由 CPU 中提供的性能计数器的 CPU 执行指令数量计数器来 测量。 0021 在测量执行指令数量的情况下, 当主虚拟机 630 将虚拟中断输入至主客户 OS640 时, 将 CPU 执行指令数量计数器清零, 并且在重新开始执行主客户 OS640 前使 CPU 执行指令 数量计数器启动。因此, 计算出了自先前的虚拟中断输入以后由主客户 OS640 执行的指令 的数量。 0022 当仅有执行挂起位置被用作同步定时信息时, 在表示执行挂起位置的指令包括在 循环处理中或者包括在条件分支目的地中的情况下无法指定虚拟中断输入的时刻, 这是因 为每次当进行到循环或条件分支进程都会执行该指令。 0023。

15、 同样, 当仅有执行指令的数量被用作同步定时信息时, 由于诸如流水线处理之类 的高速化技术, 使得次客户 OS740 不能以所指定的执行指令的数量来挂起, 并且不可避免 地在超出执行指令的数量后被挂起。由此, 虚拟中断不能在与主客户 OS640 相同的时刻被 输入到次客户 OS740。 0024 在该情形下, 将执行挂起位置和执行指令的数量结合在一起作为同步定时信息, 并且每次在次客户 OS740 中对执行挂起位置所表示的指令进行处理时确认执行指令的数 量。因此, 在与将虚拟中断输入到主客户 OS640 中相同的时刻来将次客户 OS740 挂起。 0025 因此, 当在挂起了主客户 OS640。

16、 的执行之后主虚拟机 630 将虚拟中断输入至主客 户 OS640 时, 主虚拟机 630 获取挂起主客户 OS640 的执行时刻的程序计数器的值、 以及 CPU 执行指令数量计数器的值, 以生成同步定时信息。然后, 主虚拟机 630 将有关虚拟中断的识 别信息和同步定时信息发送至次虚拟机 730 作为同步信息。 说 明 书 CN 103678022 A 4 3/18 页 5 0026 接收到了同步信息的次虚拟机 730 根据同步定时信息来挂起次客户 OS740 的执 行。将参照图 7 的流程图来描述该情形下次虚拟机 730 的操作。 0027 将暂停 (break)指令嵌入同步定时信息的执行。

17、挂起位置所指定的程序位置中 (S401) , 并且重新启动次客户 OS740 (S402) 。然后, 当次客户 OS740 停止 (S403 中为是) 时, 确认 CPU 执行指令数量计数器, 并且若计数器值匹配执行指令的指定数量 (S404 中为是) , 则次客户 OS740 在停止位置处挂起 (S405) 。若计数器值不匹配执行指令的指定数量 (S404 中为否) , 则次客户 OS740 重新启动 (S402) 并重复确认执行指令的数量。 0028 当次虚拟机 730 挂起次客户 OS740 时, 次虚拟机 730 根据同步信息的虚拟中断 识别信息来配置虚拟中断 (S406) , 并且重。

18、新启动次客户 OS740(S407) 。因此, 在与主客户 OS640 相同的时刻将虚拟中断输入至次客户 OS740, 并且主虚拟机 630 和次虚拟机 730 的执 行状态彼此同步。 0029 当在主机600和次机700的任何一个中发生硬件故障时, 打乱了执行状态的同步。 当执行状态的同步被打乱时, 主虚拟机630和次虚拟机730之间的输出数据的值变得不同。 在该情况下, 容错系统 60 对比次虚拟机 730 的输出来检查主虚拟机 630 的输出, 若输出数 据的值彼此不同, 则确定发生硬件故障。 0030 为了进行该故障确定处理, 次虚拟机 730 装配有输出数据检查单元 731, 其搜集。

19、主 虚拟机 630 的输出数据, 并对比次虚拟机 730 的输出数据来检查所搜集的输出数据。 0031 如上所述, 从主虚拟机 630 发送至次虚拟机 730 的同步信息包括关于虚拟中断的 识别信息和同步定时信息, 同步定时信息包括由程序计数器表示的执行挂起位置、 以及由 程序计数器测量的 CPU 执行指令的数量。 0032 但是, 存在这样的情况, 对于特定 CPU 特有的特定指令可能发生性能计数器的计 数遗漏, 并且有可能未能准确地对在输入虚拟中断之前由主客户 OS640 执行的 CPU 执行指 令的数量进行计数。例如, 在英特尔公司制造的 Pentium(注册商标) 处理器中, 对于当 。

20、REP 指令的执行由于发生外部中断而被挂起时的 REP 指令的执行就没有被计入。由此, CPU 执 行指令计数可能变得小于执行指令的实际数量。 0033 这样, 因为对 CPU 执行指令数量的计数可能不准确, 所以不能准确地将主客户 OS640 的虚拟中断输入定时发送至次虚拟机 730。 0034 同样, 在挂起次客户 OS740 的执行过程中, 若使用如传统系统中的嵌入暂停指 令以配置断点的技术, 则当在虚拟机 (630,730)上调试客户 OS(640,740)或应用程序 (650,750) 时, 挂起干扰了调试的断点, 从而不利地影响到彼此的处理。因为可能存在用户 想要对彼此同步的虚拟机。

21、 (630,730) 上的应用程序 (650,750) 操作进行检查的情况, 所以 希望避免断点的干扰。 0035 同样, 在没有虚拟化支持功能的 CPU 中, 通过设置断点不能使处理从次客户 OS740 转移至次虚拟机 730。 发明内容 0036 本发明的示例性实施例提供了一种容错系统和一种用于执行容错的方法, 其将基 于主虚拟机中的外部中断的虚拟中断以相同的定时输入至次虚拟机, 从而让主虚拟机和次 虚拟机执行平行同步操作, 其中主虚拟机输入的虚拟中断定时被准确地发送至次虚拟机, 说 明 书 CN 103678022 A 5 4/18 页 6 从而在相同的定时将虚拟中断输入至次虚拟机。 0。

22、037 根据本发明的示例性实施例的容错系统, 包括 : 0038 在主机上形成的主虚拟机, 主管理程序在所述主机中运行, 主虚拟机被配置为将 基于来自主管理程序的外部中断的虚拟中断输入至主客户 OS ; 以及 0039 在次机上形成的次虚拟机, 次管理程序在所述次机中运行, 次虚拟机被配置为基 于与主虚拟机所发送的虚拟中断有关的定时信息来将虚拟中断输入至次客户 OS, 0040 其中主虚拟机被配置为将关于虚拟中断的定时信息发送至次虚拟机, 所述定时信 息包括主客户 OS 在输入虚拟中断之前执行的分支指令的数量、 并包括输入虚拟中断时的 执行挂起位置。 0041 执行挂起位置可以由程序计数器的值。

23、表示。 0042 主客户 OS 和在主客户 OS 上运行的应用程序可以由中间语言来描述, 并且执行挂 起位置可以由输入虚拟中断时所执行的中间语言的指令位置来表示。 0043 次虚拟机可以被配置为 : 当定时信息被发送时, 使得次客户 OS 操作, 直至分支指 令被执行的次数达到定时信息中所指定的分支指令的数量, 随后在第一次被执行的执行挂 起位置处将次客户 OS 挂起, 并且将虚拟中断输入至次客户 OS。 0044 次虚拟机可以被配置为在执行挂起位置处切换上下文, 以挂起次客户 OS。 0045 次虚拟机可以被配置为通过生成上下文切换指令或用于切换上下文的事件来切 换上下文。 0046 次虚拟。

24、机可以被配置为, 如果所述次虚拟机使得次客户 OS 操作直至分支指令被 执行的次数达到定时信息中所指定的分支指令的数量, 且随后在执行挂起位置被执行之前 执行了分支指令, 则次虚拟机确定发生了故障。 0047 根据本发明的示例性实施例的用于通过主虚拟机和次虚拟机执行容错的方法, 所 述主虚拟机形成在主机上, 主管理程序运行在所述主机中, 所述主虚拟机被配置为将基于 来自主管理程序的外部中断的虚拟中断输入至主客户 OS, 所述次虚拟机形成在次机上, 次 管理程序运行在所述次机中, 所述次虚拟机被配置为基于与主虚拟机所发送的虚拟中断有 关的定时信息来将虚拟中断输入至次客户 OS, 所述方法包括 :。

25、 0048 将关于虚拟中断的定时信息从主虚拟机发送至次虚拟机, 所述定时信息包括主客 户 OS 在输入虚拟中断之前执行的分支指令的数量、 并包括输入虚拟中断时的执行挂起位 置。 0049 根据本发明的示例性实施例, 在将基于主虚拟机中的外部中断的虚拟中断以相同 的定时输入至次虚拟机从而使得主虚拟机和次虚拟机执行平行同步操作的容错系统和用 于执行容错的方法中, 主虚拟机输入的虚拟中断定时可以被准确地发送至次虚拟机, 从而 以相同的定时将虚拟中断输入至次虚拟机。 附图说明 0050 图 1 是示出了根据一个实施例的容错系统的配置的框图。 0051 图 2 是示出了主虚拟机和次虚拟机的并行同步操作的。

26、概要的流程图。 0052 图3A和图3B是示出了通过分支数和执行挂起位置来识别虚拟中断输入位置的示 图。 说 明 书 CN 103678022 A 6 5/18 页 7 0053 图 4 是示出了当 CPU 架构的细节已知时, 虚拟中断定时调节操作的具体过程的流 程图。 0054 图5是示出了当CPU架构的细节未知时, 虚拟中断定时调节的具体过程的流程图。 0055 图 6 是示出了相关技术中的使用虚拟机的容错系统的配置的框图。 0056 图 7 是示出了让已经接收到同步信息的次虚拟机根据同步定时信息来挂起次客 户 OS 的执行的操作流程图。 具体实施方式 0057 将参照附图来描述根据本发明。

27、的实施例。图 1 是示出了根据本实施例的容错系统 的配置的框图。如图 1 所示, 容错系统 10 包括通过网络彼此连接的主机 100 和次机 200。 主机 100 和次机 200 可以由诸如服务器计算机或个人计算机之类的通用计算机来配置。 0058 在主机 100 中, 主管理程序 120 在作为物理计算机环境的主硬件 110 上运行, 并且 主虚拟机 130 由主管理程序 120 构成。在主虚拟机 130 中, 主客户 OS140 运行, 并且在主客 户 OS140 上执行应用程序 150。 0059 主硬件 110 配备有以下多种装置, 诸如 CPU111、 内存 112、 定时器 11。

28、3、 网络接口卡 (NIC) 114、 和存储器之类的装置 115。 0060 主虚拟机 130 分配有主硬件 110 的部分硬件资源, 并且接管对于与外部装置相关 的输入 / 输出的控制。主虚拟机 130 用作虚拟计算机环境。主虚拟机 130 由主管理程序 120 管理。主程序管理 120 能够管理多个主虚拟机 130。 0061 同样, 在次机 200 中, 次管理程序 220 在作为物理计算机环境的次硬件 210 上运 行, 并且次虚拟机 230 由次管理程序 220 构成。在次虚拟机 230 中, 次客户 OS240 运行, 并 且在次客户 OS240 上执行应用程序 250。 006。

29、2 次硬件 210 配备有以下多种装置, 诸如 CPU211、 内存 212、 定时器 213、 网络接口卡 (NIC) 214、 和存储器之类的装置 215。 0063 次虚拟机 230 分配有次硬件 210 的部分硬件资源, 并且在虚拟计算机环境中与主 虚拟机 130 同步地运行。次虚拟机 230 由次管理程序 220 管理。次管理程序 220 能够管理 多个次虚拟机 230。 0064 在容错系统 10 中, 仅由主虚拟机 130 来控制与外部装置相关的输入 / 输出, 主虚 拟机 130 在次虚拟机 230 之前运行。 0065 在本实施例中, 为主虚拟机 130 提供了虚拟中断生成单。

30、元 131 和同步信息生成单 元 135, 并且为次虚拟机 230 提供虚拟中断输入转换单元 231 和同步校正单元 235。 0066 主虚拟机 130 的虚拟中断生成单元 131 生成虚拟中断, 该虚拟中断是通过调节中 断频率和实际从主管理程序 120 输入外部中断输入的定时而得到的, 并且该虚拟中断生成 单元 131 将生成的虚拟中断输入至主客户 OS140。为虚拟中断生成单元 131 提供了用于调 节中断频率的中断频率调节单元 132 以及用于调节中断定时的中断定时调节单元 133。 0067 主虚拟机130的同步信息生成单元135基于执行挂起位置和分支执行数量来指定 被调节并输入至主。

31、客户 OS140 的虚拟中断的定时。同步信息生成单元 135 配备有用于计算 在输入虚拟中断以前主客户 OS140 中的程序分支数的分支执行数量生成单元 136。 0068 同步信息生成单元 135 在主虚拟机 130 和次虚拟机 230 的并行同步操作前, 从次 说 明 书 CN 103678022 A 7 6/18 页 8 虚拟机230搜集操作性能信息。 当主硬件110和次硬件210之间的硬件配置不同时, 同步信 息生成单元 135 生成用于校正处理速度差的同步校正信息, 并且将同步校正信息发送至次 虚拟机 230 的同步校正单元 235。同步信息生成单元 135 按场合要求来调节主虚拟机。

32、 130 的操作。 0069 次虚拟机 230 的虚拟中断输入转换单元 231 根据从主虚拟机 130 发送的同步信 息的同步定时信息来使次客户 OS240 的处理前移至虚拟中断输入位置, 并且挂起次客户 OS240。然后, 虚拟中断输入转换单元 231 接收虚拟中断。为了使次客户 OS240 的处理前移 至虚拟中断输入位置, 并且挂起次客户 OS240, 为虚拟中断输入转换单元 231 提供了指定分 支数执行单元 232 和指定位置上下文切换单元 233。 0070 次虚拟机 230 的同步校正单元 235 在并行同步操作之前基于从主虚拟机 130 的同 步信息生成单元 135 发送的同步校。

33、正信息来调节次虚拟机的操作。同步校正单元 235 按场 合要求在并行同步操作中调节主虚拟机 130 和次虚拟机 230 之间的处理速度差。 0071 (并行同步操作的概要) 0072 随后, 将参照图 2 的流程图来描述在如上所述配置的容错系统中主虚拟机 130 和 次虚拟机 230 彼此之间使执行状态同步的并行同步操作的概要。具体地, 将描述当主管理 程序 120 从主硬件 110 接收到外部中断时的操作序列。 0073 一旦接收到来自主硬件 110 的外部中断 (S101) , 主管理程序 120 就将外部中断输 入至主虚拟机 130(S102) 。 0074 从主管理程序 120 接收到。

34、外部中断的主虚拟机 130 将虚拟中断输入至主客户 OS140。在该情形下, 主虚拟机 130 不针对所有输入的外部中断将虚拟中断输入至主客 户 OS140, 而中断频率调节单元 132 对输入至主客户 OS140 的虚拟中断的频率进行调节 (S103) 。 0075 在使用虚拟机的容错系统 10 中, 当把虚拟中断输入至主客户 OS104 时, 为了同步 彼此的执行状态, 还要进行在相同时刻将虚拟中断输入至次客户 OS240 的处理。由此, 当在 主虚拟机 130 中频繁地出现虚拟中断时, 增加了用于对执行状态进行同步的处理负荷, 并 且减少了要分配给原服务的诸如 CPU 时间或通信带宽之类。

35、的资源。 0076 在根据本实施例的容错系统10中, 中断频率调节单元132调节虚拟中断的频率以 使得用于对执行状态进行同步的处理负荷最小, 并且防止用于原服务的处理能力减小。稍 后将描述由中断频率调节单元 132 所执行的中断频率调节操作的细节。 0077 作为由中断频率调节单元 132 调节虚拟中断的频率 (S103) 的结果, 若确定生成 了虚拟中断 (S104 中为是) , 则将虚拟中断输入至主客户 OS140。若确定没有生成虚拟中断 (S104 中为否) , 则该处理完成, 进程等待后续的来自主管理程序 120 的外部中断的输入。 0078 当虚拟中断被输入至主客户 OS140 时,。

36、 应在一个位置挂起主客户 OS140, 在同一位 置处将次客户 OS240 也挂起。 0079 例如, 当根据诸如外部中断之类的虚拟机上下文切换事件挂起主客户 OS140 以传 送对主虚拟机 130 的控制时, 主客户 OS140 的挂起位置可能在临界段中。该临界段是当多 个处理同时在单个资源上执行时用来毁损进程的程序段, 并且是由程序执行诸如暂停指令 无效之类的互斥控制所在的段。 0080 在该情况下, 当虚拟中断在位于临界段中的挂起位置处输入至主客户 OS140 时, 说 明 书 CN 103678022 A 8 7/18 页 9 即使暂停指令被嵌入相同的位置中, 次客户 OS240 也不。

37、能在相同的位置处挂起, 而是在处 理该临界段之后将次客户 OS240 挂起。在这种情况下, 虚拟中断位置转移, 执行状态不同 步。 0081 在该情况下, 在根据本实施例的容错系统 10 中, 中断定时调节单元 133 调节虚拟 中断定时 (S105) , 并且在避开临界段的情况下挂起主客户 OS140, 由此能够在相同的位置 处挂起第二客户 OS240。稍后将描述中断定时调节单元 133 进行的虚拟中断定时调节操作 的细节。 0082 当调节了虚拟中断定时时, 主虚拟机 130 将虚拟中断输入至主客户 OS140 (S106) 。 然后, 同步信息生成单元 135 生成同步信息 (S107)。

38、 。 0083 同步信息包括关于虚拟中断的识别信息和同步定时信息。 同步定时信息包括由程 序计数器表示的执行挂起位置, 以及由性能计数器测量的 CPU 执行指令的数量。 0084 但是, 对于特定 CPU 特有的特殊指令, 存在这样的情况 : 可能发生性能计数器的计 数遗漏, 并且有可能未能准确地对在输入虚拟中断以前由主客户 OS140 执行的 CPU 执行指 令的数量进行计数。例如, 在英特尔公司制作的 Pentium(注册商标) 处理器中, 对于当 REP 指令的执行由于发生外部中断而被挂起时的 REP 指令的执行就没有被计入。由此, CPU 执 行指令计数可能变得小于执行指令的实际数量。。

39、 0085 这样, 因为对 CPU 执行指令数量的计数可能不准确, 所以根据本实施例的容错系 统 10 不将 CPU 执行指令的数量用于同步定时信息。 0086 但是, 因为程序通常包括大量的循环语句、 跳转语句、 和分支语句, 所以相同的指 令会执行多次。为此, 可能无法仅通过执行挂起位置来指定虚拟中断的输入定时。 0087 在该情况下, 根据本实施例的容错系统 10 使得同步定时信息包括执行挂起位置 和分支数。分支数代表从前一虚拟中断至当前虚拟中断所执行的分支指令的数量, 该数量 是执行顺序从依次执行发生改变的次数。 0088 通过提前在主客户 OS140 中计算分支数, 可以通过找出在执。

40、行了所计数量的分支 之后被第一次执行的位置, 来将执行挂起位置正确地指定为次客户 OS240 中的虚拟中断输 入位置。 0089 例如, 如图 3A 所示, 假设当指令代码 CodeA、 CodeB、 CodeC、 . 被分配于指令地址 a1、 a2、 a3、 , 并且 CodeC 至 CodeG 循环三次时, 在主客户 OS140 中的第十六次程序执行顺 序的 “a6” 处输入虚拟中断。该同步定时可以由分支数的计数值 “2” 和执行挂起位置 “a6” 表示。 0090 在该情况下, 在次虚拟机 230 中, 对分支数计数两次, 在第一次执行挂起位置 “a6” 处挂起次客户 OS240, 由此。

41、能够在与主客户 OS140 相同的定时处输入虚拟中断。 0091 由此为了执行对分支数进行计数的处理, 为同步信息生成单元 135 提供了分支执 行数生成单元136。 在指令代码级别中, 所有的循环语句、 跳转语句、 和分支语句都被分支指 令替代。因此, 在运行应用程序 150 时, 分支执行数生成单元 136 对由主客户 OS140 执行的 分支指令的数量进行计数, 由此能够对分支数计数。 为了对分支数计数, 可以使用性能计数 器。 0092 返回至图 2 的描述, 主虚拟机 130 生成包括有关虚拟中断的识别信息和同步定时 信息在内的同步信息, 然后将同步信息传送至次虚拟机 230(S10。

42、8) 。 说 明 书 CN 103678022 A 9 8/18 页 10 0093 为了根据同步定时信息来挂起次客户 OS240 的执行, 在接收到同步信息的次虚拟 机 230 中, 指定分支数执行单元 232 首先对执行次客户 OS240 时的分支数进行计数。当分 支计数达到同步定时信息中的分支数所表示的值时, 次虚拟机 230 挂起次客户 OS240。也 就是, 次虚拟机 230 执行次客户 OS240 的次数达到指定分支数量 (S109) 。为此, 在分支计 数达到指定分支数量以前不需要监控执行挂起位置和 CPU 执行指令的数量, 减小了处理负 荷。稍后将描述指定分支数执行单元 232。

43、 所执行的指定分支数执行操作的细节。 0094 指定位置上下文切换单元 233 在同步定时信息的执行挂起位置所表示的位置处 挂起次客户 OS240 的执行 (S110) 。 0095 在对次客户 OS240 的执行进行挂起过程中, 若使用了如在传统系统技术中嵌入 暂停指令以配置断点的技术, 则当客户 OS(140,240)或应用程序 (150,250)在虚拟机 (130,230) 中调试时, 挂起干扰了调试的断点, 并且不利地影响到相互的处理。因为可能存 在用户想要对彼此同步的虚拟机 (130,230) 上的应用程序 (150,250) 操作进行检查的情 况, 所以希望避免对断点的干扰。 00。

44、96 同样, 在不具有虚拟化支持功能的 CPU 中, 处理不能通过设置断点而从次客户 OS240 转移至次虚拟机 230。 0097 在该情况下, 在根据本实施例的容错系统 10 中, 指定位置上下文切换单元 233 执 行上下文切换, 而不使用暂停指令来挂起次客户 OS240 的执行。稍后将描述指定位置上下 文切换单元 233 执行的指定位置上下文切换操作的细节。 0098 当次虚拟机 230 挂起次客户 OS240 时, 次虚拟机 230 根据同步信息的虚拟中断识 别信息来配置虚拟中断以重新启动次客户OS240。 因此, 在与主客户OS140相同的定时处将 虚拟中断输入至次客户 OS240。

45、(S111) , 并且主虚拟机 130 和次虚拟机 230 的执行状态彼此 同步。 0099 若在主机 100 和次机 200 之一中出现硬件故障, 则执行状态变为不同步。在本实 施例中, 执行状态可以准确地彼此同步, 而不受到性能计数器的计数遗漏的影响。为此, 若 硬件正常, 则不会扰乱执行状态的同步。因此, 对执行状态的同步的扰乱被检测, 由此能够 检测到硬件故障。 0100 由于传统系统不能确定对执行状态的同步的扰动来源于硬件故障还是来源于对 执行指令数量的计数遗漏所产生的影响, 所以需要检查输出数据。 另一方面, 在根据本实施 例的容错系统 10 中, 因为可以通过执行状态的同步的扰动。

46、来检测到硬件故障, 因此不需要 检查用于故障检测的输出数据。因此, 可以减少用于检查输出数据的 CPU 处理负荷和通信 负荷。同样, 可以立即检测硬件故障的发生。 0101 对执行状态的同步的扰动检测可通过在例如次虚拟机 230 的虚拟中断输入转换 单元 231 中检测同步定时信息所指定的执行挂起位置被执行之前分支数超过同步定时信 息中所指定的次数时的同步扰乱来确定。 0102 (各块的操作细节) 0103 接下来将参照第一实施例、 第二实施例、 和第三实施例来描述容错系统 10 中各块 的操作。 0104 在传统容错系统中, 假设主机的 CPU 和次机的 CPU 具有相同的架构。这是因为传 。

47、统的同步技术依赖于 CPU 架构和 CPU 操作规范, 若 CPU 的类型不同, 则执行指令均不能彼此 说 明 书 CN 103678022 A 10 9/18 页 11 同步, 并且可能不同步。 0105 另一方面, 如第一实施例和第二实施例所述, 根据本各个实施例的系统并不仅适 用于主机 100 的 CPU111 和次机 200 的 CPU211 具有相同架构的情况, 而是还适用于架构不 同的情况。 0106 通常, 当容错系统被操作很长一段时期后, 由于故障和老化, 该装置强制被新的取 代。在该情况下, 很难准备与先前的装置具有相同规范的装置。为此, 根据本实施例的容错 系统 10 具有。

48、即使 CPU 架构不同也能够继续并行同步操作的结构。 0107 0108 作为第一实施例, 将描述主机 100 的 CPU111 和次机 200 的 CPU211 具有相同架构 的情况下的操作。在本说明书中, 相同的 CPU 架构意味着 CPU 指令集在两个处理器之间具 有兼容性。 0109 在该情况下, 主虚拟机 130 和次虚拟机 230 通过同步 CPU 指令级来执行并行同步 操作。为此, 在两台虚拟机 (130, 230) 中, 客户 OS(140,240) 和应用程序 (150,250) 的程序 通常相对于 CPU(111,211) 具有符合本机 CPU 指令代码的代码格式。假设该并。

49、行同步操作 叫做 “CPU 指令同步模式” 。 0110 (中断频率调节操作) 0111 首先, 将描述中断频率调节单元 132 执行的中断频率调节操作 (S103) 。主虚拟机 130 的中断频率调节单元 132 不会输入针对所有外部中断的虚拟中断, 而是将虚拟中断的 频率调节至达到应用程序 150 所需的性能和精度以及容许的通信延迟的程度。 0112 通常, 可以将外部中断分类为使用定时器 113 的固定周期中断和使用网络接口卡 (NIC) 114 或装置 115 的非固定周期中断。中断频率调节单元 132 分别根据固定周期中断 和非固定周期中断来执行频率的调节。 0113 在固定周期的外部中断中, 通过省略一些外部中断来以每固定周期的几个外部中 断一次的速度来将虚拟中断输入到主客户 OS140。 0114 例如, 当固定周期的。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1