掌桥专利:专业的专利平台
掌桥专利
首页

一种虚拟机调度的方法、系统、设备和存储介质

文献发布时间:2023-06-19 16:09:34



技术领域

本发明涉及服务器领域,更具体地,特别是指一种虚拟机调度的方法、系统、设备和存储介质。

背景技术

云计算已经成为国家新型基础设施建设的基础设施。虚拟化技术是云计算的重要技术支撑手段和关键支撑技术。当前虚拟化主要有物理服务器虚拟化、存储虚拟化、网络虚拟化、设备虚拟化等技术,通过这些技术实现了硬件的虚拟化、操作系统的虚拟化和上层业务的虚拟化。有效保证了云计算的高可靠性、弹性扩展计算资源的特点。通过对服务器的资源的弹性管理,提升了服务器资源利用率和降低了资源损耗。

根据虚拟化程度的不同,虚拟技术分为全虚拟化和半虚拟化。全虚拟化最直观的体现就是可以在虚拟的服务器上安装任何类型的操作系统。当前虚拟机安装的操作系统独立的运行在各自的虚拟服务器上,操作系统之间无感知。自旋锁是一种获取资源在得不到满足的情况下就进行等待的锁机制,主要用在多处理器工作环境中。由于其死等的特性,即使这段时间内系统上有其它要执行的任务(进程),也不会让出CPU资源,给其它进程业务使用。为提升自旋锁的性能,自旋锁目前已经发展出原始自旋锁(raw spinlock)、ticketspinlock、mcs spinlock、queue spinlock等不同设计的自旋锁。但是在虚拟化场景下,物理CPU被虚拟化为VCPU,每个CPU被线程化。在这种情况下一旦虚拟操作系统进入spinlock(自旋锁)状态,意味着线程在不断的等待,浪费CPU的资源,产生Lock Holder Preemption(LHP,锁持有先占)使虚拟机中的锁持有线程被抢占,导致锁等待线程忙等,直到锁持有者线程再次被调度并释放锁后,锁等待线程才能获取到锁。从锁持有线程被抢占到其再次被调度运行这段时间,其余锁等待线程的等待其实是在浪费CPU算力。和Lock WaiterPreemption(LWP,锁等待先占)虚拟机中的下一个锁等待线程被抢占,直到其下一次再次被调度并获取锁后,其余锁等待线程的盲等其实锁在浪费CPU算力。因此一旦陷入盲等的虚拟CPU(线程),主机完全可以将该线程暂停运行,而去执行其他任务。在这种情况下自旋锁又产生了paravirt spinlock。该自旋锁是基于虚拟化场景而设计,对虚拟化场景下的spinlock进行优化,通过修改guest kernel,让其感知到自己处于虚拟化场景中,使用haltvcpu的方式而非让vcpu自旋,可以在一定程度上减轻LHP和LWP问题。

当前spinlock仅是考虑一个操作系统范围内部的锁的使用,无法去感知不同虚拟机下的业务同步问题。

发明内容

有鉴于此,本发明实施例的目的在于提出一种虚拟机调度的方法、系统、计算机设备及计算机可读存储介质,本发明使得物理主机能够感知到虚拟机是否处于自旋锁未获得锁的状态,从而协调虚拟机的虚拟CPU线程的运行,提升物理服务器的调度能力和服务能力。

基于上述目的,本发明实施例的一方面提供了一种虚拟机调度的方法,包括如下步骤:根据虚拟机申请的锁的不同在宿主机上创建不同的锁队列,并将持有相同锁等待解锁的业务进程设置在同一锁队列中;通过虚拟机业务进程在宿主机上判断当前队列是否存在虚拟CPU线程;响应于当前队列不存在虚拟CPU线程,获取锁并执行所述业务进程;以及响应于当前队列存在虚拟CPU线程,根据所述业务进程的信息创建新的虚拟CPU线程并挂载到队列的尾部,并暂停所述业务进程。

