一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

任务处理系统及自适应任务调度的方法与流程

2022-12-10 11:13:07 来源:中国专利 TAG:


1.本技术涉及存储设备领域,尤其涉及一种任务处理系统及自适应任务调度的方法。


背景技术:

2.在一些应用中,处理器需要处理大规模并发任务。例如:用于网络设备、存储设备的嵌入式处理器,需要处理并发的多个网络包或并发的多个io命令。
3.请参阅图1a,图1a展示了现有技术中处理大规模并发任务的示意图。
4.从左向右的方向是时间流逝的方向。图1a还展示了被处理的多个任务(任务1-1、任务2-1、任务3-1、任务1-2、任务2-2与任务3-2),其中在结构为“a-b”的附图标记中,在前的符号a指示任务,而在后的符号b指示任务中包括的子任务。图1a展示了按时间顺序处理了3个任务,每个任务包括2个子任务。
5.实线箭头指示了处理多个任务的时间顺序,虚线箭头指示了任务处理的逻辑顺序。例如,以任务1为例,要先处理其任务1-1,再处理其任务1-2。依然作为举例,参看图1a,在处理完任务1-1后,任务1-2(因所需资源尚未就绪等原因)不能立刻处理,因而通过调度先执行任务2-1与任务3-1,随后响应于任务1-2(所需的资源就绪等原因)能够被处理,在处理完任务3-1后,调度执行任务1-2。
6.在处理器上,通过执行代码段来处理任务。单一cpu(或cpu核),任一时刻仅处理单一任务。示例性地,如图1a所示,对于待处理的多个任务,先执行处理任务1-1的代码段,接下来执行处理任务2-1的代码段,接下来执行处理任务3-1的代码段,接下来执行处理任务1-2的代码段,接下来执行处理任务2-2的代码段以及接下来执行处理任务3-2的代码段。在各个处理任务的代码段中指示了任务处理的逻辑顺序。例如,该逻辑顺序包括任务1-2要在任务1-1之后处理。作为又一个例子,在处理任务1-1的代码段中指示其逻辑顺序在后处理的代码段应为处理任务1-2的代码段。
7.请参阅图1b,图1b展示了现有技术中任务处理系统的示意图。
8.任务处理系统包括软件与硬件两部分。硬件包括例如运行软件的一个或多个cpu,与处理相关任务的其他硬件资源(例如,存储器、编解码器、接口、加速器、中断控制器等)。
9.将在cpu上运行的软件的代码段称为任务处理单元。任务处理系统包括多个任务处理单元,每个任务处理单元处理相同或不同的任务。例如,任务处理单元0处理任务的第一子任务(例如:任务1-1、任务2-1与任务3-1),而任务处理单元1、任务处理单元2与任务处理单元3处理任务的第二子任务(例如任务1-2、任务2-2与任务3-2)。
10.任务处理单元所需的资源包括例如cpu核、存储空间、待读取的数据、就数据写入操作完成的指示等。在存储设备的例子中,任务处理单元包括例如dm(data manger,数据管理)单元、sm(schedule manager,调度管理)单元、gc(garbage collection,垃圾回收)单元等,dm单元用于接收主机发送的io命令,解析io命令的关键信息,在主机与存储设备之间搬移数据等。对于写命令,还将写命令对应的操作请求发送给sm单元以做进一步处理。gc单元
用于实施垃圾回收,包括回收数据的选取和根据所回收数据生成写请求向sm单元的发送等。sm单元用于将dm单元和gc单元的操作请求所对应的数据进行组装,将组装好的数据发送给闪存控制器,接收闪存控制器提供的处理完成消息,并负责后续的一些处理,例如闪存转换层映射表的更新,日志请求生成,相关资源的释放等。
11.请参阅图2a,图2a展示了现有技术中不同任务处理单元在cpu核上的分布情况的示意图。
12.以存储设备处理写命令的任务处理系统为例:为处理写命令,任务处理系统提供了dm单元、sm单元与gc单元。为了提供处理写命令的并发能力,dm单元有4个,而gc单元与sm单元各有2个。这些任务处理单元在例如4个cpu核上被调度并处理。例如:一个dm单元和一个sm单元在cpu0上被调度并处理,一个dm单元和一个sm单元在cpu1上被调度并处理,一个dm单元和一个gc单元在cpu2上被调用并处理,一个dm单元和一个gc单元在cpu3上被调用并处理。
13.请参阅图2b,图2b展示了现有技术中dm单元与sm单元的交互情况的示意图。
14.图2b展示了4个dm单元与2个sm单元。在纯写情况下任务间的交互情况如下,4个dm单元的每个都向任何一个sm单元提供操作请求。在这样的任务交互结构中,dm单元产生操作请求并提供给sm单元,而sm单元处理dm单元产生的操作请求,从而构成了生产者与消费者模型,dm单元作为生产者生产操作请求,而sm单元作为消费者处理操作请求。
15.在图2b中,还提供了4个cpu核(cpu0~cpu3),4个dm单元分别位于cpu0、cpu1、cpu2、cpu3之一,而两个sm单元分别位于cpu0与cpu1。
16.从图2b中可以看出,明显cpu0和cpu1的工作负载会更重(因为要运行dm单元与sm单元),而cpu2与cpu3的工作负载较轻(因为仅分别运行dm单元,而不运行sm单元),如果sm单元采用无差别对待每一个dm单元来处理写请求,会导致cpu2与cpu3处于闲置的状态,造成cpu算力的浪费,不能发挥系统的最大算力。
17.在实践中,任务处理系统还包括诸如gc单元等其他任务处理单元,cpu核的数量、各任务处理单元的数量以及主机提供的io命令的速率/类型等也存在不同,这进一步加剧了任务处理系统的复杂性,加剧了各cpu核的负载不均衡。


技术实现要素:

18.本技术提供了任务处理系统及自适应任务调度的方法,以使得不同cpu核有不同的使用频率,从而平衡多cpu核多任务在不同场景下的工作量。
19.为解决上述技术问题,本技术提供如下技术方案:
20.一种自适应任务调度的方法,包括如下步骤:获取各cpu核的工作负载;依据各cpu核的工作负载调整各cpu核的消耗权重;依据各cpu核的消耗权重对运行于各cpu核上作为生产者的任务处理单元提供的操作请求进行调度。
21.如上所述的自适应任务调度的方法,其中一示例性实施例为,依据各cpu核的工作负载调整各cpu核的消耗权重,包括:当cpu核的工作负载升高或过高,则提高该cpu核上运行的作为生产者的任务处理单元的消耗权重;当cpu核的工作负载降低或过低,则降低该cpu核上运行的作为生产者的任务处理单元的消耗权重。
22.如上所述的自适应任务调度的方法,其中一示例性实施例为,依据各cpu核的消耗
权重对运行于各cpu核上作为生产者的任务处理单元提供的操作请求进行调度,包括:cpu核的消耗权重提高时,降低该cpu核上运行的作为生产者的任务处理单元提供的操作请求被调度的几率;cpu核的消耗权重降低时,提高该cpu核上运行的作为生产者的任务处理单元提供的操作请求被调度的几率。
23.如上所述的自适应任务调度的方法,其中一示例性实施例为,对运行于各cpu核上作为生产者的任务处理单元提供的操作请求进行调度时,根据调整后cpu核的消耗权重来消耗cpu核的可用权重;根据调整后cpu核的消耗权重来消耗cpu核的可用权重时,对cpu核的可用权重与消耗权重进行判断;若cpu核的可用权重小于其消耗权重,则拒绝调用该cpu核上运行的作为生产者的任务处理单元提供的操作请求;若cpu核的可用权重不小于其消耗权重,则调用该cpu核上运行的作为生产者的任务处理单元提供的操作请求。
24.如上所述的自适应任务调度的方法,其中一示例性实施例为,若两个cpu核上运行的任务处理单元的规模相同,则为这两个cpu核维护同一消耗权重和同一可用权重。
25.如上所述的自适应任务调度的方法,其中一示例性实施例为,若为两个cpu核维护同一消耗权重和同一可用权重,则以相同的方式调度来自这两个cpu核上作为生产者的任务处理单元提供的操作请求。
26.如上所述的自适应任务调度的方法,其中一示例性实施例为,依据各cpu核的工作负载调整各cpu核的消耗权重,包括:从各cpu核的工作负载中,获取最大的工作负载与最小的工作负载;比较最大的工作负载与最小的工作负载的差值是否大于指定阈值;若大于指定阈值,则增大工作负载最大的cpu核的消耗权重。
27.如上所述的自适应任务调度的方法,其中一示例性实施例为,增大工作负载最大的cpu核的消耗权重后,判断该cpu核的消耗权重是否达到消耗权重的最大值;若该cpu核的消耗权重小于消耗权重的最大值,则继续增大该cpu核的消耗权重;若该cpu核的消耗权重等于或大于消耗权重的最大值,则减小工作负载最小的cpu核的消耗权重。
28.如上所述的自适应任务调度的方法,其中一示例性实施例为,减小工作负载最小的cpu核的消耗权重后,判断该cpu核消耗权重是否达到消耗权重的最小值;若该cpu核的消耗权重等于或小于消耗权重的最小值,则不再减小该cpu核的消耗权重;若该cpu核的消耗权重大于消耗权重的最小值,则继续减小该cpu核的消耗权重。
29.一种任务处理系统,包括:运行于cpu核上的作为生产者的任务处理单元和作为消费者的任务处理单元,其中作为消费者的任务处理单元包括任务调度子单元;任务调度子单元执行以上所述的自适应任务调度的方法。
30.相对上述背景技术,本发明所提供的任务处理系统及自适应任务调度的方法主要通过调节sm单元对不同cpu核的dm单元操作请求处理的调节,使得不同cpu核有不同的使用频率,从而可以平衡多cpu核多任务在不同场景下的工作量。
附图说明
31.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
32.图1a展示了现有技术中处理大规模并发任务的示意图;
33.图1b展示了现有技术中任务处理系统的示意图;
34.图2a展示了现有技术中不同任务处理单元在cpu核上的分布情况的示意图;
35.图2b展示了现有技术中dm单元与sm单元的交互情况的示意图;
36.图3a展示了根据本技术一个实施例的任务处理系统的示意图;
37.图3b展示了根据本技术一个实施例的sm单元的任务调度子单元的操作流程图;
38.图4a展示了根据本技术又一实施例的任务处理系统的示意图;
39.图4b展示了根据本技术再一实施例的任务处理系统的示意图
40.图5展示了根据本技术再一实施例的任务处理系统的示意图;
41.图6展示了根据本技术又一实施例的sm单元的任务调度子单元的操作流程图;
42.图7展示了根据本技术实施例的作为消费者的任务处理单元处理操作请求的流程图;
43.图8展示了根据本技术再一实施例的任务处理系统的示意图。
具体实施方式
44.下面详细描述本技术的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本技术,而不能解释为对本技术的限制。
45.请参阅图3a,图3a展示了根据本技术一个实施例的任务处理系统的示意图。
46.任务处理系统中包括dm单元和sm单元,以图3a所示为例,本技术提供的任务处理系统包括:dm0单元、dm1单元以及sm0单元,其中dm0单元与dm1单元作为生产者向sm0单元提供操作请求,sm0单元作为消费者处理dm0单元和dm1单元向其提供的操作请求。任务处理系统包括2个cpu核(cpu0与cpu1),cpu0运行dm0单元与sm0单元,而cpu1运行dm1单元。根据本技术的实施例,sm0单元循环处理来自dm0单元和dm1单元产生的操作请求,sm0单元还包括第一任务调度子单元(用s0表示),用于选择处理来自dm0单元的操作请求还是来自dm1单元的操作请求。
47.请参阅图3b,图3b展示了根据本技术一个实施例的sm单元的任务调度子单元的操作流程图。
48.sm单元的任务调度子单元根据cpu核的工作负载f与cpu核的消耗权重w对来自相应cpu核的dm单元的操作请求实施调度。
49.其中,消耗权重w是一个基于cpu核的统计参数,不是基于任务处理单元(例如:dm单元、gc单元)的参数。若一个cpu核上仅运行一个dm单元,那么该cpu核的消耗权重也就是该dm单元的消耗权重;若一个cpu核上运行有一个dm单元和一个dm’单元,那么该cpu核的消耗权重为该dm单元的消耗权重和dm’单元的消耗权重之和;若一个cpu核上运行一个dm单元和一个gc单元,那么该cpu核的消耗权重为该dm单元的消耗权重和gc单元的消耗权重之和。例如:w0代表dm0单元的消耗权重,w1代表dm1单元的消耗权重。
50.cpu核的工作负载f反映了cpu核的繁忙程度。例如:f0代表cpu0的工作负载,f1代表cpu1的工作负载,cpu核的工作负载越小,说明该cpu核越空闲,反之,cpu核的工作负载越大,说明该cpu核越繁忙。作为一个例子,用cpu核的使用率或功耗代表工作负载f,又例如,
用某一状态下指定时间内cpu核完成指定任务循环的次数loopcnt与初始状态(无任务处理)下相同的指定时间内cpu核完成指定任务循环的次数loopcntinital之比(loopcnt/loopcntinital*100)作为工作负载f,理论上初始状态的循环次数loopcntinital最大。那么,如果繁忙程度为100,则表示cpu核为完全空闲。
51.sm单元调度处理dm单元的操作请求时,以cpu核上仅运行一个dm单元为例,根据调整后cpu核的消耗权重消耗其可用权重。对于可用权重,在其他实施例中,按时间恢复dm单元的可用权重。其中,可用权重t是一个基于cpu核的统计参数,用于表示cpu核当前可用的处理能力。如图3a,例如,当dm0单元的消耗权重提高时,则降低cpu0上运行的dm0单元提供的操作请求被sm0单元调度的几率;类似地,当dm1单元的消耗权重降低时,则提高cpu1上运行的dm1单元提供的操作请求被sm0单元调度的几率。
52.根据本技术的实施例,以图3b所示为例,操作流程包括:sm0单元的第一任务调度子单元s0获取cpu0的工作负载f0和cpu1的工作负载f1(310),并根据cpu0单元的工作负载f0与cpu1单元的工作负载f1,调整dm0单元的消耗权重w0与dm1单元的消耗权重w1(320)。例如,当某个cpu核(例如:cpu 0)的工作负载升高或过高,则提高该cpu核上运行的作为生产者的任务处理单元(例如:dm0单元)的消耗权重。又例如,当某个cpu核(例如:cpu 0)的工作负载降低或过低,则降低该cpu核上运行的作为生产者的任务处理单元(例如:dm0单元)的消耗权重。任务调度子单元基于各cpu核的工作负载的情况对各cpu核的消耗权重进行调整,而且提高/降低不同dm单元的消耗权重w的操作可单独或同时被实施,以尽快实现不同cpu核负载均衡,提升处理速度,避免资源浪费。以cpu0为为例,cpu0的工作负载升高是指当前工作负载相比之前工作负载增大超过一定阈值,cpu核的工作负载过高是指当前工作负载的值超过一定阈值。
53.以图3b所示为例,操作流程还包括:sm0单元的第一任务调度子单元s0根据调整后的消耗权重w0与消耗权重w1选择处理dm0单元还是dm1单元提供的操作请求(330)。作为举例,dm0单元与dm1单元各自的可用权重(记为t0和t1)为100,而dm0单元与dm1单元的消耗权重值(记为w0和w1)为例如10。当sm0单元的第一任务调度子单元s0选择从dm0单元获取操作请求,相应地从dm0单元的可用权重t0值中减去消耗权重值w0得到dm0单元剩余的可用权重t0’(t0’=t0-w0)。根据调整后cpu核的消耗权重来消耗cpu核的可用权重时,对cpu核的可用权重与消耗权重进行判断。当sm0单元的第一任务调度子单元s0选择从dm1单元获取操作请求,相应地从dm1单元的可用权重t1值中减去消耗权重值w1得到dm1单元剩余的可用权重t1’(t1’=t1-w1)。若dm0单元的可用权重t0小于其消耗权重w0,sm0单元的第一任务调度子单元s0拒绝调用dm0单元提供的操作请求。若dm1单元的可用权重t1不小于其消耗权重w1,sm0单元的第一任务调度子单元s0调用dm1单元提供的操作请求。从而,较大的消耗权重w,意味着指定时间内对具有该消耗权重w的dm单元产生的操作请求处理的较少;而较小的消耗权重w,意味着指定时间内对具有该消耗权重w的dm单元产生的操作请求处理的较多。进一步地,通过提高消耗权重w,使得该消耗权重w所对应的dm单元被调度的几率降低,而通过降低消耗权重w,使得该消耗权重w所对应的dm单元被调度的几率增加。
54.请参阅图4a,图4a展示了根据本技术又一实施例的任务处理系统的示意图。
55.任务处理系统中包括dm单元和sm单元,以图4a所示为例,本技术提供的任务处理系统包括:dm0单元、dm1单元、dm2单元、dm3单元、sm0单元以及sm1单元。其中,dm0单元-dm3
单元作为生产者向sm0单元/sm11单元提供操作请求,sm0单元/sm1单元作为消费者处理dm0单元-dm3单元提供的操作请求。任务处理系统包括4个cpu核(cpu0、cpu1、cpu2与cpu3),cpu0用于运行dm0单元与sm0单元,而cpu1用于运行dm1单元与sm1单元,cpu2用于运行dm2单元,而cpu3用于运行dm3单元。
56.根据本技术的实施例,sm0单元/sm1单元各自循环处理来自dm0单元/dm1单元/dm2单元/dm3单元提供的操作请求,sm0单元还包括第一任务调度子单元(用s0表示),sm1单元还包括第二任务调度子单元(用s1表示),用于执行图3b展示的操作流程。第一任务调度子单元s0与第二任务调度子单元s1各自独立进行任务调度,而不受彼此的影响。
57.其他实施例中,第一任务调度子单元s0与第二任务调度子单元s1各自为dm0单元-dm3单元维护独立的消耗权重w,从而第一任务调度子单元s0对dm0单元-dm3单元的消耗权重w的调整,不影响第二任务调度子单元s1对dm0单元-dm3单元的消耗权重w的调整,同理,第二任务调度子单元s1对dm0单元-dm3单元的消耗权重w的调整,也不影响第一任务调度子单元s0对dm0单元-dm3单元的消耗权重w的调整。
58.例如,第一任务调度子单元s0维护消耗权重w00、w01、w02与w03,第二任务调度子单元s1维护消耗权重w10、w11、w12与w13,其中形如“wab”的符号中,“w”后面第一个符号a指代任务调度子单元,而第二个符号b指代dm单元,从而w01表示第一任务调度子单元s0为dm1单元维护的消耗权重,类似地,w13表示第二任务调度子单元s1为dm3单元维护的消耗权重。
59.其他实施例中,第一任务调度子单元s0与第二任务调度子单元s1还各自为dm0单元-dm3单元维护独立的可用权重t。例如,第一任务调度子单元s0维护可用权重t00、t01、t02与t03,第二任务调度子单元s1维护可用权重t10、t11、t12与t13,其中形如“tab”的符号中,“t”后面第一个符号a指代任务调度子单元,而第二个符号b指代dm单元,从而t01指示第一任务调度子单元s0为dm1单元维护的可用权重,类似地,t13指示第二任务调度子单元s1为dm3单元维护的可用权重。
60.为调度来自dm0单元-dm3单元的操作请求,第一任务调度子单元s0与第二任务调度子单元s1所获取的cpu0-cpu3的工作负载是一致的,即第一任务调度子单元s0与第二任务调度子单元s1各自获取到的某个cpu核的工作负载相同。
61.作为举例,第二任务调度子单元s1获取到cpu2的工作负载降低或低于其他cpu核的工作负载时,降低由cpu2运行的作为生产者的dm2单元的消耗权重,使得第二任务调度子单元s1更多地将dm2单元的操作请求调度给sm1单元来处理。
62.在又一种实施方式中,依然参看图4a,若两个cpu核上运行的任务处理单元的规模相同,则为这两个cpu核维护同一消耗权重和同一可用权重。规模相同是指cpu核上运行的任务处理单元数量相等,由于dm0单元与dm1单元是对等的(其均与1个sm单元共享1个cpu核),dm2单元与dm3单元是对等的(其各自独占1个cpu核),也就是cpu0上运行dm0单元和sm0单元,cpu1上运行dm1单元和sm1单元,cpu0和cpu1上运行的任务处理单元的规模相同,cpu2上运行dm2单元,cpu3上运行dm3单元,cpu2和cpu3上运行的任务处理单元的规模相同,从而第一任务调度子单元s0和第二任务调度子单元s1以相同的方式调度来自dm0单元和dm1单元的操作请求,也以相同的方式调度来自dm2单元和dm3单元的操作请求,从而简化第一任务调度子单元s0/第二任务调度子单元s1实施操作请求调度的复杂性。例如,dm0单元-dm3单元的消耗权重的比例是10:10:1:1,这意味着sm单元处理10次dm0单元和dm1单元的操作
请求和sm单元处理1次dm2单元和dm3单元的操作请求所消耗的权重是一样的。又例如,第一任务调度子单元s0为dm0单元与dm1单元维护同一消耗权重w0b,而为dm2单元与dm3单元维护同一消耗权重w0b’,第一任务调度子单元s0根据消耗权重w0b确定是否从dm0单元/dm1单元获取操作请求,而根据消耗权重w0b’确定是否从dm2单元/dm3单元获取操作请求。类似地,第二任务调度子单元s1为dm0单元与dm1单元维护同一消耗权重w1b,而为dm2单元与dm3单元维护同一消耗权重w1b’,第二任务调度子单元s1根据消耗权重w1b确定是否从dm0单元/dm1单元获取操作请求,而根据消耗权重w1b’确定是否从dm2单元/dm3单元获取操作请求。这里“以相同的方式调度”是指保持相同的几率对任务处理单元提供的操作请求进行调度。
63.其他实施例中,编号为0的第一任务调度子单元s0为dm0单元与dm1单元维护同一可用权重t0b,而为dm2单元与dm3单元维护同一可用权重t0b’;编号为1的第二任务调度子单元s1为dm0单元与dm1单元维护同一可用权重t1b,而为dm2单元与dm3单元维护同一可用权重t1b’。
64.请参阅图4b,图4b展示了根据本技术再一实施例的任务处理系统的示意图。
65.任务处理系统中包括dm单元和sm单元,以图4b所示为例,本技术提供的任务处理系统包括:dm0单元、dm1单元、dm2单元、dm3单元、sm0单元以及sm1单元。其中,dm0单元-dm3单元作为生产者向sm0单元/sm11单元提供操作请求,sm0单元/sm1单元作为消费者处理dm0单元-dm3单元提供的操作请求。任务处理系统包括4个cpu核(cpu0、cpu1、cpu2与cpu3),cpu0用于运行dm0单元与sm0单元,而cpu1用于运行dm1单元与sm1单元,cpu2用于运行dm2单元,而cpu3用于运行dm3单元。
66.根据本技术的实施例,sm0单元/sm1单元各自循环处理来自dm0单元/dm1单元/dm2单元/dm3单元提供的操作请求。其他实施例,两个sm单元(sm0单元和sm1单元)中仅一个包括任务调度子单元。例如:sm0单元包括第一任务调度子单元(用s0表示),用于执行图3b展示的操作流程。
67.继续参看图4b,若为两个cpu核维护同一消耗权重和同一可用权重,则以相同的方式调度来自这两个cpu核上作为生产者的任务处理单元提供的操作请求。由于dm0单元与dm1单元是对等(其均与1个sm单元共享1个cpu核)的,dm2单元与dm3单元是对等的(其各自独占1个cpu核),也就是cpu0上运行dm0单元和sm0单元,cpu1上运行dm1单元和sm1单元运行,cpu0和cpu1上运行的任务处理单元的规模相同,cpu2上运行dm2单元,cpu3上运行dm3单元,cpu2和cpu3上运行的任务处理单元的规模相同,从而第一任务调度子单元s0以相同的方式调度来自dm0单元和dm1单元的操作请求,也以相同的方式调度来自dm2单元和dm3单元的操作请求,从而简化第一任务调度子单元s0实施操作请求调度的复杂性。例如,dm0单元-dm3单元的消耗权重的比例是10:10:1:1,这意味着sm单元处理10次dm0单元和dm1单元的操作请求和sm单元处理1次dm2单元和dm3单元的操作请求所消耗的权重是一样的。又例如,第一任务调度子单元s0为dm0单元与dm1单元维护同一消耗权重w0b,而为dm2单元与dm3单元维护同一消耗权重w0b’,第一任务调度子单元s0根据消耗权重w0b确定是否从dm0单元/dm1单元获取操作请求,而根据消耗权重w0b’确定是否从dm2单元/dm3单元获取操作请求。
68.其他实施例中,第一任务调度子单元s0为dm0单元与dm1单元维护同一可用权重t0b,而为dm2单元与dm3单元维护同一可用权重t0b’。
69.请参阅图5,图5展示了根据本技术再一实施例的任务处理系统的示意图。
70.任务处理系统中包括dm单元、sm单元和gc单元,以图5所示为例,本技术提供的任务处理系统包括:dm0单元、dm1单元、dm2单元、dm3单元、gc0单元、gc1单元、sm0单元以及sm1单元,其中dm0单元-dm3单元与gc0单元和gc1单元都作为生产者向sm0单元/sm1单元提供操作请求,sm0单元/sm1单元作为消费者处理操作请求。任务处理系统包括4个cpu核(cpu0、cpu1、cpu2与cpu3),cpu0用于运行dm0单元与sm0单元,而cpu1用于运行dm1单元与sm0单元,cpu2用于运行dm2单元与gc0单元,cpu3用于运行dm3单元与gc1单元。从而各cpu核上运行的任务处理单元彼此相同或不同。
71.根据本技术的实施例,sm0单元/sm1单元各自循环处理来自dm0单元/dm1单元/dm2单元/dm3单元与gc0单元/gc1单元的操作请求,sm0单元还包括第一任务调度子单元(用s0表示),sm1单元还包括第二任务调度子单元(用s1表示),用于执行图3b展示的操作流程。第一任务调度子单元s0与第二任务调度子单元s1各自独立进行任务调度,而不受彼此的影响。
72.其他实施例中,第一任务调度子单元s0与第二任务调度子单元s1各自为dm0单元-dm3单元、gc0-单元gc1单元维护独立的消耗权重w。调整消耗权重依赖于对不同cpu核繁忙程度的判断,也就是依赖于cpu核的工作负载,调节消耗权重主要是调节sm单元对不同cpu核上运行的dm单元的操作请求处理的权重。其中,gc单元和sm单元是绑定的,即gc单元的操作请求一般是由固定对应的sm单元来处理,其消耗权重一般不做调节。
73.例如,编号为0的第一任务调度子单元s0维护消耗权重w0d0、w0d1、w0d2、w0d3、w0g0与w0g1,编号为1的第二任务调度子单元s1维护消耗权重w1d0、w1d1、w1d2、w1d3、w1g0、w1g1,其中形如“waxb”的符号中,“w”后面第一个符号指代任务调度子单元,而第二个符号指代作为生产者的任务处理单元(d代表dm单元,而g代表gc单元),第三个符号指代生产者任务处理单元的编号,从而w0d1表示编号为0的第一任务调度子单元s0为dm1单元维护的消耗权重,类似地,w1g1表示编号为1的第二任务调度子单元s1为gc1单元维护的消耗权重。
74.其他实施例中,第一任务调度子单元s0与第二任务调度子单元s1还各自为dm0单元-dm3单元、gc0单元-gc1单元维护独立的可用权重t。
75.例如,编号为0的第一任务调度子单元s0维护可用权重t0d0、t0d1、t0d2、t0d3、t0g0与t0g1,编号为1的第二任务调度子单元s1维护可用权重t1d0、t1d1、t1d2、t1d3、t1g0与t1g1,其中形如“taxb”的符号中,“t”后面第一个符号指代任务调度子单元的编号,而第二个符号指代作为生产者的任务处理单元(d代表dm单元,而g代表gc单元),第三个符号指代生产者任务处理单元的编号,从而t0d1指示编号为0的第一任务调度子单元s0为dm1单元维护的可用权重,类似地,t1g1指示编号为1的第二任务调度子单元s1为gc1单元维护的可用权重。
76.为调度来自dm0单元-dm3单元、gc0单元-gc1单元的操作请求,第一任务调度子单元s0与第二任务调度子单元s1获取cpu0-cpu3的工作负载,并根据工作负载情况,调整工作负载对应的cpu核上的作为生产者的任务处理单元的消耗权重。
77.作为举例,第二任务调度子单元s1获取到cpu2的工作负载降低或低于其他cpu核的工作负载时,降低由cpu2运行的生产者dm2单元和/或gc0单元的消耗权重w(基于cpu核的统计参数),使得第二任务调度子单元s1更多地将dm2单元和/gc0单元的操作请求调度给
sm1单元来处理,由于gc0单元与sm单元是绑定的,所以降低消耗权重w(基于cpu核的统计参数)主要是降低dm2单元的消耗权重。
78.虽然在上面例子中以dm单元、gc单元、sm单元为例描述了本技术实施例的任务调度方法,可以理解地,本技术的任务调度方法可应用于包括其他数量/种类的任务处理单元,以及其他数量的cpu核的任务处理系统。
79.根据本技术的进一步实施例,作为生产者的任务处理单元(dm0单元-dm3单元、gc0单元-gc1单元)通过队列向作为消费者的任务处理单元(例如sm单元)发送操作请求。作为消费者的任务处理单元根据其任务调度子单元选择的作为生产者的任务处理单元所对应的队列中获取操作请求并处理。从而若作为生产者的某任务处理单元长时间不被作为消费者的任务处理单元调度,其队列会被操作请求填满,作为生产者的任务处理单元响应于队列被填满,而不再产生操作请求。从而,任务调度子单元通过降低或停止对作为生产者的某任务处理单元的调度,能进一步减少其产生的操作请求,甚至使得作为生产者的该任务处理单元暂停工作,从而进一步降低作为生产者的该任务处理单元对cpu核资源的消耗,进而降低cpu核的工作负载。
80.需要说明的是,上述实施例任务处理单元中队列是缓存操作请求的例子,也可采用其他方式来缓存操作请求。
81.依然参看图5,作为又一种实施例,第一任务调度子单元s0/第二任务调度子单元s1对dm2单元与dm3单元所实施的调度不影响对gc0单元/gc1单元所产生的操作请求的处理。虽然存在gc0单元/gc1单元,但gc0单元/gc1单元所产生的操作请求被以其他方式进行控制,例如,控制dm单元与gc单元各自产生的操作请求的写入数据量的比例,而不基于消耗权重w来控制对gc0单元/gc1单元所产生的操作请求的处理。
82.请参阅图6,图6展示了根据本技术又一实施例的sm单元的任务调度子单元的操作流程图。
83.任务调度子单元根据图6周期性地(例如,每秒1次)或在指定情况下执行图6的操作流程以更新作为生产者的各任务处理单元的消耗权重w。
84.如图6所示的操作流程,sm单元的任务调度子单元获取各cpu核的工作负载f(610),将cpun的工作负载记为fn,其中n为cpu核的数量,为整数。
85.从各cpu核(n个cpu核)的工作负载f中,获取最大的工作负载fi_max与最小的工作负载fj_min(620),也就是cpui的工作负载fi为所有cpu核的工作负载中最大的工作负载,cpuj的工作负载fj为所有cpu核的工作负载中最小的工作负载,i和j均为整数,比较fi_max与fj_min的差值是否过大(例如,其差值是否大于指定阈值,指定阈值可以为5)(630)。如果fi_max与fj_min二者的差值过大,则表明当前各cpu核的工作负载不均衡,需要通过更新消耗权重w来调节各cpu核的工作负载f。例如,获取工作负载最大(fi_max)的cpu核(cpui),对其上所运行的作为生产者的任务处理单元(例如:dm0单元)增大其消耗权重w(640)。可以理解地,当图6的流程由作为消费者的任务处理单元(例如:sm1单元)执行时,所调整的消耗权重是该任务处理单元(sm1单元)所对应的消耗权重(例如:w1d0)。作为举例,每次增大消耗权重w时,以指定的步长更新,例如w=w 1。如果二者的差值不过大(例如,其差值是否不大于指定阈值),则表明当然各cpu核的工作负载均衡,不需要通过更新消耗权重w来调节各cpu核的工作负载,此时可以继续周期性地或在指定情况下获取各cpu核的工作负载f
(610)。
86.任务处理单元的消耗权重具有最大值(记为wmax,例如可以为16,该值可以根据情况适应性选择),还需要判断cpu核(cpui)上运行的作为生产者的任务处理单元(例如:dm0单元)的消耗权重wi是否达到消耗权重的最大值wmax(650)。当消耗权重wi未达到消耗权重的最大值wmax(即wi小于wmax),则还可以继续增大作为生产者的该任务处理单元(例如:dm0单元)的消耗权重wi(660),并可以继续周期性地或在指定情况下返回获取各cpu核的工作负载f(610),重复上述步骤。
87.当cpu核(cpui)上运行的作为生产者的任务处理单元(例如:dm0单元)的消耗权重wi已经达到消耗权重的最大值wmax(即wi大于或等于wmax)时,不再增加该消耗权重wi,而是降低工作负载最小(fj_min)的cpu核(cpuj)上所运行的作为生产者的任务处理单元(例如:dm3)的消耗权重wj(670)。作为举例,每次减小消耗权重w时,以指定的步长更新,例如w=w-1。
88.任务处理单元的消耗权重也具有最小值(记为wmin),还需要判断cpu核(cpuj)上运行的作为生产者的任务处理单元(例如:dm3)的消耗权重wj是否达到消耗权重的最小值wmin(680)。当消耗权重wj已经达到消耗权重的最小值wmin(即wj大于或等于wmin)时,不再减小该消耗权重wj(例如,不更新wj)。当消耗权重wj还未达到消耗权重的最小值wmin(即wj小于wmin)时,可以继续减小作为生产者的该任务处理单元(例如:dm3)的消耗权重wj(690),并可以继续周期性地或在指定情况下返回获取各cpu核的工作负载f(610),重复上述步骤。
89.无论如何调整消耗权重,如图6展示的操作流程,都需要返回获取cpu核的工作负载的步骤,以进行图6所展示的操作流程的下一次执行。
90.其他实施例中,上电后sm单元首次运行时,任务调度子单元还可以将其各任务处理单元的消耗权重初始化。
91.其他实施例中,任务调度子单元属于作为消费者的任务处理单元,并且仅调整其所在的作为消费者的任务处理单元所对应的作为生产者的任务处理单元(二者具有生产-消费关系,作为生产者的任务处理单元向作为消费者的任务处理单元提供操作请求)的消耗权重,而不调整非与其对应的作为生产者的任务处理单元的消耗权重。
92.其他实施例中,任务调度子单元执行图6的操作流程时,为其对应的作为生产者的任务处理单元的一个或多个、和/或一种或多种更新其消耗权重。其他实施例中,任务调度子单元根据需要或用户指示,对指定的、作为生产者的任务处理单元更新其消耗权重。
93.请参阅图7,图7展示了根据本技术实施例的作为消费者的任务处理单元处理操作请求的流程图。
94.以sm单元为例,作为消费者的任务处理单元获取要调度的作为生产者的任务处理单元i(710)。在存在多个作为生产者的任务处理单元的情况下(例如:dm0单元-dm3单元,gc0单元-gc1单元),以例如轮转或加权轮转方式选择要调度的、作为生产者的任务处理单元i。
95.判断作为生产者的任务处理单元i是否可被调度,例如,判断其可用权重ti是否大于等于其当前的消耗权重wi(720)。若其可用权重ti不大于其消耗权重wi,则作为生产者的任务处理单元i不可被调度,则返回获取其他要调度的任务处理单元。若其可用权重ti大于
等于其消耗权重wi,则作为生产者的任务处理单元i可被调度,相应地,从其可用权重ti中减去其消耗权重wi以指示对可用权重ti的消耗(730),并获取来自作为生产者的该任务处理单元i的操作消息进行处理(740)。
96.其他实施例中,响应于指定时间过后自动恢复或响应于用户指令恢复例如指定量的可用权重,以便对操作消息的处理进行调度和管理。
97.请参阅图8,图8展示了根据本技术再一实施例的任务处理系统的示意图。
98.任务处理系统中包括dm单元、sm单元和gc单元,以图8所示为例,本技术提供的任务处理系统包括:dm0单元-dm3单元、sm0单元-sm1单元以及gc0单元-gc1单元,其中dm0单元-dm3单元作为生产者向sm0单元-sm1单元提供操作请求,sm0单元-sm1单元作为消费者处理操作请求。任务处理系统还包括4个cpu核(cpu0、cpu1、cpu2与cpu3),cpu0用于运行dm0单元、gc0单元与sm0单元,而cpu1用于运行dm1单元、gc1单元与sm1单元,cpu2用于运行dm2单元,而cpu3用于运行dm3单元。
99.根据本技术的实施例,sm0单元/sm1单元各自循环处理来自dm0单元/dm1单元/dm2单元/dm3单元与gc0单元/gc1单元的操作请求,sm0单元还包括第一任务调度子单元s0,sm1还包括第二任务调度子单元s1,第一任务调度子单元s0和第二任务调度子单元s1各自独立进行任务调度,而不受彼此的影响。
100.其他实施例,第一任务调度子单元s0与第二任务调度子单元s1各自为cpu0、cpu1、cpu2与cpu3维护独立的消耗权重。从而即使cpu核上运行了诸如dm单元、gc单元、sm单元等多个任务处理单元,也为该cpu核维护单一的消耗权重。
101.例如,第一任务调度子单元s0维护消耗权重w00、w01、w02与w03,第二任务调度子单元s1维护消耗权重w10、w11、w12与w13,其中形如“wab”的符号中,“w”后面第一个符号指代任务调度子单元,而第二个符号指代cpu核,从而w01表示编号为0的第一任务调度子单元s0为cpu1维护的消耗权重,类似地,w13表示编号为1的第二任务调度子单元s1为cpu3维护的消耗权重。其他实施例,编号为0的第一任务调度子单元s0为cpu0-cpu3维护独立的可用权重t01、t01、t02与t03,编号为1的第二任务调度子单元s1为cpu0-cpu3维护独立的可用权重t10、t11、t12与t13,其中形如“tab”的符号中,“t”后面第一个符号指代任务调度子单元,而第二个符号指代cpu核,从而t01表示编号为0的第一任务调度子单元s0为cpu1维护的可用权重,类似地,t13表示编号为1的第二任务调度子单元s1为cpu3维护的可用权重。
102.第一任务调度子单元s0与第二任务调度子单元s1各自根据消耗权重与可用权重调度处理来自不同cpu核的dm单元和/或gc单元的操作请求。以第一任务调度子单元s0为例,当可用权重t00大于消耗权重w00,来自dm0单元/gc单元的操作请求可被sm0单元调度处理。
103.第一任务调度子单元s0与第二任务调度子单元s1各自还根据所获取的cpu0-cpu3的工作负载调整为各cpu核所维护的消耗权重。例如,当某cpu核的工作负载显著高于其他cpu核时,增加该cpu核的消耗权重;当某cpu核的工作负载显著低于其他cpu核时,降低该cpu核的消耗权重。也参看例如图6,cpu0-cpu3中的最大工作负载fi_max与最小工作负载fj_min的差大于指定阈值,对具有最大工作负载的cpui,提升其消耗权重,和/或对具有最小工作负载的cpuj,降低其消耗权重。
104.由于cpu核的消耗权重改变,使得该cpu核上所运行的dm单元或gc单元的操作请求
被调度处理的几率相应变化。
105.其他实施例中,第一任务调度子单元s0/第二任务调度子单元s1以相同的方式调度来自dm0单元/dm1单元的操作请求,以相同的方式调度来自gc0单元/gc1单元的操作请求,也以相同的方式调度来自dm2单元/dm3单元的操作请求,从而第一任务调度子单元s0/第二任务调度子单元s1各自为dm0单元/dm1单元维护单一的消耗权重,为dm2/dm3维护单一的消耗权重,以简化第一任务调度子单元s0/第二任务调度子单元s1实施操作请求调度的复杂性,而gc0单元和gc1单元和sm单元是绑定的,其消耗权重是无法调节的。例如,第一任务调度子单元s0为运行dm0单元的cpu0与运行dm1单元的cpu1维护同一消耗权重w0b,而为运行dm2单元的cpu2与运行dm3单元的cpu3维护同一消耗权重w0b’。类似地,第二任务调度子单元为运行dm0单元的cpu0与运行dm1单元的cpu1维护同一消耗权重w1b,而为运行dm2单元的cpu2与运行dm3单元的cpu3维护同一消耗权重w1b’。
106.其他实施例中,第一任务调度子单元s0为运行dm0单元的cpu0与运行dm1单元的cpu1维护同一可用权重t0b,而为运行dm2单元的cpu2与运行dm3单元的cpu3维护同一可用权重t0b’;第二任务调度子单元为运行dm0单元的cpu0与运行dm1单元的cpu1维护同一可用权重t1b,而为运行dm2单元的cpu2与运行dm3单元的cpu3维护同一可用权重t1b’。
107.其他实施例中,两个sm单元中仅一个包括任务调度子单元。
108.本技术基于任务划分权重以及调度权重,主要通过调节sm单元对不同cpu核的dm单元操作请求处理的调节,使得在不同应用场景下,可以自适应调整不同cpu核有不同的使用频率,从而可以平衡多cpu核多任务在不同场景下的工作量,使得不同cpu有相同的使用频率。
109.对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化囊括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。
110.此外,应当理解,虽然本说明书按照实施方式加以描述,但并非每个实施方式仅包含一个独立的技术方案,说明书的这种叙述方式仅仅是为清楚起见,本领域技术人员应当将说明书作为一个整体,各实施例中的技术方案也可以经适当组合,形成本领域技术人员可以理解的其他实施方式。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献