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

文档序号:6512202阅读:177来源:国知局
容错系统和用于执行容错的方法
【专利摘要】本发明公开了容错系统和用于执行容错的方法。主虚拟机在主机上形成,主管理程序在该主机中运行,主虚拟机将基于来自主管理程序的外部中断的虚拟中断输入至主客户OS。次虚拟机在次机上形成,次管理程序在该次机中运行,次虚拟机基于与主虚拟机所发送的虚拟中断有关的定时信息来将虚拟中断输入至次客户OS。当将虚拟中断输入至主客户OS时,主虚拟机挂起主客户OS,并且确定挂起位置是否在临界段中。如果挂起位置不在临界段中,则主虚拟机在挂起位置处输入虚拟中断。如果挂起位置在临界段中,则主虚拟机改变挂起位置,并再次进行确定。
【专利说明】容错系统和用于执行容错的方法
【技术领域】
[0001]本发明涉及使用虚拟机的容错系统以及使用虚拟机来执行容错的方法。
【背景技术】
[0002]容错系统是这样一种系统,即使在系统配置的一部分中出现缺陷的情况下,容错系统也能够继续操作,而不会使整个系统崩溃,并且容错系统尤其适用于要求具有高度有效性和不间断系统有效性的系统。例如,即使在发生硬件故障的情况下,采用了容错系统的服务器计算机也可以输出正确的数据,而不会有对来自外部装置的客户应用程序进行的网络访问作出响应的通信错误。
[0003]如JP-A-2009-80695所公开的,已知一种在运行于两台彼此通信的计算机上的虚拟机中实现容错系统的技术。使用虚拟机的容错系统将这两台虚拟机的执行状态同步,以进行相同的操作。当在其中一台计算机中出现故障时,在另一台计算机中操作的虚拟机接管处理,由此连续而不中断地提供系统的服务。
[0004]在使用虚拟机的容错系统中,将一台虚拟机作为主虚拟机,而将另一台虚拟机设为次虚拟机。将主虚拟机构造为领先于次虚拟机执行同一操作并接管对关于外部装置进行输入/输出的控制。
[0005]通常,当执行相同程序的两台计算机以完全相同的定时从外部装置接收输入时,这两台计算机会进行相同的操作,并且输出相同的数据。因此,当在使用虚拟机的容错系统中基于外部输入发生中断时,该容错系统令主虚拟机将中断发生的时刻作为同步信息发送至次虚拟机。然后,以一定延迟运行的次虚拟机在与同步信息所通知的时刻相同的时刻产生虚拟中断,由此主虚拟机和次虚拟机以彼此同步的方式执行相同的操作。
[0006]图6是示出了传统的使用虚拟机的容错系统的配置的框图。如图6所示,容错系统60包括了在网络上彼此连接的主机600和次机700。
[0007]在主机600中,主管理程序620在作为物理计算机环境的主硬件610上运行,并且主机600中配置了主虚拟机630。在主虚拟机630中运行主客户OS (操作系统)640,并且在主客户0S640上执行应用程序650。
[0008]主硬件610配备有诸如CPU(中央处理单元)、内存、网络接口卡(NIC)、和存储器之类的多种装置。
[0009]主虚拟机630分配有主硬件610的一部分硬件资源,并且在虚拟计算机环境中接管与外部装置相关的输入/输出的控制。主虚拟机630由主管理程序620管理。
[0010]同样,在次机700中,次管理程序720在作为物理计算机环境的次硬件710上运行,并且次机700中配置了次虚拟机730。在次虚拟机730中运行次客户0S740,并且在次客户0S740上执行应用程序750。
[0011]次硬件710配备有诸如CPU、内存、网络接口卡(NIC)、和存储器之类的多种装置。
[0012]次虚拟机730分配有次硬件710的一部分硬件资源,并且在虚拟计算机环境中与主虚拟机630同步地操作。次虚拟机730由次管理程序720管理。[0013]在传统的容错系统60中,在以下过程中主虚拟机630与次虚拟机730的执行状态彼此同步。
[0014]一旦接收到来自主硬件610的外部中断,主管理程序620则将该外部中断输入至主虚拟机630。
[0015]然后,主虚拟机630将虚拟中断输入至主客户0S640。现在,将要描述将虚拟中断从主虚拟机630输入至主客户0S640。
[0016]当在主客户0S640的处理期间出现诸如外部中断、特权指令、或异常之类的虚拟机上下文切换事件时,主客户0S640的处理被挂起,客户OS上下文被切换至虚拟机上下文,处理转移至主虚拟机630。
[0017]若主虚拟机630根据在其定时时刻的各种事件而需要在主客户0S640上输入虚拟中断,则主虚拟机630配置虚拟中断。当配置了虚拟中断时,主虚拟机630终止处理,当处理返回至在生成事件时刻被挂起的主客户0S640时,虚拟中断被输入至主客户0S640。
[0018]当主虚拟机630将虚拟中断输入至主客户0S640时,主虚拟机630将同步信息发送至次虚拟机730。同步信息包括对虚拟中断的识别信息、以及用于输入虚拟中断的同步定时信息。
[0019]同步定时信息是关于在与虚拟中断被输入至主客户0S640相同的时刻将虚拟中断输入至次客户0S740的信息,并且包括指示了执行挂起位置和CPU特有的执行指令的数
量的信息。
[0020]作为执行挂起位置,可以使用表示当输入虚拟中断时所执行的指令地址的程序计数器的值。执行指令的数量可以由CPU中提供的性能计数器的CPU执行指令数量计数器来测量。
[0021]在测量执行指令数量的情况下,当主虚拟机630将虚拟中断输入至主客户0S640时,将CPU执行指令数量计数器清零,并且在重新开始执行主客户0S640前使CPU执行指令数量计数器启动。因此,计算出了自先前的虚拟中断输入以后由主客户0S640执行的指令的数量。
[0022]当仅有执行挂起位置被用作同步定时信息时,在表示执行挂起位置的指令包括在循环处理中或者包括在条件分支目的地中的情况下无法指定虚拟中断输入的时刻,这是因为每次当进行到循环或条件分支进程都会执行该指令。
[0023]同样,当仅有执行指令的数量被用作同步定时信息时,由于诸如流水线处理之类的高速化技术,使得次客户0S740不能以所指定的执行指令的数量来挂起,并且不可避免地在超出执行指令的数量后被挂起。由此,虚拟中断不能在与主客户0S640相同的时刻被输入到次客户0S740。
[0024]在该情形下,将执行挂起位置和执行指令的数量结合在一起作为同步定时信息,并且每次在次客户0S740中对执行挂起位置所表示的指令进行处理时确认执行指令的数量。因此,在与将虚拟中断输入到主客户0S640中相同的时刻来将次客户0S740挂起。
[0025]因此,当在挂起了主客户0S640的执行之后主虚拟机630将虚拟中断输入至主客户0S640时,主虚拟机630获取挂起主客户0S640的执行时刻的程序计数器的值、以及CPU执行指令数量计数器的值,以生成同步定时信息。然后,主虚拟机630将有关虚拟中断的识别信息和同步定时信息发送至次虚拟机730作为同步信息。[0026]接收到了同步信息的次虚拟机730根据同步定时信息来挂起次客户0S740的执行。将参照图7的流程图来描述该情形下次虚拟机730的操作。
[0027]将暂停(break)指令嵌入同步定时信息的执行挂起位置所指定的程序位置中(S401),并且重新启动次客户0S740(S402)。然后,当次客户0S740停止(S403中为是)时,确认CPU执行指令数量计数器,并且若计数器值匹配执行指令的指定数量(S404中为是),则次客户0S740在停止位置处挂起(S405)。若计数器值不匹配执行指令的指定数量(S404中为否),则次客户0S740重新启动(S402)并重复确认执行指令的数量。
[0028]当次虚拟机730挂起次客户0S740时,次虚拟机730根据同步信息的虚拟中断识别信息来配置虚拟中断(S406),并且重新启动次客户0S740 (S407)。因此,在与主客户0S640相同的时刻将虚拟中断输入至次客户0S740,并且主虚拟机630和次虚拟机730的执行状态彼此同步。
[0029]当在主机600和次机700的任何一个中发生硬件故障时,打乱了执行状态的同步。当执行状态的同步被打乱时,主虚拟机630和次虚拟机730之间的输出数据的值变得不同。在该情况下,容错系统60对比次虚拟机730的输出来检查主虚拟机630的输出,若输出数据的值彼此不同,则确定发生硬件故障。
[0030]为了进行该故障确定处理,次虚拟机730装配有输出数据检查单元731,其搜集主虚拟机630的输出数据,并对比次虚拟机730的输出数据来检查所搜集的输出数据。
[0031]如上所述,当主虚拟机630将虚拟中断输入至主客户0S640时,主客户0S640应在一个位置处被挂起,在该相同位置处次客户0S740也被挂起。
[0032]但是,当主客户0S640由于诸如外部中断之类的虚拟机上下文切换事件而被挂起,并且控制被转移至主虚拟机630时,主客户0S640的挂起位置可能在临界段(criticalsection)中。在本说明书中,临界段是当多个处理同时在单个资源上执行时用来毁损进程的程序段,并且是由程序执行诸如暂停指令无效之类的互斥控制所在的段。
[0033]在该情况下,当虚拟中断在位于临界段内的挂起位置处输入至主客户0S640时,即使暂停指令被嵌入相同的位置中,次客户0S740也不能在相同的位置处挂起,而是在处理该临界段之后将次客户0S740挂起。在这种情况下,虚拟中断位置转移,执行状态不同
止/J/ O

