CN103678022B - 容错系统和用于执行容错的方法 - Google Patents

容错系统和用于执行容错的方法 Download PDF

Info

Publication number
CN103678022B
CN103678022B CN201310429933.8A CN201310429933A CN103678022B CN 103678022 B CN103678022 B CN 103678022B CN 201310429933 A CN201310429933 A CN 201310429933A CN 103678022 B CN103678022 B CN 103678022B
Authority
CN
China
Prior art keywords
virtual machine
host
virtual
interrupt
time
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201310429933.8A
Other languages
English (en)
Other versions
CN103678022A (zh
Inventor
吉田善贵
植原正太
大野毅
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Yokogawa Electric Corp
Original Assignee
Yokogawa Electric Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Yokogawa Electric Corp filed Critical Yokogawa Electric Corp
Publication of CN103678022A publication Critical patent/CN103678022A/zh
Application granted granted Critical
Publication of CN103678022B publication Critical patent/CN103678022B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1479Generic software techniques for error detection or fault masking
    • G06F11/1482Generic software techniques for error detection or fault masking by means of middleware or OS functionality
    • G06F11/1484Generic software techniques for error detection or fault masking by means of middleware or OS functionality involving virtual machines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/1675Temporal synchronisation or re-synchronisation of redundant processing components
    • G06F11/1683Temporal synchronisation or re-synchronisation of redundant processing components at instruction level
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/1675Temporal synchronisation or re-synchronisation of redundant processing components
    • G06F11/1687Temporal synchronisation or re-synchronisation of redundant processing components at event level, e.g. by interrupt or result of polling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/1675Temporal synchronisation or re-synchronisation of redundant processing components
    • G06F11/1691Temporal synchronisation or re-synchronisation of redundant processing components using a quantum
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3409Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/202Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where processing functionality is redundant
    • G06F11/2038Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where processing functionality is redundant with a single idle spare processing component
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/2097Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements maintaining the standby controller/processing unit updated

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Hardware Redundancy (AREA)

Abstract

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

Description

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

Claims (10)

1.一种容错系统,包括:
在主机上形成的主虚拟机,主管理程序在所述主机中运行,所述主虚拟机将基于来自所述主管理程序的外部中断的虚拟中断输入至主客户OS;以及
在次机上形成的次虚拟机,次管理程序在所述次机中运行,所述次虚拟机基于与虚拟中断有关的定时信息来将虚拟中断输入至次客户OS,所述主虚拟机将所述定时信息发送至所述次虚拟机,
其中所述主虚拟机将所述关于虚拟中断的定时信息发送至所述次虚拟机,所述定时信息包括所述主客户OS在输入虚拟中断之前执行的分支指令的数量、并包括输入虚拟中断时的执行挂起位置,
其中,当所述定时信息被发送时,所述次虚拟机允许所述次客户OS操作,直至分支指令被重复的次数与所述定时信息中所指定的分支指令的数量相同,随后在第一次被执行的执行挂起位置处挂起所述次客户OS,并且将虚拟中断输入至所述次客户OS,并且
其中,如果所述次虚拟机允许次客户OS操作直至分支指令被执行的次数达到所述定时信息中所指定的分支指令的数量,且随后在所述执行挂起位置被执行之前执行了所述分支指令,则所述次虚拟机确定发生了故障。
2.如权利要求1所述的容错系统,
其中所述执行挂起位置由程序计数器值表示。
3.如权利要求1所述的容错系统,
其中,分支指令的数量包括重复指令代码的循环的数量。
4.如权利要求1所述的容错系统,
其中所述次虚拟机在所述执行挂起位置处切换上下文,以挂起所述次客户OS。
5.如权利要求4所述的容错系统,
其中所述次虚拟机通过生成上下文切换指令或用于切换上下文的事件来切换上下文。
6.如权利要求1所述的容错系统,
其中多个外部中断中的仅仅一部分对应于虚拟中断。
7.如权利要求1所述的容错系统,其中所述主机的系统架构不同于所述次机的系统架构。
8.一种容错系统,包括:
在主机上形成的主虚拟机,主管理程序在所述主机中运行,所述主虚拟机将基于来自所述主管理程序的外部中断的虚拟中断输入至主客户OS;以及
在次机上形成的次虚拟机,次管理程序在所述次机中运行,所述次虚拟机基于与虚拟中断有关的定时信息来将虚拟中断输入至次客户OS,所述主虚拟机将所述定时信息发送至所述次虚拟机,
其中所述主虚拟机将所述关于虚拟中断的定时信息发送至所述次虚拟机,所述定时信息包括所述主客户OS在输入虚拟中断之前执行的分支指令的数量、并包括输入虚拟中断时的执行挂起位置,
其中所述主客户OS和在所述主客户OS上运行的应用程序由中间语言来描述,
其中所述执行挂起位置由输入虚拟中断时所执行的中间语言的指令的位置来表示,
其中,中间语言指令转换部包括:对在中间语言级别执行的分支指令的数量进行计数,以及以分支指令的数量执行中间语言。
9.如权利要求8所述的容错系统,
其中,所述主虚拟机对所述执行挂起位置是否为CPU指令级别的临界段以及是否也是中间语言级别的临界段进行确定,以避免所述执行挂起位置成为临界段。
10.一种用于通过主虚拟机和次虚拟机执行容错的方法,所述主虚拟机形成在主机上,主管理程序运行在所述主机中,所述主虚拟机被配置为将基于来自主管理程序的外部中断的虚拟中断输入至主客户OS,所述次虚拟机形成在次机上,次管理程序运行在所述次机中,所述次虚拟机被配置为基于与主虚拟机所发送的虚拟中断有关的定时信息来将虚拟中断输入至次客户OS,所述方法包括:
将关于虚拟中断的定时信息从主虚拟机发送至次虚拟机,所述定时信息包括主客户OS在输入虚拟中断之前执行的分支指令的数量、并包括输入虚拟中断时的执行挂起位置,
其中,当所述定时信息被发送时,所述次虚拟机允许所述次客户OS操作,直至分支指令被重复的次数与所述定时信息中所指定的分支指令的数量相同,随后在第一次被执行的执行挂起位置处挂起所述次客户OS,并且将虚拟中断输入至所述次客户OS,并且
其中,如果所述次虚拟机允许次客户OS操作直至分支指令被执行的次数达到所述定时信息中所指定的分支指令的数量,且随后在所述执行挂起位置被执行之前执行了所述分支指令,则所述次虚拟机确定发生了故障。
CN201310429933.8A 2012-09-18 2013-09-18 容错系统和用于执行容错的方法 Active CN103678022B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP2012204607A JP5630671B2 (ja) 2012-09-18 2012-09-18 フォールトトレラントシステム
JP2012-204607 2012-09-18

Publications (2)

Publication Number Publication Date
CN103678022A CN103678022A (zh) 2014-03-26
CN103678022B true CN103678022B (zh) 2016-08-31

Family

ID=49182170

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310429933.8A Active CN103678022B (zh) 2012-09-18 2013-09-18 容错系统和用于执行容错的方法

Country Status (4)

Country Link
US (1) US9400666B2 (zh)
EP (1) EP2709009B1 (zh)
JP (1) JP5630671B2 (zh)
CN (1) CN103678022B (zh)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8201169B2 (en) * 2009-06-15 2012-06-12 Vmware, Inc. Virtual machine fault tolerance
US10613789B1 (en) * 2014-03-31 2020-04-07 EMC IP Holding Company LLC Analytics engine using consistent replication on distributed sites
US9430284B2 (en) * 2014-06-26 2016-08-30 Vmware, Inc. Processing virtual machine objects through multistep workflows
US9286105B1 (en) 2015-03-16 2016-03-15 AO Kaspersky Lab System and method for facilitating joint operation of multiple hypervisors in a computer system
CN105468434A (zh) * 2015-12-11 2016-04-06 浪潮(北京)电子信息产业有限公司 一种处理虚拟机异常的方法及装置
US10374874B2 (en) * 2016-10-18 2019-08-06 Nicira, Inc. Reducing data plane disruption in a virtual switch
CN107479941A (zh) * 2017-09-26 2017-12-15 深圳市茁壮网络股份有限公司 一种程序容错方法及程序容错装置
JP7327235B2 (ja) 2020-03-24 2023-08-16 横河電機株式会社 フォールトトレラントシステム
CN114741233A (zh) * 2020-12-23 2022-07-12 华为技术有限公司 快速启动方法

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH086800A (ja) * 1994-06-16 1996-01-12 Toshiba Corp データ処理装置及びマイクロプロセッサ
US6496847B1 (en) * 1998-05-15 2002-12-17 Vmware, Inc. System and method for virtualizing computer systems
US6499048B1 (en) * 1998-06-30 2002-12-24 Sun Microsystems, Inc. Control of multiple computer processes using a mutual exclusion primitive ordering mechanism
JP3470948B2 (ja) * 1999-01-28 2003-11-25 インターナショナル・ビジネス・マシーンズ・コーポレーション 動的コンパイル時期決定方法、バイトコード実行モード選択方法、及びコンピュータ
US7603663B2 (en) * 2003-05-20 2009-10-13 Intel Corporation Apparatus and methods for restoring synchronization to object-oriented software applications in managed runtime environments
US20050132364A1 (en) * 2003-12-16 2005-06-16 Vijay Tewari Method, apparatus and system for optimizing context switching between virtual machines
US8572606B1 (en) * 2005-12-29 2013-10-29 Vmware, Inc. System and method for avoiding synchronization bugs through virtualization
US8132169B2 (en) * 2006-07-21 2012-03-06 International Business Machines Corporation System and method for dynamically partitioning an application across multiple processing elements in a heterogeneous processing environment
JP2008080695A (ja) 2006-09-28 2008-04-10 Seiko Epson Corp 吐出検査装置および吐出検査方法
JP4871174B2 (ja) 2007-03-09 2012-02-08 株式会社日立製作所 仮想計算機システム
JP4468426B2 (ja) * 2007-09-26 2010-05-26 株式会社東芝 高可用システム及び実行状態制御方法
US7844954B2 (en) * 2007-11-06 2010-11-30 Vmware, Inc. Using branch instruction counts to facilitate replay of virtual machine instruction execution
US7840839B2 (en) * 2007-11-06 2010-11-23 Vmware, Inc. Storage handling for fault tolerance in virtual machines
US9027003B2 (en) 2008-03-31 2015-05-05 Vmware, Inc. Precise branch counting in virtualization systems
JP5268469B2 (ja) * 2008-07-23 2013-08-21 株式会社東芝 高可用システム及び実行状態制御方法

Also Published As

Publication number Publication date
JP5630671B2 (ja) 2014-11-26
JP2014059749A (ja) 2014-04-03
EP2709009B1 (en) 2015-06-17
CN103678022A (zh) 2014-03-26
US20140082619A1 (en) 2014-03-20
US9400666B2 (en) 2016-07-26
EP2709009A1 (en) 2014-03-19

Similar Documents

Publication Publication Date Title
CN103678022B (zh) 容错系统和用于执行容错的方法
CN103678024B (zh) 容错系统和用于执行容错的方法
CN104054053B (zh) 用于促进计算环境中的处理的方法和系统
CN104335180B (zh) 虚拟化i/o处理延迟的实时测量
CN103744716A (zh) 一种基于当前vcpu调度状态的动态中断均衡映射方法
US9015517B2 (en) Information processing apparatus and time-of-day control method
CN104054052B (zh) 由一个程序向另一个程序提供对警告追踪设施的存取
CN103678023B (zh) 容错系统和用于执行容错的方法
Heo et al. IOCost: block IO control for containers in datacenters
JP6040894B2 (ja) ログ生成装置、及びログ生成方法
US9678823B2 (en) Information processing apparatus, information processing method, and information processing system
CN103678021B (zh) 容错系统和用于执行容错的方法
Chen et al. Asymmetric virtual machine replication for low latency and high available service
CN109313581A (zh) 用于多核处理器的同步操作的方法
Hu et al. Virtual machine based hot-spare fault-tolerant system
CN118193121A (zh) 一种云计算场景下的虚拟机vcpu挂死的检测方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant