一种基于动态ple技术的虚拟机协同调度方法

文档序号:6536501阅读:245来源:国知局
一种基于动态ple技术的虚拟机协同调度方法
【专利摘要】本发明公开了一种基于动态PLE技术的虚拟机协同调度方法。通过监控所有虚拟机的运行状态,获取每个虚拟机在等待自旋锁时所需的平均等待时长,以此对PLE参数进行动态调整,以使其更适应当前的系统运行状态。同时基于动态PLE技术,在VCPU触发PLE时,将该VCPU所属虚拟机中运行于内核模式的所有VCPU提升至各自物理CPU运行队列的队首,使得在下个调度周期这组VCPU可以同时运行。本发明将动态PLE技术和虚拟机协同调度相结合,有效解决虚拟机中VCPU之间因自旋锁持有者被抢占而导致的忙等问题,有效提升了虚拟机与系统的整体性能。
【专利说明】一种基于动态PLE技术的虚拟机协同调度方法
【技术领域】
[0001]本发明涉及计算机虚拟机性能监控和虚拟机调度领域,尤其涉及一种基于动态PLE技术的虚拟机协同调度方法。
【背景技术】
[0002]虚拟化技术抽象计算机的物理资源,向上呈现虚拟硬件接口,使得多个操作系统能够在同一物理设备上运行。利用虚拟化技术,将原本运行于多台物理设备的服务整合到同一台物理服务器上,提高物理资源利用率的同时减少了企业在IT基础设施上的管理维护成本。另一方面通过虚拟化技术对物理资源的管理,能够对资源进行动态配置,对于各种业务适应性更强。同时虚拟化技术能够对虚拟服务器进行监控和隔离,确保虚拟服务器的正常运行以及虚拟服务器之间能够相互独立。此外,虚拟服务器能够更快捷的进行复制转移,提高可用性以及灾难恢复速度。因此,虚拟化技术成为云计算以及数据中心不可或缺的一部分。
[0003]虚拟机监控器(Virtual Machine Monitor, VMM)是目前主流的虚拟化技术,介于硬件与传统操作系统之间,负责管理计算机的物理资源,包括内存、CPU以及I/O设备等硬件资源,并虚拟出硬件接口供上层使用,使得多个操作系统能够在同一个物理设备上运行。
[0004]同时为了能够更好地提升虚拟化服务器的性能,硬件上也添加了对虚拟化的支持。Intel的VT系列虚拟化技术,提供了对虚拟化技术的支持,使得虚拟机的性能得到显著提升。
[0005]虚拟机监控器的引入,使得很多在传统操作系统中已经解决的问题出现了新的变化,同时也使得传统操作系统中现有的一些机制出现新的问题。在传统的操作系统中自旋锁(Spin-Lock)用于解决CPU之间对于共享资源的竞争。当多个CPU需要获取同一个自旋锁时,只有一个CPU可以持有该锁,其它的CPU则一直循环检测自旋锁是否被释放。传统的操作系统中持有自旋锁的CPU在非常短的时间内会将锁释放,这样等待自旋锁的CPU循环检测的时间并不会很长。但在虚拟化环境中,虚拟机中持有自旋锁的VCPU可能被虚拟机监控器调度出物理CPU,使得该虚拟机中等待该自旋锁的其它VCPU —直处于循环检测自旋锁的状态,该问题被称为LHP (Lock Holder Preemption,自旋锁持有者被抢占)问题,会导致虚拟机性能的下降。
[0006]为了解决上述LHP问题,现有的技术方案包括虚拟机中VCPU的协同调度和VCPU的忙等检测。虚拟机中VCPU的协同调度指的是将虚拟机中的一组VCPU (可以是虚拟机中全部VCPU也可以是部分VCPU)同时调度进物理CPU,这样可以有效减少LHP现象的出现,但是这种方法会造成CPU资源的碎片化以及系统延迟的不确定性增加等问题。VCPU的忙等检测,指的是在检测到VCPU忙等时将VCPU调度出物理CPU,主要分为基于虚拟机的VCPU忙等检测和基于硬件支持的VCPU忙等检测。基于虚拟机的VCPU忙等检测需要对虚拟机操作系统进行修改,在虚拟机中出现VCPU忙等时通知VMM,这种方法因为需要修改虚拟机操作系统,适用范围受限制。基于硬件支持的VCPU忙等检测需要设置虚拟机控制结构中的忙等检测参数,这些参数在计算机处于不同负载下的最优值是需要变化的。将虚拟机中VCPU的协同调度与参数动态调整的VCPU忙等检测相结合可以降低协同调度带来的负面影响,同时提高虚拟机的性能。
[0007]当前基于硬件支持的VCPU忙等检测主要是PLE (Pause Loop Exit)技术,其中忙等检测参数是PLE_GAP和PLE_WIND0W。在VCPU进行忙等时,会执行Pause指令,若两个连续的Pause指令在PLE_GAP指定的时间范围内,则可以认为该VCPU是由于等待同一个自旋锁而导致的忙等,当这种连续的Pause指令超过PLE_WIND0W指定的时间范围时,则认为该VCPU忙等时间过长,此时PLE向VMM层的调度模块提供触发信息,调度模块将该VCPU调度出物理CPU,之后从物理CPU的运行队列中选择下一个VCPU进入该物理CPU中运行,触发执行过程如图1所示。
[0008]现有PLE技术的运用中有将参数固定不变的静态PLE技术,也有根据计算机在不同负载时动态变化参数以取其最优值的动态PLE技术。
[0009]在现有的技术方案中,对VPN的协同调度和动态PLE技术只单独使用其中之一,前者仅仅基于静态PLE技术,其利用PLE的触发信息对虚拟机中的VCPU进行协同调度,并没有考虑在不同负载情况下PLE参数的调整。后者对PLE参数在不同负载情况下进行动态调整,并没有利用VCPU的协同调度减少LHP的发生。
[0010]目前尚没有将VCPU的协同调度和动态PLE相结合的技术方案,因此,本领域的技术人员致力于开发一种将VCPU的协同调度和动态PLE相结合,利用两者各自的优势,以此进一步提升虚拟机性能的方法。

