CN107807851A - 一种虚拟机内存在numa节点间的迁移方法和装置 - Google Patents
一种虚拟机内存在numa节点间的迁移方法和装置 Download PDFInfo
- Publication number
- CN107807851A CN107807851A CN201610814580.7A CN201610814580A CN107807851A CN 107807851 A CN107807851 A CN 107807851A CN 201610814580 A CN201610814580 A CN 201610814580A CN 107807851 A CN107807851 A CN 107807851A
- Authority
- CN
- China
- Prior art keywords
- mark
- vcpu
- numa node
- memory
- internal memory
- 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
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/45541—Bare-metal, i.e. hypervisor runs directly on hardware
-
- 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45583—Memory management, e.g. access or allocation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明实施例涉及计算机领域,尤其涉及一种虚拟机内存在NUMA节点间的迁移方法和装置,用于提高VCPU内存访问速度。本发明实施例中,HyperVisor确定VM中的VCPU当前运行的物理CPU所对应的第一NUMA节点的标识与VCPU当前所访问的内存所对应的第二NUMA节点的标识不同,则从第一NUMA节点中申请目标内存,并至少将所申请的目标内存的标识和VCPU的标识传输给VM,以使VM将VCPU当前所访问的第二NUMA节点中的内存的标识替换为目标内存的标识。如此,VCPU运行的物理CPU所对应的NUMA节点与该VCPU所访问的内存所对应的NUMA节点为同一个节点,提升了VCPU访问内存的速度。
Description
技术领域
本发明实施例涉及计算机领域,尤其涉及一种虚拟机内存在NUMA节点间的迁移方法和装置。
背景技术
虚拟处理器(Virtual CPU Central Processing Unit,简称VCPU)就是中央处理器(Central Processing Unit,简称CPU)的虚拟化技术,VCPU就是单CPU模拟多CPU并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。非统一内存访问(Non Uniform Memory AccessArchitecture,简称NUMA)架构可将服务器物理资源分为多个节点,每个节点用于自己的处理器及内存资源。每个处理器访问自己本地内存的速度比访问远程内存的速度高。
管理器(Hypervisor)是一种运行在物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享一套基础物理硬件,因此也可以看作是虚拟环境中的“元”操作系统,它可以协调访问服务器上的所有物理设备和虚拟机,也叫虚拟机监视器(VirtualMachine Monitor,简称VMM)。
Hypervisor是所有虚拟化技术的核心,非中断地支持多工作负载迁移的能力是Hypervisor的基本功能。当服务器启动并执行Hypervisor时,它会给每一台虚拟机(Virtual Machine,简称VM)分配适量的内存、CPU、网络和磁盘,并加载所有虚拟机的客户操作系统。所以虚拟机的VCPU所运行的物理CPU会由于调度或其它原因发生变化,虚拟机的VCPU可为主机操作系统(host OS)的一个任务。
由于每个处理器访问自己本地内存的速度比访问远程内存的速度高,因此在NUMA系统中部署虚拟机时,为了达到最佳的性能,提高VCPU访问内存的速度,需让虚拟机VCPU所运行的物理CPU所对应的NUMA节点与该VCPU所访问的内存在同一个NUMA节点上。
图1示例性示出了现有技术中一种VCPU和NUMA节点之间的连接架构示意图,如图1所示,VM106中包括VCPU101、VCPU102、VCPU111和VCPU112。其中,VCPU101和VCPU102运行的物理CPU104所对应的NUMA节点为NUMA节点105,VCPU111和VCPU112运行的物理CPU114所对应的NUMA节点为NUMA节点115;VCPU101和VCPU102所访问的内存103在NUMA节点105上,VCPU111和VCPU112所访问的内存113在NUMA节点115上。可见,在配置时,针对每一个VCPU,VCPU所访问的内存与VCPU运行的物理CPU均位于同一个NUMA节点上。
但是在VM106运行过程中,可能因为系统调度等原因,VM在系统中的分配可能会发生变化。图1a示例性示出了现有技术中图1中VCPU运行的物理CPU发送迁移的系统结构示意图,如图1a所示,VCPU102原来运行的物理CPU104位于NUMA节点105上,后来VCPU102迁移至NUMA节点115上运行,即VCPU102迁移至物理CPU114上运行。但是VCPU102所访问的内存103仍然位于NUMA节点105上,可见,VCPU102访问内存103时属于远程访问,访问速度较低。
发明内容
本发明实施例提供一种VCPU在NUMA节点间的迁移方案,用于提高VCPU内存访问速度。
第一方面,本发明实施例提供一种虚拟机内存在非统一内存访问NUMA节点间的迁移方法,HyperVisor确定虚拟机VM中的虚拟处理器VCPU当前运行的物理处理器CPU所对应的第一NUMA节点的标识,与VCPU当前所访问的内存所对应的第二NUMA节点的标识不同,则HyperVisor从第一NUMA节点中申请目标内存,确定目标内存的标识;HyperVisor至少将所申请的目标内存的标识和VCPU的标识传输给VM;目标内存的标识和VCPU的标识用于:使VM将VCPU当前所访问的第二NUMA节点中的内存的标识替换为目标内存的标识。
可见,本发明实施例中VCPU当前运行的物理CPU所对应的第一NUMA节点的标识与VCPU当前所访问的内存所对应的第二NUMA节点的标识不同,则将VCPU所访问的第二NUMA节点上的内存替换为第一NUMA节点上的目标内存,如此,VCPU运行的物理CPU所对应的的NUMA节点与该VCPU所访问的内存所对应的NUMA节点为同一个节点,提升了VCPU访问内存的速度。另一方面,本发明实施例中实现了VCPU粒度的内存的迁移,从而可更好的适应VM的多个VCPU运行在多个NUMA节点的情况。
可选地,HyperVisor从第一NUMA节点申请目标内存,包括:HyperVisor根据内存配置表确定VCPU运行所需内存的数量;其中,内存配置表中至少包括VCPU运行所需要的内存的数量;HyperVisor根据VCPU运行所需内存的数量,从第一NUMA节点申请满足数量的目标内存。如此,可保证HyperVisor申请到满足VCPU运行所需要的内存的数量,且在内存替换后保证内存的使用总量不变。
可选地,内存配置表中还包括:VCPU当前所访问的内存所对应的第二NUMA节点的标识,以及上一次监测到的VCPU运行的物理CPU所对应的第三NUMA节点的标识。HyperVisor确定VM中的VCPU当前运行的物理CPU所对应的第一NUMA节点,与VCPU当前所访问的内存所对应的第二NUMA节点不同之前,还包括:HyperVisor监测到VCPU当前运行的物理CPU对应的第一NUMA节点的标识;HyperVisor从内存配置表中确定出上一次监测到的VCPU运行的物理CPU所对应的第三NUMA节点的标识;HyperVisor在确定第一NUMA节点的标识与第三NUMA节点的标识不同时,确定VCPU运行的物理CPU发生迁移;HyperVisor从内存配置表中确定出VCPU当前所访问的内存所对应的第二NUMA节点的标识。
具体实施中,可选地,HyperVisor监控VM的VCPU运行物理CPU所对应的NUMA节点。比如,HyperVisor周期性对VCPU运行物理CPU所对应的NUMA节点进行监测,从而可周期性监控VCPU是否发生迁移。进一步,HyperVisor维护的内存配置表,从而使HyperVisor可根据内存配置表确定出VCPU是否发生迁移,且也可确定出VCPU当前访问的内存所对应的节点的标识。
可选地,HyperVisor从第一NUMA节点中申请目标内存之后,还包括:HyperVisor将上一次监测到的VCPU运行的物理CPU所对应的第三NUMA节点的标识发送给VM;其中,第三NUMA节点的标识用于:使VM从内存页配置信息中确定出源内存页,并确定出目标内存页,将目标内存页替换源内存页:其中,源内存页中:VCPU当前运行的物理CPU对应NUMA节点的标识为第三NUMA节点的标识、且VCPU当前所访问的内存所对应的NUMA节点的标识为第二NUMA节点的标识;目标内存页中:VCPU当前运行的物理CPU对应NUMA节点的标识为第一NUMA节点的标识;VCPU当前所访问的内存的标识为第一NUMA节点中的目标内存的标识。
由于在VM中通过内存页的方式对VM中各个内存进行了管理,因此可实现对VCPU的内存的迁移,进一步通过目标内存页和源内存的替换实现了对VCPU内存的迁移,该方法实现了VCPU粒度的内存迁移,从而提高了VCPU运行的物理CPU在NUMA节点之间迁移时的内存访问速度。
可选地,HyperVisor从第一NUMA节点中申请目标内存之后,还包括:HyperVisor将内存配置表中的上一次监测到的VCPU运行的物理CPU所对应的第三NUMA节点的标识,更新为第一NUMA节点的标识;HyperVisor将内存配置表中的VCPU当前所访问的内存所对应的第二NUMA节点的标识,更新为第一NUMA节点的标识。如此,可使HyperVisor所维护的内存配置表中的信息时时处于最新状态,以便于下次VCPU在NUMA节点之间发生迁移时,HyperVisor根据内存配置表对VCPU的内存进行迁移。
可选地,为了提高VCPU访问内存的速度,本发明实施例中所维护的一个VCPU当前所访问的物理CPU所对应的NUMA节点和该VCPU当前所访问的内存所对应的NUMA节点相同,即第二NUMA节点的标识与第三NUMA节点的标识相同。也存在一种可能性,第二NUMA节点的标识与第三NUMA节点的标识不同。
可选地,HyperVisor至少将所申请的目标内存的标识和VCPU的标识传输给VM之后,还包括:HyperVisor接收VM发送的VCPU在运行过程中访问的第二NUMA节点中的内存的标识;HyperVisor释放接收到的标识对应的内存。从而可使被释放的内存被其它应用使用,提高了系统效率和内存使用率,避免过多占用内存造成的资源浪费。
第二方面,本发明实施例提供一种虚拟机内存在非统一内存访问NUMA节点间的迁移方法,VM接收管理器HyperVisor发送的第一NUMA节点中的目标内存的标识和虚拟处理器VCPU的标识;其中,VCPU当前运行的物理处理器CPU对应第一NUMA节点,VCPU当前所访问的内存对应第二NUMA节点,第一NUMA节点的标识与第二NUMA节点的标识不同;VM根据VCPU的标识,将VCPU在运行过程中访问的第二NUMA节点中的内存的标识替换为目标内存的标识。可见,本发明实施例中VCPU当前运行的物理CPU所对应的第一NUMA节点的标识与VCPU当前所访问的内存所对应的第二NUMA节点的标识不同,则将VCPU所访问的第二NUMA节点上的内存替换为第一NUMA节点上的目标内存,如此,VCPU运行的物理CPU所对应的的NUMA节点与该VCPU所访问的内存所对应的NUMA节点为同一个节点,提升了VCPU访问内存的速度。另一方面,本发明实施例中实现了VCPU粒度的内存的迁移,从而可更好的适应VM的多个VCPU运行在多个NUMA节点的情况。
可选地,VM将VCPU在运行过程中访问的第二NUMA节点中的内存的标识替换为目标内存的标识之前,VM接收HyperVisor发送的:上一次监测到的VCPU运行的物理CPU所对应的第三NUMA节点的标识。VM根据VCPU的标识,将VCPU在运行过程中访问的第二NUMA节点中的内存的标识替换为目标内存的标识,包括:VM从内存页配置信息中,确定出源内存页;其中,源内存页中:VCPU当前运行的物理CPU对应NUMA节点的标识为第三NUMA节点的标识、且VCPU当前所访问的内存所对应的NUMA节点的标识为第二NUMA节点的标识;VM确定目标内存页;其中,目标内存页中:VCPU当前运行的物理CPU对应NUMA节点的标识为第一NUMA节点的标识;VCPU当前所访问的内存的标识为第一NUMA节点中的目标内存的标识;VM将目标内存页替换源内存页。
由于在VM中通过内存页的方式对VM中各个内存进行了管理,因此可实现对VCPU的内存的迁移,进一步通过目标内存页和源内存的替换实现了对VCPU内存的迁移,该方法实现了VCPU粒度的内存迁移,从而提高了VCPU运行的物理CPU在NUMA节点之间迁移时的内存访问速度。
可选地,VM将VCPU在运行过程中访问的第二NUMA节点中的内存的标识替换为目标内存的标识之后,还包括:VM将替换前的VCPU在运行过程中访问的第二NUMA节点中的内存的标识发送给HyperVisor,以使HyperVisor将替换前的VCPU在运行过程中访问的第二NUMA节点中的内存释放。从而可使被释放的内存被其它应用使用,提高了系统效率和内存使用率,避免过多占用内存造成的资源浪费。
可选地,为了提高VCPU访问内存的速度,本发明实施例中所维护的一个VCPU当前所访问的物理CPU所对应的NUMA节点和该VCPU当前所访问的内存所对应的NUMA节点相同,即第二NUMA节点的标识与第三NUMA节点的标识相同。也存在一种可能性,第二NUMA节点的标识与第三NUMA节点的标识不同。
第三方面,本发明实施例提供的一种HyperVisor,包括收发单元、处理单元和存储单元。
处理单元,用于确定VM中的虚拟处理器VCPU当前运行的物理处理器CPU所对应的第一NUMA节点的标识与VCPU当前所访问的内存所对应的第二NUMA节点的标识不同;则从第一NUMA节点中申请目标内存,确定目标内存的标识;收发单元,用于至少将所申请的目标内存的标识和VCPU的标识传输给VM;目标内存的标识和VCPU的标识用于:使VM将VCPU当前所访问的第二NUMA节点中的内存的标识替换为目标内存的标识;存储单元,用于存储VM中的虚拟处理器VCPU当前运行的物理处理器CPU所对应的第一NUMA节点的标识。可选地,存储单元用于存储内存配置表。
可见,本发明实施例中VCPU当前运行的物理CPU所对应的第一NUMA节点的标识与VCPU当前所访问的内存所对应的第二NUMA节点的标识不同,则将VCPU所访问的第二NUMA节点上的内存替换为第一NUMA节点上的目标内存,如此,VCPU运行的物理CPU所对应的的NUMA节点与该VCPU所访问的内存所对应的NUMA节点为同一个节点,提升了VCPU访问内存的速度。另一方面,本发明实施例中实现了VCPU粒度的内存的迁移,从而可更好的适应VM的多个VCPU运行在多个NUMA节点的情况。
可选地,处理单元,用于:根据内存配置表确定VCPU运行所需内存的数量;其中,内存配置表中至少包括VCPU运行所需要的内存的数量;根据VCPU运行所需内存的数量,从第一NUMA节点申请满足数量的目标内存。如此,可保证HyperVisor申请到满足VCPU运行所需要的内存的数量,且在内存替换后保证内存的使用总量不变。
可选地,内存配置表中还包括:VCPU当前所访问的内存所对应的第二NUMA节点的标识,以及上一次监测到的VCPU运行的物理CPU所对应的第三NUMA节点的标识。处理单元,还用于:监测到VCPU当前运行的物理CPU对应的第一NUMA节点的标识;从内存配置表中确定出上一次监测到的VCPU运行的物理CPU所对应的第三NUMA节点的标识;在确定第一NUMA节点的标识与第三NUMA节点的标识不同时,确定VCPU运行的物理CPU发生迁移;从内存配置表中确定出VCPU当前所访问的内存所对应的第二NUMA节点的标识。
具体实施中,可选地,HyperVisor监控VM的VCPU运行物理CPU所对应的NUMA节点。比如,HyperVisor周期性对VCPU运行物理CPU所对应的NUMA节点进行监测,从而可周期性监控VCPU是否发生迁移。进一步,HyperVisor维护的内存配置表,从而使HyperVisor可根据内存配置表确定出VCPU是否发生迁移,且也可确定出VCPU当前访问的内存所对应的节点的标识。
可选地,收发单元,还用于:将上一次监测到的VCPU运行的物理CPU所对应的第三NUMA节点的标识发送给VM。其中,第三NUMA节点的标识用于:使VM从内存页配置信息中确定出源内存页,并确定出目标内存页,将目标内存页替换源内存页;其中,源内存页中:VCPU当前运行的物理CPU对应NUMA节点的标识为第三NUMA节点的标识、且VCPU当前所访问的内存所对应的NUMA节点的标识为第二NUMA节点的标识;目标内存页中:VCPU当前运行的物理CPU对应NUMA节点的标识为第一NUMA节点的标识;VCPU当前所访问的内存的标识为第一NUMA节点中的目标内存的标识。
由于在VM中通过内存页的方式对VM中各个内存进行了管理,因此可实现对VCPU的内存的迁移,进一步通过目标内存页和源内存的替换实现了对VCPU内存的迁移,该方法实现了VCPU粒度的内存迁移,从而提高了VCPU运行的物理CPU在NUMA节点之间迁移时的内存访问速度。
可选地,处理单元,还用于:将内存配置表中的上一次监测到的VCPU运行的物理CPU所对应的第三NUMA节点的标识,更新为第一NUMA节点的标识;将内存配置表中的VCPU当前所访问的内存所对应的第二NUMA节点的标识,更新为第一NUMA节点的标识。如此,可使HyperVisor所维护的内存配置表中的信息时时处于最新状态,以便于下次VCPU在NUMA节点之间发生迁移时,HyperVisor根据内存配置表对VCPU的内存进行迁移。
可选地,通常来说,为了提高VCPU访问内存的速度,本发明实施例中所维护的一个VCPU当前所访问的物理CPU所对应的NUMA节点和该VCPU当前所访问的内存所对应的NUMA节点相同,即第二NUMA节点的标识与第三NUMA节点的标识相同。也存在一种可能性,第二NUMA节点的标识与第三NUMA节点的标识不同。
可选地,收发单元,还用于接收VM发送的VCPU在运行过程中访问的第二NUMA节点中的内存的标识;处理单元,还用于释放接收到的标识对应的内存。从而可使被释放的内存被其它应用使用,提高了系统效率和内存使用率,避免过多占用内存造成的资源浪费。
第四方面,本发明实施例提供的一种VM,包括收发单元、处理单元和存储单元。收发单元,用于接收管理器HyperVisor发送的第一NUMA节点中的目标内存的标识和虚拟处理器VCPU的标识;其中,VCPU当前运行的物理处理器CPU对应第一NUMA节点,VCPU当前所访问的内存对应第二NUMA节点,第一NUMA节点的标识与第二NUMA节点的标识不同;处理单元,用于根据VCPU的标识,将VCPU在运行过程中访问的第二NUMA节点中的内存的标识替换为目标内存的标识;存储单元,用于存储各个VM访问的内存所对应的节点的标识。
可见,本发明实施例中VCPU当前运行的物理CPU所对应的第一NUMA节点的标识与VCPU当前所访问的内存所对应的第二NUMA节点的标识不同,则将VCPU所访问的第二NUMA节点上的内存替换为第一NUMA节点上的目标内存,如此,VCPU运行的物理CPU所对应的的NUMA节点与该VCPU所访问的内存所对应的NUMA节点为同一个节点,提升了VCPU访问内存的速度。另一方面,本发明实施例中实现了VCPU粒度的内存的迁移,从而可更好的适应VM的多个VCPU运行在多个NUMA节点的情况。
可选地,收发单元,还用于:接收HyperVisor发送的:上一次监测到的VCPU运行的物理CPU所对应的第三NUMA节点的标识。处理单元,用于:从内存页配置信息中,确定出源内存页;其中,源内存页中:VCPU当前运行的物理CPU对应NUMA节点的标识为第三NUMA节点的标识、且VCPU当前所访问的内存所对应的NUMA节点的标识为第二NUMA节点的标识;确定目标内存页;其中,目标内存页中:VCPU当前运行的物理CPU对应NUMA节点的标识为第一NUMA节点的标识;VCPU当前所访问的内存的标识为第一NUMA节点中的目标内存的标识;将目标内存页替换源内存页。
由于在VM中通过内存页的方式对VM中各个内存进行了管理,因此可实现对VCPU的内存的迁移,进一步通过目标内存页和源内存的替换实现了对VCPU内存的迁移,该方法实现了VCPU粒度的内存迁移,从而提高了VCPU运行的物理CPU在NUMA节点之间迁移时的内存访问速度。
可选地,收发单元,还用于:将替换前的VCPU在运行过程中访问的第二NUMA节点中的内存的标识发送给HyperVisor,以使HyperVisor将替换前的VCPU在运行过程中访问的第二NUMA节点中的内存释放。从而可使被释放的内存被其它应用使用,提高了系统效率和内存使用率,避免过多占用内存造成的资源浪费。
可选地,通常来说,为了提高VCPU访问内存的速度,本发明实施例中所维护的一个VCPU当前所访问的物理CPU所对应的NUMA节点和该VCPU当前所访问的内存所对应的NUMA节点相同,即第二NUMA节点的标识与第三NUMA节点的标识相同。也存在一种可能性,第二NUMA节点的标识与第三NUMA节点的标识不同。
第五方面,本发明实施例提供的一种HyperVisor,包括处理器、存储器和收发器。
处理器,用于确定虚拟机VM中的虚拟处理器VCPU当前运行的物理处理器CPU所对应的第一NUMA节点的标识与VCPU当前所访问的内存所对应的第二NUMA节点的标识不同;则从第一NUMA节点中申请目标内存,确定目标内存的标识;收发器,用于至少将所申请的目标内存的标识和VCPU的标识传输给VM;目标内存的标识和VCPU的标识用于:使VM将VCPU当前所访问的第二NUMA节点中的内存的标识替换为目标内存的标识;存储器,用于存储VM中的虚拟处理器VCPU当前运行的物理处理器CPU所对应的第一NUMA节点的标识。可选地,存储器用于存储内存配置表。
可见,本发明实施例中VCPU当前运行的物理CPU所对应的第一NUMA节点的标识与VCPU当前所访问的内存所对应的第二NUMA节点的标识不同,则将VCPU所访问的第二NUMA节点上的内存替换为第一NUMA节点上的目标内存,如此,VCPU运行的物理CPU所对应的的NUMA节点与该VCPU所访问的内存所对应的NUMA节点为同一个节点,提升了VCPU访问内存的速度。另一方面,本发明实施例中实现了VCPU粒度的内存的迁移,从而可更好的适应VM的多个VCPU运行在多个NUMA节点的情况。
可选地,处理器,用于根据内存配置表确定VCPU运行所需内存的数量;其中,内存配置表中至少包括VCPU运行所需要的内存的数量;根据VCPU运行所需内存的数量,从第一NUMA节点申请满足数量的目标内存。如此,可保证HyperVisor申请到满足VCPU运行所需要的内存的数量,且在内存替换后保证内存的使用总量不变。可选地,内存配置表中还包括:VCPU当前所访问的内存所对应的第二NUMA节点的标识,以及上一次监测到的VCPU运行的物理CPU所对应的第三NUMA节点的标识。处理器,还用于:监测到VCPU当前运行的物理CPU对应的第一NUMA节点的标识;从内存配置表中确定出上一次监测到的VCPU运行的物理CPU所对应的第三NUMA节点的标识;在确定第一NUMA节点的标识与第三NUMA节点的标识不同时,确定VCPU运行的物理CPU发生迁移;从内存配置表中确定出VCPU当前所访问的内存所对应的第二NUMA节点的标识。
具体实施中,可选地,HyperVisor监控VM的VCPU运行物理CPU所对应的NUMA节点。比如,HyperVisor周期性对VCPU运行物理CPU所对应的NUMA节点进行监测,从而可周期性监控VCPU是否发生迁移。进一步,HyperVisor维护的内存配置表,从而使HyperVisor可根据内存配置表确定出VCPU是否发生迁移,且也可确定出VCPU当前访问的内存所对应的节点的标识。
可选地,收发器,还用于将上一次监测到的VCPU运行的物理CPU所对应的第三NUMA节点的标识发送给VM。其中,第三NUMA节点的标识用于:使VM从内存页配置信息中确定出源内存页,并确定出目标内存页,将目标内存页替换源内存页:其中,源内存页中:VCPU当前运行的物理CPU对应NUMA节点的标识为第三NUMA节点的标识、且VCPU当前所访问的内存所对应的NUMA节点的标识为第二NUMA节点的标识;目标内存页中:VCPU当前运行的物理CPU对应NUMA节点的标识为第一NUMA节点的标识;VCPU当前所访问的内存的标识为第一NUMA节点中的目标内存的标识。
由于在VM中通过内存页的方式对VM中各个内存进行了管理,因此可实现对VCPU的内存的迁移,进一步通过目标内存页和源内存的替换实现了对VCPU内存的迁移,该方法实现了VCPU粒度的内存迁移,从而提高了VCPU运行的物理CPU在NUMA节点之间迁移时的内存访问速度。
可选地,处理器,还用于将内存配置表中的上一次监测到的VCPU运行的物理CPU所对应的第三NUMA节点的标识,更新为第一NUMA节点的标识;将内存配置表中的VCPU当前所访问的内存所对应的第二NUMA节点的标识,更新为第一NUMA节点的标识。
如此,可使HyperVisor所维护的内存配置表中的信息时时处于最新状态,以便于下次VCPU在NUMA节点之间发生迁移时,HyperVisor根据内存配置表对VCPU的内存进行迁移。
可选地,通常来说,为了提高VCPU访问内存的速度,本发明实施例中所维护的一个VCPU当前所访问的物理CPU所对应的NUMA节点和该VCPU当前所访问的内存所对应的NUMA节点相同,即第二NUMA节点的标识与第三NUMA节点的标识相同。也存在一种可能性,第二NUMA节点的标识与第三NUMA节点的标识不同。
可选地,收发器,还用于接收VM发送的VCPU在运行过程中访问的第二NUMA节点中的内存的标识。处理器,还用于释放接收到的标识对应的内存。从而可使被释放的内存被其它应用使用,提高了系统效率和内存使用率,避免过多占用内存造成的资源浪费。
第六方面,本发明实施例提供一种VM,包括处理器、存储器和收发器。
收发器,用于接收管理器HyperVisor发送的第一NUMA节点中的目标内存的标识和虚拟处理器VCPU的标识;其中,VCPU当前运行的物理处理器CPU对应第一NUMA节点,VCPU当前所访问的内存对应第二NUMA节点,第一NUMA节点的标识与第二NUMA节点的标识不同;处理器,用于根据VCPU的标识,将VCPU在运行过程中访问的第二NUMA节点中的内存的标识替换为目标内存的标识。存储器,用于存储各个VM访问的内存所对应的节点的标识。
可见,本发明实施例中VCPU当前运行的物理CPU所对应的第一NUMA节点的标识与VCPU当前所访问的内存所对应的第二NUMA节点的标识不同,则将VCPU所访问的第二NUMA节点上的内存替换为第一NUMA节点上的目标内存,如此,VCPU运行的物理CPU所对应的的NUMA节点与该VCPU所访问的内存所对应的NUMA节点为同一个节点,提升了VCPU访问内存的速度。另一方面,本发明实施例中实现了VCPU粒度的内存的迁移,从而可更好的适应VM的多个VCPU运行在多个NUMA节点的情况。
可选地,收发器,还用于接收HyperVisor发送的:上一次监测到的VCPU运行的物理CPU所对应的第三NUMA节点的标识。处理器,用于:从内存页配置信息中,确定出源内存页;其中,源内存页中:VCPU当前运行的物理CPU对应NUMA节点的标识为第三NUMA节点的标识、且VCPU当前所访问的内存所对应的NUMA节点的标识为第二NUMA节点的标识;确定目标内存页;其中,目标内存页中:VCPU当前运行的物理CPU对应NUMA节点的标识为第一NUMA节点的标识;VCPU当前所访问的内存的标识为第一NUMA节点中的目标内存的标识;将目标内存页替换源内存页。
由于在VM中通过内存页的方式对VM中各个内存进行了管理,因此可实现对VCPU的内存的迁移,进一步通过目标内存页和源内存的替换实现了对VCPU内存的迁移,该方法实现了VCPU粒度的内存迁移,从而提高了VCPU运行的物理CPU在NUMA节点之间迁移时的内存访问速度。
可选地,收发器,还用于将替换前的VCPU在运行过程中访问的第二NUMA节点中的内存的标识发送给HyperVisor,以使HyperVisor将替换前的VCPU在运行过程中访问的第二NUMA节点中的内存释放。从而可使被释放的内存被其它应用使用,提高了系统效率和内存使用率,避免过多占用内存造成的资源浪费。
可选地,通常来说,为了提高VCPU访问内存的速度,本发明实施例中所维护的一个VCPU当前所访问的物理CPU所对应的NUMA节点和该VCPU当前所访问的内存所对应的NUMA节点相同,即第二NUMA节点的标识与第三NUMA节点的标识相同。也存在一种可能性,第二NUMA节点的标识与第三NUMA节点的标识不同。
本发明实施例中,HyperVisor确定VM中的VCPU当前运行的物理CPU所对应的第一NUMA节点的标识与VCPU当前所访问的内存所对应的第二NUMA节点的标识不同,则从第一NUMA节点中申请目标内存,确定目标内存的标识;并至少将所申请的目标内存的标识和VCPU的标识传输给VM。目标内存的标识和VCPU的标识用于:使VM将VCPU当前所访问的第二NUMA节点中的内存的标识替换为目标内存的标识。可见,本发明实施例中VCPU当前运行的物理CPU所对应的第一NUMA节点的标识与VCPU当前所访问的内存所对应的第二NUMA节点的标识不同,则将VCPU所访问的第二NUMA节点上的内存替换为第一NUMA节点上的目标内存,如此,VCPU运行的物理CPU所对应的的NUMA节点与该VCPU所访问的内存所对应的NUMA节点为同一个节点,提升了VCPU访问内存的速度。另一方面,本发明实施例中实现了VCPU粒度的内存的迁移,从而可更好的适应VM的多个VCPU运行在多个NUMA节点的情况。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍。
图1为现有技术中一种VCPU和NUMA节点之间的连接架构示意图;
图1a为现有技术中图1中VCPU运行的物理CPU发送迁移的系统结构示意图;
图2为本发明实施例适用的一种系统架构示意图;
图2a为本发明实施例提供基于图1的系统架构中VCPU所访问的物理CPU发生迁移时的系统架构示意图;
图2b为本发明实施例提供的一种虚拟机内存在NUMA节点间的迁移方法的流程示意图;
图2c为本发明实施例提供另一种虚拟机内存在NUMA节点间的迁移方法的流程示意图;
图3为本发明实施例提供的一种HyperVisor的结构示意图;
图4为本发明实施例提供的一种VM的结构示意图;
图5为本发明实施例提供的一种HyperVisor的结构示意图;
图6为本发明实施例提供的一种VM的结构示意图。
具体实施方式
为了使本发明的目的、技术方案及有益效果更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明实施例中的VCPU,相对于物理CPU而言,为虚拟机内的CPU。通过在现有平台(机器)上添加一层虚拟机监控程序软件而实现对系统的虚拟化,如VCPU,虚拟内存管理器(MMU)和虚拟I/O系统等。从应用程序的角度看,程序运行在虚拟机上与运行在其对应的实体计算机上一样。
VCPU就是cpu的虚拟化技术,CPU的虚拟化就是单CPU模拟多CPU并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。
本发明实施例中的Hypervisor是一种运行在物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享一套基础物理硬件,因此也可以看作是虚拟环境中的“元”操作系统,它可以协调访问服务器上的所有物理设备和虚拟机,也叫虚拟机监视器(Virtual Machine Monitor)。Hypervisor是所有虚拟化技术的核心。非中断地支持多工作负载迁移的能力是Hypervisor的基本功能。当服务器启动并执行Hypervisor时,它会给每一台虚拟机分配适量的内存、CPU、网络和磁盘,并加载所有虚拟机的客户操作系统。
图2示例性示出了本发明实施例适用的一种系统架构示意图,如图2所示,本发明实施例适用于一种服务器。服务器采用NUMA技术。该服务中包括HyperVisor121,还包括多个VM,比如VM106、VM122、VM123等等。每个VM中包括一个或多个VCPU。
图2a示例性示出了本发明实施例中基于图1的系统架构中VCPU所访问的物理CPU发生迁移时的系统架构示意图,如图2a所示,本发明实施例中,VCPU102原来运行的物理CPU104位于NUMA节点105上,后来VCPU102迁移至NUMA节点115上运行,即VCPU102迁移至物理CPU114上运行。本发明实施例中一旦监测到VCPU102所运行的物理CPU发生迁移,则本发明实施例中也将VCPU所访问的内存进行迁移,即VCPU102所访问的内存由内存103迁移为内存113,可见,应用本发明实施例之后,VCPU102所运行的物理CPU在NUMA节点之间迁移之后,VCPU102所访问的内存也会在NUMA节点之间迁移,且迁移后VCPU102所访问的内存113和所运行的物理CPU114位于同一个NUMA节点115上,可见,本发明实施例所提供的方法中,VCPU运行的物理CPU所对应的的NUMA节点与该VCPU所访问的内存所对应的NUMA节点为同一个节点,提升了VCPU访问内存的速度。下面详细说明达到上述有益效果所采用的方案。
图2b示例性示出了本发明实施例提供的一种虚拟机内存在NUMA节点间的迁移方法的流程示意图。
基于图2和图2a所示的内容,如图2b所示,本发明实施例提供的一种虚拟机内存在NUMA节点间的迁移方法,包括以下步骤:
步骤201,管理器HyperVisor确定虚拟机VM中的虚拟处理器VCPU当前运行的物理处理器CPU所对应的第一NUMA节点的标识,与VCPU当前所访问的内存所对应的第二NUMA节点的标识不同;
步骤202,HyperVisor从第一NUMA节点中申请目标内存,确定目标内存的标识;
步骤203,HyperVisor至少将所申请的目标内存的标识和VCPU的标识传输给VM;目标内存的标识和VCPU的标识用于:使VM将VCPU当前所访问的第二NUMA节点中的内存的标识替换为目标内存的标识;
步骤204,虚拟机VM接收管理器HyperVisor发送的第一NUMA节点中的目标内存的标识和虚拟处理器VCPU的标识;其中,VCPU当前运行的物理处理器CPU对应第一NUMA节点,VCPU当前所访问的内存对应第二NUMA节点,第一NUMA节点的标识与第二NUMA节点的标识不同;
步骤205,VM根据VCPU的标识,将VCPU在运行过程中访问的第二NUMA节点中的内存的标识替换为目标内存的标识。
本发明实施例中实现了VCPU粒度的内存的迁移,从而可更好的适应VM的多个VCPU运行在多个NUMA节点的情况。
可选地,在上述步骤203中,目标内存的标识包括该目标内存的物理起始地址。如果该目标内存包括一段连续的内存,则目标内存的标识包括该段内存的物理起始地址。如果该目标内存包括多段内存,而不是包括一段连续的内存,则目标内存的标识包括该多段内存中的每段内存的物理起始地址。
另一种可选地实施方式中,目标内存的标识除了包括目标内存的物理起始地址之外,还包括目标内存的大小。如果该目标内存包括一段连续的内存,则目标内存的标识包括该段内存的物理起始地址,以及该段内存的大小。如果该目标内存包括多段内存,而不是包括一段连续的内存,则目标内存的标识包括该多段内存中的每段内存的物理起始地址以及每段内存的大小。如此,可更加便于VM管理目标内存。
另一种可选地实施方式中,目标内存的标识除了包括目标内存的物理起始地址、目标内存的大小之外,还可包括该目标内存所对应的NUMA节点标识。比如,上述步骤202中,HyperVisor从第一NUMA节点中申请目标内存,因此目标内存所对应的NUMA节点标识为第一NUMA节。如果该目标内存包括一段连续的内存,则目标内存的标识包括该段内存的物理起始地址,以及该段内存的大小、该段内存所对应的NUMA节点标识。如果该目标内存包括多段内存,而不是包括一段连续的内存,则该多段内存均为从第一NUMA节点中申请的,则目标内存的标识包括该多段内存中的每段内存的物理起始地址、每段内存的大小,以及每段内存所对应的NUMA节点标识。如此,可更加便于VM管理目标内存。
可选地,上述步骤中,VCPU的标识包括用于标识出VCPU的信息。VM通常管理多个VCPU,因此VM接收到VCPU的标识时,可以确定出VM所管理的哪个VCPU在运行过程中访问的NUMA节点中的内存的标识需要替换,从而触发该VCPU的内存迁移。
可见,本发明实施例中VCPU当前运行的物理CPU所对应的第一NUMA节点的标识与VCPU当前所访问的内存所对应的第二NUMA节点的标识不同,则将VCPU所访问的第二NUMA节点上的内存替换为第一NUMA节点上的目标内存,如此,VCPU运行的物理CPU所对应的的NUMA节点与该VCPU所访问的内存所对应的NUMA节点为同一个节点,提升了VCPU访问内存的速度。
本发明实施例中HyperVisor维护各个VM中内存的配置信息,以及各个VCPU在NUMA系统中的分布情况的信息。比如,表1示例性示出了本发明实施例提供的一种内存配置表,基于图1所示的系统架构。该内存配置表由HyperVisor维护。
表1内存配置表
以VCPU101对应的一列为例对表1中的内容进行介绍,如表1所示,HyperVisor维护的内存配置表中显示VCPU101运行的物理CPU所对应的NUMA节点为NUMA节点105,VCPU101所访问的内存所对应的NUMA节点为NUMA节点105,VCPU101运行所需内存的数量为200MB。
可选地,内存配置表中还包括:VCPU当前所访问的内存所对应的第二NUMA节点的标识,以及上一次监测到的VCPU运行的物理CPU所对应的第三NUMA节点的标识。
HyperVisor确定VM中的VCPU当前运行的物理CPU所对应的第一NUMA节点,与VCPU当前所访问的内存所对应的第二NUMA节点不同之前,还包括:
HyperVisor监测到VCPU当前运行的物理CPU对应的第一NUMA节点的标识;HyperVisor从内存配置表中确定出上一次监测到的VCPU运行的物理CPU所对应的第三NUMA节点的标识;HyperVisor在确定第一NUMA节点的标识与第三NUMA节点的标识不同时,确定VCPU运行的物理CPU发生迁移;HyperVisor从内存配置表中确定出VCPU当前所访问的内存所对应的第二NUMA节点的标识。
具体实施中,可选地,HyperVisor监控VM的VCPU运行物理CPU所对应的NUMA节点。比如,HyperVisor周期性对VCPU运行物理CPU所对应的NUMA节点进行监测,从而可周期性监控VCPU是否发生迁移。进一步,HyperVisor维护的内存配置表,从而使HyperVisor可根据内存配置表确定出VCPU是否发生迁移,且也可确定出VCPU当前访问的内存所对应的节点的标识。
下面通过一个例子对HyperVisor的工作过程进行示例性介绍,内存配置表中维护的为VCPU当前运行物理CPU所对应的NUMA节点,为第三NUMA节点;HyperVisor下一次监测到VCPU运行物理CPU所对应的NUMA节点为第一NUMA节点。
一种可能的结果为,HyperVisor根据内存配置表中的信息确定出第三NUMA节点,且HyperVisor确定第三NUMA节点和第一NUMA节点相同,则HyperVisor确定该VCPU所运行的物理CPU并未在NUMA节点之间发生迁移。
另一种可能的结果为,HyperVisor根据内存配置表中的信息确定出第一NUMA节点,且HyperVisor确定第三NUMA节点和第一NUMA节点不同,则HyperVisor确定该VCPU所运行的物理CPU在NUMA节点之间发生迁移。即该VCPU所运行的物理CPU从第三NUMA节点迁移至第一NUMA节点。
进一步,由于内存配置表中维护的为VCPU当前所访问的内存所对应的NUMA节点的标识,因此HyperVisor在确定该VCPU所运行的物理CPU在NUMA节点之间发生迁移之后,从内存配置表中确定出VCPU当前所访问的内存所对应的NUMA节点的标识,为第二NUMA节点的标识。
可选地,通常来说,为了提高VCPU访问内存的速度,本发明实施例中所维护的一个VCPU当前所访问的物理CPU所对应的NUMA节点和该VCPU当前所访问的内存所对应的NUMA节点相同,即第二NUMA节点的标识与第三NUMA节点的标识相同。也存在一种可能性,第二NUMA节点的标识与第三NUMA节点的标识不同。
进一步,本发明实施例中可选地,确定第二NUMA节点的标识是否与第一NUMA节点的标识相同,也就是说,本发明实施例中确定该VCPU所运行的物理CPU在NUMA节点之间发生迁移之后,确定发生迁移之后的该VCPU所运行的物理CPU所对应的第一NUMA节点的标识与该VCPU当前所访问的内存所对应的第二NUMA节点的标识是否相同。可选地,若第一NUMA节点标识与第二NUMA节点的标识相同,则无需再次对该VCPU的内存进行迁移。在确定第一NUMA节点标识与第二NUMA节点的标识不相同时,执行该VCPU内存迁移过程,以便使VCPU所访问的内存所对应的NUMA节点与该VCPU所运行的物理CPU所对应的NUMA节点相同。
可选地,HyperVisor从第一NUMA节点申请目标内存,包括:HyperVisor根据内存配置表确定VCPU运行所需内存的数量;其中,内存配置表中至少包括VCPU运行所需要的内存的数量;HyperVisor根据VCPU运行所需内存的数量,从第一NUMA节点申请满足数量的目标内存。如此,可保证HyperVisor申请到满足VCPU运行所需要的内存的数量,且在内存替换后保证内存的使用总量不变。
本发明实施例中,HyperVisor至少将所申请的目标内存的标识和VCPU的标识传输给VM。具体来说,HyperVisor可以通过任何一种主/客(host/guest)通信的手段,把所申请的目标内存的标识和VCPU的标识传输给VM。比如HyperVisor生成目标内存页,目标内存页中包括目标内存的标识和VCPU的标识。
举例来说,HyperVisor还维护各个VCPU运行所需内存的数量,比如表1中所示。VCPU102运行的物理CPU所对应的NUMA节点已经从NUMA节点105迁移至NUMA节点115,且VCPU102运行所需内存的数量为1GB,则HyperVisor在NUMA节点115上向操作系统(Operating System,简称OS)申请1GB的内存。比如通过alloc_pages_node(numa_node_id(),gfp_mask,order)申请内存,通过第一个参数numa_node_id确定在哪个NUMA节点上申请内存。
可选地,HyperVisor从第一NUMA节点中申请目标内存之后,还包括:HyperVisor将上一次监测到的VCPU运行的物理CPU所对应的第三NUMA节点的标识发送给VM。其中,第三NUMA节点的标识用于:使VM从内存页配置信息中确定出源内存页,并确定出目标内存页,将目标内存页替换源内存页。其中,源内存页中:VCPU当前运行的物理CPU对应NUMA节点的标识为第三NUMA节点的标识、且VCPU当前所访问的内存所对应的NUMA节点的标识为第二NUMA节点的标识;目标内存页中:VCPU当前运行的物理CPU对应NUMA节点的标识为第一NUMA节点的标识;VCPU当前所访问的内存的标识为第一NUMA节点中的目标内存的标识。
相应地,可选地,VM将VCPU在运行过程中访问的第二NUMA节点中的内存的标识替换为目标内存的标识之前,还包括:VM接收HyperVisor发送的上一次监测到的VCPU运行的物理CPU所对应的第三NUMA节点的标识。
进一步,可选地,VM根据VCPU的标识,将VCPU在运行过程中访问的第二NUMA节点中的内存的标识替换为目标内存的标识,包括:VM从内存页配置信息中,确定出源内存页;其中,源内存页中:VCPU当前运行的物理CPU对应NUMA节点的标识为第三NUMA节点的标识、且VCPU当前所访问的内存所对应的NUMA节点的标识为第二NUMA节点的标识;VM确定目标内存页;其中,目标内存页中:VCPU当前运行的物理CPU对应NUMA节点的标识为第一NUMA节点的标识;VCPU当前所访问的内存的标识为第一NUMA节点中的目标内存的标识;VM将目标内存页替换源内存页。
由于在VM中通过内存页的方式对VM中各个内存进行了管理,因此可实现对VCPU的内存的迁移,进一步通过目标内存页和源内存的替换实现了对VCPU内存的迁移,该方法实现了VCPU粒度的内存迁移,从而提高了VCPU运行的物理CPU在NUMA节点之间迁移时的内存访问速度。
可选地,VM也维护一些信息,内存页的使用信息,可为一个表格或者一个文档等形式。VM维护的信息中包括内存页的标识,每个内存页的标识所对应的VCPU的信息等。VM可通过VCPU的标识找到需要源内存页,并进一步将源内存页迁出,并进而新建并保存目标内存页。
可选地,本发明实施例中VM内存管理增加一种NUMAaware页类型。因为VM在运行过程中,并不知道自己的哪些内存是对应于哪个NUMA节点的。VM中维护一些内存页,内存页中包括源内存页和目标内存页。举一个例子对VM维护的任一个内存页进行一些说明。在支持4KB页大小并有1GB物理内存的机器上,物理内存会被划分为262144个内存页。内核用页结构(struct page)表示系统中的每个内存页。内核通过这样的数据结构管理系统中所有的内存页,因为内核需要知道一个内存页是否空闲,谁有拥有这个内存页。拥有者可能是:用户空间进程、动态分配的内核数据、静态内核代码、页高速缓存等等。系统中每一个内存页都要分配这样一个结构体,进行内存管理。
本发明实施例中VM将目标内存页替换源内存页即为新增加的物理页创建新的页结构,加入到OS的内存管理中。在某些版本中,可选地,该动作可通过__free_page这个接口简单的实现。本领域技术人员可知,不同版本,VM将目标内存页替换源内存页具体操作步骤可能不同,本发明实施例不做详细限制。
可选地,并非VM所管理的所有内存均需要关注该内存属于哪个NUMA节点,也就是说VM仅仅管理需要关注的一些内存所对应的NUMA节点。因此引入一种NUMA aware内存的定义,即NUMA敏感内存类型,NUMA aware页信息可以通过一个结构体进行定义,并关联到实际的内存页结构中。比如:
从上述例子可看出,NUMA aware页信息可关联到实际的内存页结构,并包括有内存所对应的NUMA节点,当前运行的物理CPU所对应的NUMA节点。可根据该NUMA aware页信息找到实际的内存页,也可找到该内存页所对应的VCPU的相关信息。
可选地,VM在Linux下可以采用类似migrate_pages这个内核接口函数的功能完成迁移。Migrate_pages允许在进程运行过程中,替换内存页的物理位置,这意味着虽然进程的虚拟地址看起来没有变化,但这些虚拟地址的内存页的物理地址已经被重新分配了。
可选地,HyperVisor从第一NUMA节点中申请目标内存之后,还包括:HyperVisor将内存配置表中的上一次监测到的VCPU运行的物理CPU所对应的第三NUMA节点的标识,更新为第一NUMA节点的标识;HyperVisor将内存配置表中的VCPU当前所访问的内存所对应的第二NUMA节点的标识,更新为第一NUMA节点的标识。
基于上述表1举个例子,比如上述表1中VCPU102运行的物理CPU所对应的NUMA节点已经从NUMA节点105迁移至NUMA节点115,表2示例性示出了表1中VCPU在NUMA节点之间迁移之后的示意图,如表2所示,则HyperVisor将内存配置表中的VCPU102运行的物理CPU所对应的NUMA节点标识更新为NUMA节点115。并且将内存配置表中的VCPU所访问的内存所对应的NUMA节点的标识更新为NUMA节点115。
表2内存配置表
可选地,VM将VCPU在运行过程中访问的第二NUMA节点中的内存的标识替换为目标内存的标识之后,还包括:
VM将替换前的VCPU在运行过程中访问的第二NUMA节点中的内存的标识发送给HyperVisor,以使HyperVisor将替换前的VCPU在运行过程中访问的第二NUMA节点中的内存释放。
相应地,可选地,HyperVisor至少将所申请的目标内存的标识和VCPU的标识传输给VM之后,还包括:HyperVisor接收VM发送的VCPU在运行过程中访问的第二NUMA节点中的内存的标识;HyperVisor释放接收到的标识对应的内存。
可见,本发明实施例中,VM将目标内存加入自身的内存管理,从而完成了NUMA架构下内存的置换,并将置换后的VCPU原来访问的内存还给了HyperVisor,以使HyperVisor释放该内存。可见,内存置换后,VM所使用的内存的总数量不变,仅仅是内存在NUMA节点之间的分布发生了变化。
可选地,VM可以通过任何一种主/客(host/guest)通信的手段,把所替换的源内存页发送给HyperVisor,以使HyperVisor释放该源内存页中包括的内存。
为了进一步对上述内容进行介绍,图2c示例性示出本发明实施例提供另一种虚拟机内存在NUMA节点间的迁移方法的流程示意图,如图2c所示,该方法包括:
步骤211,管理器HyperVisor监测到虚拟处理器VCPU当前运行的物理处理器CPU对应的第一NUMA节点的标识;从内存配置表中确定出上一次监测到的VCPU运行的物理CPU所对应的第三NUMA节点的标识;
步骤212,HyperVisor确定第一NUMA节点的标识与第三NUMA节点的标识是否相同;若相同,则结束;若不相同,则执行步骤213;
步骤213,HyperVisor从内存配置表中确定出VCPU当前所访问的内存所对应的第二NUMA节点的标识;
步骤214,HyperVisor确定第一NUMA节点的标识与第二NUMA节点的标识是否相同;若相同,则结束;若不相同,则执行步骤215;
步骤215,HyperVisor从第一NUMA节点中申请目标内存,确定目标内存的标识;
步骤216,HyperVisor将所申请的目标内存的标识和VCPU的标识传输给虚拟机VM;
步骤217,HyperVisor将内存配置表中的上一次监测到的VCPU运行的物理CPU所对应的第三NUMA节点的标识,更新为第一NUMA节点的标识;HyperVisor将内存配置表中的VCPU当前所访问的内存所对应的第二NUMA节点的标识,更新为第一NUMA节点的标识;
步骤218,VM接收HyperVisor发送的第一NUMA节点中的目标内存的标识和虚拟处理器VCPU的标识;
步骤219,VM根据VCPU的标识,将VCPU在运行过程中访问的第二NUMA节点中的内存的标识替换为目标内存的标识。
步骤220,VM将替换前的VCPU在运行过程中访问的第二NUMA节点中的内存的标识发送给HyperVisor;
步骤221,HyperVisor接收VM发送的VCPU在运行过程中访问的第二NUMA节点中的内存的标识;
步骤222,HyperVisor释放接收到的标识对应的内存。
从上述内容可以看出:,本发明实施例中VCPU当前运行的物理CPU所对应的第一NUMA节点的标识与VCPU当前所访问的内存所对应的第二NUMA节点的标识不同,则将VCPU所访问的第二NUMA节点上的内存替换为第一NUMA节点上的目标内存,如此,VCPU运行的物理CPU所对应的的NUMA节点与该VCPU所访问的内存所对应的NUMA节点为同一个节点,提升了VCPU访问内存的速度。且通过本发明实施例实现了VCPU粒度的内存迁移,从而更好的适用于VCPU在不同NUMA节点之间迁移的场景。
图3示例性示出了本发明实施例提供的一种HyperVisor的结构示意图。
基于相同构思,本发明实施例提供一种HyperVisor,用于执行上述方法流程,如图3所示,该HyperVisor300包括收发单元301、处理单元302和存储单元303。
处理单元302,用于确定VM中的虚拟处理器VCPU当前运行的物理处理器CPU所对应的第一NUMA节点的标识与VCPU当前所访问的内存所对应的第二NUMA节点的标识不同;则从第一NUMA节点中申请目标内存,确定目标内存的标识;收发单元301,用于至少将所申请的目标内存的标识和VCPU的标识传输给VM;目标内存的标识和VCPU的标识用于:使VM将VCPU当前所访问的第二NUMA节点中的内存的标识替换为目标内存的标识;存储单元303用于存储VM中的虚拟处理器VCPU当前运行的物理处理器CPU所对应的第一NUMA节点的标识。可选地,存储单元303用于存储内存配置表。
可见,本发明实施例中VCPU当前运行的物理CPU所对应的第一NUMA节点的标识与VCPU当前所访问的内存所对应的第二NUMA节点的标识不同,则将VCPU所访问的第二NUMA节点上的内存替换为第一NUMA节点上的目标内存,如此,VCPU运行的物理CPU所对应的的NUMA节点与该VCPU所访问的内存所对应的NUMA节点为同一个节点,提升了VCPU访问内存的速度。本发明实施例中实现了VCPU粒度的内存的迁移,从而可更好的适应VM的多个VCPU运行在多个NUMA节点的情况。
可选地,处理单元302,用于:根据内存配置表确定VCPU运行所需内存的数量;其中,内存配置表中至少包括VCPU运行所需要的内存的数量;根据VCPU运行所需内存的数量,从第一NUMA节点申请满足数量的目标内存。如此,可保证HyperVisor申请到满足VCPU运行所需要的内存的数量,且在内存替换后保证内存的使用总量不变。
可选地,内存配置表中还包括:VCPU当前所访问的内存所对应的第二NUMA节点的标识,以及上一次监测到的VCPU运行的物理CPU所对应的第三NUMA节点的标识。处理单元302,还用于:监测到VCPU当前运行的物理CPU对应的第一NUMA节点的标识;从内存配置表中确定出上一次监测到的VCPU运行的物理CPU所对应的第三NUMA节点的标识;在确定第一NUMA节点的标识与第三NUMA节点的标识不同时,确定VCPU运行的物理CPU发生迁移;从内存配置表中确定出VCPU当前所访问的内存所对应的第二NUMA节点的标识。
具体实施中,可选地,HyperVisor监控VM的VCPU运行物理CPU所对应的NUMA节点。比如,HyperVisor周期性对VCPU运行物理CPU所对应的NUMA节点进行监测,从而可周期性监控VCPU是否发生迁移。进一步,HyperVisor维护的内存配置表,从而使HyperVisor可根据内存配置表确定出VCPU是否发生迁移,且也可确定出VCPU当前访问的内存所对应的节点的标识。
可选地,收发单元301,还用于:将上一次监测到的VCPU运行的物理CPU所对应的第三NUMA节点的标识发送给VM。其中,第三NUMA节点的标识用于:使VM从内存页配置信息中确定出源内存页,并确定出目标内存页,将目标内存页替换源内存页;其中,源内存页中:VCPU当前运行的物理CPU对应NUMA节点的标识为第三NUMA节点的标识、且VCPU当前所访问的内存所对应的NUMA节点的标识为第二NUMA节点的标识;目标内存页中:VCPU当前运行的物理CPU对应NUMA节点的标识为第一NUMA节点的标识;VCPU当前所访问的内存的标识为第一NUMA节点中的目标内存的标识。
由于在VM中通过内存页的方式对VM中各个内存进行了管理,因此可实现对VCPU的内存的迁移,进一步通过目标内存页和源内存的替换实现了对VCPU内存的迁移,该方法实现了VCPU粒度的内存迁移,从而提高了VCPU运行的物理CPU在NUMA节点之间迁移时的内存访问速度。
可选地,处理单元302,还用于:将内存配置表中的上一次监测到的VCPU运行的物理CPU所对应的第三NUMA节点的标识,更新为第一NUMA节点的标识;将内存配置表中的VCPU当前所访问的内存所对应的第二NUMA节点的标识,更新为第一NUMA节点的标识。如此,可使HyperVisor所维护的内存配置表中的信息时时处于最新状态,以便于下次VCPU在NUMA节点之间发生迁移时,HyperVisor根据内存配置表对VCPU的内存进行迁移。
可选地,通常来说,为了提高VCPU访问内存的速度,本发明实施例中所维护的一个VCPU当前所访问的物理CPU所对应的NUMA节点和该VCPU当前所访问的内存所对应的NUMA节点相同,即第二NUMA节点的标识与第三NUMA节点的标识相同。也存在一种可能性,第二NUMA节点的标识与第三NUMA节点的标识不同。
可选地,收发单元301,还用于接收VM发送的VCPU在运行过程中访问的第二NUMA节点中的内存的标识;处理单元302,还用于释放接收到的标识对应的内存。从而可使被释放的内存被其它应用使用,提高了系统效率和内存使用率,避免过多占用内存造成的资源浪费。
从上述内容可看出,本发明实施例中VCPU当前运行的物理CPU所对应的第一NUMA节点的标识与VCPU当前所访问的内存所对应的第二NUMA节点的标识不同,则将VCPU所访问的第二NUMA节点上的内存替换为第一NUMA节点上的目标内存,如此,VCPU运行的物理CPU所对应的的NUMA节点与该VCPU所访问的内存所对应的NUMA节点为同一个节点,提升了VCPU访问内存的速度。
图4示例性示出了本发明实施例提供的一种VM的结构示意图。
基于相同构思,本发明实施例提供一种VM,用于执行上述方法流程,如图4所示,该VM400包括收发单元401、处理单元402和存储单元403。
收发单元401,用于接收管理器HyperVisor发送的第一NUMA节点中的目标内存的标识和虚拟处理器VCPU的标识;其中,VCPU当前运行的物理处理器CPU对应第一NUMA节点,VCPU当前所访问的内存对应第二NUMA节点,第一NUMA节点的标识与第二NUMA节点的标识不同;处理单元402,用于根据VCPU的标识,将VCPU在运行过程中访问的第二NUMA节点中的内存的标识替换为目标内存的标识;存储单元403,用于存储各个VM访问的内存所对应的节点的标识。
可见,本发明实施例中VCPU当前运行的物理CPU所对应的第一NUMA节点的标识与VCPU当前所访问的内存所对应的第二NUMA节点的标识不同,则将VCPU所访问的第二NUMA节点上的内存替换为第一NUMA节点上的目标内存,如此,VCPU运行的物理CPU所对应的的NUMA节点与该VCPU所访问的内存所对应的NUMA节点为同一个节点,提升了VCPU访问内存的速度。
可选地,收发单元401,还用于:接收HyperVisor发送的:上一次监测到的VCPU运行的物理CPU所对应的第三NUMA节点的标识。处理单元402,用于:从内存页配置信息中,确定出源内存页;其中,源内存页中:VCPU当前运行的物理CPU对应NUMA节点的标识为第三NUMA节点的标识、且VCPU当前所访问的内存所对应的NUMA节点的标识为第二NUMA节点的标识;确定目标内存页;其中,目标内存页中:VCPU当前运行的物理CPU对应NUMA节点的标识为第一NUMA节点的标识;VCPU当前所访问的内存的标识为第一NUMA节点中的目标内存的标识;将目标内存页替换源内存页。
由于在VM中通过内存页的方式对VM中各个内存进行了管理,因此可实现对VCPU的内存的迁移,进一步通过目标内存页和源内存的替换实现了对VCPU内存的迁移,该方法实现了VCPU粒度的内存迁移,从而提高了VCPU运行的物理CPU在NUMA节点之间迁移时的内存访问速度。
可选地,收发单元401,还用于:将替换前的VCPU在运行过程中访问的第二NUMA节点中的内存的标识发送给HyperVisor,以使HyperVisor将替换前的VCPU在运行过程中访问的第二NUMA节点中的内存释放。从而可使被释放的内存被其它应用使用,提高了系统效率和内存使用率,避免过多占用内存造成的资源浪费。
可选地,通常来说,为了提高VCPU访问内存的速度,本发明实施例中所维护的一个VCPU当前所访问的物理CPU所对应的NUMA节点和该VCPU当前所访问的内存所对应的NUMA节点相同,即第二NUMA节点的标识与第三NUMA节点的标识相同。也存在一种可能性,第二NUMA节点的标识与第三NUMA节点的标识不同。
从上述内容可看出,本发明实施例中VCPU当前运行的物理CPU所对应的第一NUMA节点的标识与VCPU当前所访问的内存所对应的第二NUMA节点的标识不同,则将VCPU所访问的第二NUMA节点上的内存替换为第一NUMA节点上的目标内存,如此,VCPU运行的物理CPU所对应的的NUMA节点与该VCPU所访问的内存所对应的NUMA节点为同一个节点,提升了VCPU访问内存的速度。
图5示例性示出了本发明实施例提供的一种HyperVisor的结构示意图。
基于相同构思,本发明实施例提供一种HyperVisor,用于执行上述方法流程,如图5所示,该HyperVisor包括处理器501、存储器502和收发器503。
处理器501,用于确定虚拟机VM中的虚拟处理器VCPU当前运行的物理处理器CPU所对应的第一NUMA节点的标识与VCPU当前所访问的内存所对应的第二NUMA节点的标识不同;则从第一NUMA节点中申请目标内存,确定目标内存的标识;收发器503,用于至少将所申请的目标内存的标识和VCPU的标识传输给VM;目标内存的标识和VCPU的标识用于:使VM将VCPU当前所访问的第二NUMA节点中的内存的标识替换为目标内存的标识;存储器502用于存储VM中的虚拟处理器VCPU当前运行的物理处理器CPU所对应的第一NUMA节点的标识。可选地,存储器502用于存储内存配置表。
可见,本发明实施例中VCPU当前运行的物理CPU所对应的第一NUMA节点的标识与VCPU当前所访问的内存所对应的第二NUMA节点的标识不同,则将VCPU所访问的第二NUMA节点上的内存替换为第一NUMA节点上的目标内存,如此,VCPU运行的物理CPU所对应的的NUMA节点与该VCPU所访问的内存所对应的NUMA节点为同一个节点,提升了VCPU访问内存的速度。
可选地,处理器501,用于:根据内存配置表确定VCPU运行所需内存的数量;其中,内存配置表中至少包括VCPU运行所需要的内存的数量;根据VCPU运行所需内存的数量,从第一NUMA节点申请满足数量的目标内存。如此,可保证HyperVisor申请到满足VCPU运行所需要的内存的数量,且在内存替换后保证内存的使用总量不变。
可选地,内存配置表中还包括:VCPU当前所访问的内存所对应的第二NUMA节点的标识,以及上一次监测到的VCPU运行的物理CPU所对应的第三NUMA节点的标识。处理器501,还用于:监测到VCPU当前运行的物理CPU对应的第一NUMA节点的标识;从内存配置表中确定出上一次监测到的VCPU运行的物理CPU所对应的第三NUMA节点的标识;在确定第一NUMA节点的标识与第三NUMA节点的标识不同时,确定VCPU运行的物理CPU发生迁移;从内存配置表中确定出VCPU当前所访问的内存所对应的第二NUMA节点的标识。
具体实施中,可选地,HyperVisor监控VM的VCPU运行物理CPU所对应的NUMA节点。比如,HyperVisor周期性对VCPU运行物理CPU所对应的NUMA节点进行监测,从而可周期性监控VCPU是否发生迁移。进一步,HyperVisor维护的内存配置表,从而使HyperVisor可根据内存配置表确定出VCPU是否发生迁移,且也可确定出VCPU当前访问的内存所对应的节点的标识。
可选地,收发器503,还用于将上一次监测到的VCPU运行的物理CPU所对应的第三NUMA节点的标识发送给VM;
其中,第三NUMA节点的标识用于:使VM从内存页配置信息中确定出源内存页,并确定出目标内存页,将目标内存页替换源内存页。其中,源内存页中:VCPU当前运行的物理CPU对应NUMA节点的标识为第三NUMA节点的标识、且VCPU当前所访问的内存所对应的NUMA节点的标识为第二NUMA节点的标识;目标内存页中:VCPU当前运行的物理CPU对应NUMA节点的标识为第一NUMA节点的标识;VCPU当前所访问的内存的标识为第一NUMA节点中的目标内存的标识。
由于在VM中通过内存页的方式对VM中各个内存进行了管理,因此可实现对VCPU的内存的迁移,进一步通过目标内存页和源内存的替换实现了对VCPU内存的迁移,该方法实现了VCPU粒度的内存迁移,从而提高了VCPU运行的物理CPU在NUMA节点之间迁移时的内存访问速度。
可选地,处理器501,还用于将内存配置表中的上一次监测到的VCPU运行的物理CPU所对应的第三NUMA节点的标识,更新为第一NUMA节点的标识;将内存配置表中的VCPU当前所访问的内存所对应的第二NUMA节点的标识,更新为第一NUMA节点的标识。
如此,可使HyperVisor所维护的内存配置表中的信息时时处于最新状态,以便于下次VCPU在NUMA节点之间发生迁移时,HyperVisor根据内存配置表对VCPU的内存进行迁移。
可选地,通常来说,为了提高VCPU访问内存的速度,本发明实施例中所维护的一个VCPU当前所访问的物理CPU所对应的NUMA节点和该VCPU当前所访问的内存所对应的NUMA节点相同,即第二NUMA节点的标识与第三NUMA节点的标识相同。也存在一种可能性,第二NUMA节点的标识与第三NUMA节点的标识不同。
可选地,收发器503,还用于接收VM发送的VCPU在运行过程中访问的第二NUMA节点中的内存的标识。处理器501,还用于释放接收到的标识对应的内存。从而可使被释放的内存被其它应用使用,提高了系统效率和内存使用率,避免过多占用内存造成的资源浪费。
存储器502可以包括易失性存储器(volatile memory),例如随机存取存储器(random-access memory,简称RAM);存储器也可以包括非易失性存储器(non-volatilememory),例如快闪存储器(flash memory),硬盘(hard disk drive,简称HDD)或固态硬盘(solid-state drive,简称SSD);存储器502还可以包括上述种类的存储器的组合。
处理器501可以是中央处理器(central processing unit,简称CPU),网络处理器(network processor,简称NP)或者CPU和NP的组合。处理器501还可以进一步包括硬件芯片。上述硬件芯片可以是专用集成电路(application-specific integrated circuit,简称ASIC),可编程逻辑器件(programmable logic device,简称PLD)或其组合。上述PLD可以是复杂可编程逻辑器件(complex programmable logic device,简称CPLD),现场可编程逻辑门阵列(field-programmable gate array,简称FPGA),通用阵列逻辑(generic arraylogic,简称GAL)或其任意组合。
总线504可以是外设部件互连标准(peripheral component interconnect,简称PCI)总线或扩展工业标准结构(extended industry standard architecture,简称EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图5中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
从上述内容可看出,本发明实施例中VCPU当前运行的物理CPU所对应的第一NUMA节点的标识与VCPU当前所访问的内存所对应的第二NUMA节点的标识不同,则将VCPU所访问的第二NUMA节点上的内存替换为第一NUMA节点上的目标内存,如此,VCPU运行的物理CPU所对应的的NUMA节点与该VCPU所访问的内存所对应的NUMA节点为同一个节点,提升了VCPU访问内存的速度。
图6示例性示出了本发明实施例提供的一种VM的结构示意图。基于相同构思,本发明实施例提供一种VM,用于执行上述方法流程,如图6所示,该VM包括处理器601、存储器602和收发器603。
收发器603,用于接收管理器HyperVisor发送的第一NUMA节点中的目标内存的标识和虚拟处理器VCPU的标识;其中,VCPU当前运行的物理处理器CPU对应第一NUMA节点,VCPU当前所访问的内存对应第二NUMA节点,第一NUMA节点的标识与第二NUMA节点的标识不同;处理器601,用于根据VCPU的标识,将VCPU在运行过程中访问的第二NUMA节点中的内存的标识替换为目标内存的标识;存储器602,用于存储各个VM访问的内存所对应的节点的标识。
可见,本发明实施例中VCPU当前运行的物理CPU所对应的第一NUMA节点的标识与VCPU当前所访问的内存所对应的第二NUMA节点的标识不同,则将VCPU所访问的第二NUMA节点上的内存替换为第一NUMA节点上的目标内存,如此,VCPU运行的物理CPU所对应的的NUMA节点与该VCPU所访问的内存所对应的NUMA节点为同一个节点,提升了VCPU访问内存的速度。
可选地,收发器603,还用于接收HyperVisor发送的:上一次监测到的VCPU运行的物理CPU所对应的第三NUMA节点的标识。处理器601,用于:从内存页配置信息中,确定出源内存页;其中,源内存页中:VCPU当前运行的物理CPU对应NUMA节点的标识为第三NUMA节点的标识、且VCPU当前所访问的内存所对应的NUMA节点的标识为第二NUMA节点的标识;确定目标内存页;其中,目标内存页中:VCPU当前运行的物理CPU对应NUMA节点的标识为第一NUMA节点的标识;VCPU当前所访问的内存的标识为第一NUMA节点中的目标内存的标识;将目标内存页替换源内存页。
由于在VM中通过内存页的方式对VM中各个内存进行了管理,因此可实现对VCPU的内存的迁移,进一步通过目标内存页和源内存的替换实现了对VCPU内存的迁移,该方法实现了VCPU粒度的内存迁移,从而提高了VCPU运行的物理CPU在NUMA节点之间迁移时的内存访问速度。
可选地,收发器603,还用于将替换前的VCPU在运行过程中访问的第二NUMA节点中的内存的标识发送给HyperVisor,以使HyperVisor将替换前的VCPU在运行过程中访问的第二NUMA节点中的内存释放。从而可使被释放的内存被其它应用使用,提高了系统效率和内存使用率,避免过多占用内存造成的资源浪费。
可选地,通常来说,为了提高VCPU访问内存的速度,本发明实施例中所维护的一个VCPU当前所访问的物理CPU所对应的NUMA节点和该VCPU当前所访问的内存所对应的NUMA节点相同,即第二NUMA节点的标识与第三NUMA节点的标识相同。也存在一种可能性,第二NUMA节点的标识与第三NUMA节点的标识不同。
存储器602可以包括易失性存储器(volatile memory),例如随机存取存储器(random-access memory,简称RAM);存储器也可以包括非易失性存储器(non-volatilememory),例如快闪存储器(flash memory),硬盘(hard disk drive,简称HDD)或固态硬盘(solid-state drive,简称SSD);存储器602还可以包括上述种类的存储器的组合。
处理器601可以是中央处理器(central processing unit,简称CPU),网络处理器(network processor,简称NP)或者CPU和NP的组合。处理器601还可以进一步包括硬件芯片。上述硬件芯片可以是专用集成电路(application-specific integrated circuit,简称ASIC),可编程逻辑器件(programmable logic device,简称PLD)或其组合。上述PLD可以是复杂可编程逻辑器件(complex programmable logic device,简称CPLD),现场可编程逻辑门阵列(field-programmable gate array,简称FPGA),通用阵列逻辑(generic arraylogic,简称GAL)或其任意组合。
总线604可以是外设部件互连标准(peripheral component interconnect,简称PCI)总线或扩展工业标准结构(extended industry standard architecture,简称EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图6中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
从上述内容可看出,本发明实施例中VCPU当前运行的物理CPU所对应的第一NUMA节点的标识与VCPU当前所访问的内存所对应的第二NUMA节点的标识不同,则将VCPU所访问的第二NUMA节点上的内存替换为第一NUMA节点上的目标内存,如此,VCPU运行的物理CPU所对应的的NUMA节点与该VCPU所访问的内存所对应的NUMA节点为同一个节点,提升了VCPU访问内存的速度。
本领域内的技术人员应明白,本发明的实施例可提供为方法、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (22)
1.一种虚拟机内存在非统一内存访问NUMA节点间的迁移方法,其特征在于,包括:
管理器HyperVisor确定虚拟机VM中的虚拟处理器VCPU当前运行的物理处理器CPU所对应的第一NUMA节点的标识,与所述VCPU当前所访问的内存所对应的第二NUMA节点的标识不同,则:
所述HyperVisor从所述第一NUMA节点中申请目标内存,确定所述目标内存的标识;
所述HyperVisor至少将所申请的所述目标内存的标识和所述VCPU的标识传输给所述VM;所述目标内存的标识和所述VCPU的标识用于:使所述VM将所述VCPU当前所访问的所述第二NUMA节点中的内存的标识替换为所述目标内存的标识。
2.如权利要求1所述的方法,其特征在于,所述HyperVisor从所述第一NUMA节点申请目标内存,包括:
所述HyperVisor根据内存配置表确定所述VCPU运行所需内存的数量;其中,所述内存配置表中至少包括所述VCPU运行所需要的内存的数量;
所述HyperVisor根据所述VCPU运行所需内存的数量,从所述第一NUMA节点申请满足所述数量的目标内存。
3.如权利要求2所述的方法,其特征在于,所述内存配置表中还包括:所述VCPU当前所访问的内存所对应的所述第二NUMA节点的标识,以及上一次监测到的所述VCPU运行的物理CPU所对应的第三NUMA节点的标识;
所述HyperVisor确定VM中的VCPU当前运行的物理CPU所对应的第一NUMA节点,与所述VCPU当前所访问的内存所对应的第二NUMA节点不同之前,还包括:
所述HyperVisor监测到所述VCPU当前运行的物理CPU对应的第一NUMA节点的标识;
所述HyperVisor从所述内存配置表中确定出上一次监测到的所述VCPU运行的物理CPU所对应的第三NUMA节点的标识;
所述HyperVisor在确定所述第一NUMA节点的标识与所述第三NUMA节点的标识不同时,确定所述VCPU运行的物理CPU发生迁移;
所述HyperVisor从所述内存配置表中确定出所述VCPU当前所访问的内存所对应的所述第二NUMA节点的标识。
4.如权利要求3所述的方法,其特征在于,所述HyperVisor从所述第一NUMA节点中申请目标内存之后,还包括:
所述HyperVisor将上一次监测到的所述VCPU运行的物理CPU所对应的所述第三NUMA节点的标识发送给所述VM;
其中,所述第三NUMA节点的标识用于:使所述VM从内存页配置信息中确定出源内存页,并确定出目标内存页,将所述目标内存页替换所述源内存页:
其中,所述源内存页中:所述VCPU当前运行的物理CPU对应NUMA节点的标识为所述第三NUMA节点的标识、且所述VCPU当前所访问的内存所对应的NUMA节点的标识为所述第二NUMA节点的标识;所述目标内存页中:所述VCPU当前运行的物理CPU对应NUMA节点的标识为所述第一NUMA节点的标识;所述VCPU当前所访问的内存的标识为所述第一NUMA节点中的所述目标内存的标识。
5.如权利要求3所述的方法,其特征在于,所述HyperVisor从所述第一NUMA节点中申请目标内存之后,还包括:
所述HyperVisor将所述内存配置表中的上一次监测到的所述VCPU运行的物理CPU所对应的所述第三NUMA节点的标识,更新为所述第一NUMA节点的标识;
所述HyperVisor将所述内存配置表中的所述VCPU当前所访问的内存所对应的所述第二NUMA节点的标识,更新为所述第一NUMA节点的标识。
6.如权利要求3至5任一权利要求所述的方法,其特征在于,所述第二NUMA节点的标识与所述第三NUMA节点的标识相同。
7.如权利要求1至6任一权利要求所述的方法,其特征在于,所述HyperVisor至少将所申请的所述目标内存的标识和所述VCPU的标识传输给所述VM之后,还包括:
所述HyperVisor接收所述VM发送的所述VCPU在运行过程中访问的所述第二NUMA节点中的内存的标识;
所述HyperVisor释放接收到的所述标识对应的内存。
8.一种虚拟机内存在非统一内存访问NUMA节点间的迁移方法,其特征在于,包括:
虚拟机VM接收管理器HyperVisor发送的第一NUMA节点中的目标内存的标识和虚拟处理器VCPU的标识;其中,所述VCPU当前运行的物理处理器CPU对应第一NUMA节点,所述VCPU当前所访问的内存对应第二NUMA节点,所述第一NUMA节点的标识与所述第二NUMA节点的标识不同;
所述VM根据所述VCPU的标识,将所述VCPU在运行过程中访问的所述第二NUMA节点中的内存的标识替换为所述目标内存的标识。
9.如权利要求8所述的方法,其特征在于,所述VM将所述VCPU在运行过程中访问的所述第二NUMA节点中的内存的标识替换为所述目标内存的标识之前,还包括:
所述VM接收所述HyperVisor发送的:上一次监测到的所述VCPU运行的物理CPU所对应的第三NUMA节点的标识;
所述VM根据所述VCPU的标识,将所述VCPU在运行过程中访问的所述第二NUMA节点中的内存的标识替换为所述目标内存的标识,包括:
所述VM从内存页配置信息中,确定出源内存页;其中,所述源内存页中:所述VCPU当前运行的物理CPU对应NUMA节点的标识为所述第三NUMA节点的标识、且所述VCPU当前所访问的内存所对应的NUMA节点的标识为所述第二NUMA节点的标识;
所述VM确定目标内存页;其中,所述目标内存页中:所述VCPU当前运行的物理CPU对应NUMA节点的标识为所述第一NUMA节点的标识;所述VCPU当前所访问的内存的标识为所述第一NUMA节点中的所述目标内存的标识;
所述VM将所述目标内存页替换所述源内存页。
10.如权利要求8或9所述的方法,其特征在于,所述VM将所述VCPU在运行过程中访问的所述第二NUMA节点中的内存的标识替换为所述目标内存的标识之后,还包括:
所述VM将替换前的所述VCPU在运行过程中访问的所述第二NUMA节点中的内存的标识发送给所述HyperVisor,以使所述HyperVisor将替换前的所述VCPU在运行过程中访问的所述第二NUMA节点中的内存释放。
11.如权利要求9或10所述的方法,其特征在于,所述第二NUMA节点的标识与所述第三NUMA节点的标识相同。
12.一种管理器HyperVisor,其特征在于,包括:
处理器,用于确定虚拟机VM中的虚拟处理器VCPU当前运行的物理处理器CPU所对应的第一NUMA节点的标识与所述VCPU当前所访问的内存所对应的第二NUMA节点的标识不同;则从所述第一NUMA节点中申请目标内存,确定所述目标内存的标识;
收发器,用于至少将所申请的所述目标内存的标识和所述VCPU的标识传输给所述VM;所述目标内存的标识和所述VCPU的标识用于:使所述VM将所述VCPU当前所访问的所述第二NUMA节点中的内存的标识替换为所述目标内存的标识。
13.如权利要求12所述的HyperVisor,其特征在于,所述处理器,用于:
根据内存配置表确定所述VCPU运行所需内存的数量;其中,所述内存配置表中至少包括所述VCPU运行所需要的内存的数量;
根据所述VCPU运行所需内存的数量,从所述第一NUMA节点申请满足所述数量的目标内存。
14.如权利要求13所述的HyperVisor,其特征在于,所述内存配置表中还包括:所述VCPU当前所访问的内存所对应的所述第二NUMA节点的标识,以及上一次监测到的所述VCPU运行的物理CPU所对应的第三NUMA节点的标识;
所述处理器,还用于:
监测到所述VCPU当前运行的物理CPU对应的第一NUMA节点的标识;
从所述内存配置表中确定出上一次监测到的所述VCPU运行的物理CPU所对应的第三NUMA节点的标识;
在确定所述第一NUMA节点的标识与所述第三NUMA节点的标识不同时,确定所述VCPU运行的物理CPU发生迁移;
从所述内存配置表中确定出所述VCPU当前所访问的内存所对应的所述第二NUMA节点的标识。
15.如权利要求14所述的HyperVisor,其特征在于,所述收发器,还用于:
将上一次监测到的所述VCPU运行的物理CPU所对应的所述第三NUMA节点的标识发送给所述VM;
其中,所述第三NUMA节点的标识用于:使所述VM从内存页配置信息中确定出源内存页,并确定出目标内存页,将所述目标内存页替换所述源内存页:
其中,所述源内存页中:所述VCPU当前运行的物理CPU对应NUMA节点的标识为所述第三NUMA节点的标识、且所述VCPU当前所访问的内存所对应的NUMA节点的标识为所述第二NUMA节点的标识;所述目标内存页中:所述VCPU当前运行的物理CPU对应NUMA节点的标识为所述第一NUMA节点的标识;所述VCPU当前所访问的内存的标识为所述第一NUMA节点中的所述目标内存的标识。
16.如权利要求14所述的HyperVisor,其特征在于,所述处理器,还用于:
将所述内存配置表中的上一次监测到的所述VCPU运行的物理CPU所对应的所述第三NUMA节点的标识,更新为所述第一NUMA节点的标识;
将所述内存配置表中的所述VCPU当前所访问的内存所对应的所述第二NUMA节点的标识,更新为所述第一NUMA节点的标识。
17.如权利要求14至16任一权利要求所述的HyperVisor,其特征在于,所述第二NUMA节点的标识与所述第三NUMA节点的标识相同。
18.如权利要求12至17任一权利要求所述的HyperVisor,其特征在于,所述收发器,还用于:
接收所述VM发送的所述VCPU在运行过程中访问的所述第二NUMA节点中的内存的标识;
所述处理器,还用于:
释放接收到的所述标识对应的内存。
19.一种VM,其特征在于,包括:
收发器,用于接收管理器HyperVisor发送的第一NUMA节点中的目标内存的标识和虚拟处理器VCPU的标识;其中,所述VCPU当前运行的物理处理器CPU对应第一NUMA节点,所述VCPU当前所访问的内存对应第二NUMA节点,所述第一NUMA节点的标识与所述第二NUMA节点的标识不同;
处理器,用于根据所述VCPU的标识,将所述VCPU在运行过程中访问的所述第二NUMA节点中的内存的标识替换为所述目标内存的标识。
20.如权利要求19所述的VM,其特征在于,所述收发器,还用于:
接收所述HyperVisor发送的:上一次监测到的所述VCPU运行的物理CPU所对应的第三NUMA节点的标识;
所述处理器,用于:
从内存页配置信息中,确定出源内存页;其中,所述源内存页中:所述VCPU当前运行的物理CPU对应NUMA节点的标识为所述第三NUMA节点的标识、且所述VCPU当前所访问的内存所对应的NUMA节点的标识为所述第二NUMA节点的标识;
确定目标内存页;其中,所述目标内存页中:所述VCPU当前运行的物理CPU对应NUMA节点的标识为所述第一NUMA节点的标识;所述VCPU当前所访问的内存的标识为所述第一NUMA节点中的所述目标内存的标识;
将所述目标内存页替换所述源内存页。
21.如权利要求19或20所述的VM,其特征在于,所述收发器,还用于:
将替换前的所述VCPU在运行过程中访问的所述第二NUMA节点中的内存的标识发送给所述HyperVisor,以使所述HyperVisor将替换前的所述VCPU在运行过程中访问的所述第二NUMA节点中的内存释放。
22.如权利要求20或21所述的VM,其特征在于,所述第二NUMA节点的标识与所述第三NUMA节点的标识相同。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610814580.7A CN107807851A (zh) | 2016-09-09 | 2016-09-09 | 一种虚拟机内存在numa节点间的迁移方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610814580.7A CN107807851A (zh) | 2016-09-09 | 2016-09-09 | 一种虚拟机内存在numa节点间的迁移方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107807851A true CN107807851A (zh) | 2018-03-16 |
Family
ID=61569609
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610814580.7A Pending CN107807851A (zh) | 2016-09-09 | 2016-09-09 | 一种虚拟机内存在numa节点间的迁移方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107807851A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10691365B1 (en) | 2019-01-30 | 2020-06-23 | Red Hat, Inc. | Dynamic memory locality for guest memory |
CN117850968A (zh) * | 2023-12-14 | 2024-04-09 | 天翼云科技有限公司 | 一种指定numa节点实现虚拟机迁移的方法、装置及系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101477496A (zh) * | 2008-12-29 | 2009-07-08 | 北京航空航天大学 | 基于分布式内存虚拟化的numa结构的实现方法 |
CN104123171A (zh) * | 2014-06-10 | 2014-10-29 | 浙江大学 | 基于numa架构的虚拟机迁移方法及系统 |
CN104268089A (zh) * | 2014-09-15 | 2015-01-07 | 杭州华为数字技术有限公司 | 一种信息更新的方法、装置及系统 |
US20160161981A1 (en) * | 2014-12-05 | 2016-06-09 | Fujitsu Limited | Parallel operation system, apparatus and medium |
-
2016
- 2016-09-09 CN CN201610814580.7A patent/CN107807851A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101477496A (zh) * | 2008-12-29 | 2009-07-08 | 北京航空航天大学 | 基于分布式内存虚拟化的numa结构的实现方法 |
CN104123171A (zh) * | 2014-06-10 | 2014-10-29 | 浙江大学 | 基于numa架构的虚拟机迁移方法及系统 |
CN104268089A (zh) * | 2014-09-15 | 2015-01-07 | 杭州华为数字技术有限公司 | 一种信息更新的方法、装置及系统 |
US20160161981A1 (en) * | 2014-12-05 | 2016-06-09 | Fujitsu Limited | Parallel operation system, apparatus and medium |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10691365B1 (en) | 2019-01-30 | 2020-06-23 | Red Hat, Inc. | Dynamic memory locality for guest memory |
CN117850968A (zh) * | 2023-12-14 | 2024-04-09 | 天翼云科技有限公司 | 一种指定numa节点实现虚拟机迁移的方法、装置及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10359947B2 (en) | Reclaiming memory pages | |
CN105843683B (zh) | 用于动态优化平台资源分配的方法、系统和设备 | |
US8495318B2 (en) | Memory page management in a tiered memory system | |
US10241836B2 (en) | Resource management in a virtualized computing environment | |
US10534720B2 (en) | Application aware memory resource management | |
US20160239333A1 (en) | Apparatus and method for scheduling graphics processing unit workloads from virtual machines | |
Ahn et al. | Improving {I/O} Resource Sharing of Linux Cgroup for {NVMe}{SSDs} on Multi-core Systems | |
US11340945B2 (en) | Memory congestion aware NUMA management | |
US20160034290A1 (en) | Dynamically deployed virtual machine | |
US20140373010A1 (en) | Intelligent resource management for virtual machines | |
US20140359245A1 (en) | I/o latency and iops performance in thin provisioned volumes | |
US9891836B2 (en) | Page compression strategy for improved page out process | |
CN104461735B (zh) | 一种虚拟化场景下分配cpu资源的方法和装置 | |
US11188365B2 (en) | Memory overcommit by speculative fault | |
Min et al. | Vmmb: Virtual machine memory balancing for unmodified operating systems | |
CN106445691A (zh) | 一种面向虚拟化云计算平台的内存优化的方法 | |
US9015418B2 (en) | Self-sizing dynamic cache for virtualized environments | |
CN107807851A (zh) | 一种虚拟机内存在numa节点间的迁移方法和装置 | |
US20190173770A1 (en) | Method and system for placement of virtual machines using a working set computation | |
Sfakianakis et al. | Vanguard: Increasing server efficiency via workload isolation in the storage i/o path | |
CN105677481A (zh) | 一种数据处理方法、系统及电子设备 | |
CN105900066A (zh) | 计算机以及基于管理程序的资源调度方法 | |
Ro | Modeling and analysis of memory virtualization in cloud computing | |
CN110447019B (zh) | 存储器分配管理器及由其执行的用于管理存储器分配的方法 | |
Shaikh et al. | Dynamic memory allocation technique 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 | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20180316 |
|
WD01 | Invention patent application deemed withdrawn after publication |