CN104598303B - 基于kvm的虚拟机间在线迁移方法与装置 - Google Patents
基于kvm的虚拟机间在线迁移方法与装置 Download PDFInfo
- Publication number
- CN104598303B CN104598303B CN201310529243.XA CN201310529243A CN104598303B CN 104598303 B CN104598303 B CN 104598303B CN 201310529243 A CN201310529243 A CN 201310529243A CN 104598303 B CN104598303 B CN 104598303B
- Authority
- CN
- China
- Prior art keywords
- virtual machine
- page table
- internal memory
- burst
- shadow page
- 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
Landscapes
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本公开涉及一种基于KVM的虚拟机间在线迁移方法与装置。该方法包括接收虚拟机迁移指令,在目的物理机上创建目的虚拟机;检测源物理机至目的物理机的网速;根据网速与源虚拟机的内存大小对内存进行分片;对各个分片进行传输,并在传输过程中实时监控源虚拟机的内存变化;根据各个影子页表中虚拟地址与物理地址的映射关系判断内存变化的位置所对应的影子页表是否已完成传输任务;如果未完成,则利用变化影子页表替换待传输的相应影子页表;如果已完成,则将变化的影子页表作为脏数据添加到传输队尾;判断源虚拟机实时产生的脏数据的数量是否小于设定阈值,如小于,则完成源虚拟机内存至目的虚拟机内存的预拷贝。本公开显著降低了整机迁移时间。
Description
技术领域
本公开涉及虚拟机服务管理领域,特别地,涉及一种基于KVM(kernel-basedVirtual Machine,基于核的虚拟机)的虚拟机间在线迁移方法与装置。
背景技术
V2V(Virtual-to-Virtual,虚拟机到虚拟机)迁移是在虚拟机之间移动操作系统和数据,照顾主机级别的差异和处理不同的虚拟硬件。虚拟机从一个物理机上的VMM(Virtual Machine Monitor,虚拟机管理程序)迁移到另一个物理机的VMM,这两个VMM的类型可以相同,也可以不同。如VMware迁移到KVM,KVM迁移到KVM。可以通过多种方式将虚拟机从一个VM(Virtual Machine,虚拟机)Host系统移动到另一个VM Host系统。
虚拟机迁移分为离线迁移和在线迁移两种。
离线迁移(offline migration):也叫做常规迁移、静态迁移。在迁移之前将虚拟机暂停,如果共享存储,则只拷贝系统状态至目的主机,最后在目的主机重建虚拟机状态,恢复执行。如果使用本地存储,则需要同时拷贝虚拟机镜像和状态到目的主机。但这种方式的迁移过程需要事先停止虚拟机的运行。从用户角度看,有明确的一段服务不可用的时间。这种迁移方式简单易行,适用于对服务可用性要求不严格的场合。
在线迁移(online migration):又称为实时迁移(live migration),是指在保证虚拟机上服务正常运行的同时,虚拟机在不同的物理主机之间进行迁移,其逻辑步骤与离线迁移几乎完全一致。不同的是,为了保证迁移过程中虚拟机服务的可用,迁移过程仅有非常短暂的停机时间。迁移的前面阶段,服务在源主机运行,当迁移进行到一定阶段,目的主机已经具备了运行系统的必须资源,经过一个非常短暂的切换,源主机将控制权转移到目的主机,服务在目的主机上继续运行。对于服务本身而言,由于切换的时间非常短暂,用户感觉不到服务的中断,因而迁移过程对用户是透明的。在线迁移适用于对服务可用性要求很高的场景。
对于VM的内存状态的迁移,XEN(开放源代码虚拟机监视器)和KVM都采用了主流的的预拷贝(pre-copy)策略。迁移开始之后,源主机VM仍在运行,目的主机VM尚未启动。迁移通过一个循环将源主机VM的内存数据发送至目的主机VM。循环第一轮发送所有内存页数据,接下来的每一轮循环发送上一轮预拷贝过程中被VM写过的脏页内存dirty pages,直到时机成熟,预拷贝循环结束,进入停机拷贝阶段。此时,源主机被挂起,不再有内存更新。最后一轮循环中的脏页被传输至目的主机VM。预拷贝机制极大地减少了停机拷贝阶段需要传输的内存数据量,从而将停机时间大大缩小。
然而,对于更新速度非常快的内存部分,每次循环过程都会变脏,需要重复pre-copy,同时也导致循环次数非常多,迁移的时间变长。针对这种情况,KVM虚拟机建立了三个原则:集中原则,一个循环内的dirty pages小于等于50页;不扩散原则,一个循环内传输的dirty pages少于新产生的dirty pages;有限循环原则,循环次数必须少于30。在实现上,就是采取了以下措施:
有限循环:循环次数和效果受到控制,对每轮pre-copy的效果进行计算,若pre-copy对于减少不一致内存数量的效果不显著,或者循环次数超过了上限,循环将中止,进入停机拷贝阶段。
在被迁移VM的内核设置一个内存访问的监控模块。在内存pre-copy过程中,VM的一个进程在一个被调度运行的期间被限制最多执行40次内存写操作。这个措施直接限制了pre-copy过程中内存变脏的速度,其代价是对VM上的进程运行进行了一定的限制。
一个优秀的迁移工具,目标是最小化整体迁移的时间和停机时间,并且将迁移对于被迁移主机上运行服务的性能造成的影响降至最低。当然,这几个因素互相影响,实施者需要根据迁移针对的应用的需求在其中进行衡量,选用合适的工具软件。虚拟机迁移的性能指标包括以下三个方面:
整体迁移时间:从源主机开始迁移到迁移结束的时间;
停机时间:迁移过程中,源主机、目的主机同时不可用的时间;
对应用程序的性能影响:迁移对于被迁移主机上运行服务性能的影响程度。
现有的基于KVM的虚拟机间迁移存在以下问题:
(1)第一轮循环复制内存镜像到目标服务器的时间是不可控的,或者是未知的;
(2)dirty pages的传输操作有些是冗余的、重复的,导致了迁移时间的延长。
发明内容
本公开鉴于以上问题中的至少一个提出了新的技术方案。
本公开在其一个方面提供了一种基于KVM的虚拟机间在线迁移方法,其显著降低了整机迁移时间。
本公开在其另一方面提供了一种基于KVM的虚拟机间在线迁移方法,其显著降低了整机迁移时间。
根据本公开,提供一种基于KVM的虚拟机间在线迁移方法,包括:
接收虚拟机迁移指令,在目的物理机上创建目的虚拟机,目的虚拟机的内存大小与源物理机上的源虚拟机的内存大小相同;
检测源物理机至目的物理机的网络传输速度;
根据检测出的网络传输速度与源虚拟机的内存大小对源虚拟机的内存进行分片,并在每个分片上设置传输标记位;
对各个分片进行传输,并在传输过程中实时监控源虚拟机的内存变化;
响应于源虚拟机内存的变化,根据各个影子页表中虚拟地址与物理地址的映射关系判断内存变化的位置所对应的影子页表是否已完成源虚拟机至目的虚拟机的传输任务;
如果未完成传输任务,则在源虚拟机中利用内存变化的位置所对应的影子页表替换待传输的具有相同页表标识的影子页表;
如果已完成传输任务,则将内存变化的位置对应的影子页表作为脏数据添加到传输队列的尾部,以在目的虚拟机中进行脏数据与已传输的具有相同页表标识的影子页表的合并;
判断源虚拟机实时产生的脏数据的数量是否小于设定阈值,如小于,则完成源虚拟机内存至目的虚拟机内存的预拷贝。
在本公开的一些实施例中,结合源虚拟机中每个影子页表的大小对源虚拟机的内存进行分片。
在本公开的一些实施例中,该方法还包括:
在一个分片已完成自源虚拟机至目的虚拟机的传输任务后,在该分片的传输标记位上标记已传输,否则标记未传输。
在本公开的一些实施例中,该方法还包括:
根据检测出的网络传输速度与源虚拟机的内存大小预估出内存迁移所需要的时间。
在本公开的一些实施例中,该方法还包括:
如果内存变化的位置对应的影子页表既在待传输的脏数据中又在待传输的分片中,则将内存变化的位置对应的影子页表分别与具有相同页表标识的待传输脏数据与待传输分片进行合并。
在本公开的一些实施例中,该方法还包括:
如果内存变化的位置对应的影子页表既在已传输的脏数据中又在已传输的分片中,则将内存变化的位置对应的影子页表作为新的脏数据添加到传输队列的尾部。
根据本公开,还提供了一种基于KVM的虚拟机间在线迁移装置,包括:
指令接收单元,用于接收虚拟机迁移指令,在目的物理机上创建目的虚拟机,目的虚拟机的内存大小与源物理机上的源虚拟机的内存大小相同;
网速检测单元,用于检测源物理机至目的物理机的网络传输速度;
内存分片单元,用于根据检测出的网络传输速度与源虚拟机的内存大小对源虚拟机的内存进行分片,并在每个分片上设置传输标记位;
分片传输单元,用于对各个分片和由源虚拟机内存变化引起的脏数据进行传输;
内存监控单元,用于在传输过程中实时监控源虚拟机的内存变化;
传输判断单元,用于响应于源虚拟机内存的变化,根据各个影子页表中虚拟地址与物理地址的映射关系判断内存变化的位置所对应的影子页表是否已完成源虚拟机至目的虚拟机的传输任务,如果未完成传输任务,则在源虚拟机中利用内存变化的位置所对应的影子页表替换待传输的具有相同页表标识的影子页表,如果已完成传输任务,则将内存变化的位置对应的影子页表作为脏数据添加到传输队列的尾部,以在目的虚拟机中进行脏数据与已传输的具有相同页表标识的影子页表的合并;
终止判断单元,用于判断源虚拟机实时产生的脏数据的数量是否小于设定阈值,如小于,则完成源虚拟机内存至目的虚拟机内存的预拷贝。
在本公开的一些实施例中,内存分片单元还结合源虚拟机中每个影子页表的大小对源虚拟机的内存进行分片。
在本公开的一些实施例中,该装置还包括:
传输标记单元,用于在一个分片已完成自源虚拟机至目的虚拟机的传输任务后,在该分片的传输标记位上标记已传输,否则标记未传输。
在本公开的一些实施例中,该装置还包括:
迁移时间预估单元,用于根据检测出的网络传输速度与源虚拟机的内存大小预估出内存迁移所需要的时间。
在本公开的一些实施例中,如果内存变化的位置对应的影子页表既在待传输的脏数据中又在待传输的分片中,则传输判断单元将内存变化的位置对应的影子页表分别与具有相同页表标识的待传输脏数据与待传输分片进行合并。
在本公开的一些实施例中,如果内存变化的位置对应的影子页表既在已传输的脏数据中又在已传输的分片中,则传输判断单元将内存变化的位置对应的影子页表作为新的脏数据添加到传输队列的尾部。
在本公开的技术方案中,由于对源虚拟机的内存进行了分片,在内存中影子页表未传输前如果发生了变化,则直接在源虚拟机本地对影子页表进行更新,如果在内存中影子页表已传输后发生变化,则将变化的影子页表作为脏数据进行传输,再在目的虚拟机端利用脏数据覆盖已传输的影子页表。这样由于减少了对同一影子页表的中间数据的冗余传输,在降低了网络负载的同时,显著减少了整机的在线迁移时间。
附图说明
此处所说明的附图用来提供对本公开的进一步理解,构成本申请的一部分。在附图中:
图1是本公开中客户机物理地址与宿主机虚拟地址的映射关系的一个实例示意图。
图2是客户机虚拟地址到宿主机物理地址的转换示意图。
图3是本公开一个影子页表的实例的示意图。
图4是本公开一个实施例的基于KVM的虚拟机间在线迁移方法的流程示意图。
图5是本公开内存在线迁移的一个实例的示意图。
图6是本公开的一个脏数据处理的流程示意图。
图7是本公开一个实施例的基于KVM的虚拟机间在线迁移装置的结构示意图。
图8是本公开另一实施例的基于KVM的虚拟机间在线迁移装置的结构示意图。
图9是本公开另一实施例的基于KVM的虚拟机间在线迁移装置的结构示意图。
具体实施方式
下面将参照附图描述本公开。要注意的是,以下的描述在本质上仅是解释性和示例性的,决不作为对本公开及其应用或使用的任何限制。除非另外特别说明,否则,在实施例中阐述的部件和步骤的相对布置以及数字表达式和数值并不限制本公开的范围。另外,本领域技术人员已知的技术、方法和装置可能不被详细讨论,但在适当的情况下意在成为说明书的一部分。
随着开源产品稳定性的不断提高,开源产品的商用化越来越普遍,KVM就是一款基于Linux的开源虚拟化解决方案,因为它与Linux内核的紧密联系而越来越受到虚拟化服务提供商的重视,然而通过对KVM的学习和了解,发明人发现了它在设计方面的一些不足和需要改进的地方。
在虚拟机在线迁移过程中,如果需要迁移的虚拟机的内存较大,或者虚拟机需要频繁读写而不断生成脏数据(其中,脏数据即在执行迁移操作后由内存变化而生成的数据),均会导致整机迁移时间过长,迁移过程的不可控,用户可能不知道在线迁移需要等待多久,同时因为KVM在数据迁移时限制了VM进程的读写次数,降低了服务质量,在通过网络迁移时,如果不了解网络状况,很难监控整个迁移过程。
本公开下述实施例通过分片的方式使得在线迁移变得可控,同时高效使用预拷贝的镜像文件减少了数据的重复传输,降低了网络负载,减少了整机迁移时间,在不降低读写次数的情况下,有效的提高了服务质量。
为了实现内存虚拟化,让客户机(即,虚拟机)使用一个隔离的、从零开始且具有连续的内存空间,KVM引入了一层新的地址空间,即,GPA(Guest Physical Address,客户机物理地址),这个地址空间并不是真正的物理地址空间,它只是宿主机虚拟地址空间在客户机地址空间的一个映射。对客户机来说,客户机物理地址空间都是从零开始的连续地址空间,但对于宿主机来说,客户机的物理地址空间并不一定是连续的,客户机物理地址空间有可能映射在若干个不连续的宿主机地址区间,如图1所示。
由于客户机物理地址不能直接用于宿主机物理MMU(Memory Management Unit,内存管理单元)进行寻址,所以需要把GPA转换成HVA(Host Virtual Address,宿主机虚拟地址),为此,KVM用一个kvm_memory_slot数据结构来记录每一个地址区间的映射关系,此数据结构包含了对应此映射区间的起始GFN(Guest Frame Number,客户机页帧号),映射的内存页数目以及起始宿主机虚拟地址。于是,KVM就可以实现对GPA到HVA之间的转换,也即首先根据GPA找到对应的映射区间,然后根据此GPA在此映射区间的偏移量就可以得到其对应的HVA。进而再通过宿主机的页表也可实现GPA到HPA(Host Physical Address,宿主机物理地址)之间的转换。
实现内存虚拟化,最主要的是实现GVA(Guest Virtual Address,客户机虚拟地址)到HPA之间的转换。根据上述GPA到HPA之间的转换以及客户机页表,即可实现GVA空间到HPA。显然通过这种映射方式,客户机的每次内存访问都需要KVM介入,并由软件进行多次地址转换,其效率是非常低的。
因此,为了提高GVA到HPA转换的效率,KVM提供了两种实现方式来进行GVA到HPA之间的直接转换。其中的一种方式是基于纯软件的实现方式,也即通过影子页表(ShadowPage Table)来实现GVA到HPA之间的直接转换。
由于宿主机MMU不能直接装载客户机的页表来进行内存访问,所以当客户机访问宿主机物理内存时,需要经过多次地址转换。也即,首先根据客户机页表把GVA转换成GPA,然后再通过GPA到HVA之间的映射转换成HVA,最后再根据宿主机页表把HVA转换成HPA。而通过影子页表,则可以实现GVA到HPA的直接转换,如图2所示。
图3是本公开一个影子页表的实例的示意图。
如图3所示,影子页表简化了地址转换过程,实现了GVA空间到HPA空间的直接映射。但是,由于客户机中每个进程都有自己的虚拟地址空间,所以KVM需要为客户机中的每个进程维护一套相应的影子页表。在客户机访问内存时,真正被装入宿主机MMU的是客户机当前页表所对应的影子页表,从而实现了从GVA到HPA的直接转换。而且,在TLB(Translation Lookaside buffer,页表缓冲)和CPU缓存上缓存的是来自影子页表中GVA和HPA之间的映射,也因此提高了缓存的效率。
本公开下述实施例中有效地利用了KVM提供的影子页表机制,通过对GVA与HPA的转换获取存储宿主机上的实际数据。
图4是本公开一个实施例的基于KVM的虚拟机间在线迁移方法的流程示意图。
如图4所示,该实施例可以包括以下步骤:
S402,接收虚拟机迁移指令,在目的物理机上创建目的虚拟机,且目的虚拟机的内存大小与源物理机上的源虚拟机的内存大小相同。
S404,检测源物理机至目的物理机的网络传输速度,以根据该网络传输速度对源虚拟机内存进行分片;
其中,可以选择网络传输速度较高的时间段来进行虚拟机的迁移。例如,一般凌晨前使用用户较少,所以此时网速最高,一方面由于使用用户少,最大程度减少了对用户的影响,另一方面,由于网速较高,因此,降低了虚拟机的在线迁移时间。
S406,根据检测出的网络传输速度与源虚拟机的内存大小对源虚拟机的内存进行分片,并在每个分片上设置传输标记位;
例如,可以根据检查出的网络传输速度以1秒为一个单位对源虚拟机的内存进行分片,当然1秒仅是举例说明,可以根据传输速度确定分片的大小。如果传输速度较高,则可以进行较大的分片,以减少传输冗余,如果传输速度较低,可以进行较小的分片,以防止由于传输失败而重传造成传输效率的降低。
其中,分片中的内容为各个进程的影子页表,传输标记位用于标识该分片是否已自源虚拟机传输至目的虚拟机。
S408,对各个分片进行传输,并在传输过程中实时监控源虚拟机的内存变化;
由于本公开实现的是在线迁移,因此在源虚拟机向目的虚拟机进行内存迁移时源虚拟机一直处于运行状态,因此,其内存可能会更新,所以需要实时监控源虚拟机的内存变化。
S410,响应于源虚拟机内存的变化,根据各个影子页表中虚拟地址与物理地址的映射关系判断内存变化的位置所对应的影子页表是否已完成源虚拟机至目的虚拟机的传输任务;
由于内存变化最直接体现在物理地址对应的内存发生变化,因此,根据影子页表中的虚拟地址与物理地址的映射关系就可以判断出哪个影子页表发生了变化。
为了防止频繁传输由于内存更新而产生的脏数据,用户可以根据需求设置内存变化检测时间,以显著降低在线迁移时间。
S412,如果未完成传输任务,则在源虚拟机中利用内存变化的位置所对应的影子页表替换待传输的具有相同页表标识的影子页表;
具体地,由于分片也需要排队传输,如果在某个或某些分片尚未传输至目的虚拟机时,这些分片内的某个或某些影子页表已经发生了变化,则针对同一影子页表无需传输两份不同的数据,只需将变化的数据替换分片内未传输的具有相同页表标识的影子页表即可,这样,就避免了同一内存数据的重复传输。
S414,如果已完成传输任务,则将内存变化的位置对应的影子页表作为脏数据添加到传输队列的尾部,以在目的虚拟机中进行脏数据与已传输的具有相同页表标识的影子页表的合并;
具体地,如果某个影子页表已完成传输,但是又发生了变化,则需将该影子页表作为脏数据再传输给目的虚拟机,并在目的虚拟机侧对具有相同页表标识的影子页表进行数据的覆盖。
S416,判断源虚拟机实时产生的脏数据的数量是否小于设定阈值,如小于,则完成源虚拟机内存至目的虚拟机内存的预拷贝;
具体地,在源虚拟机实时产生的脏数据的数量较小的情况下表明当前源虚拟机与目的虚拟机的内存差异已非常小,可以启动目的虚拟机,或者进行短暂的停机拷贝后就可以启动目的虚拟机了。
在该实施例中,由于对源虚拟机的内存进行了分片,在内存中影子页表未传输前如果发生了变化,则直接在源虚拟机本地对影子页表进行更新,如果在内存中影子页表已传输后发生变化,则将变化的影子页表作为脏数据进行传输,再在目的虚拟机端利用脏数据覆盖已传输的影子页表。这样由于减少了对同一影子页表的中间数据的冗余传输,在降低了网络负载的同时,显著减少了整机的在线迁移时间。
进一步,在步骤S406中可以结合源虚拟机中每个影子页表的大小对源虚拟机的内存进行分片。
例如可以线根据网络传输速度与源虚拟机的内存大小对源虚拟机的内存进行粗略的分片,在进行粗略分片后,可以进一步考虑每个影子页表的大小,即,在分片大小基本相同的情况下,尽量将一个影子页表划分在一个分片内,这样在该影子页表产生脏数据的情况下也便于传输与覆盖。
在步骤S408中,在对各个分片进行传输的过程中,如果在一个分片已完成自源虚拟机至目的虚拟机的传输任务后,可以在该分片的传输标记位上标记已传输,否则标记未传输。基于传输标记可以确定当内存发生变化时是在源虚拟机本地进行数据的覆盖还是在目的虚拟机进行数据的覆盖。
在步骤S404检测出源物理机至目的物理机的网络传输速度后,还可以根据检测出的网络传输速度与源虚拟机的内存大小预估出内存迁移所需要的时间。同时,还可以将预估出的内存迁移时间告知用户,以使在线迁移处于用户可控状态。
进一步地,如果内存变化的位置对应的影子页表既在待传输的脏数据中又在待传输的分片中,则将内存变化的位置对应的影子页表分别与具有相同页表标识的待传输脏数据与待传输分片进行合并。
例如,如果内存变化的位置对应的影子页表为多个,并且这些影子页表分布在不同的分片中,有些影子页表所在的分片尚未传输,而有些影子页表所在的分片已传输且这些影子页表还有待传输的脏数据,为了尽量减少数据的重复传输,则可以在源虚拟机侧进行数据的更新与替换,即,利用这些变化的影子页表替换相应的未传输的分片以及待传输的脏数据。
进一步地,如果内存变化的位置对应的影子页表既在已传输的脏数据中又在已传输的分片中,则将内存变化的位置对应的影子页表作为新的脏数据添加到传输队列的尾部。
例如,如果内存变化的位置对应的影子页表为多个,并且这些影子页表分布在不同的分片中,但是与前述例子不同的是,这些影子页表所在的分片或对应的脏数据均已传输至目的虚拟机,则需将这些变化的影子页表作为脏数据排在传输队尾,待到目的虚拟机侧再进行数据的替换与更新。
概括地说,本公开的虚拟机在线迁移过程可以包括以下几个部分:初始化、分片、传输、数据合并以及数据一致性比对。
假设将要迁移的虚拟机用V1(即,源虚拟机)表示,V1的宿主机用C1(即,源物理机)表示,要迁移到的目的虚拟机用V2表示,要迁移到的目的物理机用C2表示。
第一步:发出迁移指令,进行初始化操作。
在用户发出迁移指令之后,在C2机器上创建一个虚拟机V2,预留出与V1一样大小的内存空间(具体对于虚拟机内存的管理由KVM来完成,虚拟机V1与V2的虚拟机地址空间肯定都是连续的,具体指向的宿主机C1和C2的物理地址是否连续不在本公开的讨论范围内),同时分多个时段测量C1至C2的网络传输速度,找出最高的网络传输速度t0以及该速度对应的时段,后续可以在该时段进行虚拟机的在线迁移。
第二步:分片。
按照网络传输速度t0和V1内存大小将V1实际使用的内存空间划分为V1/t0块,可以按照几乎一秒一块的速度来设置每个分片的大小,并预估出内存迁移实际需要的时间,反馈给用户。同时在每个分片上设置标记位,用来记录该分片是否已经完成了传输任务。
第三步:传输。
在传输的过程中,实时地监控V1内存的变化情况,为每一块传输成功的分片设置传输成功标记,同时V1内存如果发生变化,则判断内存变化的位置的分片是否已完成传输任务,如果变化的位置对应的分片尚未传输,则锁定关联的分片,进行数据替换;如果对应的分片已传输完成,则将内存变化的部分信息作为dirty-page脏数据页添加到传输信息的最后位置;如果内存变化对应的数据既在脏数据页中又在分片中,则合并尚未传输的分片和脏数据页,将对应已传输的分片和脏数据页中的信息生成新的脏数据页保存在传输列表的后面,等待传输。
第四步:数据合并。
数据合并主要指从V1中传输到V2内存中的脏数据与V2内存中原始数据(即之前已传输的分片)的合并,即,脏数据覆盖V2中的原始数据。
第五步:数据一致性比对。
该步骤主要完成的工作是比较V1内存与V2内存中数据的一致性,当V1内存数据与V2内存数据差别小于设定的阈值时,表示V1与V2内存数据一致,此时将C1中对应的存储解锁,同时在目标系统中锁定,挂起V1启动V2,同时将网络资源和存储资源相连接,保证服务的平滑迁移,如图5所示。
举例说明,如果内存为8G,当脏数据为80B时可以认为V1与V2内存一致。
在图5中示出了源物理机与目的物理机共享存储和网络资源的情况。需要指出是,本公开的技术方案并不限于此,其同样可以应用于源物理机与目的物理机分布使用独立的存储设备的情况。
再参见图5,其示出了本公开中内存在线迁移的流程,具体包括:
第一步,执行在线迁移指令,测试网络速度,将内存按照网络速度与影子页表的大小进行分片,同时创建一个传输日志表,用来维护已传输的数据包和影子页表的对应关系。
其中,影子页表的实现如图3所示,将客户机内存中的影子页表的实际数据分片使用传输表来维护每个页表与分片(即,传输包)的对应关系。例如,最优传输速度是100M/s,内存中影子页表有P1、P2、P3、…,按照100M大小将影子页表分成若干个不同的数据包(即,分片),影子页表对应的宿主机数据空间大小可能不一样,因此不能保证每个数据包都是等大的,在100M左右即可。同时创建传输日志表记录各个数据包与影子页表的对应关系,在数据的传输过程中,实时的维护这张日志传输表,因为每个进程有独立的影子页表,因此内存中的影子页表对应的宿主机虚拟空间是连续的。同时可以按照1秒(但并不限于1秒)为间隔实时监控虚拟机V1中的内存变化情况,调用KVM提供的GET_DIRTY_LOG接口获取客户机内存变化的脏数据,判断脏数据对应的影子页表是否已传输,如果对应的分片尚未传输,则对该分片或关联的几个分片进行修改,否则生成脏数据包,等待传输,具体流程如图6所示。当内存由状态0变化为状态1时,内存页表2、页表6和页表7发生了变化,其中,页表2对应的分片1已经传输到了目的虚拟机中,则页表2作为脏页数据添加到分片最后,页表6对应的分片2尚未传输,则直接替换页表6,页表7已从内存中移除,同时新增了页表8,则将页表8也作为脏数据和页表2放在同一个脏数据包中。
第二步,进行内存数据传输,判断分片是否已传输完成,对未传输的分片进行传输,对传输成功的分片进行标记,分片传输完成之后开始传输脏数据信息。
第三步,对虚拟机V1和V2中的数据进行一致性比较,当差异小于预定的阈值时,则数据在线迁移工作结束。
第四步,切换服务器地址,将存储资源和网络资源从C1中解锁,锁定到C2中。
本领域普通技术人员可以理解,实现上述方法实施例的全部和部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算设备可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤,而前述的存储介质可以包括ROM、RAM、磁碟和光盘等各种可以存储程序代码的介质。
图7是本公开一个实施例的基于KVM的虚拟机间在线迁移装置的结构示意图。
如图7所示,该实施例中的装置70可以包括指令接收单元702、网速检测单元704、内存分片单元706、分片传输单元708、内存监控单元710、传输判断单元712和终止判断单元714。其中,
指令接收单元702,用于接收虚拟机迁移指令,在目的物理机上创建目的虚拟机,目的虚拟机的内存大小与源物理机上的源虚拟机的内存大小相同;
网速检测单元704,用于检测源物理机至目的物理机的网络传输速度;
内存分片单元706,用于根据检测出的网络传输速度与源虚拟机的内存大小对源虚拟机的内存进行分片,并在每个分片上设置传输标记位;
分片传输单元708,用于对各个分片和由源虚拟机内存变化引起的脏数据进行传输;
内存监控单元710,用于在传输过程中实时监控源虚拟机的内存变化;
传输判断单元712,用于响应于源虚拟机内存的变化,根据各个影子页表中虚拟地址与物理地址的映射关系判断内存变化的位置所对应的影子页表是否已完成源虚拟机至目的虚拟机的传输任务,如果未完成传输任务,则在源虚拟机中利用内存变化的位置所对应的影子页表替换待传输的具有相同页表标识的影子页表,如果已完成传输任务,则将内存变化的位置对应的影子页表作为脏数据添加到传输队列的尾部,以在目的虚拟机中进行脏数据与已传输的具有相同页表标识的影子页表的合并;
终止判断单元714,用于判断源虚拟机实时产生的脏数据的数量是否小于设定阈值,如小于,则完成源虚拟机内存至目的虚拟机内存的预拷贝。
在该实施例中,由于对源虚拟机的内存进行了分片,在内存中影子页表未传输前如果发生了变化,则直接在源虚拟机本地对影子页表进行更新,如果在内存中影子页表已传输后发生变化,则将变化的影子页表作为脏数据进行传输,再在目的虚拟机端利用脏数据覆盖已传输的影子页表。这样由于减少了对同一影子页表的中间数据的冗余传输,在降低了网络负载的同时,显著减少了整机的在线迁移时间。
进一步地,内存分片单元还结合源虚拟机中每个影子页表的大小对源虚拟机的内存进行分片。
图8是本公开另一实施例的基于KVM的虚拟机间在线迁移装置的结构示意图。
如图8所示,与图7中的实施例相比,该实施例中的装置80还包括:
传输标记单元802,用于在一个分片已完成自源虚拟机至目的虚拟机的传输任务后,在该分片的传输标记位上标记已传输,否则标记未传输。
图9是本公开另一实施例的基于KVM的虚拟机间在线迁移装置的结构示意图。
如图9所示,与图7中的实施例相比,该实施例中的装置90还包括:
迁移时间预估单元902,用于根据检测出的网络传输速度与源虚拟机的内存大小预估出内存迁移所需要的时间。
进一步地,如果内存变化的位置对应的影子页表既在待传输的脏数据中又在待传输的分片中,则传输判断单元将内存变化的位置对应的影子页表分别与具有相同页表标识的待传输脏数据与待传输分片进行合并。
进一步地,如果内存变化的位置对应的影子页表既在已传输的脏数据中又在已传输的分片中,则传输判断单元将内存变化的位置对应的影子页表作为新的脏数据添加到传输队列的尾部。
本说明书中各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同和相似的部分可以相互参见。对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处可以参见方法实施例部分的说明。
相对现有KVM迁移技术,本公开具有以下优点:
(1)增加了迁移过程的可控性。现有的KVM迁移过程对用户来说是不可知的,用户在执行KVM的迁移过程时并不知道具体迁移过程需要多久,本公开通过对KVM底层迁移技术的了解,将内存数据进行分片,预估了迁移的时间和过程,使得用户在使用过程中能很好地掌控整个迁移过程。
(2)减少了迁移过程中冗余数据的传输。现有的KVM迁移过程对于内存中脏数据的传输方式是对所有生成的脏数据都传输到目的虚拟机的内存中,然后进行合并,而事实上有很多在源虚拟机中脏数据对应的内存地址的数据可能尚未传输到目的机虚拟机中,就是说这些脏数据对应的内存数据在尚未传输就已经过期,这些数据传输到目的虚拟机中则是多余的,对于这部分数据,现有的KVM方式是并不做任何处理的。而本公开则对这部分尚未传输就已经过期的数据在传输之前就进行了更新,最大限度的保证了不做冗余数据的传输工作。
(3)不降低传输虚拟机的性能。现有的KVM在执行迁移任务时,会通过降低执行迁移任务的虚拟机的服务次数来减少对内存的修改,从而保证迁移虚拟机和目的虚拟机内存最大限度的一致性,而本公开则使用阈值的方式来保证迁移虚拟机和目的虚拟机内存的一致,即在不降低迁移虚拟机服务次数的情况下允许阈值范围内的内存不一致,当满足阈值范围内的内存一致时,则完成在线迁移工作。
(4)减少迁移时间。在可控的情况下,减少了冗余数据的传输,在降低了目的虚拟机合并时间的同时,也降低了数据在网络中的传输时间,从而可以有效地降低虚拟机迁移的时间。
虽然已参照示例性实施例描述了本公开,但应理解,本公开不限于上述的示例性实施例。对于本领域技术人员显然的是,可以在不背离本公开的范围和精神的条件下修改上述的示例性实施例。所附的权利要求的范围应被赋予最宽的解释,以包含所有这样的修改以及等同的结构和功能。
Claims (12)
1.一种基于KVM的虚拟机间在线迁移方法,其特征在于,包括:
接收虚拟机迁移指令,在目的物理机上创建目的虚拟机,所述目的虚拟机的内存大小与源物理机上的源虚拟机的内存大小相同;
检测所述源物理机至所述目的物理机的网络传输速度;
根据检测出的网络传输速度与所述源虚拟机的内存大小对所述源虚拟机的内存进行分片,并在每个分片上设置传输标记位,所述分片中的内容为各进程的影子页表;
对各个分片进行传输,并在传输过程中实时监控所述源虚拟机的内存变化;
响应于所述源虚拟机内存的变化,根据各个影子页表中虚拟地址与物理地址的映射关系判断内存变化的位置所对应的影子页表是否已完成源虚拟机至目的虚拟机的传输任务;
如果未完成传输任务,则在所述源虚拟机中的各分片内利用内存变化的位置所对应的影子页表替换相应的分片内待传输的具有相同页表标识的影子页表;
如果已完成传输任务,则将内存变化的位置对应的影子页表作为脏数据添加到传输队列的尾部,以在所述目的虚拟机中进行脏数据与已传输的具有相同页表标识的影子页表的合并;
判断所述源虚拟机实时产生的脏数据的数量是否小于设定阈值,如小于,则完成所述源虚拟机内存至所述目的虚拟机内存的预拷贝。
2.根据权利要求1所述的基于KVM的虚拟机间在线迁移方法,其特征在于,结合所述源虚拟机中每个影子页表的大小对所述源虚拟机的内存进行分片。
3.根据权利要求1或2所述的基于KVM的虚拟机间在线迁移方法,其特征在于,所述方法还包括:
在一个分片已完成自所述源虚拟机至所述目的虚拟机的传输任务后,在该分片的传输标记位上标记已传输,否则标记未传输。
4.根据权利要求1或2所述的基于KVM的虚拟机间在线迁移方法,其特征在于,所述方法还包括:
根据检测出的网络传输速度与所述源虚拟机的内存大小预估出内存迁移所需要的时间。
5.根据权利要求1或2所述的基于KVM的虚拟机间在线迁移方法,其特征在于,所述方法还包括:
如果内存变化的位置对应的影子页表既在待传输的脏数据中又在待传输的分片中,则将内存变化的位置对应的影子页表分别与具有相同页表标识的待传输脏数据与待传输分片进行合并。
6.根据权利要求1或2所述的基于KVM的虚拟机间在线迁移方法,其特征在于,所述方法还包括:
如果内存变化的位置对应的影子页表既在已传输的脏数据中又在已传输的分片中,则将内存变化的位置对应的影子页表作为新的脏数据添加到传输队列的尾部。
7.一种基于KVM的虚拟机间在线迁移装置,其特征在于,包括:
指令接收单元,用于接收虚拟机迁移指令,在目的物理机上创建目的虚拟机,所述目的虚拟机的内存大小与源物理机上的源虚拟机的内存大小相同;
网速检测单元,用于检测所述源物理机至所述目的物理机的网络传输速度;
内存分片单元,用于根据检测出的网络传输速度与所述源虚拟机的内存大小对所述源虚拟机的内存进行分片,并在每个分片上设置传输标记位,所述分片中的内容为各进程的影子页表;
分片传输单元,用于对各个分片和由所述源虚拟机内存变化引起的脏数据进行传输;
内存监控单元,用于在传输过程中实时监控所述源虚拟机的内存变化;
传输判断单元,用于响应于所述源虚拟机内存的变化,根据各个影子页表中虚拟地址与物理地址的映射关系判断内存变化的位置所对应的影子页表是否已完成源虚拟机至目的虚拟机的传输任务,如果未完成传输任务,则在所述源虚拟机中的各分片内利用内存变化的位置所对应的影子页表替换相应的分片内待传输的具有相同页表标识的影子页表,如果已完成传输任务,则将内存变化的位置对应的影子页表作为脏数据添加到传输队列的尾部,以在所述目的虚拟机中进行脏数据与已传输的具有相同页表标识的影子页表的合并;
终止判断单元,用于判断所述源虚拟机实时产生的脏数据的数量是否小于设定阈值,如小于,则完成所述源虚拟机内存至所述目的虚拟机内存的预拷贝。
8.根据权利要求7所述的基于KVM的虚拟机间在线迁移装置,其特征在于,所述内存分片单元还结合所述源虚拟机中每个影子页表的大小对所述源虚拟机的内存进行分片。
9.根据权利要求7或8所述的基于KVM的虚拟机间在线迁移装置,其特征在于,所述装置还包括:
传输标记单元,用于在一个分片已完成自所述源虚拟机至所述目的虚拟机的传输任务后,在该分片的传输标记位上标记已传输,否则标记未传输。
10.根据权利要求7或8所述的基于KVM的虚拟机间在线迁移装置,其特征在于,所述装置还包括:
迁移时间预估单元,用于根据检测出的网络传输速度与所述源虚拟机的内存大小预估出内存迁移所需要的时间。
11.根据权利要求7或8所述的基于KVM的虚拟机间在线迁移装置,其特征在于,如果内存变化的位置对应的影子页表既在待传输的脏数据中又在待传输的分片中,则所述传输判断单元将内存变化的位置对应的影子页表分别与具有相同页表标识的待传输脏数据与待传输分片进行合并。
12.根据权利要求7或8所述的基于KVM的虚拟机间在线迁移装置,其特征在于,如果内存变化的位置对应的影子页表既在已传输的脏数据中又在已传输的分片中,则所述传输判断单元将内存变化的位置对应的影子页表作为新的脏数据添加到传输队列的尾部。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310529243.XA CN104598303B (zh) | 2013-10-31 | 2013-10-31 | 基于kvm的虚拟机间在线迁移方法与装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310529243.XA CN104598303B (zh) | 2013-10-31 | 2013-10-31 | 基于kvm的虚拟机间在线迁移方法与装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104598303A CN104598303A (zh) | 2015-05-06 |
CN104598303B true CN104598303B (zh) | 2018-04-10 |
Family
ID=53124120
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310529243.XA Active CN104598303B (zh) | 2013-10-31 | 2013-10-31 | 基于kvm的虚拟机间在线迁移方法与装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104598303B (zh) |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9936019B2 (en) | 2016-03-16 | 2018-04-03 | Google Llc | Efficient live-migration of remotely accessed data |
CN105893114A (zh) * | 2016-04-05 | 2016-08-24 | 浪潮电子信息产业股份有限公司 | 一种虚拟机迁移的方法、目的宿主机和源宿主机 |
CN105978952B (zh) * | 2016-04-28 | 2019-04-30 | 中国科学院计算技术研究所 | 一种基于网络功能虚拟化场景的流迁移方法及系统 |
CN107342972B (zh) * | 2016-05-03 | 2020-09-08 | 中国移动通信集团辽宁有限公司 | 一种实现远程访问的方法及装置 |
CN106201653A (zh) * | 2016-06-30 | 2016-12-07 | 国云科技股份有限公司 | 一种vmware虚拟机转kvm虚拟机的方法 |
CN106909442A (zh) * | 2017-02-28 | 2017-06-30 | 郑州云海信息技术有限公司 | 一种Linux虚拟机迁移方法及系统 |
CN108491716B (zh) * | 2018-01-29 | 2021-11-12 | 中国电子科技网络信息安全有限公司 | 一种基于物理页地址分析的虚拟机内存隔离性检测方法 |
CN110347483B (zh) | 2018-04-08 | 2021-05-11 | 中兴通讯股份有限公司 | 物理机到虚拟机迁移方法、装置及存储介质 |
CN109639811B (zh) * | 2018-12-21 | 2022-01-25 | 北京金山云网络技术有限公司 | 数据传输方法、数据存储方法、装置、服务器及存储介质 |
CN110336894B (zh) * | 2019-06-24 | 2021-03-30 | 中国科学院软件研究所 | 一种虚拟机用户空间地址到宿主机内核空间地址转换方法 |
CN112328354A (zh) * | 2019-08-05 | 2021-02-05 | 阿里巴巴集团控股有限公司 | 虚拟机热迁移方法、装置、电子设备及计算机存储介质 |
WO2021032211A1 (zh) * | 2019-08-22 | 2021-02-25 | 华为技术有限公司 | 一种虚拟机迁移方法以及设备 |
CN111722909A (zh) * | 2020-06-12 | 2020-09-29 | 浪潮电子信息产业股份有限公司 | 一种虚拟机迁移方法、系统、设备及存储介质 |
CN113296802B (zh) * | 2020-07-22 | 2022-05-06 | 阿里巴巴集团控股有限公司 | 虚拟机热升级方法、主机设备及存储介质 |
CN113254147B (zh) * | 2021-04-29 | 2024-01-16 | 中国科学院信息工程研究所 | 一种基于物理地址陷入的虚拟机行为监控方法及系统 |
CN117389685B (zh) * | 2023-10-19 | 2024-03-19 | 北京云豹创芯智能科技有限公司 | 虚拟机热迁移标脏方法及其装置、后端设备、芯片 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101398768A (zh) * | 2008-10-28 | 2009-04-01 | 北京航空航天大学 | 一种分布式虚拟机监视器系统的构建方法 |
US8307192B2 (en) * | 2008-06-11 | 2012-11-06 | Vmware, Inc. | System and method for improving memory locality of virtual machines |
US8468289B2 (en) * | 2010-10-22 | 2013-06-18 | International Business Machines Corporation | Dynamic memory affinity reallocation after partition migration |
-
2013
- 2013-10-31 CN CN201310529243.XA patent/CN104598303B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8307192B2 (en) * | 2008-06-11 | 2012-11-06 | Vmware, Inc. | System and method for improving memory locality of virtual machines |
CN101398768A (zh) * | 2008-10-28 | 2009-04-01 | 北京航空航天大学 | 一种分布式虚拟机监视器系统的构建方法 |
US8468289B2 (en) * | 2010-10-22 | 2013-06-18 | International Business Machines Corporation | Dynamic memory affinity reallocation after partition migration |
Non-Patent Citations (2)
Title |
---|
虚拟机Xen及其实时迁移技术研究;孙昱;《中国优秀硕士学位论文全文数据库》;20080715(第7期);第29-51页 * |
虚拟机在线迁移性能优化关键技术研究;刘海坤;《中国博士学位论文全文数据库》;20120915(第9期);第57-59页 * |
Also Published As
Publication number | Publication date |
---|---|
CN104598303A (zh) | 2015-05-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104598303B (zh) | 基于kvm的虚拟机间在线迁移方法与装置 | |
EP3121731B1 (en) | Memory management method and device | |
CN102077188B (zh) | 用于虚拟化操作系统的直接存储器访问过滤器 | |
US9372726B2 (en) | Gang migration of virtual machines using cluster-wide deduplication | |
CA2810782C (en) | Managing memory across a network of cloned virtual machines | |
CN111095222A (zh) | 使用高速缓存一致性协议数据的基于高速缓存的追踪记录 | |
US20080040583A1 (en) | Digital Data Processing Apparatus Having Asymmetric Hardware Multithreading Support for Different Threads | |
CN102882983A (zh) | 一种云存储系统中提升并发访问性能的数据快速存储方法 | |
CN102136993B (zh) | 一种数据迁移的方法、装置和系统 | |
KR20180057639A (ko) | 선택적 리소스 이동을 이용하는 네트워크 결합 메모리 | |
CN109614276A (zh) | 故障处理方法、装置、分布式存储系统和存储介质 | |
CN105335306B (zh) | 一种内存控制方法和装置 | |
CN109656896A (zh) | 故障修复方法、装置及分布式存储系统和存储介质 | |
CN105446889B (zh) | 一种内存管理方法、装置以及内存控制器 | |
WO2023236397A1 (zh) | 密钥管理方法、密钥管理装置、密钥管理设备及存储介质 | |
CN104346284A (zh) | 一种内存管理方法及内存管理设备 | |
CN106021131A (zh) | 存储器管理 | |
US20190042454A1 (en) | Techniques to manage cache resource allocations for a processor cache | |
CN111124599B (zh) | 虚拟机内存数据迁移方法、装置、电子设备及存储介质 | |
CN101808141B (zh) | 一种基于虚拟化平台的宿主客户机协同换页的方法 | |
US11327781B2 (en) | Zero copy message reception for applications | |
US10341177B2 (en) | Parallel computing system and migration method | |
Hwang et al. | Hyperdealer: Reference-pattern-aware instant memory balancing for consolidated virtual machines | |
WO2017222689A1 (en) | Method, apparatus and system for performing matching operations in a computing system | |
CN104077171A (zh) | 调度虚拟机时的处理方法和设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20220124 Address after: 100007 room 205-32, floor 2, building 2, No. 1 and No. 3, qinglonghutong a, Dongcheng District, Beijing Patentee after: Tianyiyun Technology Co.,Ltd. Address before: No.31, Financial Street, Xicheng District, Beijing, 100033 Patentee before: CHINA TELECOM Corp.,Ltd. |