发明内容
基于此,有必要针对上述技术问题,提供一种能够有效提升云服务器中虚拟机的调度性能指标的基于云计算的任务调度方法、装置、计算机设备和存储介质。
一种基于云计算的任务调度方法,所述方法包括:
获取处于运行状态的任务;所述任务包括任务类型,所述任务类型包括虚拟机任务和批量型任务;所述虚拟机任务对应的优先级高于所述批量型任务对应的优先级;
选择处于第一空闲状态的CPU为目标CPU,所述目标CPU中尚未运行虚拟机任务;
将所述虚拟机任务调度至目标CPU,对所述虚拟机任务与所述目标CPU进行绑定;
当绑定后的CPU中当前运行的任务为批量型任务时,根据所述虚拟机任务的优先级与所述批量型任务对应的优先级抢占所述绑定后CPU,使得所述绑定后的CPU中当前运行的任务切换为所述虚拟机任务。
一种基于云计算的任务调度装置,所述装置包括:
获取模块,用于获取处于运行状态的任务;所述任务包括任务类型,所述任务类型包括虚拟机任务和批量型任务;所述虚拟机任务对应的优先级高于所述批量型任务对应的优先级;
调度模块,用于选择处于第一空闲状态的CPU为目标CPU,所述目标CPU中尚未运行虚拟机任务;将所述虚拟机任务调度至目标CPU,对所述虚拟机任务与所述目标CPU进行绑定;
抢占模块,用于当绑定后的CPU中当前运行的任务为批量型任务时,根据所述虚拟机任务的优先级与所述批量型任务对应的优先级抢占所述绑定后CPU,使得所述绑定后的CPU中当前运行的任务切换为所述虚拟机任务。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
获取处于运行状态的任务;所述任务包括任务类型,所述任务类型包括虚拟机任务和批量型任务;所述虚拟机任务对应的优先级高于所述批量型任务对应的优先级;
选择处于第一空闲状态的CPU为目标CPU,所述目标CPU中尚未运行虚拟机任务;
将所述虚拟机任务调度至目标CPU,对所述虚拟机任务与所述目标CPU进行绑定;
当绑定后的CPU中当前运行的任务为批量型任务时,根据所述虚拟机任务的优先级与所述批量型任务对应的优先级抢占所述绑定后CPU,使得所述绑定后的CPU中当前运行的任务切换为所述虚拟机任务。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
获取处于运行状态的任务;所述任务包括任务类型,所述任务类型包括虚拟机任务和批量型任务;所述虚拟机任务对应的优先级高于所述批量型任务对应的优先级;
选择处于第一空闲状态的CPU为目标CPU,所述目标CPU中尚未运行虚拟机任务;
将所述虚拟机任务调度至目标CPU,对所述虚拟机任务与所述目标CPU进行绑定;
当绑定后的CPU中当前运行的任务为批量型任务时,根据所述虚拟机任务的优先级与所述批量型任务对应的优先级抢占所述绑定后CPU,使得所述绑定后的CPU中当前运行的任务切换为所述虚拟机任务。
上述基于云计算的任务调度方法、装置、计算机设备和存储介质,
在对云服务器中的虚拟机任务进行调度时,选择处于第一空闲状态的CPU作为目标CPU,将虚拟机任务调度至目标CPU后,目标CPU中只运行一个虚拟机任务,对所述虚拟机任务与所述目标CPU进行绑定后,虚拟机任务只在绑定后的CPU上运行。由此避免了具有相同优先级的虚拟机任务之间可能发生相互干扰与抢占CPU的情形,也有效避免了迁移开销,简化了调度器。由于虚拟机任务对应的优先级高于所述批量型任务对应的优先级,当绑定后的CPU中当前运行的任务为批量型任务时,根据所述虚拟机任务的优先级可以抢占所述绑定后CPU,使得所述绑定后的CPU中当前运行的任务切换为所述虚拟机任务。由此保证了虚拟机任务的调度优先性和及时性,有效提升了云服务器中虚拟机任务运行的调度性能指标。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请提供的基于云计算的任务调度方法,可以应用于如图2所示的应用环境中。其中,终端202通过网络与服务器204通过网络进行通信。其中,终端202可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备,服务器204可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN、以及大数据和人工智能平台等基础云计算服务的云服务器。终端202可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。终端202以及服务器204可以通过有线或无线通信方式进行直接或间接地连接,本申请在此不做限制。终端202向服务器204上传配置信息,服务器204根据配置信息对任务进行分类,并且设置任务类型对应的优先级。任务类型包括虚拟机任务和批量型任务,虚拟机任务对应的优先级高于批量型任务对应的优先级。服务器204根据配置信息对不同的任务类型设置不同的调度策略。服务器204选择处于第一空闲状态的CPU为目标CPU,目标CPU中尚未运行虚拟机任务。服务器204将虚拟机任务调度至目标CPU,对虚拟机任务与目标CPU进行绑定。当绑定后的CPU中当前运行的任务为批量型任务时,根据虚拟机任务的优先级与批量型任务对应的优先级抢占绑定后CPU,使得绑定后的CPU中当前运行的任务切换为虚拟机任务。由此保证了虚拟机任务的调度优先性和及时性,实现了虚拟机任务调度性能指标的提升和优化。
在一个实施例中,如图3所示,提供了一种基于云计算的任务调度方法,以该方法云服务器为例进行说明,包括以下步骤:
步骤302,获取处于运行状态的任务;任务包括任务类型,任务类型包括虚拟机任务和批量型任务;虚拟机任务对应的优先级高于批量型任务对应的优先级。
云服务器也可以称为云主机。云服务器中运行了虚拟机和主机进程。其中,虚拟机包含VCPU(虚拟CPU)进程和虚拟机辅助进程。例如,在Linux系统中可以是libvirtd进程和qemu进程。主机进程包含维持云服务器正常运行的所有进程和云服务器中为实现特定功能需要运行的进程。其中,维持云服务器正常运行的进程包括内核线程,实现特定功能的进程包括用于系统维护的代理进程。当云服务器执行相应任务时,通过调度器将运行的虚拟机或者主机进程调度至对应的CPU中。
云服务器针对不同的任务类型,设定不同的调度策略。在其中一个实施例中,终端向与服务器上传配置信息。配置信息中包括任务类型、任务运行时长、任务等待时长、任务权重比例等。其中,任务类型包括虚拟机任务、突发型任务和批量型任务。虚拟机任务和突发型任务可以统称为延迟敏感型任务。任务运行时长包括延迟敏感型任务的最小运行时长与批量型任务的最小运行时长。任务等等时长包括批量型任务的最大等待时长。任务权值比例是指突发型任务与批量型任务之间的权重比例,用于控制负载均衡效果。终端可以通过云服务器的操作系统提供的用户动态接口,比如Linux操作系统提供的/proc和/sys虚拟文件系统接口,将配置信息设置到操作系统调度器中,保存在与调度器的与进程(任务)相关的结构体或者全局变量中,用于后续调度器实时调度。
调度器根据配置信息将所有的任务(进程)进行分类,得到虚拟机任务、突发型任务和批量型任务。以Linux系统为例,调度器根据配置信息可以将虚拟机的VCPU线程设置为虚拟机任务,将Qemu、libvirtd、iothread和一些内核线程(如rcu相关线程)设置为突发型任务,将代理等用户态进程设置为批量型任务。其中,虚拟机任务和突发型任务可以具有相同的逻辑优先级(简称优先级)。延迟敏感型任务对应的优先级高于批量型任务对应的优先级。调度器为每种任务类型分别定义不同的标记。调度器针对不同的任务类型实施不同的调度策略。调度示意图可以如图4所示。
步骤304,选择处于第一空闲状态的CPU为目标CPU,目标CPU中尚未运行虚拟机任务。
步骤306,将虚拟机任务调度至目标CPU,对虚拟机任务与目标CPU进行绑定。
调度器将虚拟机任务进行分散调度,使得虚拟机任务分散于不同的CPU上,每个CPU上只有一个虚拟机任务运行。调度器进行任务调度时,创建相应的进程,例如,可以利用Linux内核中的fork()函数创建进程,判断该进程是否为虚拟机任务,如果是,则选择处于第一空闲状态的CPU为目标CPU,即目标CPU上没有运行虚拟机任务。具体的,调度器对云服务器中的CPU进行遍历,识别当前遍历到的CPU是否为第一空闲状态,若是,则将其作为目标CPU。否则,继续遍历其他CPU,直至找到合适的目标CPU,将虚拟机任务绑定到该目标CPU上。在绑定之后,该虚拟机任务只在该目标CPU上运行,不会迁移,由此能够有效减少迁移开销。
步骤308,当绑定后的CPU中当前运行的任务为批量型任务时,根据虚拟机任务的优先级与批量型任务对应的优先级抢占绑定后CPU,使得绑定后的CPU中当前运行的任务切换为虚拟机任务。
处于第一空闲状态的CPU中在绑定虚拟机任务之后,可以称为绑定后的CPU。绑定后的CPU中还可以运行批量型任务。批量型任务可以是在绑定虚拟机任务之前,被调度至该CPU的,也可以是在绑定虚拟机任务之后,被调度到该CPU的。
每个CPU都可以拥有独立的运行队列,运行队列可以是基于链表或其他类似功能的数据结构所建立的。运行队列中记录了CPU中每个任务的状态和统计等。统计可以是指对任务运行时长进行统计。其中,当任务从睡眠状态切换为运行状态时,调度器可以通过入队接口,将相应的任务加入运行队列,并将该任务的状态、运行时长等进行相同的更新。当任务从运行状态切换回睡眠状态时,调度器可以通过出队接口,将应用的任务移除运行队列,并将该任务的状态、运行时长等进行相同的更新。虚拟机任务被创建之后,可以有不同的状态,包括睡眠状态和运行状态。调度器可以调用接口触发虚拟机任务的状态切换,例如,可以调用唤醒接口触发虚拟机任务从睡眠状态切换为运行状态,加入运行队列。运行队列中可以包括当前正在运行的批量型任务等。
由于批量型任务的优先级低于虚拟机任务的优先级,因此处于运行状态的虚拟机任务可以在任何时刻同批量型任务抢占该CPU。其中包括虚拟机任务从睡眠状态切换为运行状态时可以抢占CPU(又可以简称为唤醒时抢占),以及在调度器的调度周期,由时钟中断触发虚拟机任务发生CPU抢占(又可以简称为周期性抢占)。在虚拟机任务抢占CPU成功后,该绑定后的CPU将当前运行的任务切换为虚拟机任务。
本实施例中,在对云服务器中的虚拟机任务进行调度时,选择处于第一空闲状态的CPU作为目标CPU,将虚拟机任务调度至目标CPU后,目标CPU中只运行一个虚拟机任务,对虚拟机任务与目标CPU进行绑定后,虚拟机任务只在绑定后的CPU上运行。由此避免了具有相同优先级的虚拟机任务之间可能发生相互干扰与抢占CPU的情形,也有效避免了迁移开销,简化了调度器。由于虚拟机任务对应的优先级高于批量型任务对应的优先级,当绑定后的CPU中当前运行的任务为批量型任务时,根据虚拟机任务的优先级可以抢占绑定后CPU,使得绑定后的CPU中当前运行的任务切换为虚拟机任务。由此保证了虚拟机任务的调度优先性和及时性。有效提升了云服务器中虚拟机任务运行的调度性能指标。
在一个实施例中,任务类型还包括突发型任务;突发型任务对应的优先级与虚拟机任务对应的优先级相同;突发型任务与虚拟机任务运行在同一CPU时,按照预设策略相互抢占CPU。
突发型任务是根据关键的内核进程设置的,通常情况下单次运行的时长较短,单次运行时间不超过最小运行时长。为了保证云服务器的稳定运行,突发型任务也需要优先调度执行。突发型任务对应的优先级与虚拟机任务对应的优先级相同,当突发型任务与虚拟机任务运行在同一CPU时,调度器可以按照预设策略相互抢占CPU。其中,在突发型任务与虚拟机任务之间,在唤醒时,即从睡眠状态切换为运行状态时,可以直接互相抢占CPU。在周期性调度时,需要保证突发型任务或虚拟机任务的最小运行时长,以便防止过于频繁抢占CPU影响调度吞吐性能。
在其中一个实施例中,基于云计算的任务调度方法的流程图可以如图5所示,包括:
步骤502,获取处于运行状态的任务;任务包括任务类型,任务类型包括虚拟机任务、突发型任务和批量型任务;虚拟机任务对应的优先级高于批量型任务对应的优先级;突发型任务对应的优先级与虚拟机任务对应的优先级相同。
步骤504,选择处于第一空闲状态的CPU为目标CPU,目标CPU中尚未运行虚拟机任务。
步骤506,将虚拟机任务调度至目标CPU,对虚拟机任务与目标CPU进行绑定。
步骤508,当绑定后的CPU中当前运行的任务为批量型任务时,根据虚拟机任务的优先级与批量型任务对应的优先级抢占绑定后CPU,使得绑定后的CPU中当前运行的任务切换为虚拟机任务。
步骤510,获取突发型任务对应的最小运行时长。
步骤512,当绑定后的CPU中当前运行的任务为突发型任务时,记录突发型任务的运行时长。
步骤514,当运行时长超过最小运行时长时,虚拟机任务抢占绑定后的CPU,使得绑定后的CPU中当前运行的任务切换为虚拟机任务。
调度器记录每个任务的单次运行时长。其中,可以是在任务得到调度时记录开始运行的时间戳,在发生周期性调度时更新运行时间,由此得到每个任务的单次运行时长。突发型任务与虚拟机任务运行在同一CPU,该CPU当前运行的任务为突发型任务时,调度器可以记录突发型任务的单次运行时长(简称为运行时长)。当运行时长超过最小运行时长时,时钟中断触发虚拟机任务抢占绑定后的CPU,使得绑定后的CPU中当前运行的任务切换为虚拟机任务。同样地,突发型任务与虚拟机任务运行在同一CPU,该CPU当前运行的任务为虚拟机任务时,调度器可以记录虚拟机任务的单次运行时长。当运行时长超过最小运行时长时,时钟中断触发突发型任务抢占绑定后的CPU,使得绑定后的CPU中当前运行的任务切换为突发型任务。
在同一个CPU上同时存在两个运行状态的延迟敏感型任务时,由于两个延迟敏感型任务之间以最小运行时长互相抢占CPU交替运行,由此能够最大程度保障虚拟机任务的调度及时性,同时能够防止过于频繁抢占CPU而影响调度吞吐性能。
在一个实施例中,基于云计算的任务调度方法的流程图可以如图6所示,包括:
步骤602,获取处于运行状态的任务;任务包括任务类型,任务类型包括虚拟机任务和批量型任务;虚拟机任务对应的优先级高于批量型任务对应的优先级。
步骤604,选择处于第一空闲状态的CPU为目标CPU,目标CPU中尚未运行虚拟机任务。
步骤606,将虚拟机任务调度至目标CPU,对虚拟机任务与目标CPU进行绑定。
步骤608,当绑定后的CPU中当前运行的任务为批量型任务时,根据虚拟机任务的优先级与批量型任务对应的优先级抢占绑定后CPU,使得绑定后的CPU中当前运行的任务切换为虚拟机任务。
步骤610,获取批量型任务对应的最大等待时长。
步骤612,在绑定后的CPU中当前运行的任务切换为虚拟机任务时,记录批量型任务对应的等待时长。
步骤614,当等待时长达到最大等待时长时,批量型任务抢占绑定后的CPU,使得绑定后的CPU将当前运行的任务切换为批量型任务。
为了避免批量型任务被过度饥饿,可以为每个批量性任务设置等待时长。即批量型任务在运行队列中最长等待时长。在虚拟机任务被调度至目标CPU后,与目标CPU进行绑定,抢占该绑定后的CPU,使得绑定后的CPU当前的任务从批量型任务切换为虚拟机任务。通过调度器开始统计批量型任务的等待时长,当等待时长达到最大等待时长时,批量型任务抢占绑定后的CPU,使得绑定后的CPU将当前运行的任务切换为批量型任务。
在一个实施例中,该方法还包括:当绑定后的CPU中当前运行的任务为批量型任务时,根据突发型任务的优先级抢占绑定后的CPU,使得绑定后的CPU中当前运行的任务切换为突发型任务。
由于突发型任务对应的优先级高于批量型任务对应的优先级。因此,当绑定后的CPU中当前运行的任务为批量型任务时,处于运行状态的突发型任务可以在任何时刻同批量型任务抢占该CPU。其中包括突发型任务从睡眠状态切换为运行状态时可以抢占CPU(又可以简称为唤醒时抢占),以及在调度器的调度周期,由时钟中断触发突发型任务发生CPU抢占(又可以简称为周期性抢占)。在突发型任务抢占CPU成功后,该绑定后的CPU将当前运行的任务切换为突发型任务。可以理解,在绑定后的CPU中当前运行的任务切换为突发型任务时,记录批量型任务对应的等待时长;当等待时长达到最大等待时长时,批量型任务抢占绑定后的CPU,使得绑定后的CPU将当前运行的任务切换回批量型任务。
在下一个调度时间点,即进入下一个调度周期时,如果虚拟机任务或突发型任务进入运行状态会再次抢占CPU,因此批量型任务的该次运行时长最长为一个时钟周期。假设,等待时长设置为200ms,一个时钟周期为1ms,那么在1s时间内,该批量型任务最长运行时长为5ms,粗略折算CPU占用率为0.5%。
通过为批量型任务设置最大等待时长,可以在调度时机点与其他任务(包括虚拟机任务、突发型任务以及其他批量任务)抢占CPU,由此能够在保证虚拟机任务调度优先性和调度及时性的同时,还可以保证批量型任务的顺利执行。
在目前主流的操作系统的通用内核调度器的实现中,为了保证虚拟机任务运行的优先性和及时性,通常是提升虚拟机任务的优先级在调度时获得更多的运行时间,或者是将虚拟机任务设置为实时进程。但是在提升虚拟机任务优先级的方式中,不能保证调度的及时性,调度延迟指标较差。而且在通用的调度器实现中,为了保证调度公平性,会固定分配给低优先级任务(非虚拟机任务)一定的时间片,由此会导致虚拟机任务收到比较严重的干扰,调度效果较差。在通过将虚拟机任务设置为实时进程的方式中,也存在诸多缺陷,可能会导致内核关键进程饥饿,致使操作系统挂死。如果同时设置这些关键进程为实时进程,又会导致实时进程之间相互抢占CPU,无法控制调度延时。还可能会导致其他任务饥饿,出现优先级反转的问题,即其他任务获取了虚拟机任务所需的资源,导致虚拟机任务无法调度。还有可能会存在两个虚拟机任务之间的相互干扰,无法控制调度延时和调度效果。
上述实施例中所提供的任务调度方法,能够减少其他任务对虚拟机任务的干扰,保障虚拟机任务调度的优先性,从而提升虚拟机性能。而且能够保证虚拟机任务调度的及时性,具有更低的调度延迟。通过为突发型任务与虚拟机任务设置相同的优先级,能够使得突发型任务与虚拟机任务运行在同一CPU时,按照预设策略相互抢占CPU,保证突发型任务调度的优先性和及时性。通过为批量型任务设置最大等待时长,能够有效避免批量型任务的进程绝对饥饿,从而避免优先级反转的问题。
在一个实施例中,该方法还包括:在第一调度时机下,选中批量型任务运行;记录批量型任务的运行时长;在达到第二调度时机时,若批量型任务的运行长达到预设的时间长,则运行其他批量型任务;否则继续运行批量型任务。
在批量型任务之间,可以按照时间片轮转的方式进行调度。具体的,在批量型任务经过等待时长,从虚拟机任务或者突发型任务处抢占CPU,达到批量型任务对应的第一调度时机。此时,调度器可以选中其中一个批量型任务运行,并且记录相应的运行时长。在该批量型任务运行的过程中,如果出现上述实施例中的抢占情形,则CPU被虚拟机任务或者突发型任务抢占。在该批量型任务再次经过等待时长时,达到第二调度时机,此时调度器会将该批量型任务的运行时长与预设时长进行比较,预设时长是预先为每个批量型任务设置的运行时间片。运行时间片可以根据批量型任务的单次运行时间的最大值进行设定,例如12ms。若运行时长达到预设时长,则在达到第二调度时间时,调度器选中另一个批量型任务抢占CPU,开始运行另一个批量型任务。若运行时长未达到预设时长,则在达到第二调度时间时,调度器继续执行该批量型任务,对其运行时长进行更新。
本实施例中,通过按照时间片轮转的方式,均分时间片,轮流运行每个批量型任务,由此能够保证每个批量型任务顺利运行,同时能够有效提高调度吞吐性能。
在一个实施例中,如图7所示,该方法还包括负载均衡步骤,具体包括:
步骤702,在进行负载均衡时,选择处于第二空闲状态的CPU。
步骤704,获取每个CPU的运行队列中批量型任务的等待时长。
步骤706,将等待时长超过阈值的批量型任务迁移至处于第二空闲状态的CPU。
云服务器包括多个CPU,多个是指两个或两个以上。不同的CPU可以运行不同的任务。不同的CPU可以处于不同的状态,对于没有运行延迟敏感型任务的CPU,即没有运行虚拟机任务也没有运行突发型任务的CPU,可以称为处于第二空闲状态。每个CPU中都可以设立对应的运行队列,运行队列可以记录处于运行状态的任务。在进行负载均衡时,调度器可以检查每个CPU的运行队列中批量型任务的等待时长。一个运行队列中可以记录一个或多个批量型任务的等待时长。当批量型任务的等待时长超过阈值时,调度器将该批量型任务迁移至处于第二空闲状态的CPU。由此能够将批量型任务迁移至空闲CPU,不仅能够使得每个CPU上运行的任务数量均衡,而且能够通过负载均衡解决低优先级任务批量型任务的饥饿问题。
在一个实施例中,该方法的负载均衡步骤还可以是如图8所示:
步骤802,在进行负载均衡时,遍历寻找负载最重的CPU。
步骤804,在负载最重的CPU中查找是否存在突发型任务;若存在,则执行步骤806,否则执行步骤808。
步骤806,将突发型任务迁移至处于第三空闲状态的CPU。
步骤808,在负载最重的CPU中选择等待时长最长的批量型任务,将等待时长最长的批量型任务迁移至处于第三空闲状态的CPU。
当CPU中没有运行任何任务时,可以将该CPU称为处于第三空闲状态的CPU。在进行负载均衡时,调度器通过对所有的CPU进行遍历,寻找负载最重的CPU。调度器可以根据每个CPU中当前处于运行状态的任务计算CPU的负载。其中,由于每个CPU上只运行一个虚拟机任务,且虚拟机任务与CPU绑定后,虚拟机不发生迁移,因此在负载均衡时,不需要考虑虚拟机任务。配置信息中记录了突发型任务和批量性任务之间的权重比例。突发型任务的权重比批量型任务的权重高。体现到负载上,即运行一个突发型任务的负载比运行一个批量型任务的负载要高。
在其中一个实施例中,调度器获取配置信息,配置信息包括任务类型对应的权重比例,获取每个CPU中处于运行状态的任务类型和任务数量。调度器根据任务类型、任务数量和权重比例计算每个CPU对应的负载。通过遍历,得到负载最重的CPU。
由于突发型任务的权重比批量型任务的权重高,因此在进行负载均衡时,优先考虑对突发型任务进行迁移。调度器通过负载最重的CPU的运行队列,查找是否存在突发型任务,如果存在,将突发型任务从负载最重的CPU迁移至处于第三空闲状态的CPU。如果不存在突发型任务,在根据运行队列的记录,将等待时长最长的批量任务从负载最重的CPU迁移至处于第三空闲状态的CPU。由此不仅能够使得每个CPU上运行的任务数量均衡,而且能够通过负载均衡解决低优先级任务批量型任务的饥饿问题。
在其中一个实施例中,在进行负载均衡时,调度器还可以在每个CPU的运行队列中查找是否存在等待时长超过阈值的批量型任务,如果存在,表示批量型任务等待时长过长。调度器在云服务器的所有CPU中进行遍历,寻找处于第三空闲状态的CPU。将等待时长超过阈值的批量型任务迁移至处于第三空闲状态的CPU。由此通过负载均衡解决低优先级任务批量型任务的饥饿问题。
应该理解的是,虽然图3-8的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图3-8中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图9所示,提供了一种基于云计算的任务调度装置,该装置可以采用软件模块或硬件模块,或者是二者的结合成为计算机设备的一部分,该装置具体包括:获取模块902、调度模块904和抢占模块906,其中:
获取模块902,用于获取处于运行状态的任务;任务包括任务类型,任务类型包括虚拟机任务和批量型任务;虚拟机任务对应的优先级高于批量型任务对应的优先级。
调度模块904,用于选择处于第一空闲状态的CPU为目标CPU,目标CPU中尚未运行虚拟机任务;将虚拟机任务调度至目标CPU,对虚拟机任务与目标CPU进行绑定。
抢占模块906,用于当绑定后的CPU中当前运行的任务为批量型任务时,根据虚拟机任务的优先级与批量型任务对应的优先级抢占绑定后CPU,使得绑定后的CPU中当前运行的任务切换为虚拟机任务。
在一个实施例中,任务类型还包括突发型任务;突发型任务对应的优先级与虚拟机任务对应的优先级相同;突发型任务与虚拟机任务运行在同一CPU时,按照预设策略相互抢占CPU。
在一个实施例中,在突发型任务与虚拟机任务之间,从睡眠状态切换为运行状态时相互抢占CPU。
在一个实施例中,抢占模块906还用于获取突发型任务对应的最小运行时长;当绑定后的CPU中当前运行的任务为突发型任务时,记录突发型任务的运行时长;当运行时长超过最小运行时长时,虚拟机任务抢占绑定后的CPU,使得绑定后的CPU中当前运行的任务切换为虚拟机任务。
在一个实施例中,获取模块902还用于获取批量型任务对应的最大等待时长;在绑定后的CPU中当前运行的任务切换为虚拟机任务时,记录批量型任务对应的等待时长;抢占模块906还用于当等待时长达到最大等待时长时,批量型任务抢占绑定后的CPU,使得绑定后的CPU将当前运行的任务切换为批量型任务。
在一个实施例中,抢占模块906还用于当绑定后的CPU中当前运行的任务为批量型任务时,根据突发型任务的优先级抢占绑定后的CPU,使得绑定后的CPU中当前运行的任务切换为突发型任务。
在一个实施例中,抢占模块906还用于在达到第一调度时机时,选中批量型任务运行;记录批量型任务的运行时长;在达到第二调度时机时,若批量型任务的运行长达到预设的时间长,则运行其他批量型任务;否则继续运行批量型任务。
在一个实施例中,如图10所示,还包括负载均衡模块908,用于在进行负载均衡时,选择处于第二空闲状态的CPU;获取每个CPU的运行队列中批量型任务的等待时长;将等待时长超过阈值的批量型任务迁移至处于第二空闲状态的CPU。
在一个实施例中,负载均衡模块908还用于在进行负载均衡时,遍历寻找负载最重的CPU;若负载最重的CPU中存在突发型任务,将突发型任务迁移至处于第三空闲状态的CPU;否则,在负载最重的CPU中选择等待时长最长的批量型任务,将等待时长最长的批量型任务迁移至处于第三空闲状态的CPU。
在一个实施例中,负载均衡模块908还用于获取配置信息,配置信息包括任务类型对应的权重比例;获取每个CPU中处于运行状态的任务类型和任务数量;根据任务类型、任务数量和权重比例计算每个CPU对应的负载。
关于基于云计算的任务调度装置的具体限定可以参见上文中对于基于云计算的任务调度方法的限定,在此不再赘述。上述基于云计算的任务调度装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图11所示。该计算机设备包括通过系统总线连接的处理器、存储器和网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储配置信息等数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种基于云计算的任务调度方法。
本领域技术人员可以理解,图11中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,还提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机可读存储介质,存储有计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-Only Memory,ROM)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic Random Access Memory,DRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。