虚拟机分支和并行执行的制作方法

文档序号:6443380阅读:307来源:国知局
专利名称:虚拟机分支和并行执行的制作方法
技术领域
本发明涉及虚拟机技术,尤其涉及虚拟机分支。
背景技术
分支可以指代计算机程序中在那里执行向下沿着多条可能的路径继续的任何点。 计算机科学中存在各种类型的分支。在机器级,软件汇编语言指令常常包含条件跳转。如果条件成功,则处理器将执行跳转所指定的位置处的代码。如果条件失败,则处理器将继续执行跳转之后的代码。如今很大程度上被流水线化且多核的处理器常常开始推测性地执行分支的两条路径。当执行到达分支条件并且该条件被评估时,处理器保持该分支被采用并转储清除推测性执行另一分支的中间结果。分支还在进程级上发生。诸如UNIX之类的操作系统包括应用编程接口(API),诸如创建进程副本并继续在新的进程中执行的fork O。这可用于多线程或用于追求进程的分叉的可能路径。测试复杂的系统常常涉及使系统到达特定条件的大量设置以及然后测试系统对各种刺激的反应。刺激可包括以模糊测试的形式提供各种输入,从而操纵连接的硬件来测试系统的反应等。系统的某些功能可产生实质的状态改变,从而难以回到先前的条件。在其他情况下,复杂的系统可能花费很长的时间来处理一批数据,却只发现该数据是不需要的, 或者要采用的分支将使得该数据变得不重要。如今分支在太低的级别上应用以致无法在这些情形中是有帮助的。复杂系统的测试以及其他领域需要这样的一种方法从已知状态开始并探索多个潜在的将来状态,而不必消耗太多时间和需要费力的设置。如今,通常测试装置(test harness)将串行地运行多个可能的测试遍历(test pass),或者在更高效的情况下,可充分利用多个机器来并行地运行测试。这可能仍然是耗时的,尤其在测试装置需要使每一机器到达共同状态来开始多个测试的情况下。对于复杂的状态评估,所涉及的时间可能意味着更少的时间用于测试如软件开发者希望的那么多的排列的系统,且结果在软件产品中有更多的错误。

发明内容
本文描述了在充分利用投入的时间来设置开始状态的同时允许复杂状态转换的并行执行的状态分支系统。该系统通过修改系统管理程序来允许在虚拟机级上进行分支来工作。通过允许在虚拟机级上进行分支,状态分支系统允许在虚拟机中设置特定条件或状态,随后复制虚拟机的并行实例并分支到虚拟机的并行实例以探索不同的可能的后续状态。对于更大且更复杂的评估这种解决方案频繁出现,尤其在机器的状态极大地受到这些评估的影响的情况下。在检测到或被通知具有未知结果的大的状态改变之后,状态分支系统指令系统管理程序将正在执行的虚拟机复制到一个或多个分开的虚拟机中。该系统随后允许在两个或更多个虚拟机(原始的虚拟机和副本)之间的分叉分支以探索从相似开始点的不同状态。一旦执行已经到达了下一状态,系统就进行协调以确定哪一个或哪些副本要继续执行。因此,状态分支系统允许对实质修改了计算机系统的状态的复杂状态改变的更快速的探索。提供本发明内容以便以简化形式介绍将在以下的具体实施方式
中进一步描述的一些概念。本发明内容并不旨在标识所要求保护主题的关键特征或必要特征,也不旨在用于限制所要求保护主题的范围。