【发明内容】

[0034]本发明的示例性实施例提供了这样的一种容错系统和用于执行容错的方法:其将基于主虚拟机中的外部中断的虚拟中断以相同的定时输入至次虚拟机,从而让主虚拟机和次虚拟机执行并行同步操作,其中调节主虚拟机中的虚拟中断定时,使得次虚拟机可以以相同的定时输入虚拟中断。
[0035]根据本发明的示例性实施例的容错系统,包括:
[0036]在主机上形成的主虚拟机,主管理程序在所述主机中运行,主虚拟机被配置为将基于来自所述主管理程序的外部中断的虚拟中断输入至主客户OS ;以及
[0037]在次机上形成的次虚拟机,次管理程序在所述次机中运行,次虚拟机被配置为基于与主虚拟机所发送的虚拟中断有关的定时信息来将虚拟中断输入至次客户OS,
[0038]其中当将虚拟中断输入至主客户OS时,主虚拟机被配置为挂起主客户OS,并且确定挂起位置是否在临界段中,
[0039]其中如果主虚拟机确定了挂起位置不在临界段中,则主虚拟机被配置为在挂起位置处输入虚拟中断,并且
[0040]其中如果主虚拟机确定了挂起位置在临界段中,则主虚拟机被配置为改变挂起位置,并且再次确定挂起位置是否在所述临界段中。
[0041]可以基于主虚拟机的状态来对挂起位置是否在临界段中进行确定。
[0042]主虚拟机的状态可以包括关于中断屏蔽的配置信息和标志寄存器的内容中的任一个。
[0043]可以通过配置用于挂起的事件以及确定是否由该事件引起挂起因素来对中断位置是否在临界段中进行确定。
[0044]主客户OS和在主客户OS上运行的应用程序可以由中间语言描述,并且主虚拟机可以被配置为基于所执行的中间语言指令来确定挂起位置是否在临界段中。
[0045]根据本发明的示例性实施例的用于通过主虚拟机和次虚拟机执行容错的方法,所述主虚拟机形成在主机上,主管理程序运行在所述主机中,所述主虚拟机被配置为将基于来自主管理程序的外部中断的虚拟中断输入至主客户OS,所述次虚拟机形成在次机上,次管理程序运行在所述次机中,所述次虚拟机被配置为基于与主虚拟机所发送的虚拟中断有关的定时信息来将虚拟中断输入至次客户OS,所述方法包括:
[0046]当将虚拟中断输入至主客户OS时,挂起主客户OS,并且确定挂起位置是否在临界段中;以及
[0047]如果确定了挂起位置不在临界段中,则在挂起位置处输入虚拟中断,并且如果确定了挂起位置在临界段中,则改变挂起位置并再次确定挂起位置是否在所述临界段中。
[0048]根据本发明的示例性实施例,在将基于主虚拟机中的外部中断的虚拟中断以相同的定时输入至次虚拟机,从而让主虚拟机和次虚拟机执行并行同步操作的容错系统和用于执行容错的方法中,可以调节主虚拟机中的虚拟中断定时,使得次虚拟机可以以相同的定时输入虚拟中断。
【专利附图】

