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

一种任务调度方法、装置、设备以及存储介质与流程

2022-02-21 04:59:37 来源:中国专利 TAG:


1.本技术涉及计算机视觉技术领域,具体涉及一种任务调度方法、装置、设备以及存储介质。


背景技术:

2.超线程技术,是指在中央处理器cpu中提供至少两个逻辑线程,以将cpu模拟为至少两个逻辑cpu的技术。在所述至少两个cpu中可以分别执行任务。
3.混合部署,是指将不同优先级的任务部署到相同的物理资源上,达到共享资源的目的。任务的优先级可以根据业务需求进行设定。在混合部署中,相同优先级的任务所需的资源相同,不同优先级的任务所需的资源不同。如果所述至少两个cpu同时执行不同优先级的任务,则可能发生资源竞争的现象。
4.为了避免这种现象,则需要在所述至少两个cpu中有一个cpu在执行最高优先级的任务时,对另一cpu中的任务进行任务驱逐,即驱逐其它优先级任务,保证另一cpu也必须执行最高优先级的任务。从而既能避免发生资源竞争,也能保证最高优先级任务优先执行。
5.目前,在发生任务驱逐时,可以通过cpu搭载的任务调度器从就绪队列中临时迁出其它优先级任务,从而保住任务调度器只能从就绪队列中调度最高优先级任务。完成任务驱逐后可以再将迁出的其它优先级任务迁回所述就绪队列,从而保证任务调度器可以正常调度任务。如此操作,在任务驱逐的情形下,可能由于任务出入就绪队列可能带来高开销操作,从而降低任务调度效率,引起任务延迟与抖动。


技术实现要素:

6.有鉴于此,本技术公开一种任务调度方法。该方法应用于基于超线程技术得到的至少两个逻辑处理器cpu中的第一cpu;所述第一cpu对应的任务调度器维护了至少两个任务列表;所述至少两个任务列表分别用于存储所述第一cpu执行的不同优先级的任务;
7.所述方法包括:
8.获取所述至少两个逻辑处理器cpu中除所述第一cpu之外的第二cpu正在执行的任务的优先级;
9.响应于所述第二cpu正在执行的任务的优先级为最高优先级,通过所述任务调度器,从与所述最高优先级对应的第一任务列表中获取满足调度条件的任务进行执行以在需要任务驱逐的情形下完成任务调度。
10.在一些实施例中,所述方法还包括:
11.响应于所述第二cpu正在执行的任务的优先级不是最高优先级,通过所述任务调度器,从所述至少两个任务列表中获取满足所述调度条件的任务进行执行以在不需要任务驱逐的情形下完成任务调度。
12.在一些实施例中,所述任务调度器为完全公平调度器cfs;所述第一cpu维护了所述不同优先级的任务分别对应的虚拟时长;所述调度条件包括最小虚拟时长;
13.所述通过所述任务调度器,从与所述最高优先级对应的第一任务列表中获取满足调度条件的任务,包括:
14.通过所述cfs,从所述第一任务列表中获取最小虚拟时长对应的任务;
15.所述通过所述任务调度器,从所述至少两个任务列表中获取满足所述调度条件的任务,包括:
16.通过所述cfs,从所述至少两个任务列表中获取最小虚拟时长对应的任务。
17.在一些实施例中,所述至少两个任务列表还包括与其它优先级对应的第二任务列表;所述第一任务列表包括第一红黑树;所述第二任务列表包括第二红黑树;所述第一红黑树维护了所述第一任务列表中各任务中对应的第一最小虚拟时长;所述第二红黑树维护了所述第二任务列表中各任务对应的第二最小虚拟时长;
18.所述第一cpu还维护了第一变量与第二变量;其中,所述第一变量指示在进行驱逐任务之前,所述第一最小虚拟时长与所述第二最小虚拟时长之间的差距;第二变量指示在进行至少一次任务驱逐的情形下,因为任务驱逐造成的所述第一最小虚拟时长与所述第二最小虚拟时长之间的累计差距;
19.所述方法还包括:
20.在需要任务驱逐的情形下,在进行任务调度之前,响应于本次调度为首次驱逐调度,根据当前第一最小虚拟时长,当前第二最小虚拟时长和当前第二变量,更新所述第一变量。
21.在一些实施例中,所述方法还包括:
22.在不需要任务驱逐的情形下,在进行任务调度之前,响应于本次调度为进行任务驱逐之后的首次非驱逐调度,根据当前第一最小虚拟时长,当前第二最小虚拟时长和当前第一变量,更新所述第二变量。
23.在一些实施例中,所述通过所述cfs,从所述至少两个任务列表中获取最小虚拟时长对应的任务,包括:
24.比较所述第二最小虚拟时长与更新后的所述第二变量之和,与所述第一最小虚拟时长的大小;
25.响应于所述第二最小虚拟时长与更新后的所述第二变量之和,小于所述第一最小虚拟时长,通过所述cfs,从所述第二红黑树中获取与所述第二最小虚拟时长对应的任务;
26.响应于所述第二最小虚拟时长与更新后的所述第二变量之和,大于或等于所述第一最小虚拟时长,通过所述cfs,从所述第一红黑树中获取与所述第一最小虚拟时长对应的任务。
27.在一些实施例中,所述方法还包括:
28.获取待处理任务的优先级;所述待处理任务包括需要迁入或迁出所述第一cpu的任务;
29.在所述待处理任务的优先级为最高优先级的情形下,针对所述第一红黑树对所述待处理任务进行相应处理;
30.在所述待处理任务的优先级为其它优先级的情形下,针对所述第二红黑树对所述待处理任务进行相应处理。
31.在一些实施例中,在迁入所述待处理任务之前或迁出所述待处理任务之后,还包
括:
32.响应于所述第一红黑树与所述第二红黑树中至少一个红黑树不包括任意任务,并且所述第一cpu并未执行所述至少一个红黑树对应优先级的任务,将所述第一最小虚拟时长与所述第二最小虚拟时长更新为二者中的最大值。
33.在一些实施例中,在更新所述第一变量之后,还包括:
34.响应于更新后的所述第一变量小于或等于0,将所述第一变量置为预设数值用于增加所述第二最小虚拟时长。
35.本技术还提出一种任务调度装置,应用于基于超线程技术得到的至少两个逻辑处理器cpu中的第一cpu;所述第一cpu对应的任务调度器维护了至少两个任务列表;所述至少两个任务列表分别用于存储所述第一cpu执行的不同优先级的任务;
36.所述装置包括:
37.获取模块,获取所述至少两个逻辑处理器cpu中除所述第一cpu之外的第二cpu正在执行的任务的优先级;
38.第一调度模块,响应于所述第二cpu正在执行的任务的优先级为最高优先级,通过所述任务调度器,从与所述最高优先级对应的第一任务列表中获取满足调度条件的任务进行执行以在需要任务驱逐的情形下完成任务调度。
39.在一些实施例中,所述装置还包括:
40.第二调度模块,响应于所述第二cpu正在执行的任务的优先级不是最高优先级,通过所述任务调度器,从所述至少两个任务列表中获取满足所述调度条件的任务进行执行以在不需要任务驱逐的情形下完成任务调度。
41.在一些实施例中,所述任务调度器为完全公平调度器cfs;所述第一cpu维护了所述不同优先级的任务分别对应的虚拟时长;所述调度条件包括最小虚拟时长;
42.所述第一调度模块,具体用于:
43.通过所述cfs,从所述第一任务列表中获取最小虚拟时长对应的任务;
44.所述第二调度模块,具体用于:
45.通过所述cfs,从所述至少两个任务列表中获取最小虚拟时长对应的任务。
46.在一些实施例中,所述至少两个任务列表还包括与其它优先级对应的第二任务列表;所述第一任务列表包括第一红黑树;所述第二任务列表包括第二红黑树;所述第一红黑树维护了所述第一任务列表中各任务中对应的第一最小虚拟时长;所述第二红黑树维护了所述第二任务列表中各任务对应的第二最小虚拟时长;
47.所述第一cpu还维护了第一变量与第二变量;其中,所述第一变量指示在进行驱逐任务之前,所述第一最小虚拟时长与所述第二最小虚拟时长之间的差距;第二变量指示在进行至少一次任务驱逐的情形下,因为任务驱逐造成的所述第一最小虚拟时长与所述第二最小虚拟时长之间的累计差距;
48.所述装置还包括:
49.第一变量更新模块,在需要任务驱逐的情形下,在进行任务调度之前,响应于本次调度为首次驱逐调度,根据当前第一最小虚拟时长,当前第二最小虚拟时长和当前第二变量,更新所述第一变量。
50.在一些实施例中,所述装置还包括:
51.第二变量更新模块,在不需要任务驱逐的情形下,在进行任务调度之前,响应于本次调度为进行任务驱逐之后的首次非驱逐调度,根据当前第一最小虚拟时长,当前第二最小虚拟时长和当前第一变量,更新所述第二变量。
52.在一些实施例中,所述第二调度模块,具体用于:
53.比较所述第二最小虚拟时长与更新后的所述第二变量之和,与所述第一最小虚拟时长的大小;
54.响应于所述第二最小虚拟时长与更新后的所述第二变量之和,小于所述第一最小虚拟时长,通过所述cfs,从所述第二红黑树中获取与所述第二最小虚拟时长对应的任务;
55.响应于所述第二最小虚拟时长与更新后的所述第二变量之和,大于或等于所述第一最小虚拟时长,通过所述cfs,从所述第一红黑树中获取与所述第一最小虚拟时长对应的任务。
56.在一些实施例中,所述装置还包括:
57.任务维护模块,获取待处理任务的优先级;所述待处理任务包括需要迁入或迁出所述第一cpu的任务;
58.在所述待处理任务的优先级为最高优先级的情形下,针对所述第一红黑树对所述待处理任务进行相应处理;
59.在所述待处理任务的优先级为其它优先级的情形下,针对所述第二红黑树对所述待处理任务进行相应处理。
60.在一些实施例中,所述装置还包括:
61.同步模块,响应于所述第一红黑树与所述第二红黑树中至少一个红黑树不包括任意任务,并且所述第一cpu并未执行所述至少一个红黑树对应优先级的任务,将所述第一最小虚拟时长与所述第二最小虚拟时长更新为二者中的最大值。
62.在一些实施例中,所述装置还包括:
63.设置模块,响应于更新后的所述第一变量小于或等于0,将所述第一变量置为预设数值用于增加所述第二最小虚拟时长。
64.本技术还提出一种电子设备,包括:
65.处理器;
66.用于存储处理器可执行指令的存储器;
67.其中,所述处理器通过运行所述可执行指令以实现如前述如任一实施例示出的任务调度方法。
68.本技术还提出一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序用于使处理器执行如前述如任一实施例示出的任务调度方法。
69.在前述实施例公开的技术方案中,由于第一cpu对应的任务调度器维护了至少两个任务列表;所述至少两个任务列表分别用于存储所述第一cpu执行的不同优先级的任务,因此,在发生驱逐现象的情形下,可以直接从优先级最高的等级对应的第一任务列表中获取优先级最高的任务进行执行,避免任务出入队列带来高开销操作,提升了任务调度效率,从而可能避免任务延迟与抖动。
70.应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本技术。
附图说明
71.为了更清楚地说明本技术一个或多个实施例或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术一个或多个实施例中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
72.图1为本技术示出的一种任务调度方法的方法流程图;
73.图2为本技术示出的一种图像处理方法的方法流程图;
74.图3为本技术示出的一种非驱逐调度方法的流程示意图;
75.图4为本技术示出的一种在红黑树中维护任务的方法流程示意图;
76.图5为本技术示出的一种任务调度装置的结构示意图;
77.图6为本技术示出的一种电子设备的硬件结构示意。
具体实施方式
78.下面将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本技术相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本技术的一些方面相一致的设备和方法的例子。
79.在本技术使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本技术。在本技术和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。还应当理解,本文中所使用的词语“如果”,取决于语境,可以被解释成为“在
……
时”或“当
……
时”或“响应于确定”。
80.本技术提出一种任务调度方法。该方法通过维护至少两个分别存储不同等级任务的任务列表,使得在发生驱逐现象的情形下,可以直接从优先级最高的等级对应的第一任务列表中获取优先级最高的任务进行执行,避免任务出入队列带来高开销操作,提升了任务调度效率,从而可能避免任务延迟与抖动。
81.请参见图1,图1为本技术示出的一种任务调度方法的方法流程图。如图1所示,所述方法可以包括s102-s104。
82.所述方法可以应用于基于超线程技术得到的至少两个逻辑处理器cpu中的第一cpu;所述第一cpu对应的任务调度器维护了至少两个任务列表;所述至少两个任务列表分别用于存储所述第一cpu执行的不同优先级的任务。
83.所述第一cpu可以是所述至少两个逻辑cpu中的任意cpu。所述第一cpu对应有任务调度器。
84.所述任务调度器,可以用于从任务列表中调度任务,供所述第一cpu执行。所述任务调度器可以是任意类型的调度器。在一些实施例中,所述任务调度器可以是cfs(completely fair scheduler,完全公平任务调度器)。
85.所述任务列表,可以用于通过预设的数据存储格式存储分配给所述第一cpu的任务。在本技术中,所述至少两个任务列表可以相当于任务调度器对应的就绪队列(存放任务的队列)。在一些实施例中所述任务列表可以链表,二叉树,红黑树等数据存储格式存储任
务。
86.所述任务可以是指cpu执行的业务。在不同的阶段所述业务可能有不同的名称。例如,在就绪队列阶段,业务可能被称为实体。在cpu执行阶段,业务可能被称为进程。本技术将业务统称为任务。
87.所述优先级可以指示任务的执行顺序。当同一超线程下的两个cpu执行不同优先级的任务时,需要优先保证执行高优先级任务。在本技术中可以根据业务需求为任务分配优先级。任务优先级可以包括至少两级。
88.s102,获取所述至少两个逻辑处理器cpu中除所述第一cpu之外的第二cpu正在执行的任务的优先级。
89.所述第二cpu可以是至少一个cpu。
90.在一些实施例中,所述第一cpu中可以设置任务标识。该标识可以指示第二cpu中正在执行的任务优先级。所述第二cpu可以监控自身执行的任务的优先级,如果发现正在执行最高优先级的任务,则会向所述第一cpu发送指令,以将所述任务标识置为第一标识,如果发现正在执行其它优先级的任务,则会向所述第一cpu发送指令,以将所述任务标识置为第二标识。
91.在执行s102时,所述第一cpu通过获取当前任务标识,即可获取所述第二cpu正在执行的任务的优先级。
92.在一些实施例中,在执行s102时,所述第一cpu可以向所述第二cpu发生任务优先级获取指令,所述第二cpu可以响应于该指令,将正在执行的任务优先级发送至所述第一cpu。
93.s104,响应于所述第二cpu正在执行的任务的优先级为最高优先级,通过所述任务调度器,从与所述最高优先级对应的第一任务列表中获取满足调度条件的任务进行执行以在需要任务驱逐的情形下完成任务调度。
94.如果所述第二cpu正在执行的任务的优先级为最高优先级,则在所述第一cpu中需要进行任务驱逐。任务驱逐可以包括两种场景。
95.场景一:第一cpu当前并未执行任务,需要获取下一任进行执行,此时可以直接从第一任务列表获取满足调度条件的最高优先级任务。
96.场景二,第一cpu当前正在执行其它优先级任务,此时需要暂停执行其它优先级任务,并从第一任务列表获取满足调度条件的最高优先级任务。
97.任务调度器通常都有任务调度原则,在调度任务时,会基于预设的调度原则获取满足调度条件的任务。本技术示出的调度条件即为与任务调度器对应的调度条件。
98.在前述方案中,由于第一cpu对应的任务调度器维护了至少两个任务列表;所述至少两个任务列表分别用于存储所述第一cpu执行的不同优先级的任务,因此,在发生驱逐现象的情形下,可以直接从优先级最高的等级对应的第一任务列表中获取优先级最高的任务进行执行,避免任务出入队列带来高开销操作,提升了任务调度效率,从而可能避免任务延迟与抖动。
99.在一些实施例中,所述任务调度器为cfs。所述第一cpu维护了所述不同优先级的任务分别对应的虚拟时长。所述调度条件包括最小虚拟时长。
100.cfs会为任务列表中的每一个任务分配一个虚拟时长。如果一个任务被调度执行,
其对应的虚拟时长将不断增大,没有得到执行的任务的虚拟时长不变。优先级越高的任务,初始虚拟时长越小,在执行一次任务时,虚拟时长增长的速度越慢。
101.cfs对应的调度条件为最小虚拟时长。即cfs可以选择最低虚拟时长对应的任务执行。
102.在执行s104时,可以执行s1041,通过所述cfs,从所述第一任务列表中获取最小虚拟时长对应的任务。由此可以使第一cpu获取最高优先级的任务中,最小虚拟时长对应的任务进行执行。
103.在一些实施例中,在不需要驱逐时,所述第一cpu可以从所述至少两个任务列表中获取满足所述调度条件的任务,以正常获取任务进行执行。
104.请参见图2,图2为本技术示出的一种图像处理方法的方法流程图。如图2所示,该方法除了s102-s104时,还包括与s104并列的s106。
105.s106,响应于所述第二cpu正在执行的任务的优先级不是最高优先级,通过所述任务调度器,从所述至少两个任务列表中获取满足所述调度条件的任务进行执行以在不需要任务驱逐的情形下完成任务调度。
106.如果所述第二cpu正在执行的任务的优先级不是最高优先级,则所述第一cpu中不需要进行任务驱逐。由此在不需要任务驱逐时,所述第一cpu可以从所述至少两个任务列表中获取满足所述调度条件的任务进行,以正常获取满足调度条件的任务进行执行。
107.在一些实施例中,所述任务调度器为cfs。所述第一cpu维护了所述不同优先级的任务分别对应的虚拟时长。所述调度条件包括最小虚拟时长。
108.在执行s106时,可以执行s1061,通过所述cfs,从所述至少两个任务列表中获取最小虚拟时长对应的任务。由此可以使第一cpu获取全部优先级的任务中,最小虚拟时长对应的任务进行执行。
109.在一些实施例中,可以用任务调度器(cfs)对应的至少两个任务列表可以包括红黑树。红黑树是一种自平衡二叉查找树。红黑树可以自动维护最小键值,即可以确定各节点中最小键值对应的节点,并将该节点放在预设的位置上,便于查询。
110.在本技术中所述红黑树包括的节点的键值可以基于任务的虚拟时长确定。节点存储的信息可以基于任务信息确定。红黑树可以在迁入和迁出任务,以及在cpu完成正在执行的任务时,维护当前最小虚拟时长,从而方便获取最小虚拟时长对应的任务。
111.在发生驱逐的情形下,最高优先级任务的虚拟时长将会由于任务被执行而逐渐增大,从而最高优先级任务对应的红黑树维护的最小虚拟时长也会增大。而其它优先级任务的虚拟时长将由于任务不被执行而保持不变,其它优先级任务对应的红黑树维护的最小虚拟时长也会保持不变。如此操作,通过驱逐将可能增加其它优先级任务的优先级。这是不被允许的。
112.例如,假设第一cpu需要执行高优先级任务a、b与低优先级任务1、2。由于第一cpu中发生驱逐,导致不断执行高优先级任务ab,这将导致低优先级任务1和2对应的虚拟时长可能远小于任务ab。当驱逐消失时,将可能在很长的一段时间内都会执行低优先级任务1和2。这相当于通过驱逐增加了低优先级任务的优先级。这种情形不被允许。
113.为了解决前述问题,在本技术中加入第一变量与第二变量,用于记录由于发生驱逐而导致的最高优先级对应的红黑树和其它优先级对应的红黑树所维护的最小虚拟时长
之间的差距,便于对其它优先级任务的虚拟时长做出补偿,以抵消由于驱逐带来的所述差距。在一些实施例中,可以通过其它优先级任务的虚拟时长加上所述差距即可得到补偿后的真实虚拟时长。
114.以下结合实施例对第一变量与第二变量的更新方法进行说明。
115.在一些实施例中,所述至少两个任务列表还包括与其它优先级对应的第二任务列表;所述第一任务列表包括第一红黑树;所述第二任务列表包括第二红黑树;所述第一红黑树维护了所述第一任务列表中各任务中对应的第一最小虚拟时长;所述第二红黑树维护了所述第二任务列表中各任务对应的第二最小虚拟时长。
116.所述第一cpu还维护了第一变量与第二变量;其中,所述第一变量指示在进行驱逐任务之前,所述第一最小虚拟时长与所述第二最小虚拟时长之间的差距;第二变量指示在进行至少一次任务驱逐的情形下,因为任务驱逐造成的所述第一最小虚拟时长与所述第二最小虚拟时长之间的累计差距。本技术中可以将第一变量记为start,将第二变量记为spread。
117.在本技术中可以通过步骤s21更新第一变量。
118.s21,在需要任务驱逐的情形下,在进行任务调度之前,响应于本次调度为首次驱逐调度,根据当前第一最小虚拟时长,当前第二最小虚拟时长和当前第二变量,更新所述第一变量。
119.首次驱逐调度,是指在需要任务驱逐的情形下,cfs进行的首次调度。
120.由此可以准确记录发生驱逐之前,所述第一最小虚拟时长与所述第二最小虚拟时长之间的差距,从而便于在完成驱逐后,确定因为任务驱逐造成的所述第一最小虚拟时长与所述第二最小虚拟时长之间的累计差距(即第二变量),进而便于对驱逐造成的虚拟时长差距进行补偿。
121.在一些实施例中,执行s21时,可以执行s211-s212。
122.s211,在确定需要任务驱逐的情形下,通过判断第一变量是否为初始值(例如可以是0)来判断本次调度是否为首次驱逐调度。
123.一方面,本技术中会在以下两种情形中将第一变量置为初始值。
124.其一,响应于所述第一红黑树与所述第二红黑树中至少一个红黑树不包括任意任务,并且所述第一cpu并未执行所述至少一个红黑树对应优先级的任务时,将第一变量置为初始值。这可以理解为对第一变量的初始化。
125.其二,在完成驱逐进入非驱逐情形时,可以在更新第二变量之后将第一变量置为所述初始值(更新第二变量的方法在后续说明)。
126.另一方面,本技术会在首次驱逐调度之前,将第一变量更新为其它数值(可能是非初始值)。
127.由于前述两方面,如果在确定需要任务驱逐的情形下,所述第一变量为初始值,则说明本次调度为首次驱逐调度。如果所述第一变量不是所述初始值,则说明本次调度不是首次驱逐调度。
128.s212,响应于本次调度为首次驱逐调度,根据当前第一最小虚拟时长,当前第二最小虚拟时长和当前第二变量,更新所述第一变量。
129.所述第一变量,可以理解为首次驱逐调度之前所述第一最小虚拟时长与所述第二
最小虚拟时长之间的真实差距。
130.在执行s212时,可以通过当前第二最小虚拟时长与当前第二变量之和得到对之前发生的驱逐进行补偿后的真实第二最小虚拟时长;通过确定真实第二最小虚拟时长与当前第一虚拟时长之间的差距来更新为所述第一变量。
131.举例来说,假设前述预设的初始值为0。在确定需要任务驱逐的情形下,可以判断当前第一变量start的值是否为0。如果是,可以说明此次任务驱逐为首次任务驱逐,然后可以根据以下公式(1)进行start变量的更新。
132.start=min_vrt
under-min_vrt
high
spread................1;
133.其中,start表示第一变量,spread表示第二变量,min_vrt
under
表示第二最小虚拟时长,min_vrt
high
表示第一最小虚拟时长。其中,min_vrt
under
spread可以得到对之前发生的驱逐进行补偿后的真实第二最小虚拟时长,然后再与min_vrt
high
相减,可以得到首次驱逐调度之前所述第一最小虚拟时长与所述第二最小虚拟时长之间的真实差距,即此刻的start。
134.在本技术中可以通过步骤s22更新第二变量。
135.s22,在不需要任务驱逐的情形下,在进行任务调度之前,响应于本次调度为进行任务驱逐之后的首次非驱逐调度,根据当前第一最小虚拟时长,当前第二最小虚拟时长和当前第一变量,更新所述第二变量。
136.首次非驱逐调度,是指在经过驱逐后不需要任务驱逐的情形下,cfs进行的首次调度。
137.由此可以准确记录完成驱逐后,因为任务驱逐造成的所述第一最小虚拟时长与所述第二最小虚拟时长之间的累计差距(即第二变量),进而便于对驱逐造成的虚拟时长差距进行补偿。
138.在一些实施例中,执行s22时,可以执行s221-s222。
139.s221,在确定不需要任务驱逐的情形下,通过判断第一变量是否为初始值(例如可以是0)来判断本次调度是否为首次非驱逐调度。
140.基于与s211中相似原理,如果在确定不需要任务驱逐的情形下,所述第一变量为其它数值,则说明本次调度为发生驱逐之后的首次非驱逐调度。如果所述第一变量为初始值,则说明本次调度不是首次非驱逐调度。
141.s222,响应于本次调度为进行任务驱逐之后的首次非驱逐调度,根据当前第一最小虚拟时长,当前第二最小虚拟时长和当前第一变量,更新所述第二变量。
142.所述第二变量,可以理解为经过驱逐之后所述第一最小虚拟时长与所述第二最小虚拟时长之间的累计差距。
143.而所述第一变量可以理解为,发生最后一次驱逐之前,第一最小虚拟时长与第二最小虚拟时长之间已存在的差距。
144.在执行s222时,可以通过当前第二最小虚拟时长与当前第一最小虚拟时长之间的差值,确定进行最后一次驱逐后,所述第二最小虚拟时长与所述第一最小虚拟时长新增的差距。将新增的差距加上进行最后一次驱逐之前已存在的差距(即第一变量),得到所述累计差距以更新所述第二变量。
145.举例来说,假设前述预设的初始值为0。在确定不需要任务驱逐的情形下,可以判
断当前第一变量start的值是否为0。如果不是,可以说明此次任务驱逐为首次非任务驱逐,然后可以根据以下公式(2)进行spread变量的更新。
146.spread=min-vrt
high-min-vrt
under
start................2;
147.其中,start表示第一变量,spread表示第二变量,min-vrt
under
表示第二最小虚拟时长,min_vrt
high
表示第一最小虚拟时长。其中,min_vrt
high-min_vrt
under
可以得到进行最后一次驱逐后,所述第二最小虚拟时长与所述第一最小虚拟时长新增的差距,然后再与start相加,即与进行最后一次驱逐之前已存在的差相加,得到由任务驱逐带来的累计差距,即spread。之后还可以将start置为0,使得在下一次非驱逐任务中可以不对spread进行更新。
148.在更新所述第二变量之后,则可以记录由于驱逐造成的所述第一最小虚拟时长与所述第二最小虚拟时长之间的累计差距,由此可以基于该累计差距对第二最小虚拟时长进行补偿,以抵消驱逐带来的虚拟时长差距。
149.在一些实施例中,执行s21得到的所述第一变量可能是小于或等于0的,这种情形下,执行s22更新的第二变量也可能小于等于0,在基于第二变量对第二虚拟时长做出补偿时,反而有可能会减小第二虚拟时长的数值,提升其它优先级任务的优先级,这是不被允许的。
150.在本技术中,可以响应于更新后的所述第一变量小于或等于0,将所述第一变量置为预设数值用于增加所述第二最小虚拟时长。本技术中可以将是所述预设数值记为∈。
151.所述预设数值∈为预设正数。将所述第一变量置为预设数值可以保证s22更新的第二变量一定为大于0的数,从而保证利用第二变量补偿第二最小虚拟时长时,会增加第二最小虚拟时长,而不会减小第二最小虚拟时长,进而避免提升其它优先级任务的优先级。
152.在一些实施例中,在执行s1061时,cfs可以基于补偿过的真实的第二虚拟时长进行非驱逐调度。非驱逐调度是指在不需要任务驱逐的情形下,cfs进行的任务调度。
153.请参见图3,图3为本技术示出的一种非驱逐调度方法的流程示意图。图3示出的步骤为对s1061的详细说明。如图3所示,在执行s1061时,所述方法可以包括s301-s303。
154.s301,比较所述第二最小虚拟时长与更新后的所述第二变量之和,与所述第一最小虚拟时长的大小。
155.所述第二最小虚拟时长与更新后的所述第二变量之和,即为对驱逐造成的差距进行补偿后得到的真实第二最小虚拟时长。
156.s302,响应于所述第二最小虚拟时长与更新后的所述第二变量之和,小于所述第一最小虚拟时长,通过所述cfs,从所述第二红黑树中获取与所述第二最小虚拟时长对应的任务。
157.s303,响应于所述第二最小虚拟时长与更新后的所述第二变量之和,大于或等于所述第一最小虚拟时长,通过所述cfs,从所述第一红黑树中获取与所述第一最小虚拟时长对应的任务。
158.根据cfs调度原则,如果所述第二最小虚拟时长与更新后的所述第二变量之和,小于所述第一最小虚拟时长,则说明当前应该执行第二红黑树中的任务,由此可以从所述第二红黑树中获取与所述第二最小虚拟时长对应的其它优先级的任务。如果所述第二最小虚拟时长与更新后的所述第二变量之和,大于或等于所述第一最小虚拟时长,则说明当前应
该执行第一红黑树中的任务,由此可以从所述第二红黑树中获取与所述第二最小虚拟时长对应的最高优先级任务。
159.举例来说,在选取非驱逐任务时,可以比较所述第二最小虚拟时长与更新后的所述第二变量之和,与所述第一最小虚拟时长的大小。
160.如果所述第二最小虚拟时长与更新后的所述第二变量之和,与所述第一最小虚拟时长满足公式3,根据cfs调度原则,可以从第二红黑树中选取任务,如果不满足公式3,则可以从第一红黑树中选取任务。
161.min_vrt
under
spread<min_vrt
high
................3;
162.其中,min-vrt
under
表示第二最小虚拟时长,min_vrt
high
表示第一最小虚拟时长,spread表示第二变量,即,由于任务驱逐带来的所述第一最小虚拟时长与所述第二最小虚拟时长之间的累计差距。通过min_vrt
under
spread可以得到对驱逐造成的差距进行补偿后得到的真实min_vrt
under
,如果min_vrt
under
spread<min_vrt
high
可以说明第一红黑树的最小虚拟时长大于第二红黑树的真实最小虚拟时长,根据cfs调度规则,需要总第二红黑树中选取任务。
163.在一些实施例中,还包括在红黑树中维护任务的方法。
164.请参见图4,图4为本技术示出的一种在红黑树中维护任务的方法流程示意图。如图4所示,所示方法可以包括s401-s403。
165.s401,获取待处理任务的优先级;所述待处理任务包括需要迁入或迁出所述第一cpu的任务。
166.在本技术中会为任务分配优先级标识。通过该标识即可确定待处理任务的优先级。
167.s402,在所述待处理任务的优先级为最高优先级的情形下,针对所述第一红黑树对所述待处理任务进行相应处理。
168.在一些实施例中,红黑树中维护的任务的虚拟时长,与cfs维护的任务的虚拟时长具有转换关系,这种转换关系需要依赖红黑树维护的最小虚拟时长。即在任务迁入和迁出时,需要依据红黑树当前的最小虚拟时长进行虚拟时长转换。
169.如果是迁入任务,则可以先根据当前正在被调度的任务的虚拟时长,更新所述第一红黑树维护的第一最小虚拟时长,然后基于第一最小虚拟时长确定红黑树维护的所述待处理任务的虚拟时长,并基于该虚拟时长将所述待处理任务作为节点加入第一红黑树,完成任务迁入。如果是迁出任务,则可以先根据当前正在被调度的任务的虚拟时长,更新所述第一红黑树维护的第一最小虚拟时长,然后基于第一最小虚拟时长确定cfs维护的所述待处理任务的虚拟时长,并在第一红黑树删除该待处理任务对应的节点,完成任务迁出。
170.本技术中将正在被调度的任务记为curr,将该任务的虚拟时长记为vruntime
curr
。不论是迁入还是迁出任务,都可以先根据cfs规则,更新curr的vruntime
curr
,并且更新与curr对应的红黑树的最小虚拟时长。如果curr是第一红黑树中的任务,则更新第一红黑树的第一最小虚拟时长min_vrt
high
,如果curr是第二红黑树中的任务,则更新第二红黑树的第二最小虚拟时长min_vrt
under