【发明内容】

[0011]有鉴于现有技术中没有利用协同调度与动态PLE各自的优势,将它们相结合起来,以进一步提升虚拟机性能的方法。本发明所要解决的技术问题是提供一种基于动态PLE技术的虚拟机协同调度方法,其结合了虚拟机协同调度和动态PLE的优势,有效地提升虚拟机的性能。
[0012]为实现上述目的,本发明所提供的方法,其设计理念是通过监控所有虚拟机的运行状态,获取每个虚拟机在等待自旋锁时所需的平均等待时长,以此对PLE参数进行动态调整,使其更适应于当前的运行状态。同时基于动态PLE技术,在VCPU触发PLE时,将该VCPU所属虚拟机中运行于内核模式的所有VCPU提升至各自物理CPU运行队列的队首,使得在下个调度周期这组VCPU可以同时运行。之所以根据VCPU是否处于内核模式来调整队列是因为在操作系统中,进程运行模式有用户模式和内核模式,而绝大部分的自旋锁是在内核模式获取的,并且在释放锁前不会切换到用户模式。
[0013]基于动态PLE技术的虚拟机协同调度方法包括如下步骤:
[0014]步骤1、监控模块周期性监控所有虚拟机的运行状态,得到每个虚拟机的自旋锁平均等待时长并传入PLE参数管理模块;
[0015]进一步地,每个虚拟机的自旋锁平均等待时长等于监控模块提取的每个虚拟机内核中自旋锁函数运行时占用的CPU周期除以自旋锁函数的调用次数。
[0016]步骤2、PLE参数管理模块负责更新和保存所有虚拟机的PLE参数,并负责向PLE管理模块提供所有虚拟机的PLE参数;[0017]进一步地,PLE参数管理模块在虚拟器被创建时新建与该虚拟机对应的参数文件;虚拟机被销毁时,删除该虚拟机在PLE参数管理模块中对应的参数文件;
[0018]进一步地,PLE参数包括PLE_GAP和PLE_WIND0W,PLE_WIND0ff根据监控模块的监控结果做动态调整,PLE_GAP采用硬件PLE的默认值;
[0019]进一步地,PLE参数管理模块将每个虚拟机的自旋锁平均等待时长作为PLE_WINDOW 的值;
[0020]进一步地,PLE参数管理模块将PLE参数写入参数文件。
[0021]步骤3、PLE管理模块负责设置所有虚拟机在硬件PLE中的PLE参数,以及向协同调度模块发送调度信息;
[0022]进一步地,当虚拟机的VCPU被调度进物理CPU时,从PLE参数管理模块读取与虚拟机对应的PLE参数,并写入硬件PLE的VCPU控制结构中;当VCPU触发PLE时,向协同调度模块发送调度信息,调度信息包含触发PLE的VCPU的信息。
[0023]步骤4、协同调度模块根据调度信息,针对触发PLE的VCPU所在的虚拟机进行协同调度;
[0024]进一步地,协同调度模块收到调度信息后,对触发PLE的VCPU所在的虚拟机中所有VCPU进行以下操作:判断VCPU是否运行于内核模式,如果是,则将VCPU插入至物理CPU运行队列的队首;如果否,则不需要改变VCPU在物理CPU运行队列中的位置。
[0025]本发明的基于动态PLE技术的虚拟机协同调度方法具有以下有益的技术效果:
[0026](I)可对所有虚拟机的运行状态进行监控,根据当前每个虚拟机各自的运行状态设置虚拟机控制结构中的PLE参数,确保对每个虚拟机的PLE参数进行动态调整,增强PLE带来的性能提升。
[0027](2)基于PLE技术检测到的忙等VCPU,将虚拟机中运行于内核模式的VCPU组进行协同调度,降低LHP的发生,有效减少VCPU浪费在忙等上的时间,由此提升虚拟机的性能。
[0028](3)相比于以往的解决方法,本发明结合了动态PLE技术和虚拟机协同调度方法,通过对虚拟机进行监测,动态调整PLE参数,使得PLE更适应于每个虚拟机。同时通过虚拟机协同调度,有效减少LHP的发生,从整体上提升虚拟机的性能。
[0029](4)本发明并没有对虚拟机的调度时间片进行修改,也没有增加VCPU的上下文切换频率或者引入其它的VCPU竞争机制,在有效解决虚拟环境下自旋锁问题的同时,对于系统原本功能的影响较小。
[0030]以下将结合附图对本发明的构思、具体结构及产生的技术效果作进一步说明,以充分地了解本发明的目的、特征和效果。
【专利附图】

