CN112363796B - 一种虚拟机共享内存分配方法、装置及电子设备 - Google Patents
一种虚拟机共享内存分配方法、装置及电子设备 Download PDFInfo
- Publication number
- CN112363796B CN112363796B CN202011121418.XA CN202011121418A CN112363796B CN 112363796 B CN112363796 B CN 112363796B CN 202011121418 A CN202011121418 A CN 202011121418A CN 112363796 B CN112363796 B CN 112363796B
- Authority
- CN
- China
- Prior art keywords
- virtual machine
- shared memory
- memory page
- page
- read
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45583—Memory management, e.g. access or allocation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Hardware Redundancy (AREA)
Abstract
本发明实施例公开一种虚拟机共享内存分配方法、装置及电子设备,涉及计算机技术领域,为提高共享内存的写入效率而发明。所述虚拟机共享内存分配方法,包括虚拟机发起读共享内存请求;所述读共享内存请求触发虚拟机缺页异常事件,基于所述虚拟机缺页异常事件,产生虚拟机退出事件;虚拟机管理器根据所述虚拟机退出事件,为所述读共享内存请求分配共享内存页面,并将分配的所述共享内存页面的读写权限设置为可读写。本发明适用于虚拟机和虚拟机管理器之间共享内存的数据写入的场合。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种虚拟机共享内存分配方法、装置及电子设备。
背景技术
基于Linux的虚拟机管理器(Virtual Machine Monitor,简称VMM)在内存管理上有许多优化机制。共享全零页是其中一种节省内存的机制,该机制把虚拟机针对所有未初始化的内存页面的读操作,触发缺页异常处理,指向一张相同的全零页,并设置页面为只读。这些未初始化内存页共享同一张全零页,可节省内存。由于全零页没有写权限,当虚拟机写入内存时,会再次触发缺页异常处理,重新分配内存页面,并将该重新分配的页面读写权限修改为可读可写。
现有的基于Linux的虚拟机管理器在内存管理上的这种优化机制,虽然可以节省内存,但也势必影响了内存写入的效率。
发明内容
有鉴于此,本发明实施例提供一种虚拟机共享内存分配方法、装置及电子设备,便于提高共享内存的写入效率。
第一方面,本发明实施例提供一种虚拟机共享内存分配方法,包括:虚拟机发起读共享内存请求;其中,所述共享内存为所述虚拟机和所述虚拟机管理器之间共享的物理内存;所述读共享内存请求触发虚拟机缺页异常事件,基于所述虚拟机缺页异常事件,产生虚拟机退出事件;虚拟机管理器根据所述虚拟机退出事件,为所述读共享内存请求分配共享内存页面,并将分配的所述共享内存页面的读写权限设置为可读写。
根据本申请实施例一具体实现方式,所述虚拟机管理器根据所述虚拟机退出事件,为所述读共享内存请求分配共享内存页面,并将分配的所述共享内存页面的读写权限设置为可读写,包括:虚拟机管理器从所述虚拟机退出事件的记录信息中,获取为所述读共享内存请求分配共享内存页面的指令,根据所述指令,为所述读共享内存请求分配共享内存页面,并将分配的所述共享内存页面的读写权限设置为可读写;或者,虚拟机管理器根据所述虚拟机退出事件的记录信息,判断所述虚拟机的退出是否是因虚拟机缺页异常事件所引起;若确定所述虚拟机的退出是因虚拟机缺页异常事件所引起,则判断所述读共享内存请求要读的共享内存页面是否为尚未分配的共享内存页面;若所述读共享内存请求要读的共享内存页面为尚未分配的共享内存页面,则为所述读共享内存请求分配共享内存页面,并将分配的所述共享内存页面的读写权限设置为可读写。
根据本申请实施例一具体实现方式,所述判断所述读共享内存请求要读的共享内存页面是否为尚未分配的共享内存页面,包括:所述虚拟机管理器从所述虚拟机退出事件的记录信息中,获取所述读共享内存请求所对应的虚拟机内存地址;根据所述虚拟机内存地址,以及主机物理内存地址和虚拟机内存地址之间的映射关系,确定所述读共享内存请求所对应的主机物理内存地址;根据确定的所述主机物理内存地址,判断所述读共享内存请求要读的共享内存页面是否为尚未分配的共享内存页面。
根据本申请实施例一具体实现方式,所述为所述读共享内存请求分配共享内存页面,并将分配的所述共享内存页面的读写权限设置为可读写,包括:为所述读共享内存请求分配共享内存页面,将分配的所述共享内存页面的地址设置到虚拟机管理器内存页表,并在所述虚拟机管理器内存页表中,将所述共享内存页面的读写权限设置为可读写;和/或,将分配的所述共享内存页面的地址设置到虚拟机内存页表,并在所述虚拟机内存页表中,将所述共享内存页面的读写权限设置为可读写。
根据本申请实施例一具体实现方式,所述将分配的所述共享内存页面的地址设置到虚拟机内存页表,包括:将设置到所述虚拟机管理器内存页表中的所述共享内存页面的地址,映射到虚拟机内存页表中。
第二方面,本申请实施例提供一种虚拟机共享内存分配装置,包括:读共享内存请求模块,用于发起读共享内存请求;其中,所述共享内存为所述虚拟机和所述虚拟机管理器之间共享的物理内存;缺页处理模块,用于根据所述读共享内存请求触发虚拟机缺页异常事件,并基于所述虚拟机缺页异常事件,产生虚拟机退出事件;内存分配模块,用于根据所述虚拟机退出事件,为所述读共享内存请求分配共享内存页面,并将分配的所述共享内存页面的读写权限设置为可读写。
根据本申请实施例一具体实现方式,所述内存分配模块,包括:第一判断子模块,用于根据所述虚拟机退出事件的记录信息,判断所述虚拟机的退出是否是因虚拟机缺页异常事件所引起;第二判断子模块,用于若确定所述虚拟机的退出是因虚拟机缺页异常事件所引起,则判断所述读共享内存请求要读的共享内存页面是否为尚未分配的共享内存页面;内存分配子模块,用于若所述读共享内存请求要读的共享内存页面为尚未分配的共享内存页面,则为所述读共享内存请求分配共享内存页面,并将分配的所述共享内存页面的读写权限设置为可读写。
根据本申请实施例一具体实现方式,所述第二判断子模块,具体用于:从所述虚拟机退出事件的记录信息中,获取所述读共享内存请求所对应的虚拟机内存地址;根据所述虚拟机内存地址,以及主机物理内存地址和虚拟机内存地址之间的映射关系,确定所述读共享内存请求所对应的主机物理内存地址;根据确定的所述主机物理内存地址,判断所述读共享内存请求要读的共享内存页面是否为尚未分配的共享内存页面。
根据本申请实施例一具体实现方式,所述内存分配子模块,具体用于:为所述读共享内存请求分配共享内存页面,将分配的所述共享内存页面的地址设置到虚拟机管理器内存页表,并在所述虚拟机管理器内存页表中,将所述共享内存页面的读写权限设置为可读写;和/或,将分配的所述共享内存页面的地址设置到虚拟机内存页表,并在所述虚拟机内存页表中,将所述共享内存页面的读写权限设置为可读写。
根据本申请实施例一具体实现方式,所述内存分配子模块,将分配的所述共享内存页面的地址设置到虚拟机内存页表,具体为将设置到所述虚拟机管理器内存页表中的所述共享内存页面的地址,映射到虚拟机内存页表中。
第三方面,本申请实施例提供一种电子设备,所述电子设备包括:壳体、处理器、存储器、电路板和电源电路,其中,电路板安置在壳体围成的空间内部,处理器和存储器设置在电路板上;电源电路,用于为上述电子设备的各个电路或器件供电;存储器用于存储可执行程序代码;处理器通过读取存储器中存储的可执行程序代码来运行与可执行程序代码对应的程序,用于执行前述任一实现方式所述的方法。
第三方面,本申请实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现前述任一实现方式所述的方法。
本申请实施例提供的一种虚拟机共享内存分配方法、装置、电子设备及计算机可读存储介质,在虚拟机发起读共享内存请求之后,若确定所述读共享内存请求要读的内存为尚未分配的共享内存,则为所述读共享内存请求分配内存页面,并将分配的所述内存页面的读写权限设置为可读写,这样,虚拟机在后续的流程中发起写共享内存请求时,不需要再为写共享内存请求重新分配内存页面,可直接在为所述读共享内存请求所分配的内存页面中写入数据,便于提高共享内存的写入效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1为本申请一实施例虚拟机共享内存分配方法的流程示意图;
图2为本申请另一实施例虚拟机共享内存分配方法的流程示意图;
图3为本申请又一实施例虚拟机共享内存分配方法的流程示意图;
图4为本申请一实施例虚拟机共享内存分配装置的框图;
图5为本申请另一实施例虚拟机共享内存分配装置的框图;
图6为本发明电子设备一个实施例的框图。
具体实施方式
下面结合附图对本发明实施例进行详细描述。
应当明确,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
安全隔离虚拟机是一种通过将内存隔离为安全内存和非安全内存两块区域的一种安全虚拟化技术。安全隔离虚拟机的专用内存分配在安全内存中,安全隔离虚拟机与虚拟机管理器共享的内存分配在非安全内存中。
共享内存是安全隔离虚拟机与虚拟机管理器交互数据的区域。当安全隔离虚拟机向虚拟机管理器发送数据时,安全隔离虚拟机将数据放入共享内存中,执行虚拟机退出,虚拟机管理器从共享内存中读取所述数据。当虚拟机管理器向安全隔离虚拟机发送数据时,虚拟机管理器将数据放入共享内存,并进入虚拟机运行模式。
共享全零页是基于Linux的虚拟机管理器在内存管理上的一种节省内存机制。该机制把虚拟机针对所有未初始化的内存页面的读操作,均通过触发缺页异常处理,指向一张相同的全零页,并设置页面为只读。当虚拟机写入内存时,会再次触发缺页异常处理,重新分配内存页面,并将该重新分配的内存页面读写权限修改为可读可写。
本申请实施例,针对虚拟机的共享内存的建立,初次(即虚拟机针对未初始化的内存页面的读操作)即为共享内存建立可读写的真实页面,不使用共享全零页。
图1为本申请一实施例虚拟机共享内存分配方法的流程示意图,参看图1,本实施例的虚拟机共享内存分配方法,包括步骤:
S100、虚拟机发起读共享内存请求。
本实施例的虚拟机可为安全隔离虚拟机,所述共享内存为所述虚拟机和所述虚拟机管理器之间共享的物理内存。所述读共享内存请求具体由虚拟机的应用程序发起,所述读共享内存请求中含有所读内存的虚拟机内存地址。
S102、触发虚拟机缺页异常事件,产生虚拟机退出事件。
虚拟机的应用程序发起读共享内存请求,虚拟机操作系统根据所述读共享内存请求,确定要读的虚拟机内存地址,根据要读的虚拟机物理地址,查找虚拟机页表,其中,虚拟机页表记录有虚拟机物理地址及系统物理地址之间的映射关系,,以及对应的读写标志位。
根据所述虚拟机页表,若所述要读的虚拟机物理地址为尚未分配的内存地址(即在所述虚拟机页表中不存在包含所述要读的虚拟机物理地址的映射关系),则触发虚拟机缺页异常,即触发虚拟机缺页异常事件。简言之,由所述读共享内存请求触发虚拟机缺页异常事件。
在触发虚拟机缺页异常之后,产生虚拟机退出事件,虚拟机退出,系统进入虚拟机管理器运行模式(也可称为主机模式)。
S104、为所述读共享内存请求分配共享内存页面,并将分配的所述共享内存页面的读写权限设置为可读写。
在虚拟机退出后,虚拟机管理器为所述读共享内存请求分配共享内存页面,并将分配的所述共享内存页面的读写权限设置为可读写。
本实施例中,在虚拟机发起读共享内存请求之后,若确定所述读共享内存请求要读的内存为尚未分配的共享内存,则为所述读共享内存请求分配内存页面,并将分配的所述内存页面的读写权限设置为可读写,也就是说,本实施例中,针对虚拟机的共享内存的建立,初次即为共享内存建立可读写的真实页面,不使用共享全零页,这样,虚拟机在后续的流程中发起写共享内存请求时,不需要再为写共享内存请求重新分配内存页面,可直接在为所述读共享内存请求所分配的内存页面中写入数据,便于提高共享内存的写入效率,提高虚拟机的性能。
虚拟机退出后,虚拟机管理器可从所述虚拟机退出事件的记录信息(也可称为指示信息)中,获得为所述读共享内存请求要读的内存是分配共享内存的指示,根据该指示,可直接为所述读共享内存请求分配共享内存页面,并将分配的所述共享内存页面的读写权限设置为可读写。
可选地,为提高共享内存分配的准确性,虚拟机退出后,虚拟机管理器也可根据所述虚拟机退出事件,判断所述读共享内存请求要读的内存是否为尚未分配的共享内存。若确定所述读共享内存请求要读的内存为尚未分配的共享内存,则为所述读共享内存请求分配共享内存页面,并将分配的所述共享内存页面的读写权限设置为可读写。
图2为本申请另一实施例虚拟机共享内存分配方法的流程示意图,参看图2,在图1所示实施例的基础上,本实施例中,所述虚拟机管理器根据所述虚拟机退出事件,为所述读共享内存请求分配共享内存页面,并将分配的所述共享内存页面的读写权限设置为可读写(步骤S104)可包括:
S1040、判断所述虚拟机的退出是否是因虚拟机缺页异常事件所引起。
虚拟机管理器根据所述虚拟机退出事件的记录信息,判断所述虚拟机的退出是否是因虚拟机缺页异常事件所引起。若确定所述虚拟机的退出是因虚拟机缺页异常事件所引起,则执行步骤S1042。
S1042、判断所述读共享内存请求要读的共享内存页面是否为尚未分配的共享内存页面。
虚拟机管理器可从虚拟机退出事件的记录信息中,获取虚拟机读共享内存请求中的虚拟机内存地址,以确定对应的主机物理内存地址,并判断对应的主机物理内存地址是否为尚未分配的共享内存地址,以确定所述读共享内存请求要读的共享内存页面是否为尚未分配的共享内存页面。
具体地,所述判断所述读共享内存请求要读的共享内存页面是否为尚未分配的共享内存页面(步骤S1042),可包括:
所述虚拟机管理器从所述虚拟机退出事件的记录信息中,获取所述读共享内存请求所对应的虚拟机内存地址;
根据所述虚拟机内存地址,以及主机物理内存地址和虚拟机内存地址之间的映射关系,确定所述读共享内存请求所对应的主机物理内存地址;
根据确定的所述主机物理内存地址,判断所述读共享内存请求要读的共享内存页面是否为尚未分配的共享内存页面。
经过上述判断,若确定所述读共享内存请求要读的共享内存页面为尚未分配的共享内存页面,则执行步骤S1044。
S1044、为所述读共享内存请求分配共享内存页面,并将分配的所述共享内存页面的读写权限设置为可读写。
本实施例中,虚拟机管理器先根据虚拟机退出事件,确定虚拟机的退出是因虚拟机缺页异常事件所引起,再确定读共享内存请求要读的共享内存页面尚未分配,然后为所述读共享内存请求分配共享内存页面,可确保共享内存分配的准确性。
所述共享内存可通过虚拟机管理器内存页表和虚拟机内存页表来共同管理。在一实施例中,在步骤S104中,所述为所述读共享内存请求分配内存页面,并将分配的所述内存页面的读写权限设置为可读写,可包括步骤:
A1、为所述读共享内存请求分配内存页面。
虚拟机管理器根据所述读共享内存请求,为所述读共享内存请求分配内存页面。
A2、将分配的所述内存页面的地址设置到虚拟机管理器内存页表中,并在所述虚拟机管理器内存页表中,将所述内存页面的读写权限设置为可读写。
A3、将分配的所述内存页面的地址设置到虚拟机内存页表中,并在所述虚拟机内存页表中,将所述内存页面的读写权限设置为可读写。
系统运行在虚拟机模式时,虚拟机的应用程序通过虚拟机页表访问共享内存。如前所述,虚拟机页表记录有虚拟机物理地址及系统物理地址之间的映射关系,以及对应的读写标志位。虚拟机退出,进入虚拟机管理器运行模式时,系统通过虚拟机管理器内存页表访问共享内存。在整个虚拟机的生命周期,共享内存在两张页表中的地址可保持同步。
其中,将分配的所述内存页面的地址设置到虚拟机内存页表的方式,可由虚拟机管理器直接将分配的所述内存页面的地址设置到虚拟机内存页表。为了确保虚拟机内存页表中的地址与虚拟机管理器内存页表中的地址保持同步,在一个实施例中,在将分配的所述内存页面的地址设置到虚拟机管理器内存页表之后,可采取映射的方式,将分配的所述内存页面的地址映射到虚拟机内存页表中。具体地,所述将分配的所述内存页面的地址设置到虚拟机内存页表,并在所述虚拟机内存页表中,可包括:将设置到所述虚拟机管理器内存页表中的所述内存页面的地址,映射到虚拟机内存页表中。
为减少同时维护两个页表的资源开销,共享内存可通过虚拟机管理器内存页表或通过虚拟机内存页表来单独管理。在一实施例中,共享内存可通过虚拟机管理器内存页表来单独管理,具体地,在步骤S104中,所述为所述读共享内存请求分配内存页面,并将分配的所述内存页面的读写权限设置为可读写,可包括:
B1、为所述读共享内存请求分配内存页面。
虚拟机管理器根据所述读共享内存请求,为所述读共享内存请求分配内存页面。
B2、将分配的所述内存页面的地址设置到虚拟机管理器内存页表,并在所述虚拟机管理器内存页表中,将所述内存页面的读写权限设置为可读写。
虚拟机管理器和虚拟机可共享所述虚拟机管理器内存页表。当虚拟机需要在共享内存中写入数据时,虚拟机管理器可将所述虚拟机管理器内存页表中分配的所述内存页面的地址,提供给虚拟机,以使虚拟机根据所述虚拟机管理器提供的所述内存页面的地址,在共享内存中写入数据。
在一个例子中,可在虚拟机管理器内存页表中,单独划分出一内存页表子区域,可称为第一内存页表子区域,用来存放共享内存的内存页面的地址。虚拟机管理器将为所述读共享内存请求所分配的内存页面的地址设置在第一内存页表子区域中。虚拟机管理器可仅将第一内存页表子区域和虚拟机可共享,以使所述虚拟机可从第一内存页表子区域中获得所述内存页面的地址。虚拟机管理器仅将第一内存页表子区域和虚拟机可共享,可提高共享内存地址的共享效率。
在另一实施例中,共享内存也可通过虚拟机内存页表来单独管理,具体地,在步骤S104中,所述为所述读共享内存请求分配内存页面,并将分配的所述内存页面的读写权限设置为可读写,可包括:
C1、为所述读共享内存请求分配内存页面。
虚拟机管理器根据所述读共享内存请求,为所述读共享内存请求分配内存页面。
C2、将分配的所述内存页面的地址设置到虚拟机内存页表,并在所述虚拟机内存页表中,将所述内存页面的读写权限设置为可读写。
虚拟机和虚拟机管理器可共享所述虚拟机内存页表。当虚拟机管理器需要从共享内存中读取数据时,虚拟机可将所述虚拟机内存页表中的所述内存页面的地址,提供给虚拟机管理器,以使虚拟机管理器根据所述虚拟机提供的所述内存页面的地址,从共享内存的相应地址中读取数据。
在一个例子中,可在虚拟机内存页表中,也可单独划分出一内存页表子区域,可称为第二内存页表子区域,用来存放共享内存的内存页面的地址。虚拟机管理器将为所述读共享内存请求所分配的内存页面的地址设置在第二内存页表子区域中。虚拟机可仅将第二内存页表子区域和虚拟机管理器可共享,以使所述虚拟机管理器可从第二内存页表子区域中获得所述内存页面的地址。虚拟机仅将第二内存页表子区域和虚拟机管理器可共享,可提高共享内存地址的共享效率,同时可提高内存地址共享的安全性。
图3为本申请又一实施例虚拟机共享内存分配方法的流程示意图,参看图3,在图1所示实施例的基础上,本实施例中,在步骤S104之后,所示方法还可包括步骤:
S106、虚拟机发起写共享内存请求。
S108、根据所述写共享请求,在分配的所述内存页面中写入数据。
本实施例中,虚拟机发起写共享内存请求之后,可直接在分配的所述内存页面中写入数据,不需要虚拟机产生内存缺页事件,退出虚拟机再重新分配具有可读写权限的内存页面,可提高虚拟机在共享内存中写入数据的效率。
在另一实施例中,在图2所示实施例的基础上,在步骤1044之后,也可包括本实施例的步骤S106-S108。
本申请实施例还提供一种虚拟机共享内存分配装置,可应用于安全隔离虚拟机,所述共享内存为所述虚拟机和所述虚拟机管理器之间共享的物理内存。所述读共享内存请求具体由虚拟机的应用程序发起,所述读共享内存请求中含有所读内存的虚拟机内存地址。
图4为本申请一实施例虚拟机共享内存分配装置的框图,参看图4,本实施例的虚拟机共享内存分配装置可包括:读共享内存请求模块10、缺页处理模块12和内存分配模块14,其中,读共享内存请求模块10,用于发起读共享内存请求;其中,所述共享内存为所述虚拟机和所述虚拟机管理器之间共享的物理内存;缺页处理模块12,用于根据所述读共享内存请求触发虚拟机缺页异常事件,并基于所述虚拟机缺页异常事件,产生虚拟机退出事件;内存分配模块14,用于根据所述虚拟机退出事件,为所述读共享内存请求分配共享内存页面,并将分配的所述共享内存页面的读写权限设置为可读写。
其中,读共享内存请求模块10和缺页处理模块12位于虚拟机中,内存分配模块14位于虚拟机管理器中。读共享内存请求模块10发起读共享内存请求,缺页处理模块12根据所述读共享内存请求,确定要读的虚拟机内存地址,根据要读的虚拟机内存地址,查找虚拟机页表,其中,虚拟机页表记录有虚拟机内存地址及虚拟机内存地址分配信息。根据所述虚拟机页表,若所述要读的虚拟机内存地址为尚未分配的内存地址,则触发虚拟机缺页异常,即触发虚拟机缺页异常事件。在触发虚拟机缺页异常之后,产生虚拟机退出事件,虚拟机退出,系统进入虚拟机管理器运行模式。
在虚拟机退出后,内存分配模块14为所述读共享内存请求分配共享内存页面,并将分配的所述共享内存页面的读写权限设置为可读写。
本实施例中,在虚拟机发起读共享内存请求之后,若确定所述读共享内存请求要读的内存为尚未分配的共享内存,则为所述读共享内存请求分配内存页面,并将分配的所述内存页面的读写权限设置为可读写,这样,虚拟机在后续的流程中发起写共享内存请求时,不需要再为写共享内存请求重新分配内存页面,可直接在为所述读共享内存请求所分配的内存页面中写入数据,便于提高共享内存的写入效率,提高安全隔离虚拟机的性能。
虚拟机退出后,虚内存分配模块14可从所述虚拟机退出事件的记录信息(也可称为指示信息)中,获得为所述读共享内存请求要读的内存是分配共享内存的指示,根据该指示,可直接为所述读共享内存请求分配共享内存页面,并将分配的所述共享内存页面的读写权限设置为可读写。
可选地,为提高共享内存分配的准确性,虚拟机退出后,内存分配模块14也可根据所述虚拟机退出事件,判断所述读共享内存请求要读的内存是否为尚未分配的共享内存。若确定所述读共享内存请求要读的内存为尚未分配的共享内存,则为所述读共享内存请求分配共享内存页面,并将分配的所述共享内存页面的读写权限设置为可读写。
图5为本申请另一实施例虚拟机共享内存分配装置的框图,参看图5,所述内存分配模块14,可包括:第一判断子模块140,用于根据所述虚拟机退出事件的记录信息,判断所述虚拟机的退出是否是因虚拟机缺页异常事件所引起;第二判断子模块142,用于若确定所述虚拟机的退出是因虚拟机缺页异常事件所引起,则判断所述读共享内存请求要读的共享内存页面是否为尚未分配的共享内存页面;内存分配子模块144,用于若所述读共享内存请求要读的共享内存页面为尚未分配的共享内存页面,则为所述读共享内存请求分配共享内存页面,并将分配的所述共享内存页面的读写权限设置为可读写。
本实施例中,内存分配模块14先根据虚拟机退出事件,确定虚拟机的退出是因虚拟机缺页异常事件所引起,再确定读共享内存请求要读的共享内存页面尚未分配,然后为所述读共享内存请求分配共享内存页面,可确保共享内存分配的准确性。
在一个例子中,所述第二判断子模块142,可具体用于:从所述虚拟机退出事件的记录信息中,获取所述读共享内存请求所对应的虚拟机内存地址;根据所述虚拟机内存地址,以及主机物理内存地址和虚拟机内存地址之间的映射关系,确定所述读共享内存请求所对应的主机物理内存地址;根据确定的所述主机物理内存地址,判断所述读共享内存请求要读的共享内存页面是否为尚未分配的共享内存页面。
所述共享内存可通过虚拟机管理器内存页表和虚拟机内存页表来共同管理。在一实施例中,所述内存分配子模块144,具体用于:为所述读共享内存请求分配共享内存页面,将分配的所述共享内存页面的地址设置到虚拟机管理器内存页表,并在所述虚拟机管理器内存页表中,将所述共享内存页面的读写权限设置为可读写;和/或,将分配的所述共享内存页面的地址设置到虚拟机内存页表,并在所述虚拟机内存页表中,将所述共享内存页面的读写权限设置为可读写。
在内存分配子模块144仅将分配的所述共享内存页面的地址设置到虚拟机管理器内存页表中,或仅设置到虚拟机内存页表中时,虚拟机和虚拟机管理器可共享所述虚拟机管理器内存页表中或虚拟机页表。
其中,内存分配子模块144将分配的所述内存页面的地址设置到虚拟机内存页表的方式,可由内存分配子模块144直接将分配的所述内存页面的地址设置到虚拟机内存页表。为了确保虚拟机内存页表中的地址与虚拟机管理器内存页表中的地址保持同步,在一个实施例中,在将分配的所述内存页面的地址设置到虚拟机管理器内存页表之后,可采取映射的方式,将分配的所述内存页面的地址映射到虚拟机内存页表中。在一个例子中,所述内存分配子模块144,将分配的所述共享内存页面的地址设置到虚拟机内存页表,具体为将设置到所述虚拟机管理器内存页表中的所述共享内存页面的地址,映射到虚拟机内存页表中。
为提高共享内存地址的共享效率及安全性,可在虚拟机内存页表中或在虚拟机页表中划分内存页表子区域,单独存放共享内存地址。具体可参看前述方法实施例,在此不再赘述。
图6为本发明电子设备一个实施例的框图,可以实现本申请图1至图3所示实施例的流程,如图6所示,上述电子设备可以包括:壳体41、处理器42、存储器43、电路板44和电源电路45,其中,电路板44安置在壳体41围成的空间内部,处理器42和存储器43设置在电路板44上;电源电路45,用于为上述电子设备的各个电路或器件供电;存储器43用于存储可执行程序代码;处理器42通过读取存储器43中存储的可执行程序代码来运行与可执行程序代码对应的程序,用于执行前述任一实施例所述的虚拟机共享内存分配方法。
处理器42对上述步骤的具体执行过程以及处理器42通过运行可执行程序代码来进一步执行的步骤,可以参见本发明图1至图3所示实施例的描述,在此不再赘述。
该电子设备可以是服务器或其他提供计算服务的设备,服务器的构成包括处理器、硬盘、内存、系统总线等,服务器和通用的计算机架构类似,但是由于需要提供高可靠的服务,因此在处理能力、稳定性、可靠性、安全性、可扩展性、可管理性等方面要求较高。
本申请实施例还一种计算机可读存储介质,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现前述任一权利要求所述的方法。
本申请实施例还提供一种应用程序,所述应用程序被执行以实现本发明任一实施例提供的方法。
本实施例中,在虚拟机发起读共享内存请求之后,若确定所述读共享内存请求要读的内存为尚未分配的共享内存,则为所述读共享内存请求分配内存页面,并将分配的所述内存页面的读写权限设置为可读写,也就是说,本实施例中,针对虚拟机的共享内存的建立,初次即为共享内存建立可读写的真实页面,不使用共享全零页,这样,虚拟机在后续的流程中发起写共享内存请求时,不需要再为写共享内存请求重新分配内存页面,可直接在为所述读共享内存请求所分配的内存页面中写入数据,便于提高共享内存的写入效率,提高虚拟机的性能。本申请实施例可应用于基于Linux的虚拟机管理器对共享内存的管理,可提高共享内存的写入效率。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
为了描述的方便,描述以上装置是以功能分为各种单元/模块分别描述。当然,在实施本发明时可以把各单元/模块的功能在同一个或多个软件和/或硬件中实现。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random AccessMemory,RAM)等。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
Claims (10)
1.一种虚拟机共享内存分配方法,其特征在于,包括:
虚拟机发起读共享内存请求;其中,所述共享内存为所述虚拟机和所述虚拟机管理器之间共享的物理内存;
所述读共享内存请求触发虚拟机缺页异常事件,基于所述虚拟机缺页异常事件,产生虚拟机退出事件;
虚拟机管理器根据所述虚拟机退出事件,为所述读共享内存请求分配共享内存页面,并将分配的所述共享内存页面的读写权限设置为可读写;
所述为所述读共享内存请求分配共享内存页面,并将分配的所述共享内存页面的读写权限设置为可读写,包括:
为所述读共享内存请求分配共享内存页面,将分配的所述共享内存页面的地址设置到虚拟机管理器内存页表,并在所述虚拟机管理器内存页表中,将所述共享内存页面的读写权限设置为可读写;和/或,
将分配的所述共享内存页面的地址设置到虚拟机内存页表,并在所述虚拟机内存页表中,将所述共享内存页面的读写权限设置为可读写。
2.根据权利要求1所述的虚拟机共享内存分配方法,其特征在于,所述虚拟机管理器根据所述虚拟机退出事件,为所述读共享内存请求分配共享内存页面,并将分配的所述共享内存页面的读写权限设置为可读写,包括:
虚拟机管理器从所述虚拟机退出事件的记录信息中,获取为所述读共享内存请求分配共享内存页面的指令,根据所述指令,为所述读共享内存请求分配共享内存页面,并将分配的所述共享内存页面的读写权限设置为可读写;或者,
虚拟机管理器根据所述虚拟机退出事件的记录信息,判断所述虚拟机的退出是否是因虚拟机缺页异常事件所引起;
若确定所述虚拟机的退出是因虚拟机缺页异常事件所引起,则判断所述读共享内存请求要读的共享内存页面是否为尚未分配的共享内存页面;
若所述读共享内存请求要读的共享内存页面为尚未分配的共享内存页面,则为所述读共享内存请求分配共享内存页面,并将分配的所述共享内存页面的读写权限设置为可读写。
3.根据权利要求2所述的虚拟机共享内存分配方法,其特征在于,所述判断所述读共享内存请求要读的共享内存页面是否为尚未分配的共享内存页面,包括:
所述虚拟机管理器从所述虚拟机退出事件的记录信息中,获取所述读共享内存请求所对应的虚拟机内存地址;
根据所述虚拟机内存地址,以及主机物理内存地址和虚拟机内存地址之间的映射关系,确定所述读共享内存请求所对应的主机物理内存地址;
根据确定的所述主机物理内存地址,判断所述读共享内存请求要读的共享内存页面是否为尚未分配的共享内存页面。
4.根据权利要求1所述的虚拟机共享内存分配方法,其特征在于,所述将分配的所述共享内存页面的地址设置到虚拟机内存页表,包括:
将设置到所述虚拟机管理器内存页表中的所述共享内存页面的地址,映射到虚拟机内存页表中。
5.一种虚拟机共享内存分配装置,其特征在于,包括:
读共享内存请求模块,用于发起读共享内存请求;其中,所述共享内存为所述虚拟机和所述虚拟机管理器之间共享的物理内存;
缺页处理模块,用于根据所述读共享内存请求触发虚拟机缺页异常事件,并基于所述虚拟机缺页异常事件,产生虚拟机退出事件;
内存分配模块,用于根据所述虚拟机退出事件,为所述读共享内存请求分配共享内存页面,并将分配的所述共享内存页面的读写权限设置为可读写;
所述内存分配模块,具体用于:为所述读共享内存请求分配共享内存页面,将分配的所述共享内存页面的地址设置到虚拟机管理器内存页表,并在所述虚拟机管理器内存页表中,将所述共享内存页面的读写权限设置为可读写;和/或,
将分配的所述共享内存页面的地址设置到虚拟机内存页表,并在所述虚拟机内存页表中,将所述共享内存页面的读写权限设置为可读写。
6.根据权利要求5所述的虚拟机共享内存分配装置,其特征在于,所述内存分配模块,包括:
第一判断子模块,用于根据所述虚拟机退出事件的记录信息,判断所述虚拟机的退出是否是因虚拟机缺页异常事件所引起;
第二判断子模块,用于若确定所述虚拟机的退出是因虚拟机缺页异常事件所引起,则判断所述读共享内存请求要读的共享内存页面是否为尚未分配的共享内存页面;
内存分配子模块,用于若所述读共享内存请求要读的共享内存页面为尚未分配的共享内存页面,则为所述读共享内存请求分配共享内存页面,并将分配的所述共享内存页面的读写权限设置为可读写。
7.根据权利要求6所述的虚拟机共享内存分配装置,其特征在于,所述第二判断子模块,具体用于:从所述虚拟机退出事件的记录信息中,获取所述读共享内存请求所对应的虚拟机内存地址;
根据所述虚拟机内存地址,以及主机物理内存地址和虚拟机内存地址之间的映射关系,确定所述读共享内存请求所对应的主机物理内存地址;
根据确定的所述主机物理内存地址,判断所述读共享内存请求要读的共享内存页面是否为尚未分配的共享内存页面。
8.根据权利要求5所述的虚拟机共享内存分配装置,其特征在于,所述内存分配模块,将分配的所述共享内存页面的地址设置到虚拟机内存页表,具体为将设置到所述虚拟机管理器内存页表中的所述共享内存页面的地址,映射到虚拟机内存页表中。
9.一种电子设备,其特征在于,所述电子设备包括:壳体、处理器、存储器、电路板和电源电路,其中,电路板安置在壳体围成的空间内部,处理器和存储器设置在电路板上;电源电路,用于为上述电子设备的各个电路或器件供电;存储器用于存储可执行程序代码;处理器通过读取存储器中存储的可执行程序代码来运行与可执行程序代码对应的程序,用于执行前述权利要求1-4任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现前述权利要求1-4任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011121418.XA CN112363796B (zh) | 2020-10-19 | 2020-10-19 | 一种虚拟机共享内存分配方法、装置及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011121418.XA CN112363796B (zh) | 2020-10-19 | 2020-10-19 | 一种虚拟机共享内存分配方法、装置及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112363796A CN112363796A (zh) | 2021-02-12 |
CN112363796B true CN112363796B (zh) | 2022-11-11 |
Family
ID=74507328
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011121418.XA Active CN112363796B (zh) | 2020-10-19 | 2020-10-19 | 一种虚拟机共享内存分配方法、装置及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112363796B (zh) |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102439567A (zh) * | 2011-10-21 | 2012-05-02 | 华为技术有限公司 | 分布式虚拟机访问异常的处理方法以及虚拟机监控器 |
US9311169B2 (en) * | 2012-05-02 | 2016-04-12 | Nvidia Corporation | Server based graphics processing techniques |
CN107491354B (zh) * | 2017-07-03 | 2020-01-21 | 北京东土科技股份有限公司 | 一种基于共享内存的虚拟机间通信方法及装置 |
CN111190752B (zh) * | 2019-12-30 | 2023-04-07 | 海光信息技术股份有限公司 | 虚拟机共享内核内存的方法及装置 |
-
2020
- 2020-10-19 CN CN202011121418.XA patent/CN112363796B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN112363796A (zh) | 2021-02-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8261267B2 (en) | Virtual machine monitor having mapping data generator for mapping virtual page of the virtual memory to a physical memory | |
US9529611B2 (en) | Cooperative memory resource management via application-level balloon | |
JP6218859B2 (ja) | 仮想マシンの完全性保護のためのメモリイントロスペクションエンジン | |
US8909898B2 (en) | Copy equivalent protection using secure page flipping for software components within an execution environment | |
US7921426B2 (en) | Inter partition communication within a logical partitioned data processing system | |
US7725642B2 (en) | Method and program for partitioning a physical computer into logical partitions | |
US7194739B2 (en) | Multi-application execution system and method thereof | |
US10061918B2 (en) | System, apparatus and method for filtering memory access logging in a processor | |
US10216529B1 (en) | Method and system for sharing driver pages | |
KR20130081552A (ko) | 장애 복구 장치 및 방법 | |
US11822419B2 (en) | Error information processing method and device, and storage medium | |
WO2022193768A1 (zh) | 内存读写指令的执行方法及计算设备 | |
US20170277632A1 (en) | Virtual computer system control method and virtual computer system | |
US11150929B2 (en) | Enhanced memory management for virtual machines | |
US20100095081A1 (en) | Early detection of an access to de-allocated memory | |
US11226755B1 (en) | Core dump in a storage device | |
CN112363796B (zh) | 一种虚拟机共享内存分配方法、装置及电子设备 | |
US10713181B1 (en) | Method and system for sharing driver pages | |
WO2023165308A1 (zh) | 一种内存回收方法、装置及控制设备 | |
CN115576818A (zh) | 一种内存越界检测方法、装置及电子设备和存储介质 | |
JPH1063525A (ja) | 情報処理装置、情報処理システム及びその制御方法 | |
CN113792299A (zh) | 一种基于ftrace技术的Linux系统保护方法 | |
JP5619198B2 (ja) | 情報処理装置、情報処理方法、およびプログラム | |
WO2015161804A1 (zh) | 一种Cache分区的方法及装置 | |
WO2024067479A1 (zh) | 一种容器逃逸的检测方法、电子设备及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |