一种云平台上高性能并行应用的调度方法及系统的制作方法

文档序号:10593906阅读:171来源:国知局
一种云平台上高性能并行应用的调度方法及系统的制作方法
【专利摘要】本发明公开了一种云平台上高性能并行应用的调度方法及系统;其方法为:设置虚拟机类型;采集网络数据包信息和自旋锁信息,并发送给宿主机;宿主机根据Hypercall调用号获取信息处理函数,获取自旋锁计数和网络数据包计数,并根据自旋锁计数单节点虚拟机同步需求,根据网络数据包计数判断跨节点虚拟机同步请求;根据虚拟机类型、网络数据包计数、自旋锁计数以及同步请求信号,确定vCPU队列中下一次被调入运行的vCPU;其系统包括虚拟机信息采集模块、信息处理模块、虚拟CPU动态分配模块、虚拟CPU调度模块;本发明通过对高性能应用的虚拟机与普通应用的虚拟机进行区分,并让所有相关vCPU同时运行,解决了高性能计算在云平台上的并行应用的同步延迟频繁问题。
【专利说明】
一种云平台上高性能并行应用的调度方法及系统
技术领域
[0001]本发明属于云平台资源管理与调度技术领域,更具体地,涉及一种云平台上高性能并行应用的调度方法及系统。
【背景技术】
[0002]云计算提高了底层硬件资源利用率和计算成本,已经成为传统集群运行高性能计算的一种替代方案。但是在多虚拟机环境下,虚拟化技术使得guest OS(客户机操作系统,guest Operat1n System)发生自旋锁抢占问题;在多虚拟机争用硬件资源的虚拟化环境中,持有自旋锁的vCPU(虚拟处理器,virtual Central Processing Unit)可能被其他虚拟机的vCPU抢占CPU资源,从而使等待自旋锁释放的相关vCPU处于长时间的忙等状态,而影响系统性能。
[0003]在云平台运行高性能并行应用,需要多节点的多虚拟机资源;但是每个节点上虚拟机的调度都是相互独立的;这使得一个虚拟机上的计算任务不可感知另一个虚拟机上相关计算任务的同步请求,从而导致虚拟机之间的同步延迟,形成“木桶效应”。
[0004]现有技术中,主要有两种vCPU调度方法应对高性能应用在多节点虚拟机上运行时的同步问题;其一是Co-scheduling(协同调度,Coperat1nScheduling),通过强制一个虚拟机的多个vCPU同时运行、同时终止,解决自旋锁抢占导致的CPU时间片浪费问题,提高同步率;但是强迫vCPU同步带来很多弊端,比如CPU碎片、优先级反置、缓存命中率下降等;或者针对自旋锁等待时间超出正常范围的虚拟机进行vCPU同步操作,减少vCPU同步带来的弊端;或者根据vCPU运行时间的相对偏差,抑制运行较快的vCPU,加速运行较慢的vCPU ;但是这些Co-schedul ing策略主要针对SMP (对称多处理机,Symmetri c Mult1-Process ing)系统上单VM的调度问题,没有考虑跨节点的VM(虚拟机,VirtualMachine)同步问题。
[0005]其二是为动态时间片的调度方法,缩短时间片会减少同步等待时间,但是可能会因为频繁的进程上下文切换开销而得不偿失;延长时间片,切换开销减少,但同步等待时间会变长;该方法很难把握时间片的最佳长度;并且时间片的概念只适用于XEN的虚拟化环境,不适合基于KVM(Kernel_based Virtual Machine)的底层是红黑树结构的云平台。

【发明内容】

