一种轻量级虚拟机迁移方法

文档序号:6516908阅读:263来源:国知局
一种轻量级虚拟机迁移方法
【专利摘要】本发明提供一种轻量级虚拟机迁移方法,包括:从源端向目的端并发地迁移构成待迁移虚拟机的各个进程;以及在目的端恢复迁移完成的所述各个进程的运行。所述方法还包括:将构成所述待迁移虚拟机的各个进程的迁移切分为多个时序阶段,其中每个时序阶段对应一个Daemon进程。多个Daemon进程并发工作,每个Daemon进程依次服务所述各个进程的对应时序阶段的资源迁移。本发明在保证了迁移的效率和可靠性的同时,缩短了虚拟机迁移的服务中断时间。
【专利说明】一种轻量级虚拟机迁移方法
【技术领域】
[0001]本发明涉及计算机操作系统领域,尤其涉及一种轻量级虚拟机迁移方法。
【背景技术】
[0002]随着数据规模的爆炸性增长,系统规模越来越大,系统所管理的异构资源也越来越多。为了顺应这种形式,且有效地利用和管理各种系统资源,虚拟机技术应运而生。虚拟机技术能够将资源做灵活地切割、封装,为用户提供逻辑主机,即视图上与物理主机一致的独立的应用运行环境。
[0003]在所有虚拟机技术中,轻量级虚拟机技术,即OS级别的虚拟机技术,具有高性能低损耗的优势,在数据中心应用广泛。轻量级虚拟机技术通过隔离OS中的进程组并为其分配相应资源,将单个物理服务器转变为多个彼此独立的逻辑服务器,即容器。容器中承载着各种数据应用,是事实上的服务提供者。
[0004]研究轻量级虚拟机的迁移具有重要意义,首先,数据中心内轻量级虚拟机承载的服务多且不能间断,为保证服务质量不受硬件环境变化和故障的影响,必须采用相应的迁移技术来提高系统整体的可靠性;其次,轻量级虚拟机开销小,单个容器比较节省资源,但随着容器数量的增加,容器在物理服务器中的分布也将对整个数据中心的资源利用及开销产生重要影响,改变容器的分布就依赖于迁移技术;最后,当物理服务器的数量、集群拓扑发生变化时,使用迁移技术动态调整容器的分布,不但有能耗和可靠性方面的收益,通过服务资源需求与物理硬件的优化匹配,还能提高容器性能、提升服务质量。然而,目前还没有关于轻量级虚拟机迁移的任何研究。
[0005]针对上述问题,需要一种用于轻量级虚拟机迁移的方法。

【发明内容】

