CN111190752B - 虚拟机共享内核内存的方法及装置 - Google Patents

虚拟机共享内核内存的方法及装置 Download PDF

Info

Publication number
CN111190752B
CN111190752B CN201911394701.7A CN201911394701A CN111190752B CN 111190752 B CN111190752 B CN 111190752B CN 201911394701 A CN201911394701 A CN 201911394701A CN 111190752 B CN111190752 B CN 111190752B
Authority
CN
China
Prior art keywords
virtual machine
memory
page table
kernel
host
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
CN201911394701.7A
Other languages
English (en)
Other versions
CN111190752A (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.)
Haiguang Information Technology Co Ltd
Original Assignee
Haiguang Information Technology 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 Haiguang Information Technology Co Ltd filed Critical Haiguang Information Technology Co Ltd
Priority to CN201911394701.7A priority Critical patent/CN111190752B/zh
Publication of CN111190752A publication Critical patent/CN111190752A/zh
Application granted granted Critical
Publication of CN111190752B publication Critical patent/CN111190752B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • 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/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

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

本发明涉及一种虚拟机共享内核内存的方法及装置,属于计算机技术领域。该方法包括:启动第一虚拟机,第一虚拟机具有用于第一虚拟机物理地址到宿主机物理地址的映射的第一二维页表,并且第一虚拟机的内核被加载和锁定在宿主机物理内存中;启动第二虚拟机,第二虚拟机具有用于第二虚拟机物理地址到宿主机物理地址的映射的第二二维页表,第二二维页表映射到第一虚拟机的内核在宿主机物理内存中的地址;以及当接收到第二虚拟机的写内存操作时,在宿主机物理内存中分配用于写内存操作的新内存页,并且更新第二二维页表。通过本发明能够减少众多同内核虚拟机的内核内存开销,以节省内存空间,提升内存利用率。

Description

