技术领域
[0001] 本
发明涉及
计算机系统虚拟化领域,尤其涉及一种基于虚拟机和宿主机内存地址转换的NUMA内存迁页方法。
背景技术
[0002] 虚拟化技术可以将一台物理计算机系统虚拟化为一台或多台虚拟计算机系统。每个虚拟计算机系统(简称为客户机或虚拟机)都拥有自己的虚拟
硬件(如CPU、内存和设备等),来提供一个独立的虚拟机
执行环境。而运行虚拟机的真实物理计算机系统则成为宿主机。虚拟化技术由于其具有的容错性和高资源利用率而广泛应用在
云计算和
高性能计算等领域。
[0003] 在虚拟化环境里,虚拟机监视器(Virtual Machine Management,VMM)是存在于硬件和
操作系统之间的一个
软件管理层,其主要负责管理真实的物理资源,如CPU、内存及I/O设备等,并将底层的硬件资源抽象为对应的虚拟设备
接口供虚拟机使用。
[0004] 内存虚拟化是虚拟化技术的
基础之一。内存虚拟化的目的是给虚拟机提供一个从零开始的并且连续的内存空间,而且必须要在各虚拟机之间有效隔离、调度以及共享内存资源。为了达到这个目的,VMM引入了一层新的地址空间,即客户机物理地址空间(Guest Physical Address,GPA),这个地址空间并不是真正的物理地址空间,它只是宿主机虚拟地址空间在客户机地址空间的一个映射。如图1所示,对客户机来说,客户机物理地址空间都是从零开始的连续地址空间,但对于宿主机来说,客户机的物理地址空间并不一定是连续的,客户机物理地址空间有可能映射在若干个不连续的宿主机地址区间。引入了客户机物理地址空间以后,就形成了从应用程序所在虚拟机虚拟地址(Guest Virtual Address,GVA)到虚拟机物理地址(Guest Physical Address,GPA),再从虚拟机物理地址GPA到宿主机虚拟地址(Host Virtual Address,HVA),再从HVA到宿主机物理地址(Host Physical Address,HPA)的三层地址转换。
[0005] 在KVM中,KVM用一个kvm_memory_slot数据结构来记录每一个地址区间的映射关系,此数据结构包含了对应此映射区间的起始客户机页
帧号(Guest Frame Number,GFN),映射的内存页数目以及起始宿主机虚拟地址。于是KVM就可以实现对客户机物理地址到宿主机虚拟地址之间的转换,也即首先根据客户机物理地址找到对应的映射区间,然后根据此客户机物理地址在此映射区间的偏移量就可以得到其对应的宿主机虚拟地址。进而再通过宿主机的页表也可实现客户机物理地址到宿主机物理地址之间的转换,也即GPA到HPA的转换,如图2所示。
[0006] 现有的主流
多核处理器采用的架构是非一致性内存
访问(Non-Uniform Memory Access,简称NUMA)架构。NUMA架构的特点是系统的相关硬件资源(如内存、CPU)被划分为多个
节点。在NUMA架构里,处理器访问本地节点的内存的速度要比访问远程节点的内存的速度要快。如图3所示的是物理平台的具有8个NUMA节点的NUMA架构
服务器的示意图。由于不同
位置的处理器(CPU)与各个内存之间的距离不同,且各个处理器之间的距离也不同,因此不同处理器访问各个内存的时间也是不同的。
[0007] 现有的关于NUMA架构性能调优方法主要包括
进程迁移和内存迁移。其中,内存迁移是指将应用程序的数据全部迁移到程序所在的CPU节点上,这样可以让CPU和内存之间的亲和度达到最优从而提升性能。然而,现有的研究主要集中在非虚拟化环境,即进行NUMA调优的对象是宿主机的应用程序。对于虚拟机里运行的应用程序来说,由于缺少宿主机物理架构的信息和相应的NUMA调优方法,其性能势必会受到影响。另外,由于传统的内存迁移方法迁移的对象是程序的所有内存页,这势必会导致非常大的开销。但是,每个应用程序在运行时经常访问的内存页(简称为“热页”)往往是很少的,因此迁移应用程序热页以外的内存页对性能提升并没有多大作用。
[0008] 因此,本发明致
力于开发在NUMA架构下,基于KVM内存地址转换的细粒度的内存迁页方法,通过该方法可以在获得运行在虚拟机里的程序的虚拟机内存页的GVA以后,进行地址转换成HVA并对该程序的物理机内存页进行迁移。
发明内容
[0009] 有鉴于
现有技术的上述
缺陷,本发明所要解决的技术问题是提供一种在NUMA架构下基于虚拟机和宿主机内存地址转换的内存页迁移方法,使虚拟机里的应用程序的NUMA内存调优成为可能,并通过地址解析只迁移虚拟机应用程序的热页来大大降低内存调优的开销。
[0010] 为了实现上述发明目的,本发明提供了一种基于虚拟机和宿主机内存地址转换的NUMA内存迁页方法,包括以下步骤:
[0011] 步骤1、通过VMM实时监控虚拟机里的应用程序,得到所述应用程序的热页地址的集合和所述应用程序的NUMA亲和度信息;
[0012] 步骤2、当发现所述应用程序的NUMA亲和度下降到低于
阈值时,则将所述应用程序标志为需要迁移的状态;
[0013] 步骤3、对标志为需要迁移状态的所述应用程序,通过VMM获取所述应用程序运行的VCPU所在的NUMA节点作为目标节点,并对所述应用程序的热页进行虚拟机物理地址到宿主机虚拟地址的转换,将所述应用程序的热页迁移到目标节点;然后跳转到步骤1继续对虚拟机应用程序进行监控。
[0014] 进一步地,所述应用程序的NUMA亲和度信息被配置为通过计算所述应用程序运行的VCPU所在的NUMA节点与所述应用程序数据所在的NUMA节点的距离来获得。
[0015] 进一步地,所述应用程序的热页迁移到目标节点被配置为通过将转换后得到的宿主机内存页的虚拟地址和目标节点作为参数调用系统功能move_pages实现。
[0016] 本方法与现有技术相比,至少具有以下有益的技术效果:
[0017] (1)通过只迁移应用程序的热页来大幅降低NUMA内存调优的开销,提升NUMA内存调优带来的性能收益。
[0018] (2)通过对虚拟机应用程序的内存页进行GPA到宿主机HVA的地址转换来将虚拟机里的应用程序的内存页对应到宿主机相应的内存页上,使对虚拟机里的应用程序进行NUMA内存迁移成为可能。
[0019] 以下将结合
附图对本发明的构思、具体结构及产生的技术效果作进一步说明,以充分地了解本发明的目的、特征和效果。
附图说明
[0020] 图1是本发明的一个较佳
实施例的内存虚拟化引入的新的虚拟机物理地址空间示意图;
[0021] 图2是本发明的一个较佳实施例的KVM中从虚拟地址GVA到宿主机物理地址HPA的地址转换示意图;
[0022] 图3是本发明的一个较佳实施例的物理平台的非一致性内存访问(NUMA)架构的示意图;
[0023] 图4是本发明的一个较佳实施例的NUMA内存迁页的流程示意图。
具体实施方式
[0024] 下面结合附图对本发明的实施例作详细说明,本实施例在以本发明技术方案为前提下进行实施,以下给出了详细的实施方式和具体的操作过程,但本发明的保护范围不限于下述的实施例。
[0025] 如图4所示,本发明所述的基于虚拟机和宿主机内存地址转换的NUMA内存迁页方法包括以下步骤:
[0026] 步骤1、通过VMM来监控虚拟机里应用程序的运行信息。对于虚拟机里当前负荷较高的应用,通过监控应用的的内存访问来获得应用的热页。并通过计算应用程序运行的VCPU所在的NUMA节点与应用程序数据所在的NUMA节点的距离来计算程序的NUMA亲和度。
[0027] 步骤2、当监控的应用程序的NUMA亲和度低于某个阈值时(该阈值与平台相关),标志该应用程序为需要进行内存迁移状态。
[0028] 步骤3、对标志为需要进行迁移状态的程序,通过VMM获得其VCPU所在NUMA节点为目标节点t。接着,对于该应用程序的热页,由于在虚拟机中热页的地址是虚拟机物理地址GPA,所以需要转换成对应的宿主机内存页的虚拟地址HVA。相应的地址转换函数的主要代码如下所示:
[0029]
[0030] 在将虚拟机里的应用程序的热页的地址转换为HVA之后,将目标节点t和相应的热页作为参数调用内存迁页系统调用move_pages,将应用程序的热页迁移到对应的目标节点上。在对所有需要迁移的程序进行内存迁页以后,回到步骤1继续监控虚拟机的应用程序。
[0031] 综上所述,本技术方案至少具有以下有益效果:通过将NUMA内存迁移的对象从程序的所有内存减少为程序经常访问的内存热页,大幅降低了NUMA内存调优的开销,提升NUMA内存调优带来的性能收益。进一步地,通过引入虚拟机GPA到宿主机HVA的地址转换函数,使
虚拟环境下应用程序的NUMA内存调优成为可能。
[0032] 以上详细描述了本发明的较佳具体实施例。应当理解,本领域的普通技术无需创造性劳动就可以根据本发明的构思作出诸多
修改和变化。因此,凡本技术领域中技术人员依本发明的构思在现有技术的基础上通过逻辑分析、推理或者有限的实验可以得到的技术方案,皆应在由
权利要求书所确定的保护范围内。