[0006]本发明提供一种轻量级虚拟机迁移方法,所述方法包括:
[0007]步骤I)、从源端向目的端并发地迁移构成待迁移虚拟机的各个进程;
[0008]步骤2)、在目的端,恢复迁移完成的所述各个进程的运行。
[0009]在一个实施例中,步骤I)包括:
[0010]步骤11)、在源端,将构成所述待迁移虚拟机的各个进程的迁移切分为多个时序阶段,其中每个时序阶段对应一个Daemon进程;
[0011]步骤12)、在源端,多个Daemon进程并发工作,其中每个Daemon进程依次服务所述各个进程的对应时序阶段的资源迁移;
[0012]步骤13)在目的端,接收源端迁移来的数据。
[0013]在一个实施例中,步骤12)还包括对于每个进程依次迁移其每个时序阶段的资源。
[0014]在进一步的实施例中,步骤11)之前还包括采用广度优先遍历算法依次冻结所述待迁移虚拟机的进程树中的进程;其中,对于同一层级的进程按照派生的顺序进行遍历。
[0015]在进一步的实施例中,在步骤12)中,每个Daemon进程按冻结顺序依次服务各个进程的对应时序阶段的资源迁移。
[0016]在一个实施例中,步骤13)之前还包括在目的端派生对应于在源端构成所述待迁移虚拟机的各个进程的embryo进程。
[0017]在进一步的实施例中,步骤13)包括在目的端由embryo进程依次接收对应的源端进程迁移来的数据。
[0018]在一个实施例中,在步骤12)中,Daemon进程服务进程的对应时序阶段的资源迁移包括:
[0019]步骤121)、在源端,由内核态的Daemon进程根据用户态工作进程的进程号将由进程号定位的数据传送到指定的用户态工作进程;其中,该数据包括所述进程中对应该Daemon进程的时序阶段的资源;
[0020]步骤122)、所述用户态工作进程根据自身进程号通过系统调用接收传送来的数据;
[0021]步骤123)、所述用户态工作进程对数据进行编码处理;
[0022]步骤124)、所述用户态工作进程将数据传送到目的端。
[0023]在进一步的实施例中,步骤13)包括:
[0024]步骤131)、在目的端,由用户态的embryo进程接收对应的源端进程传送来的数据;
[0025]步骤132)、所述用户态embryo进程对接收的数据进行解码处理;
[0026]步骤133)、所述用户态embryo进程将数据传送到编址为O的内核,其中将所述用户态embryo进程的进程号添加在所传送数据的包头中;
[0027]步骤134)、所述用户态embryo进程陷入内核,转化为内核态进程,由该内核态进程根据进程号接收数据。
[0028]在一个实施例中,在步骤11)中根据资源类别将构成所述待迁移虚拟机的各个进程的迁移切分为多个时序阶段,其中在不同的时序阶段迁移不同类别的资源。
[0029]在一个实施例中,步骤I)之前还包括迁移待迁移虚拟机的整体配置及描述信息。
[0030]在一个实施例中,步骤I)之前还包括在目的端同步待迁移虚拟机的硬盘配置文件。
[0031]在另一个实施例中,步骤I)之前还包括迁移非共享存储的初始全映像。在进一步的实施例中,步骤2)还包括同步所述非共享存储的增量变化。
[0032]采用本发明可以达到如下的有益效果:
[0033]将虚拟容器的内存数据以进程为单位采用流水线的形式高并发地传输,缩短了轻量级虚拟机迁移的服务中断时间。此外,基于Netlink搭建跨内核态和用户态的迁移通道,利用用户空间的数据压缩校验等资源,保证了迁移的效率和可靠性。
【专利附图】

