本公开涉及一种虚拟机内存访问方法、系统和电子设备。
背景技术:
::虚拟化技术可以重新整合物理资源,并使之得到最大化的利用。电信级虚拟化要求虚拟机具有实时性和高效性。实时性要求虚拟机内所有的任务请求都能在规定的可预测时间内给予相应,不能出现延迟毛刺。高效性要求虚拟机内所有的任务请求都要快速高效的完成。然而,目前的内存子系统的尚不能满足电信级虚拟化的需求。技术实现要素:本公开的一个方面提供了一种虚拟机内存访问方法,包括获取所述虚拟机对应的虚拟机控制结构,其中,虚拟机控制结构中包括虚拟内存起始地址和虚拟内存大小,根据所述虚拟内存起始地址和虚拟内存大小,建立与所述虚拟机对应的物理内存地址和虚拟内存地址的映射关系,以及基于所述映射关系,通过虚拟内存空间地址访问对应的物理内存地址。可选地,所述虚拟机控制结构还包括映射启用选项,所述根据所述虚拟内存起始地址和虚拟内存大小,建立与所述虚拟机对应的物理内存地址和虚拟内存地址的映射关系包括,获取所述映射启用选项,以及在映射启用选项表示启用映射时,根据所述虚拟内存起始地址和虚拟内存大小,建立与所述虚拟机对应的物理内存地址和虚拟内存地址的映射关系。可选地,所述根据所述虚拟内存起始地址和虚拟内存大小,建立与所述虚拟机对应的物理内存地址和虚拟内存地址的映射关系包括,在虚拟机被创建时,根据所述虚拟内存起始地址和虚拟内存大小,建立与所述虚拟机对应的物理内存地址和虚拟内存地址的映射关系。可选地,所述根据所述虚拟内存起始地址和虚拟内存大小,建立与所述虚拟机对应的物理内存地址和虚拟内存地址的映射关系,包括执行如下循环操作,直至所述虚拟内存地址已全部处理:从所创建的虚拟内存中选取一个未处理过的页,判断所述页的地址范围是否在由所述虚拟内存起始地址和所述虚拟内存大小确定的映射范围内,若所述页的地址范围在所述映射范围内,则为所述页建立映射。本公开的另一个方面提供了一种部署有虚拟机的电子设备,包括处理器以及存储器。存储器上存储有机器可读指令,所述指令在被处理器执行时,使得处理器获取所述虚拟机对应的虚拟机控制结构,其中,虚拟机控制结构中包括虚拟内存起始地址和虚拟内存大小,根据所述虚拟内存起始地址和虚拟内存大小,建立与所述虚拟机对应的物理内存地址和虚拟内存地址的映射关系,以及基于所述映射关系,通过虚拟内存空间地址访问对应的物理内存地址。可选地,所述虚拟机控制结构还包括映射启用选项,所述处理器根据所述虚拟内存起始地址和虚拟内存大小,建立与所述虚拟机对应的物理内存地址和虚拟内存地址的映射关系包括,获取所述映射启用选项,以及在映射启用选项表示启用映射时,根据所述虚拟内存起始地址和虚拟内存大小,建立与所述虚拟机对应的物理内存地址和虚拟内存地址的映射关系。可选地,所述处理器根据所述虚拟内存起始地址和虚拟内存大小,建立与所述虚拟机对应的物理内存地址和虚拟内存地址的映射关系包括,在虚拟机被创建时,根据所述虚拟内存起始地址和虚拟内存大小,建立与所述虚拟机对应的物理内存地址和虚拟内存地址的映射关系。可选地,所述处理器根据所述虚拟内存起始地址和虚拟内存大小,建立与所述虚拟机对应的物理内存地址和虚拟内存地址的映射关系包括执行如下循环操作,直至所述虚拟内存地址已全部处理:从所创建的虚拟内存中选取一个未处理过的页,判断所述页的地址范围是否在由所述虚拟内存起始地址和所述虚拟内存大小确定的映射范围内,若所述页的地址范围在所述映射范围内,则为所述页建立映射。本公开的另一个方面提供了一种虚拟机内存访问系统,包括获取模块、映射模块、以及访问模块。获取模块,用于获取所述虚拟机对应的虚拟机控制结构,其中,虚拟机控制结构中包括虚拟内存起始地址和虚拟内存大小。映射模块,用于根据所述虚拟内存起始地址和虚拟内存大小,建立与所述虚拟机对应的物理内存地址和虚拟内存地址的映射关系。访问模块,用于基于所述映射关系,通过虚拟内存空间地址访问对应的物理内存地址。可选地,所述虚拟机控制结构还包括映射启用选项,所述映射模块包括获取子模块和映射子模块。获取子模块,用于获取所述映射启用选项。映射子模块,用于在映射启用选项表示启用映射时,根据所述虚拟内存起始地址和虚拟内存大小,建立与所述虚拟机对应的物理内存地址和虚拟内存地址的映射关系。本公开的另一方面提供了一种非易失性存储介质,存储有计算机可执行指令,所述指令在被执行时用于实现如上所述的方法。本公开的另一方面提供了一种计算机程序,所述计算机程序包括计算机可执行指令,所述指令在被执行时用于实现如上所述的方法。附图说明为了更完整地理解本公开及其优势,现在将参考结合附图的以下描述,其中:图1示意性示出了根据本公开实施例的虚拟机内存访问方法的应用场景;图2示意性示出了根据本公开实施例的虚拟机内存访问方法的流程图;图3示意性示出了根据本公开实施例的映射建立过程的流程图;图4示意性示出了根据本公开实施例的映射建立过程的流程图;图5示意性示出了根据本公开实施例的虚拟机内存访问系统的框图;图6示意性示出了根据本公开实施例的映射模块的框图;以及图7示意性示出了根据本公开实施例的部署有虚拟机的电子设备的框图。具体实施方式以下,将参照附图来描述本公开的实施例。但是应该理解,这些描述只是示例性的,而并非要限制本公开的范围。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本公开的概念。在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本公开。这里使用的词语“一”、“一个(种)”和“该”等也应包括“多个”、“多种”的意思,除非上下文另外明确指出。此外,在此使用的术语“包括”、“包含”等表明了所述特征、步骤、操作和/或部件的存在,但是并不排除存在或添加一个或多个其他特征、步骤、操作或部件。在此使用的所有术语(包括技术和科学术语)具有本领域技术人员通常所理解的含义,除非另外定义。应注意,这里使用的术语应解释为具有与本说明书的上下文相一致的含义,而不应以理想化或过于刻板的方式来解释。附图中示出了一些方框图和/或流程图。应理解,方框图和/或流程图中的一些方框或其组合可以由计算机程序指令来实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器,从而这些指令在由该处理器执行时可以创建用于实现这些方框图和/或流程图中所说明的功能/操作的装置。因此,本公开的技术可以硬件和/或软件(包括固件、微代码等)的形式来实现。另外,本公开的技术可以采取存储有指令的计算机可读介质上的计算机程序产品的形式,该计算机程序产品可供指令执行系统使用或者结合指令执行系统使用。在本公开的上下文中,计算机可读介质可以是能够包含、存储、传送、传播或传输指令的任意介质。例如,计算机可读介质可以包括但不限于电、磁、光、电磁、红外或半导体系统、装置、器件或传播介质。计算机可读介质的具体示例包括:磁存储装置,如磁带或硬盘(hdd);光存储装置,如光盘(cd-rom);存储器,如随机存取存储器(ram)或闪存;和/或有线/无线通信链路。为了便于描述,将虚拟机的系统称为guest系统,运行虚拟机的系统称为host系统。guest系统使用虚拟硬件,host系统拥有真正的物理硬件,并虚拟许多份虚拟硬件分配给各个虚拟机使用,从而达到硬件资源共享的目的。虚拟机中每个虚拟中央处理器(vcpu)都对应一个虚拟机控制结构(vmcs,virtual-machinecontrolstructure),虚拟机控制结构保存了host系统和guest系统的各种状态。出于某些功能原因(如需要虚拟机监控器处理虚拟硬件请求、虚拟机时间片用完发生切换、外部发生物理中断等),虚拟机会退出(vm-exit),vm-exit过程中需要将guest系统状态保存到vmcs中并从vmcs结构中读取host系统的状态加载到物理cpu;当处理完相应功能后,虚拟机就可以继续运行了,再次运行虚拟机的动作称之为vm-entry,在vm-entry过程中需要将host系统的状态保存到vmcs结构中并从vmcs结构中读取guest系统的状态加载到物理cpu。vm-exit和vm-entry都涉及到vmcs内存的读写和cpu状态的切换,这是相当消耗时间的。所以vm-exit和vm-entry发生的次数直接就可以衡量一个虚拟机的性能。vm-exit和vm-entry次数越少,虚拟机的性能越高。vm-exit和vm-entry还可能伴随有操作系统的进程调度,如果vm-exit后调度到了其他的进程,那么虚拟机进程就会被放入调度队列尾部,再次发生vm-entry的时机是不可预知的,导致虚拟机内部任务处理完成时间变得不可预知,可能造成虚拟机内部任务响应的延迟毛刺,从而大大降低了虚拟机内部任务的实时性。所以减少vm-exit和vm-entry发生的次数,可以提高虚拟机的实时性。图1示意性示出了根据本公开实施例的虚拟机内存访问方法的应用场景。如图1所示,host系统上的物理内存的地址称为hpa(hostphysicaladdress),guest系统上的逻辑地址称为gva(guestvirtualaddress),guest虚拟内存空间地址称为gpa(guestphysicaladdress)。当guest软件访问内存时,会给出将要访问的gva地址,通过guest系统内的原生页表,就可以转换为guest虚拟内存空间地址gpa。然而,gpa在物理内存上并不是从0开始,且不一定是连续的,因此还需要在gpa与hpa之间建立映射。gpa到hpa的转换通过虚拟机监控器(vmm,virtual-machinemonitor)上的影子页表spt(shadowpagetable)来完成。如果影子页表spt中没有找到gpa到hpa的映射,就会导致虚拟机的退出vm-exit,由vmm完成gpa到hpa的影子页表映射后,再通过vm-entry进入虚拟机,让虚拟机继续运行。如图1所示,影子页表spt与guest系统内的原生页表可分为多级,例如分为4级,这样根据gpa到spt中进行4级索引,最终得到hpa。影子页表中每级中的页表项称为影子页表项(spte,shadowpagetableentry)。需要注意的是,在guest系统内的原生页表的页表项内存放的也是下一级页表基地址或者guest内存地址,而guest页表中存放的这两种地址均是虚拟内存地址gpa,并不是真正的物理内存地址。也就是说,访问guest系统内的页表和guest访问一个物理内存是一样的,都需要经过影子页表来完成gpa到hpa的转换才能真正的找到guest的下一级页表。目前的管理策略是懒惰策略,即,在虚拟机内存创建时,影子页表内是空的,只有虚拟机需要真正操作内存的时候,才会建立vmm内的影子页表。以4级页表为例,guest系统内访问一个内存,会发生最多达4次vm-exit和vm-entry,即8次vmcs的保存和载入,极大地影响虚拟机的高效性和实时性。图2示意性示出了根据本公开实施例的虚拟机内存访问方法的流程图。如图2所示,该方法包括操作s210~s230。在操作s210,获取所述虚拟机对应的虚拟机控制结构,其中,虚拟机控制结构中包括虚拟内存起始地址和虚拟内存大小。在操作s220,根据所述虚拟内存起始地址和虚拟内存大小,建立与所述虚拟机对应的物理内存地址和虚拟内存地址的映射关系。在操作s230,基于所述映射关系,通过虚拟内存空间地址访问对应的物理内存地址。该方法根据所述虚拟内存起始地址和虚拟内存大小,建立与所述虚拟机对应的物理内存地址和虚拟内存地址的映射关系,避免了在操作内存时反复退出和进入虚拟机(vm-exit和vm-entry),提高了虚拟机内存访问的实时性和高效性。根据本公开实施例,在操作s210获取的虚拟机控制结构vmcs中包括经过定义的虚拟内存起始地址字段和虚拟内存大小字段。由虚拟内存起始地址字段和虚拟内存大小字段确定出需要映射的内存地址范围。例如,一个虚拟机在创建时被分配了1g的内存,其创建了gpa从0开始的大小为1g的地址空间,那么可以设定虚拟内存起始地址为0,虚拟内存大小为1g,即,虚拟机全部的内存需要在后续的操作中完成映射关系的建立。或者,例如设定虚拟内存起始地址为0,虚拟内存大小为128m,即,设定了虚拟机的一部分内存地址,在后续的操作中建立映射关系,其他的虚拟内存仍采用懒惰策略,在使用到该内存时才建立映射关系。在操作s220,根据所述虚拟内存起始地址和虚拟内存大小,建立与所述虚拟机对应的物理内存地址和虚拟内存地址的映射关系。建立与所述虚拟机对应的物理内存地址和虚拟内存地址的映射关系并不依赖内存的使用,而是根据获取的虚拟内存起始地址和虚拟内存大小,将该范围内的内存全部映射。根据本公开实施例,所述根据所述虚拟内存起始地址和虚拟内存大小,建立与所述虚拟机对应的物理内存地址和虚拟内存地址的映射关系包括,在虚拟机被创建时,根据所述虚拟内存起始地址和虚拟内存大小,建立与所述虚拟机对应的物理内存地址和虚拟内存地址的映射关系。在虚拟机被创建时,需要为该虚拟机分配内存大小,并根据所分配的内存大小,为其创建内存。根据本公开实施例,在内存创建完成后,可以立即建立与所述虚拟机对应的物理内存地址和虚拟内存地址的映射关系,以使得在虚拟机操作内存时不再触发vm-exit和vm-entry,提高了虚拟机内存访问的实时性和高效性。在操作s230,在全部内存或设定的部分内存的映射关系建立完成后,可以基于所述映射关系,通过虚拟内存空间地址访问对应的物理内存地址。由于已经建立了映射关系,此时的访问不再需要经过vm-exit和vm-entry过程,guest系统的运行更加稳定可靠,提高了虚拟机内存访问的实时性和高效性。图3示意性示出了根据本公开实施例的映射建立过程的流程图。如图3所示,该方法包括操作s310~s320。在操作s310,获取所述映射启用选项。在操作s320,在映射启用选项表示启用映射时,根据所述虚拟内存起始地址和虚拟内存大小,建立与所述虚拟机对应的物理内存地址和虚拟内存地址的映射关系。根据本公开实施例,在操作s210获取的虚拟机控制结构vmcs中还包括经过定义的映射启用选项字段。例如,该字段可以用一个比特位表示,该位为1时,表示启用映射,该位为0时,表示不启用映射。因此,在获取虚拟机控制结构后,可以从中获取映射启用选项,并判断是否立即开始映射。该方法可以根据不同虚拟机的使用需要,合理地确定虚拟机在创建时是否采用参考图2所描述的方法进行映射,尤其是对于使用频率不高的虚拟机,允许其采用懒惰策略,即仅在内存操作时才建立映射。图4示意性示出了根据本公开实施例的映射建立过程的流程图。如图4所示,该方法包括操作s410~s450。在操作s410,从所创建的虚拟内存中选取一个未处理过的页。根据本公开实施例,可以从虚拟内存起始地址开始,依次选取4k大小的内存地址空间作为一个页,以页为单位进行处理。在操作s420,判断所述页的地址范围是否在由所述虚拟内存起始地址和所述虚拟内存大小确定的映射范围内,若所述页的地址范围在所述映射范围内,则执行操作s430,否则跳过s430,直接执行操作s440。在操作s430,若所述页的地址范围在所述映射范围内,则为所述页建立映射。根据本公开实施例,所建立的映射关系为多级页表。以4级页表为例,首先取得一个guest物理页,为其分配第二级页表页,并链接到第一级页表的页表项,再分配第三级页表页,并链接到第二级页表的页表项,然后分配第四级页表页,并链接到第三级页表的页表项,最后分配host物理内存页,并将物理页的基地址填入第一级页表的页表项中。当然,上述顺序并非固定,可以任意调整。在操作s430执行完毕后,进入操作s440。在操作s440,判断是否存在未处理的虚拟内存地址,如果存在未处理的虚拟内存地址,则返回操作s410,否则进入操作s450。在操作s450,循环结束,映射完毕。图5示意性示出了根据本公开实施例的虚拟机内存访问系统500的框图。如图5所示,虚拟机内存访问系统500包括获取模块510、映射模块520以及访问模块530。获取模块510,例如执行上文参考图2描述的操作s210,用于获取所述虚拟机对应的虚拟机控制结构,其中,虚拟机控制结构中包括虚拟内存起始地址和虚拟内存大小。映射模块520,例如执行上文参考图2描述的操作s220,用于根据所述虚拟内存起始地址和虚拟内存大小,建立与所述虚拟机对应的物理内存地址和虚拟内存地址的映射关系。访问模块530,例如执行上文参考图2描述的操作s230,用于基于所述映射关系,通过虚拟内存空间地址访问对应的物理内存地址。图6示意性示出了根据本公开实施例的映射模块520的框图。如图6所示,映射模块520包括获取子模块610和映射子模块620。获取子模块610,例如执行上文参考图3描述的操作s310,用于获取所述映射启用选项。映射子模块620,例如执行上文参考图3描述的操作s320,用于在映射启用选项表示启用映射时,根据所述虚拟内存起始地址和虚拟内存大小,建立与所述虚拟机对应的物理内存地址和虚拟内存地址的映射关系。根据本公开实施例,所述映射模块520包括第二映射子模块,用于在虚拟机被创建时,根据所述虚拟内存起始地址和虚拟内存大小,建立与所述虚拟机对应的物理内存地址和虚拟内存地址的映射关系。根据本公开实施例,所述映射模块520还包括循环处理模块,用于执行如下循环操作,直至所述虚拟内存地址已全部处理:从所创建的虚拟内存中选取一个未处理过的页,判断所述页的地址范围是否在由所述虚拟内存起始地址和所述虚拟内存大小确定的映射范围内,若所述页的地址范围在所述映射范围内,则为所述页建立映射。可以理解的是,获取模块510、映射模块520、访问模块530、获取子模块610以及映射子模块620可以合并在一个模块中实现,或者其中的任意一个模块可以被拆分成多个模块。或者,这些模块中的一个或多个模块的至少部分功能可以与其他模块的至少部分功能相结合,并在一个模块中实现。根据本发明的实施例,获取模块510、映射模块520、访问模块530、获取子模块610以及映射子模块620中的至少一个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(fpga)、可编程逻辑阵列(pla)、片上系统、基板上的系统、封装上的系统、专用集成电路(asic),或可以以对电路进行集成或封装的任何其他的合理方式等硬件或固件来实现,或以软件、硬件以及固件三种实现方式的适当组合来实现。或者,获取模块510、映射模块520、访问模块530、获取子模块610以及映射子模块620中的至少一个可以至少被部分地实现为计算机程序模块,当该程序被计算机运行时,可以执行相应模块的功能。图7示意性示出了根据本公开实施例的部署有虚拟机的电子设备700的框图。如图7所示,部署有虚拟机的电子设备700包括处理器710和存储器720。该电子设备700可以执行上面参考图2~图4描述的方法,以实现对虚拟机内存的快速访问。具体地,处理器710例如可以包括通用微处理器、指令集处理器和/或相关芯片组和/或专用微处理器(例如,专用集成电路(asic)),等等。处理器710还可以包括用于缓存用途的板载存储器。处理器710可以是用于执行参考图2~图4描述的根据本公开实施例的方法流程的不同动作的单一处理单元或者是多个处理单元。存储器720,例如可以是能够包含、存储、传送、传播或传输指令的任意介质。例如,可读存储介质可以包括但不限于电、磁、光、电磁、红外或半导体系统、装置、器件或传播介质。可读存储介质的具体示例包括:磁存储装置,如磁带或硬盘(hdd);光存储装置,如光盘(cd-rom);半导体存储器,如随机存取存储器(ram)或闪存;和/或有线/无线通信链路。存储器720可以包括计算机程序721,该计算机程序721可以包括代码/计算机可执行指令,其在由处理器710执行时使得处理器710执行例如上面结合图2~图4所描述的方法流程及其任何变形。计算机程序721可被配置为具有例如包括计算机程序模块的计算机程序代码。例如,在示例实施例中,计算机程序721中的代码可以包括一个或多个程序模块,例如包括721a、模块721b、……。应当注意,模块的划分方式和个数并不是固定的,本领域技术人员可以根据实际情况使用合适的程序模块或程序模块组合,当这些程序模块组合被处理器710执行时,使得处理器710可以执行例如上面结合图2~图4所描述的方法流程及其任何变形。根据本发明的实施例,获取模块510、映射模块520、访问模块530、获取子模块610以及映射子模块620中的至少一个可以实现为参考图7描述的计算机程序模块,其在被处理器710执行时,可以实现上面描述的相应操作。本领域技术人员可以理解,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合或/或结合,即使这样的组合或结合没有明确记载于本公开中。特别地,在不脱离本公开精神和教导的情况下,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合。所有这些组合和/或结合均落入本公开的范围。尽管已经参照本公开的特定示例性实施例示出并描述了本公开,但是本领域技术人员应该理解,在不背离所附权利要求及其等同物限定的本公开的精神和范围的情况下,可以对本公开进行形式和细节上的多种改变。因此,本公开的范围不应该限于上述实施例,而是应该不仅由所附权利要求来进行确定,还由所附权利要求的等同物来进行限定。当前第1页12当前第1页12