虚拟机共享内核内存的方法及装置
技术领域
本公开涉及计算机技术领域,更具体地,涉及一种虚拟机共享内核内存的方法及装置。
背景技术
随着无服务器化(serverless)、功能即服务(FaaS)以及云计算虚拟化等新的云计算模式的出现,在一台物理机上可能同时运行几百个、甚至上千个轻量级虚拟机,而这些虚拟机的虚拟机系统(Guest OS)内核都相同,大量虚拟机的内核占据较大内存空间,造成内存空间浪费。
发明内容
有鉴于此,本公开实施例的目的在于提供一种虚拟机共享内核内存的方法及装置,旨在减少众多同内核虚拟机的内核内存开销,以节省内存空间,提升内存利用率。
根据本公开的第一方面,提供一种虚拟机共享内核内存的方法,包括:启动第一虚拟机,所述第一虚拟机具有用于第一虚拟机物理地址到宿主机物理地址的映射的第一二维页表,并且所述第一虚拟机的内核被加载和锁定在宿主机物理内存中;启动第二虚拟机,所述第二虚拟机具有用于第二虚拟机物理地址到宿主机物理地址的映射的第二二维页表,所述第二二维页表映射到所述第一虚拟机的内核在宿主机物理内存中的地址,使得所述第一虚拟机和所述第二虚拟机共享内核内存;以及当接收到所述第二虚拟机的写内存操作时,在宿主机物理内存中分配用于所述写内存操作的新内存页,并且更新所述第二二维页表。
本公开实施例中,第二虚拟机在启动时共享第一虚拟机的内核内存,这样相同的内核代码段、内核常量等内容只需要占用一段内存,第二虚拟机在启动时映射到同一内存区,从而减少多虚拟机内核占据的内存空间,提升了宿主机中物理内存的利用率。
在一个可能的实施例中,所述方法还可以包括在启动所述第一虚拟机后暂停所述第一虚拟机。本公开实施例中,在启动第一虚拟机后暂停第一虚拟机目的在于,当第一虚拟机的内核文件已加载到宿主机的物理内存中时,暂停第一虚拟机有利于后续启动的其他虚拟机以其为模板复用相同内核,减少多虚拟机内核占据的内存空间,从而提升宿主机中物理内存的利用率。
在一个可能的实施例中,所述方法还可以包括将所述第二二维页表的每一个表项的权限初始化为只读。本公开实施例中,将第二二维页表中的表项权限设置为只读,使得在第二虚拟机只能读取第二二维页表中的表项指向的宿主机物理内存而不能修改,并且当第二虚拟机尝试写内存时,能够引起异常,导致虚拟机退出事件,由虚拟机监视器截获以进行处理。
在一个可能的实施例中,更新所述第二二维页表可以包括:使得与所述写内存操作相关的表项映射到所述新内存页的宿主机物理内存地址,并修改所述表项的权限为可读可写。本公开实施例中,在第二虚拟机加载运行业务逻辑时,会触发写内存操作,由于在第二虚拟机启动阶段,将第二二维页表中的表项权限设置为只读,所以会出现虚拟机退出事件,该虚拟机退出事件被虚拟机管理程序截获,需要重新在宿主机物理内存中分配新内存页,将第二二维页表中的表项指向新内存页,同时将第二二维页表中的表项权限设置为可读可写,以满足第二虚拟机运行其他业务的需求。
在一个可能的实施例中,所述第二虚拟机还可以具有转译后备缓冲器TLB,所述TLB用于所述第二虚拟机的虚拟机虚拟地址到宿主机物理地址的映射,所述方法还包括更新所述TLB,使得与所述写内存操作相关的虚拟机虚拟地址映射到所述新内存页的宿主机物理内存地址。本公开实施例中,通过TLB能够实现虚拟机的虚拟机虚拟地址到宿主机物理地址的映射,从而提升虚拟机内存访问的效率。该TLB中的表项指向新内存页的宿主机物理内存地址,同时将该TLB中的表项设置为可读可写。从而实现业务虚拟机在加载业务阶段,能够通过copy on write方式在宿主机物理内存中重新分配写内存操作的新内存页,完成业务加载内容。
在一个可能的实施例中,所述二维页表可以包括扩展页表、嵌套页表、二级页表之一。
根据本公开的第二方面,提供一种虚拟机共享内核内存的装置,包括:第一启动单元,被配置用于启动第一虚拟机,所述第一虚拟机具有用于第一虚拟机物理地址到宿主机物理地址的映射的第一二维页表,并且所述第一虚拟机的内核被加载和锁定在宿主机物理内存中;第二启动单元,被配置用于启动第二虚拟机,所述第二虚拟机具有用于第二虚拟机物理地址到宿主机物理地址的映射的第二二维页表,所述第二二维页表映射到所述第一虚拟机的内核在宿主机物理内存中的地址,所述使得所述第一虚拟机和所述第二虚拟机共享内核内存;以及写内存操作处理单元,被配置用于当接收到所述第二虚拟机的写内存操作时,在宿主机物理内存中分配用于所述写内存操作的新内存页,并且更新所述第二二维页表。本公开实施例中,通过第二虚拟机在启动时共享第一虚拟机的内核内存,这样相同的内核代码段、内核常量等内容只需要占用一段内存,第二虚拟机在启动时映射到同一内存区,从而减少多虚拟机内核占据的内存空间,提升了宿主机中物理内存的利用率。
在一个可能的实施例中,所述第一启动单元还可以被配置用于在启动所述第一虚拟机后暂停所述第一虚拟机。本公开实施例中,在启动第一虚拟机后暂停第一虚拟机目的在于,当第一虚拟机的内核文件已加载到宿主机的物理内存中时,暂停第一虚拟机有利于后续启动的其他虚拟机以其为模板复用相同内核,减少多虚拟机内核占据的内存空间,从而提升宿主机中物理内存的利用率。
在一个可能的实施例中,所述第二启动单元还可以被配置用于将所述第二二维页表的每一个表项的权限初始化为只读。本公开实施例中,将第二二维页表中的表项权限设置为只读,使得在第二虚拟机启动时只能读取第二二维页表中的表项指向的宿主机物理内存而不能修改,并且当第二虚拟机尝试写内存时,能够引起异常,导致虚拟机退出事件,由虚拟机监视器截获以进行处理。
在一个可能的实施例中,所述写内存操作处理单元还可以被配置用于:使得与所述写内存操作相关的表项映射到所述新内存页的宿主机物理内存地址,并修改所述表项的权限为可读可写。本公开实施例中,在第二虚拟机加载或运行业务逻辑时,会触发写内存操作,由于在第二虚拟机启动阶段,将第二二维页表中的表项权限设置为只读,所以会出现虚拟机退出事件,该虚拟机退出事件被虚拟机管理程序截获,需要重新在宿主机物理内存中分配新内存页,将第二二维页表中的表项指向新内存页,同时将第二二维页表中的表项权限设置为可读可写,以满足第二虚拟机加载或运行其他业务的需求。
在一个可能的实施例中,所述第二虚拟机还可以具有转译后备缓冲器TLB,所述TLB用于所述第二虚拟机的虚拟机虚拟地址到宿主机物理地址的映射,所述写内存操作处理单元还被配置用于:更新所述TLB,使得与所述写内存操作相关的虚拟机虚拟地址映射到所述新内存页的宿主机物理内存地址。本公开实施例中,通过TLB能够实现虚拟机的虚拟机虚拟地址到宿主机物理地址的映射,从而提升虚拟机内存访问的效率。此外,该TLB中的表项指向新内存页的宿主机物理内存地址,同时将该TLB中的表项设置为可读可写。从而实现业务虚拟机在加载业务阶段,能够通过copy on write方式在宿主机物理内存中重新分配写内存操作的新内存页,完成业务加载内容。
在一个可能的实施例中,所述二维页表包括扩展页表、嵌套页表、二级页表之一。
根据本公开的第三方面,提供一种系统级芯片SOC,包括处理器核心和内存管理单元,其中所述处理器核心被配置用于执行如本公开的第一方面所述的方法。
本公开的其他特征和优点将在随后的说明书阐述,并且,部分地从说明书中变得显而易见,或者通过实施本公开实施例而了解。本公开的目的和其他优点可通过在所写的说明书以及附图中所特别指出的结构来实现和获得。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。通过附图所示,本申请的上述及其它目的、特征和优势将更加清晰。在全部附图中相同的附图标记指示相同的部分。并未刻意按实际尺寸等比例缩放绘制附图,重点在于示出本申请的主旨。
图1示出了本公开实施例提供的现有的虚拟机启动时分配物理内存的结构示意图;
图2示出了本公开实施例提供的一种虚拟机共享内核内存的方法的流程图;
图3示出了本公开实施例提供的虚拟机启动时共享内核物理内存的示意图;
图4示出了本公开实施例提供的虚拟机启动后加载业务时分配物理内存地址的示意图;
图5示出了本公开实施例提供的一种虚拟机共享内核内存的装置的结构示意图;
图6示出了本公开实施例提供的一种系统级芯片(SOC)的结构示意图。
具体实施方式
以下,将参照附图来描述本公开的实施例。但是应该理解,这些描述只是示例性的,而并非要限制本公开的范围。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本公开的概念。
在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本公开。这里使用的词语“一”、“一个(种)”和“该”等也应包括“多个”、“多种”的意思,除非上下文另外明确指出。此外,在此使用的术语“包括”、“包含”等表明了所述特征、步骤、操作和/或部件的存在,但是并不排除存在或添加一个或多个其他特征、步骤、操作或部件。
在此使用的所有术语(包括技术和科学术语)具有本领域技术人员通常所理解的含义,除非另外定义。应注意,这里使用的术语应解释为具有与本说明书的上下文相一致的含义,而不应以理想化或过于刻板的方式来解释。
如图1所示,为本公开实施例提供的现有的虚拟机启动时分配物理内存的结构示意图。#1虚拟机11在启动时,通过虚拟机监视器(Hypervisor)14将启动虚拟机所需要的内核文件加载到宿主机物理内存15的#1虚拟机内核151中;#2虚拟机12在启动时,通过虚拟机监视器14将启动虚拟机所需要的内核文件加载到宿主机物理内存15的#2虚拟机内核152中;#3虚拟机13在启动时,通过虚拟机监视器14将启动虚拟机所需要的内核文件加载到宿主机物理内存15的#3虚拟机内核153中。然而随着云计算模式的出现和发展,在一台物理机上可能同时运行几百个、甚至上千个轻量级虚拟机,通过图1中的方式启动这些成百上千个虚拟机时,需要先通过虚拟机监视器将所需要的内核文件加载到宿主机物理内存15中,这样会使得大量虚拟机的内核占据较大物理内存空间,造成内存空间浪费。
为了解决上述的内存空间浪费的问题,目前传统的虚拟机内存复用方式主要包括:内核相同页面合并技术、内核虚拟机的内存气球技术、内存压缩、内存交换等方式。内核相同页面合并技术能够在多台虚拟机之间合并内容相同的内存页,同时设置写保护。例如,VM1中的某个内存页(guest PA1->host PA1),与另一个位于VM2中的内存页(guest PA2->host PA2)内容相同,则在宿主机中只须保留一个内存页(HPA_SH)用于支持映射,也就是让VM1的guest PA1和guest PA2都重新映射到同一个页面HPA_SH,并加写保护。该技术节省系统内存,避免内存空间浪费,尤其对于虚拟机中的只读内存页,例如代码页和全零页。
然而,上述技术需要在虚拟机端进行全量内存的扫描,扫描后需要进行比对才能合并相同内容的内存页,在该过程中虚拟机端扫描内存页和比对内存页会引入额外的开销,导致系统的运行速率缓慢,而且不区分内核数据和业务数据,导致不必要的合并及拆分,无法满足现有需求。
为了解决上述问题,本公开提供了一种虚拟机共享内核内存的方法,通过多个虚拟机中的二维页表映射到同一虚拟机内核在宿主机物理内存中的地址,来实现共享内核内存。由此,相同的内核代码段、内核常量等内容只需要占用一段内存,减少了多虚拟机内核占据的内存空间,提升了宿主机中物理内存的利用率。相比于现有技术,本公开实施例无需进行全量扫描,也无需进行内存页合并,从而也不会为系统带来额外的开销,进而避免出现系统运行速率缓慢的问题。
需要说明的是,针对以上方案所存在的缺陷,均是发明人在经过实践并仔细研究后得出的结果,因此,上述问题的发现过程以及下文中本申请实施例针对上述问题所提出的解决方案,都应该是发明人在本申请过程中对本申请做出的贡献。
为了便于理解本公开提供的虚拟机共享内核内存的方法,下面将结合图2-6的内容对本案进行详细说明。
如图2所示,为本公开实施例提供的一种虚拟机共享内核内存的方法的流程图,该方法包括:
首先,在201、启动第一虚拟机,第一虚拟机具有用于第一虚拟机物理地址到宿主机物理地址的映射的第一二维页表,并且第一虚拟机的内核被加载和锁定在宿主机物理内存中。需要注意的是,二维页表(2-dimension page table)在虚拟机技术中用于虚拟机物理地址(Gueat Physical Address:GPA)到宿主机物理地址(Host Physical Address:HPA)的映射,例如,包括扩展页表(Extended Page Table:EPT)、嵌套页表(Nested Page Table:NPT)、二级页表(Stage-2 Page Table:SPT)等,其通常可以设置在内存管理单元(MemoryManagement Unit:MMU)。
例如,虚拟机监视器(Virtual Machine Monitor:VMM)启动第一虚拟机,可以将该第一虚拟机作为母虚拟机,该母虚拟机中具有用于母虚拟机物理地址到宿主机物理地址的映射的第一二维页表,并且母虚拟机的内核被加载和锁定在宿主机物理内存中,保证母虚拟机的内核不被修改、回收或交换出去。
作为一种实施方式,本公开实施例中通过内存锁定(memory locking,mlock)方式启动母虚拟机,mlock是内核实现锁定内存的一种机制,在这里可以将母虚拟机使用的内核内存锁定到物理内存中。mlock机制会使得被锁定的物理内存在被解锁或进程退出前,不会被内存页回收流程处理,使得被锁定的物理内存,不会被交换到其他设备,当进程执行mlock操作时,内核会立刻分配物理内存。通过这种方式能够实现母虚拟机的内核被加载和锁定在宿主机物理内存中。
作为一种实施方式,上述的方法还包括:在启动所述第一虚拟机后暂停所述第一虚拟机。本公开实施例中,在启动第一虚拟机后暂停第一虚拟机目的在于,启动第一虚拟机,内核文件就加载到宿主机的物理内存中,此时暂停第一虚拟机有利于后续启动的其他虚拟机以其为模板复用相同内核,减少多虚拟机内核占据的内存空间,从而提升宿主机中物理内存的利用率。
然后,在202、启动第二虚拟机,第二虚拟机具有用于第二虚拟机物理地址到宿主机物理地址的映射的第二二维页表,第二二维页表映射到第一虚拟机的内核在宿主机物理内存中的地址,使得第一虚拟机和所述第二虚拟机共享内核内存。
VMM启动第二虚拟机,该第二虚拟机可以是业务虚拟机,该业务虚拟机中具有用于业务虚拟机物理地址到宿主机物理地址的映射的第二二维页表,该第二二维页表映射到母虚拟机的内核在宿主机物理内存中的地址,从而使得业务虚拟机和母虚拟机能够共享内核内存。在一个实施例中,第二虚拟机的二维页表可以与母虚拟机的二维页表一致或任意其他方式,只要相应的虚拟机虚拟地址可以映射到相同的宿主机物理内存地址。
作为一种可能的实施方式,上述的方法还包括:将所述第二二维页表的每一个表项的权限初始化为只读。这里的初始化是指第二虚拟机启动阶段,将第二二维页表的表项设置为只读。本公开实施例中,将第二二维页表中的表项权限设置为只读,使得在第二虚拟机启动时只能读取第二二维页表中的表项指向的宿主机物理内存而不能修改,并且当第二虚拟机尝试写内存时,能够引起异常,导致虚拟机退出事件,由虚拟机监视器截获以进行处理,例如,在宿主机物理内存中分配新内存页。
接下来,在203、当接收到第二虚拟机的写内存操作时,在宿主机物理内存中分配用于写内存操作的新内存页,并且更新第二二维页表。
上述的步骤203中的更新第二二维页表包括:使得与写内存操作相关的表项映射到新内存页的宿主机物理内存地址,并修改表项的权限为可读可写。本公开实施例中,在第二虚拟机加载或运行业务逻辑时,会触发写内存操作,在第二虚拟机启动阶段,可以将第二二维页表中的表项权限设置为只读,即,表项指向的宿主机物理内存不可写。这时,写内存操作将引起异常,出现虚拟机退出(vm-exit)事件,该虚拟机退出事件被虚拟机管理程序(hypervisor)或VMM截获,需要重新在宿主机物理内存中分配新内存页,将第二二维页表中的表项指向新内存页,同时将第二二维页表中的表项权限设置为可读可写,以满足第二虚拟机加载或运行其他业务的需求。
作为一种实施方式,第二虚拟机还具有转译后备缓冲器(Translation Look-aside Buffer:TLB),TLB用于第二虚拟机的虚拟机虚拟地址到宿主机物理地址的映射。TLB也称为快表,通常设置在CPU芯片上,存储虚拟地址到物理地址的映射的页表,CPU可以快速访问TLB来获得内存物理地址。需要注意的是,在本公开的实施方式中,TLB存储了虚拟机虚拟地址到宿主机物理地址的直接映射关系,从而可以更快地访问宿主机物理内存。
上述的方法还包括:更新TLB,使得与写内存操作相关的虚拟机虚拟地址映射到新内存页的宿主机物理内存地址。本公开实施例中,通过TLB能够实现虚拟机的虚拟机虚拟地址到宿主机物理地址的映射,从而提升虚拟机访问宿主机的效率。此外,该TLB中的表项指向新内存页的宿主机物理内存地址,同时将该TLB中的表项设置为可读可写。从而实现业务虚拟机在加载业务阶段,能够通过copy on write方式在宿主机物理内存中重新分配写内存操作的新内存页,完成业务加载内容。
为了便于理解上述的虚拟机共享内核内存的方法过程,下面结合图2-4所示的示意图进行解释说明。
如图3所示,为本公开实施例提供的虚拟机启动时共享内核物理内存的结构示意图。其中,图3中的母虚拟机是用于加载其内核到内存的虚拟机,例如,参照图2描述的第一虚拟机,#1虚拟机和#2虚拟机是业务虚拟机,例如,参照图2描述的第二虚拟机。作为示意图,图3仅示出了#1和#2两台虚拟机,但是本领域技术人员应理解,可以包括更多的业务虚拟机,例如,上百甚至上千台虚拟机,本发明不限于此。
参照图3,启动母虚拟机,该母虚拟机具有用于母虚拟机物理地址到宿主机物理地址的映射的二维页表(图3中未体现),且该母虚拟机的内核被加载和锁定在宿主机物理内存中,用于共享。
如图所示,#1虚拟机具有#1虚拟机页表311和#1二维页表313,该#1虚拟机页表311能够将#1虚拟机虚拟地址310映射到#1虚拟机物理地址312,该#1二维页表313能够将#1虚拟机物理地址312映射到宿主机物理地址,具体地,映射到母虚拟机的内核在宿主机物理内存中的地址,即共享内核的宿主机物理地址330。该#1二维页表313中的每一个表项的权限初始化为只读,使得在#1虚拟机启动时只能读取#1二维页表313中的表项指向的宿主机物理内存而不能修改,并且当#1虚拟机尝试写内存时,能够引起异常,导致虚拟机退出事件(例如,vm-exit),由虚拟机监视器截获以进行处理。
类似地,#2虚拟机具有#2虚拟机页表321和#2二维页表323,该#2虚拟机页表321能够将#2虚拟机虚拟地址320映射到#2虚拟机物理地址322,该#2二维页表323能够将#1虚拟机物理地址322映射到宿主机物理地址,具体地,映射到母虚拟机的内核在宿主机物理内存中的地址,即共享内核的宿主机物理地址330。其中,该#2二维页表323中的每一个表项的权限初始化为只读,使得在#2虚拟机启动时只能读取#2二维页表323中的表项指向的宿主机物理内存而不能修改,并且当#2虚拟机尝试写内存时,能够引起异常,导致虚拟机退出事件,由虚拟机监视器截获以进行处理。
通过上述的图3所示的虚拟机运行时共享内核物理内存的结构示意图,#1虚拟机和#2虚拟机,在启动时共享母虚拟机的内核内存,这样相同的内核代码段、内核常量等内容只需要占用一段内存,第二虚拟机在启动时映射到同一内存区,从而减少多虚拟机内核占据的内存空间,提升了宿主机中物理内存的利用率。当一台物理机中运行成百上千个虚拟机,需要启动这些虚拟机时,通过上述的方法,该成百上千个虚拟机都能够映射到共享内核的宿主机物理地址,从而减少多虚拟机内核占据的内存空间。例如,若以10M内核大小为例,多虚拟机的内核内存只要在宿主机物理内存中共享一份,在几百乃至几千个轻量级虚拟机的场景下,可节省几G乃至几十G的内存。
作为另一种实施方式,如图3所示,#1虚拟机还可以具有TLB1 314,该TLB1 314用于#1虚拟机虚拟地址310到宿主机物理地址的映射,该TLB1 314映射到母虚拟机的内核在宿主机物理内存中的地址,即共享内核的宿主机物理地址330,使得#1虚拟机启动时,能够共享母虚拟机启动时的内核内存。#2虚拟机还具有TLB2 324,该TLB2 324用于#2虚拟机虚拟地址320到宿主机物理地址的映射,该TLB2映射到母虚拟机的内核在宿主机物理内存中的地址,即共享内核的宿主机物理地址330,使得#2虚拟机启动时,能够共享母虚拟机启动时的内核内存。其中,在#1虚拟机和#2虚拟机启动阶段,该TLB1 314和TLB2 324中的每一个表项的权限初始化为只读,使得在#1虚拟机和#2虚拟机启动时只能读取TLB1和TLB2中的表项所指向的宿主机物理内存而不能修改,并且当#1虚拟机和#2虚拟机尝试写内存时,能够引起异常,导致虚拟机退出事件,由虚拟机监视器截获以进行处理。
如图4所示,为本公开实施例提供的虚拟机启动后加载业务时分配物理内存地址的示意图。
如图所示,#2虚拟机具有#2虚拟机页表410和#2二维页表420,该#2虚拟机页表410能够将#2虚拟机虚拟地址430映射到#2虚拟机物理地址440,该#2二维页表420能够将#1虚拟机物理地址440映射到宿主机物理地址,且能够映射到母虚拟机的内核在宿主机物理内存中的地址,即共享内核的宿主机物理地址450。其中,该#2二维页表420中的每一个表项的权限初始化为只读,使得在#2虚拟机启动时只能读取#2二维页表420中的表项所指向的宿主机的物理内存而不能修改,从而当#2虚拟机尝试写内存时,能够引起异常,导致虚拟机退出事件,由虚拟机监视器截获以进行处理。
#2虚拟机的加载运行业务的过程:当#2虚拟机加载运行业务逻辑时,会触发写内存操作,此时由于#2二维页表420中的每一个表项的权限初始化为只读(R),即,表项指向的宿主机物理内存不可写。这时,写内存操作将会导致vm-exit,该vm-exit被hypervisor或VMM截获,此时hypervisor或VMM会按照写时拷贝(copy on write)方式在宿主机物理内存中重新分配写内存操作的新内存页,并将#2二维页表420对应的表项指向新内存页宿主机物理地址460,并将#2二维页表420中对应的表项的权限修改为可读可写(WR)。从而实现业务虚拟机在加载业务阶段,能够通过copy on write在宿主机物理内存中重新分配写内存操作的新内存页,完成业务加载内容。
作为另一种实施方式,#2虚拟机还具有TLB2 470,当#2虚拟机加载运行业务逻辑时,会触发写内存操作,此时由于TLB2 470页表中的每一个表项的权限也初始为只读,即,表项指向的宿主机物理内存不可写。这时,写内存操作将会导致vm-exit,该vm-exit被hypervisor或VMM截获,此时hypervisor或VMM会按照写时拷贝(copy on write)方式在宿主机物理内存中重新分配写内存操作的新内存页,并将TLB2 470对应的表项指向新内存也宿主机物理地址,并将TLB2 470中对应的表项的权限修改为可读可写。从而实现业务虚拟机在加载业务阶段,能够通过copy on write方式在宿主机物理内存中重新分配写内存操作的新内存页,完成业务加载内容。
下面将基于图1对应的虚拟机共享内核内存的方法的实施例中的相关描述对本公开实施例提供的一种虚拟机共享内核内存的装置进行介绍。以下实施例中与上述实施例相关的技术术语、概念等的说明可以参照上述的实施例。
如图5所示,为本公开实施例提供的一种虚拟机共享内核内存的装置的结构示意图,包括:第一启动单元51、第二启动单元52以及写内存操作处理单元53,其中:
第一启动单元51,被配置用于启动第一虚拟机,第一虚拟机具有用于第一虚拟机物理地址到宿主机物理地址的映射的第一二维页表,并且所述第一虚拟机的内核被加载和锁定在宿主机物理内存中。
作为一种实施方式,可以将该第一虚拟机作为母虚拟机,该母虚拟机中具有用于母虚拟机物理地址到宿主机物理地址的映射的第一二维页表,并且母虚拟机的内核被加载和锁定在宿主机物理内存中,这样其他进程需要分配物理内存时,会分配其他的宿主机物理内存,而不会占用或覆盖母虚拟机的内核的宿主机物理内存。
作为一种实施方式,本公开实施例中通过内存锁定(mlock)方式启动母虚拟机,mlock机制会使得被锁定的物理内存在被解锁或进程退出前,不会被内存页回收流程处理,使得被锁定的物理内存,不会被交换到其他设备,当进程执行mlock操作时,内核会立刻分配物理内存。由此能够实现母虚拟机的内核被加载和锁定在宿主机物理内存中。
第二启动单元52,被配置用于启动第二虚拟机,第二虚拟机具有用于第二虚拟机物理地址到宿主机物理地址的映射的第二二维页表,第二二维页表映射到第一虚拟机的内核在宿主机物理内存中的地址,使得第一虚拟机和第二虚拟机共享内核内存。
作为一种实施方式,上述的第二虚拟机可以是业务虚拟机,该业务虚拟机中具有用于业务虚拟机物理地址到宿主机物理地址的映射的第二二维页表,该第二二维页表映射到母虚拟机的内核在宿主机物理内存中的地址,从而使得业务虚拟机和母虚拟机能够共享内核内存。在一个实施例中,第二虚拟机的二维页表可以与母虚拟机的二维页表一致或任意其他方式,只要相应的虚拟机虚拟地址可以映射到相同的宿主机物理内存地址。
写内存操作处理单元53,被配置用于当接收到所述第二虚拟机的写内存操作时,在宿主机物理内存中分配用于写内存操作的新内存页,并且更新第二二维页表。
作为一种实施方式,写内存操作处理单元53还被配置用于:使得与写内存操作相关的表项映射到所述新内存页的宿主机物理内存地址,并修改所述表项的权限为可读可写。本公开实施例中,在第二虚拟机加载或运行业务逻辑时,会触发写内存操作,在第二虚拟机启动阶段,可以将第二二维页表中的表项权限设置为只读,即表项指向的宿主机物理内存不可写。这时,写内存操作将引起异常,出现vm-exit,该vm-exit被hypervisor或VMM截获,需要重新在宿主机物理内存中分配新内存页,将第二二维页表中的表项指向新内存页,同时将第二二维页表中的表项权限设置为可读可写,以满足第二虚拟机加载或运行其他业务的需求。
本公开实施例中,通过第二虚拟机在启动时共享第一虚拟机的内核内存,这样相同的内核代码段、内核常量等内容只需要占用一段内存,第二虚拟机在启动时映射到同一内存区,从而减少多虚拟机内核占据的内存空间,提升了宿主机中物理内存的利用率。
作为另一种实施方式,第一启动单元51还被配置用于在启动第一虚拟机后暂停第一虚拟机。本公开实施例中,在启动第一虚拟机后暂停第一虚拟机目的在于,启动第一虚拟机,内核文件就加载到宿主机的物理内存中,此时暂停第一虚拟机有利于后续启动的其他虚拟机以其为模板复用相同内核,减少多虚拟机内核占据的内存空间,从而提升宿主机中物理内存的利用率。
作为另一种实施方式,第二启动单元52还被配置用于将第二二维页表的每一个表项的权限初始化为只读。这里的初始化是指第二虚拟机启动阶段,将第二二维页表的表项设置为只读。本公开实施例中,将第二二维页表中的表项权限设置为只读,使得在第二虚拟机启动时只能读取第二二维页表中的表项指向的宿主机物理内存而不能修改,并且当第二虚拟机尝试写内存时,能够引起异常,导致虚拟机退出事件,由虚拟机监视器截获以进行处理,例如,如上所述的分配新内存页。
作为另一种实施方式,第二虚拟机还具有转译后备缓冲器TLB,所述TLB用于第二虚拟机的虚拟机虚拟地址到宿主机物理地址的映射,TLB也称为快表,通常设置在CPU芯片上,存储虚拟地址到物理地址的映射的页表,CPU可以快速访问TLB来获得内存物理地址。需要注意的是,在本公开的实施方式中,TLB存储了虚拟机虚拟地址到宿主机物理地址的直接映射关系,从而可以更快地访问宿主机物理内存。
作为另一种实施方式,写内存操作处理单元53还被配置用于:更新所述TLB,使得与写内存操作相关的虚拟机虚拟地址映射到所述新内存页的宿主机物理内存地址。本公开实施例中,通过TLB能够实现虚拟机的虚拟机虚拟地址到宿主机物理地址的映射,从而提升虚拟机访问宿主机的效率。此外,该TLB中的表项指向新内存页的宿主机物理内存地址,同时将该TLB中的表项设置为可读可写。从而实现业务虚拟机在加载业务阶段,能够通过copyon write方式在宿主机物理内存中重新分配写内存操作的新内存页,完成业务加载内容。
如图6所示,为本公开实施例提供的一种系统级芯片(System on Chip:SOC)的结构示意图,该SOC 61包括:包括至少一个处理器核心610、611等(数量不限于此)和内存管理单元620,该内存管理单元620中可以设置虚拟机的二维页表,该二维页表在虚拟机技术中用于GPA到HPA的映射,包括EPT、NPT以及SPT等。
处理器核心610、611可以经由内存管理单元620,通过总线(BUS)访问内存,比如随机访问存储器(RAM)62。处理器核心610、611可以根据存储在只读存储器ROM中的程序或者从存储部分加载到RAM 62中的程序而执行各种适当的动作和处理,例如,在其上部署和运行虚拟机。在RAM 62中,还存储有内核、业务虚拟机所需的各种程序和数据等。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应所述以权利要求的保护范围为准。

Claims (13)

1.一种虚拟机共享内核内存的方法,包括:
启动第一虚拟机,所述第一虚拟机具有用于第一虚拟机物理地址到宿主机物理地址的映射的第一二维页表,并且所述第一虚拟机的内核被加载和锁定在宿主机物理内存中;
启动第二虚拟机,所述第二虚拟机具有用于第二虚拟机物理地址到宿主机物理地址的映射的第二二维页表,所述第二二维页表映射到所述第一虚拟机的内核在宿主机物理内存中的地址,使得所述第一虚拟机和所述第二虚拟机共享内核内存;以及
当接收到所述第二虚拟机的写内存操作时,在宿主机物理内存中分配用于所述写内存操作的新内存页,并且更新所述第二二维页表。
2.如权利要求1所述的方法,所述方法还包括在启动所述第一虚拟机后暂停所述第一虚拟机。
3.如权利要求1所述的方法,还包括将所述第二二维页表的每一个表项的权限初始化为只读。
4.如权利要求1所述的方法,其中,更新所述第二二维页表包括:
使得与所述写内存操作相关的表项映射到所述新内存页的宿主机物理内存地址,并修改所述表项的权限为可读可写。
5.如权利要求1-4任一项所述的方法,其中,所述第二虚拟机还具有转译后备缓冲器TLB,所述TLB用于所述第二虚拟机的虚拟机虚拟地址到宿主机物理地址的映射,所述方法还包括更新所述TLB,使得与所述写内存操作相关的虚拟机虚拟地址映射到所述新内存页的宿主机物理内存地址。
6.如权利要求1-4任一项所述的方法,其中,所述二维页表包括扩展页表、嵌套页表、二级页表之一。
7.一种虚拟机共享内核内存的装置,包括:
第一启动单元,被配置用于启动第一虚拟机,所述第一虚拟机具有用于第一虚拟机物理地址到宿主机物理地址的映射的第一二维页表,并且所述第一虚拟机的内核被加载和锁定在宿主机物理内存中;
第二启动单元,被配置用于启动第二虚拟机,所述第二虚拟机具有用于第二虚拟机物理地址到宿主机物理地址的映射的第二二维页表,所述第二二维页表映射到所述第一虚拟机的内核在宿主机物理内存中的地址,使得所述第一虚拟机和所述第二虚拟机共享内核内存;以及
写内存操作处理单元,被配置用于当接收到所述第二虚拟机的写内存操作时,在宿主机物理内存中分配用于所述写内存操作的新内存页,并且更新所述第二二维页表。
8.如权利要求7所述的装置,其中,所述第一启动单元还被配置用于在启动所述第一虚拟机后暂停所述第一虚拟机。
9.如权利要求7所述的装置,其中,所述第二启动单元还被配置用于将所述第二二维页表的每一个表项的权限初始化为只读。
10.如权利要求7所述的装置,其中,所述写内存操作处理单元还被配置用于:使得与所述写内存操作相关的表项映射到所述新内存页的宿主机物理内存地址,并修改所述表项的权限为可读可写。
11.如权利要求7-10任一项所述的装置,其中,所述第二虚拟机还具有转译后备缓冲器TLB,所述TLB用于所述第二虚拟机的虚拟机虚拟地址到宿主机物理地址的映射,所述写内存操作处理单元还被配置用于:更新所述TLB,使得与所述写内存操作相关的虚拟机虚拟地址映射到所述新内存页的宿主机物理内存地址。
12.如权利要求7-10任一项所述的装置,其中,所述二维页表包括扩展页表、嵌套页表、二级页表之一。
13.一种系统级芯片SOC,包括处理器核心和内存管理单元,所述处理器核心被配置用于执行如权利要求1-6中任一项所述的方法。
CN201911394701.7A 2019-12-30 2019-12-30 虚拟机共享内核内存的方法及装置 Active CN111190752B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911394701.7A CN111190752B (zh) 2019-12-30 2019-12-30 虚拟机共享内核内存的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911394701.7A CN111190752B (zh) 2019-12-30 2019-12-30 虚拟机共享内核内存的方法及装置

