CN114371911A - 虚拟机调度方法、装置、电子设备和可读存储介质 - Google Patents
虚拟机调度方法、装置、电子设备和可读存储介质 Download PDFInfo
- Publication number
- CN114371911A CN114371911A CN202111630165.3A CN202111630165A CN114371911A CN 114371911 A CN114371911 A CN 114371911A CN 202111630165 A CN202111630165 A CN 202111630165A CN 114371911 A CN114371911 A CN 114371911A
- Authority
- CN
- China
- Prior art keywords
- virtual machine
- numa
- node
- scheduled
- cgroup
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/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/4557—Distribution of virtual machine instances; Migration and load balancing
-
- 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)
- Stored Programmes (AREA)
Abstract
本公开提供了一种虚拟机调度方法、装置、电子设备和可读存储介质,涉及虚拟机技术领域。其中,基于NUMA系统的虚拟机调度方法包括:基于非一致性内存访问NUMA系统中的NUMA节点拓扑和所述NUMA节点的CPU列表,生成所述CPU的NUMA拓扑;基于所述NUMA拓扑和所述CPU列表在指定目录下配置对应的本地访问控制组Cgroup;响应于调度信息,确定待调度的虚拟机,基于所述Cgroup为所述待调度的虚拟机执行平衡调度操作,以使所述虚拟机访问本地内存。通过本公开的技术方案,能够使虚拟机访问的是本地内存,从而有利于减少访问造成的延时。
Description
技术领域
本公开涉及虚拟机技术领域,尤其涉及一种基于NUMA系统的虚拟机调度方法、基于NUMA系统的虚拟机调度装置、电子设备和计算机可读存储介质。
背景技术
近年来,处理器的发展方向由不断提升单个处理器的频率转向扩展系统的多处理器,这种转向带来了问题是:FSB(Front-Side Bus,前端总线:指CPU与北桥芯片之间的数据传输总线,前端总线的速度指的是数据传输的速度)在多个处理器面前会成为竞争的焦点。为了解决该问题,相关研究人员将内存控制器(Integrated Memory Controller,IMC)从北桥芯片迁移至了处理器芯片中,使每个处理器都有自己的IMC连接到本地内存,基于上述改进生成了NUMA(Non Uniform Memory Access,非一致性内存访问)系统。目前NUMA系统上的多虚拟机还存在以下缺陷:
(1)如果NUMA系统中一个NUMA节点的CPU要访问另一个NUMA节点上的内存,访问信号需要经过快速通道互联QPI,导致产生内存访问延迟。
(2)由于Linux内核自带的调度算法不区分虚拟机里的VCPU线程与普通线程,因此即使被调度线程不属于同一虚拟机,Linux内核也会对其调度,导致同一个虚拟机里的多个VCPU被调度至不同的NUMA节点上,造成出现远程内存访问的现象,同样也会导致产生内存访问延迟。
需要说明的是,在上述背景技术部分公开的信息仅用于加强对本公开的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。
发明内容
本公开的目的在于提供一种基于NUMA系统的虚拟机调度方法、基于NUMA系统的虚拟机调度装置、电子设备和计算机可读存储介质,至少在一定程度上克服由于相关技术中虚拟机内存访问延迟的问题。
本公开的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本公开的实践而习得。
根据本公开的一个方面,提供一种基于NUMA系统的虚拟机调度方法,包括:基于非一致性内存访问NUMA系统中的NUMA节点拓扑和所述NUMA节点的CPU列表,生成所述CPU的NUMA拓扑;基于所述NUMA拓扑和所述CPU列表在指定目录下配置对应的本地访问控制组Cgroup;响应于调度信息,确定待调度的虚拟机,基于所述Cgroup为所述待调度的虚拟机执行平衡调度操作,以使所述虚拟机访问本地内存。
在本公开的一个实施例中,所述调度信息包括新建虚拟机的新建调度信息,所述响应于调度信息,确定待调度的虚拟机,基于所述Cgroup为所述待调度的虚拟机执行平衡调度操作,以使所述虚拟机访问本地内存,具体包括:响应于所述新建调度信息,将新建的第一虚拟机确定为所述待调度的虚拟机;确定所述第一虚拟机所需的VCPU数量与所需内存;基于所述VCPU数量和所述所需内存执行第一平衡调度操作,以确定放置所述第一虚拟机的NUMA节点;基于所述Cgroup将所述待调度的虚拟机放置在所述NUMA节点中,以使所述虚拟机访问本地内存。
在本公开的一个实施例中,所述基于所述VCPU数量和所述所需内存执行第一平衡调度操作,以确定放置所述待调度的虚拟机的NUMA节点,具体包括:基于所述NUMA节点拓扑依次扫描所有所述NUMA节点,确定空闲CPU数量最多的第一节点;在检测到所述第一节点的空闲CPU数量大于或等于所述第一虚拟机的VCPU数量时,将所述第一节点确定为放置所述第一虚拟机的NUMA节点;在检测到所述第一节点的空闲CPU数量小于所述第一虚拟机的VCPU数量时,检测所有所述NUMA节点的空闲CPU总数是否大于或等于所述第一虚拟机的VCPU数量;在检测到所有所述NUMA节点的空闲CPU总数大于或等于所述第一虚拟机的VCPU数量时,基于跨NUMA节点操作确定放置所述第一虚拟机的NUMA节点。
在本公开的一个实施例中,所述调度信息包括删除虚拟机的删除调度信息,所述响应于调度信息,确定待调度的虚拟机,基于所述Cgroup为所述待调度的虚拟机执行平衡调度操作,以使所述虚拟机访问本地内存,具体包括:响应于所述删除调度信息,删除第二虚拟机在所述Cgroup中的子目录;以及基于第二平衡调度操作,确定剩余虚拟机中的所述待调度的虚拟机以及所述待调度的虚拟机的NUMA节点;基于所述Cgroup将所述待调度的虚拟机放置在所述NUMA节点中,以使所述虚拟机访问本地内存。
在本公开的一个实施例中,所述基于第二平衡调度操作,确定剩余虚拟机中的所述待调度的虚拟机以及所述待调度的虚拟机的NUMA节点,具体包括:在检测到所述剩余虚拟机中具有跨NUMA节点部署的跨节点虚拟机时,将所述跨节点虚拟机确定为所述待调度的虚拟机,并将删除所述第二虚拟机的NUMA节点确定为放置所述待调度的虚拟机的所述NUMA节点;和/或在检测到具有最多空闲CPU的第三节点,以及具有最多被分配CPU的第四节点时,在所述第四节点中查询第三虚拟机,所述第三虚拟机为VCPU数量最小的所述剩余虚拟机;在检测到所述第三节点中的所述空闲CPU能够放置所述第三虚拟机时,并且放置后所述第三节点中剩余空闲CPU的数量仍大于或等于所述第四节点中剩余空闲CPU的数量,将所述第三虚拟机确定为所述待调度的虚拟机,将所述第三节点确定为所述放置所述第三虚拟机的所述NUMA节点。
在本公开的一个实施例中,所述基于所述Cgroup将所述待调度的虚拟机放置在所述NUMA节点中,具体包括:基于所述待调度的虚拟机的instance ID,在对应的所述Cgroup中建立子目录;将所述虚拟机对应的所述NUMA节点中的CPU列表配置在所述子目录的第一文件中;将所述虚拟机所需内存配置在所述子目录的第二文件中;将所述instance ID配置在所述子目录的第三文件中,以在检测到所述虚拟机的内存未在所述NUMA节点中时,同步迁移所述内存;获取所述instance ID对应的PID值,将所述PID值配置在所述子目录的第四文件中。
在本公开的一个实施例中,所述基于所述NUMA拓扑和所述CPU列表在指定目录下配置对应的本地访问控制组Cgroup,具体包括:基于所述NUMA拓扑分别配置单个NUMA节点和跨NUMA节点;分别针对所述单个NUMA节点与所述跨NUMA节点在所述指定目录配置对应的所述Cgroup;基于所述CPU列表在所述Cgroup中写入可用的CPU编号,其中,在所述单个NUMA节点对应的所述Cgroup中,写入所述NUMA节点中所述可用的CPU编号,在所述跨NUMA节点对应的所述Cgroup中,写入所述NUMA系统中所有所述可用的CPU编号。
根据本公开的另一个方面,提供一种基于NUMA系统的虚拟机调度装置,包括:生成模块,用于基于非一致性内存访问NUMA系统中的NUMA节点拓扑和所述NUMA节点的CPU列表,生成所述CPU的NUMA拓扑;配置模块,用于基于所述NUMA拓扑和所述CPU列表在指定目录下配置对应的本地访问控制组Cgroup;调度模块,用于响应于调度信息,确定待调度的虚拟机,基于所述Cgroup为所述待调度的虚拟机执行平衡调度操作,以使所述虚拟机访问本地内存。
根据本公开的再一个方面,提供一种电子设备,包括:处理器;以及存储器,用于存储处理器的可执行指令;其中,处理器配置为经由执行可执行指令来执行上述任意一项的基于NUMA系统的虚拟机调度方法。
在本公开的一个实施例中,所述电子设备为边缘计算节点。
根据本公开的又一个方面,提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述任意一项的基于NUMA系统的虚拟机调度方法。
本公开的实施例所提供的基于NUMA系统的虚拟机调度方案,通过收集NUMA系统的NUMA节点拓扑以及对应的CPU拓扑,并基于这些信息配置用于本地访问的Cgroup,以基于Cgroup的内存限制作用,实现虚拟机访问本地内存,通过配置的Cgroup,在检测到具有需要调度的虚拟机时,基于平衡调度操作对该虚拟机进行平衡调度,一方面,以虚拟机为单位在NUMA系统上进行调度平衡,能够充分挖掘和利用了NUMA系统的特性,以提升虚拟机部署的可靠性并保证运行效率,另一方面,基于Cgroup技术进行虚拟机的调度,包括虚拟机对应的CPU和内存的调度,能够使虚拟机访问的是本地内存,从而有利于减少访问造成的延时。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出本公开实施例中一种基于NUMA系统的虚拟机调度方法的流程图;
图2示出本公开实施例中另一种基于NUMA系统的虚拟机调度方法的流程图;
图3示出本公开实施例中再一种基于NUMA系统的虚拟机调度方法的流程图;
图4示出本公开实施例中又一种基于NUMA系统的虚拟机调度方法的流程图;
图5示出本公开实施例中又一种基于NUMA系统的虚拟机调度方法的流程图;
图6示出本公开实施例中又一种基于NUMA系统的虚拟机调度方法的流程图;
图7示出本公开实施例中又一种基于NUMA系统的虚拟机调度方法的流程图;
图8示出本公开实施例中一种基于NUMA系统的虚拟机调度方案的示意图;
图9示出本公开实施例中另一种基于NUMA系统的虚拟机调度方案的示意图;
图10示出本公开实施例中再一种基于NUMA系统的虚拟机调度方案的示意图;
图11示出本公开实施例中又一种基于NUMA系统的虚拟机调度方案的示意图;
图12示出本公开实施例中又一种基于NUMA系统的虚拟机调度方案的示意图;
图13示出本公开实施例中又一种基于NUMA系统的虚拟机调度方案的示意图;
图14示出本公开实施例中又一种基于NUMA系统的虚拟机调度方案的示意图;
图15示出本公开实施例中又一种基于NUMA系统的虚拟机调度方案的示意图;
图16示出本公开实施例中又一种基于NUMA系统的虚拟机调度方案的示意图;
图17示出本公开实施例中又一种基于NUMA系统的虚拟机调度方案的示意图;
图18示出本公开实施例中又一种基于NUMA系统的虚拟机调度方案的示意图;
图19示出本公开实施例中又一种基于NUMA系统的虚拟机调度方案的示意图;
图20示出本公开实施例中又一种基于NUMA系统的虚拟机调度方案的示意图;
图21示出本公开实施例中一种基于NUMA系统的虚拟机调度装置的示意图;
图22示出本公开实施例中一种电子设备的示意图。
具体实施方式
现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本公开将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。所描述的征、结构或性可以以任何合适的方式结合在一个或更多实施方式中。在下面的描述中,提供许多具体细节从而给出对本公开的实施方式的充分理解。然而,本领域技术人员将意识到,可以实践本公开的技术方案而省略所述定细节中的一个或更多,或者可以采用其它的、组元、装置、步骤等。在其它情况下,不详细示出或描述公知技术方案以避免喧宾夺主而使得本公开的各方面变得模糊。
此外,附图仅为本公开的示意性图解,图中相同的附图标记表示相同或类似的分,因而将省略对它们的重复描述。附图中所示的一些方框图是功能实体,不一定必须与物理或逻辑上独立的实体相对应。可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
为了便于理解,下面对本申请涉及到的名词(缩写词)进行解释。
Cgroup,控制组,它提供了一套机制用于控制一组特定进程对资源的使用。Cgroup绑定一个进程集合到一个或多个子系统上。
NUMA(Non-Uniform Memory Access,非一致性内存访问),该构架最大优势是可以把几十个CPU(甚至上百个CPU)组合在一个服务器内,方便更好的发挥系统性能。
instance ID:实例名,也就是InstanceInfo类中的instanceId属性,它是区分同一服务中不同实例的唯一标识。
下面结合附图对本公开示例实施方式进行详细说明。
如图1所示,服务端执行基于NUMA系统的虚拟机调度方法,包括以下步骤:
步骤S102,基于非一致性内存访问NUMA系统中的NUMA节点拓扑和NUMA节点的CPU列表,生成CPU的NUMA拓扑。
其中,在NUMA系统启动时,收集NUMA系统的NUMA拓扑状态,以及NUMA系统保留的CPU的列表,从而得到可供虚拟机使用的物理CPU列表以及这些CPU的NUMA拓扑,由于一个虚拟机包括多个VCPU,一个NUMA节点包括多个CPU,基于CPU的NUMA拓扑,有利于实现对虚拟机的合理部署。
步骤S104,基于NUMA拓扑和CPU列表在指定目录下配置对应的本地访问控制组Cgroup。
具体地,通过配置Cgroup,基于Cgroup内存限制作用在一个NUMA节点内,以实现虚拟机访问本地内存。
另外,基于收集到的可供虚拟机使用的物理CPU列表以及这些CPU的NUMA拓扑,在目录/sys/fs/Cgroup/CPUset下建立对应的Cgroup。
步骤S106,响应于调度信息,确定待调度的虚拟机,基于Cgroup为待调度的虚拟机执行平衡调度操作,以使虚拟机访问本地内存。
其中,调度信息包括但不限于由于新建虚拟机产生的调度信息以及退出虚拟机产生的调度信息,在新建虚拟机时,待调度的虚拟机即为新建的虚拟机,在退出某个虚拟机时,在需要保持多个NUMA节点的平衡时,剩余的至少一个虚拟机为待调度的虚拟机。
具体地,基于平衡调度操作,能够尽量在一个NUMA节点中为一个虚拟机配置全部的VCPU和内存,保证对本地内存的访问,以降低内存访问延迟。
在该实施例中,通过收集NUMA系统的NUMA节点拓扑以及对应的CPU拓扑,并基于这些信息配置用于本地访问的Cgroup,以基于Cgroup的内存限制作用,实现虚拟机访问本地内存,通过配置的Cgroup,在检测到具有需要调度的虚拟机时,基于平衡调度操作对该虚拟机进行平衡调度,一方面,以虚拟机为单位在NUMA系统上进行调度平衡,能够充分挖掘和利用了NUMA系统的特性,以提升虚拟机部署的可靠性并保证运行效率,另一方面,基于Cgroup技术进行虚拟机的调度,包括虚拟机对应的CPU和内存的调度,能够使虚拟机访问的是本地内存,从而有利于减少访问造成的延时。
如图2所示,在本公开的一个实施例中,调度信息包括新建虚拟机的新建调度信息,步骤106,响应于调度信息,确定待调度的虚拟机,基于Cgroup为待调度的虚拟机执行平衡调度操作,以使虚拟机访问本地内存的一种具体实现方式,包括:
步骤S202,响应于新建调度信息,将新建的第一虚拟机确定为待调度的虚拟机。
步骤S204,确定第一虚拟机所需的VCPU数量与所需内存。
步骤S206,基于VCPU数量和所需内存执行第一平衡调度操作,以确定放置第一虚拟机的NUMA节点。
具体地,当系统准备新建虚拟机时,会随着新建虚拟机的信息提供新建的虚拟机需要的VCPU个数,以及新建的虚拟机的内存大小,然后系统会通过第一平衡调度操作找到该虚拟机需要放置的NUMA节点。
步骤S208,基于Cgroup将待调度的虚拟机放置在NUMA节点中,以使虚拟机访问本地内存。
在该实施例中,通过在接收到虚拟机的新建指令时,确定新建虚拟机所需的VCPU数量和内存,以基于VCPU数量和内存在目前的NUMA系统中进行第一平衡调度操作,以找到该虚拟机需要放置的NUMA节点,并基于Cgroup进行调度配置,以保证新建虚拟机能够尽量在一个NUMA节点内配置,从而保证本地内存的访问。
如图3所示,在本公开的一个实施例中,步骤S206,基于VCPU数量和所需内存执行第一平衡调度操作,以确定放置待调度的虚拟机的NUMA节点,具体包括:
步骤S302,基于NUMA节点拓扑依次扫描所有NUMA节点,确定空闲CPU数量最多的第一节点。
具体地,依次扫描系统中所有的NUMA节点,找出空闲CPU数量即free CPU number最多的NUMA节点,记为第一节点NodeX。
步骤S304,在检测到第一节点的空闲CPU数量大于或等于第一虚拟机的VCPU数量时,将第一节点确定为放置第一虚拟机的NUMA节点。
具体地,如果第一节点NodeX的free CPU number大于或等于新建的第一虚拟机的VCPU数量,即VCPU number,则说明第一节点NodeX是最适合放置这个虚拟机的NUMA节点,返回节点编号X。
步骤S306,在检测到第一节点的空闲CPU数量小于第一虚拟机的VCPU数量时,检测所有NUMA节点的空闲CPU总数是否大于或等于第一虚拟机的VCPU数量。
步骤S308,在检测到所有NUMA节点的空闲CPU总数大于或等于第一虚拟机的VCPU数量时,基于跨NUMA节点操作确定放置第一虚拟机的NUMA节点。
具体地,如果第一NodeX的free CPU number小于新建虚拟机的VCPU number,但所有NUMA节点的free CPU number个数总和大于等于新建虚拟机的VCPU number,则说明该虚拟机需要跨NUMA节点放置VCPU,并返回特殊值200。
如果不满足上述工况,说明系统中的物理CPU已经无法满足即将新建的虚拟机的要求,返回100,说明创建失败。
另外,在新建第一虚拟机后,更新系统内部维护这些CPU状态的数据结构,明确区分出哪些被分出去了,哪些是空闲的。
通过查看/proc/$虚拟机PID/NUMA_maps的内容,来确认虚拟机的内存是否绑定到了希望的NUMA节点上。
如图4所示,在本公开的一个实施例中,调度信息包括删除虚拟机的删除调度信息,步骤106,响应于调度信息,确定待调度的虚拟机,基于Cgroup为待调度的虚拟机执行平衡调度操作,以使虚拟机访问本地内存的另一种具体实现方式,包括:
步骤S402,响应于删除调度信息,删除第二虚拟机在Cgroup中的子目录。
具体地,当系统中有虚拟机退出,对应生成删除调度信息,并需要把虚拟机的PID写入到“/sys/fs/Cgroup/CPUset/Cgroup.procs”子目录,以及删除之前新建的该虚拟机对应的Cgroup子目录。
步骤S404,基于第二平衡调度操作,确定剩余虚拟机中的待调度的虚拟机以及待调度的虚拟机的NUMA节点。
具体地,由于具有退出的第二虚拟机,此时有可能会造成NUMA系统上多虚拟机不平衡的状态,比如有的NUMA节点上放满了虚拟机,有的NUMA节点比较空闲,所以需要重新扫描目前NUMA系统上的虚拟机分配状态并根据扫描的结果做适当的调整,即NUMA系统需要再次进行平衡,该平衡由第二平衡调度操作实现。
步骤S406,基于Cgroup将待调度的虚拟机放置在NUMA节点中,以使虚拟机访问本地内存。
在该实施例中,在检测到具有虚拟机退出时,此时通过对NUMA系统进行重新扫描,并在确定需要再次进行虚拟机布设平衡时,基于第二平衡调度操作,确定剩余虚拟机中的待调度的虚拟机,并基于Cgroup进行调度,保证NUMA系统的性能平衡。
如图5所示,在本公开的一个实施例中,步骤S404,基于第二平衡调度操作,确定剩余虚拟机中的待调度的虚拟机以及待调度的虚拟机的NUMA节点的一种具体实现方式,包括:
步骤S502,在检测到剩余虚拟机中具有跨NUMA节点部署的跨节点虚拟机时,将跨节点虚拟机确定为待调度的虚拟机,并将删除第二虚拟机的NUMA节点确定为放置待调度的虚拟机的NUMA节点。
具体地,首先查看当前NUMA系统中是否有虚拟机处在跨NUMA节点部署的状态,如果有的话,则尝试把该虚拟机从跨NUMA节点状态迁移至单个NUMA节点里去。
步骤S504,在检测到具有最多空闲CPU的第三节点,以及具有最多被分配CPU的第四节点时,在第四节点中查询第三虚拟机,第三虚拟机为VCPU数量最小的剩余虚拟机。
具体地,扫描所有NUMA节点,找出空闲CPU最多的那个NUMA节点,命名为第三节点nodeF,扫描所有NUMA节点,找出被分配出去的CPU最多的那个节点,命名为第四节点nodeB,其中,确保nodeF和nodeB是不同的节点,如果是相同的节点,则直接返回,不做虚拟机的迁移,在第四节点nodeB中,找出VCPU number最小的VM,比如第三虚拟机vmC。
步骤S506,在检测到第三节点中的空闲CPU能够放置第三虚拟机时,并且放置后第三节点中剩余空闲CPU的数量仍大于或等于第四节点中剩余空闲CPU的数量,将第三虚拟机确定为待调度的虚拟机,将第三节点确定为放置第三虚拟机的NUMA节点。
具体地,判断第三节点nodeF里是否有足够的空闲CPU来放置第三虚拟机vmC,如果没有,则返回错误,停止操作。
如果有,则检查如果做完了第三虚拟机vmC向第三节点的迁移以后,第四节点nodeB的空闲核数是否比第三节点nodeF的多,如果是,则不迁移,以避免发生迁移的乒乓现象。
如图6所示,在本公开的一个实施例中,步骤208和步骤406中,基于Cgroup将待调度的虚拟机放置在NUMA节点中的一种具体实现方式,包括:
步骤S602,基于待调度的虚拟机的instance ID,在对应的Cgroup中建立子目录。
具体地,以虚拟机的整个系统中唯一的instanceID作为名字,在对应的Cgroup下建立子目录。
步骤S604,将虚拟机对应的NUMA节点中的CPU列表配置在子目录的第一文件中。
具体地,把该虚拟机对应的物理CPU列表,填入到子目录的第一文件CPUset.CPUs中。
步骤S606,将虚拟机所需内存配置在子目录的第二文件中。
具体地,把该虚拟机需要的内存大小的值,填入到子目录的第二文件CPUset.mems中
步骤S608,将instance ID配置在子目录的第三文件中,以在检测到虚拟机的内存未在NUMA节点中时,同步迁移内存。
填写instance ID到子目录的文件memory_migrate中,以在虚拟机的内存没在对应的NUMA节点上时,同步迁移内存。
步骤S610,获取instance ID对应的PID值,将PID值配置在子目录的第四文件中。
其中,PID值指进程的ID号,instance ID为应用实例的ID。
具体地,获得虚拟机instanceId(qemu-kvm)的PID值,把PID值填写到子目录的Cgroup.procs文件中
在本公开的一个实施例中,基于NUMA拓扑和CPU列表在指定目录下配置对应的本地访问控制组Cgroup,具体包括:基于NUMA拓扑分别配置单个NUMA节点和跨NUMA节点;分别针对单个NUMA节点与跨NUMA节点在指定目录配置对应的Cgroup;基于CPU列表在Cgroup中写入可用的CPU编号,其中,在单个NUMA节点对应的Cgroup中,写入NUMA节点中可用的CPU编号,在跨NUMA节点对应的Cgroup中,写入NUMA系统中所有可用的CPU编号。
具体地,以两个包括NUMA节点的NUMA系统为例,配置对应的本地访问控制组Cgroup的过程包括:
/sys/fs/Cgroup/CPUset/NUMANode0,表示针对为放置到NUMA Node0的虚拟机建立的Cgroup。
/sys/fs/Cgroup/CPUset/NUMANode1,表示针对为放置到NUMA Node1的虚拟机建立的Cgroup。
/sys/fs/Cgroup/CPUset/NUMANode01,表示针对跨NUMA Node的虚拟机建立的Cgroup。
另外,再往下面的文件中写入对应的值:
/sys/fs/Cgroup/CPUset/NUMANode0/CPUset.CPUs,写入NUMA Node0除开保留CPU的物理CPU编号。
/sys/fs/Cgroup/CPUset/NUMANode1/CPUset.CPUs,写入NUMA Node1除开保留CPU的物理CPU编号。
/sys/fs/Cgroup/CPUset/NUMANode01/CPUset.CPUs,写入系统中所有的除开保留CPU的物理CPU编号。
如图7所示,根据本公开的另一个实施例的基于NUMA系统的虚拟机调度方法,具体包括:
如图8所示,本实施例采用具有2个NUMA节点(即NUMA节点0和NUMA节点1,均为24核CPU)48核的Intel CPU,其中有8个核(分别保留4核CPU)是保留核,所以一共有40个核每个NUMA节点20个核可供虚拟机使用。
步骤S702,在主机启动时,通过解析shell命令lsCPU的返回字符串来解析NUMA主机的CPU拓扑,通过解析/etc/systemd/system.conf的CPUaffinity字段收集NUMA主机的保留CPU列表,两者相减,得到主机上可供虚拟机使用的物理CPU列表以及这些CPU的NUMA拓扑。
步骤S704,根据可供虚拟机使用的物理CPU列表以及这些CPU的NUMA拓扑,在目录/sys/fs/Cgroup/CPUset下建立对应的Cgroup:
Cgroup NUMANode0表示为放置到NUMA Node 0的虚拟机建立的Cgroup。
Cgroup NUMANode1表示为放置到NUMA Node 1的虚拟机建立的Cgroup。
Cgroup NUMANode01表示为放置跨两个NUMA Node的虚拟机建立的Cgroup。
另外,再往下面的文件中写入对应的值:
NUMANode0/CPUset.CPUs写入步骤1中得到的NUMA Node0可供虚拟机使用的物理CPU编号。
NUMANode1/CPUset.CPUs写入步骤1中得到的NUMA Node1可供虚拟机使用的物理CPU编号。
NUMANode01/CPUset.CPUs写入步骤1中得到的NUMA Node0和Node1的可供虚拟机使用的物理CPU编号。
步骤S706,新建16C-32G的虚拟机VM1,调用平衡算法findSuitableNode来寻找放置这个虚拟机的NUMA Node0。
其中,C指核。
平衡算法,即第一平衡调度操作,会扫描系统中所有的NUMA节点,找出可用CPU核数最多的NUMA节点。
由于此时系统两个NUMA节点每个节点20个核都可处于可用状态,所以系统返回第一个匹配的的NUMA节点Node0。
在Node0的可用CPU列表上,从前往后取N个CPU,对应到虚拟机的N个VCPU。
并且更新系统内部维护这些NUMA CPU状态的数据结构,明确区分出哪些是可用的,哪些是已经被分配出去的。
步骤S708,选择NUMA Node0对应的Cgroup执行虚拟机的放置操作。
对应的Cgroup为:/sys/fs/Cgroup/CPUset/NUMANode0,进行下述操作:
把虚拟机相关信息填充到对应的Cgroup文件下面:
1.以虚拟机在整个系统中唯一的instanceID作为名字,在对应的Cgroup下建立子目录。
2.把该虚拟机对应的步骤3中得到的物理CPU列表,填入到子目录的文件CPUset.CPUs中。
3.把该虚拟机需要的内存大小的值,填入到子目录的文件CPUset.mems中。
4.填写1到子目录的文件memory_migrate中,用于指示如果虚拟机的内存原先没在对应的NUMA Node上,则需要同步迁移内存。
5.把虚拟机对应的PID的值填写到子目录的Cgroup.procs文件中。虚拟机对应的PID的值可以通过下述方法获取。
5.1,先通过shell命令PIDof qemu-kvm得到系统中所有的虚拟机的PID$list
5.2,再遍历查看/proc/$list/cmdline的内容,能匹配上instandID的则为对应的PID号。
完成后,如图8所示。
步骤S710,通过查看指定内容,来确认虚拟机的内存是否绑定到了期望的NUMANode上。
指定内容,即/proc/$虚拟机PID/NUMA_maps的内容。
步骤S712,新建16C-32G的虚拟机VM2,调用平衡算法findSuitableNode来寻找最适合这个虚拟机的NUMA Node1。
具体的参照步骤S706至步骤S710。
完成后,如图9所示。
步骤S714,新建8C-16G的虚拟机VM3,系统会调用平衡算法findSuitableNode来寻找最适合这个虚拟机的NUMA Node。
具体的参照步骤S706至步骤S710,区别在于平衡算法会选中跨NUMA节点来放置这个虚拟机,因为这时系统NUMA Node0只剩4个可用的核,NUMA Node1也只剩4个可用的核。
完成后,如图10所示。
步骤S716,新建1C-2G的虚拟机VM4,系统会调用平衡算法findSuitableNode来寻找最适合这个虚拟机的NUMA Node。
由于此时系统已经没有空闲的CPU可供该虚拟机使用,所以会返回错误,创建虚拟机失败。
完成后,如图11所示。
步骤S718,当虚拟机VM3退出时,如果系统处于平衡状态,则不触发rebalance机制。
完成后,如图12所示。
步骤S720,新建4C-8G的虚拟机VM5,调用平衡算法findSuitableNode来寻找最适合这个虚拟机的NUMA Node0。
具体的参照步骤S706至步骤S710,平衡算法会选中NUMA Node0作为目标Node。
完成后,如图13所示。
步骤S722,新建4C8G的虚拟机VM6,调用平衡算法findSuitableNode来寻找最适合这个虚拟机的NUMA Node1。
具体的参照步骤S706至步骤S710,平衡算法会选中NUMA Node1作为目标Node。
完成后,如图14所示。
步骤S724,当虚拟机VM5和VM6退出时,整个系统还是处于平衡状态,所以不会触发rebalance机制。
完成后,如图15所示。
步骤S726,新建1C2G的虚拟机VM7,调用平衡算法findSuitableNode来寻找最适合这个虚拟机的NUMA Node0。
具体的参照步骤S706至步骤S710,平衡算法会选中NUMA Node0作为目标Node。
完成后,如图16所示。
步骤S728,新建1C2G的虚拟机VM8,调用平衡算法findSuitableNode来寻找最适合这个虚拟机的NUMA Node1。
步骤与步骤3,步骤4,步骤5相似,平衡算法会选中NUMA Node1作为目标Node。
完成后,如图17所示。
步骤S730,新建4C8G的虚拟机VM9,调用平衡算法findSuitableNode来寻找最适合这个虚拟机的NUMA Node。
步骤与步骤3,步骤4,步骤5相似,区别在于平衡算法会选中跨NUMA节点来放置这个虚拟机,因为这时系统NUMA Node0只剩3个可用的核,NUMA Node1也只剩3个可用的核。
跨NUMA放置的时候,该虚拟机前三个核放置在NUMA Node0上,最后一个核放置在NUMA Node1上。
完成后,如图18所示。
步骤S732,当虚拟机VM1(16C32G)退出时,系统NUMA Node0有16个free core,node1有2个free core。
系统会探测到此时NUMA节点的负载处于不平衡状态,会自动触发平衡操作,即把横跨NUMA node的VM9自动迁移到NUMA Node0上。
迁移过程参考步骤S708。
完成后,如图19所示。
此时系统发现NUMA节点还是处于不平衡状态,会再次自动触发平衡操作,即把VM7(1C2G)从NUMA Node0自动迁移到NUMA Node1.
迁移过程参考步骤S708。
完成后,如图20所示。
需要注意的是,上述附图仅是根据本发明示例性实施例的方法所包括的处理的示意性说明,而不是限制目的。易于理解,上述附图所示的处理并不表明或限制这些处理的时间顺序。另外,也易于理解,这些处理可以是例如在多个模块中同步或异步执行的。
所属技术领域的技术人员能够理解,本发明的各个方面可以实现为系统、方法或程序产品。因此,本发明的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。
下面参照图21来描述根据本发明的这种实施方式的基于NUMA系统的虚拟机调度装置2100。图21所示的基于NUMA系统的虚拟机调度装置2100仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
基于NUMA系统的虚拟机调度装置2100以硬件模块的形式表现。基于NUMA系统的虚拟机调度装置2100的组件可以包括但不限于:生成模块2102,用于基于非一致性内存访问NUMA系统中的NUMA节点拓扑和NUMA节点的CPU列表,生成CPU的NUMA拓扑;配置模块2104,用于基于NUMA拓扑和CPU列表在指定目录下配置对应的本地访问控制组Cgroup;调度模块2106,用于响应于调度信息,确定待调度的虚拟机,基于Cgroup为待调度的虚拟机执行平衡调度操作,以使虚拟机访问本地内存。
在本公开的一个实施例中,调度信息包括新建虚拟机的新建调度信息,调度模块2106还用于:响应于新建调度信息,将新建的第一虚拟机确定为待调度的虚拟机;确定第一虚拟机所需的VCPU数量与所需内存;基于VCPU数量和所需内存执行第一平衡调度操作,以确定放置第一虚拟机的NUMA节点;基于Cgroup将待调度的虚拟机放置在NUMA节点中。
在本公开的一个实施例中,调度模块2106还用于:基于NUMA节点拓扑依次扫描所有NUMA节点,确定空闲CPU数量最多的第一节点;在检测到第一节点的空闲CPU数量大于或等于第一虚拟机的VCPU数量时,将第一节点确定为放置第一虚拟机的NUMA节点;在检测到第一节点的空闲CPU数量小于第一虚拟机的VCPU数量时,检测所有NUMA节点的空闲CPU总数是否大于或等于第一虚拟机的VCPU数量;在检测到所有NUMA节点的空闲CPU总数大于或等于第一虚拟机的VCPU数量时,基于跨NUMA节点操作确定放置第一虚拟机的NUMA节点。
在本公开的一个实施例中,调度信息包括删除虚拟机的删除调度信息,调度模块2106还用于:响应于删除调度信息,删除第二虚拟机在Cgroup中的子目录;以及基于第二平衡调度操作,确定剩余虚拟机中的待调度的虚拟机以及待调度的虚拟机的NUMA节点;基于Cgroup将待调度的虚拟机放置在NUMA节点中。
在本公开的一个实施例中,调度模块2106还用于:在检测到剩余虚拟机中具有跨NUMA节点部署的跨节点虚拟机时,将跨节点虚拟机确定为待调度的虚拟机,并将删除第二虚拟机的NUMA节点确定为放置待调度的虚拟机的NUMA节点;和/或在检测到具有最多空闲CPU的第三节点,以及具有最多被分配CPU的第四节点时,在第四节点中查询第三虚拟机,第三虚拟机为VCPU数量最小的剩余虚拟机;在检测到第三节点中的空闲CPU能够放置第三虚拟机时,并且放置后第三节点中剩余空闲CPU的数量仍大于或等于第四节点中剩余空闲CPU的数量,将第三虚拟机确定为待调度的虚拟机,将第三节点确定为放置第三虚拟机的NUMA节点。
在本公开的一个实施例中,调度模块2106还用于:基于待调度的虚拟机的instance ID,在对应的Cgroup中建立子目录;将虚拟机对应的NUMA节点中的CPU列表配置在子目录的第一文件中;将虚拟机所需内存配置在子目录的第二文件中;将instance ID配置在子目录的第三文件中,以在检测到虚拟机的内存未在NUMA节点中时,同步迁移内存;获取instance ID对应的PID值,将PID值配置在子目录的第四文件中。
配置模块2104还用于:基于NUMA拓扑分别配置单个NUMA节点和跨NUMA节点;分别针对单个NUMA节点与跨NUMA节点在指定目录配置对应的Cgroup;基于CPU列表在Cgroup中写入可用的CPU编号,其中,在单个NUMA节点对应的Cgroup中,写入NUMA节点中可用的CPU编号,在跨NUMA节点对应的Cgroup中,写入NUMA系统中所有可用的CPU编号。
下面参照图22来描述根据本发明的这种实施方式的电子设备2200。图22显示的电子设备2200仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图22所示,电子设备2200以通用计算设备的形式表现。电子设备2200的组件可以包括但不限于:上述至少一个处理单元2210、上述至少一个存储单元2220、连接不同系统组件(包括存储单元2220和处理单元2210)的总线2230。
其中,存储单元存储有程序代码,程序代码可以被处理单元2210执行,使得处理单元2210执行本说明书上述“示例性方法”部分中描述的根据本发明各种示例性实施方式的步骤。例如,处理单元2210可以执行如图1中所示的步骤S102至S106,以及本公开的基于NUMA系统的虚拟机调度方法中限定的其他步骤。
存储单元2220可以包括易失性存储单元形式的可读介质,例如随机存取存储单元(RAM)22201和/或高速缓存存储单元22202,还可以进一步包括只读存储单元(ROM)22203。
存储单元2220还可以包括具有一组(至少一个)程序模块22205的程序/实用工具22204,这样的程序模块22205包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
总线2230可以为表示几类总线结构中的一种或多种,包括存储单元总线或者存储单元控制器、外围总线、图形加速端口、处理单元或者使用多种总线结构中的任意总线结构的局域总线。
电子设备2200也可以与一个或多个外部设备2270(例如键盘、指向设备、蓝牙设备等)通信,还可与一个或者多个使得用户能与该电子设备交互的设备通信,和/或与使得该电子设备2200能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口2250进行。并且,电子设备2200还可以通过网络适配器2260与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器2260通过总线2230与电子设备2200的其它模块通信。应当明白,尽管图中未示出,可以结合电子设备使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本公开实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、终端装置、或者网络设备等)执行根据本公开实施方式的方法。
在本公开的示例性实施例中,还提供了一种计算机可读存储介质,其上存储有能够实现本说明书上述方法的程序产品。在一些可能的实施方式中,本发明的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当程序产品在终端设备上运行时,程序代码用于使终端设备执行本说明书上述“示例性方法”部分中描述的根据本发明各种示例性实施方式的步骤。
根据本发明的实施方式的用于实现上述方法的程序产品,其可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在终端设备,例如个人电脑上运行。然而,本发明的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本公开的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
此外,尽管在附图中以特定顺序描述了本公开中方法的各个步骤,但是,这并非要求或者暗示必须按照该特定顺序来执行这些步骤,或是必须执行全部所示的步骤才能实现期望的结果。附加的或备选的,可以省略某些步骤,将多个步骤合并为一个步骤执行,以及/或者将一个步骤分解为多个步骤执行等。
通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本公开实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、移动终端、或者网络设备等)执行根据本公开实施方式的方法。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由所附的权利要求指出。
Claims (10)
1.一种基于NUMA系统的虚拟机调度方法,其特征在于,包括:
基于非一致性内存访问NUMA系统中的NUMA节点拓扑和所述NUMA节点的CPU列表,生成所述CPU的NUMA拓扑;
基于所述NUMA拓扑和所述CPU列表在指定目录下配置对应的本地访问控制组Cgroup;
响应于调度信息,确定待调度的虚拟机,基于所述Cgroup为所述待调度的虚拟机执行平衡调度操作,以使所述虚拟机访问本地内存。
2.根据权利要求1所述的基于NUMA系统的虚拟机调度方法,其特征在于,所述调度信息包括新建虚拟机的新建调度信息,所述响应于调度信息,确定待调度的虚拟机,基于所述Cgroup为所述待调度的虚拟机执行平衡调度操作,以使所述虚拟机访问本地内存,具体包括:
响应于所述新建调度信息,将新建的第一虚拟机确定为所述待调度的虚拟机;
确定所述第一虚拟机所需的VCPU数量与所需内存;
基于所述VCPU数量和所述所需内存执行第一平衡调度操作,以确定放置所述第一虚拟机的NUMA节点;
基于所述Cgroup将所述待调度的虚拟机放置在所述NUMA节点中,以使所述虚拟机访问本地内存。
3.根据权利要求2所述的基于NUMA系统的虚拟机调度方法,其特征在于,所述基于所述VCPU数量和所述所需内存执行第一平衡调度操作,以确定放置所述待调度的虚拟机的NUMA节点,具体包括:
基于所述NUMA节点拓扑依次扫描所有所述NUMA节点,确定空闲CPU数量最多的第一节点;
在检测到所述第一节点的空闲CPU数量大于或等于所述第一虚拟机的VCPU数量时,将所述第一节点确定为放置所述第一虚拟机的NUMA节点;
在检测到所述第一节点的空闲CPU数量小于所述第一虚拟机的VCPU数量时,检测所有所述NUMA节点的空闲CPU总数是否大于或等于所述第一虚拟机的VCPU数量;
在检测到所有所述NUMA节点的空闲CPU总数大于或等于所述第一虚拟机的VCPU数量时,基于跨NUMA节点操作确定放置所述第一虚拟机的NUMA节点。
4.根据权利要求1所述的基于NUMA系统的虚拟机调度方法,其特征在于,所述调度信息包括删除虚拟机的删除调度信息,所述响应于调度信息,确定待调度的虚拟机,基于所述Cgroup为所述待调度的虚拟机执行平衡调度操作,以使所述虚拟机访问本地内存,具体包括:
响应于所述删除调度信息,删除第二虚拟机在所述Cgroup中的子目录;以及
基于第二平衡调度操作,确定剩余虚拟机中的所述待调度的虚拟机以及所述待调度的虚拟机的NUMA节点;
基于所述Cgroup将所述待调度的虚拟机放置在所述NUMA节点中,以使所述虚拟机访问本地内存。
5.根据权利要求4所述的基于NUMA系统的虚拟机调度方法,其特征在于,所述基于第二平衡调度操作,确定剩余虚拟机中的所述待调度的虚拟机以及所述待调度的虚拟机的NUMA节点,具体包括:
在检测到所述剩余虚拟机中具有跨NUMA节点部署的跨节点虚拟机时,将所述跨节点虚拟机确定为所述待调度的虚拟机,并将删除所述第二虚拟机的NUMA节点确定为放置所述待调度的虚拟机的所述NUMA节点;和/或
在检测到具有最多空闲CPU的第三节点,以及具有最多被分配CPU的第四节点时,在所述第四节点中查询第三虚拟机,所述第三虚拟机为VCPU数量最小的所述剩余虚拟机;
在检测到所述第三节点中的所述空闲CPU能够放置所述第三虚拟机时,并且放置后所述第三节点中剩余空闲CPU的数量仍大于或等于所述第四节点中剩余空闲CPU的数量,将所述第三虚拟机确定为所述待调度的虚拟机,将所述第三节点确定为所述放置所述第三虚拟机的所述NUMA节点。
6.根据权利要求2或4所述的基于NUMA系统的虚拟机调度方法,其特征在于,所述基于所述Cgroup将所述待调度的虚拟机放置在所述NUMA节点中,具体包括:
基于所述待调度的虚拟机的instance ID,在对应的所述Cgroup中建立子目录;
将所述虚拟机对应的所述NUMA节点中的CPU列表配置在所述子目录的第一文件中;
将所述虚拟机所需内存配置在所述子目录的第二文件中;
将所述instance ID配置在所述子目录的第三文件中,以在检测到所述虚拟机的内存未在所述NUMA节点中时,同步迁移所述内存;
获取所述instance ID对应的PID值,将所述PID值配置在所述子目录的第四文件中。
7.根据权利要求1至5中任一项所述的基于NUMA系统的虚拟机调度方法,其特征在于,所述基于所述NUMA拓扑和所述CPU列表在指定目录下配置对应的本地访问控制组Cgroup,具体包括:
基于所述NUMA拓扑分别配置单个NUMA节点和跨NUMA节点;
分别针对所述单个NUMA节点与所述跨NUMA节点在所述指定目录配置对应的所述Cgroup;
基于所述CPU列表在所述Cgroup中写入可用的CPU编号,
其中,在所述单个NUMA节点对应的所述Cgroup中,写入所述NUMA节点中所述可用的CPU编号,在所述跨NUMA节点对应的所述Cgroup中,写入所述NUMA系统中所有所述可用的CPU编号。
8.一种基于NUMA系统的虚拟机调度装置,其特征在于,包括:
生成模块,用于基于非一致性内存访问NUMA系统中的NUMA节点拓扑和所述NUMA节点的CPU列表,生成所述CPU的NUMA拓扑;
配置模块,用于基于所述NUMA拓扑和所述CPU列表在指定目录下配置对应的本地访问控制组Cgroup;
调度模块,用于响应于调度信息,确定待调度的虚拟机,基于所述Cgroup为所述待调度的虚拟机执行平衡调度操作,以使所述虚拟机访问本地内存。
9.一种电子设备,其特征在于,包括:
处理器;以及
存储器,用于存储所述处理器的可执行指令;
其中,所述处理器配置为经由执行所述可执行指令来执行权利要求1~14中任意一项所述的基于NUMA系统的虚拟机调度方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1~7中任意一项所述的基于NUMA系统的虚拟机调度方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111630165.3A CN114371911A (zh) | 2021-12-28 | 2021-12-28 | 虚拟机调度方法、装置、电子设备和可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111630165.3A CN114371911A (zh) | 2021-12-28 | 2021-12-28 | 虚拟机调度方法、装置、电子设备和可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114371911A true CN114371911A (zh) | 2022-04-19 |
Family
ID=81141819
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111630165.3A Pending CN114371911A (zh) | 2021-12-28 | 2021-12-28 | 虚拟机调度方法、装置、电子设备和可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114371911A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115269120A (zh) * | 2022-08-01 | 2022-11-01 | 江苏安超云软件有限公司 | 虚拟机的numa节点调度方法、装置、设备及存储介质 |
-
2021
- 2021-12-28 CN CN202111630165.3A patent/CN114371911A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115269120A (zh) * | 2022-08-01 | 2022-11-01 | 江苏安超云软件有限公司 | 虚拟机的numa节点调度方法、装置、设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7138126B2 (ja) | リソース配置を最適化するための適時性リソース移行 | |
US9135060B2 (en) | Method and apparatus for migrating task in multicore platform | |
US8499010B2 (en) | Garbage collection in a multiple virtual machine environment | |
US10222985B2 (en) | Autonomous dynamic optimization of platform resources | |
RU2571366C2 (ru) | Виртуальная архитектура неоднородного доступа к памяти для виртуальных машин | |
US10248444B2 (en) | Method of migrating virtual machines between non-uniform memory access nodes within an information handling system | |
KR101440107B1 (ko) | 다중 코어 시스템에서 접근 시간에 기초한 메모리 관리방법 및 장치 | |
US9052957B2 (en) | Method and system for conducting intensive multitask and multiflow calculation in real-time | |
EP2182438A1 (en) | Virtual machine control method and virtual machine system | |
WO2012066640A1 (ja) | 計算機システム、マイグレーション方法及び管理サーバ | |
US20110219373A1 (en) | Virtual machine management apparatus and virtualization method for virtualization-supporting terminal platform | |
US7389506B1 (en) | Selecting processor configuration based on thread usage in a multiprocessor system | |
US11556391B2 (en) | CPU utilization for service level I/O scheduling | |
JP2017227969A (ja) | 制御プログラム、システム、及び方法 | |
WO2022042334A1 (en) | Compilation strategy for sharable application snapshot | |
US20240143377A1 (en) | Overlay container storage driver for microservice workloads | |
JP5515889B2 (ja) | 仮想マシンシステム、自動マイグレーション方法および自動マイグレーションプログラム | |
CN114371911A (zh) | 虚拟机调度方法、装置、电子设备和可读存储介质 | |
CN111666036B (zh) | 一种迁移数据的方法、装置及系统 | |
US9588817B2 (en) | Scheduling method and scheduling system for assigning application to processor | |
JP2017157153A (ja) | 情報処理装置、仮想マシン移動方法、および仮想マシン制御プログラム | |
US20180292996A1 (en) | Data Storage Allocation Utilizing Virtual Machine Resource Allocation | |
JPH07129518A (ja) | 計算機システム | |
JP5699665B2 (ja) | サーバ装置、処理実行方法およびプログラム | |
US20240272954A1 (en) | Dynamic reconfiguration of microservice test environment |
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 |