171.如果是迁入高优先级的待处理任务,则可以基于min_vrt
high
得到所述待处理任务的虚拟时长,并作为节点插入到第一红黑树tree
high
中。
172.如果是迁出高优先级的待处理任务,则可以基于min_vrt
under
得到所述待处理任务的虚拟时长,并删除第二红黑树tree
under
中对应的节点。
173.s403,在所述待处理任务的优先级为其它优先级的情形下,针对所述第二红黑树对所述待处理任务进行相应处理。
174.关于其它优先级的待处理任务的相应处理可以参照s402,在此不做详述。
175.通过s401-s403即可在第一红黑树与第二红黑树中准确的维护任务,便于后续准确调度任务。
176.在一些实施例中,在维护任务的过程中,响应于所述第一红黑树与所述第二红黑树中至少一个红黑树不包括任意任务,并且所述第一cpu并未执行所述至少一个红黑树对应优先级的任务,将所述第一最小虚拟时长与所述第二最小虚拟时长更新为二者中的最大值。
177.由此可以在任意优先级的任务执行完毕后,对两种红黑树维护的最小虚拟时长进行同步,从而保证两种红黑树之后维护的任务对应的虚拟时长是同步的。在一些实施例中,还可以完成两种红黑树虚拟时长同步后,将第一cpu维护的指示两种红黑树虚拟时长之间差距的第一变量,以及指示由于驱逐导致的两种红黑树虚拟时长之间累计差距的第二变量均设置为初始值(例如是0)。
178.以下以对在线任务与离线任务进行混合部署的场景为例进行实施例说明。
179.执行任务的cpu可以通过超线程模拟出第一cpu与第二cpu。以下以第一cpu为执行主体。
180.所述第一cpu可以采用cfs方式进行任务调度。所述cfs可以维护存储在线任务的第一红黑树与存储离线任务的第二红黑树。其中,在线任务为高优先级任务,离线任务为低优先级任务。
181.所述第一cpu可以维护第一变量start与第二变量spread,其维护方法可以分别参见前述s21与s22。由此加入第一变量start与第二变量spread,可以记录由于发生驱逐而导致的在线任务对应的红黑树和离线任务对应的红黑树所维护的最小虚拟时长之间的差距,便于对被驱逐的离线任务的虚拟时长做出补偿,以抵消由于驱逐带来的所述差距。
182.所述第二cpu可以在自身执行在线任务的情形下,向所述第一cpu发送指令,使第一cpu中维护的指示任务标识置为第一标识,指示第二cpu当前正在执行在线任务。
183.所述第二cpu可以在自身执行离线任务的情形下,向所述第一cpu发送指令,使第一cpu中维护的指示任务标识置为第二标识,指示第二cpu当前正在执行离线任务。
184.所述第一cpu可以通过任务标识确定第二cpu正在执行的任务优先级。
185.如果任务标识为所述第一标识,则需要发生任务驱逐,所述第一cpu可以通过cfs从所述第一红黑树中获取最小虚拟时长对应的在线任务。
186.如果任务标识为所述第二标识,则不需要进行任务驱逐,所述第二cpu可以将第二红黑树中维护的第二最小虚拟时长与第二变量相加,得到对驱逐补偿之后真实的第二最小虚拟时长,然后再与第一红黑树中维护的第一最小虚拟时长进行比较。如果真实的第二最小虚拟时长与第一最小虚拟时长满足前述公式3,则从第二红黑树中获取离线任务。如果真实的第二最小虚拟时长与第一最小虚拟时长不满足前述公式3,则从第一红黑树中获取在线任务。
187.在本例中,由于第一cpu对应的cfs维护了两个分别存储在线任务与离线任务的红黑树;因此,在发生驱逐现象的情形下,可以直接从第一红黑树中获取在线任务,避免现有技术中任务出入队列带来高开销操作,提升了任务调度效率,从而可能避免任务延迟与抖动。
188.并且本例中还可以通过第一变量与第二变量对被驱逐的离线任务对应的虚拟时长进行补偿,保证在非驱逐调度中可以正常获取任务。
189.与前述实施例相应的,本技术提出一种任务调度装置50。该装置可以应用于基于超线程技术得到的至少两个逻辑处理器cpu中的第一cpu;所述第一cpu对应的任务调度器维护了至少两个任务列表;所述至少两个任务列表分别用于存储所述第一cpu执行的不同优先级的任务。
190.请参见图5,图5为本技术示出的一种任务调度装置的结构示意图。
191.如图5所示,所述装置50可以包括:
192.获取模块51,获取所述至少两个逻辑处理器cpu中除所述第一cpu之外的第二cpu正在执行的任务的优先级;
193.第一调度模块51,响应于所述第二cpu正在执行的任务的优先级为最高优先级,通过所述任务调度器,从与所述最高优先级对应的第一任务列表中获取满足调度条件的任务进行执行以在需要任务驱逐的情形下完成任务调度。
194.在一些实施例中,所述装置50还包括:
195.第二调度模块,响应于所述第二cpu正在执行的任务的优先级不是最高优先级,通过所述任务调度器,从所述至少两个任务列表中获取满足所述调度条件的任务进行执行以在不需要任务驱逐的情形下完成任务调度。
196.在一些实施例中,所述任务调度器为完全公平调度器cfs;所述第一cpu维护了所述不同优先级的任务分别对应的虚拟时长;所述调度条件包括最小虚拟时长;
197.所述第一调度模块51,具体用于:
198.通过所述cfs,从所述第一任务列表中获取最小虚拟时长对应的任务;
199.所述第二调度模块,具体用于:
200.通过所述cfs,从所述至少两个任务列表中获取最小虚拟时长对应的任务。
201.在一些实施例中,所述至少两个任务列表还包括与其它优先级对应的第二任务列表;所述第一任务列表包括第一红黑树;所述第二任务列表包括第二红黑树;所述第一红黑树维护了所述第一任务列表中各任务中对应的第一最小虚拟时长;所述第二红黑树维护了所述第二任务列表中各任务对应的第二最小虚拟时长;
202.所述第一cpu还维护了第一变量与第二变量;其中,所述第一变量指示在进行驱逐任务之前,所述第一最小虚拟时长与所述第二最小虚拟时长之间的差距;第二变量指示在进行至少一次任务驱逐的情形下,因为任务驱逐造成的所述第一最小虚拟时长与所述第二最小虚拟时长之间的累计差距;
203.所述装置50还包括:
204.第一变量更新模块,在需要任务驱逐的情形下,在进行任务调度之前,响应于本次调度为首次驱逐调度,根据当前第一最小虚拟时长,当前第二最小虚拟时长和当前第二变量,更新所述第一变量。
205.在一些实施例中,所述装置50还包括:
206.第二变量更新模块,在不需要任务驱逐的情形下,在进行任务调度之前,响应于本次调度为进行任务驱逐之后的首次非驱逐调度,根据当前第一最小虚拟时长,当前第二最小虚拟时长和当前第一变量,更新所述第二变量。
207.在一些实施例中,所述第二调度模块,具体用于:
208.比较所述第二最小虚拟时长与更新后的所述第二变量之和,与所述第一最小虚拟时长的大小;
209.响应于所述第二最小虚拟时长与更新后的所述第二变量之和,小于所述第一最小虚拟时长,通过所述cfs,从所述第二红黑树中获取与所述第二最小虚拟时长对应的任务;
210.响应于所述第二最小虚拟时长与更新后的所述第二变量之和,大于或等于所述第一最小虚拟时长,通过所述cfs,从所述第一红黑树中获取与所述第一最小虚拟时长对应的任务。
211.在一些实施例中,所述装置50还包括:
212.任务维护模块,获取待处理任务的优先级;所述待处理任务包括需要迁入或迁出所述第一cpu的任务;
213.在所述待处理任务的优先级为最高优先级的情形下,针对所述第一红黑树对所述待处理任务进行相应处理;
214.在所述待处理任务的优先级为其它优先级的情形下,针对所述第二红黑树对所述待处理任务进行相应处理。
215.在一些实施例中,所述装置50还包括:
216.同步模块,响应于所述第一红黑树与所述第二红黑树中至少一个红黑树不包括任意任务,并且所述第一cpu并未执行所述至少一个红黑树对应优先级的任务,将所述第一最小虚拟时长与所述第二最小虚拟时长更新为二者中的最大值。
217.在一些实施例中,所述装置50还包括:
218.设置模块,响应于更新后的所述第一变量小于或等于0,将所述第一变量置为预设数值用于增加所述第二最小虚拟时长。
219.本技术示出的任务调度装置的实施例可以应用于电子设备上。相应地,本技术公开了一种电子设备,该设备可以包括:处理器。
220.用于存储处理器可执行指令的存储器。
221.其中,所述处理器被配置为调用所述存储器中存储的可执行指令,实现前述任一实施例示出的任务调度方法。
222.请参见图6,图6为本技术示出的一种电子设备的硬件结构示意图。
223.如图6所示,该电子设备可以包括用于执行指令的处理器,用于进行网络连接的网络接口,用于为处理器存储运行数据的内存,以及用于存储任务调度装置对应指令的非易失性存储器。
224.其中,装置的实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在电子设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,除了图6所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的电子设
备通常根据该电子设备的实际功能,还可以包括其他硬件,对此不再赘述。
225.可以理解的是,为了提升处理速度,装置对应指令也可以直接存储于内存中,在此不作限定。
226.本技术提出一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序可以用于使处理器执行前述任一实施例示出的任务调度方法。
227.本领域技术人员应明白,本技术一个或多个实施例可提供为方法、系统或计算机程序产品。因此,本技术一个或多个实施例可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本技术一个或多个实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、光学存储器等)上实施的计算机程序产品的形式。
228.本技术中记载的“和/或”表示至少具有两者中的其中一个,例如,“a和/或b”包括三种方案:a、b、以及“a和b”。
229.本技术中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于数据处理设备实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
230.所述对本技术特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的行为或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
231.本技术中描述的主题及功能操作的实施例可以在以下中实现:数字电子电路、有形体现的计算机软件或固件、包括本技术中公开的结构及其结构性等同物的计算机硬件、或者它们中的一个或多个的组合。本技术中描述的主题的实施例可以实现为一个或多个计算机程序,即编码在有形非暂时性程序载体上以被数据处理装置执行或控制数据处理装置的操作的计算机程序指令中的一个或多个模块。可替代地或附加地,程序指令可以被编码在人工生成的传播信号上,例如机器生成的电、光或电磁信号,该信号被生成以将信息编码并传输到合适的接收机装置以由数据处理装置执行。计算机存储介质可以是机器可读存储设备、机器可读存储基板、随机或串行存取存储器设备、或它们中的一个或多个的组合。
232.本技术中描述的处理及逻辑流程可以由执行一个或多个计算机程序的一个或多个可编程计算机执行,以通过根据输入数据进行操作并生成输出来执行相应的功能。所述处理及逻辑流程还可以由专用逻辑电路—例如fpga(现场可编程门阵列)或asic(专用集成电路)来执行,并且装置也可以实现为专用逻辑电路。
233.适合用于执行计算机程序的计算机包括,例如通用和/或专用微处理器,或任何其他类型的中央处理系统。通常,中央处理系统将从只读存储器和/或随机存取存储器接收指令和数据。计算机的基本组件包括用于实施或执行指令的中央处理系统以及用于存储指令和数据的一个或多个存储器设备。通常,计算机还将包括用于存储数据的一个或多个大容量存储设备,例如磁盘、磁光盘或光盘等,或者计算机将可操作地与此大容量存储设备耦接以从其接收数据或向其传送数据,抑或两种情况兼而有之。然而,计算机不是必须具有这样
的设备。此外,计算机可以嵌入在另一设备中,例如移动电话、个人数字助理(pda)、移动音频或视频播放器、游戏操纵台、全球定位系统(gps)接收机、或例如通用串行总线(usb)闪存驱动器的便携式存储设备,仅举几例。
234.适合于存储计算机程序指令和数据的计算机可读介质包括所有形式的非易失性存储器、媒介和存储器设备,例如包括半导体存储器设备(例如eprom、eeprom和闪存设备)、磁盘(例如内部硬盘或可移动盘)、磁光盘以及0xcd_00rom和dvd-rom盘。处理器和存储器可由专用逻辑电路补充或并入专用逻辑电路中。
235.虽然本技术包含许多具体实施细节,但是这些不应被解释为限制任何公开的范围或所要求保护的范围,而是主要用于描述特定公开的具体实施例的特征。本技术内在多个实施例中描述的某些特征也可以在单个实施例中被组合实施。另一方面,在单个实施例中描述的各种特征也可以在多个实施例中分开实施或以任何合适的子组合来实施。此外,虽然特征可以如上所述在某些组合中起作用并且甚至最初如此要求保护,但是来自所要求保护的组合中的一个或多个特征在一些情况下可以从该组合中去除,并且所要求保护的组合可以指向子组合或子组合的变型。
236.类似地,虽然在附图中以特定顺序描绘了操作,但是这不应被理解为要求这些操作以所示的特定顺序执行或顺次执行、或者要求所有例示的操作被执行,以实现期望的结果。在某些情况下,多任务和并行处理可能是有利的。此外,所述实施例中的各种系统模块和组件的分离不应被理解为在所有实施例中均需要这样的分离,并且应当理解,所描述的程序组件和系统通常可以一起集成在单个软件产品中,或者封装成多个软件产品。
237.由此,主题的特定实施例已被描述。其他实施例在所附权利要求书的范围以内。在某些情况下,权利要求书中记载的动作可以以不同的顺序执行并且仍实现期望的结果。此外,附图中描绘的处理并非必需所示的特定顺序或顺次顺序,以实现期望的结果。在某些实现中,多任务和并行处理可能是有利的。
238.以上所述仅为本技术一个或多个实施例的较佳实施例而已,并不用以限制本技术一个或多个实施例,凡在本技术一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本技术一个或多个实施例保护的范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

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

相关文献