【附图说明】
[0049]图1是示出了根据一个实施例的容错系统的配置的框图。
[0050]图2是示出了主虚拟机和次虚拟机的并行同步操作的概要的流程图。
[0051]图3A和图3B是示出了通过分支数和执行挂起位置来识别虚拟中断输入位置的示图。
[0052]图4是示出了当CPU架构的细节已知时,虚拟中断定时调节操作的具体过程的流程图。
[0053]图5是示出了当CPU架构的细节未知时,虚拟中断定时调节的具体过程的流程图。
[0054]图6是示出了相关技术中的使用虚拟机的容错系统的配置的框图。
[0055]图7是示出了让已经接收到同步信息的次虚拟机根据同步定时信息来挂起次客户OS的执行的操作流程图。
【具体实施方式】[0056]将参照附图来描述根据本发明的实施例。图1是示出了根据本实施例的容错系统的配置的框图。如图1所示,容错系统10包括通过网络彼此连接的主机100和次机200。主机100和次机200可以由诸如服务器计算机或个人计算机之类的通用计算机来配置。
[0057]在主机100中,主管理程序120在作为物理计算机环境的主硬件110上运行,并且主虚拟机130由主管理程序120构成。在主虚拟机130中,主客户0S140运行,并且在主客户OS 140上执行应用程序150。
[0058]主硬件110配备有以下多种装置,诸如CPU111、内存112、定时器113、网络接口卡(NIC) 114、和存储器之类的装置115。
[0059]主虚拟机130分配有主硬件110的部分硬件资源,并且接管对于与外部装置相关的输入/输出的控制。主虚拟机130用作虚拟计算机环境。主虚拟机130由主管理程序120管理。主程序管理120能够管理多个主虚拟机130。
[0060]同样,在次机200中,次管理程序220在作为物理计算机环境的次硬件210上运行,并且次虚拟机230由次管理程序220构成。在次虚拟机230中,次客户0S240运行,并且在次客户0S240上执行应用程序250。
[0061]次硬件210配备有以下多种装置,诸如CPU211、内存212、定时器213、网络接口卡(NIC) 214、和存储器之类的装置215。
[0062]次虚拟机230分配有次硬件210的部分硬件资源,并且在虚拟计算机环境中与主虚拟机130同步地运行。次虚拟机230由次管理程序220管理。次管理程序220能够管理多个次虚拟机230。
[0063]在容错系统10中,仅由主虚拟机130来控制与外部装置相关的输入/输出,主虚拟机130在次虚拟机230之前运行。
[0064]在本实施例中,为主虚拟机130提供了虚拟中断生成单元131和同步信息生成单元135,并且为次虚拟机230提供虚拟中断输入转换单元231和同步校正单元235。
[0065]主虚拟机130的虚拟中断生成单元131生成虚拟中断,该虚拟中断是通过调节中断频率和实际从主管理程序120输入外部中断输入的定时而得到的,并且该虚拟中断生成单元131将生成的虚拟中断输入至主客户0S140。为虚拟中断生成单元131提供了用于调节中断频率的中断频率调节单元132以及用于调节中断定时的中断定时调节单元133。
[0066]主虚拟机130的同步信息生成单元135基于执行挂起位置和分支执行数量来指定被调节并输入至主客户0S140的虚拟中断的定时。同步信息生成单元135配备有用于计算在输入虚拟中断以前主客户0S140中的程序分支数的分支执行数量生成单元136。
[0067]同步信息生成单元135在主虚拟机130和次虚拟机230的并行同步操作前,从次虚拟机230搜集操作性能信息。当主硬件110和次硬件210之间的硬件配置不同时,同步信息生成单元135生成用于校正处理速度差的同步校正信息,并且将同步校正信息发送至次虚拟机230的同步校正单元235。同步信息生成单元135按场合要求来调节主虚拟机130的操作。
[0068]次虚拟机230的虚拟中断输入转换单元231根据从主虚拟机130发送的同步信息的同步定时信息来使次客户0S240的处理前移至虚拟中断输入位置,并且挂起次客户0S240。然后,虚拟中断输入转换单元231接收虚拟中断。为了使次客户0S240的处理前移至虚拟中断输入位置,并且挂起次客户0S240,为虚拟中断输入转换单元231提供了指定分支数执行单元232和指定位置上下文切换单元233。
[0069]次虚拟机230的同步校正单元235在并行同步操作之前基于从主虚拟机130的同步信息生成单元135发送的同步校正信息来调节次虚拟机的操作。同步校正单元235按场合要求在并行同步操作中调节主虚拟机130和次虚拟机230之间的处理速度差。
[0070](并行同步操作的概要)
[0071]随后,将参照图2的流程图来描述在如上所述配置的容错系统中主虚拟机130和次虚拟机230彼此之间使执行状态同步的并行同步操作的概要。具体地,将描述当主管理程序120从主硬件110接收到外部中断时的操作序列。
[0072]一旦接收到来自主硬件110的外部中断(S101),主管理程序120就将外部中断输入至主虚拟机130 (S102)。
[0073]从主管理程序120接收到外部中断的主虚拟机130将虚拟中断输入至主客户0S140o在该情形下,主虚拟机130不针对所有输入的外部中断将虚拟中断输入至主客户0S140,而中断频率调节单元132对输入至主客户0S140的虚拟中断的频率进行调节(S103)。
[0074]在使用虚拟机的容错系统10中,当把虚拟中断输入至主客户0S104时,为了同步彼此的执行状态,还要进行在相同时刻将虚拟中断输入至次客户0S240的处理。由此,当在主虚拟机130中频繁地出现虚拟中断时,增加了用于对执行状态进行同步的处理负荷,并且减少了要分配给原服务的诸如CPU时间或通信带宽之类的资源。
[0075]在根据本实施例的容错系统10中,中断频率调节单元132调节虚拟中断的频率以使得用于对执行状态进行同步的处理负荷最小,并且防止用于原服务的处理能力减小。稍后将描述由中断频率调节单元132所执行的中断频率调节操作的细节。
[0076]作为由中断频率调节单元132调节虚拟中断的频率(S103)的结果,若确定生成了虚拟中断(S104中为是),则将虚拟中断输入至主客户0S140。若确定没有生成虚拟中断(S104中为否),则该处理完成,进程等待后续的来自主管理程序120的外部中断的输入。
[0077]当虚拟中断被输入至主客户0S140时,应在一个位置挂起主客户0S140,在同一位置处将次客户0S240也挂起。
[0078]例如,当根据诸如外部中断之类的虚拟机上下文切换事件挂起主客户0S140以传送对主虚拟机130的控制时,主客户0S140的挂起位置可能在临界段中。该临界段是当多个处理同时在单个资源上执行时用来毁损进程的程序段,并且是由程序执行诸如暂停指令无效之类的互斥控制所在的段。
[0079]在该情况下,当虚拟中断在位于临界段中的挂起位置处输入至主客户0S140时,即使暂停指令被嵌入相同的位置中,次客户0S240也不能在相同的位置处挂起,而是在处理该临界段之后将次客户0S240挂起。在这种情况下,虚拟中断位置转移,执行状态不同
止/J/ O
[0080]在该情况下,在根据本实施例的容错系统10中,中断定时调节单元133调节虚拟中断定时(S105),并且在避开临界段的情况下挂起主客户0S140,由此能够在相同的位置处挂起第二客户0S240。稍后将描述中断定时调节单元133进行的虚拟中断定时调节操作的细节。
[0081]当调节了虚拟中断定时时,主虚拟机130将虚拟中断输入至主客户0S140(S106)。然后,同步信息生成单元135生成同步信息(S107)。[0082]同步信息包括关于虚拟中断的识别信息和同步定时信息。同步定时信息包括由程序计数器表示的执行挂起位置,以及由性能计数器测量的CPU执行指令的数量。
[0083]但是,对于特定CPU特有的特殊指令,存在这样的情况:可能发生性能计数器的计数遗漏,并且有可能未能准确地对在输入虚拟中断以前由主客户0S140执行的CPU执行指令的数量进行计数。例如,在英特尔公司制作的Pentium (注册商标)处理器中,对于当REP指令的执行由于发生外部中断而被挂起时的REP指令的执行就没有被计入。由此,CPU执行指令计数可能变得小于执行指令的实际数量。
[0084]这样,因为对CPU执行指令数量的计数可能不准确,所以根据本实施例的容错系统10不将CPU执行指令的数量用于同步定时信息。
[0085]但是,因为程序通常包括大量的循环语句、跳转语句、和分支语句,所以相同的指令会执行多次。为此,可能无法仅通过执行挂起位置来指定虚拟中断的输入定时。
[0086]在该情况下,根据本实施例的容错系统10使得同步定时信息包括执行挂起位置和分支数。分支数代表从前一虚拟中断至当前虚拟中断所执行的分支指令的数量,该数量是执行顺序从依次执行发生改变的次数。
[0087]通过提前在主客户0S140中计算分支数,可以通过找出在执行了所计数量的分支之后被第一次执行的位置,来将执行挂起位置正确地指定为次客户0S240中的虚拟中断输入位置。
[0088]例如,如图3A所示,假设当指令代码CodeA、CodeB, CodeC,...被分配于指令地址al、a2、a3、…,并且CodeC至CodeG循环三次时,在主客户0S140中的第十六次程序执行顺序的“a6”处输入虚拟中断。该同步定时可以由分支数的计数值“2”和执行挂起位置“a6”表不。
[0089]在该情况下,在次虚拟机230中,对分支数计数两次,在第一次执行挂起位置“a6”处挂起次客户0S240,由此能够在与主客户0S140相同的定时处输入虚拟中断。
[0090]由此为了执行对分支数进行计数的处理,为同步信息生成单元135提供了分支执行数生成单元136。在指令代码级别中,所有的循环语句、跳转语句、和分支语句都被分支指令替代。因此,在运行应用程序150时,分支执行数生成单元136对由主客户0S140执行的分支指令的数量进行计数,由此能够对分支数计数。为了对分支数计数,可以使用性能计数器。
[0091]返回至图2的描述,主虚拟机130生成包括有关虚拟中断的识别信息和同步定时信息在内的同步信息,然后将同步信息传送至次虚拟机230 (S108 )。
[0092]为了根据同步定时信息来挂起次客户0S240的执行,在接收到同步信息的次虚拟机230中,指定分支数执行单元232首先对执行次客户0S240时的分支数进行计数。当分支计数达到同步定时信息中的分支数所表示的值时,次虚拟机230挂起次客户0S240。也就是,次虚拟机230执行次客户0S240的次数达到指定分支数量(S109)。为此,在分支计数达到指定分支数量以前不需要监控执行挂起位置和CPU执行指令的数量,减小了处理负荷。稍后将描述指定分支数执行单元232所执行的指定分支数执行操作的细节。
[0093]指定位置上下文切换单元233在同步定时信息的执行挂起位置所表示的位置处挂起次客户0S240的执行(SI 10)。[0094]在对次客户0S240的执行进行挂起过程中,若使用了如在传统系统技术中嵌入暂停指令以配置断点的技术,则当客户OS (140, 240)或应用程序(150,250)在虚拟机(130, 230)中调试时,挂起干扰了调试的断点,并且不利地影响到相互的处理。因为可能存在用户想要对彼此同步的虚拟机(130,230)上的应用程序(150,250)操作进行检查的情况,所以希望避免对断点的干扰。
[0095]同样,在不具有虚拟化支持功能的CPU中,处理不能通过设置断点而从次客户0S240转移至次虚拟机230。
[0096]在该情况下,在根据本实施例的容错系统10中,指定位置上下文切换单元233执行上下文切换,而不使用暂停指令来挂起次客户0S240的执行。稍后将描述指定位置上下文切换单元233执行的指定位置上下文切换操作的细节。
[0097]当次虚拟机230挂起次客户0S240时,次虚拟机230根据同步信息的虚拟中断识别信息来配置虚拟中断以重新启动次客户0S240。因此,在与主客户0S140相同的定时处将虚拟中断输入至次客户0S240 (S111),并且主虚拟机130和次虚拟机230的执行状态彼此同步。
[0098]若在主机100和次机200之一中出现硬件故障,则执行状态变为不同步。在本实施例中,执行状态可以准确地彼此同步,而不受到性能计数器的计数遗漏的影响。为此,若硬件正常,则不会扰乱执行状态的同步。因此,对执行状态的同步的扰乱被检测,由此能够检测到硬件故障。
[0099]由于传统系统不能确定对执行状态的同步的扰动来源于硬件故障还是来源于对执行指令数量的计数遗漏所产生的影响,所以需要检查输出数据。另一方面,在根据本实施例的容错系统10中,因为可以通过执行状态的同步的扰动来检测到硬件故障,因此不需要检查用于故障检测的输出数据。因此,可以减少用于检查输出数据的CPU处理负荷和通信负荷。同样,可以立即检测硬件故障的发生。
[0100]对执行状态的同步的扰动检测可通过在例如次虚拟机230的虚拟中断输入转换单元231中检测同步定时信息所指定的执行挂起位置被执行之前分支数超过同步定时信息中所指定的次数时的同步扰乱来确定。
[0101](各块的操作细节)
[0102]接下来将参照第一实施例、第二实施例、和第三实施例来描述容错系统10中各块的操作。
[0103]在传统容错系统中,假设主机的CPU和次机的CPU具有相同的架构。这是因为传统的同步技术依赖于CPU架构和CPU操作规范,若CPU的类型不同,则执行指令均不能彼此同步,并且可能不同步。
[0104]另一方面,如第一实施例和第二实施例所述,根据本各个实施例的系统并不仅适用于主机100的CPUlll和次机200的CPU211具有相同架构的情况,而是还适用于架构不同的情况。
[0105]通常,当容错系统被操作很长一段时期后,由于故障和老化,该装置强制被新的取代。在该情况下,很难准备与先前的装置具有相同规范的装置。为此,根据本实施例的容错系统10具有即使CPU架构不同也能够继续并行同步操作的结构。
[0106]〈第一实施例〉[0107]作为第一实施例,将描述主机100的CPUlll和次机200的CPU211具有相同架构的情况下的操作。在本说明书中,相同的CPU架构意味着CPU指令集在两个处理器之间具
有兼容性。
[0108]在该情况下,主虚拟机130和次虚拟机230通过同步CPU指令级来执行并行同步操作。为此,在两台虚拟机(130,230)中,客户OS (140,240)和应用程序(150,250)的程序通常相对于CPU (111,211)具有符合本机CPU指令代码的代码格式。假设该并行同步操作叫做“CPU指令同步模式”。
[0109](中断频率调节操作)
[0110]首先,将描述中断频率调节单元132执行的中断频率调节操作(S103)。主虚拟机130的中断频率调节单元132不会输入针对所有外部中断的虚拟中断,而是将虚拟中断的频率调节至达到应用程序150所需的性能和精度以及容许的通信延迟的程度。
[0111]通常,可以将外部中断分类为使用定时器113的固定周期中断和使用网络接口卡(NIC) 114或装置115的非固定周期中断。中断频率调节单元132分别根据固定周期中断和非固定周期中断来执行频率的调节。
[0112]在固定周期的外部中断中,通过省略一些外部中断来以每固定周期的几个外部中断一次的速度来将虚拟中断输入到主客户0S140。
[0113]例如,当固定周期的定时器中断被输入至主客户0S140时,由此主客户0S140可以计算准确的时间。但是若应用程序150所需的时间精度不高,则可以没有任何问题地省略定时器中断的一些输入。
[0114]例如,当来自主管理程序120的定时器中断的周期为1ms,并且应用程序150中所需的时间精度为IOOms时,即使虚拟中断周期变稀疏至10ms,仍可以保证IOOms的精度。在该情况下,因为虚拟中断的频率减小至1/10,所以执行状态的同步处理也减小至1/10。
[0115]可以根据应用程序150所需的精度提前设置稀疏率,或者通过参数对其进行调节。同样,关于固定周期的外部中断可一致地设置该稀疏率,或者可以针对固定周期的外部中断每个因素来设置稀疏率。
[0116]在非固定周期的外部中断中,省去与处理期间外部中断输入相关的虚拟中断,仅将已经完成处理的最后的外部中断输入至主客户0S140来作为虚拟中断。
[0117]例如,每当数据到达NIC114时,就发生一次来自NIC114的网络接收中断。为此,在接收作为重要单元的数据期间发生多个外部中断。传统方法是,每当外部中断发生时就将虚拟中断输入至主客户0S140,以使得接收到数据从NIC114转移至主客户0S140。另一方面,中断频率调节单元132省去与接收数据期间的外部中断有关的虚拟中断,并且将接收到数据后的一个外部中断相关的虚拟中断输入至主客户0S140。因此,可以减少执行状态的同步处理的数量,并且可以在同一时间处理大尺寸的数据。
[0118]作为适用于本技术的非固定周期的外部中断,有网络的发送/接收中断、存储器的读/写中断、串联通信的发送/接收中断、以及诸如模拟/数字I/O板之类的各种I/O装置的读/写中断。
[0119](虚拟中断定时调节操作)
[0120]接下来将描述由中断定时调节单元133执行的虚拟中断定时调节操作(S105)。虚拟中断定时调节被配置为在避开主客户0S140的临界段的情况下输入虚拟中断,使得次客户0S240在相同的位置处被挂起。
[0121]对于CPU架构的细节已知和CPU架构的细节未知这两种情况之间,处理中的虚拟中断定时调节操作是不同的。CPU架构的细节已知的情况代表可以根据CPU指令或挂起位置的状态标志来确定挂起位置是否在临界段中。
[0122]首先,将参照图4的流程图来描述当CPU架构的细节已知时的具体的操作过程。
[0123]一旦从主管理程序120接收到外部中断的输入(S201),主虚拟机130等待对主客户0S140的执行挂起(S202)。
[0124]当主客户0S140的执行被挂起,并且处理转移至主虚拟机130时,主虚拟机130获取主虚拟机130的状态(S203)。要获取的状态是用于判定挂起位置是否在临界段中的信息,例如,CPUl 11的中断屏蔽的配置信息、或者标志寄存器的内容。
[0125]然后,基于获取的信息来判定挂起位置是否在临界段中(S204)。例如,基于以下原因可以判定挂起位置不在临界段中:中断屏蔽中未禁止中断的输入,以及在标志寄存器中没有设定使暂停指令的配置无效的标志。
[0126]若挂起位置不在临界段中(S204中为否),则挂起位置被配置为虚拟中断的输入定时(S205)。
[0127]若挂起位置在临界段中(S204中为是),则在确认主虚拟机130的状态时提前主客户0S140的执行(S206)。在该情况下,例如,进行逐步执行(step execution)以确认每个指令的状态(S203)。然后,判定挂起位置是否在临界段(S204),并且挂起位置不在临界段中(S204中为否)。然后挂起位置被配置为虚拟中断的输入定时(S205)。
[0128]随后,将参照图5的流程图来描述当CPU架构的细节未知时的具体操作过程。若CPU架构的细节未知,即使获取了主虚拟机130的状态,也不能判定挂起位置是否在临界段中。因此,配置挂起事件,将实际可以进行挂起的位置设置为用于输入虚拟中断的挂起位置。
[0129]一旦接收到来自主管理程序120的外部中断的输入(S301),主虚拟机130等待主客户0S140的执行挂起(S302)。
[0130]当主客户0S140的执行被挂起,并且处理转移至主虚拟机130时,主虚拟机130在主客户0S140中配置一个在执行了给定数量的指令之后(例如,在执行了一条指令之后)进行挂起的事件。
[0131]然后,通过逐步执行重新启动主客户0S140的执行(S304),为单条指令的执行获取中断的因素(S305)。这是因为挂起的因素不总是由配置的挂起事件引起的。
[0132]若挂起的因素由配置的挂起事件引起(S306中为是),则确定挂起位置不在临界段内,并且确定在相同位置处挂起次客户0S240,并且挂起位置被配置为虚拟中断的输入定时(S307)。
[0133]如果挂起的因素不是由配置的挂起事件引起(S306中为否),则确定挂起位置在临界段中,并且不能在相同的位置处挂起次客户0S240。然后,配置一个在执行一条指令之后挂起次客户0S240的事件(S303),并且重复已经重新启动主客户0S140的执行(S304)之后的处理。若进程前进到临界段以外(S306中为是),则挂起位置被配置为虚拟中断的输入定时(S307)。
[0134](同步信息生成操作)[0135]随后,将描述同步信息生成单元135进行的生成同步信息的操作(S107)。若主机100的CPUl 11和次机200的CPU211具有相同的架构,则同步信息的同步定时信息中的执行挂起位置由CPU指令代码的执行停止位置表示,并且可以使用程序计数器的值。
[0136]同步定时信息中分支执行的数量由主客户0S140自前一同步定时信息生成时间起所执行的分支数来表示。可以通过对在CPU指令代码级别处执行的分支指令进行计数来得到分支数。
[0137](指定的分支数执行操作)
[0138]随后,将描述由指定分支数执行单元232执行的指定分支数执行操作(S109)。指定分支数执行操作被配置为对次客户0S240进行由同步定时信息中的分支数所表示的次数的挂起。
[0139]指定分支数执行单元232对在CPU指令代码级别所执行的分支指令进行计数。若计数值达到指定的分支数,则指定分支数执行单元232通知次虚拟机230该事实。因此,上下文切换至次虚拟机230,并且次客户0S240的执行被挂起。
[0140]在由于CPU211的流水线功能的加速导致在执行指定数量的分支后不能立即停止的CPU架构中,计数值被设置为小于指定的分支数,从而次客户0S240可以被进行指定分支数量的次数的挂起。
[0141](指定位置上下文切换操作)
[0142]随后,将描述指定位置上下文切换单元233进行的指定位置上下文切换操作(SllO)0指定位置上下文切换操作被配置为在对次客户0S240挂起了指定分支数量的次数后不使用暂停指令的情况下,在指定的执行挂起位置处将上下文切换至次虚拟机230。
[0143]当为次虚拟机230实现了专用的上下文切换指令时,在次客户0S240的执行挂起位置处嵌入上下文切换指令。例如,上下文切换指令可以是英特尔公司制造的CPU的VMCALL 指令。
[0144]当次客户0S240执行上下文切换指令时,上下文从次客户0S240切换至次虚拟机230,次客户0S240的执行被挂起。
[0145]当没有实现专用上下文切换指令时,使虚拟中断或CPU异常的事件在执行挂起位置处发生,使得执行上下文切换。当执行上下文切换时,上下文从次客户0S240切换至次虚拟机230,次客户0S240的执行被挂起。
[0146]在任何情况下,当次客户0S240的执行被挂起时,次虚拟机230配置虚拟中断,并且重新启动次客户0S240的执行,那时,虚拟中断被输入至次客户0S240。
[0147]〈第二实施例〉
[0148]作为第二实施例,将描述当主机100的CPUlll和次机200的CPU211具有不同架构时的操作。在本说明书中,不同CPU架构意味着两个处理器之间的CPU指令集不具有兼容性。
[0149]在该情况下,主虚拟机130和次虚拟机230通过同步中间语言级别来执行并行同步操作。在本说明书中,“中间语言”也被叫做“中间代码”或“字节代码”,并且代表作为高级语言的源代码与机器语言的代码之间的中间体的中间表示语言。并行同步操作被叫做“中间语言同步模式”。
[0150]因为CPU指令集在两台虚拟机(130,230)之间没有兼容性,所以客户0S(140,240)和应用程序(150,250)的程序是中间语言的程序,其中,Java (注册商标)和C#被转换而取代本地CPU指令代码。
[0151]两台虚拟机(130,230)通过现有的诸如解释程序或即时编译器(JIT编译器)之类的CPU指令转换技术,针对虚拟机CPU将中间语言转换为本地CPU指令。
[0152]类似地,当主机100的CPUlll和次机200的CPU211具有相同的架构时,可以执行使用中间语言同步模式的并行同步操作。但是,使用CPU指令同步模式的并行同步操作的执行速度高于中间语言同步模式的并行同步操作的执行速度。
[0153]随后,将描述根据第二实施例的各块的操作。由于大部分的操作与第一实施例中CPU指令同步模式的操作相同,因此将仅描述与第一实施例不同的处理。
[0154](虚拟中断定时调节操作)
[0155]在根据第一实施例的CPU指令同步模式中,在CPU架构的细节已知和CPU架构的细节未知这两种情况之间的处理中,虚拟中断定时调节操作(S105)是不同的。另一方面,在根据第二实施例的中间语言同步模式中,执行与CPU架构的细节已知时相同的处理。
[0156]也就是,因为可以根据CPU指令或挂起位置的状态标志来确定挂起位置是否在临界段中,所以根据图4所示的流程图,在避开临界段的情况下配置主客户0S140的挂起位置,并将虚拟中断输入至主客户0S140。
[0157]同样,在中间语言同步模式中,除了 CPU指令和挂起位置的状态标志以外还能够以中间语言级别来确定挂起位置是否在临界段中。例如,若中间语言是Java (注册商标)的字节代码,则假设在同步互斥控制下实现临界段。为此,在确认所执行的中间语言的指令的同时,主虚拟机130可以确定挂起的Java (注册商标)的中间语言是否在临界段中。
[0158](同步信息的生成操作)
[0159]在根据第一实施例的CPU指令同步模式中,在同步信息的生成操作(S107)中,同步定时信息中所包括的执行挂起位置通过使用程序计数器值而由CPU指令代码的执行停止位置表示。同样,包括在同步定时信息中的分支执行数量由自前一同步定时信息生成时间起执行的CPU指令代码的分支数表示。
[0160]相反,在根据第二实施例的中间语言同步模式中,执行挂起位置由输入虚拟中断时执行的中间语言级别的执行挂起位置表示。同样,分支执行的数量由自前一同步定时信息生成时间起执行的中间语言级别的分支数表示。
[0161](指定位置上下文切换操作)
[0162]在根据第一实施例的CPU指令同步模式中,在指定位置上下文切换操作(SllO)中,当针对次虚拟机230实现了专用上下文切换指令时,在次客户0S240的执行挂起位置处嵌入上下文切换指令。当没有实现专用上下文切换指令时,使虚拟中断或CPU异常的事件在执行挂起位置处发生,使得上下文切换被执行。即使在根据第二实施例的中间语言同步模式中,在中间语言级别的执行挂起位置处由CPU指令转换执行相同设定。
[0163]〈第三实施例〉
[0164]随后,作为第三实施例,将描述当主机100与次机200之间的硬件配置不同时的并行同步操作。主机100的主硬件110和次机200的次硬件210均由诸如CPU(111,211)、内存(112、212)、诸如存储器之类的装置(115、215)之类的各种硬件装置配置而成。但是,双方硬件的功能或性能可能并不相互一致。[0165]例如,存在CPU (111,211)的规格彼此不同、或者内存(112、212)的容量彼此不同的情况。同样,在容错系统10的操作处理中,由于装置(115,215)的替换会出现两个装置(115,215)不同。
[0166]为此,主虚拟机130和次虚拟机230在操作上相同,但是在处理速度上可能不同。如上所述,在容错系统10中,主虚拟机130配置为在次虚拟机230之前操作。但是,例如,若次虚拟机230处理速度更高,则进程的推进会反转,并且基于来自主虚拟机130的同步信息,执行状态不同步。若主虚拟机130处理速度更高,则次虚拟机230的延迟会累积。
[0167]同样,由于装置(115,215)不同,因此在主客户0S140和次客户0S240之间驱动器处理的执行可能不同,并且它们之间的操作不同,结果操作可能不同步。
[0168]在该情况下,在容错系统10中,提供了一种基于主硬件110和次硬件210之间的差异来校正处理速度差和不同步的结构。具体来说,主虚拟机130的同步信息生成单元135和次虚拟机230的同步校正单元235执行同步校正。同步校正可以在执行并行同步操作之前被执行,或者可以在并行同步操作的执行期间被执行。
[0169](执行并行同步操作之前的同步校正操作)
[0170]主虚拟机130的同步信息生成单元135在主虚拟机130和次虚拟机230的并行同步操作以前从次虚拟机230搜集关于次虚拟机230的操作性能信息。
[0171]操作性能信息是这样的信息,其包括了与次虚拟机230中的次客户0S240接口的操作规范以及作为次虚拟机230的程序执行速度指标的基准信息。同步信息生成单元135被配置为在可得到的范围内获取有关多个项目的操作性能信息。
[0172]同步信息生成单元135还获取有关主虚拟机130自身的操作性能信息,并且将获取到的操作性能信息与有关次虚拟机230的操作性能信息进行比较。然后,同步信息生成单元135设置主虚拟机130和次虚拟机230所使用的操作性能,使得主虚拟机130的并行同步操作中的操作性能与次虚拟机230的并行同步操作中的操作性能基本上相等。
[0173]操作性能例如是关于以下项目的基准信息:操作频率、内存大小、缓存大小、诸如TLB (翻译后援缓冲器)/EPT (增强页表)规范之类的操作规范、MIPS值、或SPEC值。在中间语言同步模式中,可以使用中间语言的基准值。例如,当使用Java (注册商标)的字节代码作为中间语言时,SPECjbb, CaffeineMark等被列举为基准值。
[0174]然后,同步信息生成单元135将次虚拟机230使用的操作性能作为同步校正信息通知给次虚拟机230的同步校正单元235。次虚拟机230的同步校正单元235根据所通知的同步校正信息来在执行并行操作时设置次虚拟机230的操作性能。
[0175]将描述通过调节操作频率的同步校正的示例。如上所述,当主机100和次机200之间的硬件配置不同时,存在操作相同但是处理速度不同的情况,以及操作本身不同的情况。在该示例中,将描述操作相同但是处理速度不同时的同步校正。
[0176]在虚拟机(130,230)的操作频率的调节中,可使用为了节省电力而准备的电力控制功能。例如,针对标准电力控制功能可以使用ACPI(高级配置和电源接口),针对调节操作频率的功能可以使用Linux(注册商标)的cpfreq子系统。使用这些功能,虚拟机(130,230)均准备多个可用的操作频率。
[0177]主虚拟机130的同步信息生成单元135从次虚拟机230获取在次虚拟机230中可用的操作频率的列表,还获取可以被主虚拟机130自身使用的操作频率的列表,并且选择主虚拟机130和次虚拟机230之间基本上相同的操作频率。同步信息生成单元135将所选操作频率作为同步校正信息通知给次虚拟机230的同步校正单元235。
[0178]在主虚拟机130和次虚拟机230的并行同步操作期间,各虚拟机(130,230)基于主硬件110和次硬件210之间的操作频率的差异来以所选操作频率操作,从而消除处理速度差。
[0179]例如,若主虚拟机130的可用操作频率中没有与次虚拟机230的可用操作频率相匹配的频率,则将次虚拟机230设置为更高的操作频率,并且如稍后所述,可以有暂停地地来执行次虚拟机230的操作。
[0180]在中间语言同步模式中,由于基准值不同,因此主虚拟机130和次虚拟机230之间的处理速度不同。因此,基于所获取的两个基准值来执行与针对操作频率的调节相同的调节,以校正处理速度的差异。
[0181]随后,将给出当由于硬件配置的差异导致主虚拟机130和次虚拟机230之间操作本身不同时的同步校正的描述。
[0182]例如,当CPU架构相同但装置(115,215)的操作规范不同时,改变虚拟机的执行,以使两个客户OS (140,240)执行相同的驱动器处理。通过这样的改变,两个客户OS (140,240)能够执行相同的操作,并能够防止不同步。具体来说讲,在并行同步操作开始前,将吸收操作规范中的差异的功能并入主虚拟机130或次虚拟机230的设备模拟器。
[0183]该功能根据待校正对象可以分为以下两种类型。
[0184](I)对硬件功能的有无之间的差异的校正
[0185]当某一硬件功能仅安装于一台虚拟机(130,230)时,具有该功能的虚拟机(130, 230)不使用该功能,使得两台虚拟机(130,230)在各虚拟机均不具有该硬件功能的状态下操作。
[0186]例如,若虚拟机在FPU (浮点处理单元)功能的有无方面不同,则两台虚拟机(130, 230)在虚拟机均不具有FPC功能的状态下操作。在该情况下,浮点处理由客户OS(140,240)内的仿真代码执行。具体来说,在执行浮点处理时发生异常,客户OS (140,240)的异常处理程序获取该异常,通过软件仿真该处理。
[0187]可替代地,不具备该功能的虚拟机(130,230)可以通过在客户OS (140,240)以外的外部环境中处理软件来仿真该功能,以吸收它们之间的差异。客户OS (140,240)以外的外部环境可以是虚拟机(130,230)或者管理程序(120,220)。
[0188]例如,不具有FPC功能的虚拟机(130,230)通过虚拟机(130,230)内的仿真代码来执行浮点处理。具体来说,由在执行浮点处理时发生的异常来执行到虚拟机上下文的切换,由虚拟机(130,230)内的软件来仿真该处理,并且随后进程返回至客户OS上下文。因为,在客户OS (140,240)中没有获取异常,所以没有执行客户OS (140,240)内的仿真代码。
[0189](2)对硬件功能的性能或容量的差异的校正
[0190]当硬件功能的性能或容量不同时,在客户OS (140,240)以外的外部环境中执行操作方面不同的处理。客户OS (140,240)以外的外部环境可以是虚拟机(130,230)、管理程序(120,220)、或硬件(110,210)。
[0191]例如,若TLB的缓存大小不同,则存在仅虚拟机(130,230)中的一个未命中缓存的情况,发生TLB未命中。在该情况下,在客户0S(140,240)的外部执行从TLB未命中的恢复处理。在英特尔公司制造的CPU中,可以由硬件的功能来执行恢复处理。另一方面,当CPU(111,211)不具备硬件的恢复功能时,由虚拟机(130,230)或管理程序(130,230)的软件来执行恢复处理。
[0192]在中间语言同步模式中,虚拟机(130,230)使用诸如解释器或虚拟内存之类的软件功能来执行由中间语言表达的客户OS程序。为此,不会因为操作规范上的差异导致客户OS (140, 240)的操作上发生差异。
[0193](在并行同步操作的执行期间的同步校正操作)
[0194]当即使通过并行同步操作开始前的调节也不能消除主虚拟机130和次虚拟机230之间的处理速度差异时,同步信息生成单元135和同步校正单元235在并行同步操作期间执行以下同步校正。
[0195]首先,将描述当调节了操作性能后的主虚拟机130比调节了操作性能后的次虚拟机230的速度高时的同步校正。
[0196]同步信息生成单元135选择主虚拟机130的操作性能或者次虚拟机230的操作性能作为要被通知给次虚拟机230的同步校正信息的操作速度信息。例如,基于参数配置来进行选择。
[0197]若选择了主虚拟机130的操作性能,则因为主虚拟机130的在前操作扩大,所以执行用于消除次虚拟机230的延迟的处理。在该情况下,若次虚拟机230的延迟大于假定量,则可以检测机器中出现故障。
[0198]现在,将描述两种校正方法作为消除延迟的处理的示例。首先,将描述重新设置延迟和执行再同步的方法作为第一校正方法。
[0199]次虚拟机230的同步校正单元235确认次虚拟机230中的程序的执行速度的测量延迟时间是否等于从同步校正信息得到的假定延迟时间。
[0200]现在,将描述测量延迟时间。次虚拟机230从主虚拟机130接收使用定时器的固定周期虚拟中断的同步定时信息。同步定时信息代表通过将主虚拟机130的执行速度转换为执行指令的数量而得到的周期时间,其是次虚拟机230的理论值。另一方面,在次虚拟机230中发生使用定时器的固定周期虚拟中断时的周期时间是测量值。通过从测量值中减去理论值得到的值是测量延迟时间。
[0201]例如,当主虚拟机130中实际发生的定时器中断的周期值是IOms时,若次虚拟机230在进行与主虚拟机130相同的操作后接收虚拟中断,则假设次虚拟机230中定时器中断的周期的测量值为15ms。在该情况下,因为理论值为10ms,而测量值为15ms,所以计算出定时器中断有5ms的延迟。
[0202]若测量延迟时间与从同步校正信息得到的假定延迟时间可比较,则确定为正常延迟,继续处理。因为测量延迟时间随着处理的继续而累积,所以提前设置作为可容许范围的可容许延迟时间,在当测量延迟时间超过可容许延迟时间的时点处再次执行与并行同步操作启动时相同的同步初始化处理以重设延迟。
[0203]例如,当主虚拟机130的程序执行速度为1500MIPS (百万指令每秒),并且次虚拟机230的程序执行速度为1000MIPS时,若在次虚拟机230中出现延迟,该延迟为每秒处理500MI(5亿指令)所需的时间,则确定为正常延迟。同样,连续10秒累积的用于处理5000MI(50亿指令)的时间在次虚拟机230中对应于5秒,若时间超过可容许延迟时间,则执行再同步以重设延迟。
[0204]随后,将描述提前某一时间以克服延迟的方法作为第二校正方法。在该方法中,当主客户0S140变为空闲状态,并且操作停止直至随后的虚拟中断输入至主客户0S140时,也就是当CPU处理的负荷小于100%时,将次客户0S240重新开始的时间提前以克服延迟。
[0205]主客户0S140的空闲状态代表没有待执行的处理并且主客户0S140的操作停止的状态。主客户0S140直至输入虚拟中断以执行处理程序处理才重新启动操作。直到那时,主虚拟机130等待外部中断的输入。
[0206]主虚拟机130继续等待外部中断的实际输入,次虚拟机230继续等待用于输入虚拟中断的同步信息的接收。
[0207]当次虚拟机230被延迟时,因为同步信息累积,所以可以已知接下来要输入的虚拟中断。为此,次虚拟机230不需要等待与主虚拟机130相同的时间,而是可以将重新启动次客户0S240的时间提前,并且输入虚拟中断。
[0208]例如,如第一校正方法,假设主虚拟机130的程序执行速度为1500MIPS,次虚拟机230的程序执行速度为1000MIPS。当主客户0S140的CPU负荷为20%时,执行每秒300MI的处理,使主虚拟机130停止达一秒内的剩余时间。主虚拟机130的停止时间是当主虚拟机130执行1200MI的处理期间的时间。
[0209]另一方面,在次虚拟机230已经在一秒内执行了与主虚拟机130相同的300MI的处理后,次虚拟机230不在执行与主虚拟机130相同的1200MI的处理的持续时间内停止,而是在一秒的剩余时间内停止,即,当次虚拟机230执行700MI的处理的持续时间内停止。由此,次虚拟机230的停止时间从1200MI减少至700MI处理时间,因此能够克服次虚拟机230的延迟。
[0210]随后,将描述当主虚拟机130比次虚拟机230的速度高时提供次虚拟机230的操作性能作为通知给次虚拟机230的同步校正信息的操作速度信息。
[0211]在该情况下,因为主虚拟机130以次虚拟机230的操作性能运行,所以主虚拟机130的同步信息生成单元135在并行同步操作期间执行同步校正处理以调节程序执行速度。具体来说,主虚拟机130在依照次虚拟机230的程序执行速度进行暂停的情况下执行操作。
[0212]其后,将描述当调节了操作性能后的次虚拟机230比调节了操作性能后的主虚拟机130的速度更高时的同步校正。同步信息生成单元135设置要通知给次虚拟机230的同步校正信息的操作速度信息作为主虚拟机130的操作性能。
[0213]然后,主虚拟机130在并行同步操作期间不执行同步校正处理,并且次虚拟机230在依照主虚拟机130的程序执行速度进行暂停的情况下执行操作。
[0214]例如,当主虚拟机130的程序执行速度为1000MIPS,次虚拟机230的程序执行速度为1500MIPS时,次虚拟机230执行1000MI的处理并随后在每个固定周期的虚拟中断执行用于执行500MI的处理的持续时间的暂停。因此,两台虚拟机(130,230)可以同样地执行1000MIPS的处理。
[0215](针对具有不确定访问时间的存储器装置的处置)
[0216]当虚拟机(130,230)访问诸如磁盘、SSD、⑶、DVD、或磁带之类的存储装置(115,215)时,由于存储装置(115,215)的个体差异或老化,针对访问请求的完成等待时间有变化。为了防止该变化导致的不同步,需要适合于较晚完成等待时间,并且发生同步等待,由此导致执行速度减小。
[0217]在根据本实施例的容错系统10中,当装置(115,215)是存储装置时,虚拟机(130,230 )在内存上仿真装置(115,215 ),并且用内存访问代替对装置(115,215 )的访问,由此能够将对装置(115,215)的读/写请求的完成等待时间减小至零。
[0218]在该情况下,对装置(115,215)的读/写请求的完成中断不需要等待实际的完成中断,而是当请求时与内存访问一起将虚拟中断输入至客户0S(140,240),由此能够以共同的同步定时处理读/写请求和完成虚拟中断。因此,对由于完成中断而导致的虚拟中断的同步处理变得不必要,减小了处理负荷,可以防止由于同步等待导致的执行速度的减小。
[0219]在内存中仿真的装置(115,215)内容中的改变与来自客户OS (140, 240)的访问不同步地反映在装置(115,215)上。在应对方法中,处理可能根据分配内存的位置而不同。
[0220](I)分配虚拟机(130,230)内的内存的情况:
[0221]虚拟机(130,230)在分配给虚拟机(130,230)的内存上加载存储装置(115,215)的内容,并用内存访问替换对存储装置的访问。该内存叫做“虚拟存储器”。当更新虚拟存储器的内容时,虚拟机(130,230)与来自客户OS (140, 240)的访问不同步地在存储装置(115,215)上反应内容的改变。
[0222]具体来说,在以下过程中读写数据。首先,作为虚拟存储器的初始化,在提前分配给虚拟机(130,230)的内存上加载存储装置(I 15,215)的内容。
[0223]在读数据时,当客户OS (140,240)向虚拟存储器请求读数据时,虚拟机(130,230)向客户OS (140, 240)通知虚拟存储器上的内容,将读完成的虚拟中断输入至客户OS(140,240)。
[0224]在写数据时,当客户OS (140, 240)向虚拟存储请求写数据时,虚拟机(130,230)在虚拟存储中写数据,将写完成的虚拟中断输入至客户OS (140,240)。然后,虚拟机(130,230)异步地将虚拟存储器的改变部分写进存储装置(115,215)。在将数据写进存储装置(115,215)完成后,完成的外部中断被输入至虚拟机(130,230)。但是,不需要生成基于完成的外部中断的虚拟中断。
[0225](2)分配客户OS (140, 240)内的内存的情况
[0226]当客户OS (140, 240)可以使用RAM (随机访问存储器)盘时,在客户OS (140, 240)中配置的RAM盘用于存储装置(115,215)的仿真。RAM盘是读和写的等待时间为零并且没有完成中断发生的装置。例如,RAM盘可以被诸如Linux (注册商标)之类的OS使用。
[0227]在客户OS (140,240)内的RAM盘上进行关于上述虚拟存储器的读和写,不在虚拟机(130,230)上进行读和写的请求。因为在客户OS (140,240)内部已经完成了处理,针对读/写请求或完成中断的同步处理变得不必要。
[0228]具体地,在随后的过程中进行RAM盘的数据读写。首先,作为RAM盘的初始化,提前在客户OS (140, 240)的内存上加载存储装置(115,215)的内容。
[0229]在读数据时,当客户OS (140, 240)向RAM盘请求读数据时,将RAM盘上的存储装置(115,215)的内容通知给客户OS (140,240)。不需要读完成的虚拟中断。
[0230]在写数据时,当客户0S( 140,240)向RAM盘请求写数据时,数据被写进RAM盘。不需要写完成的虚拟中断。然后,客户OS (140,240)使RAM盘的内容周期性地保存在存储装置(115,215)中。
【权利要求】
1.一种各错系统,包括: 在主机上形成的主虚拟机,主管理程序在所述主机中运行,所述主虚拟机被配置为将基于来自所述主管理程序的外部中断的虚拟中断输入至主客户OS ;以及 在次机上形成的次虚拟机,次管理程序在所述次机中运行,所述次虚拟机被配置为基于与所述主虚拟机所发送的虚拟中断有关的定时信息来将虚拟中断输入至次客户OS, 其中当将虚拟中断输入至所述主客户OS时,所述主虚拟机被配置为挂起所述主客户OS,并且确定挂起位置是否在临界段中, 其中如果所述主虚拟机确定了所述挂起位置不在所述临界段中,则所述主虚拟机被配置为在所述挂起位置处输入虚拟中断,并且 其中如果所述主虚拟机确定了所述挂起位置在所述临界段中,则所述主虚拟机被配置为改变所述挂起位置,并且再次确定挂起位置是否在所述临界段中。
2.如权利要求1所述的容错系统, 其中基于所述主虚拟机的状态来对所述挂起位置是否在所述临界段中进行确定。
3.如权利要求2所述的容错系统, 其中所述主虚拟机的状态包括关于中断屏蔽的配置信息和标志寄存器的内容中的任一个。
4.如权利要求1所述的容错系统, 其中通过配置用于挂起的事件以及确定是否由该事件引起挂起因素来对所述挂起位置是否在所述临界段中进行确定。
5.如权利要求1所述的容错系统, 其中所述主客户OS和在所述主客户OS上运行的应用程序由中间语言描述,并且 其中所述主虚拟机被配置为基于所执行的中间语言指令来确定所述挂起位置是否在所述临界段中。
6.一种用于通过主虚拟机和次虚拟机执行容错的方法,所述主虚拟机形成在主机上,主管理程序运行在所述主机中,所述主虚拟机被配置为将基于来自主管理程序的外部中断的虚拟中断输入至主客户OS,所述次虚拟机形成在次机上,次管理程序运行在所述次机中,所述次虚拟机被配置为基于与主虚拟机所发送的虚拟中断有关的定时信息来将虚拟中断输入至次客户OS,所述方法包括: 当将虚拟中断输入至主客户OS时,挂起主客户OS,并且确定挂起位置是否在临界段中;以及 如果确定了挂起位置不在临界段中,则在挂起位置处输入虚拟中断,并且如果确定了挂起位置在临界段中,则改变挂起位置并再次确定挂起位置是否在所述临界段中。
【文档编号】G06F11/07GK103678021SQ201310428460
【公开日】2014年3月26日 申请日期:2013年9月18日 优先权日:2012年9月18日
【发明者】吉田善贵, 植原正太, 大野毅 申请人:横河电机株式会社
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1