在一些实施方式中,所述根据虚拟机申请的锁的不同在宿主机上创建不同的锁队列包括:对锁进行初始化,并将锁的名称供所述宿主机上所有的虚拟机访问所述锁使用。

在一些实施方式中,所述方法还包括:响应于持有锁的业务进程完成工作,释放当前虚拟CPU线程,并唤醒队列中下一个虚拟CPU线程。

在一些实施方式中,所述方法还包括:响应于关闭虚拟机,清空所述虚拟机所有锁的虚拟CPU线程信息。

本发明实施例的另一方面,提供了一种虚拟机调度的系统,包括:创建模块,配置用于根据虚拟机申请的锁的不同在宿主机上创建不同的锁队列,并将持有相同锁等待解锁的业务进程设置在同一锁队列中;判断模块,配置用于通过虚拟机业务进程在宿主机上判断当前队列是否存在虚拟CPU线程;执行模块,配置用于响应于当前队列不存在虚拟CPU线程,获取锁并执行所述业务进程;以及挂载模块,配置用于响应于当前队列存在虚拟CPU线程,根据所述业务进程的信息创建新的虚拟CPU线程并挂载到队列的尾部,并暂停所述业务进程。

在一些实施方式中,所述创建模块配置用于:对锁进行初始化,并将锁的名称供所述宿主机上所有的虚拟机访问所述锁使用。

在一些实施方式中,所述系统还包括解锁模块,配置用于:响应于持有锁的业务进程完成工作,释放当前虚拟CPU线程,并唤醒队列中下一个虚拟CPU线程。

在一些实施方式中,所述系统还包括清空模块,配置用于:响应于关闭虚拟机,清空所述虚拟机所有锁的虚拟CPU线程信息。

本发明实施例的又一方面,还提供了一种计算机设备,包括:至少一个处理器;以及存储器,所述存储器存储有可在所述处理器上运行的计算机指令,所述指令由所述处理器执行时实现如上方法的步骤。

本发明实施例的再一方面,还提供了一种计算机可读存储介质,计算机可读存储介质存储有被处理器执行时实现如上方法步骤的计算机程序。

本发明具有以下有益技术效果:使得物理主机能够感知到虚拟机是否处于自旋锁未获得锁的状态,从而协调虚拟机的虚拟CPU线程的运行,提升物理服务器的调度能力和服务能力。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的实施例。

图1为本发明提供的虚拟机调度的方法的实施例的示意图;

图2为本发明提供的锁的排队机制的示意图;

图3为本发明提供的虚拟CPU线程的内容示意图;

图4为本发明提供的虚拟机调度的系统的实施例的示意图;

图5为本发明提供的虚拟机调度的计算机设备的实施例的硬件结构示意图;

图6为本发明提供的虚拟机调度的计算机存储介质的实施例的示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明实施例进一步详细说明。

需要说明的是,本发明实施例中所有使用“第一”和“第二”的表述均是为了区分两个相同名称非相同的实体或者非相同的参量,可见“第一”“第二”仅为了表述的方便,不应理解为对本发明实施例的限定,后续实施例对此不再一一说明。

本发明实施例的第一个方面,提出了一种虚拟机调度的方法的实施例。图1示出的是本发明提供的虚拟机调度的方法的实施例的示意图。如图1所示,本发明实施例包括如下步骤:

S1、根据虚拟机申请的锁的不同在宿主机上创建不同的锁队列,并将持有相同锁等待解锁的业务进程设置在同一锁队列中;

S2、通过虚拟机业务进程在宿主机上判断当前队列是否存在虚拟CPU线程;

S3、响应于当前队列不存在虚拟CPU线程,获取锁并执行所述业务进程;以及

S4、响应于当前队列存在虚拟CPU线程,根据所述业务进程的信息创建新的虚拟CPU线程并挂载到队列的尾部,并暂停所述业务进程。

本发明实施例是在服务器虚拟化的基础上利用虚拟化技术提升服务器的资源利用率,最大程度协调服务器资源对外提供服务。本发明实施例就是通过感知虚拟服务器上操作系统的运行状态(自旋锁)来协调调度虚拟操作系统(虚拟机)的运行。

