CN112579251B - 虚拟机内存管理的方法及设备 - Google Patents

虚拟机内存管理的方法及设备 Download PDF

Info

Publication number
CN112579251B
CN112579251B CN201910953083.9A CN201910953083A CN112579251B CN 112579251 B CN112579251 B CN 112579251B CN 201910953083 A CN201910953083 A CN 201910953083A CN 112579251 B CN112579251 B CN 112579251B
Authority
CN
China
Prior art keywords
memory
virtual machine
operating system
exchangeable
module
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
Application number
CN201910953083.9A
Other languages
English (en)
Other versions
CN112579251A (zh
Inventor
王志钢
蒋毅飞
马剑
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN201910953083.9A priority Critical patent/CN112579251B/zh
Priority to EP20870358.7A priority patent/EP4030289A4/en
Priority to PCT/CN2020/114446 priority patent/WO2021057489A1/zh
Publication of CN112579251A publication Critical patent/CN112579251A/zh
Priority to US17/656,699 priority patent/US20220214907A1/en
Application granted granted Critical
Publication of CN112579251B publication Critical patent/CN112579251B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation 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/5016Allocation 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/073Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in a memory management context, e.g. virtual memory or cache management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/0284Multiple user address space allocation, e.g. using different base addresses
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation 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/5022Mechanisms to release resources
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45583Memory management, e.g. access or allocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1032Reliability improvement, data loss prevention, degraded operation etc
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1041Resource optimization
    • G06F2212/1044Space efficiency improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/15Use in a specific computing environment
    • G06F2212/152Virtualized environment, e.g. logically partitioned system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/20Employing a main memory using a specific memory technology
    • G06F2212/205Hybrid memory, e.g. using both volatile and non-volatile memory

Abstract

本申请提供了虚拟机内存管理的方法及设备,方法包括:从分配给虚拟机的总内存中识别出虚拟机的非操作系统内存;总内存包括虚拟机的内存和虚拟机监控器的管理内存;虚拟机的内存包括虚拟机的操作系统的内存和虚拟机的非操作系统的内存;将虚拟机的非操作系统的内存作为可交换内存;将可交换内存中的数据存放到非易失性存储器。实施本申请有利于避免在虚拟机超量提交场景下计算机的性能的明显下降的问题,提升虚拟机运行的稳定性,提升用户使用体验。

Description

虚拟机内存管理的方法及设备
技术领域
本申请涉及虚拟机技术领域,尤其涉及虚拟机内存管理的方法及设备。
背景技术
虚拟化技术为云场景的核心技术,在部署有多个虚拟机(Virtual Machine,VM)的系统中,多个虚拟机共享同一个物理主机(Physical Machine,PM)的物理资源,如处理器、内存、磁盘和网络设备等。从而可实现以VM为粒度将一台物理主机的物理资源共享给多个用户使用,使多个用户能在安全隔离的前提下方便灵活地使用物理资源,极大提升物理资源的利用率。
在虚拟化技术中,分配给每台虚拟机的内存都是固定的。在云计算平台中,不管是从虚拟机还是从物理主机的维度来看,内存使用使用率相对都比较低,例如单台物理主机的内存使用率平均只有40%。通过增加同一个物理主机的虚拟机数量,能有效提升单台物理主机上的虚拟机密度和物理内存地使用率。在虚拟机超量提交(over summit)场景下,为了保证各个虚拟机的性能和服务质量,虚拟机监控器会根据虚拟机不断变化的外部负载为各个虚拟机动态地分配内存资源。由于不同虚拟机的负载高峰时间可能不同,在绝大多数时间内,物理内存都是充裕的。但是在某些情况下,也可能会发生实际的内存需求大于物理内存的场景。
当物理内存不足时,可利用一部分硬盘存储空间作为内存来使用,操作系统在给虚拟机分配的全部内存中选择部分内容存放到磁盘上。由于磁盘的访问速度通常比内存的访问速度慢几个数量级,当需要使用这部分内容时,计算机的性能明显下降,极大影响用户的使用体验。
发明内容
本申请实施例提供了虚拟机内存管理的方法及设备,有利于避免在虚拟机超量提交场景下计算机的性能的明显下降的问题,提升虚拟机运行的稳定性,提升用户使用体验。
第一方面,本申请实施例提供了一种虚拟机内存管理的方法,方法包括:从分配给虚拟机(VM)的总内存中识别出所述虚拟机的非操作系统内存;该总内存包括虚拟机的内存和虚拟机监控器(Hypervisor)的内存;虚拟机的内存用于存放虚拟机的代码和和所述虚拟机运行过程中产生的数据,虚拟机监控器的管理内存用于存放虚拟机监控器管理虚拟机运行所需的数据;虚拟机的内存包括虚拟机的操作系统的内存和虚拟机的非操作系统的内存;虚拟机的操作系统的内存用于存放所述虚拟机的操作系统的代码和数据,虚拟机的非操作系统的内存表示所述虚拟机的内存中,除所述虚拟机的操作系统的内存之外剩余的内存;从所述总内存中识别出所述虚拟机的非操作系统的内存;将所述虚拟机的非操作系统的内存作为可交换内存;所述可交换内存表示允许进行内存交换的内存;将所述可交换内存中的数据存放到非易失性存储器。
也就是说,在虚拟机启动时,物理主机的操作系统(Host OS)会给该虚拟机分配虚拟机的内存规格(即总内存),该内存规格表示允许该虚拟机申请使用的总内存大小。该内存规格涵盖了虚拟机的内存和Hypervisor的管理内存,虚拟机的内存为提供给虚拟机申请使用的内存大小,Hypervisor的管理内存为提供给Hypervisor申请使用的内存大小。例如,分配的内存规格为4G,其中虚拟机的内存的大小占了3.5G,Hypervisor的管理内存的大占了0.5G。当然,这里的示例仅用于解释本申请而非限定。此时,物理内存中并没有真正为该虚拟机实际分配如内存规格大小(例如,内存规格为3G)的存储空间,而是待虚拟机的内存和Hypervisor的管理内存实际申请内存时,再根据申请建立虚拟机的内存或和Hypervisor的管理内存与物理内存中的内存页的映射关系。
其中,虚拟机的内存涵盖了虚拟机的操作系统的内存和虚拟机的非操作系统的内存。本文中,虚拟机的操作系统又可称为客户机操作系统(Guest operating system,GuestOS),Guest OS的内存为提供给Guest OS自身申请使用的内存大小。相应的,本文中虚拟机的非操作系统可相应称为非Guest OS,非Guest OS的内存为虚拟机的内存除Guest OS的内存之外剩余的内存。例如,虚拟机的内存大小为3.5G,其中GuestOS的内存大小占了1G,非GuestOS的内存大小占了2.5G。当然,这里的示例仅用于解释本申请而非限定。非GuestOS的内存例如可以提供给GuestOS中的应用程序申请使用,也就是说非GuestOS的内存可用于存放应用程序的代码和数据。
Hypervisor的管理内存中存放的数据例如可以包括描述各种硬件设备(比如CPU、内存、网卡、磁盘、显卡等设备)的数据结构、每个硬件设备各自的管理信息等。以CPU(即central processing unit,中央处理器)为例,其管理信息里面会记录包括CPU的数量、模拟的CPU硬件架构描述等信息。Hypervisor的管理内存中存放的数据Hypervisor的管理内存例如还可以包括显示用缓存、输入输出(Input/Output,IO)用缓存等缓存数据。Hypervisor可用于协调虚拟机对内存、CPU、网卡、磁盘等这些硬件设备的共享访问,而虚拟机启动时每个虚拟机都有对应的数据结构、缓存等数据需要存储,所以要创建虚拟机时,需要在分配的内存规格中涵盖虚拟机内存和Hypervisor的管理内存。
虚拟机的操作系统的内存用于存放所述虚拟机的操作系统的代码和数据,其中,虚拟机操作系统的内存存放的数据例如可以是编译库、应用程序运行需要的堆栈数据、Guest OS内核模块运行时需要的数据,等等。
虚拟机的非操作系统的内存例如可用于存放运行在Guest OS上的各种应用程序的相关代码和数据。应用程序的具体数据例如可以包括数据库程序的加载到内存中的数据、文字处理程序打开的文件数据,等等。
本文中,为了描述方便,有时也将分配给VM的总内存简称为“虚拟机进程内存”,将Hypervisor的管理内存简称为“Hypervisor管理内存”,将VM的内存简称为“虚拟机内存”,将VM的操作系统的内存简称为“Guest OS内存”,将VM的非操作系统的内存称为“非GuestOS内存”或者称为虚拟机常规(Virtual Machine Normal,VM-Normal)内存。
本申请方案中,限定非Guest OS内存为可交换内存,当物理内存不足时,仅允许可交换内存进行内存交换,即将可交换内存中的部分或全部数据存放到非易失性存储器(例如磁盘)的交换空间,而不允许其他的内存(例如Hypervisor管理内存以及Guest OS内存)进行内存交换。这样,一方面,通过基于一部分内存而不是全局的内存进行内存交换,从而能释放出一定的内存空间,优化系统内存占用;另一方面,诸如Hypervisor管理内存或Guest OS内存中的数据如果被交换到磁盘,当需要重新访问这部分的内存页时,从磁盘对这部分的数据进行访问会导致整个虚拟机进程长时间地等待数据访问,进而导致出现用户业务进程大幅波动的严重性能问题甚至稳定性问题,而本申请由于只允许诸如应用程序的内存等非Guest OS内存被交换到磁盘,而非Guest OS内存对系统性能的影响相对较小,业务迟滞时用户可接受性高,所以能够避免在虚拟机超量提交场景下计算机的性能的明显下降的问题,提高虚拟机运行的稳定性,提升用户使用体验。
需要注意的是,在本申请各个方面及各个可能的实施例中,交换(swap)并非指的是通常意义中的交换(exchange),本申请中的交换(swap)指的是内存管理领域中的内存交换(memory swapping),即将内存中的数据转移至磁盘上,或者可以理解为将存储在内存中的数据变更为存储在磁盘上。
基于第一方面,在一些可能的实施例中,从所述总内存中识别出所述虚拟机的非操作系统的内存,包括:从所述分配给所述虚拟机的总内存中,识别出所述虚拟机的内存;从所述虚拟机的内存中,识别出所述虚拟机的非操作系统的内存作为所述可交换内存。
本申请实施例中,诸如Hypervisor的管理内存以及Guest OS内存也可统称为关键内存,诸如非Guest OS内存也可称为非关键内存,可以看到,本申请技术方案的落脚点在于对非关键内存的识别,将非关键内存作为允许进行内存交换的内存。通过在虚拟机进程内存中识别出虚拟机内存,以及通过在虚拟机内存中识别出非操作系统内存,提高了非关键内存的识别效率,当物理内存紧张时将可根据非关键内存进行内存交换,保证虚拟机运行的可靠性,提升用户使用体验。
基于第一方面,在一些可能的实施例中,所述从所述分配给所述虚拟机的总内存中,识别出所述虚拟机的内存之后,还包括:对所述虚拟机的操作系统的内存和所述虚拟机的非操作系统的内存均增加标记信息;所述标记信息表示允许被标记的内存中的数据进行所述内存交换;这样,可进一步从所述虚拟机的内存中,识别出所述虚拟机的非操作系统的内存;删除所述虚拟机的操作系统的内存的标记信息,同时保留所述虚拟机的非操作系统的内存的标记信息;将所述具有所述标记信息的内存中的部分或全部数据存放到非易失性存储器。
可以看到,本申请实施例中,识别出非关键内存(非Guest OS内存)后,可以确保只有非关键内存带有标记信息,而关键内存(Hypervisor管理内存以及Guest OS内存)将不会带走标记信息。标记信息作为可交换内存的标记,在物理主机的物理内存不足时,只有带标记信息的内存中的数据才有可能被存放到磁盘;没有标记信息的内存中的数据不允许存放到磁盘,从而保证关键内存不被内存交换,保障虚拟机的性能,有利于通过进一步增加虚拟机数量来提高了虚拟机系统中的内存复用率,从而大大提升了用户的使用体验。
基于第一方面,在一些可能的实施例中,所述从所述分配给所述虚拟机的总内存中,识别出所述虚拟机的内存,包括:确定所述分配给所述虚拟机的总内存中的不同内存段的内存用途;所述内存用途包括供所述虚拟机使用和供所述虚拟机监控器使用;将供所述虚拟机使用的所有内存段作为所述虚拟机的内存。
其中,内存段表示由一些内存地址连续的内存页组成的整体,物理内存中通常包括多个内存段。
以QEMU为例,QEMU是一种以通用性公开许可证(General Public License,GPL分发源码的模拟处理器,QEMU模拟了多种内存设备:设备内存模块(pc.ram)、内存直插式存储模块(memdimm)、内存节点(ram-node)。这几种内存设备都可能配置实际的内存段并提供给虚拟机自身使用,因此可以把这几种内存设备配置的内存段都识别为虚拟机内存。
这样,后续可为虚拟机内存打上可交换内存的标记,即标记信息。那么剩下的没有标记的内存则为关键内存,即属于hypervisor管理内存,后续不可发生内存交换。这样就实现了hypervisor管理内存和虚拟机内存的区分。所以实施本申请实施例能够提高虚拟机内存的识别效率,识别出虚拟机内存就可间接地确定了hypervisor管理内存,所以避免了直接对hypervisor管理内存进行识别而可能导致的识别效率低下的问题,保障虚拟机的性能,提高虚拟机运行的稳定性。
基于第一方面,在一些可能的实施例中,所述从所述虚拟机的内存中,识别出所述虚拟机的非操作系统的内存作为所述可交换内存,包括:申请所述虚拟机的内存中的空闲内存,获得所有空闲内存的内存地址;将所述所有空闲内存的内存地址对应的内存作为所述虚拟机的非操作系统的内存(非GuestOS内存),并用作所述可交换内存。
其中,空闲内存表示虚拟机内存中,尚未与物理内存中的内存页建立起映射关系(即尚未实际分配内存页)的内存。
那么,虚拟机内存中,除非GuestOS内存外剩下的内存则为GuestOS内存,即虚拟机内存中剩下的无法被申请的内存为GuestOS内存,从而实现虚拟机内存中GuestOS内存和非GuestOS内存的区分。由于在虚拟机内存识别过程中,GuestOS内存和非GuestOS内存都带上了标记信息,那么在本申请实施例完成对GuestOS内存和非GuestOS内存的区分后,可将GuestOS内存的标记信息去除,从而使GuestOS内存变成不可交换内存。保留非GuestOS内存的标记信息,从而使非GuestOS内存作为可交换内存。所以实施本申请实施例能够提高非关键内存(非GuestOS内存)的识别效率,保障虚拟机的性能,提高虚拟机运行的稳定性。
基于第一方面,在一些可能的实施例中,所述从所述分配给所述虚拟机的总内存中,识别出所述虚拟机的内存,包括:在所述虚拟机的启动阶段,从所述分配给所述虚拟机的总内存中,识别出所述虚拟机的内存;所述从所述虚拟机的内存中,识别出所述虚拟机的非操作系统的内存作为所述可交换内存,包括:在所述虚拟机启动后的运行阶段,从所述虚拟机的内存中,识别出所述虚拟机的非操作系统的内存作为所述可交换内存。
也就是说,实施本申请实施例,在虚拟机初始化启动阶段,创建初始化虚拟机进程,为虚拟机进程分配所需的总内存,即虚拟机进程内存。这样,虚拟机和Hypervisor的相关数据就会被载入到内存中,进而可以在虚拟机进程内存中识别出虚拟机内存。在虚拟机启动完成后,在虚拟机运行中,虚拟机的操作系统(GuestOS)的相关代码数据会被载入到内存中,进而就可以在虚拟机内存中,进一步识别出非GuestOS,例如通过申请空闲内存的方式识别出非GuestOS内存,将非GuestOS内存作为可交换内存。由于提前做了这些识别工作,所以一旦出现物理内存紧张(物理内存不足)的场景时,就能够做出快速响应,根据可交换内存执行内存交换,快速优化内存占用,同时保证整个系统的稳定运行和可靠性。
本申请实施例中,内存交换是指在物理内存剩余可用内存页达到物理内存规定的水位(即物理内存使用紧张,或称物理内存不足)时,可把物理内存的一些内存页的数据存放到非易失性存储器(例如磁盘)上的交换空间,从而使这些内存页腾出内存空间,以满足新的内存申请使用需求。后续在需要使用这些数据的时候,再把这些数据从非易失性存储器(例如磁盘)上的交换空间调回到物理内存。
其中,物理内存规定的水位表示物理内存设定剩余的可用内存页与物理内存总内存页之间的比率。当物理内存规定的水位达到预设阈值时,需要进行内存交换。
也就是说,当所述虚拟机所在物理主机的物理内存中剩余可用的内存页与所述物理内存总内存页之间的比率达到预设阈值时,将所述可交换内存中的数据存放到非易失性存储器。
在一种实施例中,可将物理内存规定水位设为接近0%,此时物理内存处于满负载状态。也就是说,当所述虚拟机所在物理主机的物理内存处于满负载状态时,将所述可交换内存中的数据存放到非易失性存储器;所述满负载状态表示所述物理内存无空闲空间存储新的内存页。
可以看到,在物理内存满负载或者物理内存占用达到一定比例的情况下,均可以采用本申请的方案进行内存交换,有助于根据实际情况进行内存优化设计,提升用户使用体验。
基于第一方面,在一些可能的实施例中,所述方法还包括:如果物理内存使用紧张或不足,在所述虚拟机申请分配内存时,可确定所述申请分配的内存的内存类型;当内存类型属于所述虚拟机监控器的管理内存或所述虚拟机的操作系统的内存时,不触发内存回收;当内存类型属于所述虚拟机的非操作系统的内存时,触发内存回收。
一种实施例中,内存回收的实施过程包括:在物理内存中获取多个内存页;对所述多个些内存页进行过滤,过滤规则包括淘汰不具有标记信息的内存页,保留具有标记信息的内存页;将所述具有标记信息的内存页中的数据存放到非易失性存储器上的交换空间,从而使物理内存释放出存储空间以便于进行新的内存分配。
可以看到,本申请实施例中,在虚拟机运行阶段,当需要在物理内存紧张的时候申请物理内存分配时,可让关键内存和非关键内存在内存回收上进行区别处理。针对非关键内存可触发内存回收操作,以优化内存占用,提高虚拟机系统的运行性能。针对关键内存,在分配物理内存时不触发内存回收操作(即允许关键内存延迟触发内存回收),从而提升内存分配速度,在内存紧张的时候避免了关键内存被交换而导致性能波动问题,提高系统可靠性和稳定性,保障用户使用体验。
基于第一方面,在一些可能的实施例中,可以在虚拟机超量提交的场景下实施本申请方案,即在为虚拟机进程分配总内存之前,可通过功能开关配置虚拟机超量提交功能。虚拟机超量提交是指在物理主机上启动的所有虚拟机的总内存之和超过实际物理内存的大小。通过每台物理主机上的虚拟化平台创建更多的虚拟机,提升物理主机内存资源利用率,降低内存成本。本申请方案可以保证虚拟机的内存在发生内存交换时的虚拟机性能和可靠性。
第二方面,本申请实施例提供了又一种虚拟机内存管理的方法,所述方法包括:从分配给虚拟机的总内存中识别出所述虚拟机的内存;所述总内存包括所述虚拟机的内存和虚拟机监控器的管理内存;所述虚拟机的内存用于存放所述虚拟机的代码和所述虚拟机运行过程中产生的数据,所述虚拟机监控器的管理内存用于存放所述虚拟机监控器管理所述虚拟机所需的数据;将所述虚拟机的内存作为可交换内存;所述可交换内存表示允许进行内存交换的内存;将所述可交换内存中的数据存放到非易失性存储器。
本申请方案中,限定虚拟机的内存为可交换内存,当物理内存不足时,仅允许可交换内存进行内存交换,即将可交换内存中的部分或全部数据存放到非易失性存储器(例如磁盘)的交换空间,而不允许Hypervisor管理内存进行内存交换。这样,一方面,通过基于一部分内存而不是全局的内存进行内存交换,从而能释放出一定的内存空间,优化系统内存占用;另一方面,诸如Hypervisor管理内存如果被交换到磁盘,当需要重新访问这部分的内存页时,从磁盘对这部分的数据进行访问会导致整个虚拟机进程长时间地等待数据访问,进而导致出现用户业务进程大幅波动的严重性能问题甚至稳定性问题,而本申请由于只允许诸如应用程序的内存等非Guest OS内存以及Guest OS内存被交换到磁盘,在一定程度上也能保证虚拟机运行的稳定性,提升用户使用体验。
第三方面,本申请实施例提供了一种用于虚拟机内存管理的设备,所述设备包括:可交换内存确定模块,用于从分配给虚拟机的总内存中识别出所述虚拟机的非操作系统内存;所述总内存包括所述虚拟机的内存和虚拟机监控器的管理内存;所述虚拟机的内存用于存放所述虚拟机的代码和所述虚拟机运行过程中产生的数据,所述虚拟机监控器的管理内存用于存放所述虚拟机监控器管理所述虚拟机所需的数据;所述虚拟机的内存包括所述虚拟机的操作系统的内存和所述虚拟机的非操作系统的内存;所述虚拟机的操作系统的内存用于存放所述虚拟机的操作系统的代码和数据,所述虚拟机的非操作系统的内存表示所述虚拟机的内存中,除所述虚拟机的操作系统的内存之外剩余的内存;所述可交换内存确定模块还用于,将所述虚拟机的非操作系统的内存作为可交换内存;所述可交换内存表示允许进行内存交换的内存;内存交换模块,用于将所述可交换内存中的数据存放到非易失性存储器。
该设备可通过各功能模块实现如第一方面任意实施例所描述的方法。
第四方面,本申请实施例提供了又一种虚拟机内存管理的设备,所述设备包括:可交换内存确定模块,用于从分配给虚拟机的总内存中识别出所述虚拟机的内存;所述总内存包括所述虚拟机的内存和虚拟机监控器的管理内存;所述虚拟机的内存用于存放所述虚拟机的代码和所述虚拟机运行过程中产生的数据,所述虚拟机监控器的管理内存用于存放所述虚拟机监控器管理所述虚拟机所需的数据;所述可交换内存确定模块还用于,从所述总内存中识别出所述虚拟机的内存;内存交换模块,用于将所述虚拟机的内存作为可交换内存;所述可交换内存表示允许进行内存交换的内存。
该设备可通过各功能模块实现如第二方面所描述的方法。
第五方面,本申请实施例提供了一种计算机设备,包括:至少一个处理器和存储器;所述处理器和所述存储器通过总线连接或者耦合在一起;所述存储器用于存储一个或多个计算机程序,所述一个或多个计算机程序包括指令;所述处理器用于执行所述一个或多个计算机程序以实现如第一方面任意实施例所描述的方法。
第六方面,本申请实施例提供了又一种计算机设备,包括:至少一个处理器和存储器;所述处理器和所述存储器通过总线连接或者耦合在一起;所述存储器用于存储一个或多个计算机程序,所述一个或多个计算机程序包括指令;所述处理器用于执行所述一个或多个计算机程序以实现如第二方面所描述的方法。
第七方面,本申请实施例提供了计算机可读存储介质,其上储存有指令,所述指令执行时,使得计算机设备的一个或多个处理器执行第一方面或第二方面任何可能实施例的方法。
第八方面,本申请实施例提供了包括程序代码的计算机程序,所述程序代码在计算机设备上运行时执行第一方面或第二方面任何可能实施例的方法。
可以看到,实施本申请实施例,可预先在虚拟机进程内存中识别非关键内存(如非Guest OS内存)作为可交换内存,当物理内存和交换空间中之间需要进行内存交换时,只需要采用非关键内存中的一些内存页的数据进行内存交换,而不需要采用关键内存(例如Hypervisor管理内存或Guest OS内存)进行内存交换,从而大大降低对整个虚拟机进程和虚拟机系统性能造成的影响,保证了在内存压力大的时候规避性能大幅波动和稳定性问题。还可以看到,本申请实施例由于不需要直接对关键内存(例如Hypervisor管理内存、Guest OS内存等)进行识别,所以能够避免由于关键内存的种类类型的多样化、不确定性导致的识别难题。此外,实施本申请实施例有利于通过增加虚拟机数量来提高了内存使用效率,从而大大提升了用户的使用体验。
附图说明
图1是本申请实施例提供的一种应用虚拟化技术的物理主机的系统架构示意图。
图2是本申请实施例提供的一种虚拟机超量提交的场景下发生内存交换的示意图;
图3是本申请实施例提供的一种实现虚拟机内存管理的方法的设备的结构示意图;
图4是本申请实施例提供的一种虚拟机内存管理的方法的流程示意图;
图5是本申请实施例提供的又一种实现虚拟机内存管理的方法的设备的架构示意图;
图6是本申请实施例提供的一种确定可交换内存的逻辑流程示意图;
图7是本申请实施例提供的又一种实现虚拟机内存管理的方法的设备的架构示意图;
图8是本申请实施例提供的又一种虚拟机内存管理的方法的流程示意图;
图9是本申请实施例提供的又一种实现虚拟机内存管理的方法的设备的架构示意图;
图10是本申请实施例提供的又一种虚拟机内存管理的方法的流程示意图;
图11是本申请实施例提供的又一种实现虚拟机内存管理的方法的设备的架构示意图;
图12是本申请实施例提供的又一种虚拟机内存管理的方法的流程示意图;
图13是本申请实施例提供的一种系统的结构示意图。
具体实施方式
下面将基于附图详细描述本申请的各种实施方案。应理解的是,本说明书并非旨在将本申请限制于那些示例性实施方案。相反,本申请旨在不但覆盖这些示例性实施方案,而且覆盖可以包括在由所附权利要求所限定的本申请的精神和范围之内的各种替选方式、修改方式、等同方式以及其它的实施方案。
本申请提供的虚拟机内存管理的方法可应用于物理主机(或称物理主机)。
参见图1,图1示例性地描述本申请实施例中的一种应用虚拟化技术的物理主机100的系统架构示意图,如图1所示,物理主机100包括服务器的硬件、运行于虚拟环境中的一个或多个虚拟机,以及运行在服务器硬件和虚拟机之间的虚拟机监控器(Hypervisor)。其中:
虚拟机(Virtual Machine,VM)是通过软件模拟的具有完整硬件系统功能的、运行在隔离环境中的完整计算机系统。VM又包括客户机操作系统(Guest operating system,Guest OS)和基于Guest OS的应用程序。Guest OS为在VM中运行的操作系统,例如Guest OS可以具体为内核态OS或者用户态OS。如图示中以VM1和VM2为例,VM1和VM2中可分别独立运行各自的Guest OS以及基于Guest OS的应用程序。
Hypervisor又可称为虚拟机管理程序,是一种运行在服务器硬件和虚拟机操作系统之间的中间软件层,可用于管理一个或多个VM,允许多个VM共享服务器硬件,如访问服务器上包括内存、CPU、网卡、磁盘等等在内的所有物理设备,实现对物理硬件的抽象。Hypervisor不但协调着虚拟机对这些硬件资源的共享访问,同时也可在各个虚拟机之间施加防护。
服务器硬件包括服务器的存储资源,存储资源进一步包括易失性存储器和非易失性存储器。易失性存储器用于提供服务器的物理内存(Physical memory),物理内存通常指通过易失性存储器(例如物理内存条)中为Hypervisor、操作系统和各种应用程序提供临时储存的内存空间。物理内存用于存储多个内存段,每个内存段包括多个内存页,本申请实施例中,物理内存的内存页可用于保存Hypervisor、Guest OS以及应用程序对应的代码和数据。
非易失性存储器可用于提供交换空间(Swap space),该交换空间为非易失性存储器中的一段存储空间(或称为地址空间),交换空间用于存放从物理内存中交换来的数据。也就是说,当物理内存的可用内存不足时,可将物理内存中的部分的存储数据,例如内存页(page)中的数据或者块(block)中的数据或者其他类型的存储单元粒度的数据,存放到非易失性存储器的交换空间上,从而使得物理内存中的这部分内存页或者块(block)或者其他类型的存储单元由于数据的清空而释放出这部分的内存。非易失性存储器提供的交换空间在具体实现场景中例如可以是Swap分区或者页交换文件。
在一些实现中,易失性存储器可以是双倍速率同步动态随机存储器(Double DataRate Synchronous Dynamic Random Access Memory,DDR SDRAM)或静态随机存储器(Static Random-Access Memory,SRAM)或随机存取存储器(Random Access Memory,RAM)等存储器;非易失性存储器可以是闪存或磁盘等存储器。
下面描述本申请实施例所涉及的虚拟机超量提交和内存交换的概念。
虚拟机超量提交是指在物理主机上启动的所有虚拟机中每个虚拟机被分配的内存的总量之和超过实际物理内存的大小。
举例来说,在一种虚拟机超量提交中,物理内存的大小为100G,在物理主机上启动10个VM,每个VM分配的内存均为20G,那么此时10个虚拟机被分配的内存的总量为200G,超过实际物理内存的大小。
又举例来说,在又一种虚拟机超量提交中,物理内存的大小为100G,在物理主机上启动1个VM,该VM分配的内存为150G,即此时虚拟机规格的总量为150G,超过实际物理内存的大小。
需要说明的是,上述示例仅用于解释概念而非限定。
通过采用虚拟机超量提交技术,可以提高单台物理主机上的虚拟机数量,提高内存使用率,降低内存成本。单台VM的内存可按需分配,不同VM的负载高峰时间可能不同,在绝大多数时间内,物理内存都是充裕的。个别情况下,物理主机上运行的虚拟机的内存需求总量可能超过物理内存,则会触发内存交换。
内存交换是指在物理内存中剩余的可用的内存页达到物理内存规定的阈值时,可把物理内存的一些内存页的数据存放到磁盘上,从而为新的应用需求腾出内存空间。在需要使用该内存页的数据的时候再把该数据调回到物理内存。
其中,物理内存规定的阈值可为物理内存设定剩余的可用内存页与物理内存总内存页之间的比率的阈值。当物理内存规定的水位达到预设阈值时,需要进行内存交换。
例如可将物理内存规定的阈值设为10%,当物理内存剩余可用内存页的比率低至10%时,可将物理内存中的一部分内存页放入磁盘中。
又例如可将物理内存规定阈值设为接近0%(即物理内存处于满负载状态),如图2所示,在一种虚拟机超量提交的场景中,当物理主机上的不同虚拟机(VM1-VMn)实际使用内存量之和达到物理内存的满负载时,可将物理内存中的一部分内存页放入磁盘中,如图2中对VM2进行内存交换,从而将VM2的一部分内存页放入到磁盘的页交换文件中。
需要说明的是,在具体实现中,可根据实际情况进行物理内存规定的阈值的设定,本申请不做具体限定。
由于介质的访问速度差异,对磁盘中的内存页的访问速度要远远慢于对物理内存中的内存页的访问速度。而现有常规的内存交换方案中,当物理内存不足的时候,通常是把物理内存的一些不活跃的内存交换到磁盘上,在需要使用该内存页的时候,再把该内存交换回物理内存。这样,导致一些对访问速度要求较高的内存页,比如Hypervisor管理内存页、Guest OS的内存页,由于暂时性不活跃等原因而被交换到磁盘上。需要重新访问这部分的内存页时,从磁盘对这部分的内存页进行访问会导致整个虚拟机进程长时间地等待数据访问,导致出现用户业务进程大幅波动的严重性能问题甚至稳定性问题,使得用户体验严重下降。
在一种现有解决方案中,为了避免内存交换导致的对重要进程的内存的影响,采用内存锁定(Memory Lock,mlock)技术,直接在程序代码中调用mlock接口来将内存中的某部分内存(例如Hypervisor管理内存、Guest OS占用的内存、应用程序占用的内存等等)锁定,而不交换到物理磁盘上。mlock是内核实现锁定内存的一种机制,用来将进程使用的部分或全部内存锁定到物理内存。被锁定的内存页被解锁或进程退出前,不会被交换到磁盘。
然而,该方案存在的技术缺陷包括如下:(1)使用该技术时,需要显式的调用mlock接口,但是很多关键内存是动态申请的,无法通过挨个识别再显式调用mlock来锁定;(2)关键内存的类型种类的多样化和不确定性导致其无法一次完全识别清楚,有的关键内存甚至会要运行较长一段时间后才能识别出来,识别效率低下。(3)mlock方式会导致内存无差别的提前全部分配,会破坏超量提交场景下内存按需分配的特性,即使执行munlock操作也无法回收已经分配的内存,从而导致系统中的内存复用率降低。
为了解决现有技术的至少一种技术缺陷,本申请实施例提供了虚拟机内存管理的方法以及相关设备。
参见图3,图3示出了本申请实施例提供的一种实现虚拟机内存管理的方法的设备200的结构示意图。该设备200包括:处理器201、易失性存储器202和非易失性存储器203。在一些实现中,该设备200可以是图1实施例所描述的物理主机100。
处理器201包括一个或者多个通用处理器,其中,通用处理器可以是能够处理电子指令的任何类型的设备,包括中央处理器(Central Processing Unit,CPU)、微处理器、微控制器、主处理器、控制器以及ASIC(Application Specific Integrated Circuit,专用集成电路)等等。处理器201执行各种类型的数字存储指令,例如,处理器201可运行存储在易失性存储器202中的软件或者固件程序。又例如,处理器201能够执行程序或者处理数据,以执行本文讨论的方法的至少一部分。
易失性存储器202用于提供物理内存,物理内存用于存储多个内存页,本申请实施例中,物理内存的内存页可用于保存Hypervisor、Guest OS以及应用程序对应的代码和数据。易失性存储器202还用于存储处理器201在该易失性存储器202中运行各种需求所对应的逻辑代码或指令。
非易失性存储器可用于提供交换空间,该交换空间用于实现与物理内存的内存交换功能,并存储由物理内存交换过来的多个内存页。
在一些可能的实现中,易失性存储器202可以是DDR、SDRAM或SRAM等易失性存储器;非易失性存储器203可以是闪存或磁盘等非易失性存储器。
本申请实施例中,当易失性存储器202的物理内存和非易失性存储器的交换空间之间需要进行内存交换时,处理器201将选定的内存页在物理内存和交换空间中实现页交换。具体的,处理器(CPU)201可执行如图4所示的虚拟机内存管理方法,包括但不限于以下步骤:
通过S301,从分配给虚拟机的总内存中识别出虚拟机的非操作系统内存。
具体的,分配给VM的总内存包括VM的内存和虚拟机监控器(Hypervisor)的内存。由于Hypervisor用于协调虚拟机对内存、CPU、网卡、磁盘等这些硬件资源的共享访问,而虚拟机启动时每个虚拟机都有对应的数据结构、缓存等数据需要存储,所以要创建虚拟机时,需分配VM的内存和Hypervisor的管理内存。虚拟机的内存用于存放虚拟机的代码和数据,Hypervisor的管理内存用于存放Hypervisor管理虚拟机运行的数据。Hypervisor的管理内存中存放的数据例如可以是描述各种硬件设备(比如CPU、内存、网卡、磁盘、显卡等设备)的数据结构、每个硬件设备各自的管理信息。以CPU(即central processing unit,中央处理器)为例,其管理信息里面会记录包括CPU的数量、模拟的CPU硬件架构描述等信息。Hypervisor的管理内存中存放的数据例如还可以是显示用缓存,输入输出(Input/Output,IO)用缓存等缓存数据。
VM的内存进一步包括VM的操作系统的内存和VM的非操作系统的内存;虚拟机的操作系统的内存用于存放虚拟机的操作系统的代码和数据;VM的非操作系统的内存表示VM的内存中,除VM的操作系统的内存之外剩余的内存。
虚拟机的操作系统的内存用于存放所述虚拟机的操作系统的代码和数据,其中,虚拟机操作系统的内存存放的数据例如可以是编译库、应用程序运行需要的堆栈数据、Guest OS内核模块运行时需要的数据,等等。
虚拟机的非操作系统的内存例如可用于存放运行在Guest OS上的各种应用程序的相关代码和数据。应用程序的具体数据例如可以包括数据库程序的加载到内存中的数据、文字处理程序打开的文件数据,等等。
也就是说,在虚拟机启动时,物理主机的操作系统(Host OS)会给该虚拟机分配虚拟机的内存规格(即总内存),该内存规格表示允许该虚拟机申请使用的总内存大小。该内存规格涵盖了虚拟机的内存和Hypervisor的管理内存,虚拟机的内存为提供给虚拟机申请使用的内存大小,Hypervisor的管理内存为提供给Hypervisor申请使用的内存大小。虚拟机的内存涵盖了虚拟机的操作系统的内存和虚拟机的非操作系统的内存。本文中,虚拟机的操作系统又可称为客户机操作系统(Guest operating system,Guest OS),Guest OS的内存为提供给Guest OS自身申请使用的内存大小。相应的,本文中虚拟机的非操作系统可相应称为非Guest OS,非Guest OS的内存为虚拟机的内存除Guest OS的内存之外剩余的内存。
为了便于描述,本文中也将分配给VM的总内存简称为“虚拟机进程内存”,将Hypervisor的管理内存简称为“Hypervisor管理内存”,将虚拟机的内存简称为“虚拟机内存”,将虚拟机的操作系统的内存简称为“Guest OS内存”,将虚拟机的非操作系统的内存称为“非Guest OS内存”或者称为虚拟机常规(Virtual Machine Normal,VM-Normal)内存。
也就是说,虚拟机进程内存涵盖了Hypervisor管理内存和虚拟机内存,虚拟机的内存涵盖了虚拟机的操作系统的内存和虚拟机的非操作系统的内存。通过步骤S301,可实现从总内存(虚拟机进程内存)中识别出非Guest OS内存,也就是将非Guest OS内存与其他内存(如例如Hypervisor管理内存、Guest OS内存)区分出来。
通过S302,将VM的非操作系统的内存作为可交换内存。
由于Hypervisor管理内存和GUEST OS内存对访问速度要求较高,容易对整个虚拟机进程和虚拟机系统性能造成显著影响,而VM-Normal内存对虚拟机进程和虚拟机系统性能的影响相对较小,所以本申请实施例中,可将VM-Normal内存确定为可交换内存。可交换内存表示允许进行内存交换的内存。
通过S303,将所述可交换内存中的数据存放到非易失性存储器。
在物理内存剩余可用内存页达到物理内存规定的水位(即物理内存使用紧张,或称物理内存不足)时,根据该可交换内存进行内存交换,即将可交换内存中的部分或全部数据存放到非易失性存储器的交换空间。其中,物理内存规定的水位表示物理内存设定剩余的可用内存页与物理内存总内存页之间的比率。当物理内存规定的水位达到预设阈值时,需要进行内存交换。
也就是说,实施本申请实施例的方法,只需要预先在虚拟机进程内存中识别VM-Normal作为可交换内存,当物理内存和交换空间中之间需要进行内存交换时,只需要采用VM-Normal内存中的一些内存页进行内存交换,而不需要采用Hypervisor管理内存或GuestOS内存进行内存交换,从而大大降低对整个虚拟机进程和虚拟机系统性能造成的影响,保证了在内存压力大的时候规避性能大幅波动和稳定性问题。还可以看到,本申请实施例由于不需要直接对关键内存(Hypervisor管理内存、Guest OS内存等)进行识别,所以能够避免由于关键内存的种类类型的多样化、不确定性导致的识别难题,而通过对VM-Normal内存进行识别能够提高识别效率。此外,实施本申请的方法不会对超量提交场景下内存按需分配的特性造成影响,有利于通过进一步增加虚拟机数量来提高了虚拟机系统中的内存复用率,从而大大提升了用户的使用体验。
在本申请实施例的一种实施方式中,可以通过在物理主机的Hypervisor内核中增加新的软件代码模块以及在VM的操作系统(Guest OS)上增加新的软件代码模块来实现本申请的方案。
请综合参见图5和图6,在一种实现方案中,可在图1描述的物理主机100的系统架构基础上,在Hypervisor中设置虚拟机进程内存分配模块101、可交换内存确定模块102和内存交换模块103,虚拟机进程内存分配模块101用于确定分配给VM的内存,可交换内存确定模块102用于将分配给VM的内存中VM的非操作系统的内存识别出来并作为可交换内存;内存交换模块103用于,在分配给VM的内存对应的内存页需要进行内存交换的情况下,根据该可交换内存进行内存交换,即将可交换内存中的部分或全部数据存放到非易失性存储器。
具体的,Hypervisor中的可交换内存确定模块102可进一步包括虚拟机内存识别模块1021和非操作系统内存识别模块1022(或称非GuestOS内存识别模块1022)。在各个VM的GuestOS中还分别设置有GuestOS内存识别模块104。
虚拟机内存识别模块1021用于从分配给VM的虚拟机进程内存中识别出虚拟机内存。
具体的,虚拟机内存识别模块1021会对分配的虚拟机进程内存进行识别,区分出虚拟机自身的内存,即虚拟机内存,并为虚拟机内存对应的内存页增加标记信息,即此时GuestOS内存和VM-Normal内存均标记有标记信息,标记信息作为可交换内存的标记;那么剩下的没有标记的内存,即Hypervisor管理内存属于为关键内存,不可发生内存交换,从而保护Hypervisor内存。
本申请实施例中的标记信息例如可以是标识位、标签、标识码等标记,本申请不做限定。
非GuestOS内存识别模块1022用于从虚拟机内存中,进一步识别出VM-Normal内存作为可交换内存,可发生内存交换,而GuestOS内存不可发生内存交换。
具体的,GuestOS中的GuestOS内存识别模块104会识别出GuestOS内部当前可申请使用的空闲内存,并通知给Hypervisor中的非GuestOS内存识别模块1022。非GuestOS内存识别模块1022将这些空闲内存进一步确定为VM-Normal内存,那么虚拟机内存中剩下的无法被申请的内存即为GuestOS内存。非GuestOS内存识别模块1022进一步删除GuestOS内存的标记信息,而保留VM-Normal内存的标记信息,也就是只将VM-Normal内存作为可交换内存,可发生内存交换;而此时GuestOS内存则属于为关键内存,不可发生内存交换,从而保护GuestOS内存。
这样,后续当物理内存不足,需要进行内存交换时,内存交换模块103即可根据标记有标记信息的VM-Normal内存的内存页进行内存交换的操作。
可以看到,实施本申请实施例,可通过可交换内存确定模块102来识别出最终可用于页交换的内存(即VM-Normal内存)并增加标记信息,虚拟机系统根据该标记信息进行选择性交换,即在系统物理内存不足时,只有带标记信息的内存段才有可能被交换到磁盘;没有标记信息的内存段不允许交换到磁盘,从而保证关键内存(Hypervisor内存和GuestOS内存)不被交换,保障虚拟机的性能,有利于通过进一步增加虚拟机数量来提高了虚拟机系统中的内存复用率,从而大大提升了用户的使用体验。
下面以虚拟机启动阶段和虚拟机运行时内存分配交换阶段为例,对本申请方案的具体实现过程进行进一步详述。
参见图7,在一种更具体的实施例中,在图5所描述的系统架构基础上,在物理主机100的Hypervisor中还可进一步设置虚拟机初始化模块110。在一些实施例中,处理器(CPU)可运行Hypervisor中上述虚拟机初始化模块110、虚拟机进程内存分配模块101、虚拟机内存识别模块1021、非GuestOS内存识别模块1022,以及VM的GuestOS中的GuestOS内存识别模块,以执行如图8所示的虚拟机内存管理方法,该方法发生在虚拟机的启动阶段,包括但不限于以下步骤:
在S401,通过虚拟机初始化模块110创建初始化虚拟机进程。
在S402,初始化模块会调用虚拟机进程内存分配模块101,通过该虚拟机进程内存分配模块101为虚拟机进程分配所需内存,即本申请实施例描述的虚拟机进程内存。由于Hypervisor用于协调虚拟机对内存、CPU、网卡、磁盘等这些硬件资源的共享访问,而虚拟机启动时每个虚拟机都有对应的数据结构、缓存等数据需要存储,所以要创建虚拟机时,需分配虚拟机内存和Hypervisor管理内存。即虚拟机进程内存包括Hypervisor管理内存和虚拟机内存。
在S403,通过虚拟机内存识别模块1021对所分配的虚拟机进程内存进行识别,从而区分出虚拟机内存,并为虚拟机内存增加标记信息,这里的标记信息暂时作为可交换内存的标记。
例如,虚拟机启动时初始化模块110会调用虚拟机进程内存分配模块101为虚拟机进程分配所需内存。虚拟机初始化时,所有内存都不带可交换内存标记。虚拟机内存识别模块1021会在内存分配流程中增加了一个内存过滤器,内存过滤器具体可以是一种内存过滤算法。内存过滤器确定分配给VM的内存中的不同内存段的内存用途;内存用途的种类包括供所述VM使用的用途和供所述hypervisor使用的用途;内存过滤器会根据内存用途对这些内存段进行分类,将内存用途为供VM使用的用途的所有内存段识别为所述虚拟机内存。以QEMU为例,QEMU是一套由法布里斯·贝拉(Fabrice Bellard)所编写的以通用性公开许可证(General Public License,GPL分发源码的模拟处理器,QEMU模拟了多种内存设备:设备内存模块(pc.ram)、内存直插式存储模块(memdimm)、内存节点(ram-node)。这几种内存设备都可能配置实际的内存段并提供给虚拟机自身使用,因此内存过滤器把这几种内存设备配置的内存段都识别为虚拟机内存。进一步的,虚拟机内存识别模块1021通过madvise(madvise表示一种系统调用接口)为识别出的虚拟机内存打上可交换的标记,即标记信息。那么剩下的没有标记的内存则为关键内存,即属于hypervisor管理内存,不可发生交换。这样就实现了hypervisor管理内存和虚拟机内存的区分。
这样,虚拟机内存中的GuestOS内存和VM-Normal内存对应的内存页均被标记了标记信息。标记信息例如可以是标识位、标签、标识码等标记,本申请不做限定。
虚拟机进程内存中,除虚拟机内存外剩下的内存则为Hypervisor管理内存,该Hypervisor管理内存没有标记信息,即该Hypervisor管理内存属于不可交换内存。所以,通过S403既可快捷实现对Hypervisor管理内存和虚拟机内存的区别,提高识别效率,又可实现对Hypervisor管理内存的保护,避免Hypervisor管理内存后续被交换出去。
在S404,虚拟机初始化完成,并且VM的GuestOS完成启动后,可通过GuestOS中的GuestOS内存识别模块104,在GuestOS内部查询内存使用情况,尝试进行空闲内存申请,识别出GuestOS内部当前可申请使用的空闲内存,获得所有空闲内存的内存地址。空闲内存表示虚拟机内存中,尚未与物理内存中的内存页建立起映射关系(即尚未实际分配内存页)的内存。GuestOS内存识别模块104将空闲内存的内存地址通知给Hypervisor中的非GuestOS内存识别模块1022。通过非GuestOS内存识别模块1022将这些空闲内存确定为VM-Normal内存,并保留VM-Normal内存的标记信息,则VM-Normal内存作为可交换内存。那么,虚拟机内存中,除VM-Normal内存外剩下的内存则为GuestOS内存,即虚拟机内存中剩下的无法被申请的内存为GuestOS内存,实现虚拟机内存中GuestOS内存和VM-Normal内存的分类。通过非GuestOS内存识别模块1022将GuestOS内存的标记信息去除,从而使GuestOS内存变成不可交换内存。
所以,通过S404既可快捷实现对GuestOS内存和VM-Normal内存的区别,提高识别效率,又可实现对GuestOS内存的保护,避免GuestOS内存后续被交换出去。
可以看到,实施本申请实施例,可以在虚拟机的启动阶段,识别出最终可用于页交换的内存(即VM-Normal内存)并保留作为可交换标记的标记信息,从而区分出了可交换内存和不可交换内存。系统在物理内存不足时,只有带标记信息的可交换内存才有可能被交换到磁盘;没有标记信息的不可交换内存将不会被交换到磁盘,从而保证关键内存(Hypervisor内存和GuestOS内存)不被交换,从而保证了在内存压力大的时候规避虚拟机长时间的数据等待,从而规避性能大幅波动和稳定性问题,保障了虚拟机的性能。还有利于通过进一步增加虚拟机数量来提高了虚拟机系统中的内存复用率,大大提升了用户的使用体验。
参见图9,在一种更具体的实施例中,在图5或图7所描述的系统架构基础上,在物理主机100的Hypervisor中还可进一步设置内存管理模块106、关键内存延迟回收模块107和内存回收模块108,其中,内存回收模块108具体可包括关键内存过滤模块109和内存交换模块103。在一些实施例中,处理器(CPU)可运行Hypervisor中上述内存管理模块106、关键内存延迟回收模块107和内存回收模块108,以执行如图10所示的虚拟机内存管理方法,该方法发生在虚拟机的运行阶段,包括但不限于以下步骤:
在S501,内存管理模块106检测到虚拟机当前需要申请实际分配物理内存。
物理主机的操作系统通常通过动态分配物理内存的方式为虚拟机分配实际的物理内存。也就是说,在虚拟机启动阶段,物理主机的操作系统为虚拟机分配了虚拟机进程内存,虚拟机进程内存可以认为是一种虚拟机内存规格或者虚拟的内存,也就是说,操作系统并没有真正在所有的虚拟机进程内存和物理内存中的页面之间建立映射关系。例如虚拟机进程内存为4G,并不意味着虚拟机启动后就在物理内存中实际划分了4G容量给该虚拟机。当虚拟机运行中实际需要使内存时,操作系统再根据虚拟机的申请实际去为虚拟机分配真正的物理内存页。
例如,在一些场景中,内存管理模块106可基于以下事件中的至少一种来确定虚拟机当前需要申请分配新的内存:虚拟机进程中的Hypervisor管理模块会申请新的管理内存;或者,VM的GuestOS的内核需要访问未实际分配物理内存的虚拟机内存;或者,VM的GuestOS中的应用程序需要访问未实际分配物理内存的虚拟机内存,等等。从而,触发S502执行虚拟机内存分配。
在S502,内存管理模块106执行给虚拟机分配新的物理内存页的过程。
在S503,内存管理模块106判断当前分配新的物理内存的内存类型是否为关键内存,例如,若当前分配新的物理内存属于Hypervisor内存或者GuestOS内存,则当前分配新的物理内存是关键内存,后续将触发执行步骤S505;若当前分配新的物理内存属于VM-Normal内存,则当前分配新的物理内存不是关键内存,后续将触发执行步骤S504。
在S504,在内存不足或内存紧张时,通过内存回收模块108,对本次物理内存分配触发内存回收操作,以使物理内存中释放出空闲的物理页以便于内存实际分配。
通常来说,当物理内存紧张时,为了给新的物理内存申请提供足够的内存,虚拟机系统会触发内存回收操作。内存回收的方式有内存交换、内存页丢弃等方式。
对于内存交换,内存回收模块108会筛选出一些内存页,将这些内存页的数据放入到磁盘的交换空间中,从而使这些内存页腾出存储空间以便于重新分配。
具体的,内存回收模块108中的关键内存过滤模块109会对内存回收流程中获取的内存页进行过滤,只允许有标记信息(可交换内存标记)的内存页进行内存交换。然后,通过内存交换模块103,将筛选出来的内存交换到磁盘的交换空间,从而释放出物理内存空间。基于前文的描述可知,发生内存交换的只能是VM-Normal内存对应的一些内存页。通过内存回收的方法可以优化内存占用,提高虚拟机系统的运行性能。
在S505,通过关键内存延迟回收模块107,对本次物理内存分配不触发内存回收。
由于内存回收操作耗时很长,会导致内存申请操作时间过长,即新的内容分配缓慢,容易导致系统出现稳定性问题和性能问题。例如,对于Hypervisor管理模块申请的新的管理内存,如果等待内存回收完成,则会对全局性能造成较大影响,甚至会导致严重的稳定性问题。
本申请实施例中,通过关键内存延迟回收模块107,可允许虚拟机能临时突破内存规格约束获取少量内存,以完成新的物理内存的分配,且本次物理内存分配不触发内存回收。从而,有利于加快对关键内存的新内存页的分配速度,保障系统的稳定性和性能。
举例来说,在物理内存(例如100G)中,可额外设置小量的可用内存空间(100M)作为缓存,当遇到需要对关键内存延迟回收的情况时,可允许虚拟机临时突破内存规格约束,在100M的缓存中获取适量的内存空间进行物理内存分配。
需要说明的是,上述示例仅用于解释本申请而非限定。
可以看到,实施本申请实施例,对于虚拟机运行阶段,在申请新的物理内存分配时,可让关键内存(例如Hypervisor内存或者GuestOS内存)和非关键内存(例如VM-Normal内存)在内存回收上进行区别处理。针对非关键内存可触发内存回收操作,以优化内存占用,提高虚拟机系统的运行性能。针对关键内存,在分配物理内存时不触发内存回收操作(即允许关键内存延迟触发内存回收),从而提升内存分配速度,在内存紧张的时候避免了管理内存被交换而导致性能波动问题,提高系统可靠性和稳定性,保障用户使用体验。
为了更好理解本申请方案,下面以虚拟机超量提交(或称为内存超量提交)的云计算场景为例进行方案的说明。通过内存超量提交,每台物理主机上的虚拟化平台可创建更多的VM,提升物理主机内存资源利用率,降低内存成本。本申请方案可以保证虚拟机的内存在发生内存交换时的虚拟机性能和可靠性。
参见图11,本申请实施例的方案可以在图5或图7或9所描述的系统架构基础上实现。如图11所示,在物理主机的Hypervisor中可同时设置虚拟机初始化模块110、虚拟机进程内存分配模块101、虚拟机内存识别模块1021、非GuestOS内存识别模块1022,以及内存管理模块106、关键内存延迟回收模块107和内存回收模块108,内存回收模块108具体可包括关键内存过滤模块109和内存交换模块103。此外,在各个VM的GuestOS中设置GuestOS内存识别模块。在云计算场景下,可以通过软件接口动态配置虚拟机超量提交,并在虚拟机超量提交场景下实现性能和可靠性保障。在一些实施例中,处理器(CPU)可运行Hypervisor和VM中的上述各个功能模块,以执行如图12所示的虚拟机内存管理方法,包括但不限于以下步骤:
在S601,通过功能开关配置虚拟机的超量提交功能。
在一具体实现中,只有可打开该功能开关后,才能允许所有虚拟机的内存规格之和超过物理主机的物理内存的大小,从而实现内存的超量提交。举例来说,在一种虚拟机超量提交中,物理内存的大小为100G,打开该功能开关后,可在物理主机上启动10个VM,每个VM分配的内存均为20G,那么此时虚拟机规格的总量为200G,超过实际物理内存的大小。
需要说明的是,上述示例仅用于解释概念而非限定。
在S602、内存超量提交打开后,虚拟机启动时,虚拟机初始化模块110会调用虚拟机进程内存分配模块101,通过虚拟机进程内存分配模块101为虚拟机进程分配所需内存,即虚拟机进程内存。
在S603、通过虚拟机内存识别模块1021,可把虚拟机进程内存识别成两类:虚拟机内存和Hypervisor管理内存。
对虚拟机内存增加标记信息,标记信息作为可交换内存的标记。这样,虚拟机内存中的GuestOS内存和VM-Normal内存对应的内存页均被标记了标记信息。标记信息例如可以是标识位、标签、标识码等标记,本申请不做限定。
而对Hypervisor管理内存则没有标记信息,即该Hypervisor管理内存属于不可交换内存,实现对Hypervisor管理内存的保护,避免Hypervisor管理内存后续被交换出去。
在一种实现中,虚拟机初始化时,可设置所有内存页都不带标记信息。虚拟机内存识别模块1021会对分配的虚拟机内存进行识别。具体可参考前述步骤S403的描述,这里不再赘述。
在S604,识别VM-Normal内存,保留VM-Normal内存的标记信息,删除GuestOS内存的标记信息。
具体的,可通过Hypervisor中的非GuestOS内存识别模块1022和GuestOS中的GuestOS内存识别模块相互配合,可把虚拟机内存进一步区分成两类:VM-Normal内存和GuestOS内存。将GuestOS内存的标记信息去除,从而使得GuestOS内存不可发生页交换。而VM-Normal内存的标记信息继续保留,也就是说将VM-Normal内存作为可交换内存。具体可参考前述步骤S404的描述,这里不再赘述。
在S605,在虚拟机的运行阶段,当物理内存不足,需要进行内存交换的情况下,根据可交换内存进行内存交换。
具体的,在物理内存紧张需要发生交换时,需要将具有标记信息的VM-Normal内存的一些内存页与交换空间进行内存交换,例如将这一些内存交换到磁盘。而不带有标记信息的关键内存则不会发生内存交换。
在一种示例中,物理内存紧张指物理内存中剩余的可用内存页与物理内存总内存页之间的比率达到或超过预设阈值,例如可将预设阈值设为5%,10%,20%等等,本申请不做限定。
在又一种示例中,物理内存紧张指物理内存处于满负载状态,此时物理内存中已没有或者接近于没有空闲的内存页来存储信息。
在S606,在虚拟机的运行阶段,根据所设置的标记信息执行内存分配和内存回收策略。
具体的,通过内存管理模块106、关键内存延迟回收模块107和内存回收模块108的互相配合,可实现在物理内存紧张时,不带标记信息的关键内存(例如Hypervisor内存或者GuestOS内存)触发的内存分配会被立刻执行,而不会触发内存回收;而带有标记信息的非关键内存(例如VM-Normal内存)触发的内存分配的同时也会触发内存回收,待执行内存回收后才完成内存分配。具体实现过程可参考前述步骤S502-S505的相关描述,这里不再赘述。
可以看到,实施本申请实施例,在虚拟机超量提交的云计算场景中,可以在虚拟机的启动阶段,识别出非关键内存(即VM-Normal内存)并保留作为可交换标记的标记信息,剩下的内存则为关键内存,关键内存不带有标记信息。后续只允许非关键内存发生内存交换,即系统在物理内存不足时,只有带标记信息的非关键内存才有可能被交换到磁盘;没有标记信息的关键内存将不会被交换到磁盘,从而保证关键内存(Hypervisor内存和GuestOS内存)不被交换,从而保证了在内存压力大的时候规避虚拟机长时间的数据等待,从而规避性能大幅波动和稳定性问题,保障了虚拟机的性能。通过修改内存回收流程,允许关键内存延迟触发内存回收,可以加快关键内存分配速度,保证系统的稳定性和可靠性。此外,实施本申请能够实现通过增加虚拟机数量以及虚拟机规格来显著提高虚拟机系统中的内存复用率,降低内存成本,大大提升了用户的使用体验,具有较大的商业价值。
需要说明的是,对于上文描述的各方法实施例,为了方便起见,将其都表述为一系列的动作步骤的组合,但是本领域技术人员应该知悉,本申请技术方案的具体实现并不受所描述的一系列的动作步骤的顺序的限制。
请参见图13,图13是本申请实施例提供的一种系统的结构示意图。系统包括一个或者多个计算设备70,每个计算设备70包括处理器701、第一存储器702、第二存储器703和通信接口503,处理器701、第一存储器702、第二存储器703和通信接口503通过总线504连接。其中:
第一存储器702的数量为一个或多个,第一存储器702用于提供物理内存,第一存储器702可以是DDR SDRAM或SRAM或RAM等易失性存储器(Volatile Memory)。
第二存储器703的数量为一个或多个,第二存储器703用于提供交换空间,以实现第一存储器702的物理内存和该交换空间之间的内存交换。第二存储器703可以是只读存储器(Read-Only Memory,ROM)、快闪存储器(Flash Memory)、硬盘(Hard Disk Drive,HDD)或固态硬盘(Solid-State Drive,SSD)、磁盘等非易失性存储器。
第一存储器702和/或第二存储器703还可用于存储一组程序代码,以便于处理器701调用该程序代码以实现上文实施例描述的虚拟机内存管理方法。
具体实现中,前述图5或图7或9或图11中所描述的各个功能模块的代码指令和相关数据可能保存在不同的计算设备70的存储器上,也可能保存在同一计算设备70的相同存储器上,也可能保存在相同计算设备的不同存储器(例如第一存储器702和第二存储器703)上。
处理器701可以由一个或者多个通用处理器构成,例如中央处理器(CentralProcessing Unit,CPU)。处理器701可用于运行前述图5或图7或9或图11中所描述的各个功能模块的代码指令和相关数据。也就是说,处理器701执行程序代码可以实现前述图5或图7或9或图11中所描述的各个功能模块的具体功能,实现本申请实施例的虚拟机内存管理方法。
可选的,该系统还包括通信接口503,通信接口503可以为有线接口(例如以太网接口)或无线接口(例如蜂窝网络接口或使用无线局域网接口),用于与终端或服务器进行通信,以便于为用户提供相关的虚拟机服务。
实际应用中,该系统还可以包括更多或更少的部件,这里不作限制。该系统的不同器件的具体功能以及实现过程可参考前文的描述,这里不再赘述。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者任意组合来实现。当使用软件实现时,可以全部或者部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令,在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络或其他可编程装置。所述计算机指令可存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网络站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线)或无线(例如红外、微波等)方式向另一个网络站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质,也可以是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如软盘、硬盘、磁带等)、光介质(例如DVD等)、或者半导体介质(例如固态硬盘)等等。
在上述实施例中,对各个实施例的描述各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

Claims (49)

1.一种虚拟机内存管理的方法,其特征在于,所述方法包括:
从分配给虚拟机的总内存中识别出所述虚拟机的非操作系统内存;所述总内存包括所述虚拟机的内存和虚拟机监控器的管理内存;所述虚拟机的内存用于存放所述虚拟机的代码和所述虚拟机运行过程中产生的数据,所述虚拟机监控器的管理内存用于存放所述虚拟机监控器管理所述虚拟机所需的数据;所述虚拟机的内存包括所述虚拟机的操作系统的内存和所述虚拟机的非操作系统的内存;所述虚拟机的操作系统的内存用于存放所述虚拟机的操作系统的代码和数据,所述虚拟机的非操作系统的内存表示所述虚拟机的内存中,除所述虚拟机的操作系统的内存之外剩余的内存;
将所述虚拟机的非操作系统的内存作为可交换内存;所述可交换内存表示允许进行内存交换的内存;
将所述可交换内存中的数据存放到非易失性存储器。
2.根据权利要求1所述的方法,其特征在于,所述从分配给虚拟机的总内存中识别出所述虚拟机的非操作系统的内存,包括:
从所述分配给所述虚拟机的总内存中,识别出所述虚拟机的内存;
从所述虚拟机的内存中,识别出所述虚拟机的非操作系统的内存作为所述可交换内存。
3.根据权利要求2所述的方法,其特征在于,所述从所述分配给所述虚拟机的总内存中,识别出所述虚拟机的内存之后,还包括:
对所述虚拟机的操作系统的内存和所述虚拟机的非操作系统的内存均增加标记信息;所述标记信息表示允许被标记的内存中的数据进行所述内存交换;
相应的,所述从所述虚拟机的内存中,识别出所述虚拟机的非操作系统的内存作为所述可交换内存,包括:
从所述虚拟机的内存中,识别出所述虚拟机的非操作系统的内存;删除所述虚拟机的操作系统的内存的标记信息,同时保留所述虚拟机的非操作系统的内存的标记信息;
相应的,所述将所述可交换内存中的数据存放到非易失性存储器,包括:
将具有所述标记信息的内存中的数据存放到非易失性存储器。
4.根据权利要求2或3所述的方法,其特征在于,所述从所述分配给所述虚拟机的总内存中,识别出所述虚拟机的内存,包括:
确定所述分配给所述虚拟机的总内存中的不同内存段的内存用途;所述内存用途包括供所述虚拟机使用和供所述虚拟机监控器使用;
将供所述虚拟机使用的所有内存段作为所述虚拟机的内存。
5.根据权利要求2或3所述的方法,其特征在于,所述从所述虚拟机的内存中,识别出所述虚拟机的非操作系统的内存作为所述可交换内存,包括:
申请所述虚拟机的内存中的空闲内存,获得所有空闲内存的内存地址;
将所述所有空闲内存的内存地址对应的内存作为所述虚拟机的非操作系统的内存,并用作所述可交换内存。
6.根据权利要求4所述的方法,其特征在于,所述从所述虚拟机的内存中,识别出所述虚拟机的非操作系统的内存作为所述可交换内存,包括:
申请所述虚拟机的内存中的空闲内存,获得所有空闲内存的内存地址;
将所述所有空闲内存的内存地址对应的内存作为所述虚拟机的非操作系统的内存,并用作所述可交换内存。
7.根据权利要求2、3或6所述的方法,其特征在于,
所述从所述分配给所述虚拟机的总内存中,识别出所述虚拟机的内存,包括:
在所述虚拟机的启动阶段,从所述分配给所述虚拟机的总内存中,识别出所述虚拟机的内存;
所述从所述虚拟机的内存中,识别出所述虚拟机的非操作系统的内存作为所述可交换内存,包括:
在所述虚拟机启动后的运行阶段,从所述虚拟机的内存中,识别出所述虚拟机的非操作系统的内存作为所述可交换内存。
8.根据权利要求4所述的方法,其特征在于,
所述从所述分配给所述虚拟机的总内存中,识别出所述虚拟机的内存,包括:
在所述虚拟机的启动阶段,从所述分配给所述虚拟机的总内存中,识别出所述虚拟机的内存;
所述从所述虚拟机的内存中,识别出所述虚拟机的非操作系统的内存作为所述可交换内存,包括:
在所述虚拟机启动后的运行阶段,从所述虚拟机的内存中,识别出所述虚拟机的非操作系统的内存作为所述可交换内存。
9.根据权利要求5所述的方法,其特征在于,
所述从所述分配给所述虚拟机的总内存中,识别出所述虚拟机的内存,包括:
在所述虚拟机的启动阶段,从所述分配给所述虚拟机的总内存中,识别出所述虚拟机的内存;
所述从所述虚拟机的内存中,识别出所述虚拟机的非操作系统的内存作为所述可交换内存,包括:
在所述虚拟机启动后的运行阶段,从所述虚拟机的内存中,识别出所述虚拟机的非操作系统的内存作为所述可交换内存。
10.根据权利要求1-3、6、8-9任一项所述的方法,其特征在于,所述将所述可交换内存中的数据存放到非易失性存储器,包括:
当所述虚拟机所在物理主机的物理内存处于满负载状态时,将所述可交换内存中的数据存放到非易失性存储器;所述满负载状态表示所述物理内存无空闲空间存储新的内存页。
11.根据权利要求4所述的方法,其特征在于,所述将所述可交换内存中的数据存放到非易失性存储器,包括:
当所述虚拟机所在物理主机的物理内存处于满负载状态时,将所述可交换内存中的数据存放到非易失性存储器;所述满负载状态表示所述物理内存无空闲空间存储新的内存页。
12.根据权利要求5所述的方法,其特征在于,所述将所述可交换内存中的数据存放到非易失性存储器,包括:
当所述虚拟机所在物理主机的物理内存处于满负载状态时,将所述可交换内存中的数据存放到非易失性存储器;所述满负载状态表示所述物理内存无空闲空间存储新的内存页。
13.根据权利要求7所述的方法,其特征在于,所述将所述可交换内存中的数据存放到非易失性存储器,包括:
当所述虚拟机所在物理主机的物理内存处于满负载状态时,将所述可交换内存中的数据存放到非易失性存储器;所述满负载状态表示所述物理内存无空闲空间存储新的内存页。
14.根据权利要求1-3、6、8-9任一项所述的方法,其特征在于,所述将所述可交换内存中的数据存放到非易失性存储器,包括:
当所述虚拟机所在物理主机的物理内存中剩余可用的内存页与所述物理内存总内存页之间的比率达到预设阈值时,将所述可交换内存中的数据存放到非易失性存储器。
15.根据权利要求4所述的方法,其特征在于,所述将所述可交换内存中的数据存放到非易失性存储器,包括:
当所述虚拟机所在物理主机的物理内存中剩余可用的内存页与所述物理内存总内存页之间的比率达到预设阈值时,将所述可交换内存中的数据存放到非易失性存储器。
16.根据权利要求5所述的方法,其特征在于,所述将所述可交换内存中的数据存放到非易失性存储器,包括:
当所述虚拟机所在物理主机的物理内存中剩余可用的内存页与所述物理内存总内存页之间的比率达到预设阈值时,将所述可交换内存中的数据存放到非易失性存储器。
17.根据权利要求7所述的方法,其特征在于,所述将所述可交换内存中的数据存放到非易失性存储器,包括:
当所述虚拟机所在物理主机的物理内存中剩余可用的内存页与所述物理内存总内存页之间的比率达到预设阈值时,将所述可交换内存中的数据存放到非易失性存储器。
18.根据权利要求1-3、6、8-9、11-13、15-17任一项所述的方法,其特征在于,所述方法还包括:
在所述虚拟机申请分配内存时,确定所述申请分配的内存的内存类型;
当内存类型属于所述虚拟机监控器的管理内存或所述虚拟机的操作系统的内存时,不触发内存回收;
当内存类型属于所述虚拟机的非操作系统的内存时,触发内存回收。
19.根据权利要求4所述的方法,其特征在于,所述方法还包括:
在所述虚拟机申请分配内存时,确定所述申请分配的内存的内存类型;
当内存类型属于所述虚拟机监控器的管理内存或所述虚拟机的操作系统的内存时,不触发内存回收;
当内存类型属于所述虚拟机的非操作系统的内存时,触发内存回收。
20.根据权利要求5所述的方法,其特征在于,所述方法还包括:
在所述虚拟机申请分配内存时,确定所述申请分配的内存的内存类型;
当内存类型属于所述虚拟机监控器的管理内存或所述虚拟机的操作系统的内存时,不触发内存回收;
当内存类型属于所述虚拟机的非操作系统的内存时,触发内存回收。
21.根据权利要求7所述的方法,其特征在于,所述方法还包括:
在所述虚拟机申请分配内存时,确定所述申请分配的内存的内存类型;
当内存类型属于所述虚拟机监控器的管理内存或所述虚拟机的操作系统的内存时,不触发内存回收;
当内存类型属于所述虚拟机的非操作系统的内存时,触发内存回收。
22.根据权利要求10所述的方法,其特征在于,所述方法还包括:
在所述虚拟机申请分配内存时,确定所述申请分配的内存的内存类型;
当内存类型属于所述虚拟机监控器的管理内存或所述虚拟机的操作系统的内存时,不触发内存回收;
当内存类型属于所述虚拟机的非操作系统的内存时,触发内存回收。
23.根据权利要求14所述的方法,其特征在于,所述方法还包括:
在所述虚拟机申请分配内存时,确定所述申请分配的内存的内存类型;
当内存类型属于所述虚拟机监控器的管理内存或所述虚拟机的操作系统的内存时,不触发内存回收;
当内存类型属于所述虚拟机的非操作系统的内存时,触发内存回收。
24.一种虚拟机内存管理的方法,其特征在于,所述方法包括:
从分配给虚拟机的总内存中识别出所述虚拟机的内存;所述总内存包括所述虚拟机的内存和虚拟机监控器的管理内存;所述虚拟机的内存用于存放所述虚拟机的代码和所述虚拟机运行过程中产生的数据,所述虚拟机监控器的管理内存用于存放所述虚拟机监控器管理所述虚拟机所需的数据;
将所述虚拟机的内存作为可交换内存;所述可交换内存表示允许进行内存交换的内存;
将所述可交换内存中的数据存放到非易失性存储器。
25.一种用于虚拟机内存管理的设备,其特征在于,所述设备包括:
可交换内存确定模块,用于从分配给虚拟机的总内存中识别出所述虚拟机的非操作系统内存;所述总内存包括所述虚拟机的内存和虚拟机监控器的管理内存;所述虚拟机的内存用于存放所述虚拟机的代码和所述虚拟机运行过程中产生的数据,所述虚拟机监控器的管理内存用于存放所述虚拟机监控器管理所述虚拟机所需的数据;所述虚拟机的内存包括所述虚拟机的操作系统的内存和所述虚拟机的非操作系统的内存;所述虚拟机的操作系统的内存用于存放所述虚拟机的操作系统的代码和数据,所述虚拟机的非操作系统的内存表示所述虚拟机的内存中,除所述虚拟机的操作系统的内存之外剩余的内存;
所述可交换内存确定模块还用于,将所述虚拟机的非操作系统的内存作为可交换内存;所述可交换内存表示允许进行内存交换的内存;
内存交换模块,用于将所述可交换内存中的数据存放到非易失性存储器。
26.根据权利要求25所述的设备,其特征在于,所述可交换内存确定模块包括虚拟机内存识别模块和非操作系统内存识别模块;
所述虚拟机内存识别模块用于,从所述分配给所述虚拟机的总内存中,识别出所述虚拟机的内存;
所述非操作系统内存识别模块用于,从所述虚拟机的内存中,识别出所述虚拟机的非操作系统的内存作为所述可交换内存。
27.根据权利要求26所述的设备,其特征在于,
所述虚拟机内存识别模块还用于,对所述虚拟机的操作系统的内存和所述虚拟机的非操作系统的内存均增加标记信息;所述标记信息表示允许被标记的内存中的数据进行所述内存交换;
所述非操作系统内存识别模块具体用于,从所述虚拟机的内存中,识别出所述虚拟机的非操作系统的内存;删除所述虚拟机的操作系统的内存的标记信息,同时保留所述虚拟机的非操作系统的内存的标记信息;
所述内存交换模块具体用于,将具有所述标记信息的内存中的数据存放到非易失性存储器。
28.根据权利要求26或27所述的设备,其特征在于,所述虚拟机内存识别模块具体用于:
确定所述分配给所述虚拟机的总内存中的不同内存段的内存用途;所述内存用途包括供所述虚拟机使用和供所述虚拟机监控器使用;
将供所述虚拟机使用的所有内存段作为所述虚拟机的内存。
29.根据权利要求26或27所述的设备,其特征在于,所述非操作系统内存识别模块具体用于:
申请所述虚拟机的内存中的空闲内存,获得所有空闲内存的内存地址;
将所述所有空闲内存的内存地址对应的内存作为所述虚拟机的非操作系统的内存,并用作所述可交换内存。
30.根据权利要求28所述的设备,其特征在于,所述非操作系统内存识别模块具体用于:
申请所述虚拟机的内存中的空闲内存,获得所有空闲内存的内存地址;
将所述所有空闲内存的内存地址对应的内存作为所述虚拟机的非操作系统的内存,并用作所述可交换内存。
31.根据权利要求26、27或30任一项所述的设备,其特征在于,
所述虚拟机内存识别模块具体用于,在所述虚拟机的启动阶段,从所述分配给所述虚拟机的总内存中,识别出所述虚拟机的内存;
所述非操作系统内存识别模块具体用于,在所述虚拟机启动后的运行阶段,从所述虚拟机的内存中,识别出所述虚拟机的非操作系统的内存作为所述可交换内存。
32.根据权利要求28所述的设备,其特征在于,
所述虚拟机内存识别模块具体用于,在所述虚拟机的启动阶段,从所述分配给所述虚拟机的总内存中,识别出所述虚拟机的内存;
所述非操作系统内存识别模块具体用于,在所述虚拟机启动后的运行阶段,从所述虚拟机的内存中,识别出所述虚拟机的非操作系统的内存作为所述可交换内存。
33.根据权利要求29所述的设备,其特征在于,
所述虚拟机内存识别模块具体用于,在所述虚拟机的启动阶段,从所述分配给所述虚拟机的总内存中,识别出所述虚拟机的内存;
所述非操作系统内存识别模块具体用于,在所述虚拟机启动后的运行阶段,从所述虚拟机的内存中,识别出所述虚拟机的非操作系统的内存作为所述可交换内存。
34.根据权利要求25-27、30、32-33任一项所述的设备,其特征在于,
所述内存交换模块具体用于,当所述虚拟机所在物理主机的物理内存处于满负载状态时,将所述可交换内存中的数据存放到非易失性存储器;所述满负载状态表示所述物理内存无空闲空间存储新的内存页。
35.根据权利要求28所述的设备,其特征在于,
所述内存交换模块具体用于,当所述虚拟机所在物理主机的物理内存处于满负载状态时,将所述可交换内存中的数据存放到非易失性存储器;所述满负载状态表示所述物理内存无空闲空间存储新的内存页。
36.根据权利要求29所述的设备,其特征在于,
所述内存交换模块具体用于,当所述虚拟机所在物理主机的物理内存处于满负载状态时,将所述可交换内存中的数据存放到非易失性存储器;所述满负载状态表示所述物理内存无空闲空间存储新的内存页。
37.根据权利要求31所述的设备,其特征在于,
所述内存交换模块具体用于,当所述虚拟机所在物理主机的物理内存处于满负载状态时,将所述可交换内存中的数据存放到非易失性存储器;所述满负载状态表示所述物理内存无空闲空间存储新的内存页。
38.根据权利要求25-27、30、32-33任一项所述的设备,其特征在于,
所述内存交换模块具体用于,当所述虚拟机所在物理主机的物理内存中剩余可用的内存页与所述物理内存总内存页之间的比率达到预设阈值时,将所述可交换内存中的数据存放到非易失性存储器。
39.根据权利要求28所述的设备,其特征在于,
所述内存交换模块具体用于,当所述虚拟机所在物理主机的物理内存中剩余可用的内存页与所述物理内存总内存页之间的比率达到预设阈值时,将所述可交换内存中的数据存放到非易失性存储器。
40.根据权利要求29所述的设备,其特征在于,
所述内存交换模块具体用于,当所述虚拟机所在物理主机的物理内存中剩余可用的内存页与所述物理内存总内存页之间的比率达到预设阈值时,将所述可交换内存中的数据存放到非易失性存储器。
41.根据权利要求31所述的设备,其特征在于,
所述内存交换模块具体用于,当所述虚拟机所在物理主机的物理内存中剩余可用的内存页与所述物理内存总内存页之间的比率达到预设阈值时,将所述可交换内存中的数据存放到非易失性存储器。
42.根据权利要求25-27、30、32-33、35-37、39-41任一项所述的设备,其特征在于,所述设备还包括内存管理模块、关键内存延迟回收模块和内存回收模块:
所述内存管理模块用于,在所述虚拟机申请分配内存时,确定所述申请分配的内存的内存类型;
所述关键内存延迟回收模块用于,当内存类型属于所述虚拟机监控器的管理内存或所述虚拟机的操作系统的内存时,不触发内存回收;
所述内存回收模块用于,当内存类型属于所述虚拟机的非操作系统的内存时,触发内存回收。
43.根据权利要求28所述的设备,其特征在于,所述设备还包括内存管理模块、关键内存延迟回收模块和内存回收模块:
所述内存管理模块用于,在所述虚拟机申请分配内存时,确定所述申请分配的内存的内存类型;
所述关键内存延迟回收模块用于,当内存类型属于所述虚拟机监控器的管理内存或所述虚拟机的操作系统的内存时,不触发内存回收;
所述内存回收模块用于,当内存类型属于所述虚拟机的非操作系统的内存时,触发内存回收。
44.根据权利要求29所述的设备,其特征在于,所述设备还包括内存管理模块、关键内存延迟回收模块和内存回收模块:
所述内存管理模块用于,在所述虚拟机申请分配内存时,确定所述申请分配的内存的内存类型;
所述关键内存延迟回收模块用于,当内存类型属于所述虚拟机监控器的管理内存或所述虚拟机的操作系统的内存时,不触发内存回收;
所述内存回收模块用于,当内存类型属于所述虚拟机的非操作系统的内存时,触发内存回收。
45.根据权利要求31所述的设备,其特征在于,所述设备还包括内存管理模块、关键内存延迟回收模块和内存回收模块:
所述内存管理模块用于,在所述虚拟机申请分配内存时,确定所述申请分配的内存的内存类型;
所述关键内存延迟回收模块用于,当内存类型属于所述虚拟机监控器的管理内存或所述虚拟机的操作系统的内存时,不触发内存回收;
所述内存回收模块用于,当内存类型属于所述虚拟机的非操作系统的内存时,触发内存回收。
46.根据权利要求34所述的设备,其特征在于,所述设备还包括内存管理模块、关键内存延迟回收模块和内存回收模块:
所述内存管理模块用于,在所述虚拟机申请分配内存时,确定所述申请分配的内存的内存类型;
所述关键内存延迟回收模块用于,当内存类型属于所述虚拟机监控器的管理内存或所述虚拟机的操作系统的内存时,不触发内存回收;
所述内存回收模块用于,当内存类型属于所述虚拟机的非操作系统的内存时,触发内存回收。
47.根据权利要求38所述的设备,其特征在于,所述设备还包括内存管理模块、关键内存延迟回收模块和内存回收模块:
所述内存管理模块用于,在所述虚拟机申请分配内存时,确定所述申请分配的内存的内存类型;
所述关键内存延迟回收模块用于,当内存类型属于所述虚拟机监控器的管理内存或所述虚拟机的操作系统的内存时,不触发内存回收;
所述内存回收模块用于,当内存类型属于所述虚拟机的非操作系统的内存时,触发内存回收。
48.一种虚拟机内存管理的设备,其特征在于,所述设备包括:
可交换内存确定模块,用于从分配给虚拟机的总内存中识别出所述虚拟机的内存;所述总内存包括所述虚拟机的内存和虚拟机监控器的管理内存;所述虚拟机的内存用于存放所述虚拟机的代码和所述虚拟机运行过程中产生的数据,所述虚拟机监控器的管理内存用于存放所述虚拟机监控器管理所述虚拟机所需的数据;
所述可交换内存确定模块还用于,从所述总内存中识别出所述虚拟机的内存;
内存交换模块,用于将所述虚拟机的内存作为可交换内存;所述可交换内存表示允许进行内存交换的内存。
49.一种计算机设备,其特征在于,包括:至少一个处理器和存储器;所述处理器和所述存储器通过总线连接或者耦合在一起;所述存储器用于存储一个或多个计算机程序,所述一个或多个计算机程序包括指令;所述处理器用于执行所述一个或多个计算机程序以实现如权利要求1-23的任一项所描述的方法或者如权利要求24所描述的方法。
CN201910953083.9A 2019-09-29 2019-09-29 虚拟机内存管理的方法及设备 Active CN112579251B (zh)

Priority Applications (4)

Application Number Priority Date Filing Date Title
CN201910953083.9A CN112579251B (zh) 2019-09-29 2019-09-29 虚拟机内存管理的方法及设备
EP20870358.7A EP4030289A4 (en) 2019-09-29 2020-09-10 VIRTUAL MACHINE MEMORY MANAGEMENT METHOD AND DEVICE
PCT/CN2020/114446 WO2021057489A1 (zh) 2019-09-29 2020-09-10 虚拟机内存管理的方法及设备
US17/656,699 US20220214907A1 (en) 2019-09-29 2022-03-28 Virtual machine memory management method and device

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910953083.9A CN112579251B (zh) 2019-09-29 2019-09-29 虚拟机内存管理的方法及设备

Publications (2)

Publication Number Publication Date
CN112579251A CN112579251A (zh) 2021-03-30
CN112579251B true CN112579251B (zh) 2024-04-23

Family

ID=75116961

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910953083.9A Active CN112579251B (zh) 2019-09-29 2019-09-29 虚拟机内存管理的方法及设备

Country Status (4)

Country Link
US (1) US20220214907A1 (zh)
EP (1) EP4030289A4 (zh)
CN (1) CN112579251B (zh)
WO (1) WO2021057489A1 (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113485791B (zh) * 2021-07-07 2022-06-03 上海壁仞智能科技有限公司 配置方法和访问方法、装置、虚拟化系统和存储介质
DE102022201452A1 (de) * 2022-02-11 2023-08-17 Robert Bosch Gesellschaft mit beschränkter Haftung Verfahren zur Bereitstellung eines Zugangspunkts zur Messung und Kalibrierung einer oder mehrerer Funktionen einer Recheneinheit
WO2023172319A1 (en) * 2022-03-11 2023-09-14 Microsoft Technology Licensing, Llc Direct swap caching with noisy neighbor mitigation and dynamic address range assignment
US11860783B2 (en) 2022-03-11 2024-01-02 Microsoft Technology Licensing, Llc Direct swap caching with noisy neighbor mitigation and dynamic address range assignment
CN115344226B (zh) * 2022-10-20 2023-03-24 亿咖通(北京)科技有限公司 一种虚拟化管理下的投屏方法、装置、设备及介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101971146A (zh) * 2007-09-07 2011-02-09 甲骨文国际公司 改进作为管理程序来宾而运行的虚拟机中内存使用情况的系统和方法
US8135899B1 (en) * 2006-06-29 2012-03-13 Parallels IP Holdings GmbH Expansion of virtualized physical memory of virtual machine
CN104216837A (zh) * 2013-05-31 2014-12-17 华为技术有限公司 一种内存系统、内存访问请求的处理方法和计算机系统

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7246346B2 (en) * 2002-09-17 2007-07-17 Microsoft Corporation System and method for persisting dynamically generated code in a directly addressable and executable storage medium
US20090172639A1 (en) * 2007-12-27 2009-07-02 Mahesh Natu Firmware integrity verification
US9390028B2 (en) * 2014-10-19 2016-07-12 Strato Scale Ltd. Coordination between memory-saving mechanisms in computers that run virtual machines
CN104571955A (zh) * 2014-12-27 2015-04-29 华为技术有限公司 提高存储容量的方法和装置
US10534720B2 (en) * 2016-05-26 2020-01-14 Vmware, Inc. Application aware memory resource management
CN107273212A (zh) * 2017-06-23 2017-10-20 郑州云海信息技术有限公司 一种动态分配内存的方法及系统

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8135899B1 (en) * 2006-06-29 2012-03-13 Parallels IP Holdings GmbH Expansion of virtualized physical memory of virtual machine
CN101971146A (zh) * 2007-09-07 2011-02-09 甲骨文国际公司 改进作为管理程序来宾而运行的虚拟机中内存使用情况的系统和方法
CN104216837A (zh) * 2013-05-31 2014-12-17 华为技术有限公司 一种内存系统、内存访问请求的处理方法和计算机系统

Also Published As

Publication number Publication date
EP4030289A4 (en) 2022-10-12
WO2021057489A1 (zh) 2021-04-01
US20220214907A1 (en) 2022-07-07
EP4030289A1 (en) 2022-07-20
CN112579251A (zh) 2021-03-30

Similar Documents

Publication Publication Date Title
CN112579251B (zh) 虚拟机内存管理的方法及设备
US11531625B2 (en) Memory management method and apparatus
US9164853B2 (en) Multi-core re-initialization failure control system
WO2015169145A1 (zh) 内存管理方法和设备
US8601201B2 (en) Managing memory across a network of cloned virtual machines
US10534720B2 (en) Application aware memory resource management
US20090307432A1 (en) Memory management arrangements
US11593170B2 (en) Flexible reverse ballooning for nested virtual machines
CN110704161B (zh) 虚拟机创建方法、装置及计算机设备
JP5612681B2 (ja) 仮想計算機システム、領域管理方法、及びプログラム
US10754783B2 (en) Techniques to manage cache resource allocations for a processor cache
CN113204407A (zh) 一种内存超配管理方法及装置
JP2019159562A (ja) 情報処理装置、情報処理システム、及びプログラム
US20160224358A1 (en) Method and system for performing on-demand data write through based on virtual machine types
JP2006155272A (ja) 仮想計算機の制御方法及びプログラム
CN112384893A (zh) 多个热补丁的资源上高效的部署
CN111679914B (zh) 一种内存管理方法、系统、计算机设备及存储介质
US20070033371A1 (en) Method and apparatus for establishing a cache footprint for shared processor logical partitions
CN116521608A (zh) 数据迁移方法及计算设备
CN113704165B (zh) 一种超融合服务器、数据处理方法及装置
US20230342458A1 (en) Techniques to mitigate cache-based side-channel attacks
US20230359481A1 (en) Methods and apparatuses for managing tlb cache in virtualization platform
JP5852672B2 (ja) メモリダンプ採取手法
CN107315624B (zh) 信息处理方法及虚拟化管理器
CN115221073A (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