虚拟机快速启动方法、存储介质及终端与流程

文档序号:23499799发布日期:2021-01-01 18:03阅读:116来源:国知局
本发明涉及通讯
技术领域
:,具体而言,涉及一种虚拟机快速启动方法、存储介质及终端。
背景技术
::当前虚拟化技术成熟且普及,虚拟机不但方便布署,且具有高安全性与高可用性,因此许多行业的关键业务都运行在虚拟机上,不但如此,基于容器的虚拟化技术(container)为了要提高其安全性,也有把容器运行在虚拟机上的应用,增强容器的资源隔离。不管是哪种应用都会遇到一个问题,虚拟机上运行的都是一套完整的操作系统(windows/linux),有其冗长的启动程序,如果还需要加载一些复杂的服务,启动时间将更加漫长。技术实现要素:本发明的主要目的在于提供一种虚拟机快速启动方法、存储介质及终端,以解决目前虚拟机启动时间长的问题。为了实现上述目的,本发明提供了如下技术:一种虚拟机快速启动方法,包括步骤:s1、创建样板虚拟机;s2、复制样板虚拟机主进程qemu,初始化新虚拟机;s3、为新虚拟机动态分配内核空间数据结构;s4、当新虚拟机运行时,与样板虚拟机共享内存空间,新虚拟机运行过程中每当对一个与样板机共享的内存页进行写入操作的时候,则进入步骤s5;s5、分配新的物理机物理地址给新虚拟机变更的数据写入。进一步地,在步骤s1中,创建样板虚拟机时,先发送信号给样板虚拟机主进程qemu,使其调用复制虚机的回调函数。进一步地,在步骤s2中,首先通过回调函数调用fork复制qemu,qemu父进程发送sigstop给自己,把自己置为停止状态;然后创建新虚拟机qemu子进程的vcpu及iothread线程。进一步地,步骤s3包括:s31、在kvm实现系统调用实现对虚拟机控制(kvm_fork_vmioctl),创建对应新虚拟机的kernelspace结构;s32、复制样板虚拟机的数据结构到新虚拟机中,同时保留每个虚拟机独有变量;s33、复制样板机ept给新虚拟机使用,并清除新虚拟机etpleafentry的writable(bit[1])位,使etpleafentry指向的物理机物理地址为read-only。进一步地,步骤s31中kernelspace结构,包括:kvm结构、vcpu结构、memslot结构vmcs结构和mmap空间。进一步地,步骤s4中采用写入时复制技术对新虚拟机是否有数据变更进行判断。进一步地,步骤s4包括:s41、实现eptviolation回调函数的copy-on-write判断,当新虚拟机数据变更时会触发eptviolation,从已经注册的memslot判断这个地址写入的合法性;s42、如果合法则创建一个新的物理机物理页面供其写入;s43、修改新eptleafentry所指向的物理页面为新分配的物理页面,并置位writablebit。进一步地,memoryfork发生在新虚拟机运行时有数据变更时触发,且在新虚拟机的整个生命周期内都能触发,样板虚拟机则回到停止状态;如果再有新虚拟机创建的需求,再依照同样流程创建。一种虚拟机快速启动存储介质,存储有可执行指令,用于引起处理器执行时,实现上述任一项所述的虚拟机快速启动方法。一种虚拟机快速启动终端,所述终端包括上述的虚拟机快速启动存储介质。与现有技术相比较,本发明能够带来如下技术效果:1、为了要解决虚拟机启动时间长的问题,并且能够达到短时间启动多个虚拟机的效果,设计的概念为先创建一个样板虚拟机,启动后置为停止状态,之后启动同样规格的虚拟机只要复制样板虚拟机,不必从头走完整的启动流程,省下虚拟机启动时间;2、通过写入时复制(copy-on-write)技术,样板虚拟机与新虚拟机可以共用没有变更的数据,当新虚拟机有数据变更时,分配新的物理机物理地址来应对变更,好处是共用read-only数据节省许多内存空间,只有在写入时才复制,节省复制虚拟机内存的时间;3、引入进程创建子进程的fork技术,最大化共用虚机间的相同内容,复制虚拟机的运行状态,则可以跳过虚拟机的启动过程,达成快速创建虚机的效果。附图说明构成本发明的一部分的附图用来提供对本发明的进一步理解,使得本发明的其它特征、目的和优点变得更明显。本发明的示意性实施例附图及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:图1是本发明一种虚拟机快速启动方法的流程图;图2是本发明一种虚拟机快速启动方法的复制虚拟机流程图;图3是本发明一种虚拟机快速启动方法的虚拟机内存结构映射关系与ept角色框图;图4是本发明一种虚拟机快速启动方法的ept虚拟机va到物理机pa转换与触发memoryfork流程图。具体实施方式为了使本
技术领域
:的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。在本发明中,术语“上”、“下”、“左”、“右”、“前”、“后”、“顶”、“底”、“内”、“外”、“中”、“竖直”、“水平”、“横向”、“纵向”等指示的方位或位置关系为基于附图所示的方位或位置关系。这些术语主要是为了更好地描述本发明及其实施例,并非用于限定所指示的装置、元件或组成部分必须具有特定方位,或以特定方位进行构造和操作。并且,上述部分术语除了可以用于表示方位或位置关系以外,还可能用于表示其他含义,例如术语“上”在某些情况下也可能用于表示某种依附关系或连接关系。对于本领域普通技术人员而言,可以根据具体情况理解这些术语在本发明中的具体含义。另外,术语“多个”的含义应为两个以及两个以上。需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。专业术语解释:qemu-linux虚拟化技术的用户态进程;kvm-linux虚拟化技术的内核态模块,提供qemu硬件辅助虚拟化支持;fork-linux用于创见子进程的系统调用,本文也用于特殊数据结构的复制行为;ioctl-linux操作系统用户态程序与对内核态模块的控制接口;copy-on-write-一种写时复制优化策略;container-特定进程或库文件的资源隔离技术;vcpu线程-qemu虚拟机的虚拟cpu,在宿主机为一个用户态线程;iothread线程-qemu虚拟机分担qemu主线程io压力的一个用户态线程;kernelspace-linux内核态地址空间;userspace-linux用户态地址空间;sigstop-linux支持的posix信号,收到信号的进程会进入停止状态;mainloop-qemu的主循环,所有事件经由主循环收集并分发处理;ept-intel虚拟化技术的硬件辅助地址转换,从虚拟机物理地址转换成诉主机物理地址;etpleafentry-ept阶层结构的最末端表项;eptviolation-eptentry不存在或是权限不足所引起的事件;mmap-linux映射地址空间的系统调用;memoryregion-qemu数据结构,描述一块一块地址可重叠的内存区块;flatview-qemu数据结构,依据memoryregion大小及优先级重新渲染成一个平面的地址空间;flatrange-qemu数据结构,为flatview内的每一个区段,以此为单位向宿主机mmap一段地址空间。实施例1如图1、2、3和4所示,一种虚拟机快速启动方法,包括步骤:s1、创建样板虚拟机;在步骤s1中,创建样板虚拟机时,先发送信号给样板虚拟机主进程qemu,使其调用复制虚机的回调函数。s2、复制样板虚拟机主进程qemu,初始化新虚拟机;在步骤s2中,首先通过回调函数调用fork创建一个子进程并复制qemu,qemu父进程发送sigstop给自己,把自己置为停止状态;然后创建新虚拟机qemu子进程的vcpu及iothread线程。s3、为新虚拟机动态分配kernelspace数据结构;步骤s3包括:s31、在kvm调用实现对虚拟机控制,创建对应新虚拟机的kernelspace结构;步骤s31中kernelspace结构,包括:kvm结构、vcpu结构、memslot结构vmcs结构和mmap空间。s32、复制样板虚拟机的数据结构到新虚拟机中,同时保留每个虚拟机独有变量;s33、复制样板机ept给新虚拟机使用,并清除新虚拟机etpleafentry的writable(bit[1])位,使etpleafentry指向的物理机物理地址为read-only。s4、当新虚拟机运行时,与样板虚拟机共享内存空间,新虚拟机运行过程中每当对一个与样板机共享的内存页进行写入操作的时候,则进入步骤s5;新虚拟机复制完成以后,启动运行,运行过程中写内存时逐步产生的,分配新的内存给新虚机也是按需逐步产生的,虚机运行中内存动态独立出的过程。步骤s4中采用写入时复制技术对新虚拟机是否有数据变更进行判断。步骤s4包括:s41、实现eptviolation回调函数的copy-on-write判断,当新虚拟机数据变更时会触发eptviolation,从已经注册的memslot判断这个地址写入的合法性;s42、如果合法则创建一个新的物理机物理页面供其写入;s43、修改新eptleafentry所指向的物理页面为新分配的物理页面,并置位writablebit。s5、分配新的物理机物理地址给新虚拟机变更的数据写入。memoryfork发生在新虚拟机运行时有数据变更时触发,且在新虚拟机的整个生命周期内都能触发,样板虚拟机则回到停止状态;如果再有新虚拟机创建的需求,再依照同样流程创建。一种虚拟机快速启动存储介质,存储有可执行指令,用于引起处理器执行时,实现上述任一项所述的虚拟机快速启动方法。一种虚拟机快速启动终端,用于执行创建样板虚拟机和虚拟机的复制过程。实施例2如图1、2、3和4所示,其中图2虚线部分为本发明复制虚拟机流程图,一种虚拟机快速启动方法,包括步骤:s1、创建样板虚拟机;在步骤s1中,创建样板虚拟机时,先发送信号给样板虚拟机主进程qemu,使其调用复制虚机的回调函数。qemu为虚拟机的userspace进程,fork后qemu子进程所做的修改自然是写入时复制(copy-on-write),起初会和父qemu共享内存,写时才分配内存,所以fork速度快,且不会影响到父qemu的内存。s2、复制样板虚拟机主进程qemu,初始化新虚拟机;新虚拟机复制完成,回到新虚拟机的mainloop。在步骤s2中,首先通过回调函数调用fork复制qemu,qemu父进程发送sigstop给自己,把自己置为停止状态;然后创建新虚拟机qemu子进程的vcpu及iothread线程。s3、为新虚拟机动态分配kernelspace数据结构;因为fork不会复制kernelspace数据结构,仍然关联到样板虚拟机,所以需要再为新虚拟机动态分配,让新虚拟机关联新的kernelspace数据结构,不去影响样板虚拟机。步骤s3包括:s31、在kvm实现kvm_fork_vmioctl创建对应新虚拟机的kernelspace结构;步骤s31中kernelspace结构,包括:kvm结构、vcpu结构、memslot结构vmcs结构和mmap空间。s32、复制样板虚拟机的数据结构到新虚拟机中,同时保留每个虚拟机独有变量;如vcpuid等。s33、复制样板机ept给新虚拟机使用,并清除新虚拟机etpleafentry的writable(bit[1])位,使etpleafentry指向的物理机物理地址为read-only。有了这个配置才能触发后续的memoryfork。s4、当新虚拟机运行时,与样板虚拟机共享内存空间,新虚拟机运行过程中每当对一个与样板机共享的内存页进行写入操作的时候,则进入步骤s5;虚拟机的内存起初是一块一块地址可重叠的内存区块(memoryregion),依照这些memoryregion的地址、大小及优先级能够重新渲染成一个平面的地址空间(flatview),qemu再将flatview内的每一个区段(flatrange)用mmap映射到自己的地址空间,也就是虚拟机的host虚拟地址,这些mmap地址及大小会经由ioctl注册给kvm,kvm以memslot数组纪录这些虚拟机内存区块。因为在前面qemufork和kvmfork的时候已经包含了以上这些数据结构的复制,也因为如此,新虚拟机和样板虚拟机会有相同的虚拟机页表与ept页表,所以会对应到同样的物理机物理地址上,新虚拟机的数据变更会影响到样板虚拟机,如图三,一个在虚拟机虚拟地址为0xffffbb888021d005的变量,经过虚拟机页表转换成虚拟机物理地址0x1ffd9005,再经过ept页表转换成物理机物理地址0xab1d9005,为了新虚拟机在有数据变更的时候对应到不同的物理机物理地址,本专利导入写入时复制(copy-on-write)技术,样板虚拟机与新虚拟机可以共用没有变更的数据,当新虚拟机有数据变更时,分配新的物理机物理地址来应对变更,好处是共用read-only数据节省许多内存空间,只有在写入才复制节省复制虚拟机内存的时间。步骤s4中采用写入时复制技术对新虚拟机是否有数据变更进行判断。步骤s4包括:s41、实现eptviolation回调函数的copy-on-write判断,当新虚拟机数据变更时会触发eptviolation,从已经注册的memslot判断这个地址写入的合法性;s42、如果合法则创建一个新的物理机物理页面供其写入;s43、修改新eptleafentry所指向的物理页面为新分配的物理页面,并置位writablebit。s5、分配新的物理机物理地址给新虚拟机变更的数据写入。memoryfork发生在新虚拟机运行时有数据变更时触发,且在新虚拟机的整个生命周期内都能触发,样板虚拟机则回到停止状态;如果再有新虚拟机创建的需求,再依照同样流程创建。一种虚拟机快速启动存储介质,存储有可执行指令,用于引起处理器执行时,实现上述任一项所述的虚拟机快速启动方法。一种虚拟机快速启动终端,所述终端包括上述的虚拟机快速启动存储介质。与现有技术相比较,本发明能够带来如下技术效果:1、为了要解决虚拟机启动时间长的问题,并且能够达到短时间启动多个虚拟机的效果,设计的概念为先创建一个样板虚拟机,启动后置为停止状态,之后启动同样规格的虚拟机只要复制样板虚拟机,不必从头走完整的启动流程,省下虚拟机启动时间;2、通过写入时复制(copy-on-write)技术,样板虚拟机与新虚拟机可以共用没有变更的数据,当新虚拟机有数据变更时,分配新的物理机物理地址来应对变更,好处是共用read-only数据节省许多内存空间,只有在写入时才复制,节省复制虚拟机内存的时间;3、引入进程创建子进程的fork技术,最大化共用虚机间的相同内容,复制虚拟机的运行状态,则可以跳过虚拟机的启动过程,达成快速创建虚机的效果。以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1