负载均衡方法和装置、存储介质、计算设备及计算系统与流程

文档序号:17695284发布日期:2019-05-17 21:26阅读:256来源:国知局
负载均衡方法和装置、存储介质、计算设备及计算系统与流程

本公开涉及任务调度技术领域,特别涉及任务调度过程中的负载均衡技术领域。



背景技术:

目前,在数据中心,为了提高物理机的资源利用率,达到节省成本的目的,经常在同一台物理机上同时部署在线应用(在线任务)和离线应用(离线任务)。在线应用对延迟比较敏感,而离线应用则对延迟不敏感。

另一方面,在离线应用和在线应用混合部署的环境中,首先需要保证的是在线任务的服务质量(qos),其次才是提高机器资源利用率。然而,离线应用会对在线应用造成干扰,降低在线任务的性能。

从cpu层面上来看,一个物理核上可以有两个超线程(ht,hyperthread),可以视为两个逻辑核,两者互为兄弟。对于cpu调度器来说,每个逻辑核可以被当做一个独立的cpu。下文中将逻辑核也简称为ht。如果一个超线程(逻辑核)运行在线任务的同时,另一个超线程(逻辑核)运行离线任务,那么由于两个超线程之间共享很多硬件资源,超线程干扰会降低在线应用的性能。

在此,为了描述方便,将离线任务表示为“batch”,将在线任务表示为“ls(latencysensitive)”,而将其中对延迟极度敏感的在线任务表示为“l*”。

对于l*任务,从cpu层面,需要最大力度地降低干扰,以保证qos。因此,就需要解决上面提到的超线程干扰。

为解决batch任务对l*任务的超线程干扰,在与本专利申请同日递交的发明专利申请“任务调度方法和装置、存储介质以及计算设备”中,提出了ncs(超线程干扰消除调度器,noisecleanscheduler)调度方案,以确保当一个逻辑核上正在或将要运行l*任务时,同一个物理核上另一个逻辑核不会执行batch任务。具体说来,另一个逻辑核正在执行的batch任务将被打断,而其任务队列中的batch任务将被从任务队列中取出(换言之,batch任务被节流(throttle)或暂缓),放入暂缓列表中。

为便于理解本发明的技术方案,在后文中,将对ncs调度方案加以详细描述。

而在任务调度过程中,除了要考虑避免上述超线程干扰,还要考虑负载均衡。

一般在三种时机(三种机制)进行负载均衡:任务唤醒时的负载均衡、cpu空闲时的负载均衡、以及周期性的负载均衡。一些任务调度方案中基于静态权重或动态权重做负载均衡。

另外,还有一种基于完全公平调度器(cfs调度器,completefairscheduler)设计的双层cfs调度器(tlcfs,twolevelcfs)。这两层分别叫做cfs和cfs_prio。每层都有独立的运行队列,都独立执行cfs的调度策略。但cfs层的优先级高于cfs_prio。在混合部署环境中,任务可以被分为在线任务(latencysensitive,ls)和离线任务(batch)。ls任务只能出现在cfs层,而离线任务只能出现在cfs_prio层。

然而,tlcfs方案主要用于隔离在线任务和离线任务,降低离线任务对在线任务的干扰,但并不能消除或降低超线程干扰。也不能适用于上述ncs调度方案。

根据ncs调度方案,由于batch任务被节流后,从运行队列中取出,放在暂缓列表中,导致调度器的三种负载均衡机制都不能处理被取出的batch任务。因此,即使别的核完全处于空闲状态,被取出的batch任务也得不到调度,这造成了cpu资源浪费。

因此,仍然需要一种负载均衡方案,其能够使batch任务能够充分利用空闲的cpu资源,而又不破坏ncs设计原则:l*任务和batch任务不能同时运行在互为兄弟的cpu上(即同一个物理核上的逻辑核)。



技术实现要素:

本发明所要解决的技术问题是提供一种负载均衡方案,其能够提高物理机的资源利用率而又不破坏ncs设计原则。

根据本发明的一个方面,提供了一种负载均衡方法,该方法包括:响应于第二类任务被唤醒,基于各个逻辑核自身的负载状态及其兄弟逻辑核上第一类任务的运行情况,分别确定第二类任务在各个逻辑核上运行的预估概率,其中同一个物理核上的两个逻辑核互为兄弟逻辑核;以及将第二类任务分配给预估概率最高的逻辑核。

优选地,负载状态可以包括逻辑核的当前总负载量。并且/或者,兄弟逻辑核上第一类任务的运行情况可以包括在该兄弟逻辑核上运行第一类任务的概率。

优选地,逻辑核的当前总负载量可以为逻辑核的任务队列上所有任务的权重之和。并且/或者,兄弟逻辑核上运行第一类任务的概率可以为过去一段时间间隔内该兄弟逻辑核上运行第一类任务的时间长度与时间间隔长度的比值。

优选地,第二类任务在逻辑核上运行的预估概率可以与该逻辑核的当前总负载量负相关。并且/或者,第二类任务在逻辑核上运行的预估概率可以与该逻辑核的兄弟逻辑核上运行第一类任务的概率负相关。

优选地,第二类任务在逻辑核上运行的预估概率可以与该逻辑核的当前总负载量成反比。并且/或者,第二类任务在逻辑核上运行的预估概率可以与该逻辑核的兄弟逻辑核上不运行第一类任务的概率成正比,其中,运行第一类任务的概率与不运行第一类任务的概率之和为1。

优选地,互为兄弟逻辑核的两个逻辑核上不能同时分别运行第一类任务和第二类任务。

优选地,该方法还可以包括:响应于逻辑核上即将运行第一类任务,其兄弟逻辑核的任务队列中的第二类任务被节流,即从任务队列取出,并放入对应于该兄弟逻辑核的暂缓列表中。

优选地,该方法还可以包括:响应于存在空闲逻辑核,执行第一级空闲均衡处理,即从其它逻辑核的任务队列中选择待执行任务迁移到空闲逻辑核;以及响应于第一级空闲均衡处理失败,从各个逻辑核分别对应的暂缓列表中选择待执行第二类任务迁移到空闲逻辑核。

优选地,选择最早被节流的第二类任务迁移到空闲逻辑核。

优选地,该方法还可以包括:响应于逻辑核上的第二类任务被节流,关联地记录与该逻辑核对应的节流时间,其中,从所记录的节流时间最早的逻辑核对应的暂缓列表中选择待执行第二类任务迁移到空闲逻辑核。

根据本发明的另一方面,还提供了一种负载均衡方法,该方法包括:响应于逻辑核上即将运行第一类任务,将其兄弟逻辑核的任务队列中的第二类任务节流,即从任务队列取出,并放入对应于该兄弟逻辑核的暂缓列表中,其中同一个物理核上的两个逻辑核互为兄弟逻辑核;响应于存在空闲逻辑核,执行第一级空闲均衡处理,即从其它逻辑核的任务队列中选择待执行任务迁移到空闲逻辑核;以及响应于第一级空闲均衡处理失败,从各个逻辑核分别对应的暂缓列表中选择待执行第二类任务迁移到空闲逻辑核。

优选地,选择最早被节流的第二类任务迁移到空闲逻辑核。

优选地,该方法还可以包括:响应于逻辑核上的第二类任务被节流,关联地记录与该逻辑核对应的节流时间,其中,从所记录的节流时间最早的逻辑核对应的暂缓列表中选择待执行第二类任务迁移到空闲逻辑核。

根据本发明的另一方面,还提供了一种负载均衡装置,该装置包括:概率预估装置,用于响应于第二类任务被唤醒,基于各个逻辑核自身的负载状态及其兄弟逻辑核上第一类任务的运行情况,分别确定第二类任务在各个逻辑核上运行的预估概率,其中同一个物理核上的两个逻辑核互为兄弟逻辑核;以及任务分配装置,用于将第二类任务分配给预估概率最高的逻辑核。

优选地,该装置还可以包括:节流装置,用于响应于逻辑核上即将运行第一类任务,将其兄弟逻辑核的任务队列中的第二类任务节流,即从任务队列取出,并放入对应于该兄弟逻辑核的暂缓列表中;第一级空闲均衡处理装置,用于响应于存在空闲逻辑核,执行第一级空闲均衡处理,即从其它逻辑核的任务队列中选择待执行任务迁移到空闲逻辑核;以及第二级空闲均衡处理装置,用于响应于第一级空闲均衡处理失败,从各个逻辑核分别对应的暂缓列表中选择待执行第二类任务迁移到空闲逻辑核。

优选地,该装置还可以包括:节流时间记录装置,用于响应于逻辑核上的第二类任务被节流,关联地记录与该逻辑核对应的节流时间,其中,从所记录的节流时间最早的逻辑核对应的暂缓列表中选择待执行第二类任务迁移到空闲逻辑核。

根据本发明的又一方面,还提供了一种负载均衡装置,该装置包括:节流装置,用于响应于逻辑核上即将运行第一类任务,将其兄弟逻辑核的任务队列中的第二类任务节流,即从任务队列取出,并放入对应于该兄弟逻辑核的暂缓列表中,其中同一个物理核上的两个逻辑核互为兄弟逻辑核;第一级空闲均衡处理装置,用于响应于存在空闲逻辑核,执行第一级空闲均衡处理,即从其它逻辑核的任务队列中选择待执行任务迁移到空闲逻辑核;以及第二级空闲均衡处理装置,用于响应于第一级空闲均衡处理失败,从各个逻辑核分别对应的暂缓列表中选择待执行第二类任务迁移到空闲逻辑核。

优选地,该装置还可以包括:节流时间记录装置,用于响应于逻辑核上的第二类任务被节流,关联地记录与该逻辑核对应的节流时间,其中,从所记录的节流时间最早的逻辑核对应的暂缓列表中选择待执行第二类任务迁移到空闲逻辑核。

根据本发明的另一方面,还提供了一种计算设备,包括:处理器;以及存储器,其上存储有可执行代码,当可执行代码被处理器执行时,使处理器执行根据本发明上述的负载均衡方法。

根据本发明的另一方面,还提供了一种非暂时性机器可读存储介质,其上存储有可执行代码,当可执行代码被电子设备的处理器执行时,使处理器执行根据本公开上述的负载均衡方法。

根据本发明的另一方面,还提供了一种计算系统,包括多个物理核,每个物理核上拥有两个逻辑核,其中同一个物理核上的两个逻辑核为兄弟逻辑核,其特征在于,使用根据本公开上述任何一项的负载均衡方法来进行负载均衡处理。

由此,通过优化的负载均衡方案,提高物理机的资源利用率,而又不破坏ncs设计原则。

附图说明

通过结合附图对本公开示例性实施方式进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施方式中,相同的参考标号通常代表相同部件。

图1示出了ncs调度方案的示意性流程图。

图2示出了根据本公开一个实施例的batch任务唤醒时的负载均衡方法的示意性流程图。

图3示出了用于实现图2的负载均衡方法的负载均衡装置的示意性框图。

图4示出了根据本公开一个实施例的存在空闲cpu时的负载均衡方法的示意性流程图。

图5示出了用于实现图4的负载均衡方法的负载均衡装置的示意性框图。

图6示出了根据本公开一个实施例的计算设备的示意性框图。

具体实施方式

下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。

【术语解释】

1.超线程:(hyperthread,简称ht)

为了有效利用cpu资源,可以进一步增加一些资源来运行第二个线程。这样,可以让cpu的闲置资源运行第二个线程。这便是超线程技术。

cpu只需要增加少量资源就可以模拟成两个线程来运作。在cpu内部仅复制必要的资源,让两个线程可同时运行,在一单位时间内处理两个线程的工作。因此,一个物理核上就拥有两个逻辑核,分别对应两个线程。对于cpu调度器来说,每个逻辑核被当做一个独立的cpu。下文中将逻辑核也简称为ht。

2.兄弟cpu

同一个物理核上的两个逻辑核(ht)互为兄弟,即兄弟cpu。

3.超线程干扰

同一个物理核上,互为兄弟的两个ht共享很多硬件资源,如l1、l2cache,alu,流水线,fpu等。当两个ht竞争某个共享资源时,其中一个ht就需要等待。由此,两个ht之间相互干扰。

从宏观角度来看,可以有两种情况:

情况1:一个物理核上只运行一个线程a;

情况2:一个物理核上的两个ht分别运行线程a和线程b。

针对线程a来说,情况1的性能好于情况2的性能。在情况2中,线程b对线程a造成干扰,这种干扰就称为超线程干扰。

4.负载均衡

在cpu调度层面来说,可能cpu1上运行的任务数量多,而cpu2上运行的任务数量少,为了提升整个系统的吞吐量,调度器将cpu1上的部分任务迁移到cpu2上。按负载均衡发生的时机,现在的cpu负载均衡可以分为三种类型:

(1)唤醒均衡(wakeupbalance):即任务唤醒时发生的负载均衡,当某个任务被唤醒后,倾向于在一个最闲的cpu上运行;

(2)空闲均衡(idlebalance):cpu空闲时发生的负载均衡,当某个cpu运行队列为空,没有任务可以执行时,将会尝试从最忙的cpu处拉一个任务过来,然后执行;

(3)周期性均衡(periodicbalance):每个cpu都周期性地执行负载均衡,尝试从最忙的cpu处拉任务,使这两个cpu的负载相对均衡。

【任务分类】

在本公开的技术方案中,将混合部署环境中的任务分为5类:

l*:对延迟极度敏感的在线任务;

ls:l*之外的在线任务,对延时敏感;

batch:离线任务,对延迟不敏感;

normal:系统中的其它普通任务;

idle:空闲进程,当cpu空闲时执行。

上述l*任务可以基于预定的规则或通过预定的机制,与普通的ls任务区分开。例如,可以将延时敏感度高于预定敏感度阈值或者能够容忍的延迟时间小于预定时间阈值的在线任务划分为l*任务,而将其它在线任务划分为ls任务。也可以人为设定某些在线任务是l*任务。

【ncs调度方案】

在上述与本专利申请同日递交的发明专利申请“任务调度方法和装置、存储介质以及计算设备”中,提出了ncs调度方案,用于消除batch任务带来的超线程干扰,基于该方案实现了超线程干扰消除调度器(ncs,noisecleanscheduler)。

根据ncs调度策略,l*任务和batch任务不能在同一个时刻同时运行于互为兄弟的两个ht上;但当l*任务睡眠或退出后,batch任务又可以继续运行。其它类型的组合则不受限制,可以任意运行在同一个核上。

通过这种方式,可以消除batch任务导致的超线程干扰,提升系统资源利用率。

下文的描述中,cpu1和cpu2表示在同一个物理核上互为兄弟的两个cpu。应当理解,cpu1和cpu2是对称的,本公开中针对cpu1描述的内容也适用于cpu2;同样地,针对cpu2描述的内容也适用于cpu1。

每个cpu都拥有自身的运行队列(rq,runqueue),对应的数据结构structrq用于存放处于就绪状态的任务,并记录调度相关的状态,例如,可以记录对应的cpu1和cpu2当前执行的任务的类型,即当前任务类型。rq1和rq2分别表示cpu1和cpu2对应的运行队列。运行队列rq1和rq2中还可以记录对应的cpu1和cpu2当前执行的任务的类型,即当前任务类型。

下面参考图1详细描述ncs调度策略。

图1示出了ncs调度策略的示意性流程图。

首先,可以通过预定的标识机制来标识任务的类型,即上述l*、ls、batch、normal、idle。

对于linux内核(linuxkernel)来说,例如可以使用cpu控制族群(cpucontrolgroup)机制来标识任务的类型。应当理解,也可以根据需要采用其它标注机制。本发明不限于具体的标注方式。

接下来,详细描述在同一个物理核上的两个cpu中的一个,例如cpu1从其运行队列rq1中选择下一个即将运行的任务,并执行该任务的流程。应当理解,为cpu2选择下一个即将运行的任务的流程也可以是一样的。

首先,当由于cpu1的当前任务执行完成,或者分配给当前任务的时间片结束,或者当前任务被打断等原因,需要为cpu1从其运行队列rq1中选择下一个即将运行的任务时,在步骤s310,触发cpu1任务调度,以便为cpu1选择下一个即将运行的任务。

在触发cpu1任务调度之后,从rq1中为cpu1实际选择下一个即将运行的任务之前,在步骤s320,判断cpu2的运行队列rq2中记录的当前任务类型curr-type2是否为l*。这里,rq2中记录的当前任务类型即cpu2当前正在执行的任务的类型。

在rq2记录的当前任务类型curr-type2是l*的情况下,在步骤s330,将rq1中的batch任务(优选为其中所有batch任务)从rq1中取出(throttle),放入一个对应于rq1的节流列表(也可以称为“暂缓列表”)tl1中。换言之,从rq1中取出其中的batch任务,将其放入对应的节流列表中。

应当理解,rq1和rq2可以分别对应于不同的节流列表tl1和tl2,这样,原来分配给cpu1的任务仍留给cpu1在之后合适的时候执行,原来分配给cpu2的任务仍留给cpu2在之后合适的时候执行。

另一方面,rq1和rq2也可以对应于同一个节流列表tl。对于放入节流列表tl的任务,可以关联地记录其来源,即其来自哪个任务队列,这样可以在之后合适的时候将其返回到其原来所在的任务队列以执行。或者,在一些情况下,也可以不加以区分地放入节流列表中,在之后适合执行的时候重新分配给cpu1或cpu2。

于是,rq1中剩余的任务(如果还有任务的话)都不是batch任务。即使cpu2当前执行的l*任务持续时间较长,或者cpu2连续执行了多个l*任务,在此过程中,cpu1进行了多次任务调度,cpu1也不会选择到batch任务来运行。

然后,在步骤s350中,从rq1选择下一个即将运行的任务。此时,所选到的任务一定不是batch任务,不会对cpu2上正在执行的l*任务造成超线程干扰。

这样,就在为cpu1选择下一个即将运行的任务时,避免了在cpu2上正在运行l*任务的情况下,在cpu1选择batch任务作为下一个即将运行的任务,从而避免了即将在cpu1上运行的batch任务对cpu2上正在运行l*任务造成超线程干扰的不利情形。

在rq2记录的当前任务类型curr-type2不为l*的情况下,在步骤s340,将对应于rq1的节流列表tl1中的batch任务(优选为其中所有batch任务)重新放回rq1中(unthrottle)。例如,可以将这些batch任务都放到任务队列rq1尾部。

在步骤s350,再从rq1中选择下一个即将运行的任务。

应当理解,在rq2中当前任务的类型curr-type2不为l*的情况下,也可以先执行步骤s350,从rq1中选择下一个即将运行的任务,再执行步骤s340,将节流列表中的batch任务(优选为其中所有batch任务)重新放回到rq1中。步骤s340甚至也可以在下面的步骤s390中cpu1开始运行所选择的任务之后才执行。只要在执行步骤s350之前,rq1不为空即可。先执行步骤s340可以避免在执行步骤s350时,tl1不为空而rq1为空导致没有选择到要执行的任务的情况。先执行步骤s350可以更快地为cpu1分配任务。

另外,还应当理解,如果cpu1上一次选择任务时,cpu2正在执行的任务不为l*,那么节流列表tl1中batch任务已经被重新放回到rq1中了。此时,也可以不执行上述步骤s340。

当在步骤s350中为cpu1从rq1中选择下一个即将运行的任务之后,可以在步骤s360中,在rq1的例如当前任务类型curr-type1字段中,记录cpu1当前执行的任务的类型,即当前任务类型curr-type1。应当理解,当前任务类型字段也可以在rq1之外设置。可以为每个cpu分别设置对应的当前任务类型字段。

接下来,在步骤s370中判断是否需要对cpu2重新进行任务调度。

判断是否需要对cpu2重新进行任务调度的条件可以包括例如如下两项中的至少一项:

(1)cpu1选择的当前任务类型curr-type1是l*,而cpu2的当前任务类型curr-type2为batch;并且/或者

(2)为cpu1选择的当前任务类型curr-type1不是l*,而cpu2的当前任务类型curr-type2为idle。

在上述需要对cpu2重新进行任务调度的情形(1),如果不对cpu2重新进行任务调度,cpu2上执行的batch任务将对即将在cpu1上执行的l*任务造成超线程干扰。因为系统首先要保证l*任务的高效执行,因此,需要打断cpu2上的batch任务,对其重新进行任务调度。

由此,在cpu1上即将执行l*任务时,打断cpu2上正在执行的batch任务。这样,避免了cpu2上正在执行的batch任务对cpu1上即将执行或刚被选择就要执行的l*任务造成超线程干扰。

步骤s330和步骤s370的上述第(1)种情形,分别从不同的方面有效避免了l*任务和batch任务同时运行在互为兄弟的cpu(即cpu1和cpu2)或逻辑核上。

在上述需要对cpu2重新进行任务调度的情形(2),cpu1和cpu2上都没有执行l*任务,因此,不涉及batch任务对l*任务的超线程干扰的问题。

然而,有可能在一些情况下,cpu2处于空闲状态,正在执行idle任务。例如在先前cpu1将运行l*任务时,打断了cpu2上正在执行的batch任务,而rq2中都是batch任务,没有非batch任务可供cpu2选择执行时,cpu2开始执行idle任务。

cpu1上的l*任务执行完成后,cpu2仍然处于空闲任务。这将导致资源利用不充分。因此,需要打断cpu2上正在执行的idle任务,对其重新进行任务调度,以提高资源利用效率。

如果在步骤s370判定需要对cpu2重新进行任务调度,则在步骤s380中,例如通过处理器间中断机制(ipi,inter-processorinterrupt)通知cpu2打断当前正在运行的任务,并触发cpu2重新选择任务调度。由此,开始针对cpu2执行如图1所示上述任务调度流程,只是其中的cpu1和cpu2对调。

在步骤s390,cpu1开始执行为其选择的任务。

应当理解,cpu1可以在步骤s350中为其选择好任务之后就可以开始执行该任务。

然而,至少在为cpu1选择即将执行的任务为l*任务的情况下,优选在步骤s370中判断cpu2正在执行的任务是否batch任务,并相应打断cpu2上正在执行的batch任务之后再开始执行步骤s390。这样,从cpu1上的l*任务开始执行时,就可以避免cpu2上的batch任务的超线程干扰。

接下来,在步骤s395,判断是否需要触发cpu1的任务调度。

例如,在下述几种情况下,需要触发cpu1的任务调度:

(1)cpu1的当前任务已经执行完毕;

(2)为cpu1的当前任务分配的时间片已经用完;

(3)cpu1上正在运行的任务被打断,需要触发cpu1任务调度。

在判定需要触发任务调度的情况下,返回步骤s310,从而开始执行针对cpu1的下一轮任务调度流程。

在不需要触发任务调度的情况下,返回步骤s390,继续执行当前任务。

至此,已参考图1,详细描述了ncs调度策略。

【负载均衡策略】

本公开将针对batch任务,设计新的负载均衡策略,以便在满足上述ncs设计原则(l*任务和batch任务不能同时运行在互为兄弟的cpu上(即同一个物理核上))的前提下,实现下述至少一项目标:

1.使batch任务能够充分利用空闲的cpu资源;

2.维持多个batch任务之间在cpu资源分配上的公平性,即同一段时间内,各个batch任务所占用的cpu时间相等。

l*任务和batch任务不能在同一个时刻同时运行于互为兄弟的ht上。根据这一限制,batch任务的负载均衡将会受到影响:

(1)现有的负载均衡机制对被节流batch任务没有作用;

(2)退出节流(unthrottled)(重新放回任务队列)的batch任务仍然在cpu的运行队列中,现有的负载均衡机制能够对其产生影响,但是由于batch任务会受到l*任务的抑制,这就会导致现有的基于rq负载的均衡策略会造成退出节流的batch任务迁移不合理。即,batch任务有可能被迁移到一个其兄弟cpu上长时间运行l*任务的cpu,但由于ncs的限制,该离线任务长时间得不到执行;因此,该迁移动作不合理。

本公开提出的调度策略从唤醒均衡(wakeupbalance)和空闲均衡(idlebalance)两个方面入手,对batch任务的迁移做出了优化。

(1)唤醒均衡(wakeupbalance)

在基于cpu负载的均衡策略中,被唤醒的任务倾向于选择在一个负载小的cpu上执行。

但对于batch任务而言,需要考虑兄弟cpu上l*任务的运行情况。如果cpu1和cpu2互为兄弟,cpu1空闲,利用率为0%,而cpu2上正在运行l*任务,利用率为100%,按照原来的策略,唤醒的batch任务将会被分配给cpu1。但是根据ncs的规则,batch任务调度到cpu1上之后,为了避免对cpu2上的l*任务造成超线程干扰,立刻会被节流,取出到暂缓队列中。因此,该batch任务得不到执行。可见,在引入ncs调度策略的情况下,原来单纯基于自身cpu负载的均衡策略对batch任务失效。

基于此,本公开提出一种新的唤醒均衡策略。

对于非batch任务,仍然采用原先的基于cpu负载的均衡策略,将新唤醒的任务分配给负载较轻的cpu。

而对于batch任务,则采用一种新的均衡策略,该策略考虑了兄弟cpu上l*任务的运行情况。

在下文中,用w表示被唤醒的batch任务自身的权重,用w1表示目标cpu(例如cpu1)上的负载,用p2表示目标cpu的兄弟cpu(例如cpu2)上运行l*任务的概率,而用p1表示batch任务在目标cpu上运行的概率。分别以两个cpu作为目标cpu,计算各自的p1,可以将该batch任务分配给p1较大的cpu。

不考虑l*干扰的情况下,batch任务能在目标cpu上运行的概率为w/w1。

而在考虑l*干扰的情况下,batch任务在目标cpu上运行的概率为:

p1=(w/w1)×(1-p2)

根据本公开的调度策略,将会选取一个使p1最大的cpu,将batch任务放到该cpu上执行。

在实现该策略时,被唤醒的batch任务自身的权重w与cpu无关,只与被唤醒的任务自身相关,可以不予以考虑。

因此,要使p1=(w/w1×(1-p2))最大,只需(w1/(1-p2))最小,也即(w1/(1-t2/t2))最小。

其中,w1为目标cpu的负载值,t2为t2时间间隔内,运行l*任务占用的时间,t2为用于计算概率p2的时间间隔。

这样,基于目标cpu当前的负载值w1及其兄弟cpu上运行l*任务的概率p2,确定了在目标cpu上运行该batch任务的概率p1。以两个cpu分别为目标cpu,分别计算出在这两个cpu上运行该batch任务的概率,即各自的p1。比较两个cpu各自的p1值,可以将该batch任务分配给具有较大的p1值的cpu。

以下以cpu1的p1值大于cpu2的p1值,从而将该batch任务分配给cpu1为例进行描述。

当将batch任务分配给cpu1时,由于其具有更大的运行该batch任务的概率p1,因此该batch任务被节流的概率较小。

以上描述了在同一个物理核的两个逻辑核(cpu)之间分配batch任务时,选择具有较高p1值的cpu。

应当明白,在一个batch任务可以分配给多个物理核上的逻辑核(cpu)的情况下,可以选择具有最高p1值的cpu,从而将该batch任务分配给所选择的cpu。

由此,根据本公开,提供了一种batch任务唤醒时的负载均衡方案。

图2示出了根据本公开一个实施例的batch任务唤醒时的负载均衡方法的示意性流程图。

图3示出了用于实现图2的负载均衡方法的负载均衡装置的示意性框图。

如图2所示,在步骤s410,例如可由图3所示的概率预估装置510,响应于第二类任务被唤醒,基于各个逻辑核自身的负载状态及其兄弟逻辑核上第一类任务的运行情况,分别确定第二类任务在各个逻辑核上运行的预估概率。

其中,互为兄弟逻辑核的两个逻辑核上不能同时分别运行第一类任务和第二类任务。