【附图说明】
[0031]图1是采用传统PLE技术的虚拟机调度示意图;
[0032]图2是采用本发明的基于动态PLE技术的虚拟机协同调度方法的示意图;
[0033]图3是本发明基于KVM时的PLE参数管理模块示意图;
[0034]图4是本发明中虚拟机协同调度模块示意图。
【具体实施方式】[0035]以下针对基于Linux内核的虚拟机软件KVM来介绍本发明的具体实施例。
[0036]如图2所示,相比于传统的虚拟机协同调度方法,当前系统中针对每个虚拟机的情况对PLE参数进行动态调整,添加了监控模块、PLE参数管理模块、PLE管理模块和协同调度模块。监控模块对系统中现有的所有虚拟机的运行状态进行检测,获取虚拟机的内核函数调用次数与内核函数运行所占用的CPU周期。PLE参数管理模块用于对系统所有的虚拟机PLE参数进行管理,虚拟机创建时负责创建该虚拟机对应的proc文件,该文件用于记录根据监控模块的监控结果而优化的PLE参数;并在虚拟机销毁时删除对应的proc文件;同时需要向PLE管理模块提供所有虚拟机当前的PLE参数。PLE管理模块负责在虚拟机之间的VCPU进行切换时,根据从PLE参数管理模块获得被调度入物理CPU的VCPU对应虚拟机的PLE参数,并将该参数写入硬件PLE的控制结构中。协同调度模块基于PLE反馈的VCPU忙等信息,当VCPU触发PLE时,对VCPU所属虚拟机中可能持有自旋锁的一组VCPU进行协同调度。
[0037]本实施例中基于动态PLE技术的虚拟机协同调度方法包括以下步骤:
[0038]步骤1、监控模块负责周期性监控所有虚拟机的运行状态,提取每个虚拟机内核中自旋锁函数的调用次数以及自旋锁函数运行时占用的CPU周期,自旋锁函数运行时占用的CPU周期除以自旋锁函数的调用次数的值就是到每个虚拟机各自的自旋锁平均等待时长,将该监控获得的计算结果传入PLE参数管理模块,用于设置PLE参数。
[0039]步骤2、PLE参数管理模块,负责对所有虚拟机的PLE参数进行管理,并负责向PLE管理模块提供所有虚拟机的PLE参数。创建虚拟机时,在PLE参数管理模块中创建与虚拟机对应的参数文件,将优化后的PLE参数写入该参数文件;虚拟机销毁时删除该虚拟机在PLE参数管理模块中对应的参数文件。PLE参数管理模块将监控模块提供的每个虚拟机的自旋锁平均等待时长,作为其当前最优化的PLE_W0ND0W参数,而PLE_GAP采用硬件PLE的默认值。
[0040]步骤3、PLE管理模块,负责PLE参数的动态设置和向协同调度模块发送调度信息。当虚拟机的VCPU被调度进物理CPU时,利用PLE参数管理模块提供的接口,获取该虚拟机对应的PLE参数,写入硬件PLE的VCPU控制结构中,从而设置该虚拟机的PLE参数。当VCPU触发PLE时,负责向协同调度模块发送调度信息。
[0041]步骤4、协同调度模块,负责对虚拟机进行协同调度。当协同调度模块收到所述调度信息后,获取触发PLE的VCPU所在的虚拟机信息,对于该虚拟机中所有的VCPU进行以下操作:判断VCPU是否运行于内核模式,如果是,则将该VCPU插入至所属物理CPU运行队列的队首;如果否,则不需要改变该VCPU在物理CPU运行队列中的位置。
[0042]针对KVM的相关实现主要分为两部分,第一部分动态PLE技术步骤如下:
[0043]步骤1、利用Linux下的perf和trace_cmd工具对所有的虚拟机进行周期性监控。在每个监控周期结束时将每个虚拟机的监控结果写入每个虚拟机在PLE参数管理模块根目录下对应的proc文件。每个监控周期的流程如下:
[0044][0045]
【权利要求】
1.一种基于动态PLE技术的虚拟机协同调度方法,其特征在于,包括以下步骤: 步骤1、监控模块周期性监控所有虚拟机的运行状态,得到每个所述虚拟机的自旋锁平均等待时长并传入PLE参数管理模块; 步骤2、所述PLE参数管理模块负责更新和保存所有所述虚拟机的PLE参数,并负责向PLE管理模块提供所有所述虚拟机的所述PLE参数; 步骤3、所述PLE管理模块负责设置所有所述虚拟机在硬件PLE中的所述PLE参数,以及向协同调度模块发送调度信息; 步骤4、所述协同调度模块根据所述调度信息,针对触发PLE的VCPU所在的所述虚拟机进行协同调度。
2.如权利要求1所述的基于动态PLE技术的虚拟机协同调度方法,其特征在于,所述步骤I中,每个所述虚拟机的所述自旋锁平均等待时长等于所述监控模块提取的每个所述虚拟机内核中自旋锁函数运行时占用的CPU周期除以自旋锁函数的调用次数。
3.如权利要求2所述的基于动态PLE技术的虚拟机协同调度方法,其特征在于,所述步骤2中,所述PLE参数管理模块在所述虚拟器被创建时新建与所述虚拟机对应的参数文件;所述虚拟机被销毁时,删除所述虚拟机在所述PLE参数管理模块中对应的所述参数文件。
4.如权利要求3所述的基于动态PLE技术的虚拟机协同调度方法,其特征在于,所述步骤2中,所述PLE参数包括PLE_GAP和PLE_WINDOW,所述PLE_WINDOW根据所述监控模块的监控结果做动态调整,所述PLE_GAP采用所述硬件PLE的默认值。
5.如权利要求4所述的基于动态PLE技术的虚拟机协同调度方法,其特征在于,所述步骤2中,所述PLE参数管理模块将每个所述虚拟机的所述自旋锁平均等待时长作为所述PLE_WIND0ff 的值。
6.如权利要求5所述的基于动态PLE技术的虚拟机协同调度方法,其特征在于,所述步骤2中,所述PLE参数管理模块将所述PLE参数写入所述参数文件。
7.如权利要求1-6任一项所述的基于动态PLE技术的虚拟机协同调度方法,其特征在于,所述步骤3中,当所述虚拟机的所述VCPU被调度进物理CPU时,从所述PLE参数管理模块读取与所述虚拟机对应的所述PLE参数,并写入所述硬件PLE的VCPU控制结构中;当所述VCPU触发PLE时,向所述协同调度模块发送所述调度信息,所述调度信息包含触发PLE的所述VCPU的信息。
8.如权利要求7所述的基于动态PLE技术的虚拟机协同调度方法,其特征在于,所述步骤4中,所述协同调度模块收到所述调度信息后,对触发PLE的所述VCPU所在的所述虚拟机中所有所述VCPU进行以下操作:判断所述VCPU是否运行于内核模式,如果是,则将所述VCPU插入至所述物理CPU运行队列的队首;如果否,则不需要改变所述VCPU在所述物理CPU运行队列中的位置。
9.如权利要求8所述的基于动态PLE技术的虚拟机协同调度方法,其特征在于,所述方法所使用的虚拟机软件是基于Linux内核的虚拟机软件KVM。
10.如权利要求9所述的基于动态PLE技术的虚拟机协同调度方法,其特征在于,所述步骤3中,所述参数文件是位于系统/proc目录下的所述PLE参数管理模块根目录下的proc文件。
【文档编号】G06F9/48GK103744728SQ201410029589
【公开日】2014年4月23日 申请日期:2014年1月22日 优先权日:2014年1月22日
【发明者】管海兵, 马汝辉, 李健, 黄彬弟, 周凡夫 申请人:上海交通大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1