图I是示出在一个实施例中的状态分支系统的组件的框图。图2是示出在一个实施例中的状态分支系统从原始虚拟机分支到一个或多个克隆虚拟机以考虑分叉状态的处理的流程图。图3是示出在一个实施例中的状态分支系统退出一个或多个克隆虚拟机并将执行会聚回原始虚拟机的处理的流程图。图4是示出在一个实施例中的状态分支系统对分支路径的并行处理的时间线图。
具体实施例方式本文描述了在充分利用投入的时间来设置开始状态的同时允许复杂状态转换的并行执行的状态分支系统。该系统通过修改系统管理程序来允许在虚拟机级上进行分支来工作。系统管理程序管理共享物理机的资源(例如,处理器、存储器、盘和网络)的一个或多个虚拟机进程。虽然所有的虚拟机运行在同一物理机上,但每一虚拟机一般是不知道其他虚拟机的且是和其他虚拟机隔离的。通过允许在虚拟机级上进行分支,状态分支系统允许在虚拟机中设置特定条件或状态,随后复制虚拟机的并行实例并分支到虚拟机的并行实例以探索不同的可能的后续状态。对于更大且更复杂的评估这种解决方案频繁出现,尤其在机器的状态极大地受到这些评估的影响的情况下。一个示例是模糊,其中能够在虚拟机中分支整个操作系统允许软件开发者极大地降低设置要模糊的下一迭代所花费的时间并允许对要被模糊的可能的执行路径的更快速的探索。在检测到或被通知具有未知结果的大的状态改变之后,状态分支系统指令系统管理程序将正在执行的虚拟机复制到一个或多个分开的虚拟机中。该系统随后允许在两个或更多个虚拟机(原始的虚拟机和副本)之间的分叉分支以探索从相似开始点的不同状态。 在某些实施例中,应用可调用系统管理程序以允许系统管理程序派生现有虚拟机的状态并将一个或多个重复的副本派生到新的虚拟机中。该系统随后允许各副本协调它们的判定树从而它们不重叠。一旦执行已经到达了下一状态,系统就进行协调以确定哪一个或哪些副本要继续执行。在某些情况下,系统可简单地分支到多个虚拟机中、探索若干状态、随后将结果组合回到原始虚拟机直到下一重大状态改变重复该过程。在某些实施例中,状态分支系统取决于系统管理程序和操作系统修改两者来允许虚拟机级的分支。操作系统包括检测何时需要分支的能力。这可涉及许多可能的触发,诸如第一机会异常通知、应用请求、用户模式第二机会异常等等。操作还可包括应用的API或其他手段来指定每个分支实例应该修改哪个判定点。修改系统管理程序以揭示允许主操作系统或客操作系统请求对现有客操作系统实例的复制的命令。系统管理程序还可冻结客操作系统的执行,从而阻止来自引起客操作系统上的执行的任何硬件中断。另外,系统管理程序指令存储器管理单元(MMU)为新的分支实例复制整个客操作存储器分配。在某些情况下,系统可不复制所有的存储器,而是只复制某些数据页以及可能的不复制可执行页,这取决于系统管理程序提供的分支支持的级别。以此方式,主操作或客操作确定何时到达了将受益于分叉路径的并行评估的判定点,并向系统管理程序和/或操作系统请求虚拟机级上的分支。因此,状态分支系统允许对实质修改了计算机系统的状态的复杂状态改变的更快速的探索。图I是示出在一个实施例中的状态分支系统的组件的框图。系统100包括系统管理程序组件110、调度组件120、VM通信组件130、分支标识组件140、状态克隆组件150、VM 分支组件160、克隆协调组件170和结果处理组件180。这些组件中的每一个都在此处进一步详细讨论。系统管理程序组件110在两个或更多个虚拟计算设备之间共享物理计算设备的资源。许多数据中心现在使用虚拟机来允许多个生产应用来在单个服务器上运行,每个应用在虚拟环境中,使得每个应用认为它具有对该机器的独占使用。相反,应用通常具有对虚拟机的独占使用,但共享物理资源。虚拟机向应用提供了有保证的硬件资源量,诸如中央处理单元(CPU)速度、存储器大小、盘容量、网络带宽等。系统管理程序广泛用于可允许多个虚拟机在同一计算机上并排运行的商用硬件(例如,XeruHyper-V和VMWare)。系统管理程序复用(并且有时调度)对诸如CPU、存储器、盘、网络的物理资源的访问。系统管理程序提供了用于CPU和I/O资源两者的调度程序,该调度程序能够提供全部资源在两个或更多个虚拟机之间的固定划分。这可以以许多方式完成,例如使用硬实时调度算法。调度组件120提供对物理机上的资源使用的调度以及在两个或更多个虚拟机之间的资源隔离的调度,该两个或更多个虚拟机包括原始虚拟机和克隆虚拟机。调度组件 120可以在系统管理程序中操作,并且提供了虚拟机隔离,从而使得每个虚拟机可以以满足提供给每个虚拟机的资源可用性的任意保证的方式来使用物理机的资源。例如,如果物理机具有2GHz处理器,并且,两个虚拟机中的每一个被保证有相等的特定部分的处理器的时间,则调度组件120可以确保每个虚拟机获得使用一半的物理机处理器时间。调度组件120 可以提供对物理机存储器、盘空间、网络带宽以及其它资源的类似划分。VM通信组件130提供两个或更多个虚拟机之间的一个或多个通信信道。对于交叉-VM通信存在各种技术,包括共享物理存储器、调用系统管理程序的超调用、将文件存储在物理盘上的公共位置等等。VM通信组件130可从原始虚拟机接收协调信息并将协调指令提供给一个或多个克隆虚拟机。协调信息可确保每一虚拟机遵循不同的分支以评估多个可能的状态。系统管理程序可以管理共享通信信道,并且对虚拟机实施安全或其它限制。原始虚拟机可充分利用系统管理程序内对创建克隆并协调这些克隆之间的活动的支持。分支标识组件140标识软件代码的当前状态以及作为候选的一个或多个后续状态,以用于分支运行该软件代码的原始虚拟机以评估一个或多个克隆虚拟机中的后续状态。组件140可通过分析软件代码来自动标识可能的分支,或者可由应用定向到要分支到的位置。分支的自动标识与如今的CPU相似地发生,其中分析引擎可查看即将到来的指令流中的多个步骤并标识将实质地变更机器的状态的指令、函数或其他行为。手动标识可由软件开发者编写测试程序或其他应用以请求在特定位置进行分支来发生。例如,测试可设置对若干测试共同的状态,然后通知主操作系统以请求分支执行每个测试追求的分叉路径。
状态克隆组件150复制来自原始虚拟机的状态信息以创建具有类似状态的一个或多个克隆虚拟机。复制可复制原始虚拟机的整个存储器和其他虚拟硬件,或者可只选择要用于探索每个克隆将追求的分叉状态的子集。例如,测试可关闭花很长时间打开的各种类型的多个操作系统句柄。原始虚拟机可执行打开所有句柄的工作,而克隆虚拟机各自关闭特定类型的句柄来测试各种条件。在该示例中,每一克隆虚拟机追求独立的状态,但可只需要与句柄有关的的状态的一个副本,或者更一般地与在虚拟机上运行的测试应用有关的状态的一个副本,而非所有状态信息或其他应用。VM分支组件160通过启动每一创建的克隆虚拟机并标识每一克隆要追求的执行的分支来执行分支。例如,如果分支标识组件140标识软件代码中出现的各自得到实质不同的状态的5个可能的路径,则测试应用可引导状态克隆组件150以创建4个克隆,其中原始虚拟机将追求这些状态中的一个而4个克隆虚拟机将追求剩余的4个状态。VM分支组件160通知每一克隆虚拟机它将要考虑的分支,诸如通过直接将指令指针和其他机器状态设置为该分支周围的位置和状态。VM分支组件160随后允许每一虚拟机执行以探索分叉状态。克隆协调组件170协调每一克隆虚拟机和原始虚拟机的动作以允许丢弃不需要的分支或合并分支结果。执行不同分支的目的在于找出执行在哪里结束。在许多情况下, 软件代码可追求若干分支中的一个,然后在共同的位置处结束但具有基于所采用的分支而得到不同的结果。因此,在分支之后的短暂时间段内执行分叉很大的代码,但随后在公共位置处进行会聚以考虑结果是常见的。克隆协调组件170允许测试或其他应用代码派遣多个克隆虚拟机进行某些工作以考虑各种状态,但随后通过考虑每一克隆虚拟机的结果并在状态探索完成时将执行传送回原始虚拟机来完成周期。这与如今的CPU如何推测性地执行若干分支然后转储清除那些最后没有被采用的分支相类似,只是由状态分支系统100在虚拟机级上在更广大的范围上应用。结果处理组件180处理每一虚拟机产生的结果并将结果提供给克隆协调组件 170。每一虚拟机(原始的和克隆的)可产生各种结果,包括简单的数字或文本结果,或者诸如发生在虚拟机上的进一步状态改变的复杂结果。作为一个示例,反病毒程序可能想要执行在计算设备上找到的若干所标识的软件代码模块,对计算设备扫描以寻找恶意代码来确定这些代码模块是否对计算设备进行任何破坏。反病毒程序可将每一软件代码模块派生到具有原始计算设备的所有特性的克隆虚拟机中,而结果就是软件代码对克隆作出的任何改变。反病毒程序可扫描结果以确定是否有任何改变是有害的(例如,删除重要的文件或发送垃圾邮件的联系人),并且可向原始应用提供指示是否找到有害结果的布尔结果。这允许每一克隆可能以某种方式混乱了克隆虚拟机的状态,但随后在获得特定结果之后被反病毒程序丢弃。作为另一示例,使用该系统的嵌入式设备可被设计成查验(Ping)网络以确定它是否应该执行某种复杂动作以及如何执行。这一分支将允许该设备使用物理设备的空闲处理能力同时作出高等待时间请求。可能这涉及计算以重新校准传感器或天线阵列,且嵌入式设备可在接收到网络响应之前开始可能的计算。在其上实现状态分支系统的计算设备可包括中央处理单元、存储器、输入设备 (例如,键盘和定点设备)、输出设备(例如,显示设备),以及存储设备(例如,磁盘驱动器或其他非易失性存储介质)。存储器和存储设备是可以用实现或启用该系统的计算机可执行指令(例如,软件)来编码的计算机可读存储介质。另外,数据结构和消息结构可被存储或经由诸如通信链路上的信号等数据传送介质发送。可以使用各种通信链路,诸如因特网、 局域网、广域网、点对点拨号连接、蜂窝电话网络等。该系统的实施例可以在各种操作环境中实现,这些操作环境包括个人计算机、服务器计算机、手持式或膝上型设备、多处理器系统、基于微处理器的系统、可编程消费电子产品、数码照相机、网络PC、小型计算机、大型计算机、包括任何上述系统或设备、机顶盒、片上系统(SOC)等中任一种的分布式计算环境等。计算机系统可以是蜂窝电话、个人数字助理、智能电话、个人计算机、可编程消费电子设备、数码相机等。该系统可以在由一个或多个计算机或其他设备执行的诸如程序模块等计算机可执行指令的通用上下文中描述。一般而言,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。通常,程序模块的功能可在各个实施例中按需进行组合或分布。图2是示出在一个实施例中的状态分支系统从原始虚拟机分支到一个或多个克隆虚拟机以考虑分叉状态的处理的流程图。在框210中开始,系统接收应用代码以供在原始虚拟机上执行,其中该应用代码包括得到虚拟机的两个或更多个可能的状态的至少一个分支。该系统可接收改变机器的状态的测试或其他应用代码,且分支可基于运行时评估的条件发生。系统标识实质上变更原始虚拟机的状态的分支,并并行地执行一个或多个克隆虚拟机以评估该分支弓I出的路径。在框220中继续,系统执行原始虚拟机,包括接收到的应用代码。例如,系统可在系统管理程序内操作,并引导共享同一物理资源的多个虚拟机的执行。系统执行原始虚拟机直到标识了可能显著改变虚拟机状态的分支。例如,分支可删除文件、执行长的计算、创建大量的数据或执行其他状态改变操作。在框230中继续,系统标识在原始虚拟机上运行的应用代码中得到虚拟机的两个或更多个可能的状态的分支。例如,系统可通过使用本领域公知的代码分析工具来自动标识分支以寻找软件代码中的分叉路径。许多静态和运行时分析工具在二进制代码级和/或源代码级上检查软件代码并标识应用状态中显著分叉的位置。在某些实施例中,系统可允许应用指示出该应用将分叉到多个可能状态的位置。例如,测试应用可调用操作系统API, 该操作系统API标识两个或更多个分支路径以使得系统可克隆虚拟机并并行地执行这些路径。在框240中继续,系统创建复制原始虚拟机的当前状态的一个或多个克隆虚拟机,然后在所创建的克隆虚拟机中处理分支的一条路径以探索后续状态。克隆可包括设置标识虚拟硬件的虚拟机规范、复制原始虚拟机的存储器状态、复制附连到原始虚拟机的盘等等。某种虚拟化软件将虚拟机存储在单个文件中,包括任何嵌入式文件系统(例如,微软 TM Virtual PC和Hyper-V使用的VHD文件)。系统可通过暂停原始虚拟机的执行并复制与虚拟机相关联的一个或多个文件来克隆虚拟机。在框250中继续,系统将每一克隆虚拟机设置为执行所标识的分支的不同路径。 如果克隆是原始的完美克隆,则它们各自都将如原始接下来做的那样做相同的事。然而,状态分支系统的一个目的是允许每一克隆并行地追求分支的不同路径。因此,系统将每一克隆设置为具有关于它负责探索哪条路径的信息,然后执行每一克隆和原始以允许它探索它的分配的路径。设置每一克隆可包括标识虚拟机将运行的软件代码、将指令指针和寄存器状态设到特定位置等等。在框260中继续,系统执行原始虚拟机和克隆的虚拟机以并行地探索所标识的分支的至少两条路径。如果分支的特定路径显著地变更了机器状态,只有执行该分支的虚拟机受到影响。同时,原始虚拟机可等待以确定执行克隆的虚拟机的效果,以收集关于分支路径的信息而不影响原始虚拟机状态。如果应用代码确定未满足采用分支路径的条件,则可简单地丢弃与该路径有关的虚拟机而原始虚拟机可继续。在某些情况下,系统可选择克隆虚拟机作为主虚拟机来继续(即,接管原始虚拟机的角色),而原始虚拟机可终止。在框270中继续,系统从克隆的虚拟机接收至少一个执行结果。该结果可指示克隆的虚拟机到达的状态、通过跨VM通信信道从克隆的虚拟机传递的信息、由克隆的虚拟机通过执行分支路径产生的输出等等。原始虚拟机可使用该执行结果来确定接下来要做什么或者选择原始虚拟机将继续处理它的结果的虚拟机。因为克隆的虚拟机被并行地执行,所以系统很可能比原本可能在原始虚拟机中尝试每一分支更快地到达结果。在框270之后, 这些步骤结束。图3是示出在一个实施例中的状态分支系统退出一个或多个克隆虚拟机并将执行会聚回原始虚拟机的处理的流程图。在框310中开始,系统选择第一克隆的虚拟机,该第一克隆的虚拟机通过先前检测原始虚拟机中的应用代码的分支并派生克隆的虚拟机以执行每一分支路径来创建。在后续迭代中,系统选择下一个克隆的虚拟机。在框320中继续,系统检测到所选克隆的虚拟机已经完成了它被分配的分支路径的执行。在某些情况下,分支路径可表示较大的代码主体的一小节,其中该小节以有用于隔离分支的执行以确定它在较大的代码主体之外的结果的方式来产生结果或改变状态。在克隆的虚拟机的设置期间,系统可在克隆的虚拟机将已经完成分支路径的执行的点处插入指令(例如,停机或中断)或其他指示。系统管理程序或其他代码可监视并检测该指令以检测克隆的虚拟机的完成。在框330中继续,系统标识执行克隆的虚拟机的结果状态。结果可包括数字结果、 克隆的虚拟机产生的数据、对克隆的虚拟机的状态改变等等。系统可将克隆的虚拟机与原始虚拟机进行比较以标识通过探索由克隆的虚拟机执行的分支路径而产生的改变。如果原始虚拟机决定采用该分支推测性地执行的路径,则原始虚拟机可复制所选的克隆的虚拟机的状态差异或所标识的结果。在判定框340中继续,系统确定是否存在与当前分支相关联的更多个克隆的虚拟机。如果是,则系统循环到框310以选择下一个克隆的虚拟机,否则在每一克隆的虚拟机完成处理之后系统在框350继续。在框350中继续,系统基于在原始虚拟机上运行的应用代码中的一个或多个条件来选择要采用的分支。在某些实施例中,克隆的虚拟机作为推测性执行引擎来操作,以推测性地执行原始虚拟机可能采用的分支路径。在原始虚拟机执行到已经评估了所有条件来了解将采用哪条路径的点之后,原始虚拟机可选择分支中的一个作为正确分支并丢弃其他分支。在其他实施例中,克隆的虚拟机可表示全部由原始虚拟机使用的但被并行地执行以更快地到达结果的累计结果。在这样的情况下,原始虚拟机从每一克隆的虚拟机接收结果、对接收到的结果执行任何进一步的处理以及在克隆的虚拟机完成之后继续。
在框360中继续,系统复制来自执行所选分支的克隆的虚拟机的所标识的结果状态。以此方式,原始虚拟机受益于由各个克隆的虚拟机执行的并行执行。无论采用哪个分支,原始虚拟机不会受到测试每一分支的打扰并且不必在先前代码完成之后等待串行地执行分支。相反,在原始虚拟机中完成先前代码的同时,克隆的虚拟机各自执行各分支中的一个,并且所选的虚拟机在它准备好之后(并且在原始虚拟机本身原本能够获得结果之前) 立即将结果提供给原始虚拟机。在框370中继续,系统使用来自克隆的虚拟机的复制结果来继续原始虚拟机的执行。在某些实施例中,系统可丢弃原始虚拟机并通过所选的克隆的虚拟机继续执行。系统可丢弃或“转储清除”表示未被采用的分支路径的任何克隆的虚拟机。在框370之后,这些步骤结束。图4是示出在一个实施例中的状态分支系统对分支路径的并行处理的时间线图。 时间线的第一行410表示本文描述的原始虚拟机的处理。在传统系统中,原始虚拟机或物理机将执行全部的处理。原始虚拟机在遇到原始虚拟机正在执行的应用代码中的分支450 之前处理一个或多个任务440。在分支之前的某一点处,原始虚拟机标识分支并派生并行地执行分支的可能路径的两个克隆的虚拟机。第二行420表示第一克隆的虚拟机的处理,而第三行430表示第二克隆的虚拟机的处理。在原始虚拟机完成预分支任务440的同时,第一克隆的虚拟机执行与第一分支路径460相关联的代码,而第二克隆的虚拟机并行地执行与第二分支路径470相关联的代码。当原始虚拟机到达分支450时,它基于原始虚拟机的当前状态以及分支450的任何条件来确定要采用的分支的路径。原始虚拟机选择胜利的分支并将结果480复制到原始虚拟机。随后原始虚拟机继续执行,丢弃克隆的虚拟机。以此方式,克隆的虚拟机并行地准备原始虚拟机的将来状态并将原始虚拟机与在评估每一分支路径时可能已经涉及的侵入性状态改变隔离开。在某些实施例中,状态分支系统提供了用于设备驱动器测试的框架。设备驱动器测试常常是困难的,因为它涉及物理硬件和状态改变,且如果不正确地处理物理硬件和状态改变,则可能在操作系统的内核空间中发生死锁。状态分支系统允许虚拟化物理硬件的状态改变,从而使得并行操作的多个克隆虚拟机可评估各个可能的硬件输入的结果和相应的驱动器响应。这促进了对设备驱动器软件代码的更快且更稳健的开发。在某些实施例中,状态分支系统确定用于派生附加虚拟机以用于探索分支路径的阈值。虚拟机的创建和设置招致时间和资源使用方面的某种成本。对于小的分支,设置克隆的虚拟机所涉及的时间可能不值得从它们所获得的益处。因此,系统可确定与使用克隆的虚拟机的益处有关的阈值,并且仅在折衷最终将节约执行时间或提供其他正面结果时派生新的克隆的虚拟机。应用能够基于应用专用的考虑来设置或微调该阈值。类似地,在某些实施例中,状态分支系统在评估使用克隆的虚拟机以用于探索分支路径的益处时可考虑克隆的虚拟机是否会影响克隆的虚拟机外部的任何资源(即,向外部或链接的物理设备发出命令、通过网络发送分组等)。在某些实施例中,状态分支系统在与原始虚拟机不同的物理机上派生克隆的虚拟机。虚拟机很好地适于物理机之间的简单移动,且该系统可通过在分开的物理机上执行克隆的虚拟机的部分或全部来将对各个分支路径的探索卸载到其他物理机。如果需要,克隆的虚拟机可经由网络或物理机之间的其他通信信道与原始虚拟机通信。
在某些实施例中,在系统管理程序检测到使用克隆的虚拟机以用于探索分支路径的机会时,状态分支系统提供来自系统管理程序的通知。系统管理程序可监视虚拟机中每一个正在运行的进程,并自动地检测其中分开的虚拟机可准备以用于并行的分支路径的情况。在这样的情况下,系统管理程序可提供应用通知,应用可对该应用通知注册并作出响应以指示该应用是否想要系统管理程序派生克隆的虚拟机。在某些实施例中,状态分支系统提供一种新形式的调试,该调试提供了在时间上往返于在虚拟机上运行的应用的各个状态的效果。该系统在应用执行中的各个点处以克隆的虚拟机的形式创建各检查点。每一克隆的虚拟机表示在特定时间点上的应用的状态,且与发生在应用上的任何后续改变隔离开。这允许软件开发者附连调试程序,并在问题发生之前或期间的一个或多个时间点上检查应用状态。在某些实施例中,状态分支系统提供了用于比较用于执行各种任务的类似算法的 A-B测试。例如,该系统可通过下列方法来测试操作系统分页或调度算法将测试操作系统分页或调度算法各自设置在要管理一组相似进程的分开的克隆的虚拟机中,然后并行地执行每一克隆的虚拟机以确定就更快速的执行或其他因素而言,哪个算法提供更好的结果。 如今串行地重新运行这些测试引入新的状态。尽管测试装置试图每次都设置相同的状态, 但某些总是改变的事物使得比较变得困难。通过使用状态分支系统,每一测试开始于已知的克隆状态,且可比较结果,从而较少受到非预期的状态改变的影响。从前面的描述中可以看出,可以理解,此处描述的状态分支系统的特定实施例只是为了说明,但是,在不偏离本发明的精神和范围的情况下,可以进行各种修改。因此,本发明只受所附权利要求限制。
权利要求
1.一种用于从原始虚拟机分支到一个或多个克隆虚拟机以考虑分叉状态的计算机实现的方法,所述方法包括接收(210)应用代码以供在所述原始虚拟机上执行,其中所述应用代码包括得到虚拟机的两个或更多个可能的状态的至少一个分支;执行(220)包括接收到的应用代码的所述原始虚拟机;标识(230)在所述原始虚拟机上运行的应用代码中得到所述虚拟机的两个或更多个可能的状态的分支;创建(240)复制所述原始虚拟机的当前状态的一个或多个克隆虚拟机,然后每一克隆虚拟机在所创建的克隆虚拟机中处理所述分支的一条路径以探索后续状态;将每一克隆虚拟机设置(250)为执行所标识的分支的不同路径;执行(260)所述原始虚拟机和克隆的虚拟机以并行地探索所标识的分支的至少两条路径;以及从所述克隆的虚拟机接收(270)至少一个执行结果,其中,前面的步骤由至少一个处理器执行。
2.如权利要求I所述的方法,其特征在于,接收所述应用代码包括接收改变机器的状态的且基于运行时评估的条件包括分支的应用代码。
3.如权利要求I所述的方法,其特征在于,执行所述原始虚拟机包括系统管理程序引导共享同一物理资源的多个虚拟机的执行。
4.如权利要求I所述的方法,其特征在于,执行所述原始虚拟机包括执行所述原始虚拟机直到标识出可能改变所述虚拟机的状态超过预定阈值的分支,并确定所述克隆的虚拟机是否将影响所述原始虚拟机实例以外的任何资源。
5.如权利要求I所述的方法,其特征在于,标识所述分支包括使用代码分析工具自动标识所述分支。
6.如权利要求I所述的方法,其特征在于,标识所述分支包括从所述应用代码接收指示在那里所述应用将分支到多个可能的状态的位置的信息。
7.如权利要求I所述的方法,其特征在于,标识所述分支包括接收对标识两个或更多个分支路径的应用编程接口(API)的调用,所述系统借此能克隆所述虚拟机并并行地执行路径。
8.如权利要求I所述的方法,其特征在于,创建克隆虚拟机包括设置标识虚拟硬件的一个或多个虚拟机规范、复制所述原始虚拟机的存储器状态以及复制附连到所述原始虚拟机的一个或多个盘。
9.如权利要求I所述的方法,其特征在于,创建克隆虚拟机包括暂停所述原始虚拟机的执行并复制与所述虚拟机相关联的一个或多个物理机文件。
10.如权利要求I所述的方法,其特征在于,设置每一克隆包括用关于它要负责探索哪条路径的信息来设置每一克隆,然后执行每一克隆和所述原始虚拟机以允许它们各自探索它被分配的路径。
11.如权利要求I所述的方法,其特征在于,设置每一克隆包括标识所述克隆虚拟机将运行的软件代码、以及将所述克隆虚拟机的指令指针和寄存器状态设置到特定位置。
12.如权利要求I所述的方法,其特征在于,接收至少一个执行结果包括接收所述克隆的虚拟机到达的状态的指示。
13.一种用于虚拟机分支和并行执行的计算机系统,所述系统包括被配置成执行包含在以下组件内的软件指令的处理器和存储器;系统管理程序组件(110),所述系统管理程序组件在两个或更多个虚拟机之间共享物理计算设备的资源并提供对克隆虚拟机的支持;调度组件(120),所述调度组件提供对物理机上的资源使用的调度以及在两个或更多个虚拟机之间的资源隔离的调度,所述两个或更多个虚拟机包括原始虚拟机和克隆的虚拟机;VM通信组件(130),所述VM通信组件提供两个或更多个虚拟机之间的一个或多个通信信道;分支标识组件(140),所述分支标识组件标识软件代码的当前状态以及作为候选的一个或多个后续状态,以用于分支运行所述软件代码的原始虚拟机以评估一个或多个克隆虚拟机中的所述后续状态;状态克隆组件(150),所述状态克隆组件复制来自所述原始虚拟机的状态信息以创建具有类似状态的一个或多个克隆虚拟机;VM分支组件(160),所述VM分支组件通过启动每一创建的克隆虚拟机并标识每一克隆要追求的执行的分支来执行所述分支;克隆协调组件(170),所述克隆协调组件协调每一克隆虚拟机和所述原始虚拟机的动作以允许丢弃不需要的分支或合并分支结果;以及结果处理组件(180),所述结果处理组件处理每一虚拟机产生的结果并将所述结果提供给所述克隆协调组件。
14.如权利要求13所述的系统,其特征在于,所述VM通信组件从所述原始虚拟机接收协调信息并将协调指令提供给一个或多个克隆虚拟机。
15.如权利要求13所述的系统,其特征在于,所述分支标识组件经由所述系统管理程序通过分析所述软件代码来自动标识可能的分支。
全文摘要
本发明描述了虚拟机分支和并行执行。本文描述了在充分利用投入的时间来设置开始状态的同时允许复杂状态转换的并行执行的状态分支系统。通过允许在虚拟机级上进行分支,状态分支系统允许在虚拟机中设置特定条件或状态,随后复制虚拟机的并行实例并分支到虚拟机的并行实例以探索不同的可能的后续状态。在检测到具有未知结果的大的状态改变之后,状态分支系统指令系统管理程序将正在执行的虚拟机复制到一个或多个分开的虚拟机中。该系统随后允许在两个或更多个虚拟机之间的分叉分支以探索从相似开始点的不同状态。一旦执行已经到达了下一状态,系统就进行协调以确定哪些副本要继续执行。因此,状态分支系统允许对复杂状态改变的更快速的探索。
文档编号G06F9/46GK102609296SQ20111044342
公开日2012年7月25日 申请日期2011年12月16日 优先权日2010年12月17日
发明者D·福蒂尔, J·C·斯普拉德林 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1