Document
拖动滑块完成拼图
首页 专利交易 科技果 科技人才 科技服务 国际服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

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

买专利卖专利找龙图腾,真高效! 查专利查商标用IPTOP,全免费!专利年费监控用IP管家,真方便!

申请/专利权人:上海交通大学

摘要:本发明公开了一种基于动态PLE技术的虚拟机协同调度方法。通过监控所有虚拟机的运行状态,获取每个虚拟机在等待自旋锁时所需的平均等待时长,以此对PLE参数进行动态调整,以使其更适应当前的系统运行状态。同时基于动态PLE技术,在VCPU触发PLE时,将该VCPU所属虚拟机中运行于内核模式的所有VCPU提升至各自物理CPU运行队列的队首,使得在下个调度周期这组VCPU可以同时运行。本发明将动态PLE技术和虚拟机协同调度相结合,有效解决虚拟机中VCPU之间因自旋锁持有者被抢占而导致的忙等问题,有效提升了虚拟机与系统的整体性能。

主权项:一种基于动态PLE技术的虚拟机协同调度方法,其特征在于,包括以下步骤:步骤1、监控模块周期性监控所有虚拟机的运行状态,得到每个所述虚拟机的自旋锁平均等待时长并传入PLE参数管理模块;步骤2、所述PLE参数管理模块负责更新和保存所有所述虚拟机的PLE参数,并负责向PLE管理模块提供所有所述虚拟机的所述PLE参数;步骤3、所述PLE管理模块负责设置所有所述虚拟机在硬件PLE中的所述PLE参数,以及向协同调度模块发送调度信息;步骤4、所述协同调度模块根据所述调度信息,针对触发PLE的VCPU所在的所述虚拟机进行协同调度;所述步骤3中,当所述虚拟机的所述VCPU被调度进物理CPU时,从所述PLE参数管理模块读取与所述虚拟机对应的所述PLE参数,并写入所述硬件PLE的VCPU控制结构中;当所述VCPU触发PLE时,向所述协同调度模块发送所述调度信息,所述调度信息包含触发PLE的所述VCPU的信息。