【附图说明】
[0034]图1是根据本发明一个实施例的轻量级虚拟机迁移方法的流程图;
[0035]图2是采用广度优先遍历算法处理待迁移虚拟机的进程树的示意图;以及
[0036]图3是根据本发明一个实施例的轻量级虚拟机迁移流水线的示意图。【具体实施方式】
[0037]下面结合附图和具体实施例对本发明加以说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
[0038]根据本发明的一个实施例,提供一种轻量级虚拟机迁移方法,图1示出了该方法的整体流程。概括来说,该方法将轻量级虚拟机的迁移分解为进程的迁移,包括预处理、流水线迁移、后处理这几个阶段。在流水线迁移过程中,基于Netlink的机制搭建跨内核态和用户态的迁移通道,并且采用高并发流水线的形式缩短虚拟机迁移的服务中断时间,最终实现准实时的迁移。
[0039]继续参考图1,具体描述轻量级虚拟机迁移的每一步骤:
[0040]第一步、迁移的预处理
[0041]在一个实施例中,在本步骤执行目的端服务的开启、配置文件的管理等操作。其中,包括虚拟机整体配置及描述信息的迁移,如Quota、统计量、IP_C0NNTRACK、IPV4/6地址信息、路由表、防火墙规则等数据的迁移。
[0042]在进一步的实施例中,本步骤还负责外存的迁移,如果外存采用共享存储,则迁移的目的端仅需要同步待迁移虚拟机的硬盘配置文件;如果外存采用独立非共享的存储,例如源端宿主机的一块独立物理硬盘,则需要将该硬盘的初始全映像预先迁移过去,这一过程在后台进行,不影响虚拟机在源端的正常运行。然而,该预先迁移过程可能会产生不一致的硬盘数据,针对这一情况,可以在后处理阶段由目的端发起的同步非共享存储增量变化的操作来解决。
[0043]第二步、展开流水线迁移
[0044]概括而言,本步骤可以包括以下子步骤:
[0045]1.在源端遍历待迁移虚拟机的进程树,同时冻结(suspend)构成该虚拟机的各个进程。优选地,可使用广度优先遍历算法进行遍历。要冻结一个进程,可以通过发送信号来改变该进程的执行状态,使其停止运行,从而保证迁移过程中进程的内存数据映像的一致。
[0046]在采用广度优先遍历算法的过程中,对于同一层级的各个进程,一般的遍历原则是:按照派生的时间序来扫描,线程(即轻量级进程)组的Leader (即领头线程)优先。
[0047]2.再次遍历进程树(例如通过广度优先遍历算法)进行检查,如果进程T已冻结,则提取进程T的某项资源(或者说某类资源),放入待迁移数据队列中。
[0048]其中,某项资源是指可按资源类别(如进程结构体、进程内存空间、进程文件列表等资源)对进程进行切分,从而使不同的资源在不同的时序阶段中进行迁移。
[0049]3.对于待迁移数据队列中进程T的已经提取就绪的资源,例如包括内存、文件、进程间通讯信息等资源,展开迁移。对应于每个源端的待迁移进程,在目的端会有一个对应的embryo (胚胎)进程来接收数据。
[0050]如子步骤2所述,在迁移前,首先将轻量级虚拟机的迁移分解为各个进程的迁移,再将各个进程的迁移根据其资源类别切分为多个时序阶段,典型地,可按进程结构体、进程内存空间、进程文件列表等资源进行切分。
[0051]迁移时,源端可采用多Daemon的服务模型(Daemon是一种后台服务程序),每个Daemon进程相当于流水线上的一个功能部件,对应上述进程迁移的某个时序阶段。这样,待迁移虚拟机中的各个进程依遍历顺序提出服务请求,多个Daemon进程并发工作,每个Daemon进程流水式地服务于依次提出服务请求的虚拟机进程,从而构成了流水线式的传输服务。
[0052]传输顺序也决定了目的端embryo进程的派生顺序。在一个实施例中,在目的端,embryo进程依据源端虚拟机进程的树状关系在目的端递归地派生出同样结构的进程树(参见在下文中目的端流水线处理主体流程伪码),树中的每个节点都是一个embryo接收进程,分别对应源端进程树中对应的待迁移进程。embryo进程依序接收源端对应进程的资源,填充本地进程。在接收的过程中,embryo进程像胚胎一样分裂,发育,最终成长为与源端进程一模一样的个体,由其分裂而形成的embryo群体则成长为进程树。当embryo进程树整体完成上述步骤时,虚拟机迁移基本结束,中断的服务可以重新启动。
[0053]4.在目的端恢复已迁移完成的进程的运行
[0054]在目的端执行进程迁移的后处理,如果进程T的相关资源都已迁移完成(embryo进程可轮询检查是否迁移完成),即T的冻结前的内存映像已经完整克隆到目的端,则embryo进程转换自身的内存空间,切换执行逻辑,恢复源端对应进程的映像和执行起始点,从而恢复T在目的端的运行,完成单个进程的迁移。
[0055]在流水线迁移过程中,在源端遍历虚拟机的进程树以及切分进程的时序阶段都是在内核态完成的。为节省迁移过程中的网络传输带宽,可以在迁移之前在源端将要迁移的数据搬移到用户态,利用用户空间的资源、函数库对MB甚至GB级的迁移数据展开编码处理。例如,对要迁移的数据按照一定的格式进行组织、压缩以及变换。其中,压缩可采用基于文件系统语义的外存数据压缩算法、RLE算法和GZIP算法等。在进一步的实施例中,要保证迁移数据完整正确,还可以对迁移数据块展开校验,例如,采用MD5指纹校验算法来进行数据校验。
[0056]在目的端,需要在用户态对源端迁移过来的已编码数据进行解码处理,其流程恰好是源端编码的逆过程。
[0057]在一个实施例中,本发明基于Linux平台下的Net I ink机制建立内核态和用户态之间的端对端数据传输通道,实现端对端的数据传输。这里的端对端,指的是进程到进程的数据传输。该通道的工作步骤如下:
[0058]I).在源端,内核态有多进程(或者说是一些常驻的Daemon进程),负责不同资源的迁移。用户态具备多个工作进程,彼此之间做负载均衡;所有的待迁移内存和外存数据,通过工作进程的进程号Pid来定位,并且由内核进程向指定的工作进程传送。
[0059]2).在源端,用户态工作进程根据自身的Pid通过系统调用接收内核传送给自己的数据,进而执行编码、压缩、校验等工作,然后通过协议层发起向目的端的数据迁移。在用户态执行这些操作,是由于用户态具备丰富的资源和成熟的第三方函数库,便于对数据进行压缩、校验和编解码。
[0060]3).在目的端,用户态存在多个embryo进程,其中每个embryo进程对应虚拟机进程树中的一个进程,embryo进程接收源端传过来的数据,经用户态解码处理后,会通过Netlink传递给编址为O的内核,同时将embryo进程的Pid作为地址信息添加在Netlink消息的包头中。
[0061]4).在目的端,内核态的多线程分别对应多embryo进程。当用户态的embryo进程陷入内核后,就转化为内核态进程;该内核态进程根据Pid接收数据,进而在内核态操控embryo进程的内存空间、描述结构等,最终完成进程恢复。
[0062]第三步、轻量级虚拟机迁移的后处理
[0063]当所有的进程在目的端依次恢复以后,虚拟机迁移就基本完成了。
[0064]在一个实施例中,对于第一步中描述的独立非共享存储的情况,在本步骤还需要从源端同步迁移过程中所产生的外存增量数据,使得外存数据也得以恢复到冻结前一刻的一致的状态。优选地,该同步过程可以采用On Demand的方式懒惰执行,从而缩短迁移过程中正常服务的中断时间。
[0065]下文中,以图2所示的虚拟机进程树为例,进一步描述本发明提供的轻量级虚拟机迁移方法以及用于实现流水线迁移的伪码。
[0066]图2描述了一个典型的Linux虚拟机进程树,其中,树的根节点为init进程,它是所有进程的祖先,其下分别派生有远程安全Shell登录服务(sshd)、系统审计服务(auditd)和系统定时服务(crond)的相关进程。远程安全Shell登录服务(sshd)下存在两个子进程,分别为对远程登录的root用户进行服务的rootOpts/l进程,和对远程登录的jason用户进行服务的jasonOpts/2进程。系统审计服务(auditd)下没有子进程。系统定时服务(crond)下存在两个子进程,分别为对应日常服务的dailyjobl和dailyjob2。
[0067]首先在源端采用广度优先遍历算法遍历该进程树,冻结、分析该待迁移虚拟机进程树,接着形成待迁移进程资源的索引结构,进而依序传输。
[0068]如图2中所示,先扫描init进程,再扫描其子进程sshd、auditd、crond,最后扫描位于第三层的 root@pts/l、jasonipts/2> dailyjobl、dailyjob2。
[0069]这里的遍历主要用于两个子步骤,首先,第一次遍历对各个进程展开遍历并依序冻结;接下来,第二次遍历检查进程的状态,如果已经冻结完成,则提取进程资源,将进程的内存空间、文件等资源分类整理,切分好进程的时序阶段,建立索引数组,为后续迁移做好准备。
[0070]图3示出了图2的虚拟机进程树中各进程的流水线式迁移过程。图3中,纵坐标为待迁移进程,其顺序为扫描序(即遍历顺序)。横坐标为时间轴,代表进程迁移的各个阶段。两次遍历为前两个预备阶段,分别是冻结(suspend)和提取(extract)。进程资源的流水线传输为主体部分,其按照资源类别切分为主要的5个时序阶段:进程内核结构元数据迁移(taskstruct)、进程内存资源迁移(mm)、进程文件资源迁移(file)、进程网络资源迁移(netif)和进程通讯资源迁移(sysvipc)。其中,可按照资源的重要程度依次迁移,即顺序为 taskstruct、mm、file、netif、sysvipc。最后阶段为后处理阶段(postprocess),代表迁移进程在目的端的运行恢复。
[0071]流水线迁移需要源端和目的端双方的配合,下面将采用伪码来进行描述。在该伪码中,有两个全局变量代表迁移中的关键数据结构,说明如下:1)源端的全局变量queue,代表全局资源链表,其中的每个元素item分别代表一个待迁移的进程;2)目的端的全局变量server_sock,代表目的端的网络服务对外侦听接口。
[0072]源端的流水线迁移的流程如下:
[0073]global queue; //初始化全局队列queuesrc—site—main() {
suspend_task_init_wakeup(task_suspend, ve);//spawn 冻结处理后台进程
并唤醒其立即执行
[0074]
【权利要求】
1.一种轻量级虚拟机迁移方法,包括: 步骤I)、从源端向目的端并发地迁移构成待迁移虚拟机的各个进程; 步骤2)、在目的端,恢复迁移完成的所述各个进程的运行。
2.根据权利要求1所述的方法,其中,步骤I)包括: 步骤11)、在源端,将构成所述待迁移虚拟机的各个进程的迁移切分为多个时序阶段,其中每个时序阶段对应一个Daemon进程; 步骤12 )、在源端,多个Daemon进程并发工作,其中每个Daemon进程依次服务所述各个进程的对应时序阶段的资源迁移; 步骤13)在目的端,接收源端迁移来的数据。
3.根据权利要求2所述的方法,其中,步骤12)还包括: 对于每个进程,依次迁移其每个时序阶段的资源。
4.根据权利要求2或3所述的方法,其中,步骤11)之前还包括: 采用广度优先遍历算法依次冻结所述待迁移虚拟机的进程树中的进程;其中,对于同一层级的进程按照派生的顺序进行遍历。
5.根据权利要求4所述的方法,在步骤12)中: 每个Daemon进程按冻结顺序依次服务各个进程的对应时序阶段的资源迁移。
6.根据权利要求2、3或5中任何一个所述的方法,其中,步骤13)之前还包括: 在目的端,派生对应于在源端构成所述待迁移虚拟机的各个进程的embryo进程。
7.根据权利要求6所述的方法,其中,步骤13)包括: 在目的端,由embryo进程依次接收对应的源端进程迁移来的数据。
8.根据权利要求7所述的方法,在步骤12)中,Daemon进程服务进程的对应时序阶段的资源迁移包括: 步骤121)、在源端,由内核态的Daemon进程根据用户态工作进程的进程号将由进程号定位的数据传送到指定的用户态工作进程;其中,该数据包括所述进程中对应该Daemon进程的时序阶段的资源; 步骤122)、所述用户态工作进程根据自身进程号通过系统调用接收传送来的数据; 步骤123)、所述用户态工作进程对数据进行编码处理; 步骤124)、所述用户态工作进程将数据传送到目的端。
9.根据权利要求8所述的方法,其中,步骤13)包括: 步骤131)、在目的端,由用户态的embryo进程接收对应的源端进程传送来的数据; 步骤132)、所述用户态embryo进程对接收的数据进行解码处理; 步骤133)、所述用户态embryo进程将数据传送到编址为O的内核,其中将所述用户态embryo进程的进程号添加在所传送数据的包头中; 步骤134)、所述用户态embryo进程陷入内核,转化为内核态进程,由该内核态进程根据进程号接收数据。
10.根据权利要求8或9所述的方法,在步骤11)中: 根据资源类别,将构成所述待迁移虚拟机的各个进程的迁移切分为多个时序阶段,其中在不同的时序阶段迁移不同类别的资源。
11.根据权利要求1-3、5、7-9中任何一个所述的方法,其中,步骤I)之前还包括:迁移待迁移虚拟机的整体配置及描述信息。
12.根据权利要求1-3、5、7-9中任何一个所述的方法,其中,步骤1)之前还包括:在目的端同步待迁移虚拟机的硬盘配置文件。
13.根据权利要求1-3、5、7-9中任何一个所述的方法,其中,步骤1)之前还包括:迁移非共享存储的初始全映像。
14.根据权利要求13所述的方法,其中,步骤2)还包括:同步所述非共享存储的增量变化。
【文档编号】G06F9/455GK103577245SQ201310520307
【公开日】2014年2月12日 申请日期:2013年10月29日 优先权日:2013年10月29日
【发明者】向小佳, 赵晓芳 申请人:中国科学院计算技术研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1