《容错系统和用于执行容错的方法.pdf》由会员分享,可在线阅读,更多相关《容错系统和用于执行容错的方法.pdf(27页珍藏版)》请在专利查询网上搜索。
1、(10)申请公布号 CN 103678021 A (43)申请公布日 2014.03.26 CN 103678021 A (21)申请号 201310428460.X (22)申请日 2013.09.18 2012-204606 2012.09.18 JP G06F 11/07(2006.01) G06F 9/455(2006.01) (71)申请人 横河电机株式会社 地址 日本东京 (72)发明人 吉田善贵 植原正太 大野毅 (74)专利代理机构 北京天昊联合知识产权代理 有限公司 11112 代理人 陈源 李铭 (54) 发明名称 容错系统和用于执行容错的方法 (57) 摘要 本发明公开了。
2、容错系统和用于执行容错的方 法。 主虚拟机在主机上形成, 主管理程序在该主机 中运行, 主虚拟机将基于来自主管理程序的外部 中断的虚拟中断输入至主客户 OS。次虚拟机在次 机上形成, 次管理程序在该次机中运行, 次虚拟机 基于与主虚拟机所发送的虚拟中断有关的定时信 息来将虚拟中断输入至次客户 OS。当将虚拟中断 输入至主客户 OS 时, 主虚拟机挂起主客户 OS, 并 且确定挂起位置是否在临界段中。如果挂起位置 不在临界段中, 则主虚拟机在挂起位置处输入虚 拟中断。 如果挂起位置在临界段中, 则主虚拟机改 变挂起位置, 并再次进行确定。 (30)优先权数据 (51)Int.Cl. 权利要求书 。
3、1 页 说明书 18 页 附图 7 页 (19)中华人民共和国国家知识产权局 (12)发明专利申请 权利要求书1页 说明书18页 附图7页 (10)申请公布号 CN 103678021 A CN 103678021 A 1/1 页 2 1. 一种容错系统, 包括 : 在主机上形成的主虚拟机, 主管理程序在所述主机中运行, 所述主虚拟机被配置为将 基于来自所述主管理程序的外部中断的虚拟中断输入至主客户 OS ; 以及 在次机上形成的次虚拟机, 次管理程序在所述次机中运行, 所述次虚拟机被配置为基 于与所述主虚拟机所发送的虚拟中断有关的定时信息来将虚拟中断输入至次客户 OS, 其中当将虚拟中断输入。
4、至所述主客户 OS 时, 所述主虚拟机被配置为挂起所述主客户 OS, 并且确定挂起位置是否在临界段中, 其中如果所述主虚拟机确定了所述挂起位置不在所述临界段中, 则所述主虚拟机被配 置为在所述挂起位置处输入虚拟中断, 并且 其中如果所述主虚拟机确定了所述挂起位置在所述临界段中, 则所述主虚拟机被配置 为改变所述挂起位置, 并且再次确定挂起位置是否在所述临界段中。 2. 如权利要求 1 所述的容错系统, 其中基于所述主虚拟机的状态来对所述挂起位置是否在所述临界段中进行确定。 3. 如权利要求 2 所述的容错系统, 其中所述主虚拟机的状态包括关于中断屏蔽的配置信息和标志寄存器的内容中的任 一个。 。
5、4. 如权利要求 1 所述的容错系统, 其中通过配置用于挂起的事件以及确定是否由该事件引起挂起因素来对所述挂起位 置是否在所述临界段中进行确定。 5. 如权利要求 1 所述的容错系统, 其中所述主客户 OS 和在所述主客户 OS 上运行的应用程序由中间语言描述, 并且 其中所述主虚拟机被配置为基于所执行的中间语言指令来确定所述挂起位置是否在 所述临界段中。 6. 一种用于通过主虚拟机和次虚拟机执行容错的方法, 所述主虚拟机形成在主机上, 主管理程序运行在所述主机中, 所述主虚拟机被配置为将基于来自主管理程序的外部中断 的虚拟中断输入至主客户 OS, 所述次虚拟机形成在次机上, 次管理程序运行在。
6、所述次机中, 所述次虚拟机被配置为基于与主虚拟机所发送的虚拟中断有关的定时信息来将虚拟中断 输入至次客户 OS, 所述方法包括 : 当将虚拟中断输入至主客户 OS 时, 挂起主客户 OS, 并且确定挂起位置是否在临界段 中 ; 以及 如果确定了挂起位置不在临界段中, 则在挂起位置处输入虚拟中断, 并且如果确定了 挂起位置在临界段中, 则改变挂起位置并再次确定挂起位置是否在所述临界段中。 权 利 要 求 书 CN 103678021 A 2 1/18 页 3 容错系统和用于执行容错的方法 技术领域 0001 本发明涉及使用虚拟机的容错系统以及使用虚拟机来执行容错的方法。 背景技术 0002 容错。
7、系统是这样一种系统, 即使在系统配置的一部分中出现缺陷的情况下, 容错 系统也能够继续操作, 而不会使整个系统崩溃, 并且容错系统尤其适用于要求具有高度有 效性和不间断系统有效性的系统。 例如, 即使在发生硬件故障的情况下, 采用了容错系统的 服务器计算机也可以输出正确的数据, 而不会有对来自外部装置的客户应用程序进行的网 络访问作出响应的通信错误。 0003 如 JP-A-2009-80695 所公开的, 已知一种在运行于两台彼此通信的计算机上的虚 拟机中实现容错系统的技术。使用虚拟机的容错系统将这两台虚拟机的执行状态同步, 以 进行相同的操作。当在其中一台计算机中出现故障时, 在另一台计算。
8、机中操作的虚拟机接 管处理, 由此连续而不中断地提供系统的服务。 0004 在使用虚拟机的容错系统中, 将一台虚拟机作为主虚拟机, 而将另一台虚拟机设 为次虚拟机。 将主虚拟机构造为领先于次虚拟机执行同一操作并接管对关于外部装置进行 输入 / 输出的控制。 0005 通常, 当执行相同程序的两台计算机以完全相同的定时从外部装置接收输入时, 这两台计算机会进行相同的操作, 并且输出相同的数据。 因此, 当在使用虚拟机的容错系统 中基于外部输入发生中断时, 该容错系统令主虚拟机将中断发生的时刻作为同步信息发送 至次虚拟机。然后, 以一定延迟运行的次虚拟机在与同步信息所通知的时刻相同的时刻产 生虚拟。
9、中断, 由此主虚拟机和次虚拟机以彼此同步的方式执行相同的操作。 0006 图 6 是示出了传统的使用虚拟机的容错系统的配置的框图。如图 6 所示, 容错系 统 60 包括了在网络上彼此连接的主机 600 和次机 700。 0007 在主机 600 中, 主管理程序 620 在作为物理计算机环境的主硬件 610 上运行, 并且 主机 600 中配置了主虚拟机 630。在主虚拟机 630 中运行主客户 OS(操作系统) 640, 并且 在主客户 OS640 上执行应用程序 650。 0008 主硬件 610 配备有诸如 CPU (中央处理单元) 、 内存、 网络接口卡 (NIC) 、 和存储器之 。
10、类的多种装置。 0009 主虚拟机 630 分配有主硬件 610 的一部分硬件资源, 并且在虚拟计算机环境中接 管与外部装置相关的输入 / 输出的控制。主虚拟机 630 由主管理程序 620 管理。 0010 同样, 在次机 700 中, 次管理程序 720 在作为物理计算机环境的次硬件 710 上运 行, 并且次机 700 中配置了次虚拟机 730。在次虚拟机 730 中运行次客户 OS740, 并且在次 客户 OS740 上执行应用程序 750。 0011 次硬件 710 配备有诸如 CPU、 内存、 网络接口卡 (NIC) 、 和存储器之类的多种装置。 0012 次虚拟机 730 分配有。
11、次硬件 710 的一部分硬件资源, 并且在虚拟计算机环境中与 主虚拟机 630 同步地操作。次虚拟机 730 由次管理程序 720 管理。 说 明 书 CN 103678021 A 3 2/18 页 4 0013 在传统的容错系统 60 中, 在以下过程中主虚拟机 630 与次虚拟机 730 的执行状态 彼此同步。 0014 一旦接收到来自主硬件 610 的外部中断, 主管理程序 620 则将该外部中断输入至 主虚拟机 630。 0015 然后, 主虚拟机 630 将虚拟中断输入至主客户 OS640。现在, 将要描述将虚拟中断 从主虚拟机 630 输入至主客户 OS640。 0016 当在主客。
12、户 OS640 的处理期间出现诸如外部中断、 特权指令、 或异常之类的虚拟 机上下文切换事件时, 主客户OS640的处理被挂起, 客户OS上下文被切换至虚拟机上下文, 处理转移至主虚拟机 630。 0017 若主虚拟机630根据在其定时时刻的各种事件而需要在主客户OS640上输入虚拟 中断, 则主虚拟机 630 配置虚拟中断。当配置了虚拟中断时, 主虚拟机 630 终止处理, 当处 理返回至在生成事件时刻被挂起的主客户 OS640 时, 虚拟中断被输入至主客户 OS640。 0018 当主虚拟机 630 将虚拟中断输入至主客户 OS640 时, 主虚拟机 630 将同步信息发 送至次虚拟机73。
13、0。 同步信息包括对虚拟中断的识别信息、 以及用于输入虚拟中断的同步定 时信息。 0019 同步定时信息是关于在与虚拟中断被输入至主客户 OS640 相同的时刻将虚拟中 断输入至次客户 OS740 的信息, 并且包括指示了执行挂起位置和 CPU 特有的执行指令的数 量的信息。 0020 作为执行挂起位置, 可以使用表示当输入虚拟中断时所执行的指令地址的程序计 数器的值。执行指令的数量可以由 CPU 中提供的性能计数器的 CPU 执行指令数量计数器来 测量。 0021 在测量执行指令数量的情况下, 当主虚拟机 630 将虚拟中断输入至主客户 OS640 时, 将 CPU 执行指令数量计数器清零,。
14、 并且在重新开始执行主客户 OS640 前使 CPU 执行指令 数量计数器启动。因此, 计算出了自先前的虚拟中断输入以后由主客户 OS640 执行的指令 的数量。 0022 当仅有执行挂起位置被用作同步定时信息时, 在表示执行挂起位置的指令包括在 循环处理中或者包括在条件分支目的地中的情况下无法指定虚拟中断输入的时刻, 这是因 为每次当进行到循环或条件分支进程都会执行该指令。 0023 同样, 当仅有执行指令的数量被用作同步定时信息时, 由于诸如流水线处理之类 的高速化技术, 使得次客户 OS740 不能以所指定的执行指令的数量来挂起, 并且不可避免 地在超出执行指令的数量后被挂起。由此, 虚。
15、拟中断不能在与主客户 OS640 相同的时刻被 输入到次客户 OS740。 0024 在该情形下, 将执行挂起位置和执行指令的数量结合在一起作为同步定时信息, 并且每次在次客户 OS740 中对执行挂起位置所表示的指令进行处理时确认执行指令的数 量。因此, 在与将虚拟中断输入到主客户 OS640 中相同的时刻来将次客户 OS740 挂起。 0025 因此, 当在挂起了主客户 OS640 的执行之后主虚拟机 630 将虚拟中断输入至主客 户 OS640 时, 主虚拟机 630 获取挂起主客户 OS640 的执行时刻的程序计数器的值、 以及 CPU 执行指令数量计数器的值, 以生成同步定时信息。然。
16、后, 主虚拟机 630 将有关虚拟中断的识 别信息和同步定时信息发送至次虚拟机 730 作为同步信息。 说 明 书 CN 103678021 A 4 3/18 页 5 0026 接收到了同步信息的次虚拟机 730 根据同步定时信息来挂起次客户 OS740 的执 行。将参照图 7 的流程图来描述该情形下次虚拟机 730 的操作。 0027 将暂停 (break)指令嵌入同步定时信息的执行挂起位置所指定的程序位置中 (S401) , 并且重新启动次客户 OS740 (S402) 。然后, 当次客户 OS740 停止 (S403 中为是) 时, 确认 CPU 执行指令数量计数器, 并且若计数器值匹配。
17、执行指令的指定数量 (S404 中为是) , 则次客户 OS740 在停止位置处挂起 (S405) 。若计数器值不匹配执行指令的指定数量 (S404 中为否) , 则次客户 OS740 重新启动 (S402) 并重复确认执行指令的数量。 0028 当次虚拟机 730 挂起次客户 OS740 时, 次虚拟机 730 根据同步信息的虚拟中断 识别信息来配置虚拟中断 (S406) , 并且重新启动次客户 OS740(S407) 。因此, 在与主客户 OS640 相同的时刻将虚拟中断输入至次客户 OS740, 并且主虚拟机 630 和次虚拟机 730 的执 行状态彼此同步。 0029 当在主机600和。
18、次机700的任何一个中发生硬件故障时, 打乱了执行状态的同步。 当执行状态的同步被打乱时, 主虚拟机630和次虚拟机730之间的输出数据的值变得不同。 在该情况下, 容错系统 60 对比次虚拟机 730 的输出来检查主虚拟机 630 的输出, 若输出数 据的值彼此不同, 则确定发生硬件故障。 0030 为了进行该故障确定处理, 次虚拟机 730 装配有输出数据检查单元 731, 其搜集主 虚拟机 630 的输出数据, 并对比次虚拟机 730 的输出数据来检查所搜集的输出数据。 0031 如上所述, 当主虚拟机 630 将虚拟中断输入至主客户 OS640 时, 主客户 OS640 应在 一个位置。
19、处被挂起, 在该相同位置处次客户 OS740 也被挂起。 0032 但是, 当主客户 OS640 由于诸如外部中断之类的虚拟机上下文切换事件而被挂 起, 并且控制被转移至主虚拟机 630 时, 主客户 OS640 的挂起位置可能在临界段 (critical section) 中。在本说明书中, 临界段是当多个处理同时在单个资源上执行时用来毁损进程 的程序段, 并且是由程序执行诸如暂停指令无效之类的互斥控制所在的段。 0033 在该情况下, 当虚拟中断在位于临界段内的挂起位置处输入至主客户 OS640 时, 即使暂停指令被嵌入相同的位置中, 次客户 OS740 也不能在相同的位置处挂起, 而是在。
20、处 理该临界段之后将次客户 OS740 挂起。在这种情况下, 虚拟中断位置转移, 执行状态不同 步。 发明内容 0034 本发明的示例性实施例提供了这样的一种容错系统和用于执行容错的方法 : 其将 基于主虚拟机中的外部中断的虚拟中断以相同的定时输入至次虚拟机, 从而让主虚拟机和 次虚拟机执行并行同步操作, 其中调节主虚拟机中的虚拟中断定时, 使得次虚拟机可以以 相同的定时输入虚拟中断。 0035 根据本发明的示例性实施例的容错系统, 包括 : 0036 在主机上形成的主虚拟机, 主管理程序在所述主机中运行, 主虚拟机被配置为将 基于来自所述主管理程序的外部中断的虚拟中断输入至主客户 OS ; 。
21、以及 0037 在次机上形成的次虚拟机, 次管理程序在所述次机中运行, 次虚拟机被配置为基 于与主虚拟机所发送的虚拟中断有关的定时信息来将虚拟中断输入至次客户 OS, 0038 其中当将虚拟中断输入至主客户 OS 时, 主虚拟机被配置为挂起主客户 OS, 并且确 说 明 书 CN 103678021 A 5 4/18 页 6 定挂起位置是否在临界段中, 0039 其中如果主虚拟机确定了挂起位置不在临界段中, 则主虚拟机被配置为在挂起位 置处输入虚拟中断, 并且 0040 其中如果主虚拟机确定了挂起位置在临界段中, 则主虚拟机被配置为改变挂起位 置, 并且再次确定挂起位置是否在所述临界段中。 0。
22、041 可以基于主虚拟机的状态来对挂起位置是否在临界段中进行确定。 0042 主虚拟机的状态可以包括关于中断屏蔽的配置信息和标志寄存器的内容中的任 一个。 0043 可以通过配置用于挂起的事件以及确定是否由该事件引起挂起因素来对中断位 置是否在临界段中进行确定。 0044 主客户 OS 和在主客户 OS 上运行的应用程序可以由中间语言描述, 并且主虚拟机 可以被配置为基于所执行的中间语言指令来确定挂起位置是否在临界段中。 0045 根据本发明的示例性实施例的用于通过主虚拟机和次虚拟机执行容错的方法, 所 述主虚拟机形成在主机上, 主管理程序运行在所述主机中, 所述主虚拟机被配置为将基于 来自主。
23、管理程序的外部中断的虚拟中断输入至主客户 OS, 所述次虚拟机形成在次机上, 次 管理程序运行在所述次机中, 所述次虚拟机被配置为基于与主虚拟机所发送的虚拟中断有 关的定时信息来将虚拟中断输入至次客户 OS, 所述方法包括 : 0046 当将虚拟中断输入至主客户 OS 时, 挂起主客户 OS, 并且确定挂起位置是否在临界 段中 ; 以及 0047 如果确定了挂起位置不在临界段中, 则在挂起位置处输入虚拟中断, 并且如果确 定了挂起位置在临界段中, 则改变挂起位置并再次确定挂起位置是否在所述临界段中。 0048 根据本发明的示例性实施例, 在将基于主虚拟机中的外部中断的虚拟中断以相同 的定时输入。
24、至次虚拟机, 从而让主虚拟机和次虚拟机执行并行同步操作的容错系统和用于 执行容错的方法中, 可以调节主虚拟机中的虚拟中断定时, 使得次虚拟机可以以相同的定 时输入虚拟中断。 附图说明 0049 图 1 是示出了根据一个实施例的容错系统的配置的框图。 0050 图 2 是示出了主虚拟机和次虚拟机的并行同步操作的概要的流程图。 0051 图3A和图3B是示出了通过分支数和执行挂起位置来识别虚拟中断输入位置的示 图。 0052 图 4 是示出了当 CPU 架构的细节已知时, 虚拟中断定时调节操作的具体过程的流 程图。 0053 图5是示出了当CPU架构的细节未知时, 虚拟中断定时调节的具体过程的流程。
25、图。 0054 图 6 是示出了相关技术中的使用虚拟机的容错系统的配置的框图。 0055 图 7 是示出了让已经接收到同步信息的次虚拟机根据同步定时信息来挂起次客 户 OS 的执行的操作流程图。 具体实施方式 说 明 书 CN 103678021 A 6 5/18 页 7 0056 将参照附图来描述根据本发明的实施例。图 1 是示出了根据本实施例的容错系统 的配置的框图。如图 1 所示, 容错系统 10 包括通过网络彼此连接的主机 100 和次机 200。 主机 100 和次机 200 可以由诸如服务器计算机或个人计算机之类的通用计算机来配置。 0057 在主机 100 中, 主管理程序 12。
26、0 在作为物理计算机环境的主硬件 110 上运行, 并且 主虚拟机 130 由主管理程序 120 构成。在主虚拟机 130 中, 主客户 OS140 运行, 并且在主客 户 OS140 上执行应用程序 150。 0058 主硬件 110 配备有以下多种装置, 诸如 CPU111、 内存 112、 定时器 113、 网络接口卡 (NIC) 114、 和存储器之类的装置 115。 0059 主虚拟机 130 分配有主硬件 110 的部分硬件资源, 并且接管对于与外部装置相关 的输入 / 输出的控制。主虚拟机 130 用作虚拟计算机环境。主虚拟机 130 由主管理程序 120 管理。主程序管理 12。
27、0 能够管理多个主虚拟机 130。 0060 同样, 在次机 200 中, 次管理程序 220 在作为物理计算机环境的次硬件 210 上运 行, 并且次虚拟机 230 由次管理程序 220 构成。在次虚拟机 230 中, 次客户 OS240 运行, 并 且在次客户 OS240 上执行应用程序 250。 0061 次硬件 210 配备有以下多种装置, 诸如 CPU211、 内存 212、 定时器 213、 网络接口卡 (NIC) 214、 和存储器之类的装置 215。 0062 次虚拟机 230 分配有次硬件 210 的部分硬件资源, 并且在虚拟计算机环境中与主 虚拟机 130 同步地运行。次虚。
28、拟机 230 由次管理程序 220 管理。次管理程序 220 能够管理 多个次虚拟机 230。 0063 在容错系统 10 中, 仅由主虚拟机 130 来控制与外部装置相关的输入 / 输出, 主虚 拟机 130 在次虚拟机 230 之前运行。 0064 在本实施例中, 为主虚拟机 130 提供了虚拟中断生成单元 131 和同步信息生成单 元 135, 并且为次虚拟机 230 提供虚拟中断输入转换单元 231 和同步校正单元 235。 0065 主虚拟机 130 的虚拟中断生成单元 131 生成虚拟中断, 该虚拟中断是通过调节中 断频率和实际从主管理程序 120 输入外部中断输入的定时而得到的,。
29、 并且该虚拟中断生成 单元 131 将生成的虚拟中断输入至主客户 OS140。为虚拟中断生成单元 131 提供了用于调 节中断频率的中断频率调节单元 132 以及用于调节中断定时的中断定时调节单元 133。 0066 主虚拟机130的同步信息生成单元135基于执行挂起位置和分支执行数量来指定 被调节并输入至主客户 OS140 的虚拟中断的定时。同步信息生成单元 135 配备有用于计算 在输入虚拟中断以前主客户 OS140 中的程序分支数的分支执行数量生成单元 136。 0067 同步信息生成单元 135 在主虚拟机 130 和次虚拟机 230 的并行同步操作前, 从次 虚拟机230搜集操作性能。
30、信息。 当主硬件110和次硬件210之间的硬件配置不同时, 同步信 息生成单元 135 生成用于校正处理速度差的同步校正信息, 并且将同步校正信息发送至次 虚拟机 230 的同步校正单元 235。同步信息生成单元 135 按场合要求来调节主虚拟机 130 的操作。 0068 次虚拟机 230 的虚拟中断输入转换单元 231 根据从主虚拟机 130 发送的同步信 息的同步定时信息来使次客户 OS240 的处理前移至虚拟中断输入位置, 并且挂起次客户 OS240。然后, 虚拟中断输入转换单元 231 接收虚拟中断。为了使次客户 OS240 的处理前移 至虚拟中断输入位置, 并且挂起次客户 OS24。
31、0, 为虚拟中断输入转换单元 231 提供了指定分 说 明 书 CN 103678021 A 7 6/18 页 8 支数执行单元 232 和指定位置上下文切换单元 233。 0069 次虚拟机 230 的同步校正单元 235 在并行同步操作之前基于从主虚拟机 130 的同 步信息生成单元 135 发送的同步校正信息来调节次虚拟机的操作。同步校正单元 235 按场 合要求在并行同步操作中调节主虚拟机 130 和次虚拟机 230 之间的处理速度差。 0070 (并行同步操作的概要) 0071 随后, 将参照图 2 的流程图来描述在如上所述配置的容错系统中主虚拟机 130 和 次虚拟机 230 彼此。
32、之间使执行状态同步的并行同步操作的概要。具体地, 将描述当主管理 程序 120 从主硬件 110 接收到外部中断时的操作序列。 0072 一旦接收到来自主硬件 110 的外部中断 (S101) , 主管理程序 120 就将外部中断输 入至主虚拟机 130(S102) 。 0073 从主管理程序 120 接收到外部中断的主虚拟机 130 将虚拟中断输入至主客户 OS140。在该情形下, 主虚拟机 130 不针对所有输入的外部中断将虚拟中断输入至主客 户 OS140, 而中断频率调节单元 132 对输入至主客户 OS140 的虚拟中断的频率进行调节 (S103) 。 0074 在使用虚拟机的容错系。
33、统 10 中, 当把虚拟中断输入至主客户 OS104 时, 为了同步 彼此的执行状态, 还要进行在相同时刻将虚拟中断输入至次客户 OS240 的处理。由此, 当在 主虚拟机 130 中频繁地出现虚拟中断时, 增加了用于对执行状态进行同步的处理负荷, 并 且减少了要分配给原服务的诸如 CPU 时间或通信带宽之类的资源。 0075 在根据本实施例的容错系统10中, 中断频率调节单元132调节虚拟中断的频率以 使得用于对执行状态进行同步的处理负荷最小, 并且防止用于原服务的处理能力减小。稍 后将描述由中断频率调节单元 132 所执行的中断频率调节操作的细节。 0076 作为由中断频率调节单元 132。
34、 调节虚拟中断的频率 (S103) 的结果, 若确定生成 了虚拟中断 (S104 中为是) , 则将虚拟中断输入至主客户 OS140。若确定没有生成虚拟中断 (S104 中为否) , 则该处理完成, 进程等待后续的来自主管理程序 120 的外部中断的输入。 0077 当虚拟中断被输入至主客户 OS140 时, 应在一个位置挂起主客户 OS140, 在同一位 置处将次客户 OS240 也挂起。 0078 例如, 当根据诸如外部中断之类的虚拟机上下文切换事件挂起主客户 OS140 以传 送对主虚拟机 130 的控制时, 主客户 OS140 的挂起位置可能在临界段中。该临界段是当多 个处理同时在单个。
35、资源上执行时用来毁损进程的程序段, 并且是由程序执行诸如暂停指令 无效之类的互斥控制所在的段。 0079 在该情况下, 当虚拟中断在位于临界段中的挂起位置处输入至主客户 OS140 时, 即使暂停指令被嵌入相同的位置中, 次客户 OS240 也不能在相同的位置处挂起, 而是在处 理该临界段之后将次客户 OS240 挂起。在这种情况下, 虚拟中断位置转移, 执行状态不同 步。 0080 在该情况下, 在根据本实施例的容错系统 10 中, 中断定时调节单元 133 调节虚拟 中断定时 (S105) , 并且在避开临界段的情况下挂起主客户 OS140, 由此能够在相同的位置 处挂起第二客户 OS24。
36、0。稍后将描述中断定时调节单元 133 进行的虚拟中断定时调节操作 的细节。 0081 当调节了虚拟中断定时时, 主虚拟机 130 将虚拟中断输入至主客户 OS140 (S106) 。 说 明 书 CN 103678021 A 8 7/18 页 9 然后, 同步信息生成单元 135 生成同步信息 (S107) 。 0082 同步信息包括关于虚拟中断的识别信息和同步定时信息。 同步定时信息包括由程 序计数器表示的执行挂起位置, 以及由性能计数器测量的 CPU 执行指令的数量。 0083 但是, 对于特定 CPU 特有的特殊指令, 存在这样的情况 : 可能发生性能计数器的计 数遗漏, 并且有可能未。
37、能准确地对在输入虚拟中断以前由主客户 OS140 执行的 CPU 执行指 令的数量进行计数。例如, 在英特尔公司制作的 Pentium(注册商标) 处理器中, 对于当 REP 指令的执行由于发生外部中断而被挂起时的 REP 指令的执行就没有被计入。由此, CPU 执 行指令计数可能变得小于执行指令的实际数量。 0084 这样, 因为对 CPU 执行指令数量的计数可能不准确, 所以根据本实施例的容错系 统 10 不将 CPU 执行指令的数量用于同步定时信息。 0085 但是, 因为程序通常包括大量的循环语句、 跳转语句、 和分支语句, 所以相同的指 令会执行多次。为此, 可能无法仅通过执行挂起位。
38、置来指定虚拟中断的输入定时。 0086 在该情况下, 根据本实施例的容错系统 10 使得同步定时信息包括执行挂起位置 和分支数。分支数代表从前一虚拟中断至当前虚拟中断所执行的分支指令的数量, 该数量 是执行顺序从依次执行发生改变的次数。 0087 通过提前在主客户 OS140 中计算分支数, 可以通过找出在执行了所计数量的分支 之后被第一次执行的位置, 来将执行挂起位置正确地指定为次客户 OS240 中的虚拟中断输 入位置。 0088 例如, 如图 3A 所示, 假设当指令代码 CodeA、 CodeB、 CodeC、 . 被分配于指令地址 a1、 a2、 a3、 , 并且 CodeC 至 C。
39、odeG 循环三次时, 在主客户 OS140 中的第十六次程序执行顺 序的 “a6” 处输入虚拟中断。该同步定时可以由分支数的计数值 “2” 和执行挂起位置 “a6” 表示。 0089 在该情况下, 在次虚拟机 230 中, 对分支数计数两次, 在第一次执行挂起位置 “a6” 处挂起次客户 OS240, 由此能够在与主客户 OS140 相同的定时处输入虚拟中断。 0090 由此为了执行对分支数进行计数的处理, 为同步信息生成单元 135 提供了分支执 行数生成单元136。 在指令代码级别中, 所有的循环语句、 跳转语句、 和分支语句都被分支指 令替代。因此, 在运行应用程序 150 时, 分支。
40、执行数生成单元 136 对由主客户 OS140 执行的 分支指令的数量进行计数, 由此能够对分支数计数。 为了对分支数计数, 可以使用性能计数 器。 0091 返回至图 2 的描述, 主虚拟机 130 生成包括有关虚拟中断的识别信息和同步定时 信息在内的同步信息, 然后将同步信息传送至次虚拟机 230(S108) 。 0092 为了根据同步定时信息来挂起次客户 OS240 的执行, 在接收到同步信息的次虚拟 机 230 中, 指定分支数执行单元 232 首先对执行次客户 OS240 时的分支数进行计数。当分 支计数达到同步定时信息中的分支数所表示的值时, 次虚拟机 230 挂起次客户 OS24。
41、0。也 就是, 次虚拟机 230 执行次客户 OS240 的次数达到指定分支数量 (S109) 。为此, 在分支计 数达到指定分支数量以前不需要监控执行挂起位置和 CPU 执行指令的数量, 减小了处理负 荷。稍后将描述指定分支数执行单元 232 所执行的指定分支数执行操作的细节。 0093 指定位置上下文切换单元 233 在同步定时信息的执行挂起位置所表示的位置处 挂起次客户 OS240 的执行 (S110) 。 说 明 书 CN 103678021 A 9 8/18 页 10 0094 在对次客户 OS240 的执行进行挂起过程中, 若使用了如在传统系统技术中嵌入 暂停指令以配置断点的技术,。
42、 则当客户 OS(140,240)或应用程序 (150,250)在虚拟机 (130,230) 中调试时, 挂起干扰了调试的断点, 并且不利地影响到相互的处理。因为可能存 在用户想要对彼此同步的虚拟机 (130,230) 上的应用程序 (150,250) 操作进行检查的情 况, 所以希望避免对断点的干扰。 0095 同样, 在不具有虚拟化支持功能的 CPU 中, 处理不能通过设置断点而从次客户 OS240 转移至次虚拟机 230。 0096 在该情况下, 在根据本实施例的容错系统 10 中, 指定位置上下文切换单元 233 执 行上下文切换, 而不使用暂停指令来挂起次客户 OS240 的执行。稍。
43、后将描述指定位置上下 文切换单元 233 执行的指定位置上下文切换操作的细节。 0097 当次虚拟机 230 挂起次客户 OS240 时, 次虚拟机 230 根据同步信息的虚拟中断识 别信息来配置虚拟中断以重新启动次客户OS240。 因此, 在与主客户OS140相同的定时处将 虚拟中断输入至次客户 OS240(S111) , 并且主虚拟机 130 和次虚拟机 230 的执行状态彼此 同步。 0098 若在主机 100 和次机 200 之一中出现硬件故障, 则执行状态变为不同步。在本实 施例中, 执行状态可以准确地彼此同步, 而不受到性能计数器的计数遗漏的影响。为此, 若 硬件正常, 则不会扰乱。
44、执行状态的同步。因此, 对执行状态的同步的扰乱被检测, 由此能够 检测到硬件故障。 0099 由于传统系统不能确定对执行状态的同步的扰动来源于硬件故障还是来源于对 执行指令数量的计数遗漏所产生的影响, 所以需要检查输出数据。 另一方面, 在根据本实施 例的容错系统 10 中, 因为可以通过执行状态的同步的扰动来检测到硬件故障, 因此不需要 检查用于故障检测的输出数据。因此, 可以减少用于检查输出数据的 CPU 处理负荷和通信 负荷。同样, 可以立即检测硬件故障的发生。 0100 对执行状态的同步的扰动检测可通过在例如次虚拟机 230 的虚拟中断输入转换 单元 231 中检测同步定时信息所指定的。
45、执行挂起位置被执行之前分支数超过同步定时信 息中所指定的次数时的同步扰乱来确定。 0101 (各块的操作细节) 0102 接下来将参照第一实施例、 第二实施例、 和第三实施例来描述容错系统 10 中各块 的操作。 0103 在传统容错系统中, 假设主机的 CPU 和次机的 CPU 具有相同的架构。这是因为传 统的同步技术依赖于 CPU 架构和 CPU 操作规范, 若 CPU 的类型不同, 则执行指令均不能彼此 同步, 并且可能不同步。 0104 另一方面, 如第一实施例和第二实施例所述, 根据本各个实施例的系统并不仅适 用于主机 100 的 CPU111 和次机 200 的 CPU211 具有。
46、相同架构的情况, 而是还适用于架构不 同的情况。 0105 通常, 当容错系统被操作很长一段时期后, 由于故障和老化, 该装置强制被新的取 代。在该情况下, 很难准备与先前的装置具有相同规范的装置。为此, 根据本实施例的容错 系统 10 具有即使 CPU 架构不同也能够继续并行同步操作的结构。 0106 说 明 书 CN 103678021 A 10 9/18 页 11 0107 作为第一实施例, 将描述主机 100 的 CPU111 和次机 200 的 CPU211 具有相同架构 的情况下的操作。在本说明书中, 相同的 CPU 架构意味着 CPU 指令集在两个处理器之间具 有兼容性。 010。
47、8 在该情况下, 主虚拟机 130 和次虚拟机 230 通过同步 CPU 指令级来执行并行同步 操作。为此, 在两台虚拟机 (130, 230) 中, 客户 OS(140,240) 和应用程序 (150,250) 的程序 通常相对于 CPU(111,211) 具有符合本机 CPU 指令代码的代码格式。假设该并行同步操作 叫做 “CPU 指令同步模式” 。 0109 (中断频率调节操作) 0110 首先, 将描述中断频率调节单元 132 执行的中断频率调节操作 (S103) 。主虚拟机 130 的中断频率调节单元 132 不会输入针对所有外部中断的虚拟中断, 而是将虚拟中断的 频率调节至达到应用。
48、程序 150 所需的性能和精度以及容许的通信延迟的程度。 0111 通常, 可以将外部中断分类为使用定时器 113 的固定周期中断和使用网络接口卡 (NIC) 114 或装置 115 的非固定周期中断。中断频率调节单元 132 分别根据固定周期中断 和非固定周期中断来执行频率的调节。 0112 在固定周期的外部中断中, 通过省略一些外部中断来以每固定周期的几个外部中 断一次的速度来将虚拟中断输入到主客户 OS140。 0113 例如, 当固定周期的定时器中断被输入至主客户OS140时, 由此主客户OS140可以 计算准确的时间。但是若应用程序 150 所需的时间精度不高, 则可以没有任何问题地。
49、省略 定时器中断的一些输入。 0114 例如, 当来自主管理程序 120 的定时器中断的周期为 1ms, 并且应用程序 150 中所 需的时间精度为100ms时, 即使虚拟中断周期变稀疏至10ms, 仍可以保证100ms的精度。 在 该情况下, 因为虚拟中断的频率减小至 1/10, 所以执行状态的同步处理也减小至 1/10。 0115 可以根据应用程序 150 所需的精度提前设置稀疏率, 或者通过参数对其进行调 节。 同样, 关于固定周期的外部中断可一致地设置该稀疏率, 或者可以针对固定周期的外部 中断每个因素来设置稀疏率。 0116 在非固定周期的外部中断中, 省去与处理期间外部中断输入相关的虚拟中断, 仅 将已经完成处理的最后的外部中断输入至主客户 OS140 来作为虚拟中断。 0117 例如, 每当数据到达 NIC。