Publications (2)

Publication Number Publication Date
CN111190752A CN111190752A (zh) 2020-05-22
CN111190752B true CN111190752B (zh) 2023-04-07

Family

ID=70707907

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911394701.7A Active CN111190752B (zh) 2019-12-30 2019-12-30 虚拟机共享内核内存的方法及装置

Country Status (1)

Country Link
CN (1) CN111190752B (zh)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113918272A (zh) * 2020-07-10 2022-01-11 上海交通大学 分离式虚拟机及其虚拟机架构、构建方法和优化方法
CN112099903B (zh) * 2020-08-18 2023-01-31 海光信息技术股份有限公司 一种虚拟机的内存管理方法、装置、cpu芯片及服务器
CN112099904B (zh) * 2020-08-25 2024-05-17 海光信息技术股份有限公司 一种虚拟机的嵌套页表管理方法、装置、处理器芯片及服务器
CN112363796B (zh) * 2020-10-19 2022-11-11 海光信息技术股份有限公司 一种虚拟机共享内存分配方法、装置及电子设备
CN112162830B (zh) * 2020-10-30 2021-11-09 北京易捷思达科技发展有限公司 虚拟机快速启动方法、存储介质及终端
CN115080221A (zh) * 2021-03-15 2022-09-20 北京字节跳动网络技术有限公司 一种内存资源使用控制方法、装置、设备及存储介质
CN113656080B (zh) * 2021-08-04 2023-10-24 亿咖通(湖北)技术有限公司 操作系统内核的启动方法、电子设备和机器可读存储介质
CN113641464A (zh) * 2021-10-15 2021-11-12 云宏信息科技股份有限公司 Xen平台的内存配置方法、系统及计算机可读存储介质
CN114201269B (zh) * 2022-02-18 2022-08-26 阿里云计算有限公司 内存换页方法、系统及存储介质
CN117076347A (zh) * 2022-05-10 2023-11-17 华为技术有限公司 一种内存共享方法以及装置
CN116126472B (zh) * 2023-01-20 2023-06-09 北京麟卓信息科技有限公司 一种基于动态内存虚拟磁盘的跨运行环境文件快速共享方法

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101158924A (zh) * 2007-11-27 2008-04-09 北京大学 一种虚拟机管理器的动态内存映射方法
CN102081552A (zh) * 2009-12-01 2011-06-01 华为技术有限公司 一种物理机到虚拟机的在线迁移方法、装置和系统
CN102567217A (zh) * 2012-01-04 2012-07-11 北京航空航天大学 一种面向mips平台的内存虚拟化方法
CN104915151A (zh) * 2015-06-02 2015-09-16 杭州电子科技大学 多虚拟机系统中一种主动共享的内存超量分配方法
CN106155933A (zh) * 2016-07-06 2016-11-23 乾云众创(北京)信息科技研究院有限公司 一种基于KSM及Pass‑through相结合的虚拟机内存共享方法
CN108322307A (zh) * 2017-01-16 2018-07-24 中标软件有限公司 基于内核内存共享的容器间通讯系统及方法
CN110336894A (zh) * 2019-06-24 2019-10-15 中国科学院软件研究所 一种虚拟机用户空间地址到宿主机内核空间地址转换方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10579412B2 (en) * 2017-04-07 2020-03-03 Nec Corporation Method for operating virtual machines on a virtualization platform and corresponding virtualization platform

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101158924A (zh) * 2007-11-27 2008-04-09 北京大学 一种虚拟机管理器的动态内存映射方法
CN102081552A (zh) * 2009-12-01 2011-06-01 华为技术有限公司 一种物理机到虚拟机的在线迁移方法、装置和系统
CN102567217A (zh) * 2012-01-04 2012-07-11 北京航空航天大学 一种面向mips平台的内存虚拟化方法
CN104915151A (zh) * 2015-06-02 2015-09-16 杭州电子科技大学 多虚拟机系统中一种主动共享的内存超量分配方法
CN106155933A (zh) * 2016-07-06 2016-11-23 乾云众创(北京)信息科技研究院有限公司 一种基于KSM及Pass‑through相结合的虚拟机内存共享方法
CN108322307A (zh) * 2017-01-16 2018-07-24 中标软件有限公司 基于内核内存共享的容器间通讯系统及方法
CN110336894A (zh) * 2019-06-24 2019-10-15 中国科学院软件研究所 一种虚拟机用户空间地址到宿主机内核空间地址转换方法