Raw spinlock是最初始的spinlock。用一个整形变量表示,其初始值为1,表示available的状态。当一个CPU(设为CPU A)获得spinlock后,会将该变量的值设为0,之后其他CPU试图获取这个spinlock时,会一直等待,直到CPU A释放spinlock,并将该变量的值设为1。Raw spinlock的实现速度很快,尤其是在没有真正竞态的情况下(事实上大部分时候就是这种情况),但这种方法存在一个缺点:它是“不公平”的。一旦spinlock被释放,第一个能够成功执行spinlock操作的CPU将成为新的owner(拥有者),没有办法确保在该spinlock上等待时间最长的那个CPU优先获得锁,这将带来延迟不能确定的问题。

为了解决这种“无序竞争”带来的不公平问题,spinlock的另一种实现方法是采用排队形式的“ticket spinlock”。该机制下每个试图获取锁的cpu都会获得一个排队号。当锁当前的号码等于排队号的时候,该cpu就获取到锁。当获取锁的时候,如果当前的锁的号码等于CPU获取到的排队号,说明是空队列,立刻获取锁执行。否则等待。每一次释放锁的时候都需要全局同步到每个持有锁的CPU上。所有在自旋等待的锁,都必须实时获取当前锁的owner值。导致每一次owner值的变化都会刷新cpu的cache line,等待锁的线程越多,刷新约频繁。但实际上每次刷新只有一个cpu核会使用。过多的刷新导致无谓的开销。

在ticket spinlock的基础上进行一定的修改,让每个CPU不再是等待同一个spinlock变量,而是基于各自不同的per-CPU的变量进行等待,那么每个CPU平时只需要查询自己对应的这个变量所在的本地cache line,仅在这个变量发生变化的时候,才需要读取内存和刷新这条cache line。可以解决ticket spinlock的问题。Mcs spinlock与内核当前的spinlock锁的大小不一致,无法默认直接替换,需要修改代码才能试用。

Queue spinlock是当前Linux系统默认的锁机制。通过对mcs锁进行优化,采用数据结构压缩和避免cache line刷新的机制,将mcs完美替换了ticket spinlock。

Paravirt spinlock可以对虚拟化场景下的spinlock进行优化,通过修改guestkernel,让其感知到自己处于虚拟化场景中,使用halt vcpu的方式而非让vcpu自旋,可以在一定程度上减轻LHP和LWP问题。

根据当前操作系统运行在虚拟机还是物理机上,分为不同的执行功能。在虚拟机上有锁的初始化、获取锁、解锁三部分。在宿主机(即物理机)上有锁定、调度和锁的排队机制。由于需要在虚拟机之间同步虚拟机上的业务,因此本发明实施例借助在宿主机上构建锁的排队机制和锁的调度机制来实现同步目标。虚拟机与宿主机之间的通信可以通过特殊指令、构建virtio等方式来实现。

根据虚拟机申请的锁的不同在宿主机上创建不同的锁队列,并将持有相同锁等待解锁的业务进程设置在同一锁队列中。

在一些实施方式中,所述根据虚拟机申请的锁的不同在宿主机上创建不同的锁队列包括:对锁进行初始化,并将锁的名称供所述宿主机上所有的虚拟机访问所述锁使用。初始化锁代表虚拟机业务进程创建锁。主要完成的工作是在宿主机上创建一个锁的队列,锁的名称供该宿主机上的所有的虚拟机访问该锁使用。

图2为本发明提供的锁的排队机制的示意图,如图2所示,锁在使用过程中需要关闭中断机制,禁止抢占。所以每个VCPU(虚拟CPU线程)同一时间上仅能存在一个锁。因此锁的排队机制队列上每一个业务进程仅能出现一个。每一个队列代表虚拟机申请的一把锁,队列上的vcpu代表持有相同锁的业务进程正在等待解锁。

