CN113296802B - 虚拟机热升级方法、主机设备及存储介质 - Google Patents
虚拟机热升级方法、主机设备及存储介质 Download PDFInfo
- Publication number
- CN113296802B CN113296802B CN202010711496.9A CN202010711496A CN113296802B CN 113296802 B CN113296802 B CN 113296802B CN 202010711496 A CN202010711496 A CN 202010711496A CN 113296802 B CN113296802 B CN 113296802B
- Authority
- CN
- China
- Prior art keywords
- state
- data type
- virtual machine
- target
- data
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
-
- 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/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
Abstract
本申请实施例提供一种虚拟机热升级方法、主机设备及存储介质。在本申请实施例中,针对虚拟机面临的软件型升级需求,通过升级虚拟机进程的方式在同一台主机设备上完成虚拟机的热升级,由于不涉及主机设备之间的迁移,可节约热升级消耗的资源,有利于提高热升级效率;另外,通过为初始进程占用的内存添加锁定标记,以锁定该内存不被释放,使得在重新创建新进程后可以将该内存分配给新进程,实现内存共享,而无需进行内存拷贝,只需进行运行状态的迁移,可进一步节约资源,减少热升级所消耗的时间,进一步提高热升级效率。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种虚拟机热升级方法、主机设备及存储介质。
背景技术
虚拟机(Virtual Machine,VM),一种资源隔离手段,能够在计算机中实现计算内存、存储、网络等资源隔离。与物理机一样,虚拟机同样需要升级。热迁移是一种可在用户无感知的情况下,将虚拟机的资源从一台主机中迁移到另一台主机的热升级方案。
然而,在虚拟机热迁移过程中,需要将虚拟机内存中的数据从一台主机迁移到另一台主机上,其耗费资源较多,总迁移时间长,热升级效率低。
发明内容
本申请的多个方面提供一种虚拟机热升级方法、主机设备及存储介质,用以减少虚拟机热升级所耗费的资源,提高热升级效率。
本申请实施例提供一种虚拟机热升级方法,包括:在虚拟机热升级过程中,控制所述虚拟机在主机上运行的初始进程进入暂停状态;采集所述初始进程的状态数据进行保存,并为所述初始进程占用的内存添加锁定标记,以锁定所述内存不被释放;由所述初始进程在同一主机上创建所述虚拟机对应的目标进程,并将带有所述锁定标记的内存分配给所述目标进程,以实现内存共享;根据所述虚拟机对应的升级文件执行所述目标进程,并由所述目标进程在执行过程中基于所保存的状态数据恢复所述虚拟机的状态。
本申请实施例还提供一种主机设备,包括:存储器和处理器,以及运行在由所述存储器和处理器构建的隔离环境中的虚拟机;所述存储器,用于存储计算机程序;所述处理器,与所述存储器耦合,用于执行所述计算机程序,以用于:在虚拟机热升级过程中,控制所述虚拟机在所述主机设备上运行的初始进程进入暂停状态;采集所述初始进程的状态数据进行保存,并为所述初始进程占用的内存添加锁定标记,以锁定所述内存不被释放;由所述初始进程在所述主机设备上创建所述虚拟机对应的目标进程,并将带有所述锁定标记的内存分配给所述目标进程,以实现内存共享;根据所述虚拟机对应的升级文件执行所述目标进程,并由所述目标进程在执行过程中基于所保存的状态数据恢复所述虚拟机的状态。
本申请实施例还提供一种存储有计算机程序的计算机可读存储介质,当所述计算机程序被处理器执行时,致使所述处理器实现本申请实施例提供的虚拟机热升级方法中的步骤。
在本申请实施例中,针对虚拟机面临的软件型升级需求,通过升级虚拟机进程的方式在同一台主机设备上完成虚拟机的热升级,由于不涉及主机设备之间的迁移,可节约热升级消耗的资源,有利于提高热升级效率;另外,通过为初始进程占用的内存添加锁定标记,以锁定该内存不被释放,使得在重新创建新进程后可以将该内存分配给新进程,实现内存共享,而无需进行内存拷贝,只需进行运行状态的迁移,可进一步节约资源,减少热升级所消耗的时间,进一步提高热升级效率。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1a为本申请示例性实施例提供的一种VM热升级方法的逻辑框图;
图1b为本申请示例性实施例提供的另一种VM热升级方法的逻辑框图;
图1c为本申请示例性实施例提供的一种VM热升级方法的流程示意图;
图1d为本申请示例性实施例提供的另一种VM热升级方法的流程示意图;
图1e为本申请示例性实施例提供的又一种VM热升级方法的流程示意图;
图1f为本申请示例性实施例提供的又一种VM热升级方法的流程示意图;
图2为本申请示例性实施例提供的由VMM控制基于Linux KVM构建的VM进行热升级的过程示意图;
图3为本申请示例性实施例提供的一种主机设备的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
VM热升级是指在用户无感知VM服务被暂停的情况下,对VM进行在线升级的过程。在实际应用中,可能因为打补丁或发布新版本引起VM热升级,也可能因为VM所在主机设备的硬件损坏引起VM热升级。对于主机设备的硬件损坏引起VM热升级的情况,可称为硬件型升级需求,这类热升级需要采用热迁移的方式,将VM从当前所在主机设备上迁移到另一台主机设备上。当然,对于因为打补丁或发布新版本引起VM热升级的情况,可称为软件型升级需求,这类热升级也可以采用热迁移的方式。
但是,热迁移方式存在以下缺陷:1、热迁移过程中需要迁移大量内存数据,耗费资源多;2、热迁移过程中,还是需要暂停VM的服务,宕机时间长;3、由于热迁移的数据量较大,总体迁移时间较长。其中,对于软件型升级需求引起的VM热升级,其任务相对比较轻量,采用热迁移的方式虽然可行,但热升级代价较大,并不合适。另外,考虑到因为打补丁或发布新版本引起VM热升级的概率,要远高于因为VM所在主机设备的硬件损坏引起VM热升级的概率。因此,本申请实施例针对VM面临的软件型升级需求,提供一种新的VM热升级方案,即通过升级虚拟机进程的方式在同一台主机设备上完成虚拟机的热升级,由于不涉及主机设备之间的迁移,可节约热升级消耗的资源,有利于提高热升级效率;另外,通过为初始进程占用的内存添加锁定标记,以锁定该内存不被释放,使得在重新创建新进程后可以将该内存分配给新进程,实现内存共享,而无需进行内存拷贝,只需进行运行状态的迁移,可进一步节约资源,减少热升级所消耗的时间,进一步提高热升级效率。
以下结合附图,详细说明本申请各实施例提供的技术方案。
图1a为本申请示例性实施例提供的一种VM热升级方法的逻辑框图;图1b为本申请示例性实施例提供的另一种VM热升级方法的逻辑框图;图1c为本申请示例性实施例提供的一种VM热升级方法的流程示意图。参考图1a-图1c,本申请实施例提供的VM热升级方法包括以下步骤:
11、在VM热升级过程中,控制VM在主机上运行的初始进程进入暂停状态。
13、采集初始进程的状态数据进行保存,并为初始进程占用的内存添加锁定标记,以锁定所述内存不被释放。
15、由初始进程在同一主机上创建VM对应的目标进程,并将带有锁定标记的内存分配给目标进程,以实现内存共享。
16、根据VM对应的升级文件执行目标进程,并由目标进程在执行过程中基于所保存的状态数据恢复VM的状态。
在本实施例中,同一主机100上可以部署有一个或多个VM 300,在图1a中,以同一主机100上部署有多个VM 300为例进行图示,各VM 300的运行环境相互隔离。在本实施例中,并不限定承载VM 300的主机100的设备形态,例如可以是智能手机、笔记本电脑、台式电脑或平板电脑等终端设备,也可以是常规服务器、云服务器或服务器阵列等服务端设备。
如图1a所示,根据初始文件创建VM 300对应的初始进程301,执行初始进程301可实现VM 300的各种功能。其中,初始文件是与VM 300有关的文件,例如可以是VM 300对应的可执行文件,也可以是VM 300所依赖的其它软件的可执行文件。其中,通过执行VM 300所依赖的其它软件的可执行文件可以创建VM 300对应的初始进程301。可选地,如图1b所示,VM300所依赖的其它软件可以是虚拟机监视器(Virtual Machine Monitor,VMM)200;其中,VMM 200负责创建VM 300,为VM 300维护高效、隔离的运行环境,另外,VMM 200还可以作为VM 300的核心任务监控系统,可用于调度任务、负载均衡、向管理员报告VM 300的软硬件故障,并广泛控制VM 300的使用情况等。其中,一个VMM 200可以同时管理一个或多个VM 300,对此不做限定。在图1b中,以一个VMM 200管理一个VM 300为例进行图示。VMM 200可以是但不限于:VMWare、Hyper-V等。
在实际应用中,可能需要为VM 300打补丁或者有新版本的VM 300发布,又或者,VM300所依赖的其它软件(如VMM 200)需要打补丁或有新版本发布,都有可能引起VM 300热升级。在本实施例中,针对VM 300面临的软件型升级需求,通过升级VM 300对应的进程在同一主机100上实现VM 300的热升级,而无需从一台主机100迁移到另一台主机100上,有利于提高热升级效率,另外,不占用网络带宽和磁盘IO,有利于节约资源。
在本实施例中,通过升级VM 300对应的进程在同一主机100上实现VM 300的热升级至少需要实现:进程状态的迁移、进程升级以及内存数据的共享。具体地,在VM 300热升级过程中,首先控制VM 300在主机100上运行的初始进程301进入暂停状态,该暂停状态持续的时间非常短,通常在毫秒(ms)级别,对用户来说是无感知的。其中,控制初始进程301进入暂停状态,一方面可采集初始进程301的状态数据进行保存,为进程状态的迁移做准备,另一方面可为初始进程301占用的内存400添加锁定标记,以锁定该内存不被释放。其中,锁定初始进程301占用的内存400不被释放主要是指该内存既不会因为新的目标进程302的创建而被释放,也不会因为初始进程301的关闭而被释放,为实现内存共享打下基础。
进一步,由初始进程301发起VM 300对应的新的目标进程302的创建操作,为进程升级提供条件,其中,目标进程302是为了执行VM 300对应的升级文件,以实现进程升级。在创建新的目标进程302之后,还需要为目标进程302分配内存。在本实施例中,并不会为目标进程302分配新的内存空间,而是直接将带有锁定标记的内存400(即初始进程301占用的内存)分配给目标进程302,这样目标进程302就可以基于同样的虚拟地址来访问初始进程301之前占用的内存,实现内存共享。由于目标进程302与初始进程301之间实现了内存共享,所以在进程升级过程(即目标进程302替换初始进程301的过程)中,无需执行将初始进程301的内存数据重新拷贝到新的内存空间中的操作,可节约热升级时间,有利于提高热升级效率。
进一步,如图1a和图1b所示,在创建目标进程302之后,可根据VM 300对应的升级文件执行目标进程302,即该目标进程302执行升级文件,完成进程升级;另外,目标进程302在执行过程中,可基于所保存的初始进程301的状态数据恢复出VM 300的状态,完成进程状态迁移,至此完成VM 300的热升级。由于整个VM热升级过程,在同一主机上实现,而无需从一台主机迁移到另一台主机,热升级效率较高,而且不占用网络带宽和磁盘IO,有利于节约资源;另外,整个VM热升级过程中,只有状态数据从初始进程301到目标进程302的迁移,而无需进行内存迁移,进程状态的数据量相对较小,可在短时间内完成迁移,有利于进一步提高VM的热升级效率。
图1d为本申请示例性实施例提供的另一种VM热升级方法的流程示意图。如图1d所示,本实施例的热升级方法,在步骤11之前还包括:
10、根据VM当前的运行状态,判断是否适合对VM进行热升级;若是,则进入步骤11;若否,则进入步骤17。
步骤17、等待第一指定时间后,返回步骤10,以继续执行根据VM当前的运行状态,判断是否适合对VM进行热升级的操作。
在本实施例中,在需要对VM 300进行热升级时,可以先根据VM 300当前的运行状态,判断是否适合对VM 300进行热升级;若VM 300当前的运行状态适合进行热升级,则针对VM 300执行步骤11-步骤16所描述的操作,完成对VM 300的热升级操作。若VM 300当前的运行状态不适合热升级,则等待一段时间,等VM 300的运行状态适合热升级时再对VM 300进行热升级。为便于描述和区分,将这里的等待的时间记为第一指定时间,该时间长度可以根据应用需求灵活设定,例如可以是50ms、100ms、1m或5m等。
在一可选实施例中,根据VM 300当前的运行状态,判断是否适合对VM 300进行热升级包括:判断VM 300当前是否正处于启动状态;若是,确定不适合对VM 300进行热升级,则等待第一指定时间后,继续判断VM 300当前是否正处于启动状态;若否,确定适合对VM300进行热升级,则执行步骤11-步骤16描述的操作,完成对VM 300的热升级操作。其中,VM300处于启动状态是指VM 300正在启动过程中,尚未完成启动,此时不适合对VM 300进行热升级,需要等待VM 300完成启动之后再对VM 300进行热升级。需要说明,VM 300处于启动状态仅是不适合对VM 300进行热升级的一种运行状态的示例,并不限于此。
进一步,如图1d所示,本实施例的VM热升级方法,在步骤13之前还包括:
12、判断VM是否还有未完成的IO操作;若否,则进入步骤13,即执行保存初始进程的状态数据以及后续操作;若是,则执行步骤18。
18、等待未完成的IO操作在第二指定时间内完成,或者等待第二指定时间结束,然后进入步骤13,即执行保初始进程的状态数据以及后续操作。
在本实施例中,通过升级VM 300对应的进程在同一主机100上实现VM 300的热升级,除了需要实现进程状态的迁移、进程升级以及内存数据的共享之外,还需要确保VM 300在热升级之前的IO操作全部或最大程度上完成,以降低热升级给VM 300的IO操作造成的不利影响。
具体地,在控制VM 300的初始进程进入暂停状态之后,在采集初始进程的状态数据进行保存之前,可以先判断VM 300是否还有未完成的IO操作,即是否还有一些IO操作未返回结果或响应。如果判断结果为是,说明VM 300还有未完成的IO操作,则可以待未完成的IO操作完成,然后进入步骤13,即执行采集初始进程的状态数据进行保存以及其它操作。之所以在采集初始进程的状态数据进行保存之前,判断VM 300是否还有未完成的IO操作,是因为IO操作会影响初始进程的状态数据。
进一步,考虑到在实际应用中有些IO操作有可能无法返回结果或响应,如果一直等待这些IO操作完成,将无法对VM 300进行热升级。鉴于此,在本申请实施例中,设定第二指定时间;如果IO操作在第二指定时间内完成,则进入步骤13,执行采集初始进程的状态数据进行保存以及其它操作,完成对VM 300的热升级;或者,如果IO操作未能在第二指定时间内完成,但在第二指定时间结束后,同样进入步骤13,执行采集初始进程的状态数据进行保存以及其它操作,完成对VM 300的热升级。在本申请实施例中,并不对第二指定时间的长度进行限定,例如可以是10ms、20ms、50ms、100ms或200ms等。通过该操作,既可以降低热升级给VM 300的IO操作造成的不利影响,又可以保证成功完成对VM 300的热升级。
进一步,图1e为本申请示例性实施例提供的又一种VM热升级方法的流程示意图。以在图1d所示实施例的基础上进行图示为例,则如图1e所示,本实施例的VM热升级方法,在步骤15之前还包括:
14a、为初始进程访问的资源添加保留标记,以保留所述资源不被销毁。
进一步,如图1e所示,在步骤16之后,还包括:步骤19、由目标进程直接访问带有保留标记的资源。
在实际应用中,VM 300在运行过程中,会访问主机100上的资源,这里的资源包括软件资源和/或硬件资源,即在热升级之前,VM 300的初始进程301有可能访问主机100上的软件资源和/或硬件资源;相应地,在热升级之后,VM300的目标进程302也有可能访问主机100上的软件资源和/或硬件资源。进一步,由于升级前后,VM 300的状态会被保持下来,所以初始进程310和目标进程302很大程度上会访问主机100上同样的资源,例如网卡、键盘或鼠标等。
在进程升级过程中,初始进程301访问的资源状态会被销毁,那么在目标进程302被创建之后,如果需要访问相同资源,此时由于无法知道相同资源的状态,可能报错或宕机。鉴于此,在本实施例中,通过升级VM 300对应的进程在同一主机100上实现VM 300的热升级,除了需要实现进程状态的迁移、进程升级以及内存数据的共享之外,还需要初始进程访问的资源状态的共享。具体地,为了在进程升级过程中保留初始进程访问的资源不被销毁,在初始进程处于暂停状态之后,并在创建目标进程之前,可以为初始进程访问的资源添加保留标记,以保留该资源不被销毁。其中,保留初始进程访问的资源不被销毁是指该资源既不会因为新的目标进程302的创建而被销毁,也不会因为初始进程301的关闭而被销毁,即该资源保持当前状态不变,为实现资源状态共享打下基础。相应地,在目标进程302成功恢复VM 300的状态之后,可以直接访问带有保留标记的资源,从而保证VM 300在升级后能够继续且正常的运行。
在一可选实施例中,VM 300中带有直通设备,例如VM 300可以直通网卡、显卡或存储器等主机100上的硬件资源。则VM 300的初始进程301所访问的资源可能是某个直通设备的相关资源(如软硬件资源),基于此,在VM 300热升级过程中,在初始进程处于暂停状态之后,并在创建目标进程之前,可以为初始进程301访问的直通设备添加保留标记,以保留该直通设备不被销毁。其中,保留该直通设备不被销毁是指保留该直通设备相关的软件状态,以及直通设备连接的用于存储直通设备相关硬件状态的PCI配置空间。
进一步,在一些可选实施例中,直通设备的相关资源是以文件描述符(fd)的形式暴露给VM 300的初始进程301,即VM 300的初始进程301对直通设备的相关资源的访问实际上是对与直通设备相关的fd的调用。为了便于目标进程302能够找回直通设备的相关资源,初始进程301可以在与直通设备相关的fd上添加保留标记,以保留这些fd不会被销毁。这样,对目标进程302来说,可以根据fd上的保留标记找回直通设备的相关资源,并恢复与直通设备相关的软件状态和硬件状态,以完成VM 300的热升级,保证VM 300在升级后能够继续使用直通设备,并正常运行。
进一步,图1f为本申请示例性实施例提供的又一种VM热升级方法的流程示意图。如图1f所示,本实施例提供的VM热升级方法包括以下步骤:
11、在VM热升级过程中,控制VM在主机上运行的初始进程进入暂停状态。
13、采集初始进程的状态数据进行保存,并为初始进程占用的内存添加锁定标记,以锁定所述内存不被释放。
14b、结合上述状态数据涉及的数据类型序列化状态数据,以得到序列化后的状态数据。
15、由初始进程在同一主机上创建VM对应的目标进程,并将带有锁定标记的内存分配给目标进程,以实现内存共享。
16、根据VM对应的升级文件执行目标进程,并由目标进程在执行过程中反序列化所述序列化后的状态数据,并基于反序列化出的状态数据恢复VM的状态。
在此说明,关于步骤11、13和15的详细描述可参见前述实施例,在此不再赘述。另外,在该实施例中,也可以包含前述其它实施例中的其它步骤,例如步骤10、12、14a以及步骤17和18等,在此不再赘述。
在本实施例中,重点描述对状态数据的序列化和反序列化过程。在本实施例中,序列化是指将初始进程301的状态数据转换为可以存储或传输的形式的过程,可得到序列化后的状态数据;反序列化是指从序列化的表示形式中提取出原始数据,即从序列化后的状态数据中提取出序列化之前的状态数据的过程。其中,通过对初始进程的状态数据进行序列化,便于存储,且有利于保证状态数据的安全性。
其中,初始进程301的状态数据可能涉及多种数据类型,这些数据类型与VM 300采用的编程语言有关,不同编程语言所支持的数据类型会有所不同。为便于描述,在本实施例中,将VM 300采用的编程语言称为目标编程语言。其中,目标编程语言可以是C语言、C++语言或Rust语言。对于目标编程语言可以有自己的标准库,也可以引用第三方库。在目标编程语言引用第三方库的情况下,初始进程301的状态数据有可能涉及目标编程语言从第三方库中引入的数据类型,为便于描述,将状态数据涉及的目标编程语言从第三方库中引入的数据类型称为目标数据类型。
对于目标数据类型,有可能因为各种原因,无法对数据类型为目标数据类型的状态数据进行序列化和反序列化。例如,以Rust语言为例,由于Rust语言层面的孤儿规则,无法直接为Rust语言从第三方库中引入的目标数据类型实现序列化接口(Serialize trait)和反序列化接口(Deserialize trait),这意味着无法直接对目标数据类型的状态数据进行序列化和反序列化。基于此,在本申请实施例中,针对从第三方库中引入的目标数据类型,生成影子数据类型,该影子数据类型包含的字段与目标数据类型包含的字段相同,且影子数据类型是目标编程语言自己的数据类型,而非第三方库中的数据类型;进而,通过影子数据类型实现对目标数据类型的序列化和反序列化。以Rust语言为例,可以实现影子数据类型的Serialize trait和Deserialize trait;进而通过Serialize trait和Deserializetrait实现对影子数据类型的序列化和反序列化。
进一步,如何根据数据类型为目标数据类型的状态数据生成数据类型为影子数据类型的状态数据,同理,在反序列化后如何根据数据类型为影子数据类型的状态数据重新生成数据类型为目标数据类型的状态数据,这是通过影子数据类型实现对目标数据类型的序列化和反序列化的关键。若目标编程语言可以保证内存布局,即支持具有完全相同字段的两个数据结构进行内存拷贝,则可以直接将目标数据类型的内存拷贝为影子数据类型的内存,即可从数据类型为目标数据类型的状态数据得到数据类型为影子数据类型的状态数据;同理,在反序列化后直接将影子数据类型的内存拷贝为目标数据类型的内存,即可从数据类型为影子数据类型的状态数据得到数据类型为目标数据类型的状态数据。例如,C语言和C++语言支持内存拷贝,所以在目标编程语言是C语言或C++语言的情况下,可以采用前述方法。
但是,并不是所有编程语言都支持内存拷贝,例如Rust语言,由于Rust默认的表现(representation),不保证内存布局,即使是具有完全相同字段的两个数据结构也不保证其内存布局完全相同,即无法直接内存拷贝。对于不支持内存拷贝的目标编程语言,可以为其实现以字段为单位的内存拷贝功能,基于该功能实现数据类型为目标数据类型的状态数据与数据类型为影子数据类型的状态数据之间的相互转换。基于此,上述通过影子数据类型对目标数据类型进行序列化的过程为:从目标数据类型对应的内存中拷贝各字段的值并赋值给影子数据类型中的相同字段,以得到数据类型为影子数据类型的状态数据;对数据类型为影子数据类型的状态数据进行序列化,得到序列化后的状态数据。相应地,上述通过影子数据类型对目标数据类型进行反序列化的过程为:反序列化所述序列化后的状态数据,以得到数据类型为影子数据类型的状态数据;从影子数据类型对应的内存中拷贝各字段的值并赋值给目标数据类型中的相同字段,以得到数据类型为目标数据类型的状态数据,即得到原始的状态数据。例如,以Rust语言为例,可以实现两个接口分别是Make trait和From trait,通过这两个接口在影子数据类型与目标数据类型之间互相转换。其中,Maketrait负责从目标数据类型对应的内存中拷贝各字段的值并赋值给影子数据类型中的相同字段,以实现从目标数据类型到影子数据类型的转换。From trait负责从影子数据类型对应的内存中拷贝各字段的值并赋值给目标数据类型中的相同字段,以实现从影子数据类型到目标数据类型的转换。
进一步可选地,从第三方库中引入的目标数据类型包含的字段可能全部是公有字段,也有可能存在私有字段。对于私有字段并不允许外部对其进行访问,所以无法从内存中拷贝私有字段的值。为了克服私有字段的问题,可以采用“软件工程中,没有银弹”的解决方法,即把所有私有字段都改成公有字段,但是这种方式代码改动量较大,对代码入侵较大。为了对代码具有较小入侵,本实施例利用过程宏在编译过程中将目标数据类型中的私有字段改写为公有字段,以便从目标数据类型对应的内存中拷贝各字段。以Rust语言为例,可以实现#[export_as_pub]过程宏,当export_as_pub的特性(feature)打开时,类型定义上写了该宏对类型都将被重写为公有(public)并导出所有字段,当然其自身也将定义成公有(public)。
进一步可选地,从第三方库中引入的目标数据类型有可能存在循环引用关系的状态数据。以Rust语言为例,可能出现Arc循环引用,如下代码所示:Struct A{b:Arc<B>};Struct B{a:Arc<A>}。即一种数据结构A定义了数据对象b,数据对象b使用了数据结构B;同时,数据结构B中的数据对象a又使用了数据结构A,形成循环引用。对于目标数据类型中存在循环引用关系的状态数据,在序列化时会出现死循环。为了解决该问题,在本申请实施例中,若目标数据类型中存在循环引用关系的状态数据,则针对该目标数据类型创建全局映射表(Map),用于存储已经序列化的状态数据;基于此,在序列化目标数据类型中存在循环引用关系的状态数据时,对每个状态数据,查询全局映射表,若该状态数据未存在于全局映射表中,则序列化该状态数据;若该状态数据存在于全局映射表中,则不再对状态数据进行序列化。例如,Struct A{b:Arc<B>};Struct B{a:Arc<A>}为例,创建一个全局映射表,在序列化数据结构A时,查询全局映射表,发现全局映射表中不存在数据结构A,则序列化数据结构A,且在序列化数据结构A的过程中也会序列化数据结构A引用的数据结构B,在成功序列后之后将数据结构A以及数据结构B添加至全局映射表中;当序列化数据结构B时,查询全局映射表,发现全局映射表中已经存在数据结构B,表示数据结构B已经被序列化,故不再对数据结构B进行序列化,避免出现死循环。其中,全局映射表可以是hash表,但不限于此。
在本申请上述各实施例中,并未对初始进程301的状态数据进行限定,可以包含任何与初始进程301相关的状态数据。例如,初始进程301的状态数据可以包含运行该初始进程301的虚拟处理器(VCPU)的状态和VM 300的状态。进一步,在主机100上部署有VMM 200的情况下,本实施例提供的VM热升级方法可由VMM 200执行,则初始进程301的状态数据除了包括VCPU的状态和VM 300的状态之外,还可以包括VMM的状态。
进一步,在本申请上述各实施例中,并未限定VM的类型,例如VM可以是基于Linux的内核的VM(Kernel-based Virtual Machine,KVM)构建的轻量的虚拟机系统。基于此,结合图2,以基于Linux KVM构建的VM为例,对由VMM控制VM进行热升级的过程进行下述说明:
在父进程(相当于前述实施例中的初始进程301)中:
1、VMM线程由epoll驱动,可以在epoll内添加Eventfd来触发epoll返回,这里的Eventfd用于捕捉VM的热升级事件,并设置当前状态为热升级状态。
2、在VMM线程收到热升级通知后,可由epoll_wait中返回,并开始处理VM热升级相关流程。
3、判断当前是否可以对VM执行热升级操作。例如,判断VM是否还没有启动完成;若是,则暂停一会,等VM启动完成后,再对VM执行热升级操作。
4、在VM的热升级过程中,控制VM进入暂停状态,具体包括:暂停所有VCPU线程的执行,并在所有VCPU线程在KVM接口上返回后,确定VM进入暂停状态。具体地,VCPU线程,陷入KVM_RUN内后,可以向其发送SIGUSR2信号让其返回,并设置VCPU_SHOULD_STOP标志位。
5、采集VCPU的状态数据、VM的状态数据以及VMM的状态数据进行保存。
6、处理VM所有需要迁移的fd,并去掉其O_CLOEXEC标志,以使这些fd保留当前打开状态。
其中,fd上带有O_CLOEXEC标志表示在调用exec执行成功后,fd会自动关闭;反之,去掉O_CLOEXEC标志,表示在调用exec执行成功后,fd不会自动关闭,这样,在创建新的子进程后,可以直接访问O_CLOEXEC标志的fd。需要说明的是,去掉fd上的O_CLOEXEC标志可以看做是为fd添加保留标记的一种特殊实施方式。
7、序列化上述保存的VCPU的状态、VM的状态以及VMM的状态等状态数据。
8、执行fork()函数,以创建子进程。这里的子进程相当于前述实施例中的目标进程,负责执行VM对应的升级文件。
9、同步子进程状态,如果子进程启动成功,父进程便退出。
在此说明,父进程中以上任一操作发生错误,都可以进行回滚操作。另外,在创建父进程时,系统会为父进程分为内存,并会在父进程的内存上添加MAP_RESERVE_ON_EXEC标志,则该块内存在调用exec执行时就不会被释放,而且还可以分配给子进程,这样子进程在热升级完成后可以使用完全相同的虚拟地址来访问该块内存。
在子进程(相当于前述实施例中的目标进程302)中:
81、调用exec执行升级后的可执行文件(即前述实施例中的升级文件),该可执行文件可以是二进制文件,但不限于此。
82、反序列化上述序列化后的状态数据,以得到VCPU的状态数据、VM的状态数据以及VMM的状态数据。
83、根据VCPU、VM以及VMM的状态数据,恢复VCPU、VM以及VMM的状态。
84、创建相应线程并根据恢复的VCPU、VM以及VMM的状态执行操作。
85、陷入事件循环。
需要说明的是,在上述VM热升级过程中,涉及Linux操作系统中的一些命令和标记,这些命令和标记的具体功能和工作原理可参见现有技术,在此不做详述。
另外,本申请实施例中基于Linux KVM实现的VM可以作为一种虚拟化组件,在该虚拟化组件的基础上可以进一步构建运行在单机上的云原生底层系统,进而从上到下构建起全栈的云原生竞争力。在云原生底层系统所实现的统一技术架构和方案支持云原生产品和各种服务全面上云的云原生化场景。进一步,基于Linux KVM实现的VM可以采用Rust语言实现,在采用Rust语言实现的情况下,由于Rust语言层面的限制,有关序列化和反序列化中的特殊处理可参见前述实施例,在此不再赘述。
需要说明的是,上述实施例所提供方法的各步骤的执行主体均可以是同一设备,或者,该方法也由不同设备作为执行主体。比如,步骤11至步骤16的执行主体可以为设备或进程A;又比如,步骤11-13的执行主体可以为设备或进程A,步骤15和16的执行主体可以为设备或进程B;等等。
另外,在上述实施例及附图中的描述的一些流程中,包含了按照特定顺序出现的多个操作,但是应该清楚了解,这些操作可以不按照其在本文中出现的顺序来执行或并行执行,操作的序号如11、12等,仅仅是用于区分开各个不同的操作,序号本身不代表任何的执行顺序。另外,这些流程可以包括更多或更少的操作,并且这些操作可以按顺序执行或并行执行。需要说明的是,本文中的“第一”、“第二”等描述,是用于区分不同的消息、设备、模块等,不代表先后顺序,也不限定“第一”和“第二”是不同的类型。
图3为本申请示例性实施例提供的一种主机设备的结构示意图。如图3所示,该主机设备包括:存储器31和处理器32,以及运行在由存储器31和处理器32构建的隔离环境中的虚拟机33。如图3所示,除了存储器31和处理器32之外,主机设备还包括通信组件34、电源组件35、音频组件36、显示器38等其它组件。
图3中仅示意性给出部分组件,并不意味着主机设备只包括图3所示组件。另外,图3中虚线框内的组件为可选组件,而非必选组件,具体可视主机设备的产品形态而定。本实施例的主机设备可以实现为台式电脑、笔记本电脑、平板电脑或智能手机等终端设备,也可以是常规服务器、云服务器或服务器阵列等服务端设备。若本实施例的主机设备实现为台式电脑、笔记本电脑、智能手机等终端设备,可以包含图3中虚线框内的组件;若本实施例的主机设备实现为常规服务器、云服务器或服务器阵列等服务端设备,则可以不包含图3中虚线框内的组件。
进一步,在存储器31和处理器32等基础硬件与虚拟机33之间还包括:虚拟机监视器(VMM)37。其中,存储器31中存储有虚拟机33以及虚拟机监视器37对应的功能代码,处理器32与存储器31耦合,通过执行这些功能代码可实现虚拟机33以及虚拟机监视器37的相关功能。
另外,存储器31中还存储有用于实现虚拟机热升级的计算机程序。处理器32还用于执行存储器31中的计算机程序,以用于:
在虚拟机33热升级过程中,控制虚拟机33在主机设备上运行的初始进程进入暂停状态;采集初始进程的状态数据进行保存,并为初始进程占用的内存添加锁定标记,以锁定内存不被释放;由初始进程在主机设备上创建虚拟机对应的目标进程,并将带有锁定标记的内存分配给目标进程,以实现内存共享;根据虚拟机33对应的升级文件执行目标进程,并由目标进程在执行过程中基于所保存的状态数据恢复虚拟机33的状态。
在一可选实施例中,处理器32还用于:向初始进程同步目标进程的执行状态,并在目标进程执行成功后关闭初始进程。
在一可选实施例中,处理器32还用于:在控制虚拟机在主机上运行的初始进程进入暂停状态之前,根据虚拟机当前的运行状态,判断是否适合对虚拟机进行热升级;若是,则执行控制虚拟机在主机上运行的初始进程进入暂停状态的操作;若否,则等待第一指定时间后,继续执行根据虚拟机当前的运行状态,判断是否适合对虚拟机进行热升级的操作。
进一步可选地,处理器32在判断是否适合对虚拟机进行热升级时,具体用于:判断虚拟机当前是否正处于启动状态;若是,确定不适合对虚拟机进行热升级;若否,确定适合对虚拟机进行热升级。
在一可选实施例中,处理器32还用于:在采集初始进程的状态数据进行保存之前,还包括:判断虚拟机是否还有未完成的IO操作;若否,则执行保存初始进程的状态数据的操作;若是,则等待未完成的IO操作在第二指定时间内完成后,或者在第二指定时间结束后,执行保存初始进程的状态数据的操作。
在一可选实施例中,处理器32在控制虚拟机在主机上运行的初始进程进入暂停状态时,具体用于:暂停初始进程中所有虚拟处理器线程的执行,并在所有虚拟处理器线程在内核虚拟机接口上返回后,确定初始进程进入暂停状态。
进一步可选地,虚拟机热升级的过程可由虚拟机监视器37控制执行。基于此,处理器32在采集初始进程的状态数据进行保存时,具体用于:采集虚拟处理器线程的状态、虚拟机的状态以及虚拟机监视器的状态进行保存。
在一可选实施例中,处理器32还用于:在创建虚拟机对应的目标进程之前,还包括:为初始进程访问的资源添加保留标记,以保留资源不被销毁。相应地,处理器32还用于:在恢复虚拟机的状态之后,由目标进程直接访问带有保留标记的资源。
在一可选实施例中,处理器32还用于:在创建虚拟机对应的目标进程之前,结合状态数据涉及的数据类型序列化状态数据,以得到序列化后的状态数据。相应地,处理器32在由目标进程在执行过程中基于所保存的状态数据恢复虚拟机的状态时,具体用于:由目标进程在执行过程中反序列化序列化后的状态数据,并基于反序列化出的状态数据恢复虚拟机的状态。
进一步可选地,处理器32在结合状态数据涉及的数据类型序列化状态数据时,具体用于:若状态数据涉及目标编程语言从第三方库中引入的目标数据类型,则生成与目标数据类型包含的字段相同的影子数据类型;从目标数据类型对应的内存中拷贝各字段的值并赋值给影子数据类型中的相同字段,以得到数据类型为影子数据类型的状态数据;对数据类型为影子数据类型的状态数据进行序列化,得到序列化后的状态数据;目标编程语言是指虚拟机使用的编程语言。
进一步可选地,处理器32还用于:若目标数据类型包含的字段中存在私有字段,则利用过程宏在编译过程中将目标数据类型中的私有字段改写为公有字段,以供从目标数据类型对应的内存中拷贝各字段。
进一步可选地,处理器32还用于:若目标数据类型中存在循环引用关系的状态数据,则针对目标数据类型创建全局映射表,用于存储已经序列化的状态数据;在序列化目标数据类型中存在循环引用关系的状态数据时,对每个状态数据,查询全局映射表,若状态数据未存在于全局映射表中,则序列化状态数据;若状态数据存在于全局映射表中,则不再对状态数据进行序列化。
进一步可选地,处理器32在反序列化序列化后的状态数据时,具体用于:反序列化序列化后的状态数据,以得到数据类型为影子数据类型的状态数据;从影子数据类型对应的内存中拷贝各字段的值并赋值给目标数据类型中的相同字段,以得到数据类型为目标数据类型的状态数据。
在一可选实施例中,目标编程语言为Rust语言、C语言或C++语言。
本实施例提供的主机设备,通过升级虚拟机进程的方式在同一台主机设备上完成虚拟机的热升级,由于不涉及主机设备之间的迁移,可节约热升级消耗的资源,有利于提高热升级效率;另外,通过为初始进程占用的内存添加锁定标记,以锁定该内存不被释放,使得在重新创建新进程后可以将该内存分配给新进程,实现内存共享,而无需进行内存拷贝,只需进行运行状态的迁移,可进一步节约资源,减少热升级所消耗的时间,进一步提高热升级效率。
相应地,本申请实施例还提供一种存储有计算机程序的计算机可读存储介质,计算机程序被执行时能够实现上述方法实施例中的各步骤。
上述实施例中的存储器54可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。
上述实施例中的通信组件被配置为便于通信组件所在设备和其他设备之间有线或无线方式的通信。通信组件所在设备可以接入基于通信标准的无线网络,如WiFi,2G、3G、4G/LTE、5G等移动通信网络,或它们的组合。在一个示例性实施例中,通信组件经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,所述通信组件还可以包括近场通信(NFC)模块,射频识别(RFID)技术,红外数据协会(IrDA)技术,超宽带(UWB)技术,蓝牙(BT)技术等。
上述实施例中的显示器包括屏幕,其屏幕可以包括液晶显示器(LCD)和触摸面板(TP)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。
上述实施例中的电源组件,为电源组件所在设备的各种组件提供电力。电源组件可以包括电源管理系统,一个或多个电源,及其他与为电源组件所在设备生成、管理和分配电力相关联的组件。
上述实施例中的音频组件,可被配置为输出和/或输入音频信号。例如,音频组件包括一个麦克风(MIC),当音频组件所在设备处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器或经由通信组件发送。在一些实施例中,音频组件还包括一个扬声器,用于输出音频信号。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
Claims (17)
1.一种虚拟机热升级方法,其特征在于,包括:
在虚拟机热升级过程中,控制所述虚拟机在主机上运行的初始进程进入暂停状态;
在所述初始进程处于暂停状态下,采集所述初始进程的状态数据进行保存,并为所述初始进程占用的内存添加锁定标记,以锁定所述内存不被释放;
若所述状态数据涉及目标编程语言从第三方库中引入的目标数据类型,则生成与所述目标数据类型包含的字段相同的影子数据类型;通过所述影子数据类型对所述目标数据类型的状态数据进行序列化,得到序列化后的状态数据;所述目标编程语言是指所述虚拟机使用的编程语言,且所述影子数据类型是目标编程语言的数据类型;
由所述初始进程在同一主机上创建所述虚拟机对应的目标进程,并将带有所述锁定标记的内存分配给所述目标进程,以实现内存共享;
根据所述虚拟机对应的升级文件执行所述目标进程,并由所述目标进程在执行过程中反序列化所述序列化后的状态数据,并基于反序列化出的状态数据恢复所述虚拟机的状态。
2.根据权利要求1所述的方法,其特征在于,还包括:
向所述初始进程同步所述目标进程的执行状态,并在所述目标进程执行成功后关闭所述初始进程。
3.根据权利要求1所述的方法,其特征在于,在控制所述虚拟机在主机上运行的初始进程进入暂停状态之前,还包括:
根据所述虚拟机当前的运行状态,判断是否适合对所述虚拟机进行热升级;
若是,则执行控制所述虚拟机在主机上运行的初始进程进入暂停状态的操作;
若否,则等待第一指定时间后,继续执行根据所述虚拟机当前的运行状态,判断是否适合对所述虚拟机进行热升级的操作。
4.根据权利要求3所述的方法,其特征在于,根据所述虚拟机当前的运行状态,判断是否适合对所述虚拟机进行热升级,包括:
判断所述虚拟机当前是否正处于启动状态;
若是,确定不适合对所述虚拟机进行热升级;
若否,确定适合对所述虚拟机进行热升级。
5.根据权利要求1所述的方法,其特征在于,在采集所述初始进程的状态数据进行保存之前,还包括:
判断所述虚拟机是否还有未完成的IO操作;
若否,则执行保存所述初始进程的状态数据的操作;
若是,则等待未完成的IO操作在第二指定时间内完成后,或者在所述第二指定时间结束后,执行保存所述初始进程的状态数据的操作。
6.根据权利要求1所述的方法,其特征在于,控制所述虚拟机在主机上运行的初始进程进入暂停状态,包括:
暂停所述初始进程中所有虚拟处理器线程的执行,并在所有虚拟处理器线程在内核虚拟机接口上返回后,确定所述初始进程进入暂停状态。
7.根据权利要求6所述的方法,其特征在于,所述方法由虚拟机监视器执行,则采集所述初始进程的状态数据进行保存,包括:
采集所述虚拟处理器线程的状态、所述虚拟机的状态以及所述虚拟机监视器的状态进行保存。
8.根据权利要求1所述的方法,其特征在于,在创建所述虚拟机对应的目标进程之前,还包括:为所述初始进程访问的资源添加保留标记,以保留所述资源不被销毁;
相应地,在恢复所述虚拟机的状态之后,还包括:由所述目标进程直接访问带有所述保留标记的资源。
9.根据权利要求1所述的方法,其特征在于,通过所述影子数据类型对所述目标数据类型的状态数据进行序列化,得到序列化后的状态数据,包括:
从所述目标数据类型对应的内存中拷贝各字段的值并赋值给所述影子数据类型中的相同字段,以得到数据类型为影子数据类型的状态数据;
对数据类型为所述影子数据类型的状态数据进行序列化,得到序列化后的状态数据。
10.根据权利要求9所述的方法,其特征在于,还包括:
若所述目标数据类型包含的字段中存在私有字段,则利用过程宏在编译过程中将所述目标数据类型中的私有字段改写为公有字段,以供从所述目标数据类型对应的内存中拷贝各字段。
11.根据权利要求9所述的方法,其特征在于,还包括:
若所述目标数据类型中存在循环引用关系的状态数据,则针对所述目标数据类型创建全局映射表,用于存储已经序列化的状态数据;
在序列化所述目标数据类型中存在循环引用关系的状态数据时,对每个状态数据,查询所述全局映射表,若所述状态数据未存在于所述全局映射表中,则序列化所述状态数据;若所述状态数据存在于所述全局映射表中,则不再对所述状态数据进行序列化。
12.根据权利要求9所述的方法,其特征在于,反序列化所述序列化后的状态数据,包括:
反序列化所述序列化后的状态数据,以得到数据类型为所述影子数据类型的状态数据;
从所述影子数据类型对应的内存中拷贝各字段的值并赋值给所述目标数据类型中的相同字段,以得到数据类型为所述目标数据类型的状态数据。
13.根据权利要求1-12任一项所述的方法,其特征在于,所述目标编程语言为Rust语言。
14.一种主机设备,其特征在于,包括:存储器和处理器,以及运行在由所述存储器和处理器构建的隔离环境中的虚拟机;
所述存储器,用于存储计算机程序;
所述处理器,与所述存储器耦合,用于执行所述计算机程序,以用于:
在虚拟机热升级过程中,控制所述虚拟机在所述主机设备上运行的初始进程进入暂停状态;
在所述初始进程处于暂停状态下,采集所述初始进程的状态数据进行保存,并为所述初始进程占用的内存添加锁定标记,以锁定所述内存不被释放;
若所述状态数据涉及目标编程语言从第三方库中引入的目标数据类型,则生成与所述目标数据类型包含的字段相同的影子数据类型;通过所述影子数据类型对所述目标数据类型的状态数据进行序列化,得到序列化后的状态数据;所述目标编程语言是指所述虚拟机使用的编程语言,且所述影子数据类型是目标编程语言的数据类型;
由所述初始进程在所述主机设备上创建所述虚拟机对应的目标进程,并将带有所述锁定标记的内存分配给所述目标进程,以实现内存共享;
根据所述虚拟机对应的升级文件执行所述目标进程,并由所述目标进程在执行过程中反序列化所述序列化后的状态数据,并基于反序列化出的状态数据恢复所述虚拟机的状态。
15.根据权利要求14所述的主机设备,其特征在于,所述处理器在通过所述影子数据类型对所述目标数据类型的状态数据进行序列化,得到序列化后的状态数据时,具体用于:
从所述目标数据类型对应的内存中拷贝各字段的值并赋值给所述影子数据类型中的相同字段,以得到数据类型为影子数据类型的状态数据;
对数据类型为所述影子数据类型的状态数据进行序列化,得到序列化后的状态数据。
16.根据权利要求15所述的主机设备,其特征在于,所述处理器在反序列化所述序列化后的状态数据时,具体用于:
反序列化所述序列化的状态数据,以得到数据类型为所述影子数据类型的状态数据;
从所述影子数据类型对应的内存中拷贝各字段的值并赋值给所述目标数据类型中的相同字段,以得到数据类型为所述目标数据类型的状态数据。
17.一种存储有计算机程序的计算机可读存储介质,其特征在于,当所述计算机程序被处理器执行时,致使所述处理器实现权利要求1-13任一项所述方法中的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010711496.9A CN113296802B (zh) | 2020-07-22 | 2020-07-22 | 虚拟机热升级方法、主机设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010711496.9A CN113296802B (zh) | 2020-07-22 | 2020-07-22 | 虚拟机热升级方法、主机设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113296802A CN113296802A (zh) | 2021-08-24 |
CN113296802B true CN113296802B (zh) | 2022-05-06 |
Family
ID=77318637
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010711496.9A Active CN113296802B (zh) | 2020-07-22 | 2020-07-22 | 虚拟机热升级方法、主机设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113296802B (zh) |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104598303A (zh) * | 2013-10-31 | 2015-05-06 | 中国电信股份有限公司 | 基于kvm的虚拟机间在线迁移方法与装置 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9529728B2 (en) * | 2010-10-07 | 2016-12-27 | Vmware, Inc. | Method for improving memory system performance in virtual machine systems |
CN103699633A (zh) * | 2013-12-23 | 2014-04-02 | Tcl集团股份有限公司 | 一种利用xml实现通用化数据交换的方法和系统 |
CN106293781B (zh) * | 2015-05-15 | 2019-10-18 | 阿里巴巴集团控股有限公司 | 在线升级机器虚拟器的方法与设备 |
US9961098B2 (en) * | 2015-06-26 | 2018-05-01 | Vmware, Inc. | Container data offline and online scan in a cloud environment |
CN105760534B (zh) * | 2016-03-10 | 2019-03-05 | 上海晶赞科技发展有限公司 | 自定义的可序列化的数据结构、hadoop集群、服务器及其应用方法 |
CN110489150A (zh) * | 2019-08-26 | 2019-11-22 | 深信服科技股份有限公司 | 一种虚拟机热升级方法、装置及其相关设备 |
-
2020
- 2020-07-22 CN CN202010711496.9A patent/CN113296802B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104598303A (zh) * | 2013-10-31 | 2015-05-06 | 中国电信股份有限公司 | 基于kvm的虚拟机间在线迁移方法与装置 |
Also Published As
Publication number | Publication date |
---|---|
CN113296802A (zh) | 2021-08-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11868785B2 (en) | Application program page processing method and device | |
US9851989B2 (en) | Methods and apparatus to manage virtual machines | |
CN107636612B (zh) | 应用迁移装置、方法与存储介质 | |
US9424065B2 (en) | Methods and apparatus to scale application deployments in cloud computing environments using virtual machine pools | |
US9250918B2 (en) | Server management with dynamic construction of pre-boot images | |
US20200192689A1 (en) | Container migration in computing systems | |
US20110246988A1 (en) | Hypervisor for starting a virtual machine | |
WO2012000879A1 (en) | Hypervisor selection for hosting a virtual machine image | |
CN111930473A (zh) | 在容器云上部署图像识别服务的方法与设备 | |
US20230205561A1 (en) | Managing containers across multiple operating systems | |
US9804878B2 (en) | Using a status indicator for a merge operation for writing data associated with a virtual machine | |
CN112311605B (zh) | 提供机器学习服务的云平台及方法 | |
CN112000353A (zh) | 应用运行方法、装置及存储介质 | |
US10318343B2 (en) | Migration methods and apparatuses for migrating virtual machine including locally stored and shared data | |
CN111796838A (zh) | Mpp数据库自动部署方法及装置 | |
CN112214388A (zh) | 内存监控方法、装置、设备及计算机可读存储介质 | |
CN112131208A (zh) | 全量数据迁移方法、装置、设备及计算机可读存储介质 | |
CN113296802B (zh) | 虚拟机热升级方法、主机设备及存储介质 | |
CN109491762B (zh) | 容器状态控制方法及装置、存储介质、电子设备 | |
US9436489B2 (en) | Virtual machine data replication with shared resources | |
Wang et al. | Reg: An ultra-lightweight container that maximizes memory sharing and minimizes the runtime environment | |
US11314500B2 (en) | System and method for modularizing update environment in life cycle manager | |
CN115794132A (zh) | 操作系统部署方法、装置、设备及存储介质 | |
WO2020135129A1 (zh) | 加载应用的插件的方法、装置和终端 | |
US20240152371A1 (en) | Dynamic re-execution of parts of a containerized application pipeline |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20230601 Address after: Room 1-2-A06, Yungu Park, No. 1008 Dengcai Street, Sandun Town, Xihu District, Hangzhou City, Zhejiang Province Patentee after: Aliyun Computing Co.,Ltd. Address before: Box 847, four, Grand Cayman capital, Cayman Islands, UK Patentee before: ALIBABA GROUP HOLDING Ltd. |
|
TR01 | Transfer of patent right |