一种虚拟机热迁移预测方法、系统和计算机可读存储介质与流程

文档序号:25543245发布日期:2021-06-18 20:40
本发明涉及虚拟机
技术领域
:,尤其涉及一种虚拟机热迁移预测方法、系统和计算机可读存储介质。
背景技术
::随着虚拟化技术的不断发展,虚拟机(virtualmachine,简称vm)的应用也越来越广泛。实际应用中经常需要把虚拟机在宿主机之间进行热迁移,以实现宿主机上软件版本的升级,或者是优化资源利用率等。热迁移技术(livemigration)是将整个虚拟机的设备信息等运行状态完整保存下来,然后通过网络快速发送到对端宿主机上,并在对端宿主机上恢复虚拟机状态,恢复以后虚拟机能在对端宿主机上平滑运行。这其中最主要的状态就是内存数据。因为虚拟机内存数据信息在热迁移过程中是不断变化的,我们把这个在拷贝后数据又变化了的内存页称之为“内存脏页”。在热迁移算法中通过反复迭代拷贝把“内存脏页”传输到对端,直到最后剩下的脏页数量非常少的时候就暂停虚拟机的运行,一次性把剩余的脏页拷贝到对端。然而,虚拟机热迁移并非是完美的事物,它会导致虚拟机性能下降和抖动。如果虚拟机的业务非常繁忙、内存脏页产生的速度高于迭代传输的速度(迭代传输的速度主要受限于热迁移使用网络的带宽,以及同时使用该带宽的其他虚拟机),那么会导致虚拟机一直处于热迁移状态,无法迁移完成。如果虚拟机中运行着性能抖动敏感的业务(比如游戏业务、直播业务),长时间无法完成热迁移会导致虚拟机中运行的业务性能下降和抖动,最后甚至是迁移失败。如果能准确预测虚拟机能否成功热迁移则可以避免无效的迁移与抖动,或者另选时机去进行热迁移。中国发明专利cn202011415532.3公开了一种虚拟热迁移系统及其热迁移方法,根据设定时间段内待迁移虚拟机产生的脏页量、以及源物理机和目的物理机之间的网络带宽,预估能否在内存迭代拷贝的次数不超过预设阈值的情况下,将待迁移虚拟机从源物理机热迁移到目的物理机。但是,该方法需要将待迁移虚拟机的ept(extendedpagetables)或npt(nestedpagetables)页表设置为只读,通过在kvm中拦截虚拟机写内存操作来统计一段时间内虚拟机的脏页变化率。这种方案会导致虚拟机因为写内存而频繁陷出到kvm中,从而影响虚拟机中运行的业务,所以会导致虚拟机自身的性能下降与抖动。目前虚拟机热迁移采用的方案如下:宿主机操作系统内核kvm模块在热迁移启动的时候创建一个bitmap来记录虚拟机新产生的内存脏页的页框号,同时打开cpu的自动内存页标脏功能。cpu在打开自动标脏功能后会使用一个4k大小的内存缓存着新产生的脏页的页框号,我们称之为“脏页位置缓存”。缓存满了以后cpu会主动陷入在宿主机的kvm中把4k的“脏页位置缓存”同步到kvm的bitmap,然后清零“脏页位置缓存”,重新陷出到虚拟机中继续运行。因此当虚拟机中业务非常繁忙、内存变化非常快的时候会导致虚拟机频繁陷入到宿主机的kvm中进行同步,因此影响虚拟机自身业务的运行性能,这就导致了虚拟机的性能波动。技术实现要素:本发明为了克服以上技术的不足,提供了一种虚拟机热迁移预测方法、系统和计算机可读存储介质,能够准确预测虚拟机能否热迁移成功,且避免了虚拟机无效迁移和抖动。本发明的第一个方面提供了一种虚拟机热迁移预测方法,包括:s1、虚拟机新建内存脏页速率计算分析的线程;s2、测算预设时间内完成哈希值计算的内存页个数m;s3、计算并对比n×m~(n+1)×m范围内的每一个内存页的哈希值,其中,n=0,1,2,3……,直至完成虚拟机所有内存页的哈希值计算,从而得到虚拟机所有内存脏页的数量;s4、基于内存脏页的数量计算得到脏页速率,若脏页速率大于迁移网络带宽的预设比例,则不进行热迁移。进一步的,还包括根据虚拟机宿主机的内存类型确定计算内存页哈希值的哈希算法。根据内存类型来选择使用合适的哈希算法进行脏页速率计算,保证了内存页哈希值计算的效率,并且对虚拟机性能影响更小。进一步的,步骤s2具体包括:s21,调用哈希算法n次,统计消耗时间t,从而得到单次调用哈希算法的消耗时间为t/n;s22,基于预设时间t,得到预设时间t完成哈希值计算的内存页的个数m=t÷(t/n)。对当前虚拟机运行哈希算法的速度进行测算。进一步的,所述预设时间t小于等于1s。避免哈希计算时间过长导致测算不准确。进一步的,步骤s3具体包括:s31,计算n×m~(n+1)×m范围内的每一个内存页的哈希值,得到的第一结果保存在新建数组中;s32,再次计算n×m~(n+1)×m范围内的每一个内存页的哈希值,得到第二结果,并与第一结果对比;s33,统计n×m~(n+1)×m范围内哈希值不一样的内存脏页数量;s34,重复步骤s31-s33,直至遍历完成虚拟机的所有内存页,并得到虚拟机所有内存脏页的数量。进一步的,包括s5,再次执行步骤s1-s4预测虚拟机热迁移。等到业务不繁忙的情况下,再次预测是否进行虚拟机热迁移。进一步的,线程中基于命令获取宿主机的内存类型,从而选用计算内存页哈希值的哈希算法。进一步的,所述虚拟机提供qmeuqmp接口,用于接收开启或者关闭执行步骤s1-s4的命令,其中,所述命令至少包括哈希算法类型。本发明的第二个方面提供了一种虚拟机热迁移系统,包括执行虚拟机热迁移预测方法的虚拟机,用于运行所述虚拟机的宿主机,以及,虚拟机热迁移的目的宿主机。本发明的第三个方面提供了一种计算机可读存储介质,该计算机可读存储介质中存储有被编程或配置以执行虚拟机热迁移预测方法的计算机程序。本发明的有益效果是:1、能准确预测虚拟机能否成功热迁移从而避免虚拟机无效迁移与抖动,或者另选时机去进行热迁移;2、测算虚拟机脏页速率无需开启cpu对内存标脏或者是对ept页表项设置为只读,不会导致虚拟机频繁地陷出到kvm中影响虚拟机运行自身内部的业务,对虚拟机的性能波动较小;3、根据内存类型来选择使用合适的哈希算法进行脏页速率计算,保证了内存页哈希值计算的效率,进一步保证了较小的影响虚拟机性能。附图说明图1为本发明实施例方法流程示意图。具体实施方式首先对本发明中提到的一些缩略语及关键术语进行说明。宿主机用于运行虚拟机的物理服务器。页框号linux内核把内存按照4k大小作为一个页来管理,对每一个4k内存页按照从0开始的顺序进行编号,该编号就是页框号。一个用于模拟虚拟机硬件环境的软件。一个qemu进程就代表一个虚拟机,它保存着虚拟机的各种硬件信息,包括虚拟机的内存分布。kvm是linux内核中用于实现硬件虚拟化的模块,它可以提升qemu虚拟化的性能。哈希算法哈希算法可以将一段任意长度的字符串经过哈希计算转换为一个固定长度的数值。不同字符串计算出来的哈希值相同的概率非常非常低,所以可以通过比较两个字符串哈希结果是否一致来判断字符串是否一致。不同的哈希算法性能不一样。为了进一步理解本发明,下面结合实施例对本发明优选实施方案进行描述,但是应当理解,这些描述只是为进一步说明本发明的特征和优点,而不是对本发明权利要求的限制。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。下面结合附图1和具体实施例对本发明做进一步详细说明,本实施例所述的虚拟机热迁移预测方法具体包括如下:s1、虚拟机新建内存脏页速率计算分析的线程。在本发明的一个实施例中,虚拟机提供一个qemuqmp接口,用于接收开启或关闭虚拟机的“内存脏页速率采集”功能。该命令可以携带一些必要的参数,如哈希算法类型。哈希算法类型根据内存带宽来选用,如果宿主机使用ddr3内存则选用murmurhash算法来计算每个内存页的哈希值。该哈希算法最高速度有4gb/s,同时不至于消耗掉所有的内存带宽。如果内存使用的是ddr4则选用xxh32哈希算法,该算法可以达到10gb/s,增加了计算效率,同时避免了导致虚拟机中运行的业务性能下降和抖动。开启内存脏页速率采集功能后会新建一个线程,该线程用于采集、分析该虚拟机的脏页速率。在一些实施例中,在线程中可以通过dmidecode命令获取(dmidecode-tmemory|grep'type:ddr')。从而判断宿主机的物理内存类型,比如内存是ddr3,那选择使用murmurhash算法。s2、测算预设时间内完成哈希值计算的内存页个数m;为了避免每一轮哈希计算时间过长导致测算不准。每一轮哈希计算测算周期不超过一秒,在1秒之内选取一个预设时间t,计算t时间内采用哈希算法可以计算出哈希值的内存页个数m。s3、计算并对比n×m~(n+1)×m范围内的每一个内存页的哈希值,其中,n=0,1,2,3……,直至完成虚拟机所有内存页的哈希值计算,从而得到虚拟机所有内存脏页的数量。具体包括:s31,计算n×m~(n+1)×m范围内的每一个内存页的哈希值,得到的第一结果保存在新建数组中;s32,再次计算n×m~(n+1)×m范围内的每一个内存页的哈希值,得到第二结果,并与第一结果对比;s33,统计n×m~(n+1)×m范围内哈希值不一样的内存脏页数量;s34,重复步骤s31-s33,直至遍历完成虚拟机的所有内存内,并得到虚拟机所有内存脏页的数量。s4、基于所有内存脏页的数量计算得到脏页速率,若脏页速率大于迁移网络带宽的预设比例,则不进行热迁移。将所有内存脏页的数量乘以每个内存页的字节数,计算得到脏页速率,如果脏页速率接近或是高于迁移网络的带宽则不进行虚拟机热迁移,等待执行步骤s5。s5、在虚拟机业务不繁忙的时候再次执行步骤s1-s4,对虚拟机热迁移进行预测。在一些实施例中,可以通过观察虚拟机的cpu利用率下降幅度来确定是否执行步骤s5,如果预测得到的脏页速率小于等于迁移网络带宽的预设比例,则进行虚拟机热迁移。如果当前的脏页速率高于或接近迁移网络带宽的预设比例,则等待虚拟机业务机不繁忙的时候再次进行虚拟机热迁移预测。实施例2本实施例还提供了一种虚拟机热迁移系统,包括运行虚拟机热迁移预测方法的虚拟机,用于运行虚拟机的宿主机,以及,虚拟机热迁移的目的宿主机。下面通过应用实例对虚拟机热迁移预测方法、系统进行进一步说明,以便本领域技术人员能够更好地理解本发明的技术方案。在本发明的一个实施中,当前宿主机内运行一个内存为16gb的虚拟机,虚拟机中运行着性能敏感型的游戏业务,虚拟机的cpu、内存利用率都很高。宿主机网卡速率为10gb/s(为1.25gb/s),内存为ddr3。虚拟机想要热迁移至目的宿主机,要执行以下步骤:s1,首先执行qemu的qmp命令来开启虚拟机热迁移预测,传入的参数为murmurhash。该虚拟机的qemu进程启动一个新的线程,然后在新的线程中开始测算脏页速率。或者是在线程中通过dmidecode命令获取(dmidecode-tmemory|grep'type:ddr')来判断宿主机的物理内存类型,如果内存是ddr3,那选择使用murmurhash算法。s2,测算的时候首先调用murmurhash算法100次计算内存页的哈希值,然后统计消耗的总时间。总时间除以100便是平均每次调用的耗时。然后使用预设时间除以平均的每次耗时便可以计算出平均一秒钟能计算多少内存页的murmurhash哈希值,在本发明的一个实施例中,每秒能计算出一百万个内存页的哈希值。s3,新分配4byte*1m的内存数组,然后计算从第零到第一百万的内存页的murmurhash哈希值,把结果保存在这4mb的内存数组中。再次分配一个4byte*1m的内存数组,然后计算从第零到第一百万的内存页的murmurhash哈希值,同样保存在新分配的4mb内存数组中。然后比较这两个数组中每个元素,不一致的元素说明它对应的内存页发生了改变。统计不一致的元素的个数,即得到一百万个内存页里面的。再次使用上面的方法统计从第一百万到第两百万、第两百万到第三百万、第三百万到第四百万的内存页有多少变脏,在本发明的实施例中以工农统计出虚拟机总共有四十万个内存页变脏,s4,脏页速率就是400000*4k=1.6gb/s。明显大于宿主机的网卡速率,因此当前不能成功热迁移,应该另选时机。此外,本实施例还提供了一种计算机可读存储介质,该计算机可读存储介质中存储又被编程或配置执行虚拟机热迁移预测方法的计算机程序。以上仅此外,描述了本发明的基本原理和优选实施方式,本领域人员可以根据上述描述做出许多变化和改进,这些变化和改进应该属于本发明的保护范围。当前第1页12当前第1页12
再多了解一些
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1