容错系统和用于执行容错的方法技术领域
本发明涉及使用虚拟机的容错系统以及使用虚拟机来执行容错
的方法。
背景技术
容错系统是这样一种系统,即使在系统配置的一部分中出现缺
陷的情况下,容错系统也能够继续操作,而不会使整个系统崩溃,并
且容错系统尤其适用于要求具有高度有效性和不间断系统有效性的
系统。例如,即使在发生硬件故障的情况下,采用了容错系统的服务
器计算机也可以输出正确的数据,而不会有对来自外部装置的客户应
用程序进行的网络访问作出响应的通信错误。
如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的
输出数据来检查所搜集的输出数据。
如上所述,当主管理程序620从主硬件610接收到外部中断时,
主管理程序620将外部中断输入至主虚拟机630。然后,接收到来自
主管理程序620的外部中断的主虚拟机630将虚拟中断输入至主客户
OS640。
在使用虚拟机的容错系统60中,当虚拟中断被输入至主客户OS
640中时,还必须执行在同一时刻将虚拟中断输入至次客户OS740
的处理,以同步彼此的执行状态。
为此,当虚拟中断频繁地出现在主虚拟机630中时,增加了用
于对执行状态进行同步的处理负荷,并且减少了通过执行应用程序
650而将被分配给原服务的诸如CPU时间或通信带宽之类的资源。
发明内容
本发明的示例性实施例提供了一种容错系统和一种用于执行容
错的方法,其使得虚拟机执行并行同步操作,同时减小用于对执行状
态进行同步所需的处理负荷。
根据本发明的示例性实施例的容错系统包括:
主虚拟机,其在主机上形成,主管理程序运行在所述主机中,
所述主虚拟机被配置为将基于来自主管理程序的外部中断的虚拟中
断输入至主客户OS;以及
次虚拟机,其在次机上形成,次管理程序运行在所述次机中,
所述次虚拟机被配置为基于与主虚拟机所发送的虚拟中断有关的定
时信息来将虚拟中断输入至次客户OS,
其中主虚拟机被配置为一旦接收到来自主管理程序的外部中断
就确定是否生成虚拟中断,只有在确定了生成虚拟中断时,主虚拟机
被配置为将虚拟中断输入至主客户OS,并且将有关虚拟中断的定时
信息发送至次虚拟机。
主虚拟机可以被配置为,当来自主管理程序的外部中断是一个
固定周期的外部中断时,确定以低于1的给定速度来生成虚拟中断。
可以基于对在主客户OS上运行的应用程序中的固定周期的外部
中断的要求性能来确定给定速度。
主虚拟机被配置为,当来自主管理程序的外部中断是一个非固
定周期的外部中断时,确定关于在与外部中断相关的处理期间接收到
的外部中断不生成虚拟中断。
主虚拟机被配置为,当非固定周期的外部中断是涉及数据接收
的中断时,确定仅关于完成数据接收后的外部中断生成虚拟中断。
根据本发明的示例性实施例的用于通过主虚拟机和次虚拟机执
行容错的方法,所述主虚拟机形成在主机上,主管理程序运行在所述
主机中,所述主虚拟机被配置为将基于来自主管理程序的外部中断的
虚拟中断输入至主客户OS(140),所述次虚拟机形成在次机上,次
管理程序运行在所述次机中,所述次虚拟机被配置为基于与主虚拟机
所发送的虚拟中断有关的定时信息来将虚拟中断输入至次客户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中,当把虚拟中断输入至主客户OS
104时,为了同步彼此的执行状态,还要进行在相同时刻将虚拟中断
输入至次客户OS240的处理。由此,当在主虚拟机130中频繁地出
现虚拟中断时,增加了用于对执行状态进行同步的处理负荷,并且减
少了要分配给原服务的诸如CPU时间或通信带宽之类的资源。
在根据本实施例的容错系统10中,中断频率调节单元132调节
虚拟中断的频率以使得用于对执行状态进行同步的处理负荷最小,并
且防止用于原服务的处理能力减小。稍后将描述由中断频率调节单元
132所执行的中断频率调节操作的细节。
作为由中断频率调节单元132调节虚拟中断的频率(S103)的
结果,若确定生成了虚拟中断(S104中为是),则将虚拟中断输入
至主客户OS140。若确定没有生成虚拟中断(S104中为否),则该
处理完成,进程等待后续的来自主管理程序120的外部中断的输入。
当虚拟中断被输入至主客户OS140时,应在一个位置挂起主客
户OS140,在同一位置处将次客户OS240也挂起。
例如,当根据诸如外部中断之类的虚拟机上下文切换事件挂起
主客户OS140以传送对主虚拟机130的控制时,主客户OS140的挂
起位置可能在临界段中。该临界段是当多个处理同时在单个资源上执
行时用来毁损进程的程序段,并且是由程序执行诸如暂停指令无效之
类的互斥控制所在的段。
在该情况下,当虚拟中断在位于临界段中的挂起位置处输入至
主客户OS140时,即使暂停指令被嵌入相同的位置中,次客户OS240
也不能在相同的位置处挂起,而是在处理该临界段之后将次客户OS
240挂起。在这种情况下,虚拟中断位置转移,执行状态不同步。
在该情况下,在根据本实施例的容错系统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相同的定时处将虚拟中断输入至次客户OS
240(S111),并且主虚拟机130和次虚拟机230的执行状态彼此同
步。
若在主机100和次机200之一中出现硬件故障,则执行状态变
为不同步。在本实施例中,执行状态可以准确地彼此同步,而不受到
性能计数器的计数遗漏的影响。为此,若硬件正常,则不会扰乱执行
状态的同步。因此,对执行状态的同步的扰乱被检测,由此能够检测
到硬件故障。
由于传统系统不能确定对执行状态的同步的扰动来源于硬件故
障还是来源于对执行指令数量的计数遗漏所产生的影响,所以需要检
查输出数据。另一方面,在根据本实施例的容错系统10中,因为可
以通过执行状态的同步的扰动来检测到硬件故障,因此不需要检查用
于故障检测的输出数据。因此,可以减少用于检查输出数据的CPU
处理负荷和通信负荷。同样,可以立即检测硬件故障的发生。
对执行状态的同步的扰动检测可通过在例如次虚拟机230的虚
拟中断输入转换单元231中检测同步定时信息所指定的执行挂起位
置被执行之前分支数超过同步定时信息中所指定的次数时的同步扰
乱来确定。
(各块的操作细节)
接下来将参照第一实施例、第二实施例、和第三实施例来描述
容错系统10中各块的操作。
在传统容错系统中,假设主机的CPU和次机的CPU具有相同的
架构。这是因为传统的同步技术依赖于CPU架构和CPU操作规范,若
CPU的类型不同,则执行指令均不能彼此同步,并且可能不同步。
另一方面,如第一实施例和第二实施例所述,根据本各个实施
例的系统并不仅适用于主机100的CPU111和次机200的CPU211
具有相同架构的情况,而是还适用于架构不同的情况。
通常,当容错系统被操作很长一段时期后,由于故障和老化,
该装置强制被新的取代。在该情况下,很难准备与先前的装置具有相
同规范的装置。为此,根据本实施例的容错系统10具有即使CPU架
构不同也能够继续并行同步操作的结构。
<第一实施例>
作为第一实施例,将描述主机100的CPU111和次机200的CPU
211具有相同架构的情况下的操作。在本说明书中,相同的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执行上下文切换指令时,上下文从次客户OS
240切换至次虚拟机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的空闲状态代表没有待执行的处理并且主客户OS
140的操作停止的状态。主客户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)中。