全文数据:一种基于动态PLE技术的虚拟机协同调度方法技术领域[0001]本发明涉及计算机虚拟机性能监控和虚拟机调度领域,尤其涉及一种基于动态PLE技术的虚拟机协同调度方法。背景技术[0002]虚拟化技术抽象计算机的物理资源,向上呈现虚拟硬件接口,使得多个操作系统能够在同一物理设备上运行。利用虚拟化技术,将原本运行于多台物理设备的服务整合到同一台物理服务器上,提高物理资源利用率的同时减少了企业在IT基础设施上的管理维护成本。另一方面通过虚拟化技术对物理资源的管理,能够对资源进行动态配置,对于各种业务适应性更强。同时虚拟化技术能够对虚拟服务器进行监控和隔离,确保虚拟服务器的正常运行以及虚拟服务器之间能够相互独立。此外,虚拟服务器能够更快捷的进行复制转移,提高可用性以及灾难恢复速度。因此,虚拟化技术成为云计算以及数据中心不可或缺的一部分。[0003]虚拟机监控器VirtualMachineMonitor,VMM是目前主流的虚拟化技术,介于硬件与传统操作系统之间,负责管理计算机的物理资源,包括内存、CPU以及IO设备等硬件资源,并虚拟出硬件接口供上层使用,使得多个操作系统能够在同一个物理设备上运行。[0004]同时为了能够更好地提升虚拟化服务器的性能,硬件上也添加了对虚拟化的支持。Intel的VT系列虚拟化技术,提供了对虚拟化技术的支持,使得虚拟机的性能得到显著提升。[0005]虚拟机监控器的引入,使得很多在传统操作系统中已经解决的问题出现了新的变化,同时也使得传统操作系统中现有的一些机制出现新的问题。在传统的操作系统中自旋锁Spin-Lock用于解决CPU之间对于共享资源的竞争。当多个CPU需要获取同一个自旋锁时,只有一个CHJ可以持有该锁,其它的CPU则一直循环检测自旋锁是否被释放。传统的操作系统中持有自旋锁的CHJ在非常短的时间内会将锁释放,这样等待自旋锁的CPU循环检测的时间并不会很长。但在虚拟化环境中,虚拟机中持有自旋锁的VCPU可能被虚拟机监控器调度出物理CPU,使得该虚拟机中等待该自旋锁的其它VCPU-直处于循环检测自旋锁的状态,该问题被称为LHPLockHolderPreemption,自旋锁持有者被抢占)问题,会导致虚拟机性能的下降。[0006]为了解决上述LHP问题,现有的技术方案包括虚拟机中VCPU的协同调度和VCPU的忙等检测。虚拟机中VCPU的协同调度指的是将虚拟机中的一组VCPlX可以是虚拟机中全部VCPU也可以是部分VCPU同时调度进物理CPU,这样可以有效减少LHP现象的出现,但是这种方法会造成CPU资源的碎片化以及系统延迟的不确定性增加等问题。VCPU的忙等检测,指的是在检测到VCPU忙等时将VCPU调度出物理CPU,主要分为基于虚拟机的VCPU忙等检测和基于硬件支持的VCHJ忙等检测。基于虚拟机的VCPU忙等检测需要对虚拟机操作系统进行修改,在虚拟机中出现VCPU忙等时通知VMM,这种方法因为需要修改虚拟机操作系统,适用范围受限制。基于硬件支持的VCPU忙等检测需要设置虚拟机控制结构中的忙等检测参数,这些参数在计算机处于不同负载下的最优值是需要变化的。将虚拟机中VCPU的协同调度与参数动态调整的VCPU忙等检测相结合可以降低协同调度带来的负面影响,同时提高虚拟机的性能。[0007]当前基于硬件支持的VCPU忙等检测主要是PLEPauseLoopExit技术,其中忙等检测参数是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]进一步地,每个虚拟机的自旋锁平均等待时长等于监控模块提取的每个虚拟机内核中自旋锁函数运行时占用的CHJ周期除以自旋锁函数的调用次数。[0016]步骤2、PLE参数管理模块负责更新和保存所有虚拟机的PLE参数,并负责向PLE管理模块提供所有虚拟机的PLE参数;[0017]进一步地,PLE参数管理模块在虚拟器被创建时新建与该虚拟机对应的参数文件;虚拟机被销毁时,删除该虚拟机在PLE参数管理模块中对应的参数文件;[0018]进一步地,PLE参数包括PLE_GAP和PLE_WIND0W,PLE_WIND0W根据监控模块的监控结果做动态调整,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]1可对所有虚拟机的运行状态进行监控,根据当前每个虚拟机各自的运行状态设置虚拟机控制结构中的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]GetAlltheVMs;foreachVM:$PID=VMrSpid;sshfs-oaliow_other,direct_ioVM^IP:tmpguestmount$PIDperf'k補--guest--gu:estmoiint=tmpgue袖naoiintr.ec.ord.-a..-.〇r〇〇tp.erf,tlatatrace-cmdrecord-pfunction4"_raw_spin_lock"-P$P1Dprofile10second;extractprofiledataandcalculateeachVM?sPLEparameter;[0045]foreachVM:writeVM'sPLEparameterintoitsprocfile;[0046]步骤2、将监控结果传入PLE参数管理模块,在PLE参数管理模块中对虚拟机的PLE参数进行管理。PLE参数管理模块中,存储每个虚拟机的PLE参数并向上层提供PLE参数写入接口,向下提供每个虚拟机PLE参数的查询接口。如图3所示,系统启动,在KVM启动初始化时,仓Il建PLE参数管理模块在proc目录下的根目录,并对PLE参数进行初始化。在创建虚拟机时,根据虚拟机的Pid创建proc文件,初始化虚拟机的PLE参数,并在虚拟机销毁时将相应的proc文件删除。该模块实现时通过Hash映射的方式对虚拟机的PLE参数进行管理,便于虚拟机PLE参数的新建、删除和查询。[0047]PLE参数管理模块提供的接口如下,在KVM中的kvm_init、kvm_create_vm、kvm_destroy_vm和kvm_exit中需要调用相应的接口:[0048]voidproc_mykpm_createintnr;[0049]voidproc_mykpm_destroyintnr;[0050]intproc_mykpm_getintnr;[0051]voidproc_mykpm_initvoid;[0052]voidproc_mykpm_deinitvoid;[0053]虚拟机监控模块读写PLE参数管理模块对应虚拟机PLE参数的具体实现:[0054]intprDC_mykpm_read_infoGhar^page,char^^start,〇ff_toffset,inteount,int^eof,void^data{intnr=intdata;intindex=find_by_nrnr;intlen;Ien二sprintfpage,"%d'mykpm_procs_pleLindexJ;returnlen;}intproc_mykpm_write_infostructfile^file.constchar^buffer,unsignedlongcount,void^data{intnr=intdata;intindex=find_by_m'nr;charchar_ple[40];[0055]longmy_ple=4096;copy_from_userchar_ple,buffer,count;kstrtolchar_ple,10,&iny_ple;mykpm_pr〇i.sple[index]=intmy_ple;returncount;}[0056]步骤3、当VCPU被调度入物理CPU时,查询该VCPU所属虚拟机的PLE参数,写入虚拟机的VMCS中,从而根据监控到的虚拟机运行状态设置虚拟机的PLE参数。在vcpu_put中需要调用PLE参数管理模块的intproc_mykpm_getintnr接口,并通过vmcs_write写入PLE参数。查询虚拟机的PLE参数需要虚拟机的pid,因此需要修改structkvm,添加nr变量用于在虚拟机新建时记录虚拟机的pid,并在之后的vcpu_put中用于查询虚拟机的PLE参数。structkvm{intnr;};[0057]voidvcpu_putstructkvm_vcpu*vtpu{vmcs_writePLE_WINDOVV,proc_mykpm_getvcpu-kvm-nr;}[0058]第二部分虚拟机的VCPU协同调度,如图4所示,具体步骤如下:[0059]步骤1、VCPU触发PLE时,PLE管理模块通知协同调度模块有VCPU触发PLE,并传入触发卩1^的\^11]信息^1^管理模块通知协同调度模块的接口为1^11116_。311868奸11^1^111_vcpu*me,并进一步i周用kvm-vcpu-on-spinstructkvm-vcpu*me,在i亥函数中完成处理逻辑。[0060]步骤2、修改Iinux代码中structcfs_rq,添加structsched_entity*ple,用于记录虚拟机中的^^?1]信息。同时修改口;[01^_1161七_61^;^7函数并新建修改8七1'11^331161_entity^ple的接口Dstructcfs_rqIstructsched_entity*ple;};static..structsdaed.entity.*piek'next.entitystructc.fsrq*efsrq{ifcfs_rq-p!e&&vvafeup_preempt_entitycfs_rq-ple,leftple;}externvoidset_task_cfs_rq_plestructtask_struct^task;voidset_task_cfs_rq_plestructtask_struct^task{structcfs_rq^cfs_rq=task_cfs_rqtask;cfsrq-ple=&task-se;}:[0062]EXP0RT_SYMB0L_GPLset_task_cfs_rq_ple;[0063]步骤3、由传入的VCHJ信息获取VCPU所属的虚拟机信息,对于该虚拟机中所有的VCPU进行以下操作:如果VCPU是可运行的且处于内核模式,则将该VCPU插入至所属物理CPU运行队列的队首;如果否,则使用默认调度器对该VCPU进行调度。经过以上操作,可能持有自旋锁的这一组VCPU将在下一个调度周期被同时调度至物理CPU。[0064]voidkvm_vcpu_on_spinstructkvm_vcpu*me{structkvm*kvm=me-kvm;structkvm_vGpu^YCpu;inti;kvm_for_each_yGpui?Vepu9kvm{[0065]task=get_pid_taskvcpu-pid,P1DTYPE_P1D;iftask-on_rq&&in_kernel_modetask-prio}set_task_cfs_rq_pIetask;}}}[0066]以上详细描述了本发明的较佳具体实施例,应用本发现的设计理念也同样可以在其他虚拟机软件如Xen上实现本发明的目的。应当理解,本领域的普通技术无需创造性劳动就可以根据本发明的构思作出诸多修改和变化。因此,凡本技术领域中技术人员依本发明的构思在现有技术的基础上通过逻辑分析、推理或者有限的实验可以得到的技术方案,皆应在由权利要求书所确定的保护范围内。

权利要求:1.一种基于动态PLE技术的虚拟机协同调度方法,其特征在于,包括以下步骤:步骤1、监控模块周期性监控所有虚拟机的运行状态,得到每个所述虚拟机的自旋锁平均等待时长并传入PLE参数管理模块;步骤2、所述PLE参数管理模块负责更新和保存所有所述虚拟机的PLE参数,并负责向PLE管理模块提供所有所述虚拟机的所述PLE参数;步骤3、所述PLE管理模块负责设置所有所述虚拟机在硬件PLE中的所述PLE参数,以及向协同调度模块发送调度信息;步骤4、所述协同调度模块根据所述调度信息,针对触发PLE的VCPU所在的所述虚拟机进行协同调度;所述步骤3中,当所述虚拟机的所述VCPU被调度进物理CPU时,从所述PLE参数管理模块读取与所述虚拟机对应的所述PLE参数,并写入所述硬件PLE的VCHJ控制结构中;当所述VCPU触发PLE时,向所述协同调度模块发送所述调度信息,所述调度信息包含触发PLE的所述VCPU的信息。2.如权利要求1所述的基于动态PLE技术的虚拟机协同调度方法,其特征在于,所述步骤1中,每个所述虚拟机的所述自旋锁平均等待时长等于所述监控模块提取的每个所述虚拟机内核中自旋锁函数运行时占用的CHJ周期除以自旋锁函数的调用次数。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_WINDOW的值。6.如权利要求5所述的基于动态PLE技术的虚拟机协同调度方法,其特征在于,所述步骤2中,所述PLE参数管理模块将所述PLE参数写入所述参数文件。7.如权利要求1所述的基于动态PLE技术的虚拟机协同调度方法,其特征在于,所述步骤4中,所述协同调度模块收到所述调度信息后,对触发PLE的所述VCPU所在的所述虚拟机中所有所述VCPU进行以下操作:判断所述VCPU是否运行于内核模式,如果是,则将所述VCPU插入至所述物理CPU运行队列的队首;如果否,则不需要改变所述VCPU在所述物理CPU运行队列中的位置。8.如权利要求7所述的基于动态PLE技术的虚拟机协同调度方法,其特征在于,所述方法所使用的虚拟机软件是基于Linux内核的虚拟机软件KVM。9.如权利要求8所述的基于动态PLE技术的虚拟机协同调度方法,其特征在于,所述步骤3中,所述参数文件是位于系统proc目录下的所述PLE参数管理模块根目录下的proc文件。

百度查询: 上海交通大学 一种基于动态PLE技术的虚拟机协同调度方法

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。