Also Published As

Publication number Publication date
CN111190752A (zh) 2020-05-22

Similar Documents

Publication Publication Date Title
CN111190752B (zh) 虚拟机共享内核内存的方法及装置
US10671541B2 (en) System and method for one step address translation of graphics addresses in virtualization
US9817770B2 (en) Memory address re-mapping of graphics data
US7409487B1 (en) Virtualization system for computers that use address space indentifiers
JP5735070B2 (ja) パーティション分割されたシステムにおいて、デバイスがメモリにアクセスするための、ゲスト・アドレスからホスト・アドレスへの変換
EP2812795B1 (en) A method and apparatus for supporting address translation in a multiprocessor virtual machine environment using tracking data to eliminate interprocessor interrupts
US8949295B2 (en) Cooperative memory resource management via application-level balloon
US9286101B2 (en) Free page hinting
US9183157B2 (en) Method for creating virtual machine, a virtual machine monitor, and a virtual machine system
US9280486B2 (en) Managing memory pages based on free page hints
EP1966703B1 (en) Method and apparatus for hardware-based dynamic escape detection in managed run-time environments
US20140337845A1 (en) Apparatus and method for expedited virtual machine (vm) launch in vm cluster environment
EP2581828B1 (en) Method for creating virtual machine, virtual machine monitor and virtual machine system
US20170277632A1 (en) Virtual computer system control method and virtual computer system
US20210055961A1 (en) Protection domains for processes in shared address space
US10733109B1 (en) Memory reclaim management for virtual machines

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
CB02 Change of applicant information
CB02 Change of applicant information

Address after: 300450 Tianjin Binhai New Area Tianjin Huayuan Industrial Zone Haitai West Road 18 North 2-204 Industrial Incubation-3-8

Applicant after: Haiguang Information Technology Co.,Ltd.

Address before: 300450 Tianjin Binhai New Area Tianjin Huayuan Industrial Zone Haitai West Road 18 North 2-204 Industrial Incubation-3-8

Applicant before: HAIGUANG INFORMATION TECHNOLOGY Co.,Ltd.

GR01 Patent grant
GR01 Patent grant