异构计算环境中的过程迁移方法和系统的制作方法
【技术领域】
[0001]本发明一般地涉及过程迀移领域。更具体地,本发明涉及用于异构计算环境中的过程迀移、即从源硬件系统上的源操作系统到目标硬件系统上的目标操作系统的过程迀移的方法和系统,其中,所述源和目标操作系统不同,并且所述源和目标硬件不同。
【背景技术】
[0002]采用标准化的网络接口来互相连接使用不同硬件和不同操作系统的计算机是公知技术。尤其是云环境,其可能包括多种多样的服务器机器架构和操作系统(异构云环境)O
[0003]这种服务器机器需要进行定期维护或面临导致服务器停机的其他停电。为了避免这个问题,一些服务器机器提供到另一个服务器机器的虚拟服务器零停机迀移。然而,这些解决方案总是要求目标机器具有与源机器相同的架构。
[0004]在异构云环境中,在必须实现零停机迀移的时间点,可能没有与源服务器机器具有相同架构的服务器机器可用,而是有具有不同架构、不同架构级别或安装有不同硬件特性的服务器机器。
[0005]可以在目标机器上采用源机器的仿真器来迀移到不同的硬件/架构,然而,通常来说,代码仿真的整体性能较差。但是,在这样一种场景下,需要进行完整虚拟服务器的迀移,即,不可能将在源机器上运行的不同应用程序移动到不同的目标机器上。
[0006]因此,具有用于实现异构云场景中的应用程序的迀移的机制将是有利的,其中,被迀移的应用程序在目标机器上以本机模式或者接近本机模式运行,从而提供最大可能的灵活性。
[0007]在本发明上下文中的迀移可以涉及实时迀移(live migrat1n)或非实时迀移(non-live migrat1n)。实时迀移意味着在不中断的情况下迀移一个运行的过程。非实时迀移意味着在源系统上暂停运行的过程,在源系统上保存过程的状态,将过程状态从源系统传送到目标系统。在传送了过程状态之后,在源系统上终止该过程,并在目标系统上重启O
【发明内容】
[0008]本发明的实施例的一个目标是提供用于在异构计算环境中迀移过程的改进的计算机实现的方法、计算机可读介质和系统。该目标是采用独立权利要求的特征来实现的。在从属权利要求中给出了优选实施例。除非在这里明确指明,本发明的实施例可以彼此自由地合并。
[0009]在第一方面,本发明涉及一种用于将至少一个过程从带有源操作系统的源系统迀移到带有目标操作系统的目标系统的计算机实现的方法,其中,所述源和目标系统以及所述源或目标操作系统不同,其中,所述目标系统(S2)包括:
[0010]-目标虚拟化和迀移组件,其与所述源系统的源虚拟化和迀移组件兼容,适于接收由所述源虚拟化和迀移组件发送的迀移触发信息;
[0011]-仿真器,适于使用所述目标系统仿真所述源系统;
[0012]-编译器,适于将与在所述源系统上执行的过程相关联的源应用程序代码翻译成可在所述目标系统上执行的二进制目标应用程序代码;
[0013]-系统调用翻译器,用于将指向所述源操作系统的系统调用翻译成指向所述目标操作系统的系统调用;
[0014]-运行时库翻译器,用于将指向所述源操作系统的运行时库的调用翻译成指向所述目标操作系统的运行时库的调用;
[0015]其中,所述方法包括下列步骤:
[0016]-通过使用所述源和目标虚拟化和迀移组件开始所述至少一个过程的迀移;
[0017]-在所述目标系统中为要迀移的所述过程分配虚拟地址空间;
[0018]-将要迀移的所述过程的虚拟地址空间的存储器(memory)复制到所述目标系统的所述分配的虚拟地址空间;
[0019]-将关于与所述过程相关联的操作系统状态的信息复制到所述目标操作系统;
[0020]-借助所述仿真器在所述目标操作系统上执行要迀移的所述过程,其中,所述仿真器开始执行与所述过程相关联的代码并进行或启动下列步骤:
[0021]-借助所述系统调用翻译器在用于所述目标操作系统的系统调用中以及借助所述运行时库翻译器在用于所述目标操作系统的运行时库调用中,翻译与所述过程相关联的用于源操作系统的系统调用和运行时库调用;
[0022]-如果所述源应用程序代码还未被翻译,借助所述编译器将与要迀移的所述过程相关联的所述源应用程序代码翻译成可在所述目标系统上执行的二进制目标应用程序代码.’以及
[0023]-在所述目标系统上开始执行所述翻译的二进制目标应用程序代码。
[0024]因此,该方法使得能够在零停机情况下将过程从源系统迀移到目标系统,即,在两个不同的操作系统/硬件组合之间进行过程的实时迀移。这样,可以把要临时关机的服务器上的过程分发到不同的目标系统。从而,本发明提出了两阶段的迀移,即,首先,在目标系统上仿真源系统,以使得源系统上的被迀移的过程能够被立即执行。为了提高性能,
[0025]在第二阶段,将源应用程序代码翻译成目标应用程序代码,其可以在目标系统上本机执行。在翻译之后,可以停止仿真过程,以便节约计算资源。
[0026]根据本发明的优选实施例,翻译系统调用和运行时库调用以及翻译所述源应用程序代码的步骤是按需执行的。在目标系统内启动了要被翻译的过程的仿真之后,逐步地翻译源应用程序代码。例如,如果在仿真器内执行一段源代码,并且该段源代码之前未被翻译,则立即翻译该段源代码。类似地,如果出现过去未翻译的系统调用或运行时库调用,则在使用之后立即翻译这些系统调用。
[0027]根据本发明的优选实施例,编译器是实时编译器。通过采用实时编译、也称为动态编译,在运行时产生机器可读的二进制目标代码,即,在快要执行时才对代码进行编译。因而,对于实时编译器的输入可以是由实时编译器修改的中间代码或机器可读二进制代码。实时编译提高了过程迀移的性能。
[0028]根据本发明的优选实施例,要由编译器编译的源应用程序代码是二进制机器代码、二进制机器代码和中间代码的组合、或中间代码。中间代码是程序源代码在其已经被解析并且执行了词汇和语义分析之后的抽象的编译器内部表示。在使用二进制机器代码时,可以直接使用要被仿真器执行的代码来产生二进制目标代码,即,仿真器和编译器使用相同的二进制代码。相反地,使用中间代码使得编译器可以基于初始源代码的抽象表示对程序进行再编译和优化。这个方法很可能导致目标系统的二进制代码基本上就象从初始源代码直接产生的一样。
[0029]根据本发明的优选实施例,在不中断的情况下迀移该过程,其中,当开始在所述目标系统上执行所述翻译后的二进制目标应用程序代码时,停止该过程的仿真。通过将过程从源系统迀移到目标系统的仿真器并且随后在目标系统上以本机模式执行该过程,即,通过使用翻译后的二进制应用程序代码,可以在零停机的情况下将过程传递到目标系统,即,在执行要迀移的过程时,没有或至少没有显著的中断。
[0030]根据本发明的优选实施例,在启动仿真器之前,在目标操作系统的仿真器过程的上下文中相同地预先分配关于与要迀移的过程相关的源操作系统(OSl)的状态的信息。为了迀移过程,将限定源操作系统的状态的特定操作系统资源、例如过程标识符、页表设置、文件描述符、系统V IPC资源等传送到目标操作系统的上下文中至关重要。在相同地预先分配了资源之后,在仿真器中运行的过程可以立即并且直接地使用这些资源。
[0031]根据本发明的优选实施例,将关于源操作系统的状态的信息放在目标操作系统的上下文中的任何地方,将对这些信息的访问从源操作系统的上下文中的系统资源动态匹配到目标操作系统的上下文中的系统资源。
[0032]根据本发明的优选实施例,翻译系统调用和运行时库调用以及翻译所述源应用程序代码的步骤是采用至少两个系统调用翻译器、至少两个运行时库翻译器、至少两个仿真器和/或至少两个编译器的级联来进行的。从而,如果缺少用于特定操作系统/硬件组合的系统调用翻译器、运行时库翻译器、仿真器和/或编译器,则可以通过堆叠至少两个这样的翻译器、仿真器和编译器来实现迀移,并能够进行代码的转换、调用等等。
[0033]根据本发明的优选实施例,将至少两个不相关的过程从一个源系统迀移到至少两个目标系统,用于分离和/或分发计算负荷。从而,可以将准备要关机的源系统上的过程迀移到多个目标服务器上,从而使得特定目标服务器所必须要接管的工作负荷最小。
[0034]根据本发明的优选实施例,将翻译后的二进制目标应用程序代码高速缓存和/或持久地存储在目标系统的储存库中,从而可以重用,优选地,即使在目标系统关机之后也可以重用。还可以将翻译后的二进制目标应用程序代码发送到具有相同操作系统/硬件配置的另一个目标系统上来重用。
[0035]根据本发明的优选实施例,将翻译后的二进制目标应用程序代码持久地存储在中央储存库中,以供源和目标系统访问。仿真器和/或编译器可以在以后重用已经翻译的目标应用程序代码或部分翻译后的目标应用程序代码,而不用自己执行翻译。
[0036]根据本发明的优选实施例,将源应用程序代码翻译成二进制目标应用程序代码是由中央编译实体进行的。中央编译实体可以适于以高度并行并且非常快速的方式翻译代码。中央编译实体可以用来接管目标系统的所有编译任务。或者,中央编译实体可以用来预先翻译特定的经常使用的代码部分,并将翻译后的代码存储在储存库中。在可以迀移之前,目标系统可以从储存库预先加载这些预先翻译的代码部分。可以通过采用这些预先翻译的代码部分来构建最终的目标应用程序代码,从而显著地加速迀移。
[0037]根据本发明的优选实施例,通过采用检查实体,将迀移之前在源系统上运行的应用程序代码的执行的语义与迀
移之后在目标系统上的翻译后的二进制代码的执行的语义进行比较。这确保代码的翻译和调用是正确的,过程因而被正确地迀移。
[0038]在又一个方面,本发明涉及一种用于迀移过程的基于计算机的系统,所述系统包括至少一个带有源操作系统的源系统和带有目标操作系统的目标系统,其中,所述源和目标系统以及所述源或目标操作系统不同,其中,所述目标系统包括:
[0039]-目标虚拟化和迀移组件,其与源系统的源虚拟化和迀移组件兼容,适于接收由源虚拟化和迀移组件发送的迀移触发信息;
[0040]-仿真器,适于使用目标系统仿真源系统;
[0041]-编译器,适于将与在源系统(SI)上执行的过程相关联的源应用程序代码翻译成可在目标系统上执行的二进制目标应用程序代码;
[0042]-系统调用翻译器,用于将指向源操作系统的系统调用翻译成指向目标操作系统的系统调用;
[0043]-运行时库翻译器,用于将指向源操作系统的运行时库的调用翻译成指向目标操作系统的运行时库的调用;
[0044]其中,所述系统适于:
[0045]-通过使用所述源和目标虚拟化和迀移组件迀移至少一个过程;
[0046]-在目标系统中为要迀移的所述过程分配虚拟地址空间;
[0047]-将要迀移的过程的虚拟地址空间的存储器复制到所述目标系统的所述分配的虚拟地址空间;
[0048]-将关于与所述过程相关联的操作系统状态的信息复制到目标操作系统;
[0049]-借助所述仿真器在所述目标操作系统上执行要迀移的过程,其中,所述仿真器适于开始执行与所述过程相关联的代码并进行或启动下列步骤:
[0050]-借助所述系统调用翻译器在用于所述目标操作系统的系统调用中以及借助所述运行时库翻译器在用于所述目标操作系统的运行时库调用中,翻译与所述过程相关联的用于源操作系统的系统调用和运行时库调用;
[0051]-如果所述源应用程序代码还未被翻译,借助所述编译器将与要迀移的所述过程相关联的所述源应用程序代码翻译成可在所述目标系统上执行的二进制目标应用程序代码.’以及
[0052]-在所述目标系统上开始执行所述翻译的二进制目标应用程序代码。
【附图说明】
[0053]在下面参考附图通过例子的方式更详细地描述了本发明的优选实施例:
[0054]图1显示了一个计算环境的示意性架构;
[0055]图2显示了源和目标系统的示意性结构;
[0056]图3显示了根据本发明的迀移过程的示意性流程图;
[0057]图4显示了采用翻译和仿真实体的堆叠的源和目标系统的示意性结构。
【具体实施方式】
[0058]所属技术领域的技术人员知道,本发明的各个方面可以实现为系统、方法或计算机程序产品。因此,本发明的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、驻留软件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。此外,本发明的各个方面还可以实现为在一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质中包含计算机可读的程序代码。可以采用一个或多个计算机可读介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是一一但不限于一一电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPR0M或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件的上下文中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
[0059]计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括一一但不限于一一电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
[0060]计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括一一但不限于一一无线、有线、光缆、RF等等,或者上述的任意合适的组合。
[0061]可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言一诸如Java、Smalltalk、C++等,还包括常规的过程式程序设计语言一诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络一一包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)
[0062]参考图1,显示了计算环境I的常规架构。例如,两个计算系统S1、S2通过网络连接3相连,使得计算系统S1、S2可以彼此通信。计算环境是异构环境,即,系统SI的硬件HWl不同于系统S2的硬件HW2。另外,计算系统S1、S2可以包括不同的操作系统,即系统I包括第一操作系统0S1,系统2包括第二操作系统0S2,其中,操作系统OSl和0S2不同。计算系统S1、S2可以是专用服务器或虚拟服务器,其可以运行在虚拟机监视器、也称为管理程序(hypervisor)之上。在下面的描述中,将至少一个过程PM从计算系统SI迀移到计算系统S2,即,相对于迀移来说,计算系统SI是源系统,计算系统S2是目标系统。
[0063]图2更加详细地显示了源系统SI和目标系统S2。源系统SI包括具有特定硬件架构的硬件服1。源系统SI的操作系统OSl包括虚拟化和迀移组件VM1、系统调用接口 SCl和运行时库接口 RT1。虚拟化和迀移组件VMl优选地位于操作系统OSl内。其适于启动和实现要被迀移的过程PM从源系统SI到目标系统S2的迀移。换句话说,虚拟化和迀移VMl建立源系统SI的迀移接口。系统调用接口 SCl是用于处理由过程PM启动的系统调用的接口。经由系统调用接口 SC1,过程能够从操作系统内核请求服务。这可以包括硬件相关的服务(例如,访问硬盘)、创建和执行新过程、以及与整体内核服务通信(如调度)。所述运行时库接口 RTl处理由过程PM启动的库调用。库调用是计算机技术中用于通过简化系统调用来减少应用程序代码的公知方式。
[0064]要被迀移的一个过程或者一组过程运行在源系统SI上。过程PM与编译后的源应用程序代码Cl、即只能在源系统SI的硬件HWl上运行、而不能在目标系统S2上运行的二进制机器代码相关联。编译后的源应用程序代码Cl能够经由操作系统OSl的系统调用接口SCl启动系统调用,经由运行时库接口 RTl启动库调用。
[0065]另外,目标系统S2包括具有不同于硬件HWl的特定硬件架构的硬件服2。目标系统S2的操作系统0S2包括虚拟化和迀移组件VM2、系统调用接口 SC2和运行时库接口 RT2。虚拟化和迀移组件VM2优选地位于操作系统0S2内。其与源系统SI的虚拟化和迀移组件VMl兼容,S卩,虚拟化和迀移组件VM2适于作为过程PM的迀移目标,该过程PM的迀移由虚拟化和迀移组件VMl启动。换句话说,虚拟化和迀移组件VM2建立虚拟化和迀移组件VMl的相对件(counter piece),以便允许源系统SI和目标系统S2之间的过程迀移。
[0066]系统调用接口 SC2是用于处理指向操作系统0S2的系统调用的接口。所述运行时库接口 RT2处理指向操作系统0S2的库调用。
[0067]进一步地,目标系统S2包括仿真器E12,仿真器E12适于在目标系统S2上仿真源系统SI的硬件服1。在仿真器E12内,可以以仿真模式在目标系统S2上运行过程PM,即,在目标系统S2内再现源系统SI的功能性,使得过程PM能够在目标系统S2上执行。
[0068]目标系统S2进一步包括编译器C12,编译器C12适于将能够在源系统SI上执行的源应用程序代码Cl翻译成适于直接在目标系统S2上执行的目标应用程序代码C2。优选地,编译器C12是动态实时(just-1n-time)编译器,其能够在运行时编译代码。优选地,在目标系统S2上以仿真模式执行过程期间,可以在仿真器E12遇到要编译的源应用程序代码Cl的应用程序代码段时,按需对源应用程序代码Cl进行编译。
[0069]为了将指向源操作系统OSl的系统调用翻译成指向目标操作系统0S2的调用,目标系统S2包括系统调用翻译器SCT12。系统调用翻译器SCT12适于接收指向源操作系统OSl的系统调用,并将其翻译成可以由目标操作系统0S2处理或操作的系统调用。优选地,系统调用翻译器SCT12提供用于接收指向源操作系统OSl的系统调用的系统调用接口 SC1,以及用于将翻译后的系统调用发送到由操作系统0S2提供的系统调用接口 SC2的接口。从而,可以将由源应用程序代码Cl或目标应用程序代码C2产生的、并寻址到操作系统OSl的系统调用变换为操作系统0S2的本机系统调用。
[0070]另外,目标系统S2包括运行时库翻译器RTT
12。运行时库翻译器RTT12适于接收指向源操作系统OSl的运行时库的库调用,并将其翻译成可以由目标操作系统0S2处理或操作的、并指向目标操作系统0S2的运行时库的库调用。优选地,运行时库翻译器RTT12提供用于接收指向源操作系统OSl的库调用的运行时库接口 RT1,以及用于将翻译后的库调用发送到由操作系统0S2提供的运行时库接口 RT2的接口。从而,可以将由源应用程序代码Cl或目标应用程序代码C2产生的、并寻址到操作系统OSl的运行时库的库调用变换为操作系统0S2的本机库调用。
[0071]下面通过图3解释过程PM从源系统SI向目标系统S2的例示性迀移。在迀移过程的开始,要被迀移的过程PM运行在源系统SI上(10)。如果请求将运行在源系统SI上的过程PM迀移到目标系统S2 (11),则检查目标系统S2是否与源系统SI兼容,即目标系统S2是否包括与源系统SI相同的操作系统OS2和硬件HW2(12)。
[0072]如果目标系统S2与源系统SI兼容,执行从源系统SI到目标系统S2的标准过程迀移(13)。这个过程是本领域普通技术人员公知的。例如,将与要迀移的过程相关联的存储器以及其他过程参数复制到目标系统S2。在迀移之后,过程PM被启动,可以以本机模式运行(14),即,采用与在源系统SI上运行时相同的二进制应用程序代码、系统调用、运行时库调用等运行。
[0073]如果关于兼容性的判断是否定的(12),即目标系统S2与源系统SI不兼容,则调查在目标系统S2上是否有仿真器E12、系统调用翻译器SCT12、运行时库翻译器RTT12和编译器C12,其中,相对于在过程迀移中涉及的系统S1、S2的硬件HWl、服2和操作系统OSl、0S2,仿真器E12、系统调用翻译器SCT12、运行时库翻译器RTT12和编译器C12必须兼容,以执行上面提到的仿真和翻译任务(15)。
[0074]如果在目标系统S2上有兼容的仿真器E12、系统调用翻译器SCT12、运行时库翻译器RTT12和编译器C12,则将过程PM迀移到目标系统S2上的仿真器E12的仿真器环境中
(16)。通过交互虚拟化和迀移组件VMl、VM2来实现迀移。在将过程PM从虚拟化和迀移组件VMl迀移到虚拟化和迀移组件VM2时,将过程PM的虚拟地址空间的存储器复制到操作系统0S2。进一步地,将与过程PM相关联的操作系统状态复制到操作系统0S2。操作系统状态包括本地资源和全局资源。本地资源例如为页表设置、文件描述符、系统V IPC资源(信号量(semaphores)、共享存储器区域、队列等等)、过程标识符等。全局资源例如为开放网络连接、网络共享等等。
[0075]在所述复制完成之后,利用仿真器EM12、即以仿真模式在目标系统S2上启动过程PM的执行(17)。在通过在目标系统S2上仿真源系统SI来执行过程PM期间,过程PM启动适于操作系统OSl的系统调用和运行时库调用。系统调用翻译器SCT12将指向操作系统OSl的系统调用替换或翻译成指向操作系统0S2的本机系统调用,这样,在替换或翻译之后,原先寻址到操作系统OSl的系统调用可以由操作系统0S2来处理(18)。类似地,运行时库翻译器RTT12将指向操作系统OSl的运行时库调用替换或翻译成指向操作系统0S2的本机运行时库调用(19)。
[0076]为了将源应用程序代码Cl翻译成目标应用程序代码C2从而可以最终由操作系统0S2执行,仿真器EM12触发编译器C12执行代码翻译(20)。编译器C12接收源应用程序代码Cl,并将其翻译成可以在目标系统S2上本机执行的目标应用程序代码C2,S卩,目标应用程序代码C2是适于目标系统S2的本机二进制代码。优选地,编译器C12可以智能地识别源应用程序代码Cl的哪些部分在之前的翻译步骤中已经被翻译。那些已经被翻译的部分被重新运用,只有之前未被翻译的剩余部分才被翻译。更近一步地,编译器C12可以是动态实时(just-1n-time)编译器,即,在源应用程序代码Cl由仿真器EM12执行时,将源应用程序代码Cl翻译成目标应用程序代码C2。另外,翻译器可以按需地执行源应用程序代码Cl的翻译,即,在仿真器EM12使用源应用程序代码Cl的特定段而该特定段在过去未被编译成目标应用程序代码C2时,增量地执行翻译。从而,源应用程序代码Cl的代码段由目标应用程序代码C2的代码段动态地替换(21)。优选地,将目标应用程序代码C2临时保存在目标系统S2中。
[0077]在完成源应用程序代码Cl到目标应用程序代码C2的编译之后,将所得到的目标应用程序代码C2存储在目标系统S2的持久储存库、S卩非易失性存储装置中(22)。从而,在执行之前描述的从虚拟化和迀移组件VMl到虚拟化和迀移组件VM2的迀移过程时,例如可以通过另外迀移持久储存库的内容来重用目标应用程序代码C2。将目标应用程序代码C2持久地存储在目标系统S2上的进一步的好处在于,在重启目标系统S2之后,其仍然可以被重用,g卩,可以保存用于仿真源系统SI并将源应用程序代码Cl重新编译成目标应用程序代码C2的系统资源。
[0078]最后,停止以仿真模式执行过程PM,在使用之前产生的目标应用程序代码C2的同时,过程PM执行适于HW2的本机二进制代码(23)。可能需要继续执行系统调用翻译和运行时库调用翻译。
[0079]如果确定仿真器E12、系统调用翻译器SCT12、运行时库翻译器RTT12和编译器C12的可用性的调查步骤(15)的结果是否定的,则拒绝从源系统SI到目标系统S2的迀移
(24)。优选地,在拒绝之前,有一个中间调查步骤,用于确定是否可以通过堆叠翻译和仿真过程来进行从源系统SI到目标系统S2的迀移。在异构计算环境中,可能不会对于源系统和目标系统S1、S2的每一个可能的组合都存在仿真器、编译器、系统调用翻译器和/或运行时库调用翻译器。
[0080]为了能够实现到不支持的操作系统OS2和/或硬件HW2的迀移,可以堆叠各个现有的翻译和仿真过程,从而所得到的过程堆叠允许在任何操作系统OS2和/或硬件HW2上执行所希望的源应用程序代码Cl。例如,通过在Linux/Intel系统调用和运行时库调用翻译器上的过程PM,借助Intel到Power仿真器和实时编译器将Intel代码翻译成Power版Linux (Linux on Power)代码,并在Power版Linux到AIX翻译器之上运行所得到的代码,可以实现在AIX系统上运行Windows/Intel过程PM。换句话说,如果编译器C12、系统调用翻译器SCT12和/或运行时库翻译器RTT12不可用,但用于将过程从源系统I迀移到一个第三系统的编译器C13、系统调用翻译器SCT13和运行时库翻译器RTT13以及用于将过程从第三系统迀移到目标系统2的编译器C32、系统调用翻译器SCT32和运行时库翻译器RTT32可用,则可以使用该堆叠方式来执行从源系统I到目标系统2的迀移(图4)。
[0081]对于过程PM的迀移,需要将与过程PM相关联的操作系统状态传送到操作系统0S2。操作系统状态包括页表设置、文件描述符、系统V IPC资源(信号量、共享存储器区域、队列等等)、过程标识符等。操作系统状态在迀移过程期间不能被改变。这意味着当在目标系统S2上执行对源系统SI的仿真时,操作系统状态在操作系统0S2的上下文中必须完全相同,否则,不能在操作系统0S2上正确地执行仿真过程。可以有至少两种不同的可能性来在目标系统S2上提供与要迀移的过程相关联的操作系统状态:
[0082]第一种可能性是在操作系统0S2的上下文中预先分配操作系统状态。在迀移开始时,操作系统0S2在启动仿真器之前,首先在操作系统0S2的上下文中分配用于操作系统状态的所有资源。当对要迀移的过程PM的仿真开始时,其将预先分配的资源用于所仿真的过程,将操作系统OS的上下文中的剩余资源用于执行实际的仿真器过程。第二种可能性是将关于操作系统状态的资源放在操作系统0S2的上下文中的任何地方。为了能够访问关于操作系统状态的信息,进行对关于操作系统的真实信息的动态匹配。在这种情况下,可以在分配操作系统0S2的上下文中的操作系统状态之前开始在目标系统S2上的仿真,但由于匹配所导致的额外的计算工作量,整个迀移性能会变低。
[0083]在本发明的优选实施例中,可以有一个中央储存库来持久保存可唯一识别的代码部分。在迀移过程中涉及的所有系统都可以访问该中央储存库。特别地,该中央储存库可以安排在云环境中。变换二进制应用程序代码的仿真器或编译器可以将编译结果提交给中央存储库来持久保存。如果在迀移过程中涉及的系统的仿真器或编译器要将源应用程序代码Cl编译成目标应用程序代码C2,仿真器或编译器可以启动对中央储存库的访问来进行检查,如果要被编译的代码或代码的一部分在过去已经被编译,则其在中央储存库中是可用的。如果是这样,仿真器或编译器可以取出并重用该已经编译过的代码或代码的一部分。
[0084]特别地,在具有大量计算实体的计算环境中,可能有至少一个编译实体,用于将适于源操作系统OSl和/或硬件HWl的应用程序代码翻译成适于源操作系统0S2和/或硬件HW2的二进制应用程序代码。编译实体可以适于进行高度并行和快速的代码编译。其可以从仿真器接收编译任务,执行所请求的编译,并将编译后的代码发送回发出请求的仿真器。另外,或者可替代地,可以将编译后的代码发送到中央储存库。
[0085]优选地,在使用中间代码技术时执行代码的编译。除了用于编译的二进制应用程序代码之外,编译器可以产生标准化的中间语言代码。当增加中间语言代码时,动态再编译被简化,并且,作为再编译的又一个方面,可以为目标系统产生更好的优化后的二进制代码,并允许消除系统调用和运行时库调用
翻译。例如,中间语言代码和相关联的二进制应用程序代码可以一起存储在中央储存库中。取决于在迀移过程中涉及的系统的操作系统和硬件配置,可以基于中间语言代码完成编译,或者可以选择已经编译过的二进制代码。
[0086]另外,可以在目标系统内或在计算环境内采用检查实体,作为一个公共实体。该检查实体将迀移之前在源系统Si上运行的二进制代码的执行的语义与迀移之后在目标系统S2上执行翻译后的二进制代码的语义进行比较。实施检查实体的目标是为了找出在将源应用程序代码Cl编译成目标应用程序代码C2时是否出错。如果发现在相应语义之间存在不同,则可以拒绝迀移尝试,从而避免出错的情况。
【主权项】
1.一种用于将至少一个过程从带有源操作系统(OSl)的源系统(SI)迀移到带有目标操作系统(0S2)的目标系统(S2)的计算机实现的方法,其中,所述源和目标系统(SI,S2)以及所述源或目标操作系统(0S1,0S2)不同,其中,所述目标系统(S2)包括: -目标虚拟化和迀移组件(VM2),其与所述源系统(SI)的源虚拟化和迀移组件(VMl)兼容,适于接收由所述源虚拟化和迀移组件(VMl)发送的迀移触发信息; -仿真器(EM12),适于使用所述目标系统(S2)仿真所述源系统(SI); -编译器(C12),适于将与在所述源系统(SI)上执行的过程相关联的源应用程序代码(Cl)翻译成可在所述目标系统(S2)上执行的二进制目标应用程序代码(C2); -系统调用翻译器(SCT12),用于将指向所述源操作系统(OSl)的系统调用翻译成指向所述目标操作系统(0S2)的系统调用; -运行时库翻译器(RTT12),用于将指向所述源操作系统(OSl)的运行时库的调用翻译成指向所述目标操作系统(0S2)的运行时库的调用; 其中,所述方法包括下列步骤: -通过使用所述源和目标虚拟化和迀移组件(VM1,VM2)开始所述至少一个过程(PM)的迀移; -在所述目标系统(S2)中为要迀移的所述过程(PM)分配虚拟地址空间; -将要迀移的所述过程(PM)的虚拟地址空间的存储器复制到所述目标系统(S2)的所述分配的虚拟地址空间; -将关于与所述过程(PM)相关联的操作系统状态的信息复制到所述目标操作系统(0S2); -借助所述仿真器(EM12)在所述目标操作系统(0S2)上执行要迀移的所述过程(PM),其中,所述仿真器开始执行与所述过程(PM)相关联的代码并进行或启动下列步骤: -借助所述系统调用翻译器(SCT12)在用于所述目标操作系统(0S2)的系统调用中以及借助所述运行时库翻译器(RTT12)在用于所述目标操作系统(0S2)的运行时库调用中,翻译与所述过程相关联的用于源操作系统(OSl)的系统调用和运行时库调用; -如果所述源应用程序代码(Cl)还未被翻译,借助所述编译器(C12)将与要迀移的所述过程(PM)相关联的所述源应用程序代码(Cl)翻译成可在所述目标系统(S2)上执行的二进制目标应用程序代码(C2);以及 -在所述目标系统(S2)上开始执行所述翻译的二进制目标应用程序代码(C2)。2.如权利要求1所述的方法,其中,翻译系统调用和运行时库调用以及翻译所述源应用程序代码(Cl)的步骤是按需执行的。3.根据权利要求1或2所述的方法,其中,所述编译器(C12)是实时编译器。4.根据前面的权利要求中的任何一个所述的方法,其中,要由所述编译器(C12)编译的源应用程序代码(Cl)是二进制机器代码、二进制机器代码和中间代码的组合、或中间代码。5.根据前面的权利要求中的任何一个所述的方法,其中,在不中断的情况下迀移所述过程,其中,当开始在所述目标系统(S2)上执行所述翻译后的二进制目标应用程序代码(C2)时,停止所述过程(PM)的仿真。6.根据前面的权利要求中的任何一个所述的方法,其中,在启动所述仿真器(EM12)之前,在所述目标操作系统(0S2)的仿真器过程的上下文中相同地预先分配关于所述源操作系统(OSl)的状态的信息。7.根据权利要求1一 5中的任何一个所述的方法,其中,将关于所述源操作系统(OSl)的状态的信息放在所述目标操作系统(0S2)的过程上下文中的任何地方,将对这些信息的访问从源操作系统(OSl)的上下文中的系统资源动态匹配到目标操作系统(0S2)的上下文中的系统资源。8.根据前面的权利要求中的任何一个所述的方法,其中,翻译系统调用和运行时库调用以及翻译所述源应用程序代码(Cl)的步骤是采用至少两个系统调用翻译器、和/或至少两个运行时库翻译器、和/或至少两个仿真器和/或至少两个编译器的级联来进行的。9.根据前面的权利要求中的任何一个所述的方法,其中,将至少两个不相关的过程从一个源系统迀移到至少两个目标系统,用于分离和/或分发计算负荷。10.根据前面的权利要求中的任何一个所述的方法,其中,将翻译后的二进制目标应用程序代码(C2)高速缓存和/或持久地存储在所述目标系统(S2)的储存库中。11.根据前面的权利要求中的任何一个所述的方法,其中,将翻译后的二进制目标应用程序代码(C2)持久地存储在中央储存库中,以供所述源和目标系统(S1,S2)访问。12.根据前面的权利要求中的任何一个所述的方法,其中,将源应用程序代码(Cl)翻译成二进制目标应用程序代码(C2)是由中央编译实体进行的。13.根据前面的权利要求中的任何一个所述的方法,其中,通过采用检查实体,将迀移之前在所述源系统(SI)上运行的应用程序代码(Cl)的执行的语义与迀移之后在所述目标系统(S2)上的翻译后的二进制代码的执行的语义进行比较。14.一种用于迀移过程的基于计算机的系统,所述系统包括至少一个带有源操作系统(051)的源系统(SI)和带有目标操作系统(0S2)的目标系统(S2),其中,所述源和目标系统(S1,S2)以及所述源或目标操作系统(0S1,0S2)不同,其中,所述目标系统(S2)包括: -目标虚拟化和迀移组件(VM2),其与所述源系统(SI)的源虚拟化和迀移组件(VMl)兼容,适于接收由所述源虚拟化和迀移组件(VMl)发送的迀移触发信息; -仿真器(EM12),适于使用所述目标系统(S2)仿真所述源系统(SI); -编译器(C12),适于将与在所述源系统(SI)上执行的过程相关联的源应用程序代码(Cl)翻译成可在所述目标系统(S2)上执行的二进制目标应用程序代码(C2); -系统调用翻译器(SCT12),用于将指向所述源操作系统(OSl)的系统调用翻译成指向所述目标操作系统(0S2)的系统调用; -运行时库翻译器(RTT12),用于将指向所述源操作系统(OSl)的运行时库的调用翻译成指向所述目标操作系统(0S2)的运行时库的调用; 其中,所述系统适于: -通过使用所述源和目标虚拟化和迀移组件(VM1,VM2)迀移所述至少一个过程(PM); -在所述目标系统(S2)中为要迀移的所述过程(PM)分配虚拟地址空间; -将要迀移的所述过程(PM)的虚拟地址空间的存储器复制到所述目标系统(S2)的所述分配的虚拟地址空间; -将关于与所述过程(PM)相关联的操作系统状态的信息复制到所述目标操作系统(052); -借助所述仿真器(EM12)在所述目标操作系统(0S2)上执行要迀移的所述过程(PM),其中,所述仿真器适于开始执行与所述过程(PM)相关联的代码并进行或启动下列步骤:-借助所述系统调用翻译器(SCT12)在用于所述目标操作系统(0S2)的系统调用中以及借助所述运行时库翻译器(RTT12)在用于所述目标操作系统(0S2)的运行时库调用中,翻译与所述过程相关联的用于源操作系统(OSl)的系统调用和运行时库调用; -如果所述源应用程序代码(Cl)还未被翻译,借助所述编译器(C12)将与要迀移的所述过程(PM)相关联的所述源应用程序代码(Cl)翻译成可在所述目标系统(S2)上执行的二进制目标应用程序代码(C2);以及 -在所述目标系统(S2)上开始执行所述翻译的二进制目标应用程序代码(C2)。15.一种计算机可读介质,其中包含有计算机可读程序代码,所述计算机可读程序代码在由处理器执行时,使得所述处理器执行根据前述权利要求1至13中的任何一个所述的方法。
【专利摘要】本发明涉及一种用于将至少一个过程从带有源操作系统(OS1)的源系统(S1)迁移到带有目标操作系统(OS2)的目标系统(S2)的方法,其中,所述源和目标系统(S1,S2)以及所述源或目标操作系统(OS1,OS2)不同,其中,所述目标系统(S2)包括:-目标虚拟化和迁移组件(VM2),其与所述源系统(S1)的源虚拟化和迁移组件(VM1)兼容,适于接收由所述源虚拟化和迁移组件(VM1)发送的迁移触发信息;-仿真器(EM12),适于使用所述目标系统(S2)仿真所述源系统(S1);-编译器(C12),适于将与在所述源系统(S1)上执行的过程相关联的源应用程序代码(C1)翻译成可在所述目标系统(S2)上执行的二进制目标应用程序代码(C2);-系统调用翻译器(SCT12),用于将指向所述源操作系统(OS1)的系统调用翻译成指向所述目标操作系统(OS2)的系统调用;-运行时库翻译器(RTT12),用于将指向所述源操作系统(OS1)的运行时库的调用翻译成指向所述目标操作系统(OS2)的运行时库的调用。
【IPC分类】G06F9/45
【公开号】CN104903859
【申请号】CN201380062061
【发明人】J·勒里希, W·雷切特, U·魏甘德
【申请人】国际商业机器公司
【公开日】2015年9月9日
【申请日】2013年10月18日
【公告号】DE112013004344T5, US20150301848, WO2014087268A1