CN115968469A - 用于可共享应用快照的编译策略 - Google Patents
用于可共享应用快照的编译策略 Download PDFInfo
- Publication number
- CN115968469A CN115968469A CN202180051399.4A CN202180051399A CN115968469A CN 115968469 A CN115968469 A CN 115968469A CN 202180051399 A CN202180051399 A CN 202180051399A CN 115968469 A CN115968469 A CN 115968469A
- Authority
- CN
- China
- Prior art keywords
- snapshot
- computer
- currently executing
- application
- list
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/11—File system administration, e.g. details of archiving or snapshots
- G06F16/128—Details of file system snapshots on the file-level, e.g. snapshot creation, administration, deletion
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45516—Runtime code conversion or optimisation
- G06F9/4552—Involving translation to a different instruction set architecture, e.g. just-in-time translation in a JVM
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Stored Programmes (AREA)
- Retry When Errors Occur (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
针对进程虚拟机内在快照点处的当前执行的应用构建方法列表,该方法列表包括能够在所述快照点之后由当前执行的应用执行的一组方法,所述快照点包括当快照过程被触发时当前执行的应用的执行状态。在到达快照点之前收集的当前执行的应用的侧写数据被提交到指定存储位置。使用侧写数据和进程虚拟机的即时编译器,方法列表中的方法被编译。存储快照数据,快照数据包括当前执行的应用在快照点的执行状态的数据,包括编译的结果。
Description
背景技术
本发明总体上涉及一种用于应用编译的方法、系统和计算机程序产品。更具体地,本发明涉及一种用于可共享应用快照的编译策略的方法、系统和计算机程序产品。
进程虚拟机(VM)(也称为语言运行时、管理的语言运行时、应用虚拟机或管理的运行时环境)作为应用运行在主机操作系统上。进程VM提供平台无关的环境,该环境向在其中运行的应用隐藏底层硬件和操作系统的细节,从而允许应用在不同配置的平台上执行而无需修改。
若干选项可用于进程VM环境中的应用执行。首先,可以将应用的(诸如Java的高级语言的)源代码编译成处理器特定的指令的可执行文件,也称为原生可执行文件、原生映像或原生机器代码。(Java是Oracle America公司在美国和其他国家的注册商标。)在运行时,环境将可执行文件加载到存储器中并执行指令。虽然可执行文件在运行时不需要额外处理,但其静态性质意味着程序代码必须与数据分离,且其他动态语言特征需要额外运行时支持,从而导致性能损失。同样,因为静态可执行文件必须包括用于处理异常事件的代码,所以它包括占用附加存储器空间的很少执行的代码。
针对应用执行的另一选项是将应用源代码编译成被称为字节码的中间表示。字节码类似于用于特定处理器或处理器族的机器代码,但不是处理器特定的。然后,为了执行应用的字节码,进程VM使用解释器,该解释器一次将一个或几个字节码指令转换成相应的处理器特定的指令,特定处理器随后执行该相应的处理器特定的指令。因为解释过程增加了执行时间,所以解释的代码不像静态可执行文件执行得那么好,但是更适合于变化的环境并且避免了不需要的代码处理。
第三个选项是即时(JIT)编译器,其在应用正在执行时将字节码的各部分转换成处理器特定的指令(也称为机器代码),并且保存编译结果以供重用。编译可按文件、按方法、或在另一代码单位上完成。方法(也称为过程、子例程或函数)是仅在其被调用时运行的代码块。因为编译过程本身花费时间,所以大多数过程VM通过仅在代码即将被使用时才编译代码(因此有术语即时编译)、仅编译最经常使用的代码(并解译代码的剩余部分)或这些技术的组合,来改善总体应用性能。一些进程VM在应用执行时收集侧写信息,并使用侧写信息来进一步细化是否编译代码的一部分的决定和改进得到的编译代码两者。
进程VM的两个目前已知的示例是公共语言运行时(CLR)和Java虚拟机(JVM)。CLR(Microsoft.NET框架的虚拟机组件)管理.NET程序的执行,所述程序可以用若干不同的源代码语言编写。(.NET是微软公司在美国和其他国家的注册商标。)Java虚拟机(JVM)是进程VM,其支持以Java语言和其他支持的源代码语言编写的源代码。
快照点是在执行中的应用的执行流中的点,在该点处可以存储执行状态以便在进程VM的另一实例中恢复。快照是在快照点处的进程VM状态的数据,包括与在进程VM的另一实例中从快照点恢复执行相关的数据。例如,快照通常包括用于部分或全部应用的JIT编译代码、加载直至快照点的类、以及通过运行用于直至快照点的类的一些或所有初始化器而填充的VM的堆。一旦快照被保存,它可在另一进程VM实例中被用于通过重新创建和重新填充新实例中的必要数据结构而从快照点恢复执行。
发明内容
说明性实施例提供了一种方法、系统和计算机程序产品。实施例包括一种方法,所述方法为在进程虚拟机内在快照点处的当前执行的应用建立方法列表,所述方法列表包括能够在所述快照点之后由所述当前执行的应用执行的一组方法,所述快照点包括当快照过程被触发时所述当前执行的应用的执行状态。实施例将当前执行的应用的侧写数据提交到指定的存储位置,所述侧写数据是在到达所述快照点之前收集的。实施例使用侧写数据和进程虚拟机的即时编译器来编译方法列表中的方法。实施例存储快照数据,该快照数据包括当前执行的应用在快照点处的执行状态的数据,快照数据包括编译的结果。
实施例包括计算机可用程序产品。该计算机可用程序产品包括一个或多个计算机可读存储装置以及存储在所述一个或多个存储装置中的至少一个上的程序指令。
实施例包括计算机系统。该计算机系统包括一个或多个处理器、一个或多个计算机可读存储器和一个或多个计算机可读存储装置,以及存储在所述一个或多个存储装置中的至少一个上以供所述一个或多个处理器中的至少一个经由所述一个或多个存储器中的至少一个执行的程序指令。
附图说明
在所附权利要求中阐述了被认为是本发明的特性的某些新颖特征。然而,当结合附图阅读时,通过参考说明性实施例的以下详细描述,将最好地理解本发明本身以及优选使用模式、其进一步的目的和优点,其中:
图1示出了可以实现说明性实施例的数据处理系统的网络的框图;
图2示出了可以实现说明性实施例的数据处理系统的框图;
图3描绘了根据说明性实施例的用于可共享应用快照的编译策略的示例配置的框图;
图4描绘了根据说明性实施例的用于可共享应用快照的编译策略的示例配置的框图;
图5描绘了根据说明性实施例的用于可共享应用快照的编译策略的示例;
图6描绘了根据说明性实施例的用于可共享应用快照的编译策略的继续示例;
图7描绘了根据说明性实施例的用于可共享应用快照的编译策略的继续示例;
图8描绘了根据说明性实施例的用于可共享应用快照的编译策略的继续示例;
图9描绘了根据说明性实施例的用于可共享应用快照的编译策略的继续示例;
图10描绘了根据说明性实施例的用于可共享应用快照的编译策略的示例过程的流程图;
图11描绘了根据说明性实施例的用于可共享应用快照的编译策略的示例过程的流程图;
图12描绘了根据本发明的实施例的云计算环境;以及
图13示出了根据本发明的实施例的抽象模型层。
具体实施方式
说明性实施例认识到,在现代云计算中,当不需要服务用户请求时,服务器通常被从服务中移除,并且当再次需要时,服务器返回到服务。然而,将过程VM和应用从启动带到全性能水平所需的启动时间可能花费比可用于对需求尖峰作出响应的时间更多的时间,从而导致慢于预期的客户服务并且可能违反服务提供者与其用户之间的服务水平协议。
说明性实施例认识到,对于快速实例化新服务器实例的问题的一个目前可用的解决方案是将应用代码编译成静态原生可执行文件,同时包括一些启动时间和存储器占用空间优化。这种技术的一个示例是GraalVM原生映像,其中原生映像在包括运行时组件(例如,去优化器、垃圾收集器、线程调度等)的VM(Substrate VM)中运行。(GraalVM是Oracle国际公司在美国和其他国家的注册商标。)与Java VM相比,所产生的程序具有更快的启动时间和更低的运行时存储器开销。然而,SubstrateVM仅能够支持Java编程语言的子集。结果,实现在SubstrateVM内使用传统的基于服务器的模型构建的现有应用可能需要大量的代码改变。
说明性实施例认识到,对快速实例化新服务器实例的问题的改进的解决方案可使用快照能力来实现,而无需改变现有应用。具体地,进程VM和应用被实例化并且执行直到期望的执行点,然后快照被拍摄。然后,为了创建应用的另外实例,在新实例中恢复所存储的快照,从而跳过原始初始化过程。同样,多个实例可以从一个快照并行地创建,从而节省额外的时间。
说明性实施例还认识到,在应用执行内的适当时间执行快照对于改进的解决方案的有效性是重要的。如果在应用执行晚期执行快照,则在快照过程中可能无法捕获诸如文件和网络连接的开放资源,从而导致不正确的恢复。然而,已执行足够长以致行使共同的应用代码路径(因为它们将处于客户端请求的满负载下)的快照已编译了那些共同代码路径中的代码并作出其他调整以优化应用以实现全性能。相反,如果在应用执行早期执行快照,则由于开放资源而导致的不正确快照不是风险,但一旦应用被恢复,将需要执行太多的附加代码,从而增加了直到新实例可用于响应客户端请求的时间。此外,尚未执行的代码还尚未有被侧写和使用侧写信息来优化的机会,从而增加了应用达到优化性能水平所需的时间。
说明性实施例认识到,其他目前已知的解决方案要么不使用侧写信息,要么使用来自应用的先前训练类型运行的侧写信息来生成用于后续编译的侧写信息。静态编译器(例如,用于从C或C++源代码生成原生可执行文件)通常使用该技术,但它需要用户很少花费时间来执行的单独训练。
说明性实施例还认识到,快照应当能够跨在公共硬件上执行的进程VM的多个实例共享尽可能多的代码。跨多个实例共享代码降低了一组实例的总存储器要求。然而,实例必须全部从考虑到可共享性而构建的共同快照恢复。
因此,说明性实施例认识到,需要改进基于快照的应用实例化解决方案,该解决方案优化应用启动时间和性能,同时保持代码共享。说明性实施例认识到,目前可用的工具或解决方案没有解决这些需要或为这些需要提供足够的解决方案。用于描述本发明的说明性实施例通常致力于并解决上述问题和与用于可共享应用快照的编译策略相关的其他问题。
实施例可以实现为软件应用。实现实施例的应用可以被配置为现有进程VM快照系统的修改、结合现有进程VM快照系统操作的单独应用、独立应用或它们的某种组合。
特别地,一些说明性实施例提供一种方法,该方法为进程VM内在快照点处的当前执行的应用建立能够在快照点之后执行的方法的列表,将所收集的应用的侧写数据提交到指定的存储位置,使用侧写数据和JIT编译器来编译所述方法,并且存储包括所编译的方法的快照数据。
实施例开始在进程VM内执行应用,其中进程VM被设置成阻止任何应用代码的编译。代替地,使用现有进程VM功能来解释应用代码。强制代码被解译而不是被编译可导致直到到达快照点的应用吞吐量的惩罚,因为编译的代码通常比解释的代码执行得更快。然而,延迟编译直到快照点提供对应用代码的哪些部分以编译的形式被包括在快照中的控制,并且使可用于在快照期间和之后使用的侧写数据最大化。控制快照内容提供调整以优化应用启动时间和性能,同时保持从快照恢复的应用实例中的代码共享。在一个实施例中,通过在改变正常JIT编译器启发法的特殊快照模式中启动进程VM来实现编译阻止,从而允许侧写数据收集,同时阻止基于侧写数据的编译决策。
当应用在快照点之前在进程VM内执行时,实施例收集应用的侧写数据。侧写数据的一些非限制性示例包括:对于条件分支,条件为真的频率对比条件为假的频率,以及对于虚拟调用,被用作调用的接收者的对象的类类型。两种类型的侧写数据都帮助JIT编译器通过预测可能的执行路径来优化编译的代码。在一个实施例中,侧写数据累积到一个或多个缓冲器中。当缓冲器接近容量时或者以预定时间间隔,实施例将缓冲的数据刷新或提交至预定存储位置,以供JIT编译器使用。在一个实施例中,预定存储位置是JIT编译器的散列表。其他类型的数据结构和进程VM内的其他存储位置也是可能的并且被认为是在说明性实施例的范围内。
应用执行内的点被选择为快照点,并且实施例将快照处理程序配置为在应用执行到达快照点时被触发。一个实施例在进程VM初始化期间接收所选择的快照点,例如作为VM启动命令中或配置文件中的参数。另一实施例允许用户通过经由应用程序接口(API)从执行的应用内调用快照命令来选择快照点。在另一实施例中,进程VM使用其自身的内部启发法来选择快照点。例如,当执行的应用加载新类的速率已下降到阈值速率以下时,进程VM可以调用快照,从而指示应用已完成爬升(ramping up)并达到应当拍快照的稳定性能状态。作为另一示例,进程VM可在应用已开始处理代表性工作时(例如,在服务器应用已处理至少一个客户端请求时)调用快照。实施例使用任何当前已知的技术在期望点处触发快照处理程序。
当快照处理程序在快照点处被触发时,实施例构建方法列表。方法列表包括能够在快照点之后由当前执行的应用执行的一组方法。为了构建方法列表,实施例查阅应用的活动(即,被调用,但在到达快照点时尚未完成执行)的线程的调用栈。调用栈是存储关于计算机程序的活动方法的信息的数据结构,包括每个活动方法在其完成执行时应返回到的点。在另一实施例中,方法列表包括在快照点之后能够由当前执行的应用执行的代码单元的列表,其中代码单元不需要是方法。
具体地,为了构建方法列表,如果方法列表中的代码单元是方法,则实施例选择在到达快照点时当前正在执行的方法。该实施例将所选择的方法添加到方法列表,并且确定所选择的方法是否可以调用另一方法。如果是,则实施例将新方法添加到方法列表,并确定该新方法是否可以自己调用另一方法。该实施例以这种方式继续,累积可从当前执行的方法调用的所有方法。如果当到达快照点时另一方法当前存在于调用栈中(即,该方法已经调用执行中的方法),则实施例针对该方法重复该过程。此外,如果应用的多个线程正在执行,则实施例针对另一线程重复该过程。注意,不需要分析来自所有线程的所有方法以包括在方法列表中。相反,如果实施例具有确定特定方法或方法组的执行频率非常低的手段,则编译此类方法可能不必要地使所得快照膨胀,而回报是在应用被恢复时相对小的性能改进。因此,所得方法列表包括任何当前执行的方法以及当执行在快照点之后继续时当前执行的方法在原始VM中或者在从快照恢复的新实例中可调用的任何方法。在其中方法列表包括不是排他方法的代码单元的实施例中,为了构建方法列表,实施例分析当前执行的应用以将当前执行的代码单元连同可以从快照点执行的代码单元一起添加到方法列表。
实施例将方法列表维持在任何当前已知的数据结构中。方法列表的数据结构的一个非限制性示例是静态调用图。静态调用图是表示计算机程序中的方法之间的调用关系的控制流程图。图中的每个节点表示方法,每条边(f,g)指示方法f调用方法g,并且图中的循环指示递归方法调用。
在方法列表构建期间,或者在实施例已经完成构建方法列表之后,实施例确定是否应当从方法列表中移除(或者初始不添加)方法。实施例使用一个或多个准则来确定是否应当从方法列表中过滤或移除方法。确定是否应移除方法的准则的一个非限制性示例是基于对方法的执行概率的分析。例如,如果方法将仅在条件为真时才执行,但该条件可能永远不为真或具有低于为真的阈值的概率,则该方法不需要在方法列表中,并且可以在不影响未来应用执行的情况下被移除。类似地,也不需要编译仅在异常时调用的方法。作为另一示例,已经是其所有主调方法的一部分的方法(例如,并入作为内联代码的方法)可能不需要单独编译,因为其主调方法是编译的。作为另一示例,当准备用于由其他应用使用的应用框架的快照时,一些方法可能需要被置于框架的正确层中,因此适合于不同层的方法可能从方法列表中被移除。
当在快照点处触发快照处理程序时,实施例将缓冲的侧写数据提交到JIT编译器的预定存储位置中。在快照点处提交缓冲的侧写数据增加了可用于由JIT编译器使用的侧写数据的量。例如,在使用一个实施例执行的实验中,在快照点处提交缓冲的侧写数据使可供JIT编译器使用的侧写数据的量加倍。
实施例使用JIT编译器使用预定存储位置中的侧写数据来编译方法列表中的一个或多个方法。一个实施例以只读模式编译代码,使得所得快照在恢复之后在多个进程VM实例之间是可共享的。使用尽可能多的侧写数据来执行编译提高了恢复之后的应用吞吐量,而无需在拍摄快照之前等待应用达到完全性能水平。特别地,因为在快照点处,一些方法将已经充分运行以累积优异的侧写,所以所得的编译将具有相应的优异的吞吐量。一些方法将没有充分地运行以累积优异的侧写,并且所得到的编译将具有相应的平常吞吐量。然而,快照过程没有通过等待这些方法充分地执行以便在正常操作过程中被编译而被延迟,并且这些方法总是可以在从快照恢复应用之后被重新编译以提高吞吐量。此外,总吞吐量仍然高于根本不使用侧写信息的情况,如某些当前可用的解决方案的情况。此外,总吞吐量与需要多个训练类型应用执行的解决方案相当,而不必执行这多个执行。
另一个实施例使用JIT编译器来编译方法列表中的一个或多个方法的不同优化版本,从而权衡编译时间和快照大小以用于在恢复时改进的应用吞吐量和减小的爬升。另一个实施例使用JIT编译器来编译方法列表中的两个不同版本的方法,一个是正常优化的,而另一个是在启用调试支持的情况下编译的,从而允许在恢复之后使用单个快照进行正常操作和调试。
一旦实施例已经编译了这些方法,实施例就存储编译的结果。一个实施例每个方法仅存储一个编译结果。另一实施例在快照中存储方法的两个或更多不同优化版本,允许不同的优化在恢复后被结合而无需利用执行应用来重新编译。另一个实施例存储正常优化编译结果和启用调试支持的编译结果两者,允许在恢复之后使用单个快照进行正常操作和调试。实施例还存储附加快照数据。附加快照数据的一些非限制性示例是直至快照点加载的类和通过运行程序加载直至快照点的类的一些或全部初始化器而填充的VM堆。
当应用从快照恢复时,应用侧写和JIT编译针对任何正常执行的进程VM进行。期望新JIT编译是在快照期间原本编译的一些性能关键方法的重新编译(可以提高应用吞吐量)与来自在恢复之后加载的类的方法的初始编译的组合。结果,所恢复的应用确实达到峰值性能,启动时间比不使用快照时的启动时间短。
实施例还可用于在正常执行应用时(即,没有某些目前可用的解决方案的语言约束)并且在受益于已经收集的侧写信息时,在快照点处生成原生映像。所得到的原生映像比所恢复的应用小,但是将不具有通过包括在恢复之后正常执行的JIT编译而获得的提高的吞吐量。此外,从快照点可执行的每一方法或其他代码单元将需要被编译,因为没有解释器或JIT编译器将存在于原生映像中并且可用于生成另外的可执行代码。
本文所描述的用于可共享应用快照的编译策略的方式在与进程VM中拍快照相关努力的技术领域中的当前可用的方法中是不可用的。本文描述的实施例的方法当被实现为在设备或数据处理系统上执行时在执行以下操作时包括该设备或数据处理系统的功能的实质性进步:在为进程VM内在快照点处的当前执行的应用建立能够在快照点之后执行的方法的列表,将所收集的应用的侧写数据提交至指定的存储位置,使用侧写数据和JIT编译器来编译方法,以及存储包括所编译的方法的快照数据。
仅作为示例,关于某些类型的进程VM、源代码、字节码、机器指令、计算机语言结构、方法列表、侧写数据、预测、阈值、测量、设备、数据处理系统、环境、组件和应用来描述说明性实施例。这些和其他类似产物的任何具体表现不旨在限制本发明。在说明性实施例的范围内,可以选择这些和其他类似产物的任何合适的表现。
此外,可以相对于任何类型的数据、数据源或通过数据网络对数据源的访问来实现说明性实施例。在本发明的范围内,任何类型的数据存储设备可以在数据处理系统本地或通过数据网络将数据提供给本发明的实施例。在说明性实施例的范围内,在使用移动装置描述实施例的情况下,适于与移动装置一起使用的任何类型的数据存储装置可在移动装置本地或通过数据网络将数据提供到这样的实施例。
仅使用特定代码、设计、架构、协议、布局、示意图和工具作为示例来描述说明性实施例,并且不限于说明性实施例。此外,为了描述的清楚,在一些实例中使用特定软件、工具和数据处理环境仅作为示例来描述说明性实施例。说明性实施例可以结合其他可比较的或相似用途的结构、系统、应用或架构使用。例如,在本发明的范围内,其他相当的移动设备、结构、系统、应用或架构可以与本发明的这种实施例结合使用。说明性实施例可以以硬件、软件或其组合来实现。
本公开中的示例仅用于描述的清楚,并且不限于说明性实施例。另外的数据、操作、动作、任务、活动和操纵将从本公开想到,并且在说明性实施例的范围内设想到它们。
在此列出的任何优点仅是示例并且不旨在限制说明性实施例。通过具体的说明性实施例可以实现另外的或不同的优点。此外,特定说明性实施例可具有上文所列的优点中的一些、全部或无优点。
应当理解,虽然本公开包括关于云计算的详细描述,但是本文所记载的教导的实现不限于云计算环境。相反,本发明的实施例能够结合现在已知的或以后开发的任何其他类型的计算环境来实现。
云计算是服务交付的模型,用于使得能够方便地、按需地网络访问可配置计算资源(例如,网络、网络带宽、服务器、处理、存储器、存储、应用、虚拟机和服务)的共享池,所述可配置计算资源可以以最小的管理努力或与所述服务的提供者的交互来快速供应和释放。该云模型可以包括至少五个特性、至少三个服务模型和至少四个部署模型。
特性如下:
按需自助服务:云消费者可以单方面地根据需要自动地提供计算能力,诸如服务器时间和网络存储,而不需要与服务的提供者的人类交互。
广泛的网络接入:能力可通过网络获得并且通过标准机制接入,该标准机制促进异构瘦客户机平台或厚客户机平台(例如,移动电话、膝上型计算机和PDA)的使用。
资源池:提供者的计算资源被池化以使用多租户模型来服务于多个消费者,其中不同的物理和虚拟资源根据需要动态地指派和重新指派。存在位置独立性的感觉,因为消费者通常不具有对所提供的资源的确切位置的控制或了解,但可能能够以较高抽象级别(例如,国家、州或数据中心)指定位置。
快速弹性:能够快速和弹性地提供能力,在一些情况下自动地快速缩小和快速释放以快速放大。对于消费者而言,可用于供应的能力通常显得不受限制并且可以在任何时间以任何数量购买。
测量的服务:云系统通过在适合于服务类型(例如,存储、处理、带宽和活动用户账户)的某个抽象级别处利用计量能力来自动控制和优化资源使用。可以监视、控制和报告资源使用,为所利用的服务的提供者和消费者提供透明度。
服务模型如下:
软件即服务(SaaS):提供给消费者的能力是使用在云基础设施上运行的提供者的应用。可通过诸如web浏览器(例如,基于web的电子邮件)之类的瘦客户端接口从不同客户端设备访问应用。消费者不管理或控制包括网络、服务器、操作系统、存储或甚至单独的应用能力的底层云基础设施,可能的例外是有限的用户特定应用配置设置。
平台即服务(PaaS):提供给消费者的能力是将消费者创建的或获取的使用由提供商支持的编程语言和工具创建的应用部署到云基础设施上。消费者不管理或控制包括网络、服务器、操作系统或存储的底层云基础设施,但是对所部署的应用和可能的应用托管环境配置具有控制。
基础设施即服务(IaaS):提供给消费者的能力是提供处理、存储、网络和消费者能够部署和运行任意软件的其他基本计算资源,所述软件可以包括操作系统和应用。消费者不管理或控制底层云基础设施,而是具有对操作系统、存储、所部署的应用的控制以及对所选联网组件(例如,主机防火墙)的可能受限的控制。
部署模型如下:
私有云:云基础架构仅为组织运作。它可以由组织或第三方管理,并且可以存在于场所内或场所外。
社区云:云基础架构被若干组织共享并支持共享了关注(例如,任务、安全要求、策略、和合规性考虑)的特定社区。它可以由组织或第三方管理,并且可以存在于场所内或场所外。
公共云:使云基础架构对公众或大型行业组可用,并且由出售云服务的组织拥有。
混合云:云基础架构是两个或更多个云(私有、社区或公共)的组合,这些云保持唯一实体但通过使数据和应用能够移植的标准化或专有技术(例如,云突发以用于云之间的负载平衡)绑定在一起。
云计算环境是面向服务的,集中于无状态、低耦合、模块化和语义互操作性。云计算的核心是包括互连节点网络的基础设施。
参考附图并且具体参考图1和2,这些图是可以实现说明性实施例的数据处理环境的示例图。图1和2仅是示例并且不旨在断言或暗示关于可以实现不同实施例的环境的任何限制。特定实现方式可以基于以下描述对所描绘的环境做出许多修改。
图1示出了可以实现说明性实施例的数据处理系统网络的框图。数据处理环境100是可以实施说明性实施例的计算机的网络。数据处理环境100包括网络102。网络102是用于提供在数据处理环境100内连接在一起的不同设备和计算机之间的通信链路的介质。网络102可以包括诸如有线、无线通信链路或光纤线缆之类的连接。
客户端或服务器仅是连接到网络102的某些数据处理系统的示例角色,并且不旨在排除这些数据处理系统的其他配置或角色。服务器104和服务器106与存储单元108一起耦合到网络102。软件应用可以在数据处理环境100中的任何计算机上执行。客户端110、112和114也耦合到网络102。数据处理系统(诸如服务器104或106或客户端110、112或114)可以包含数据并且可以具有在其上执行的软件应用或软件工具。
仅作为示例,并且不暗示对这样的架构的任何限制,图1描绘了在实施例的示例实现中可用的某些组件。例如,服务器104和106以及客户端110、112、114仅作为示例被描绘为服务器和客户端,而不是暗示对客户端-服务器架构的限制。作为另一示例,实施例可以跨所示的若干数据处理系统和数据网络分布,而另一实施例可以在说明性实施例的范围内的单个数据处理系统上实现。数据处理系统104、106、110、112和114还表示集群、分区和适于实现实施例的其他配置中的示例节点。
设备132是本文描述的设备的示例。例如,设备132可以采取智能电话、平板计算机、膝上型计算机、固定或便携形式的客户端110、可穿戴计算设备或任何其他合适的设备的形式。被描述为在图1中的另一数据处理系统中执行的任何软件应用可被配置成以类似方式在设备132中执行。在图1中的另一数据处理系统中存储或产生的任何数据或信息可以被配置成以类似方式在设备132中存储或产生。
应用105实现本文所描述的实施例。应用105在服务器104和106、客户端110、112和114以及设备132中的任一个中执行。
服务器104和106、存储单元108和客户端110、112和114和设备132可以使用有线连接、无线通信协议或其他合适的数据连接性耦合到网络102。客户端110、112和114可以是例如个人计算机或网络计算机。
在所描绘的示例中,服务器104可以向客户端110、112和114提供诸如引导文件、操作系统映像和应用之类的数据。在该示例中,客户端110、112和114可以是服务器104的客户端。客户端110、112、114或其某种组合可以包括它们自己的数据、引导文件、操作系统映像和应用。数据处理环境100可以包括附加的服务器、客户端和未示出的其他设备。
在所描绘的示例中,数据处理环境100可以是互联网。网络102可以表示使用传输控制协议/互联网协议(TCP/IP)和其他协议来彼此通信的网络和网关的集合。互联网的核心是主节点或主计算机(包括路由数据和消息的数千个商业、政府、教育和其他计算机系统)之间的数据通信链路的骨干。当然,数据处理环境100还可以被实现为许多不同类型的网络,诸如例如内联网、局域网(LAN)或广域网(WAN)。图1旨在作为示例,而不是作为对于不同说明性实施例的架构限制。
除了其他用途之外,数据处理环境100可以用于实现其中可以实现说明性实施例的客户端-服务器环境。客户机-服务器环境使得软件应用和数据能够跨网络分布,以使得应用通过使用客户机数据处理系统和服务器数据处理系统之间的交互来发挥功能。数据处理环境100还可以采用面向服务的架构,其中跨网络分布的可互操作的软件组件可以被一起封装为一致的业务应用。数据处理环境100还可以采取云的形式,并且采用服务递送的云计算模型,用于使得能够方便地、按需地网络访问可配置计算资源(例如,网络、网络带宽、服务器、处理、存储器、存储、应用、虚拟机和服务)的共享池,其能够以最小的管理努力或与服务提供商的交互快速地供应和释放。
参见图2,该图描绘了可以实现说明性实施例的数据处理系统的框图。数据处理系统200是计算机的示例,诸如图1中的服务器104和106或客户端110、112和114,或者对于说明性实施例执行所述过程的计算机可用程序代码或指令可以位于其中的另一类型的设备。
数据处理系统200还表示数据处理系统或其中的配置,诸如图1中的数据处理系统132,实施说明性实施例的处理的计算机可用程序代码或指令可以位于其中。数据处理系统200仅作为示例被描述为计算机,而不限于此。其他设备(例如,图1中的设备132)的形式的实现方式可例如通过添加触摸接口并且甚至从数据处理系统200消除某些所描绘的组件来修改数据处理系统200,而不脱离本文中所描述的数据处理系统200的操作和功能的一般描述。
在所描绘的示例中,数据处理系统200采用包括北桥和存储器控制器中枢(NB/MCH)202和南桥和输入/输出(I/O)控制器中枢(SB/ICH)204的中枢架构。处理单元206、主存储器208和图形处理器210耦合到北桥和存储器控制器中枢(NB/MCH)202。处理单元206可以包含一个或多个处理器并且可以使用一个或多个异构处理器系统来实现。处理单元206可以是多核处理器。在某些实现方式中,图形处理器210可以通过加速图形端口(AGP)耦合到NB/MCH 202。
在所描绘的示例中,局域网(LAN)适配器212耦合到南桥和I/O控制器中枢(SB/ICH)204。音频适配器216、键盘和鼠标适配器220、调制解调器222、只读存储器(ROM)224、通用串行总线(USB)和其他端口232、以及PCI/PCIe设备234通过总线238耦合到南桥和I/O控制器中枢204。硬盘驱动器(HDD)或固态驱动器(SSD)226和CD-ROM 230通过总线240耦合到南桥和I/O控制器中心204。PCI/PCIe设备234可包括例如以太网适配器、插入卡和用于笔记本计算机的PC卡。PCI使用卡总线控制器,而PCIe不使用。ROM 224可以是例如闪存二进制输入/输出系统(BIOS)。硬盘驱动器226和CD-ROM 230可以使用例如集成驱动电子器件(IDE)、串行高级技术附件(SATA)接口或诸如外部SATA(eSATA)和微SATA(mSATA)的变体。超级I/O(SIO)设备236可以通过总线238耦合到南桥和I/O控制器中枢(SB/ICH)204。
诸如主存储器208、ROM224或闪存(未示出)的存储器是计算机可用存储设备的一些示例。硬盘驱动器或固态驱动器226、CD-ROM 230和其他类似可用的装置是包括计算机可用存储介质的计算机可用存储装置的一些实例。
操作系统运行在处理单元206上。操作系统协调并提供图2中的数据处理系统200内的不同组件的控制。操作系统可以是用于任何类型的计算平台的市售操作系统,包括但不限于服务器系统、个人计算机和移动设备。面向对象的或其他类型的编程系统可以与操作系统结合操作,并且提供从在数据处理系统200上执行的程序或应用对操作系统的调用。
操作系统、面向对象的编程系统和应用或程序(诸如图1中的应用105)的指令位于存储设备上(诸如为硬盘驱动器226上的代码226A的形式),并且可被加载到一个或多个存储器(诸如主存储器208)中的至少一个中以供处理单元206执行。示例性实施例的处理可以通过使用计算机实施的指令由处理单元206执行,这些指令可以位于存储器中,诸如,例如,主存储器208、只读存储器224、或者一个或多个外围设备中。
此外,在一种情况下,代码226A可通过网络201A从远程系统201B下载,其中类似代码201C被存储在存储设备201D上。在另一情况下,代码226A可通过网络201A被下载到远程系统201B,其中所下载的代码201C被存储在存储设备201D上。
图1-2中的硬件可以取决于实现方式而变化。除了或代替图1-2中所描绘的硬件,可使用其他内部硬件或外围设备,例如闪速存储器、等效非易失性存储器或光盘驱动器等。此外,说明性实施例的过程可以应用于多处理器数据处理系统。
在一些说明性示例中,数据处理系统200可以是个人数字助理(PDA),其通常配置有闪速存储器以提供用于存储操作系统文件和/或用户生成的数据的非易失性存储器。总线系统可包括一条或多条总线,诸如系统总线、I/O总线和PCI总线。当然,总线系统可以使用在附接到结构或架构的不同组件或设备之间提供数据传送的任何类型的通信结构或架构来实现。
通信单元可包括用于发送和接收数据的一个或多个装置,诸如调制解调器或网络适配器。存储器可以是例如主存储器208或高速缓存,诸如在北桥和存储器控制器中枢202中发现的高速缓存。处理单元可包含或以上处理器或CPU。
图1-2中描绘的示例和上述示例不意味着暗示架构限制。例如,数据处理系统200除了采取移动或可穿戴设备的形式之外还可以是平板计算机、膝上型计算机或电话设备。
在计算机或数据处理系统被描述为虚拟机、虚拟设备或虚拟组件的情况下,虚拟机、虚拟设备或虚拟组件以数据处理系统200使用数据处理系统200中描绘的一些或所有组件的虚拟化表现的方式来操作。例如,在虚拟机、虚拟设备或虚拟组件中,处理单元206表现为主机数据处理系统中可用的所有或一些数量的硬件处理单元206的虚拟化实例,主存储器208表现为主机数据处理系统中可用的主存储器208的所有或某个部分的虚拟化实例,并且磁盘226表现为主机数据处理系统中可用的磁盘226的所有或某个部分的虚拟化实例。在这种情况下,主机数据处理系统由数据处理系统200表示。
参见图3,该图描绘了根据说明性实施例的用于可共享应用快照的编译策略的示例配置的框图。应用300是图1中的应用105的示例并且在图1中的服务器104和106、客户端110、112和114以及设备132中的任一个中执行。
应用300开始在进程VM内执行应用,其中进程VM被设置成阻止任何应用代码的编译。相反,使用现有进程VM功能来解释应用代码。当应用在快照点之前在进程VM内执行时,应用300收集应用的侧写数据。侧写数据累积到一个或多个缓冲器中。应用执行内的点被选择为快照点,并且应用300配置快照处理程序以在应用执行到达快照点时被触发。
当在快照点处触发快照处理程序时,方法列表构建器模块310构建方法列表。方法列表包括能够在快照点之后由当前执行的应用执行的一组方法。为了构建方法列表,模块310查阅应用的活动线程的调用栈。参见图4提供了模块310的附加细节。
当缓冲器接近容量时,或者以预定的时间间隔,侧写数据提交模块320将缓冲的数据提交到预定的存储位置,以供JIT编译器使用。同样,当在快照点处触发快照处理程序时,模块320将缓存的侧写数据提交到JIT编译器的预定存储位置中。在快照点处提交缓冲的侧写数据增加了可用于由JIT编译器使用的侧写数据的量。
编译模块330使用JIT编译器使用预定存储位置中的侧写数据来编译方法列表中的一个或多个方法。模块330的另一实现方式使用JIT编译器来编译方法列表中的一个或多个方法的不同优化版本,从而权衡编译时间和快照大小以用于恢复时的改进的应用吞吐量和减小的爬升。模块330的另一实现方式使用JIT编译器来编译方法列表中的两个不同版本的方法,一个被正常优化,而另一个在启用调试支持的情况下被编译。
快照数据模块340存储编译的结果。模块340的一个实现方式每个方法仅存储一个编译结果。模块340的另一实现方式将方法的两个或更多不同优化版本存储在快照中,允许不同的优化在恢复后被结合而无需利用应用执行来重新编译。模块340的另一实现方式存储正常优化的编译结果和启用调试支持的编译结果两者,允许在恢复之后使用单个快照进行正常操作和调试。模块340还存储附加快照数据。
参见图4,该图描绘了根据说明性实施例的用于可共享应用快照的编译策略的示例配置的框图。图4描绘了图3中的方法列表构建器模块310的更多细节。
为了构建方法列表,方法添加模块410选择在到达快照点时当前正在执行的方法。模块410将所选择的方法添加到方法列表并且确定所选择的方法是否可以调用另一方法。如果是,则模块410将该新方法添加到方法列表并且确定该新方法是否可以自己调用另一方法。模块410以此方式继续,累积可从当前执行的方法调用的所有方法。如果当到达快照点时另一方法当前正在执行,则模块410用该方法重复该过程。此外,如果应用的多个线程正在执行,则模块410针对另一线程重复该过程。因此,所得方法列表包括任何当前执行的方法以及当执行在快照点之后继续时当前执行的方法在原始VM或者从快照恢复的新实例中可调用的任何方法。模块410在任何当前已知的数据结构(例如,静态调用图)中维护方法列表。
在方法列表构建期间,或者在模块410已经完成构建方法列表之后,方法移除模块420确定是否应当从方法列表中移除(或者初始不添加)方法。模块420使用一个或多个准则来确定是否应当从方法列表中过滤或移除方法。确定是否应移除方法的准则的一个非限制性示例是基于对方法的执行概率的分析。例如,如果方法将仅在条件为真时才执行,但该条件可能永远不为真或具有低于阈值的为真概率,则该方法不需要在方法列表中,并且可以在不影响未来应用性能的情况下被移除。类似地,也不需要编译仅在异常时调用的方法。作为另一示例,已经是其所有主调方法的一部分的方法(例如,并入作为内联代码的方法)可能不需要单独编译,因为其主调方法是编译的。作为另一示例,当准备用于由其他应用使用的应用框架的快照时,一些方法可能需要被置于框架的正确层中,因此适合于不同层的方法可能从方法列表中被移除。
参见图5,该图描绘了根据说明性实施例的用于可共享应用快照的编译策略的示例。该示例可以使用图3中的应用300来执行。
如所描绘的,应用510在过程VM中开始执行。当应用510在快照点之前执行时,侧写数据520累积到侧写缓冲器530中。当缓冲器530接近容量时,或者以预定的时间间隔,或者在快照点处,应用300将提交的侧写数据540传送到侧写数据存储器550中以供JIT编译器使用。
参见图6,该图描绘了根据说明性实施例的用于可共享应用快照的编译策略的继续示例。该示例可以使用图3中的应用300来执行。方法添加模块410与图4中的方法添加模块410相同。
源代码610是图5中执行应用510的示例部分。如所描绘的,源代码610调用method1(),然后调用method2()。Method2()调用method3()。Method2()包括调用method4()的代码,但仅当1大于2时,这将永远不会发生。
快照点620在MyClass内的method1()正在执行时发生。结果,方法添加模块410构造方法列表630。MyClass和method1()当前正在执行。因为在method1()之后将调用method2(),所以method2()以及method3()和method4()也在方法列表630中,因为它们可以由method2()调用。
参见图7,该图描绘了根据说明性实施例的用于可共享应用快照的编译策略的继续示例。方法移除模块420与图4中的方法移除模块420相同。方法列表630与图6中的方法列表630相同。
在此,方法移除模块420确定,因为method2()包括仅在1大于2时调用method4()的代码,这将永远不会发生,所以不需要编译method4()。由此,模块420从方法列表630移除method4(),产生方法列表730。
参见图8,该图描绘了根据说明性实施例的用于可共享应用快照的编译策略的继续示例。编译模块330与图3中的编译模块330相同。方法列表730与图7中的方法列表730相同。如所描绘的,编译模块330编译方法列表730中的每个方法,得到编译的代码810。
参见图9,该图描绘了根据说明性实施例的用于可共享应用快照的编译策略的继续示例。快照数据模块340与图3中的快照数据模块340相同。应用510和侧写数据存储器550与图5中的应用510和侧写数据存储器550相同。编译的代码810与图8中的编译的代码810相同。如所描绘的,快照数据模块340将编译的代码810、来自侧写数据存储器550的数据、以及应用510的执行状态数据910合并到快照数据920中。
参见图10,该图描绘了根据说明性实施例的用于可共享应用快照的编译策略的示例过程的流程图。过程1000可以在图3中的应用300中执行。
在框1002中,该应用启动处于快照模式的进程虚拟机,该快照模式阻止该进程虚拟机的应用中的方法的编译。在框1004中,该应用对于进程虚拟机内在快照点处的当前执行的应用构建方法列表,该方法列表包括能够在快照点之后由应用执行的一组方法。在框1006中,应用将在到达快照点之前收集的当前执行的应用的侧写数据提交到指定的存储位置。在框1008中,应用使用侧写数据和进程虚拟机的即时编译器来编译方法列表中的一组方法。在框1010中,应用存储快照数据,快照数据包括在快照点处的应用的执行状态的数据,包括编译的结果。然后应用结束。
参见图11,该图描绘了根据说明性实施例的用于可共享应用快照的编译策略的示例过程的流程图。该流程图描绘了图10中的框1004的更多细节。
在框1102中,应用选择当前正由应用执行的方法。在框1104,应用将当前选择的方法添加到方法列表。在框1106,应用确定当前选择的方法是否调用另一方法。如果是(框1106的“是”路径),则在框1108中,应用将被调用的方法指定为当前选择的方法,然后返回至框1104。否则(框1106的“否”路径),在框1110中,应用确定存在另一个当前执行的方法要处理。如果是(框1110的“是”路径),则在框1112中,应用指定要处理的下一方法作为当前选择的方法,然后返回框1104。否则(框1110的“否”路径),在框1114中,应用基于一个或多个准则来过滤方法列表。然后应用结束。
现在参见图12,描绘了说明性云计算环境50。如图所示,云计算环境50包括云消费者使用的本地计算设备可以与其通信的一个或多个云计算节点10,本地计算设备诸如例如个人数字助理(PDA)或蜂窝电话54A、台式计算机54B、膝上型计算机54C和/或汽车计算机系统54N。节点10可彼此通信。它们可以物理地或虚拟地分组(未示出)在一个或多个网络中,诸如如上所述的私有云、社区云、公共云或混合云、或其组合。这允许云计算环境50提供基础设施、平台和/或软件作为云消费者不需要为其维护本地计算设备上的资源的服务。应当理解,所描绘的计算设备54A-N的类型仅旨在是说明性的,并且计算节点10和云计算环境50可通过任何类型的网络和/或网络可寻址连接(例如,使用web浏览器)与任何类型的计算机化设备通信。
现在参见图13,示出了由云计算环境50(图12)提供的一组功能抽象层。应当提前理解,所描绘的部件、层和功能仅旨在是说明性的,并且本发明的实施例不限于此。如所描述,提供以下层和对应功能:
硬件和软件层60包括硬件和软件组件。硬件组件的示例包括:大型机61;基于RISC(精简指令集计算机)架构的服务器62;服务器63;刀片服务器64;存储设备65;以及网络和联网组件66。在一些实施例中,软件组件包括网络应用服务器软件67和数据库软件68。
虚拟化层70提供抽象层,从该抽象层可以提供虚拟实体的以下示例:虚拟服务器71;虚拟存储器72;虚拟网络73,包括虚拟专用网络;虚拟应用和操作系统74;以及虚拟客户端75。
在一个示例中,管理层80可以提供以下描述的功能。资源供应81提供用于在云计算环境内执行任务的计算资源和其他资源的动态采购。计量和定价82在云计算环境内利用资源时提供成本跟踪,并为这些资源的消费开账单或发票。在一个示例中,这些资源可以包括应用软件许可证。安全性为云消费者和任务提供身份验证,以及为数据和其他资源提供保护。用户门户83为消费者和系统管理员提供对云计算环境的访问。服务水平管理84提供云计算资源分配和管理,使得满足所需的服务水平。服务水平协议(SLA)规划和履行85提供根据SLA预期未来需求的云计算资源的预安排和采购。
工作负载层90提供可以利用云计算环境的功能的示例。可以从该层提供的工作负荷和功能的示例包括:地图和导航91;软件开发和生命周期管理92;虚拟课堂教育交付93;数据分析处理94;事务处理95;以及基于累积弱点风险评估的应用选择96。
由此,在说明性实施例中,提供了用于可共享应用快照和其他相关特征、功能或操作的编译策略的计算机实现的方法、系统或装置和计算机程序产品。当关于装置的类型描述实施例或其部分时,计算机实施的方法、系统或设备、计算机程序产品或其部分被适配或配置用于与该类型装置的合适且可比较的表现一起使用。
在实施例被描述为在应用中实现的情况下,将软件即服务(SaaS)模型中的应用的传递构想在说明性实施例的范围内。在SaaS模型中,通过在云基础设施中执行应用来将实现实施例的应用的能力提供给用户。用户可通过诸如web浏览器(例如,基于web的电子邮件)或其他轻量级客户机应用之类的瘦客户机接口使用各种客户机设备来访问应用。用户不管理或控制包括网络、服务器、操作系统或云基础设施的存储的底层云基础设施。在一些情况下,用户甚至可能不管理或控制SaaS应用的能力。在一些其他情况下,应用的SaaS实现可允许有限的用户特定应用配置设置的可能异常。
本发明可以是任何可能的技术细节集成度的系统、方法和/或计算机程序产品。计算机程序产品可包括其上具有用于使处理器执行本发明的各方面的计算机可读程序指令的计算机可读存储介质。
计算机可读存储媒体可为可保留和存储供指令执行装置使用的指令的有形装置。计算机可读存储介质可以是,例如但不限于,电子存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备、或者上述的任意合适的组合。计算机可读存储介质的更具体示例的非穷尽列表包括以下各项:便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式紧凑盘只读存储器(CD-ROM)、数字通用盘(DVD)、记忆棒、软盘、诸如穿孔卡之类的机械编码设备或具有记录在其上的指令的槽中的凸出结构、以及上述各项的任何合适的组合。如本文所使用的计算机可读存储媒体不应被解释为暂时性信号本身,例如无线电波或其他自由传播的电磁波、通过波导或其他传输媒体传播的电磁波(例如,穿过光纤电缆的光脉冲)或通过电线发射的电信号。
本文中所描述的计算机可读程序指令可以经由网络(例如,互联网、局域网、广域网和/或无线网络)从计算机可读存储介质下载到相应的计算/处理设备,或者下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光传输纤维、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配器卡或网络接口接收来自网络的计算机可读程序指令,并转发计算机可读程序指令以存储在相应计算/处理设备内的计算机可读存储介质中。
用于执行本发明的操作的计算机可读程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、集成电路的配置数据、或以一种或多种程序设计语言的任何组合编写的源代码或目标代码,这些程序设计语言包括面向对象的程序设计语言(诸如Smalltalk、C++等)和过程程序设计语言(诸如“C”程序设计语言或类似程序设计语言)。计算机可读程序指令可以完全地在用户计算机上执行、部分在用户计算机上执行、作为独立软件包执行、部分在用户计算机上部分在远程计算机上执行或者完全在远程计算机或服务器上执行。在后一种情况下,远程计算机可通过任何类型的网络(包括局域网(LAN)或广域网(WAN))连接至用户计算机,或者可连接至外部计算机(例如,使用互联网服务提供商通过互联网)。在一些实施例中,包括例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA)的电子电路可以通过利用计算机可读程序指令的状态信息来使电子电路个性化来执行计算机可读程序指令,以便执行本发明的各方面。
下面将参照根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述本发明。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。
这些计算机可读程序指令可被提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器以产生机器,使得经由计算机或其他可编程数据处理装置的处理器执行的指令创建用于实现在流程图和/或框图的或多个框中指定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置、和/或其他设备以特定方式工作,从而,其中存储有指令的计算机可读存储介质包括包含实现流程图和/或框图中的或多个方框中规定的功能/动作的方面的指令的制造品。
也可以把计算机可读程序指令加载到计算机、其他可编程数据处理装置、或其他设备上,使得在计算机、其他可编程装置或其他设备上执行一系列操作步骤,以产生计算机实现的处理,使得在计算机、其他可编程装置或其他设备上执行的指令实现流程图和/或框图中的或多个方框中规定的功能/动作。
附图中的流程图和框图示出了根据本发明的不同实施例的系统、方法和计算机程序产品的可能实现方式的架构、功能和操作。对此,流程图或框图中的每个框可表示指令的模块、段或部分,其包括用于实现指定的逻辑功能的一个或多个可执行指令。在一些备选实现中,框中标注的功能可以不按照图中标注的顺序发生。例如,取决于所涉及的功能,连续示出的两个块实际上可以基本上同时执行,或者这些块有时可以以相反的顺序执行。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作或执行专用硬件与计算机指令的组合的专用的基于硬件的系统来实现。
Claims (20)
1.一种计算机实现的方法,包括:
针对进程虚拟机内在快照点处的当前执行的应用,构建方法列表,所述方法列表包括能够在所述快照点之后由所述当前执行的应用执行的一组方法,所述快照点包括当快照过程被触发时所述当前执行的应用的执行状态;
将所述当前执行的应用的侧写数据提交到指定存储位置,所述侧写数据是在到达所述快照点之前收集的;
使用所述侧写数据和所述进程虚拟机的即时编译器来编译所述方法列表中的方法;以及
存储快照数据,所述快照数据包括所述当前执行的应用在所述快照点处的执行状态的数据,所述快照数据包括所述编译的结果。
2.根据权利要求1所述的计算机实现的方法,进一步包括:
在所述快照过程被触发之前,针对所述当前执行的应用,阻止对所述应用的方法的编译。
3.根据权利要求1所述的计算机实现的方法,进一步包括:
在所述快照过程被触发之前,针对所述当前执行的应用收集所述侧写数据。
4.根据权利要求1所述的计算机实现的方法,其中构建所述方法列表包括:
将由所述当前执行的应用在所述快照点处当前在执行的第一方法添加到所述方法列表;以及
响应于确定第二方法能够被所述第一方法调用,将所述第二方法添加到所述方法列表。
5.根据权利要求4所述的计算机实现的方法,进一步包括:
响应于确定第三方法能够被所述第二方法调用,将所述第三方法添加到所述方法列表。
6.根据权利要求4所述的计算机实现的方法,进一步包括:
响应于确定所述方法列表中的第三方法的特性满足准则,从所述方法列表中移除所述第三方法。
7.根据权利要求6所述的计算机实现的方法,其中所述准则基于所述第三方法在所述当前执行的应用内的执行概率的分析。
8.一种用于可共享应用快照的编译策略的计算机程序产品,所述计算机程序产品包括:
一个或多个计算机可读存储介质,以及共同存储在所述一个或多个计算机可读存储介质上的程序指令,所述程序指令包括:
用于针对进程虚拟机内在快照点处的当前执行的应用构建方法列表的程序指令,所述方法列表包括能够在所述快照点之后由所述当前执行的应用执行的一组方法,所述快照点包括当快照过程被触发时所述当前执行的应用的执行状态;
用于将所述当前执行的应用的侧写数据提交到指定存储位置的程序指令,所述侧写数据是在到达所述快照点之前收集的;
用于使用所述侧写数据和所述进程虚拟机的即时编译器来编译所述方法列表中的方法的程序指令;以及
用于存储快照数据的程序指令,所述快照数据包括所述当前执行的应用在所述快照点处的执行状态的数据,所述快照数据包括所述编译的结果。
9.根据权利要求8所述的计算机程序产品,进一步包括:
用于在所述快照过程被触发之前针对所述当前执行的应用阻止对所述应用的方法的编译的程序指令。
10.根据权利要求8所述的计算机程序产品,进一步包括:
用于在所述快照过程被触发之前针对所述当前执行的应用收集所述侧写数据的程序指令。
11.根据权利要求8所述的计算机程序产品,其中构建所述方法列表包括:
用于将由所述当前执行的应用在所述快照点处当前在执行的第一方法添加到所述方法列表的程序指令;以及
用于响应于确定第二方法能够被所述第一方法调用,将所述第二方法添加到所述方法列表的程序指令。
12.根据权利要求11所述的计算机程序产品,进一步包括:
用于响应于确定第三方法能够被所述第二方法调用,将所述第三方法添加到所述方法列表的程序指令。
13.根据权利要求11所述的计算机程序产品,进一步包括:
用于响应于确定所述方法列表中的第三方法的特性满足准则而从所述方法列表中移除所述第三方法的程序指令。
14.根据权利要求13所述的计算机程序产品,其中所述准则基于所述第三方法在所述当前执行的应用内的执行概率的分析。
15.根据权利要求8所述的计算机程序产品,其中所存储的程序指令被存储在本地数据处理系统的所述一个或多个存储介质中的至少一个中,并且其中所存储的程序指令通过网络从远程数据处理系统传输。
16.根据权利要求8所述的计算机程序产品,其中所存储的程序指令被存储在服务器数据处理系统的所述一个或多个存储介质中的至少一个中,并且其中所存储的程序指令通过网络被下载到远程数据处理系统,以用于与所述远程数据处理系统相关联的计算机可读存储设备中。
17.根据权利要求8所述的计算机程序产品,其中所述计算机程序产品作为云环境中的服务提供。
18.一种计算机系统,包括一个或多个处理器、一个或多个计算机可读存储器和一个或多个计算机可读存储设备、以及存储在所述一个或多个存储设备中的至少一个上的用于由所述一个或多个处理器中的至少一个经由所述一个或多个存储器中的至少一个执行的程序指令,所存储的程序指令包括:
用于针对进程虚拟机内在快照点处的当前执行的应用构建方法列表的程序指令,所述方法列表包括能够在所述快照点之后由所述当前执行的应用执行的一组方法,所述快照点包括当快照过程被触发时所述当前执行的应用的执行状态;
用于将所述当前执行的应用的侧写数据提交到指定存储位置的程序指令,所述侧写数据是在到达所述快照点之前收集的;
用于使用所述侧写数据和所述进程虚拟机的即时编译器来编译所述方法列表中的方法的程序指令;以及
用于存储快照数据的程序指令,所述快照数据包括所述当前执行的应用在所述快照点处的执行状态的数据,所述快照数据包括所述编译的结果。
19.根据权利要求18所述的计算机系统,进一步包括:
用于在所述快照过程被触发之前针对所述当前执行的应用阻止对所述应用的方法的编译的程序指令。
20.根据权利要求18所述的计算机系统,进一步包括:
用于在所述快照过程被触发之前针对所述当前执行的应用收集所述侧写数据的程序指令。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/005,605 | 2020-08-28 | ||
US17/005,605 US11188364B1 (en) | 2020-08-28 | 2020-08-28 | Compilation strategy for a sharable application snapshot |
PCT/CN2021/112464 WO2022042334A1 (en) | 2020-08-28 | 2021-08-13 | Compilation strategy for sharable application snapshot |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115968469A true CN115968469A (zh) | 2023-04-14 |
Family
ID=78767768
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202180051399.4A Pending CN115968469A (zh) | 2020-08-28 | 2021-08-13 | 用于可共享应用快照的编译策略 |
Country Status (5)
Country | Link |
---|---|
US (1) | US11188364B1 (zh) |
JP (1) | JP2023538938A (zh) |
CN (1) | CN115968469A (zh) |
GB (1) | GB2613324A (zh) |
WO (1) | WO2022042334A1 (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11500661B2 (en) * | 2020-08-26 | 2022-11-15 | International Business Machines Corporation | Performing an application snapshot using process virtual machine resources |
US12106135B2 (en) * | 2021-07-02 | 2024-10-01 | VMware LLC | Distributed autonomous lifecycle management of hypervisors in a virtualized computing system |
CN114640610B (zh) * | 2022-02-25 | 2023-10-20 | 北京水滴科技集团有限公司 | 基于云原生的服务治理方法、装置及存储介质 |
US11614982B1 (en) * | 2022-08-29 | 2023-03-28 | Sedai Inc. | Autonomous concurrency for serverless functions |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9785468B2 (en) | 2012-06-13 | 2017-10-10 | International Business Machines Corporation | Finding resource bottlenecks with low-frequency sampled data |
US10248619B1 (en) * | 2012-09-28 | 2019-04-02 | EMC IP Holding Company LLC | Restoring a virtual machine from a copy of a datastore |
WO2015026391A1 (en) * | 2013-08-19 | 2015-02-26 | Concurix Corporation | Snapshotting executing code with a modifiable snapshot definition |
US9842032B2 (en) * | 2013-08-27 | 2017-12-12 | Red Hat, Inc. | Memory first live snapshot |
CN104809020B (zh) * | 2013-11-20 | 2018-05-11 | 华为技术有限公司 | 一种生成快照的方法、系统和装置 |
US10353679B2 (en) * | 2014-10-31 | 2019-07-16 | Microsoft Technology Licensing, Llc. | Collecting profile data for modified global variables |
US20170083701A1 (en) * | 2015-09-17 | 2017-03-23 | OnSystem Logic, LLC | Using Assured Calling Sequences in Micro-Sandboxes |
US10489518B1 (en) * | 2016-03-03 | 2019-11-26 | Nutanix, Inc. | Virtual machine object version control |
US11550820B2 (en) | 2017-04-28 | 2023-01-10 | Oracle International Corporation | System and method for partition-scoped snapshot creation in a distributed data computing environment |
US20210096892A1 (en) * | 2019-10-01 | 2021-04-01 | Red Hat, Inc. | Snapshot for compiler optimization |
CN111381937A (zh) * | 2020-04-02 | 2020-07-07 | 中国电子科技网络信息安全有限公司 | 一种基于时间基线的实验场景快照生成系统及方法 |
CN111488195B (zh) * | 2020-04-10 | 2023-05-12 | 深信服科技股份有限公司 | 虚拟机克隆方法、装置、设备及计算机可读存储介质 |
-
2020
- 2020-08-28 US US17/005,605 patent/US11188364B1/en active Active
-
2021
- 2021-08-13 CN CN202180051399.4A patent/CN115968469A/zh active Pending
- 2021-08-13 GB GB2304160.1A patent/GB2613324A/en active Pending
- 2021-08-13 JP JP2023513268A patent/JP2023538938A/ja active Pending
- 2021-08-13 WO PCT/CN2021/112464 patent/WO2022042334A1/en active Application Filing
Also Published As
Publication number | Publication date |
---|---|
WO2022042334A1 (en) | 2022-03-03 |
GB2613324A (en) | 2023-05-31 |
JP2023538938A (ja) | 2023-09-12 |
US11188364B1 (en) | 2021-11-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Li et al. | Serverless computing: state-of-the-art, challenges and opportunities | |
US11178207B2 (en) | Software version control without affecting a deployed container | |
US10897497B2 (en) | Automated infrastructure updates in a cluster environment that includes containers | |
US11537809B2 (en) | Dynamic container grouping | |
US20170109157A1 (en) | System, method and program product for updating virtual machine images | |
WO2022042334A1 (en) | Compilation strategy for sharable application snapshot | |
US11163593B2 (en) | Checkpointing and restoring containers to optimize containerized managed runtime applications | |
US10884764B1 (en) | Optimizing managed runtime applications for serverless environments | |
CN115964120A (zh) | 用于工作负载执行的动态缩放 | |
US11182145B2 (en) | Optimizing updates to distributed data processing applications | |
US10901798B2 (en) | Dependency layer deployment optimization in a workload node cluster | |
Pemberton et al. | Kernel-as-a-service: A serverless interface to gpus | |
US11656888B2 (en) | Performing an application snapshot using process virtual machine resources | |
US10599465B2 (en) | Off-the-shelf software component reuse in a cloud computing environment | |
WO2023056793A1 (en) | Optimizing a just-in-time compilation process | |
CN112148935B (zh) | 用于多实例的nbmp功能执行的方法和装置 | |
US11163603B1 (en) | Managing asynchronous operations in cloud computing environments | |
US11263130B2 (en) | Data processing for allocating memory to application containers | |
US20240069944A1 (en) | Coordinated hooking mechanism for checkpointing virtual machines | |
WO2022078323A1 (en) | Parallel task initialization on dynamic compute resources | |
JP2024538679A (ja) | ジャストインタイムコンパイルプロセスの最適化 | |
CN115981611A (zh) | 使用生成记录的代码插入的软件对象识别 | |
CN116457755A (zh) | 配置容器中的硬件多线程 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |