一种服务器任务调度的方法以及装置与流程

文档序号:12733253阅读:250来源:国知局
一种服务器任务调度的方法以及装置与流程

本发明涉及服务器RAS技术领域,特别是涉及一种服务器任务调度的方法以及装置。



背景技术:

随着计算机技术的发展进步,对服务器的性能提出了新的要求。

在服务器的硬件方面,多路多核CPU是CPU技术的持续发展方向,而内存则是以非一致存储访问结构(NUMA)技术为主流。服务器可以执行各种各样的任务,任务可以分为计算密集型任务以及I/O密集型任务。计算密集型任务可以是指计算、逻辑判断等CPU占用率高的任务,计算密集型任务的频繁切换会降低CPU利用率。I/O密集型任务可以是指频繁网络传输、读取硬盘及其他I/O设备等类型的任务,由于在I/O密集型任务执行期间,CPU大部分时间都是在等待状态,故I/O密集型任务的切换可以提高服务器的效率。

服务器在对任务进行调度时,只考虑任务的特性,例如linux操作系统的任务调度是基于任务优先级调度,即任务的优先级制定采用不同的调度策略来制定。在进行任务调度时只考虑任务特性,不考虑服务器的硬件架构,可能会导致服务器的性能低下,例如,任务频繁切换会占用CPU,或者是由于内存资源以及I/O资源的等待,使得CPU一直处于空闲状态。故如何在服务器任务调度时,提高服务器的性能是本领域亟待解决的问题。



技术实现要素:

本发明的目的是提供一种服务器任务调度的方法以及装置,目的在于解决现有技术中服务器在任务调度时性能较低的问题。

为解决上述技术问题,本发明提供一种服务器任务调度的方法,该方法包括:

根据任务的类型,将所述任务分配至预绑定任务组;

利用与所述预绑定任务组对应的预设任务调度算法,对所述任务进行调度;

其中,所述预绑定任务组包含第一预设数量的CPU,且与包含第二预设数量的内存节点的内存组绑定。

可选地,在所述利用与所述预绑定任务组对应的预设任务调度算法,对所述任务进行调度之后还包括:

利用监控任务获取所述预绑定任务组内的CPU占用率以及内存节点占用率;

根据所述CPU占用率以及内存节点占用率,动态增减所述预绑定任务组的所述CPU以及所述内存节点的数量。

可选地,所述根据所述CPU占用率以及内存节点占用率,动态增减所述预绑定任务组的所述CPU以及所述内存节点的数量包括:

当所述CPU占用率大于或等于第一预设阈值时,从其它任务组调用第三预设数量的CPU;

当所述内存节点占用率大于或等于第二预设阈值时,从其它任务组调用第四预设数量的内存节点;

当所述CPU占用率小于第三预设阈值时,将调用的所述CPU返还给对应的任务组;

当所述内存节点占用率小于第四预设阈值时,将调用的所述内存节点返还给对应的任务组。

可选地,所述任务和所述预绑定任务组的绑定过程具体为:

根据所需执行的任务类型,创建多个任务组;

根据服务器的硬件配置以及各个所述任务组的所需,将相应数量的CPU与各个所述任务组进行绑定;

根据各个所述任务组的内存所需,将相应数量的内存节点与各个所述任务组进行绑定;

根据各个所述任务组的特性,选取相应的任务调度算法;

在创建所述任务时,根据所述任务的类型,将所述任务与相应的任务组进行绑定,得到所述预绑定任务组。

可选地,所述任务组包括:CPU密集型任务组、I/O密集型且占用内存资源多的任务组、I/O密集型且占用内存资源少的任务组以及操作系统内部任务组。

此外,本发明还提供了一种服务器任务调度的装置,该装置包括:

分配模块,用于根据任务的类型,将所述任务分配至预绑定任务组;

调度模块,用于利用与所述预绑定任务组对应的预设任务调度算法,对所述任务进行调度;

其中,所述预绑定任务组包含第一预设数量的CPU,且与包含第二预设数量的内存节点的内存组绑定。

可选地,还包括:

监控模块,用于利用监控任务获取所述预绑定任务组内的CPU占用率以及内存节点占用率;

动态增减模块,用于根据所述CPU占用率以及内存节点占用率,动态增减所述预绑定任务组的所述CPU以及所述内存节点的数量。

可选地,所述动态增减模块包括:

CPU增加单元,用于当所述CPU占用率大于或等于第一预设阈值时,从其它任务组调用第三预设数量的CPU;

内存节点增加单元,用于当所述内存节点占用率大于或等于第二预设阈值时,从其它任务组调用第四预设数量的内存节点;

CPU减少单元,用于当所述CPU占用率小于第三预设阈值时,将调用的所述CPU返还给对应的任务组;

内存节点增加单元,用于当所述内存节点占用率小于第四预设阈值时,将调用的所述内存节点返还给对应的任务组。

可选地,还包括:

创建模块,用于根据所需执行的任务类型,创建多个任务组;

CPU绑定模块,用于根据服务器的硬件配置以及各个所述任务组的所需,将相应数量的CPU与各个所述任务组进行绑定;

内存绑定模块,用于根据各个所述任务组的内存所需,将相应数量的内存节点与各个所述任务组进行绑定;

调度算法选定模块,用于根据各个所述任务组的特性,选取相应的任务调度算法;

任务绑定模块,用于在创建所述任务时,根据所述任务的类型,将所述任务与相应的任务组进行绑定,得到所述预绑定任务组。

可选地,所述任务组包括:CPU密集型任务组、I/O密集型且占用内存资源多的任务组、I/O密集型且占用内存资源少的任务组以及操作系统内部任务组。

本发明所提供的一种服务器任务调度的方法以及装置,通过根据任务的类型,将上述任务分配至预绑定任务组;利用与上述预绑定任务组对应的预设任务调度算法,对上述任务进行调度;其中,上述预绑定任务组包含第一预设数量的CPU,且与包含第二预设数量的内存节点的内存组绑定。将不同类型的任务分配到不同的任务组,而任务组内有相应数量的CPU和内存节点,即将CPU和内存节点进行分组,以执行不同类型的任务,也即在任务调度时,不仅考虑了任务的特性,也考虑了服务器的CPU和内存节点的硬件特性。在任务调度时,考虑到服务器的硬件特性,可以减少任务切换带来的性能损失,进而提高了服务器的资源利用率,提高了服务器性能。可见,本申请有利于提高服务器性能。

附图说明

为了更清楚的说明本发明实施例或现有技术的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例所提供的服务器任务调度方法的一种具体实施方式的流程示意图;

图2为本发明实施例所提供的任务组的CPU和内存划分示意图;

图3为本发明实施例所提供的不同类型的任务绑定至不同任务组的示意图;

图4为本发明实施例所提供的调整任务组内的CPU和内存节点的示意图;

图5为本发明实施例所提供的服务器任务调度装置的结构框图。

具体实施方式

为了使本技术领域的人员更好地理解本发明方案,下面结合附图和具体实施方式对本发明作进一步的详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

请参见图1,图1为本发明实施例所提供的服务器任务调度方法的一种具体实施方式的流程示意图,该方法包括以下步骤:

步骤101:根据任务的类型,将所述任务分配至预绑定任务组,其中,所述预绑定任务组包含第一预设数量的CPU,且与包含第二预设数量的内存节点的内存组绑定;

需要说明的是,上述任务的类型可以是指服务器内根据任务特性划分的任务类别。计算密集型任务是服务器任务的一种,即CPU密集型任务,该类型的任务的CPU占用率较高,例如,计算、逻辑判断等任务;I/O密集型任务也是服务器任务的一种,在执行该类型任务时,CPU基本上是处于等待状态,例如,频繁网络传输、读取硬盘以及其它I/O设备等任务。

更具体地,可以将服务器的任务划分为CPU密集型任务、I/O密集型且占用内存资源多的任务、I/O密集型且占用内存资源少的任务以及操作系统内部任务。当然,服务器任务还可以有其它类型,在此不作限定。

上述预绑定任务组可以是指与上述任务预先绑定的任务组,即根据上述任务的类型,将其分配至相应的任务组去执行。

由于上述任务的类型可以有多种,故上述预绑定任务组也可能有多种,例如,当服务器任务为CPU密集型任务、I/O密集型且占用内存资源多的任务、I/O密集型且占用内存资源少的任务以及操作系统内部任务时,相应地,上述预绑定任务组可以为CPU密集型任务组、I/O密集型且占用内存资源多的任务组、I/O密集型且占用内存资源少的任务组以及操作系统内部任务组。

可以理解的是,根据执行各个类型的任务所需的硬件资源,上述预绑定任务组内有CPU,且绑定有相应数量内存节点。各个任务组内的CPU数量以及内存节点,可以由任务组所执行的任务所需硬件资源的多少来决定。例如,对于CPU密集型任务来说,对应的CPU密集型任务组的CPU的数量较多;而对于I/O密集型且占用内存资源多的任务来说,对应的I/O密集型且占用内存资源多的任务组所需要的内存较多,故其内存节点的数量可以相应地增加。

故上述第一预设数量以及第二预设数量的数值可以由其任务组的类型所决定,例如,当上述预绑定任务组为CPU密集型任务组时,第一预设数量的数值可以为4,第二预设数量的数值可以为2。任务的类型不同,第一预设数量和第二预设数量的取值也会有相应不同,即预绑定任务组的类型不同,第一预设数量和第二预设数量的取值也会有相应不同。

为了更好地介绍各个任务组的CPU个数和内存节点,下面将结合图2进行介绍,图2为本发明实施例所提供的任务组的CPU和内存划分示意图。

如图2所示,任务组可以包括CPU密集型任务组、I/O密集型且占用内存资源多的任务组、I/O密集型且占用内存资源少的任务组以及操作系统内部任务组。CPU密集型任务组内有4个CPU,分别为CPU0、CPU1、CPU2以及CPU3,有包括内存节点node0和node1的内存组0;I/O密集型且占用内存资源多的任务组内有2个CPU,分别为CPU4和CPU5,且与包括4个内存节点的内存组1绑定,分别为node2、node3、node4以及node5;I/O密集型且占用内存资源少的任务组有2个CPU,分别为CPU6和CPU7,且与包括2个内存节点的内存组2绑定,分别为node6和node7;操作系统内部任务组,有2个CPU,别为CPU8和CPU9,且与包括2个内存节点的内存组3绑定,分别为node8和node9。显而易见地,任务组内的CPU和内存节点的划分并不限于上文中所提出的情况。

需要说明的是,服务器的内存结构可以NUMA内存结构,NUMA内存结构具有多个内存节点(Node),节点可分为本地节点(Local Node)、邻居节点(Neighbour Node)和远端节点(Remote Node)三种类型,每个节点可以拥有多个CPU(每个CPU可以具有多个核或线程),节点内使用共有的内存控制器。CPU访问不同类型节点内存的速度是不相同的,一般地,本地节点>邻居节点>远端节点。

可以理解的是,对任务进行调度之前需要进行任务和任务组的绑定,故在本发明的一些实施例中,任务和任务组的绑定流程可以具体为:根据所需执行的任务类型,创建多个任务组;根据服务器的硬件配置以及各个所述任务组的所需,将相应数量的CPU与各个所述任务组进行绑定;根据各个所述任务组的内存所需,将相应数量的内存节点与各个所述任务组进行绑定;根据各个所述任务组的特性,选取相应的任务调度算法;在创建所述任务时,根据所述任务的类型,将所述任务与相应的任务组进行绑定,得到所述预绑定任务组。

需要说明的是,在任务和任务组绑定之前,需要对任务组进行创建,为任务组划分相应数量的内存以及CPU数量。

根据任务的类型,创建执行相应任务类型的任务组,在创建任务组后,可以根据服务器的硬件配置,将相应的硬件资源分配至不同的任务组,即为各个任务组分配相应数量的CPU和内存节点。

任务和任务组的绑定过程可以发生在任务创建时,即可以根据所创建的任务的类型不同,将其绑定至与之对应的任务组,即任务组所执行的任务类型与所创建的任务类型一致。

为了更好地介绍各个类型的任务和不同的任务组的绑定过程,下面将结合图3进行介绍,图3为本发明实施例所提供的不同类型的任务绑定至不同任务组的示意图。

需要说明的是,图3是以图2为基础,故不再详细介绍各个任务组所包括的CPU个数和内存节点,具体可以参见上文图2的详细描述。

如图3所示,将Task a、Task b、Task c…与CPU密集型任务组进行绑定,Task a、Task b、Task c…均为CPU密集型任务;将Task m、Task n、Task l…与I/O密集型且占用内存资源多的任务组进行绑定,Task m、Task n、Task l…均为I/O密集型且占用内存资源多的任务;将Task x、Task y、Task z…与I/O密集型且占用内存资源少的任务组进行绑定,Task x、Task y、Task z…均为I/O密集型且占用内存资源多的任务;将Task p、Task q、Task r…与操作系统内部任务组进行绑定,Task p、Task q、Task r…均为操作系统内部任务。

步骤102:利用与所述预绑定任务组对应的预设任务调度算法,对所述任务进行调度。

需要说明的是,上述预设任务调度算法可以是指根据任务组所执行的任务类型而选择的调度算法。任务调度算法有很多,例如SCHED_FIFO调度算法以及SCHED_RR调度算法。

根据上述预绑定任务组的不同,其任务调度算法也不同,相应地任务调度过程也不同。

例如,当任务组为CPU密集型任务组,其对应的任务调度算法可以为SCHED_FIFO调度算法。其任务的调度过程可以具体为:在任务数小于任务组内的总核数(假设有4个CPU,每个CPU 24个核,总核数4*24=96)时,每个任务绑定一个核,任务会一直运行到任务结束,或者任务主动让出CPU,即在任务期间不进行任务切换;而当任务数超过任务组内的总核数时,优先级高的任务可以抢占低优先级的任务。

当任务组为I/O密集型且占用内存资源多的任务组,其对应的任务调度算法可以为SCHED_RR调度算法。该任务组内的任务轮流执行,即每个任务执行一个时间片的时间就发生切换,同时,优先级高的任务可以抢占优先级低的任务。还可以根据任务优先级,计算时间片时,对于一些时间片相对较长的任务,不需要太频繁切换,例如从磁盘读大量的数据库数据,由于硬盘速度慢,短时间内很难完成,这次任务切换出去,就可以等的时间稍长再切换回来。

当任务组为I/O密集型且占用内存资源少的任务组,其对应的任务调度算法可以为SCHED_RR调度算法。该任务组内的任务轮流执行,即每个任务执行一个时间片的时间就发生切换。同时,优先级高的任务可以抢占优先级低的任务。由于该任务组对应的任务可能是和用户交互的操作,比如操作终端,故需要频换进行任务切换,以增强用户体验。

当任务组为而对于操作系统内部任务组,其对应的任务调度算法可以为SCHED_OTHER分时调度算法。该任务组的任务一般是维护系统正常运行的任务,而这些任务多数是周期性执行的任务,比如刷新磁盘高速缓存、以及维护网络链接等等。故可以利用相应的任务调度算法,根据任务优先级计算各自的时间片。

显而易见地,每个任务组内的任务优先级都可以根据任务的状态进行实时调整,即可以根据当前任务的状态,调整任务优先级,以使任务可以及时执行,避免有些任务优先级低永远得不到执行。

为了保证各个任务组内的任务的及时执行,可以在某个任务组内的负载较重时,从其它任务组调用相应的硬件资源,以处理过多的任务,当处理完相应的过多的任务后,还可以将之前调用的硬件资源返还至相应的任务组。

故在本发明的一些实施例中,动态增减任务组内的硬件资源的过程可以具体为:利用监控任务获取所述预绑定任务组内的CPU占用率以及内存节点占用率;根据所述CPU占用率以及内存节点占用率,动态增减所述预绑定任务组的所述CPU以及所述内存节点的数量。

需要说明的是,上述监控任务的任务类型可以为操作系统内部任务,即监控任务可以分配至操作系统内部任务组执行。

可以理解的时,当CPU占用率过高时,表明当前任务组的CPU的负载较重,可以相应地增加一定数量的CPU。而当内存节点占用率过高时,表明当前任务组的内存节点的负载较重,可以相应地增加一定数量的内存节点。相应地,当CPU占用率或者内存节点占用率较低时,其可以相应地减少一定数量的CPU或者是内存节点。

减少CPU或者内存节点的个数将从其它任务组调用的CPU或者内存节点返还给相应的任务组,即任务组的负载较重,需要从其它任务组调用有一定数量的CPU或者内存节点,一段时间后,任务组的负载下降,则将之前调用的CPU或内存节点,返还给与所调用的CPU或内存节点对应的任务组。

减少CPU或者内存节点的个数也可以是指将自身的CPU或内存节点给其它任务组调用,即当前任务组的负载较轻,而其它任务组的负载较重,其它任务组可以从当前任务组调用一定数量的CPU和内存节点。

为了更好地介绍说明CPU或内存节点的增加过程,下面将结合图4进行介绍说明,图4为本发明实施例所提供的调整任务组内的CPU和内存节点的示意图。

需要说明的是,图4是以图3为基础,故不再详细介绍各个任务组以及对应的CPU和内存节点,具体可以参见上文相应内容。

如图4所示,CPU密集型任务组的当前负载较重,即其CPU占用率较高,故其从I/O密集型且占用内存资源少的任务组调用CPU6处理当前任务,此时,I/O密集型且占用内存资源少的任务组内则只有CPU7。而I/O密集型且占用内存资源多的任务组的内存节点的占用率较高,故其从操作系统内部任务组调用一个内存节点node8,此时,操作系统内部任务组队员的内存组3则只有内存节点node9。