例如,第一类任务可以是延迟敏感度高的在线任务,例如上述l*任务。第二类任务是离线任务,例如上述batch任务。

这里,负载状态可以包括逻辑核的当前总负载量。优选地,逻辑核的当前总负载量可以为逻辑核的任务队列上所有任务的权重之和。

兄弟逻辑核上第一类任务的运行情况可以包括在该兄弟逻辑核上运行第一类任务的概率。优选地,兄弟逻辑核上运行第一类任务的概率可以为过去一段时间间隔内该兄弟逻辑核上运行第一类任务的时间长度与时间间隔长度的比值。

第二类任务在逻辑核上运行的预估概率可以与逻辑核的负载状态和/或兄弟逻辑核上第一类任务的运行情况相关。

预估概率可以与该逻辑核的当前总负载量负相关。例如,预估概率可以与该逻辑核的当前总负载量成反比。

或者,预估概率也可以与该逻辑核的兄弟逻辑核上运行第一类任务的概率负相关。例如,预估概率可以与该逻辑核的兄弟逻辑核上不运行第一类任务的概率成正比,其中,运行第一类任务的概率与不运行第一类任务的概率之和为1。

在步骤s420,例如可由图3所示的任务分配装置520将第二类任务分配给预估概率最高的逻辑核。

由此,通过优化的唤醒均衡方案,在满足上述ncs设计原则的前提下,将batch任务分配给具有最高p1值的cpu,使刚被唤醒的batch任务被节流的概率最小,以减小batch任务得不到执行的可能性。

(2)空闲均衡(idlebalance)

同样地,执行空闲均衡,可以只对同一个物理核上两个cpu之间的任务进行均衡处理,也可以跨物理核进行均衡处理。换言之,当一个cpu(逻辑核)空闲时,可以设置为仅从其兄弟cpu上迁移任务到该空闲cpu,也可以设置为能够从其它物理核上的cpu的任务队列或暂缓列表中选择任务迁移到该空闲cpu的任务队列中,以便该空闲cpu执行迁移过来的任务,实现任务均衡。

根据本公开的负载均衡方案,对于有cpu空闲时执行的空闲均衡,可以借鉴tlcfs中分层负载均衡的思想。

与tlcfs中基于在线任务和离线任务来分层不同,在本发明的两级空闲均衡方案中,基于是否被节流batch任务来分级。

第一级空闲均衡用于处理cpu的任务队列rq上的任务,即被节流batch任务之外的所有其它任务。这一层的负载均衡逻辑可以与现有负载均衡机制相同。即从非空闲cpu迁移任务到空闲cpu。

第二级空闲均衡用于处理被节流batch任务。如上面关于ncs调度方案的描述,所有被节流batch任务都放在暂缓列表中。在第一级空闲均衡过程中不对暂缓列表中的被节流batch任务进行均衡处理操作。只有当第一级空闲均衡失败后,才开始执行第二级空闲均衡。

第一级空闲均衡的失败原因可能有多种,例如,非空闲cpu上没有可以被均衡迁移的任务,或者非空闲cpu上的任务不适于迁移到该空闲cpu上,等等。

当第一级空闲均衡失败后,开始执行第二级空闲均衡,考虑对暂缓列表中的节流batch任务进行均衡处理。

第二级空闲均衡的主要策略可以概括为:最小节流时间优先策略。即,优先处理最早被节流(或者说,被节流时间最长)的batch任务。这样,可以保证对被节流batch任务的公平性。

时间记录数值随时间的推移而逐渐增大。因此,较早记录的时间记录数值较小。

执行第二级空闲均衡时,可以对该空闲cpu可用的所有cpu对应的暂缓列表中的batch任务的节流时间进行排序,选择最早的(所记录的其节流时间最小的)被节流batch任务,将其迁移到该空闲cpu的任务队列中,以便该空闲cpu执行该batch任务。当有多个batch任务是同时被节流的时,可以选择其中一个,也可以选择其中多个,甚至全部,将其迁移到该空闲cpu的任务队列。

当限定在同一个物理核上执行任务均衡处理时,该空闲cpu及其兄弟cpu分别对应的暂缓列表中的batch任务是该空闲cpu可用的。当设定可以从多个物理核上迁移任务到该空闲cpu时,这多个物理核上的cpu分别对应的暂缓列表中的batch任务是该空闲cpu可用的。当所有物理核之间都可以执行任务均衡时,所有物理核上的cpu分别对应的暂缓列表中的batch任务都是该空闲cpu可用的。

然而,如果为每个被节流的batch任务分别记录节流时间,比较每个被节流batch任务的节流时间,那么计算量将会比较大。