图3为本发明提供的虚拟CPU线程的内容示意图,如图3所示,虚拟CPU线程的内容包括锁的状态、所属虚拟机、所属业务进程和count。锁的状态:0代表被锁的,1代表当前持有锁。所属虚拟机表示当前申请锁的虚拟机。所属业务进程表示当前申请的VCPU。Count表示该虚拟机申请的锁的数量,该值主要用于统计锁的使用情况。

通过虚拟机业务进程在宿主机上判断当前队列是否存在虚拟CPU线程。

响应于当前队列不存在虚拟CPU线程,获取锁并执行所述业务进程。响应于当前队列存在虚拟CPU线程,根据所述业务进程的信息创建新的虚拟CPU线程并挂载到队列的尾部,并暂停所述业务进程。获取锁代表虚拟机业务进程去宿主机上判断锁的状态,若当前队列中为空,也就是没有vcpu存在则立刻获取锁并执行。若当前队列不为空则将业务进程相关信息创建一个vcpu并挂载到队列的尾部,最后将业务进程暂停运行。

在一些实施方式中,所述方法还包括:响应于持有锁的业务进程完成工作,释放当前虚拟CPU线程,并唤醒队列中下一个虚拟CPU线程。解锁代表持有锁的业务进程在完成相关工作后,释放锁的过程。主要有释放vcpu和唤醒队列的下一个vcpu,唤醒方法是恢复业务进程的运行。

调度负责业务进程的管理,如暂停业务进程,恢复业务进程。

在一些实施方式中,所述方法还包括:响应于关闭虚拟机,清空所述虚拟机所有锁的虚拟CPU线程信息。维护模块负责维护整个锁的队列,如关闭虚拟机时清空该虚拟机相关的锁的vcpu信息,如锁的销毁等。

本发明实施例中物理主机能够感知到虚拟机是否处于spinlock未获得锁的状态,对处于spinlock状态的线程(vcpu)进行调度,调离执行状态;对获得spinlock锁的线程进行调度,恢复其运行,并且虚拟机之间能够通过该锁机制相互协调运行,不同的虚拟机可以初始化并竞争同一把spinlock锁。让虚拟机中的业务协调运行。

需要特别指出的是,上述虚拟机调度的方法的各个实施例中的各个步骤均可以相互交叉、替换、增加、删减,因此,这些合理的排列组合变换之于虚拟机调度的方法也应当属于本发明的保护范围,并且不应将本发明的保护范围局限在实施例之上。

基于上述目的,本发明实施例的第二个方面,提出了一种虚拟机调度的系统。如图4所示,系统200包括如下模块:创建模块,配置用于根据虚拟机申请的锁的不同在宿主机上创建不同的锁队列,并将持有相同锁等待解锁的业务进程设置在同一锁队列中;判断模块,配置用于通过虚拟机业务进程在宿主机上判断当前队列是否存在虚拟CPU线程;执行模块,配置用于响应于当前队列不存在虚拟CPU线程,获取锁并执行所述业务进程;以及挂载模块,配置用于响应于当前队列存在虚拟CPU线程,根据所述业务进程的信息创建新的虚拟CPU线程并挂载到队列的尾部,并暂停所述业务进程。

在一些实施方式中,所述创建模块配置用于:对锁进行初始化,并将锁的名称供所述宿主机上所有的虚拟机访问所述锁使用。

在一些实施方式中,所述系统还包括解锁模块,配置用于:响应于持有锁的业务进程完成工作,释放当前虚拟CPU线程,并唤醒队列中下一个虚拟CPU线程。

在一些实施方式中,所述系统还包括清空模块,配置用于:响应于关闭虚拟机,清空所述虚拟机所有锁的虚拟CPU线程信息。

基于上述目的,本发明实施例的第三个方面,提出了一种计算机设备,包括:至少一个处理器;以及存储器,存储器存储有可在处理器上运行的计算机指令,指令由处理器执行以实现如下步骤:S1、根据虚拟机申请的锁的不同在宿主机上创建不同的锁队列,并将持有相同锁等待解锁的业务进程设置在同一锁队列中;S2、通过虚拟机业务进程在宿主机上判断当前队列是否存在虚拟CPU线程;S3、响应于当前队列不存在虚拟CPU线程,获取锁并执行所述业务进程;以及S4、响应于当前队列存在虚拟CPU线程,根据所述业务进程的信息创建新的虚拟CPU线程并挂载到队列的尾部,并暂停所述业务进程。

