CN114840330A - 一种内存回收方法、装置及控制设备 - Google Patents
一种内存回收方法、装置及控制设备 Download PDFInfo
- Publication number
- CN114840330A CN114840330A CN202210197905.7A CN202210197905A CN114840330A CN 114840330 A CN114840330 A CN 114840330A CN 202210197905 A CN202210197905 A CN 202210197905A CN 114840330 A CN114840330 A CN 114840330A
- Authority
- CN
- China
- Prior art keywords
- memory
- virtual machine
- page
- struct
- metadata information
- 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.)
- Pending
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/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
-
- 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/5022—Mechanisms to release resources
-
- 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
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
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)
Abstract
本申请提供了一种内存回收方法、装置及控制设备,所述方法包括:获取虚拟机的内存管理元数据信息和解析该内存管理元数据信息的内存解析函数;基于所述内存解析函数和所述内存管理元数据信息,回收所述虚拟机的空闲内存。通过对虚拟机的空闲的内存进行回收,从而避开了对设备侧DMA无法改变内存映射的问题,且无需额外的硬件或半虚拟化驱动程序。
Description
技术领域
本申请涉及内存分配技术领域,具体而言,涉及一种内存回收方法、装置及控制设备。
背景技术
对虚拟机的空闲内存进行回收,提升虚拟机内存弹性,能够有效提高宿主机的资源使用效率,帮助提高宿主机能够部署的虚拟机的密度,降低虚拟机使用成本。但是在虚拟机设备直通大规模普及的今天,设备侧DMA要求虚拟机在运行过程中,内存映射完全不能改变,因此也就无法动态地回收虚拟机的内存。
解决该问题的一个方法是提供设备侧缺页处理能力,但这种方法依赖特殊的硬件,无法在现有硬件中使用。此外,还有一些半虚拟化方案能够解决此类问题,但是这些方案需要虚拟机中运行专用的半虚拟化驱动程序。
发明内容
本申请解决的问题是现有内存回收方法中DMA的内存映射无法改变导致无法回收虚拟机的内存。
为解决上述问题,本申请首先提供一种内存回收方法,包括:
获取虚拟机的内存管理元数据信息和解析该内存管理元数据信息的内存解析函数;
基于所述内存解析函数和所述内存管理元数据信息,回收所述虚拟机的空闲内存。
在一种实施方式中,所述基于所述内存解析函数和所述内存管理元数据信息,回收所述虚拟机的空闲内存之后,所述方法还包括:
响应于所述虚拟机对已回收的空闲内存的分配请求,对所述虚拟机分配新的物理内存。
在一种实施方式中,所述内存解析函数为所述虚拟机编译后的BPF字节码。
在一种实施方式中,所述获取虚拟机的内存管理元数据信息和解析该内存管理元数据信息的内存解析函数,包括:
当所述虚拟机启动后对预先编写的所述内存解析函数的eBPF源程序进行编译时,接收所述虚拟机注入的内存管理元数据信息和编译后的所述内存解析函数的BPF字节码。
在一种实施方式中,所述基于所述内存解析函数和所述内存管理元数据信息,回收所述虚拟机的空闲内存中,通过所述内存解析函数和所述内存管理元数据信息扫描出所述虚拟机的空闲内存后,回收所述虚拟机的空闲内存。
在一种实施方式中,所述内存管理元数据信息,包括struct page物理页信息和对应的struct page结构体信息;所述通过所述内存解析函数和所述内存管理元数据信息扫描出所述虚拟机的空闲内存后,回收所述虚拟机的空闲内存,包括:
扫描所述虚拟机的struct page物理页信息,调用所述内存解析函数解析与对应的struct page结构体信息,确定空闲的struct page物理页;
删除EPT映射表和IOMMU映射表中空闲的所述struct page物理页的映射,并将EPT映射表和IOMMU映射表中struct page结构体物理页的映射的权限位置为只读,所述structpage结构体物理页为存储空闲的所述struct page物理页对应的struct page结构体信息的struct page物理页。
在一种实施方式中,所述虚拟机对已回收的空闲内存的分配请求是在所述虚拟机访问所述EPT映射表或所述IOMMU映射表中权限位为只读的struct page结构体物理页的映射时触发的。
在一种实施方式中,所述对所述虚拟机分配新的物理内存是在所述EPT映射表或所述IOMMU映射表中重新建立空闲的struct page物理页的映射。
本申请其次一种控制设备,其包括:存储器和处理器;
所述存储器,其用于存储程序;
所述处理器,耦合至所述存储器,用于执行所述程序,以用于:
获取虚拟机的内存管理元数据信息和解析该内存管理元数据信息的内存解析函数;
基于所述内存解析函数和所述内存管理元数据信息,回收所述虚拟机的空闲内存。
在一种实施方式中,所述处理器具体用于:
响应于所述虚拟机对已回收的空闲内存的分配请求,对所述虚拟机分配新的物理内存。
在一种实施方式中,所述内存解析函数为所述虚拟机编译后的BPF字节码。
在一种实施方式中,所述处理器具体用于:
当所述虚拟机启动后对预先编写的所述内存解析函数的eBPF源程序进行编译时,接收所述虚拟机注入的内存管理元数据信息和编译后的所述内存解析函数的BPF字节码。
在一种实施方式中,所述处理器具体用于:通过所述内存解析函数和所述内存管理元数据信息扫描出所述虚拟机的空闲内存后,回收所述虚拟机的空闲内存。
在一种实施方式中,所述内存管理元数据信息,包括struct page物理页信息和对应的struct page结构体信息;基于此,所述处理器具体用于:
扫描所述虚拟机的struct page物理页信息,调用所述内存解析函数解析与对应的struct page结构体信息,确定空闲的struct page物理页;
删除EPT映射表和IOMMU映射表中空闲的所述struct page物理页的映射,并将EPT映射表和IOMMU映射表中struct page结构体物理页的映射的权限位置为只读,所述structpage结构体物理页为存储空闲的所述struct page物理页对应的struct page结构体信息的struct page物理页。
在一种实施方式中,所述处理器具体用于:
所述虚拟机对已回收的空闲内存的分配请求是在所述虚拟机访问所述EPT映射表或所述IOMMU映射表中权限位为只读的struct page结构体物理页的映射时触发的。
在一种实施方式中,所述处理器具体用于:
所述对所述虚拟机分配新的物理内存是在所述EPT映射表或所述IOMMU映射表中重新建立空闲的struct page物理页的映射。
本申请再次提供一种内存回收装置,其包括:
信息获取模块,其用于获取虚拟机的内存管理元数据信息和解析该内存管理元数据信息的内存解析函数;
内存回收模块,其用于基于所述内存解析函数和所述内存管理元数据信息,回收所述虚拟机的空闲内存。
在一种实施方式中,所述装置还包括:
内存分配模块,其用于响应于所述虚拟机对已回收的空闲内存的分配请求,对所述虚拟机分配新的物理内存。
本申请通过对虚拟机的空闲的内存进行回收,从而避开了对设备侧DMA无法改变内存映射的问题,且无需额外的硬件或半虚拟化驱动程序。
本申请中,虚拟机除启动时向宿主机注入代码与数据之外,无任何其它改动,因此对虚拟机的侵入控制最小,很容易做到软件兼容;宿主机主动自发地对虚拟机内存状态进行扫描,而无需等待虚拟机的响应,因此相较于传统的PV方案,可以做到更好的实时性;本方案为在已有架构上的纯软件方案,不依赖支持设备侧Page Fault的特定硬件,因此可以硬件兼容。
本申请中,通过虚拟机向宿主机注入内存管理元数据信息,以及内存管理元数据解析函数,让宿主机能够实时、主动地对虚拟机内存进行扫描与回收,提高了内存回收的响应速度;且对空闲内存的回收/再分配不涉及Disk I/O,因此也提升了处理效率;回收的同时,考虑了相应struct page映射的修改,使该方案可用于设备直通场景。
附图说明
图1为根据本申请一个实施例的内存回收方法的流程图;
图2为根据本申请又一实施例的内存回收方法的流程图;
图3为根据本申请内存回收过程的示意图;
图4为根据本申请又一实施例的内存回收方法的流程图;
图5为根据本申请EPT映射表和IOMMU映射表回收前的示意图;
图6为根据本申请EPT映射表和IOMMU映射表回收后的示意图;
图7为根据本申请一个实施例的内存回收装置的结构框图;
图8为根据本申请实施例的控制设备的结构框图。
具体实施方式
为使本申请的上述目的、特征和优点能够更为明显易懂,下面结合附图对本申请的具体实施例做详细的说明。
现有的内存回收方法,通过改变内存的映射来动态地回收虚拟机的内存,但是设备侧DMA要求虚拟机在运行过程中,内存映射完全不能改变。
针对上述问题,本申请提供一种解决方案,通过确定虚拟机的空闲内存区域,来回收虚拟机的空闲内存,从而无需改变虚拟机运行过程中正在使用的内存映射。
为了便于理解,在此对下述可能使用的术语进行解释:
内存回收:宿主机将内存分配给虚拟机后,在虚拟机无法充分利用时将多余的内存收回
内存弹性:宿主机能够按需分配给虚拟机所用内存
DMA:Direct Memory Access,指I/O设备可直接访问主内存,而无需CPU干预
设备直通:在虚拟化场景下,让宿主机硬件可以直接被VM使用的技术
设备侧缺页中断:在虚拟化场景下,直通设备在进行DMA时访问虚拟机内存时,若宿主机未建立虚拟机相应内存到宿主机内存的映射,则DMA会失效。在硬件和软件支持的情况下,会触发设备侧缺页中断,由宿主机建立好内存映射后,对DMA进行重放。
内存管理元数据:记录操作系统中每个内存页帧的状态的元数据,在Linux场景下,即为struct page所在内存区域,以及struct page中的内容
GVA:虚拟机内部程序所看到的虚拟地址空间
GPA:虚拟机所看到的物理内存空间
HPA:宿主机物理内存空间
EPT:Extended Page Table,在虚拟化场景下用来建立虚拟机GPA与宿主机HPA映射的页表
IOMMU:在虚拟化场景下,用来建立IOVA(一般是虚拟机GPA)与HPA映射的页表
Guest:指虚拟机
Host:指宿主机
需要说明的是,不同运行环境下,内存的表现形式或对应结构会有所不同;本申请中,是以Linux环境下的具体实施方式为例进行说明的。
本申请实施例提供了一种内存回收方法,该方法可以由内存回收装置来执行,该内存回收装置可以集成在电脑、服务器、计算机、服务器集群、数据中心等电子设备中。如图1所示,其为根据本申请一个实施例的内存回收方法的流程图;其中,所述内存回收方法,包括:
S100,获取虚拟机的内存管理元数据信息和解析该内存管理元数据信息的内存解析函数;
S200,基于所述内存解析函数和所述内存管理元数据信息,回收所述虚拟机的空闲内存。
本实施例中,虚拟机运行在宿主机内,一个宿主机内可以设置一个或多个虚拟机,不同虚拟机之间是相互隔离的。同虚拟机之间的隔离是通过防止分配到其他虚拟机的资源(CPU、I/O设备)访问到本虚拟机的物理地址。每个虚拟机都会有自己独立的物理地址空间,即GPA(Guest Physical Address)空间,该空间不同于主机物理地址空间,即HPA(HostPhysical Address)空间。
在一种实施方式中,所述虚拟机为多个时,基于与所述虚拟机对应的所述内存解析函数和所述内存管理元数据信息,回收该虚拟机的空闲内存。
尽管处理器的最小可寻址单位通常为字(甚至字节),linus内核仍然把物理页作为内存管理的基本单位,用struct page结构表示系统中的每个物理页;内存管理时通常以页为单位进行处理。
需要说明的是,不同的体系结构中,支持的物理页的大小也是不尽相同,还有些体系结构甚至支持几种不同的物理页大小。大多数32位体系结构支持4KB的物理页,而64位体系结构一般会支持8KB的物理页。
基于物理页的大小和宿主机的物理内存的大小,可以将物理内存划分为若干个物理页。例如,在支持4KB物理页大小并有1GB物理内存的宿主机上,物理内存会被划分为262144个物理页。
现有的内存使用方式中,在所述虚拟机的GPA空间内,一般会将具有相同特性的物理页集中在一起,例如,将空闲的物理页放置在一起,这样在解析空闲的物理页时,内存的物理页的组织方式,会给出物理页的数量,只需要解析出头页(第一个物理页)是否为空闲的物理页,结合物理页的数量就可以确定该虚拟机的所有空闲的物理页。
需要说明的是,对于虚拟机的GPA空间,其空闲的物理页一般为DMA的缓冲区,
这样,对虚拟机的空闲的内存进行回收,从而避开了对设备侧DMA无法改变内存映射的问题,且无需额外的硬件或半虚拟化驱动程序。
本申请实施例提供了另一种内存回收方法,其与前述所述的内存回收方法类似,不同之处在于,如图2所示,所述S200,基于所述内存解析函数和所述内存管理元数据信息,回收所述虚拟机的空闲内存之后,所述方法还包括:
S300,响应于所述虚拟机对已回收的空闲内存的分配请求,对所述虚拟机分配新的物理内存。
这样,已回收的空闲内存再次被虚拟机分配用于程序运行或DMA缓冲区时,通过分配请求,来重建这部分映射,因此能够有效规避DMA缓冲区没有映射,进而导致的设备侧缺页问题。
在一种实施方式中,虚拟机的分配请求所对应的空闲内存,为所有从该虚拟机回收的空闲内存的一部分;在此情况下,对所述虚拟机分配新的物理内存时,仅分配所述虚拟机请求的该部分内存。
在一种实施方式中,在对应的物理内存未被占用的情况下。对所述虚拟机分配新的物理内存,为从该虚拟机回收的物理内存。这样可以最大程度恢复虚拟机的该部分的空闲的原有参数,从而减少内存回收对DMA等的可能影响。
在一种实施方式中,所述内存解析函数为所述虚拟机编译后的BPF字节码。这样,基于eBPF程序实现内存解析函数的编译,可以直接在现有的虚拟机上完成,而无需虚拟机提供额外的硬件或额外的半虚拟化驱动程序。
如图3所示,其为内存回收过程的示意图,结合该图对下述内容进行详细阐述。
本申请实施例提供了另一种内存回收方法,其与前述所述的内存回收方法类似,不同之处在于,所述S100,获取虚拟机的内存管理元数据信息和解析该内存管理元数据信息的内存解析函数,包括:
当所述虚拟机启动后对预先编写的所述内存解析函数的eBPF源程序进行编译时,接收所述虚拟机注入的内存管理元数据信息和编译后的所述内存解析函数的BPF字节码。
本实施例中,预先编写内存解析函数的eBPF源程序,放入虚拟机的文件系统中;虚拟机启动后,将文件系统中的内存解析函数的eBPF源程序编译为BPF字节码,并将编译后的内存解析函数的BPF字节码注入宿主机;通过该方式,宿主机获取了虚拟机的内存解析函数的BPF字节码。
在一种实施方式中,虚拟机的内存管理元数据信息包括struct page物理页信息和对应的struct page结构体信息;所述struct page结构体为内核为每个struct page物理页创建的,所述struct page结构体包括字段flags,用于描述物理页的状态和其他信息,该字段flags主要分为4部分,其中标志位flag(物理页的状态标识)向高位增长,其余位字段section(主要用于稀疏内存模型SPARSEMEM)、node(NUMA节点号,标识该物理页属于哪一个节点)、zone(内存域标志,标识该物理页属于哪一个zone)向低位增长,中间存在空闲位。
本实施例中,虚拟机执行一次启动后才会将内存管理元数据信息和内存解析函数注入宿主机,宿主机只能够扫描已经注入内存管理元数据信息和内存解析函数的虚拟机的struct page物理页。也即是说,宿主机只能够回收已经启动过的虚拟机的空闲内存。
需要说明的是,宿主机对应的虚拟机可以为多个;同时,宿主机只能够扫描已经启动后的虚拟机的struct page物理页。另外,虚拟机只有在宿主机已经分配了内存的情况下,才能进行启动。
例如,宿主机内设置有11个虚拟机,宿主机的物理内存为100G,虚拟机需要分配的内存为10G,此种情况下,可以先选取10个虚拟机分配对应的10G内存,然后依次启动所述10个虚拟机并同时回收其空闲内存,直至回收的空闲内存达到10G为止,然后将回收的10G内存分配给第11个虚拟机,从而完成了全部虚拟机的内存分配工作。
本申请实施例提供了另一种内存回收方法,其与前述所述的内存回收方法类似,不同之处在于,如图4所示,
所述S200,基于所述内存解析函数和所述内存管理元数据信息,回收所述虚拟机的空闲内存中,通过所述内存解析函数和所述内存管理元数据信息扫描出所述虚拟机的空闲内存后,回收所述虚拟机的空闲内存。
所述内存管理元数据信息,包括struct page物理页信息和对应的struct page结构体信息;
所述通过所述内存解析函数和所述内存管理元数据信息扫描出所述虚拟机的空闲内存后,回收所述虚拟机的空闲内存,包括:
S201,扫描所述虚拟机的struct page物理页信息,调用所述内存解析函数解析与对应的struct page结构体信息,确定空闲的struct page物理页;
S202,删除EPT映射表和IOMMU映射表中空闲的所述struct page物理页的映射,并将EPT映射表和IOMMU映射表中struct page结构体物理页的映射的权限位置为只读,所述struct page结构体物理页为存储空闲的所述struct page物理页对应的struct page结构体信息的struct page物理页。
这样,虚拟机仅在启动初期,向宿主机传递其的内存管理元数据信息及内存解析函数;之后,宿主机可以利用该信息主动扫描虚拟机内的空闲内存区域,回收虚拟机的空闲内存;且在回收虚拟机空闲内存,清除空闲页内存映射的同时,清除内存管理元数据的内存映射,这样来保证我们所回收的内存一定为虚拟机内的空闲内存。
在一种实施方式中,调用所述内存解析函数解析与对应的struct page结构体信息,确定空闲的struct page物理页,即通过调用所述内存解析函数识别struct page结构体中的标志位flag,将预设标识的标志位flag对应的struct page物理页确定为空闲的struct page物理页。
本实施例中,不同的虚拟机,对于struct page结构体中的标志位flag的标注可能会不同,因此表述“空闲”的标志位flag是预设标识也会不同;例如,一个虚拟机中,structpage结构体中的标志位flag为PG-free表示对应的为空闲的struct page物理页;另一个虚拟机中,struct page结构体中的标志位flag为PG-clean表示对应的为空闲的struct page物理页。
本实施例中,删除EPT映射表和IOMMU映射表中空闲的所述struct page物理页的映射,并将EPT映射表和IOMMU映射表中struct page结构体物理页的映射的权限位置为只读,所述struct page结构体物理页为存储空闲的所述struct page物理页对应的structpage结构体信息的struct page物理页。
结合图5和图6所示,对于EPT映射表和IOMMU映射表而言,其较为相似,因此本实施例中通过EPT映射表来对内存回收的过程进行示例。在此需要强调的是,图5和图6分别为EPT映射表和IOMMU映射表回收前和回收后的示意图,图中仅是表述其大致过程的简单内容,并未对EPT映射表和IOMMU映射表的具体内容严格对应,因此在理解时,不应以图中的未画出某些表述来认定附图或表述错误。
如图所示,在图5中,可以看出,GPA、HPA、IOVA的struct page物理页之间的映射关系,该映射关系记录在EPT映射表和IOMMU映射表中;且用于描述struct page物理页的struct page结构体也需要存储,其存储于另外的struct page物理页中,储存struct page结构体的struct page物理页,即是上述的struct page结构体物理页。其中,通过连线展示出映射关系的struct page物理页,我们将其认为是空闲的struct page物理页。
回收空闲的struct page物理页时,删除EPT映射表和IOMMU映射表中空闲的所述struct page物理页的映射,也即是图6中Remove EPT Mapping和RemoveIOMMU Mapping所在的虚线连接的struct page物理页。将EPT映射表和IOMMU映射表中struct page结构体物理页的映射的权限位置为只读,也即是将与删除映射的struct page物理页对应的structpage结构体存储位置的struct page物理页的映射的权限位修改为“只读”。
本实施例中,对权限位修改是以struct page物理页为基本单位进行的,也即是说,一旦对某个struct page物理页的映射的权限位修改为“只读”,则该struct page物理页内存储的所有struct page结构体均限制为“只读”。
本实施例中,struct page物理页具有一定的容量,可以存储多个struct page结构体,例如一个4KB的struct page物理页可以存储大小为64B的struct page结构体的数量是64个;该64个struct page结构体对应于64个struct page物理页。这样,struct page结构体物理页的在EPT映射表和IOMMU映射表中的映射的权限位的修改,意味着其中的structpage结构体也同时修改为“只读”,因此需要同时删除对应的64个struct page物理页在EPT映射表和IOMMU映射表中的映射。
由此可以看出,对struct page结构体物理页的修改,是与该struct page结构体物理页对应的struct page物理页相互联动的,需要保持同步;因此若struct page结构体物理页中的64个struct page结构体有一个对应的不是空闲的struct page物理页(即使其余63个是空闲的),则该struct page结构体物理页及其对应的64个struct page物理页均不能进行回收;只有struct page结构体物理页中的64个struct page结构体对一个的均是空闲的struct page物理页,才能对其进行全部回收。
类似地,若需要对已回收的虚拟机分配新的物理内存,即使虚拟机仅需要一个struct page物理页,也应当是同时分配64个struct page物理页。
在一种实施方式中,所述S300中,虚拟机对已回收的空闲内存的分配请求是在所述虚拟机访问所述EPT映射表或所述IOMMU映射表中权限位为只读的struct page结构体物理页的映射时触发的。
其中,若虚拟机需要使用新的内存,则其会访问“只读”的struct page结构体物理页中的对应的struct page结构体,但是这种访问会超出“只读”的权限,从而返回一个page-fault信号,宿主机收到该page-fault信号,即可以认为虚拟机已经对已回收的空闲内存给出了分配请求。
在一种实施方式中,所述对所述虚拟机分配新的物理内存是在所述EPT映射表或所述IOMMU映射表中重新建立空闲的struct page物理页的映射。
这样,struct page结构体物理页的映射的权限位的修改,是考虑虚拟机Kernel内存分配的执行路径后确定的方案,通过该修改,当虚拟机分配内存时,其对该struct page的访问一定会被宿主机拦截(返回的page-fault信号),从而让该页面在虚拟机可用之前,建立好EPT和IOMMU映射,防止DMA失效。
本申请中,虚拟机除启动时向宿主机注入代码与数据之外,无任何其它改动,因此对虚拟机的侵入控制最小,很容易做到软件兼容;宿主机主动自发地对虚拟机内存状态进行扫描,而无需等待虚拟机的响应,因此相较于传统的PV方案,可以做到更好的实时性;本方案为在已有架构上的纯软件方案,不依赖支持设备侧Page Fault的特定硬件,因此可以硬件兼容。
本申请中,通过虚拟机向宿主机注入内存管理元数据信息,以及内存管理元数据解析函数,让宿主机能够实时、主动地对虚拟机内存进行扫描与回收,提高了内存回收的响应速度;且对空闲内存的回收/再分配不涉及Disk I/O,因此也提升了处理效率;回收的同时,考虑了相应struct page映射的修改,使该方案可用于设备直通场景。
本申请实施例提供了一种内存回收装置,用于执行本申请上述内容所述的内存回收方法,以下对所述内存回收装置进行详细描述。
如图7所示,所述内存回收装置,包括:
信息获取模块101,其用于获取虚拟机的内存管理元数据信息和解析该内存管理元数据信息的内存解析函数;
内存回收模块102,其用于基于所述内存解析函数和所述内存管理元数据信息,回收所述虚拟机的空闲内存。
在一种实施方式中,所述装置还包括:
内存分配模块103,其用于响应于所述虚拟机对已回收的空闲内存的分配请求,对所述虚拟机分配新的物理内存。
所述信息获取模块101的操作执行过程中,所述内存解析函数为所述虚拟机编译后的BPF字节码。
所述信息获取模块101还用于:
当所述虚拟机启动后对预先编写的所述内存解析函数的eBPF源程序进行编译时,接收所述虚拟机注入的内存管理元数据信息和编译后的所述内存解析函数的BPF字节码。
所述内存回收模块102还用于:通过所述内存解析函数和所述内存管理元数据信息扫描出所述虚拟机的空闲内存后,回收所述虚拟机的空闲内存。
在一种实施方式中,所述内存管理元数据信息,包括struct page物理页信息和对应的struct page结构体信息;所述内存回收模块102还用于:
扫描所述虚拟机的struct page物理页信息,调用所述内存解析函数解析与对应的struct page结构体信息,确定空闲的struct page物理页;
删除EPT映射表和IOMMU映射表中空闲的所述struct page物理页的映射,并将EPT映射表和IOMMU映射表中struct page结构体物理页的映射的权限位置为只读,所述structpage结构体物理页为存储空闲的所述struct page物理页对应的struct page结构体信息的struct page物理页。
所述内存分配模块103的操作执行过程中,所述虚拟机对已回收的空闲内存的分配请求是在所述虚拟机访问所述EPT映射表或所述IOMMU映射表中权限位为只读的structpage结构体物理页的映射时触发的。
所述内存分配模块103的操作执行过程中,所述对所述虚拟机分配新的物理内存是在所述EPT映射表或所述IOMMU映射表中重新建立空闲的struct page物理页的映射。
本申请的上述实施例提供的内存回收装置与本申请实施例提供的内存回收方法出于相同的发明构思,具有与其存储的应用程序所采用、运行或实现的方法相同的有益效果。
以上描述了内存回收装置的内部功能和结构,如图8所示,实际中,该内存回收装置可实现为控制设备,包括:存储器301及处理器303。
存储器301,可被配置为存储程序。
另外,存储器301,还可被配置为存储其它各种数据以支持在控制设备上的操作。这些数据的示例包括用于在控制设备上操作的任何应用程序或方法的指令,联系人数据,电话簿数据,消息,图片,视频等。
存储器301可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。
处理器303,耦合至存储器301,用于执行存储器301中的程序,以用于:
获取虚拟机的内存管理元数据信息和解析该内存管理元数据信息的内存解析函数;
基于所述内存解析函数和所述内存管理元数据信息,回收所述虚拟机的空闲内存。
在一种实施方式中,处理器303具体用于:
响应于所述虚拟机对已回收的空闲内存的分配请求,对所述虚拟机分配新的物理内存。
在一种实施方式中,所述内存解析函数为所述虚拟机编译后的BPF字节码。
在一种实施方式中,处理器303具体用于:
当所述虚拟机启动后对预先编写的所述内存解析函数的eBPF源程序进行编译时,接收所述虚拟机注入的内存管理元数据信息和编译后的所述内存解析函数的BPF字节码。
在一种实施方式中,处理器303具体用于:通过所述内存解析函数和所述内存管理元数据信息扫描出所述虚拟机的空闲内存后,回收所述虚拟机的空闲内存。
在一种实施方式中,所述内存管理元数据信息,包括struct page物理页信息和对应的struct page结构体信息;基于此,处理器303具体用于:
扫描所述虚拟机的struct page物理页信息,调用所述内存解析函数解析与对应的struct page结构体信息,确定空闲的struct page物理页;
删除EPT映射表和IOMMU映射表中空闲的所述struct page物理页的映射,并将EPT映射表和IOMMU映射表中struct page结构体物理页的映射的权限位置为只读,所述structpage结构体物理页为存储空闲的所述struct page物理页对应的struct page结构体信息的struct page物理页。
在一种实施方式中,处理器303具体用于:
所述虚拟机对已回收的空闲内存的分配请求是在所述虚拟机访问所述EPT映射表或所述IOMMU映射表中权限位为只读的struct page结构体物理页的映射时触发的。
在一种实施方式中,处理器303具体用于:
所述对所述虚拟机分配新的物理内存是在所述EPT映射表或所述IOMMU映射表中重新建立空闲的struct page物理页的映射。
本申请中,图8中仅示意性给出部分组件,并不意味着服务端设备只包括图8所示组件。
本实施例提供的控制设备,与本申请实施例提供的内存回收方法出于相同的发明构思,具有与其存储的应用程序所采用、运行或实现的方法相同的有益效果。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
Claims (11)
1.一种内存回收方法,其特征在于,包括:
获取虚拟机的内存管理元数据信息和解析该内存管理元数据信息的内存解析函数;
基于所述内存解析函数和所述内存管理元数据信息,回收所述虚拟机的空闲内存。
2.根据权利要求1所述的方法,其特征在于,所述基于所述内存解析函数和所述内存管理元数据信息,回收所述虚拟机的空闲内存之后,所述方法还包括:
响应于所述虚拟机对已回收的空闲内存的分配请求,对所述虚拟机分配新的物理内存。
3.根据权利要求1所述的方法,其特征在于,所述内存解析函数为所述虚拟机编译后的BPF字节码。
4.根据权利要求1所述的方法,其特征在于,所述获取虚拟机的内存管理元数据信息和解析该内存管理元数据信息的内存解析函数,包括:
当所述虚拟机启动后对预先编写的所述内存解析函数的eBPF源程序进行编译时,接收所述虚拟机注入的内存管理元数据信息和编译后的所述内存解析函数的BPF字节码。
5.根据权利要求2所述的方法,其特征在于,所述基于所述内存解析函数和所述内存管理元数据信息,回收所述虚拟机的空闲内存中,通过所述内存解析函数和所述内存管理元数据信息扫描出所述虚拟机的空闲内存后,回收所述虚拟机的空闲内存。
6.根据权利要求5所述的方法,其特征在于,所述内存管理元数据信息,包括structpage物理页信息和对应的struct page结构体信息;所述通过所述内存解析函数和所述内存管理元数据信息扫描出所述虚拟机的空闲内存后,回收所述虚拟机的空闲内存,包括:
扫描所述虚拟机的struct page物理页信息,调用所述内存解析函数解析与对应的struct page结构体信息,确定空闲的struct page物理页;
删除EPT映射表和IOMMU映射表中空闲的所述struct page物理页的映射,并将EPT映射表和IOMMU映射表中struct page结构体物理页的映射的权限位置为只读,所述structpage结构体物理页为存储空闲的所述struct page物理页对应的struct page结构体信息的struct page物理页。
7.根据权利要求6所述的方法,其特征在于,所述虚拟机对已回收的空闲内存的分配请求是在所述虚拟机访问所述EPT映射表或所述IOMMU映射表中权限位为只读的struct page结构体物理页的映射时触发的。
8.根据权利要求6所述的方法,其特征在于,所述对所述虚拟机分配新的物理内存是在所述EPT映射表或所述IOMMU映射表中重新建立空闲的struct page物理页的映射。
9.一种控制设备,其特征在于,包括:存储器和处理器;
所述存储器,其用于存储程序;
所述处理器,耦合至所述存储器,用于执行所述程序,以用于:
获取虚拟机的内存管理元数据信息和解析该内存管理元数据信息的内存解析函数;
基于所述内存解析函数和所述内存管理元数据信息,回收所述虚拟机的空闲内存。
10.一种内存回收装置,其特征在于,包括:
信息获取模块,其用于获取虚拟机的内存管理元数据信息和解析该内存管理元数据信息的内存解析函数;
内存回收模块,其用于基于所述内存解析函数和所述内存管理元数据信息,回收所述虚拟机的空闲内存。
11.根据权利要求10所述的装置,其特征在于,还包括:
内存分配模块,其用于响应于所述虚拟机对已回收的空闲内存的分配请求,对所述虚拟机分配新的物理内存。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210197905.7A CN114840330A (zh) | 2022-03-01 | 2022-03-01 | 一种内存回收方法、装置及控制设备 |
PCT/CN2023/075201 WO2023165308A1 (zh) | 2022-03-01 | 2023-02-09 | 一种内存回收方法、装置及控制设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210197905.7A CN114840330A (zh) | 2022-03-01 | 2022-03-01 | 一种内存回收方法、装置及控制设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114840330A true CN114840330A (zh) | 2022-08-02 |
Family
ID=82561832
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210197905.7A Pending CN114840330A (zh) | 2022-03-01 | 2022-03-01 | 一种内存回收方法、装置及控制设备 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN114840330A (zh) |
WO (1) | WO2023165308A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023165308A1 (zh) * | 2022-03-01 | 2023-09-07 | 阿里巴巴(中国)有限公司 | 一种内存回收方法、装置及控制设备 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9940228B2 (en) * | 2012-06-14 | 2018-04-10 | Vmware, Inc. | Proactive memory reclamation for java virtual machines |
CN105159742A (zh) * | 2015-07-06 | 2015-12-16 | 北京星网锐捷网络技术有限公司 | 一种虚拟机pci设备透传方法和系统 |
CN106155933B (zh) * | 2016-07-06 | 2019-02-05 | 乾云众创(北京)信息科技研究院有限公司 | 一种基于KSM及Pass-through相结合的虚拟机内存共享方法 |
CN107885666B (zh) * | 2016-09-28 | 2021-07-20 | 华为技术有限公司 | 一种内存管理方法和装置 |
CN106843756B (zh) * | 2017-01-13 | 2019-12-31 | 中国科学院信息工程研究所 | 基于页面分类的内存页面回收方法及系统 |
US10346313B1 (en) * | 2017-01-21 | 2019-07-09 | Virtuozzo International Gmbh | Memory reclaim management for virtual machines |
CN114840330A (zh) * | 2022-03-01 | 2022-08-02 | 阿里巴巴(中国)有限公司 | 一种内存回收方法、装置及控制设备 |
-
2022
- 2022-03-01 CN CN202210197905.7A patent/CN114840330A/zh active Pending
-
2023
- 2023-02-09 WO PCT/CN2023/075201 patent/WO2023165308A1/zh unknown
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023165308A1 (zh) * | 2022-03-01 | 2023-09-07 | 阿里巴巴(中国)有限公司 | 一种内存回收方法、装置及控制设备 |
Also Published As
Publication number | Publication date |
---|---|
WO2023165308A1 (zh) | 2023-09-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10684800B2 (en) | Facilitating processing within computing environments supporting pageable guests | |
US8261267B2 (en) | Virtual machine monitor having mapping data generator for mapping virtual page of the virtual memory to a physical memory | |
US8453015B2 (en) | Memory allocation for crash dump | |
US8656222B2 (en) | Method and system for recording a selected computer process for subsequent replay | |
KR20210089150A (ko) | 호스트 컴퓨팅 디바이스 가상 메모리에 의해 지원되는 가상 머신 메모리의 더 빠른 액세스 | |
CN107807839B (zh) | 一种修改虚拟机内存数据的方法、装置及电子设备 | |
US9454489B2 (en) | Exporting guest spatial locality to hypervisors | |
WO2022193768A1 (zh) | 内存读写指令的执行方法及计算设备 | |
WO2023165308A1 (zh) | 一种内存回收方法、装置及控制设备 | |
JP5531476B2 (ja) | 情報処理装置及び情報処理プログラム | |
US11656982B2 (en) | Just-in-time virtual per-VM swap space | |
US10733109B1 (en) | Memory reclaim management for virtual machines | |
US10394596B2 (en) | Tracking of memory pages by a hypervisor | |
US20230229609A1 (en) | Iommu-based direct memory access (dma) tracking for enabling live migration of virtual machines (vms) using passthrough physical devices | |
CN115061781A (zh) | 页表处理方法和装置 | |
US20230027307A1 (en) | Hypervisor-assisted transient cache for virtual machines | |
US12013799B2 (en) | Non-interrupting portable page request interface | |
US11899572B2 (en) | Systems and methods for transparent swap-space virtualization | |
CN112363796B (zh) | 一种虚拟机共享内存分配方法、装置及电子设备 | |
US20230029331A1 (en) | Dynamically allocatable physically addressed metadata storage | |
CN109324809B (zh) | 一种数据处理方法及装置 | |
CN115904630A (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 |