由ncs策略可知,一个cpu上的被节流batch任务都是在同一个时刻被一次性全部节流的。因此,只需在该cpu的任务队列rq上记录执行节流的节流时间t1,该节流时间t1即为从该cpu的任务队列rq中节流取出到暂缓列表中的所有batch任务的节流时间。当执行退出节流操作时,将该节流时间t1设成无穷大。

这样,每个cpu的任务队列rq上记录的节流时间t1代表了其对应的暂缓列表中被节流的各batch任务所共同的节流时间。当该节流时间t1被设置为无穷大时,表示暂缓列表中没有被节流的batch任务。

这样,在执行上述第二级空闲均衡时,从节流时间t1最小(也即最早)的rq对应的暂缓列表中选择被节流任务迁移到当前空闲cpu。换句话说,最早被节流,处于节流状态的时间最长的batch任务将被迁移到当前空闲cpu。

当节流时间t1最小的rq对应的暂缓列表中存在多个被节流的batch任务时,可以仅选择其中一个batch任务,可以选择其中多个batch任务,也可以选择其中全部batch任务,以将其迁移到该空闲cpu。优选地,在一次第二级空闲均衡处理中,可以仅迁移一个batch任务。

由此,根据本公开,提供了一种存在空闲cpu(逻辑核)时的负载均衡方案。

图4示出了根据本公开一个实施例的存在空闲cpu时的负载均衡方法的示意性流程图。

图5示出了用于实现图4的负载均衡方法的负载均衡装置700的示意性框图。

如图4所示,在步骤s610中,例如可以由图5所示的节流装置710,响应于逻辑核上即将运行第一类任务,将其兄弟逻辑核的任务队列中的第二类任务节流,即从所述任务队列取出,并放入对应于该兄弟逻辑核的暂缓列表中。

与上文所述相同,第一类任务可以是延迟敏感度高的在线任务,例如上述l*任务。第二类任务是离线任务,例如上述batch任务。

在步骤s620中,例如可以由图5所示的第一级空闲均衡处理装置720,响应于存在空闲逻辑核,执行第一级空闲均衡处理,即从其它逻辑核的任务队列中选择待执行任务迁移到所述空闲逻辑核。优选地,可以选择最早被节流的第二类任务迁移到空闲逻辑核。

在步骤s630中,例如可以由图5所示的第二级空闲均衡处理装置730,响应于第一级空闲均衡处理失败,从各个逻辑核分别对应的暂缓列表中选择待执行第二类任务迁移到所述空闲逻辑核。

在一个优选实施例中,负载均衡装置700还可以包括节流时间记录装置740,其能够响应于逻辑核上的第二类任务被节流,关联地记录与该逻辑核对应的节流时间。并且,在执行步骤s630时,第二级空闲均衡处理装置730从所记录的节流时间最早的逻辑核对应的暂缓列表中选择待执行第二类任务迁移到空闲逻辑核。

由此,通过优化的空闲均衡方案,使batch任务能够充分利用空闲的cpu资源,同时,维持多个batch任务之间在cpu资源分配上的公平性,即同一段时间内,各个batch任务所占用的cpu时间尽可能大致相等。

另外,本公开的任务调度方案还可以由一种计算设备实现。图6示出了根据本公开一个实施例的计算设备的示意性框图。

如图6所示,本公开的计算设备800可以包括处理器810以及存储器820。存储器820上可以存储有可执行代码,当可执行代码被处理器810执行时,使处理器810执行根据本公开的上述任务调度方法。具体实现过程可参见上文中的相关描述,在此不再赘述。

根据本公开,还提供了一种计算系统,包括多个物理核,每个物理核上拥有两个逻辑核,其中同一个物理核上的两个逻辑核为兄弟逻辑核。在该计算系统中,使用根据本公开上文所描述的的负载均衡方法来在各个逻辑核之间进行负载均衡处理。

上文中已经参考附图详细描述了根据本发明的负载均衡方案。

此外,根据本发明的方法还可以实现为一种计算机程序或计算机程序产品,该计算机程序或计算机程序产品包括用于执行本发明的上述方法中限定的上述各步骤的计算机程序代码指令。

或者,本发明还可以实施为一种非暂时性机器可读存储介质(或计算机可读存储介质、或机器可读存储介质),其上存储有可执行代码(或计算机程序、或计算机指令代码),当所述可执行代码(或计算机程序、或计算机指令代码)被电子设备(或计算设备、服务器等)的处理器执行时,使所述处理器执行根据本发明的上述方法的各个步骤。

本领域技术人员还将明白的是,结合这里的公开所描述的各种示例性逻辑块、模块、电路和算法步骤可以被实现为电子硬件、计算机软件或两者的组合。

附图中的流程图和框图显示了根据本发明的多个实施例的系统和方法的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标记的功能也可以以不同于附图中所标记的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1