[0006]针对现有技术的以上缺陷或改进需求,本发明提供了一种云平台上高性能并行应用的调度方法及系统,其目的在于通过两阶段同步感知的手段,解决跨节点的虚拟机的同步请求响应延迟频繁的问题。
[0007]为实现上述目的,按照本发明的一个方面,提供了一种云平台上高性能并行应用的调度方法,具体如下:
[0008](I)在宿主机上创建虚拟机,并根据虚拟机上运行的应用类型将虚拟机类型设置为尚性能应用虚拟机或者非尚性能应用虚拟机;
[0009](2)当高性能应用运行于云平台的多个虚拟机上,虚拟机内核自动采集网络数据包信息和自旋锁信息,并发送给宿主机;
[0010](3)宿主机根据Hypercall调用号获取相应的信息处理函数,并进行信息采集,获取自旋锁计数和接收的网络数据包计数;
[0011]并根据自旋锁计数单节点虚拟机同步需求,根据网络数据包计数判断跨节点虚拟机同步请求;
[0012](4)根据虚拟机类型、网络数据包计数、自旋锁计数以及同步请求信号,确定vCPU队列中下一次被调入运行的vCPU;
[0013]在下一个调度周期内优先调度有同步请求信号的vCPU,然后是网络数据包计数最大的vCPU,其次是自旋锁计数最大的vCPU,最后是KVM系统完全公平性调度器选择的vCPU。
[0014]优选地,上述云平台上高性能并行应用的调度方法,其步骤(3)包括以下子步骤:
[0015](3-1)虚拟机信息处理模块根据最近三次的接收数据包计数平均值判断跨节点虚拟机同步请求;并把该参数作为虚拟机调度的关键参数;
[0016](3-2)虚拟机信息处理模块根据最新的自旋锁计数值判断单节点虚拟机同步需求;并把该自旋锁计数作为虚拟机调度依据。
[0017]优选地,上述云平台上高性能并行应用的调度方法,其步骤(4)包括以下子步骤:
[0018](4-1)判断当前虚拟机类型是否为高性能应用虚拟机,若是则进入步骤(4-2),若否,则进入步骤(4-5);
[0019](4-2)判断数据包计数值是否超过第一阈值,若是,则表明虚拟机之间的高性能应用有同步需求,进入步骤(4-4);若否,则进入步骤(4-5);
[0020]第一阈值根据数据包传输的频繁程度以及实验数据调整;对于耦合性高的高性能应用,数据通信密集,数据包传输频繁;
[0021 ] (4-3)判断vCPU的自旋锁计数值是否超过第二阈值;若是,则表明虚拟机内部vCPU需要同步,进入步骤(4-4);若否,则进入步骤(4-5);
[0022]第二阈值根据是否发生锁持有者抢占以及实验数据调整;当发生LHP(锁持有者抢占,LockHolder Preempt1n),虚拟机自旋锁时间变长;
[0023](4-4)由产生同步需求的vCPU向所有包含相关vCPU的处理器发送虚拟机同步中断信号,重新触发虚拟机调度函数,将相关vCPU调入CPU上执行;
[0024](4-5)使用KVM自带的完全公平性调度机制选择下一个调入的vCPU。
[0025]为实现本发明目的,按照本发明的另一方面,提供了一种云平台上高性能并行应用的调度系统,包括虚拟机信息采集模块、信息处理模块、虚拟CPU动态分配模块和虚拟CPU调度模块;
[0026]其中,虚拟机信息采集模块用于采集虚拟机相关信息,包括虚拟机的网络数据包信息和自旋锁信息;
[0027]信息处理模块用于根据上述虚拟机相关信息判断虚拟机上是否有高性能并行应用的同步请求;
[0028]虚拟CPU动态分配模块用于根据调度程序需求,将同一个VM上相关的虚拟CPU动态地部署在不同的物理(PU上;
[0029]虚拟机调度模块用于根据标志位判断相关虚拟机上运行的是否为高性能应用;并用于根据自旋锁信息、数据包信息、标志位以及同步标志信息动态调整虚拟机调度机制。
[0030]总体而言,通过本发明所构思的以上技术方案与现有技术相比,能够取得下列有益效果;
[0031](I)本发明提供的云平台上高性能并行应用的调度系统,与现有的KVM默认虚拟机调度策略CFS相比,由于采用了虚拟机信息采集模块,通过HypercalI技术和KVM的虚拟机信息读取API将虚拟机的数据包信息和自旋锁信息传递给hypervisor,丰富了虚拟机调度依据,实现了跨节点和单节点虚拟机同步请求的有效判断,加速高性能计算应用的运行;
[0032](2)本发明提供的云平台上高性能并行应用的调度系统,由于采用了虚拟CPU动态分配模块,避免了 CFS调度中的相关vCPU被随机分配到同一个CPU上的现象,提高了 CPU有效利用率;
[0033](3)本发明提供的云平台上高性能并行应用的调度方法,在系统运行时,不断采集网络数据包信息和自旋锁信息,以此来判断当前高性能计算虚拟机是否有同步需求,以及该同步需求是跨节点的虚拟机之间的还是单节点虚拟机引起的;
[0034](4)本发明提供的云平台上高性能并行应用的调度方法,通过对高性能应用的虚拟机与普通应用的虚拟机进行区分;并且,在系统运行时,需要同步操作的VM的第一个被调度的vCPU使用IPI操作触发CPU中断,让所有相关vCPU同时运行,从而解决高性能计算在云平台上运行时同步延迟频繁的问题;
[0035](5)本发明提供的云平台上高性能并行应用的调度系统及方法,由于工作在内核态环境,对上层用户完全透明,不需要对用户态程序做额外的修改和特殊的设置,因而具有很强的通用性。
【附图说明】
[0036]图1是KVM虚拟机通用架构图;
[0037]图2为在云平台上运行高性能应用时的跨节点同步场景图;
[0038]图3为本发明实施例提供的云平台上高性能并行应用的调度系统的模块框图;
[0039]图4为本发明实施例提供的云平台上高性能并行应用的调度方法的流程图。
【具体实施方式】
[0040]为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
[0041 ]如图1所示,是KVM虚拟机通用架构图,KVM虚拟机构建的云平台通用架构包括物理硬件设备、虚拟机管理器,虚拟机操作系统、具体的应用等几个层次;物理硬件设备包括CPU、网络、内存、I/O等资源,虚拟机管理器Hypervisor主要涉及指KVM虚拟化工具,虚拟机操作系统GuestOS主要是开源的Linux系统;本发明的主要作用对象在于Hypervisor和Guest OS0
[0042]图2所示,是实施例中的运行场景;节点I上的VMl和节点2上的VM2运行同一个高性能应用的两个子任务,分别持有两个vCPU;在一个迭代周期完成时需要MPI_Barrier进行数据同步操作;由于VMI和VM2相互不知道对方的执行进度,可能会出现VMI的vCPUO比VM2上vCPUl快的现象,因此在一个迭代周期内虚拟机之间会产生同步等待,即VMl需要等待VM2的相关数据,从而使得整个程序运行时间变长;在整个程序运行过程中产生同步等待的累积时间将不可忽略,由此降低了计算性能。
[0043]如图3所示,是本发明实施例提供的平台上高性能并行应用的调度系统的模块框图;该系统包括虚拟机信息采集模块、信息处理模块、虚拟CPU动态分配模块、虚拟CPU调度丰旲块;
[0044]虚拟机信息采集模块用于采集虚拟机相关信息,包括虚拟机的网络数据包信息和自旋锁信息;
[0045]实施例中,虚拟机信息采集模块在对应用程序运行时虚拟机的自旋锁信息和网络数据包信息进行采样的同时,采用虚拟机的Hypercal I机制和KVM相关虚拟机内存读取API把VM信息传递给Host;
[0046]在单个物理机上虚拟机over-committed的环境下,采集到的虚拟机自旋锁信息可以用来判断单个虚拟机上不同vCPU的自旋等待状况;在多物理机的云环境下,一段固定时间内虚拟机接收的网络数据包的数量反映了跨界点虚拟机之间的同步请求状况;虚拟机调度模块根据上述两点,通过信息处理模块得到的参数来选择相应的虚拟机调度机制;
[0047]信息处理模块用于根据上述虚拟机相关信息判断虚拟机上是否有高性能并行应用的同步请求;
[0048]虚拟CPU动态分配模块用于根据虚拟机的vCPU数量和物理机上CPU的数量,动态的分配vCPU在物理CPU上的位置;
[0049]例如,一个物理机有16个CPU,上面有一个虚拟机VMl,VM1有8个vCPU;若vCPUO和VCPUl同时分配在CPUO上,那么当vCPUO和VCPUl有同步需求时,会因为分布在同一个CPU上而不能同时运行,从而降低计算性能;而VCPU动态分配模块针对这个问题,在给每个虚拟机的VCPU分配物理CPU时会去检查每个CPU上是否已经有该虚拟机上其他的VCPU在运行队列中,如果有,就避免两个VCPU同时被分配在一个CPU上;
[0050]虚拟机调度模块TPSched用于根据标志位判断相关虚拟机上运行的是否为高性能应用;并根据标志位、自旋锁信息、数据包信息以及同步标志信息判断高性能计算的同步请求,以确定是否要通过Linux内核的CPU中断函数抢占正在运行的进程,触发不同CPU上所有相关vCPU的同时调度;动态调整虚拟机调度机制,从而解决同步问题;
[0051]实施例提供的这种平台上高性能并行应用的调度系统,采用虚拟机信息采集模块,通过Hypercal I技术和KVM的虚拟机信息读取API将虚拟机的数据包信息和自旋锁信息传递给hypervisor,从而丰富了虚拟机调度依据,实现了跨节点和单节点虚拟机同步请求的有效判断,加速高性能计算应用的运行;采用了虚拟CHJ动态分配模块,通过vCPU的CPU掩码检测,避免了 CFS调度中的相关vCPU被随机分配到同一个CPU上的现象,提高了 CPU有效利用率。
[0052]如图4所示,是实施例提供的云平台上高性能并行应用的调度方法的流程图,该方法具体如下:
[0053](I)在宿主机上创建一台虚拟机,根据需要设置虚拟机类型为高性能应用虚拟机或者非尚性能应用虚拟机;
[0054](2)当高性能应用运行于云平台的多个虚拟机上,虚拟机内核自动采集网络数据包信息和自旋锁信息,通过Hyperca11传送给宿主机;
[0055](3)宿主机根据Hypercall调用号找到相应的信息处理函数,在虚拟机内采集的网络数据包信息和自旋锁信息经过处理,得到两个参数:自旋锁计数和接收的网络数据包计数;然后通过信息处理模块将这两个参数传递给虚拟机调度模块;
[0056](4)虚拟机调度模块根据虚拟机类型、网络数据包计数、自旋锁计数以及同步请求信号确定下一次在vCPU队列中的哪一个vCPU被调入运行;一次调度决策过程结束。
[0057]实施例中,步骤(3)包括以下子步骤:
[0058](3-1)虚拟机信息处理模块取最近三次的接收数据包计数平均值来判断跨节点虚拟机同步请求,并把该参数做为虚拟机调度的关键参数;
[0059](3-2)虚拟机信息处理模块根据最新的自旋锁计数值判断单节点虚拟机同步需求,并把自旋锁计数值做为一个虚拟机调度依据。
[0060]实施例中,步骤(4)包括以下子步骤:
[0061](4-1)判断当前虚拟机类型是否为高性能应用虚拟机,若是则进入步骤(4-2),若否,则进入步骤(4-5);
[0062](4-2)判断数据包计数值是否超过第一阈值;若是,则表明虚拟机之间的高性能应用有同步需求,进入步骤(4-4);若否,则进入步骤(4-5);
[0063]实施例中,第一阈值设为10Kpackets/s;
[0064](4-3)判断vCPl^自旋锁计数值是否超过第二阈值;若是,则表明虚拟机内部vCPU需要同步,进入步骤(4-4);若否,则进入步骤(4-5);
[0065]实施例中,第二阈值设为214个时钟周期;
[ΟΟ??] (4-4)由产生同步需求的vCPU向所有包含相关vCPU的处理器发送虚拟机同步中断信号,重新触发虚拟机调度函数,将相关vCPU调入CPU上执行;
[0067](4-5)使用KVM自带的完全公平性调度机制选择下一个调入的vCPU。
[0068]实施例提供的这种云平台上高性能并行应用的调度方法,其步骤(I)中,系统区分了高性能应用的虚拟机和普通应用的虚拟机,并对高性能计算虚拟机做了特殊信息处理,从而解决高性能计算的在云平台上运行时同步延迟频繁的问题;
[0069]其步骤(3)、(4)中,在系统运行时不断采集网络数据包信息和自旋锁信息,以此判断当前高性能计算虚拟机是否有同步需求,并判断该同步需求是跨节点的虚拟机之间的需求,还是单节点虚拟机引起的;
[0070]其步骤(4-4)中,在系统运行时,需要同步操作的VM的第一个被调度的vCHJ使用IPI操作出发(PU中断,让所有相关VCPU同时运行,缓解了同步延迟问题;可以在内核态对用户程序做特殊调度处理,而对上层用户态完全透明,有很强的通用性。
[0071]本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
【主权项】
1.一种云平台上高性能并行应用的调度方法,其特征在于,包括如下步骤: (1)在宿主机上创建虚拟机,并根据虚拟机上运行的应用类型将虚拟机类型设为高性能应用虚拟机或者非高性能应用虚拟机; (2)当高性能应用运行于云平台的多个虚拟机上,虚拟机内核自动采集网络数据包信息和自旋锁信息,并发送给宿主机; (3)宿主机根据Hypercall调用号获取相应的信息处理函数;并进行信息采集,获取自旋锁计数和网络数据包计数; 并根据自旋锁计数单节点虚拟机同步需求,根据网络数据包计数判断跨节点虚拟机同步请求; (4)根据所述虚拟机类型、网络数据包计数、自旋锁计数以及同步请求信号,确定vCPU队列中下一次被调入运行的vCPU。2.如权利要求1所述的调度方法,其特征在于,所述步骤(3)包括以下子步骤: (3-1)虚拟机信息处理模块根据最近三次接收的网络数据包计数的平均值判断跨节点虚拟机同步请求; (3-2)虚拟机信息处理模块根据最新的自旋锁计数值判断单节点虚拟机同步需求。3.如权利要求2所述的调度方法,其特征在于,所述步骤(4)包括以下子步骤: (4-1)判断当前虚拟机类型是否为高性能应用虚拟机,若是,则进入步骤(4-2),若否,则进入步骤(4-5); (4-2)判断数据包计数值是否超过第一阈值,若是,则进入步骤(4-4);若否,则进入步骤(4-5); (4-3)判断vCPU的自旋锁计数值是否超过第二阈值,若是,则表进入步骤(4-4);若否,则进入步骤(4-5); (4-4)由产生同步需求的vCHJ向所有包含相关vCHJ的处理器发送虚拟机同步中断信号,重新触发虚拟机调度函数,将相关vCPU调入CPU上执行; (4-5)采用KVM自带的完全公平性调度机制选择下一个调入的vCRJ。4.一种云平台上高性能并行应用的调度系统,其特征在于,包括虚拟机信息采集模块、信息处理模块、虚拟CPU动态分配模块和虚拟CPU调度模块; 所述虚拟机信息采集模块用于采集虚拟机相关信息,包括虚拟机的网络数据包信息和自旋锁信息; 所述信息处理模块用于根据所述虚拟机相关信息判断虚拟机上是否有高性能并行应用的同步请求; 所述虚拟CPU动态分配模块用于根据调度程序需求,将同一个VM上相关的虚拟CPU动态地部署在不同的物理(PU上; 所述虚拟机调度模块用于根据标志位判断相关虚拟机上运行的是否为高性能应用;并用于根据自旋锁信息、网络数据包信息、标志位以及同步标志信息动态调整虚拟机调度机制。
【文档编号】G06F9/455GK105955796SQ201610256113
【公开日】2016年9月21日
【申请日】2016年4月22日
【发明人】王多强, 戴伟, 吴松, 金海
【申请人】华中科技大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1