在一些实施方式中,所述根据虚拟机申请的锁的不同在宿主机上创建不同的锁队列包括:对锁进行初始化,并将锁的名称供所述宿主机上所有的虚拟机访问所述锁使用。

在一些实施方式中,所述步骤还包括:响应于持有锁的业务进程完成工作,释放当前虚拟CPU线程,并唤醒队列中下一个虚拟CPU线程。

在一些实施方式中,所述步骤还包括:响应于关闭虚拟机,清空所述虚拟机所有锁的虚拟CPU线程信息。

如图5所示,为本发明提供的上述虚拟机调度的计算机设备的一个实施例的硬件结构示意图。

以如图5所示的装置为例,在该装置中包括一个处理器301以及一个存储器302。

处理器301和存储器302可以通过总线或者其他方式连接,图5中以通过总线连接为例。

存储器302作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如本申请实施例中的虚拟机调度的方法对应的程序指令/模块。处理器301通过运行存储在存储器302中的非易失性软件程序、指令以及模块,从而执行服务器的各种功能应用以及数据处理,即实现虚拟机调度的方法。

存储器302可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据虚拟机调度的方法的使用所创建的数据等。此外,存储器302可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器302可选包括相对于处理器301远程设置的存储器,这些远程存储器可以通过网络连接至本地模块。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

一个或者多个虚拟机调度的方法对应的计算机指令303存储在存储器302中,当被处理器301执行时,执行上述任意方法实施例中的虚拟机调度的方法。

执行上述虚拟机调度的方法的计算机设备的任何一个实施例,可以达到与之对应的前述任意方法实施例相同或者相类似的效果。

本发明还提供了一种计算机可读存储介质,计算机可读存储介质存储有被处理器执行时执行虚拟机调度的方法的计算机程序。

如图6所示,为本发明提供的上述虚拟机调度的计算机存储介质的一个实施例的示意图。以如图6所示的计算机存储介质为例,计算机可读存储介质401存储有被处理器执行时执行如上方法的计算机程序402。

最后需要说明的是,本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,可以通过计算机程序来指令相关硬件来完成,虚拟机调度的方法的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,程序的存储介质可为磁碟、光盘、只读存储记忆体(ROM)或随机存储记忆体(RAM)等。上述计算机程序的实施例,可以达到与之对应的前述任意方法实施例相同或者相类似的效果。

以上是本发明公开的示例性实施例,但是应当注意,在不背离权利要求限定的本发明实施例公开的范围的前提下,可以进行多种改变和修改。根据这里描述的公开实施例的方法权利要求的功能、步骤和/或动作不需以任何特定顺序执行。此外,尽管本发明实施例公开的元素可以以个体形式描述或要求,但除非明确限制为单数,也可以理解为多个。

应当理解的是,在本文中使用的,除非上下文清楚地支持例外情况,单数形式“一个”旨在也包括复数形式。还应当理解的是,在本文中使用的“和/或”是指包括一个或者一个以上相关联地列出的项目的任意和所有可能组合。

上述本发明实施例公开实施例序号仅仅为了描述,不代表实施例的优劣。

本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。

所属领域的普通技术人员应当理解:以上任何实施例的讨论仅为示例性的,并非旨在暗示本发明实施例公开的范围(包括权利要求)被限于这些例子;在本发明实施例的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,并存在如上的本发明实施例的不同方面的许多其它变化,为了简明它们没有在细节中提供。因此,凡在本发明实施例的精神和原则之内,所做的任何省略、修改、等同替换、改进等,均应包含在本发明实施例的保护范围之内。

相关技术
  • 一种虚拟机调度的方法、系统、设备和存储介质
  • 一种虚拟机线程的调度方法、装置、电子设备及存储介质
技术分类

06120114728038