在本发明的一些实施例中,根据所述CPU占用率以及内存节点占用率,动态增减所述预绑定任务组的所述CPU以及所述内存节点的数量可以具体为:当所述CPU占用率大于或等于第一预设阈值时,从其它任务组调用第三预设数量的CPU;当所述内存节点占用率大于或等于第二预设阈值时,从其它任务组调用第四预设数量的内存节点;当所述CPU占用率小于第三预设阈值时,将调用的所述CPU返还给对应的任务组;当所述内存节点占用率小于第四预设阈值时,将调用的所述内存节点返还给对应的任务组。

需要说明的是,上述第一预设阈值、第二预设阈值、第三预设阈值以及第四预设阈值的数值可以任意设定。例如,可以将第一预设阈值设定为90%,第二预设阈值设定为90%,第三预设阈值设定为50%,第四预设阈值设定为50%。

而上述第三预设数量以及第四预设数量的数值大小也可以任务设定。例如,可以将第三预设数量设定为1,即从其它任务组调用1个CPU,第四预设数量设定为2,即从其它任务组调用2个内存节点。

通过任务组的CPU占用率以及内存节点占用率是否超出或低于某个预先设定数值,以使各个任务组可以合理地利用服务器的硬件资源。

本发明实施例所提供的服务器任务调度的方法,通过根据任务的类型,将上述任务分配至预绑定任务组;利用与上述预绑定任务组对应的预设任务调度算法,对上述任务进行调度;其中,上述预绑定任务组包含第一预设数量的CPU,且与包含第二预设数量的内存节点的内存组绑定。将不同类型的任务分配到不同的任务组,而任务组内有相应数量的CPU和内存节点,即将CPU和内存节点进行分组,以执行不同类型的任务,也即在任务调度时,不仅考虑了任务的特性,也考虑了服务器的CPU和内存节点的硬件特性。在任务调度时,考虑到服务器的硬件特性,可以减少任务切换带来的性能损失,进而提高了服务器的资源利用率,提高了服务器性能。

下面对本发明实施例提供的服务器任务调度装置进行介绍,下文描述的服务器任务调度装置与上文描述的服务器任务调度方法可相互对应参照。

图5为本发明实施例所提供的服务器任务调度装置的结构框图,参照图5服务器任务调度的装置可以包括:

分配模块501,用于根据任务的类型,将所述任务分配至预绑定任务组;

调度模块502,用于利用与所述预绑定任务组对应的预设任务调度算法,对所述任务进行调度;

其中,所述预绑定任务组包含第一预设数量的CPU,且与包含第二预设数量的内存节点的内存组绑定。

可选地,还包括:

监控模块,用于利用监控任务获取所述预绑定任务组内的CPU占用率以及内存节点占用率;

动态增减模块,用于根据所述CPU占用率以及内存节点占用率,动态增减所述预绑定任务组的所述CPU以及所述内存节点的数量。

可选地,所述动态增减模块包括:

CPU增加单元,用于当所述CPU占用率大于或等于第一预设阈值时,从其它任务组调用第三预设数量的CPU;

内存节点增加单元,用于当所述内存节点占用率大于或等于第二预设阈值时,从其它任务组调用第四预设数量的内存节点;

CPU减少单元,用于当所述CPU占用率小于第三预设阈值时,将调用的所述CPU返还给对应的任务组;

内存节点增加单元,用于当所述内存节点占用率小于第四预设阈值时,将调用的所述内存节点返还给对应的任务组。

可选地,还包括:

创建模块,用于根据所需执行的任务类型,创建多个任务组;

CPU绑定模块,用于根据服务器的硬件配置以及各个所述任务组的所需,将相应数量的CPU与各个所述任务组进行绑定;

内存绑定模块,用于根据各个所述任务组的内存所需,将相应数量的内存节点与各个所述任务组进行绑定;

调度算法选定模块,用于根据各个所述任务组的特性,选取相应的任务调度算法;

任务绑定模块,用于在创建所述任务时,根据所述任务的类型,将所述任务与相应的任务组进行绑定,得到所述预绑定任务组。

可选地,所述任务组包括:CPU密集型任务组、I/O密集型且占用内存资源多的任务组、I/O密集型且占用内存资源少的任务组以及操作系统内部任务组。

本发明实施例所提供的服务器任务调度的装置,将不同类型的任务分配到不同的任务组,而任务组内有相应数量的CPU和内存节点,即将CPU和内存节点进行分组,以执行不同类型的任务,也即在任务调度时,不仅考虑了任务的特性,也考虑了服务器的CPU和内存节点的硬件特性。在任务调度时,考虑到服务器的硬件特性,可以减少任务切换带来的性能损失,进而提高了服务器的资源利用率,提高了服务器性能。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。

以上对本发明所提供的服务器任务调度的方法以及装置进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。

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