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

一种多任务超时管理方法及系统与流程

2022-06-11 02:48:18 来源:中国专利 TAG:


1.本发明涉及计算机技术领域,尤其是一种多任务超时管理方法及系统。


背景技术:

2.多任务是一种常见的用于提高系统吞吐率的方法。多任务共享同一个硬件资源,但任务间往往没有执行顺序和依赖关系的要求。被共享的硬件资源通过分时的方式服务于多个任务,由于任务间的无关性,硬件资源往往能在一个任务的等待间隙服务于另一个任务,因此可以持续保持较高的硬件占用率以达到提高系统吞吐率的目的。数字芯片中一种典型的多任务场景是芯片与主机软件的数据接口:数据和命令由主机软件产生,并存储于主机内存。芯片通过互连总线如pcie(peripheral component interconnect express,高速串行计算机扩展总线标准)等连接到主机cpu(central processing unit,中央处理单元),当主机准备好命令和数据后,将命令和数据通过总线下发给芯片,或通知芯片来主机内存取回命令和数据。由于总线传输的延时、硬件的流水线设计等因素的影响,单一的任务将使全部或至少一部分硬件处于等待的状态。因此,主机软件往往有多个独立的任务向芯片下发命令,芯片根据流水线设计,可在不同的流水线单元内服务于来自不同任务的命令,以此提高硬件资源的利用率。除吞吐率的考量外,cpu的多核化也天然要求硬件资源具有响应多任务的能力。
3.多任务处理一般会给芯片内的数字逻辑的设计带来诸多挑战,其中之一是超时判断电路的设计。在命令的某个阶段可能由于条件不满足需要挂起命令的执行,让出硬件资源给其他任务并等待一段时间,直到条件满足或者等待时间超过指定值再恢复该任务的执行。一种典型的应用场景是nvme(non volatile memory express,非易失性内存主机控制器接口规范)协议,该协议定义主机与nvme控制器芯片的接口采用多个命令队列和完成队列实现。主机将命令放入命令队列中,命令队列位于主机内存中,然后通过写nvme控制器的寄存器发出通知。接着nvme控制器通过dma(direct memory access,直接存储器访问)的方式将命令从主机内存搬移到芯片端解析并执行。执行完成后nvme控制器将完成条目写入位于主机内存的完成队列,并通过中断的方式通知主机。上述每一个命令队列和完成队列都可以看作一个独立的任务队列,因此nvme协议定义的接口符合前文所述的多任务的特征。
4.nvme协议还定义了一种被称为聚合的特性,该特性被启用时,nvme控制器并不会一次处理单个条目,而是需要等到待处理条目满足一定数量。对于某一个命令队列而言,该特性意味着当主机往队列里放入一个命令并通知控制器时,控制器并不会立即通过dma获取,而是在收到主机多次将命令放入该队列的通知,确保待处理命令数满足聚合阈值,再通过dma一次获取所有的待处理命令,以此提高总线和硬件的利用率。完成队列的聚合与命令队列类似,不同的是完成条目由控制器产生。当聚合特性开启时,还需要有一个聚合超时时间作为保障,当超出该时间后,无论聚合数量是否满足阈值,控制器都需要处理该队列的待处理任务,这样才能保证不会由于没有足够多的任务而导致已在队列中的任务无限制的等待,并且也可以降低当某一个队列的吞吐率较低时的命令处理时延。nvme协议定义的队列
数,也就是上文所述的任务数,最高可达65536个。市面常见的控制器也往往高达数百个。尽管每个队列具有相同的聚合阈值和超时时间,但是由于每个队列的起始时间可以看作完全随机的,因此每个队列的超时时间各不相同。同时,大部分队列可以预期在超时时间内可以满足聚合阈值而完成该任务,无需触发这一次超时事件,但却需要在下一次主机写入寄存器时重新设置超时时间。
5.传统的多任务超时的管理,在数字芯片中一般采用定时器实现。对于每一个任务,设置一个硬件定时器,当任务需要被挂起等待时,给定时器装载等待时间,然后定时器开始倒计时,等到计定时器减到0则恢复任务执行。对应到上述nvme控制器的场景,则是当主机第一次写入某队列寄存器时,将该队列对应的定时器装载聚合时间,如果定时器减到0前该队列满足聚合阈值,则终止定时器,并在下一次写入寄存器时重新载入聚合时间;否则,当定时器减到0,则忽略聚合阈值的条件,处理所有待处理的队列任务。传统方法可以比较简单的解决多任务的超时判断问题,但是当面对nvme等任务数量相对比较大的使用场景时,由于每一个任务都需要一个定时器,对于常见的nvme控制器来说则需要数百个,如果考虑服务器上往往需要使用虚拟化技术,则数目会更加庞大,造成资源开销较大,同时大量的定时器将带来很高的动态功耗。


技术实现要素:

6.本发明提供了一种多任务超时管理方法及系统,用于解决现有对多任务的超时管理中由于资源开销大、功耗高造成成本高的问题。
7.为实现上述目的,本发明采用下述技术方案:
8.本发明第一方面提供了一种多任务超时管理方法,所述方法包括以下步骤:
9.将超时时间阈值相同的任务加入到同一时间队列中,所述时间队列中包括寄存器、超时时间以及与当前时间队列中任务数相同的存储单元,每个所述存储单元中保存任务的压入时间戳及当前任务的前后任务编号,所述寄存器中存储时间队列的队首任务编号和队尾任务编号;
10.将队首任务的时间戳与该队列的超时时间提供给比较器,进行队首任务的超时判断,并将超时任务弹出时间队列。
11.进一步地,所述方法还包括:设置队列访问逻辑,对任务进行压入、弹出和删除的控制。
12.进一步地,所述队列访问逻辑中,对任务进行压入控制的具体过程为:
13.获取待压入任务的编号和时间戳,将时间戳和当前任务编号对应的存储单元;
14.获取寄存器中的队尾任务编号,将当前存储单元的前编号设置为该队尾任务编号,并将压入任务的编号作为寄存器的队尾任务编号;
15.将原队尾任务编号的后编号设置为当前压入任务编号。
16.进一步地,所述队列访问逻辑中,对任务进行弹出控制的具体过程为:
17.将寄存器中存储的队首任务编号对应的任务从存储单元中读出;
18.并将读出任务的后编号,作为新队首任务编号写入寄存器。
19.进一步地,所述队列访问逻辑中,对任务进行删除控制的具体过程为:
20.获取待删除任务的编号;
21.从存储单元中读出该编号对应的任务;
22.获取该删除编号的前编号和后编号,将该后编号作为该前编号的后编号,该前编号作为该后编号的前编号。
23.进一步地,所述方法还包括步骤:为每个任务设置入队标志,所述入队标志用于标识当前任务在时间队列的存在状态,若当前任务已存在时间队列中,时间队列又接收到该任务的压入命令,则不再重复压入该命令。
24.本发明第二方面提供了一种多任务超时管理系统,所述系统包括:
25.时间队列,用于管理超时时间阈值相同的多个任务;所述时间队列包括寄存器、超时时间以及与当前时间队列中任务数相同的存储单元,每个所述存储单元中保存任务的压入时间戳及当前任务的前后任务编号,所述寄存器中存储时间队列的队首任务编号和队尾任务编号;
26.定时器,用于记录任务的压入时间戳,并将当前时间发送给比较器;
27.比较器,用于获取队首任务的时间戳与该队列的超时时间,进行队首任务的超时判断;
28.控制状态机,用于将超时任务弹出时间队列。
29.进一步地,所述系统还包括入队标志,所述入队标志的数量与任务数相同,用于在时间队列的存在状态。
30.进一步地,所述时间队列还包括队列访问逻辑,所述队列访问逻辑用于对任务进行压入、弹出和删除的控制。
31.进一步地,所述系统中,定时器的数量为1个,所述比较器的数量与所述时间队列的数量相同。
32.本发明第二方面的所述多任务超时管理系统能够实现第一方面及第一方面的各实现方式中的方法,并取得相同的效果。
33.发明内容中提供的效果仅仅是实施例的效果,而不是发明所有的全部效果,上述技术方案中的一个技术方案具有如下优点或有益效果:
34.本发明将超时时间阈值相同的任务加入到同一时间队列中,该时间队列中设有与任务数相同的存储单元,存储任务的压入时间戳及当前任务的前后任务编号,所述寄存器中存储时间队列的队首任务编号和队尾任务编号,通过一个定时器和一个比较器时间一个时间队列内多任务的超时管理,减小资源开销和功耗,降低成本。
附图说明
35.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
36.图1是本发明所述方法实施例的流程示意图;
37.图2是本发明所述系统实施例的结构示意图;
38.图3是本发明所述时间队列的结构示意图。
具体实施方式
39.为能清楚说明本方案的技术特点,下面通过具体实施方式,并结合其附图,对本发明进行详细阐述。下文的公开提供了许多不同的实施例或例子用来实现本发明的不同结构。为了简化本发明的公开,下文中对特定例子的部件和设置进行描述。此外,本发明可以在不同例子中重复参考数字和/或字母。这种重复是为了简化和清楚的目的,其本身不指示所讨论各种实施例和/或设置之间的关系。应当注意,在附图中所图示的部件不一定按比例绘制。本发明省略了对公知组件和处理技术及工艺的描述以避免不必要地限制本发明。
40.如图1所示,本发明实施例提供的一种多任务超时管理方法,所述方法包括以下步骤:
41.s1,将超时时间阈值相同的任务加入到同一时间队列中,所述时间队列中包括寄存器、超时时间以及与当前时间队列中任务数相同的存储单元,每个所述存储单元中保存任务的压入时间戳及当前任务的前后任务编号,所述寄存器中存储时间队列的队首任务编号和队尾任务编号;
42.s2,将队首任务的时间戳与该队列的超时时间提供给比较器,进行队首任务的超时判断,并将超时任务弹出时间队列。
43.设置队列访问逻辑,对任务进行压入、弹出和删除的控制。压入操作指向队列队尾压入任务,弹出操作指从队列的队首弹出任务,删除操作用于任务在超时前完成,需要从时间队列中删除。
44.所述队列访问逻辑中,对任务进行压入控制的具体过程为:获取待压入任务的编号和时间戳,将时间戳和当前任务编号对应的存储单元;获取寄存器中的队尾任务编号,将当前存储单元的前编号设置为该队尾任务编号,并将压入任务的编号作为寄存器的队尾任务编号;将原队尾任务编号的后编号设置为当前压入任务编号。
45.所述队列访问逻辑中,对任务进行弹出控制的具体过程为:将寄存器中存储的队首任务编号对应的任务从存储单元中读出;并将读出任务的后编号,作为新队首任务编号写入寄存器。
46.所述队列访问逻辑中,对任务进行删除控制的具体过程为:获取待删除任务的编号;从存储单元中读出该编号对应的任务;获取该删除编号的前编号和后编号,将该后编号作为该前编号的后编号,该前编号作为该后编号的前编号。
47.本发明所输送方法实施例的其一实现方式中,为每个任务设置入队标志,所述入队标志用于标识当前任务在时间队列的存在状态,若当前任务已存在时间队列中,时间队列又接收到该任务的压入命令,则不再重复压入该命令。
48.如图2和3所示,本发明实施例提供的一种多任务超时管理系统,所述系统包括时间队列、定时器、比较器、入队标志和控制状态机。
49.定时器用于记录任务的压入时间戳,并将当前时间发送给比较器;定时器有两个主要的参数,分别是时间精度和时间范围。时间精度应该在满足要求的范围内尽可能低,这样可以降低定时器使用的时钟频率,减少功耗。时间范围是定时器最大的时间计数值。本实施例中,定时器超出该值后将回0并重新开始计时,因此为了确保不出现时间模糊,时间范围应该大于当所有队列都超时,依次处理完这些队列一遍的时间。但时间范围和时间精度共同决定了定时器的逻辑位宽,而逻辑位宽将决定时间队列中的ram资源大小,因此在满足
要求的前提下,时间范围应当尽可能小。
50.比较器用于获取队首任务的时间戳与该队列的超时时间,进行队首任务的超时判断;具体的方法是用当前时间减去时间戳,再用所得得值与超时时间进行比较,如果大于超时时间则判定发生超时。需要说明的是,减法不对溢出进行判断,所得的数按无符号二进制数进行解析,以此来解决定时器计满绕回的问题。例如,假定8bit的时间戳是0x80,当前定时器由于计满绕回,变成0x20,则仍然用0x20-0x80,得到0xa0,该值作为无符号二进制数进行解析并于超时时间进行比较。
51.定时器的数量为1个,比较器可以有多个,它的数量与时间队列的数量相同。
52.如图3所示,时间队列用于管理超时时间阈值相同的多个任务;所述时间队列包括寄存器、超时时间以及与当前时间队列中任务数相同的存储单元,每个所述存储单元中保存任务的压入时间戳及当前任务的前后任务编号,所述寄存器中存储时间队列的队首任务编号和队尾任务编号;
53.时间队列的核心是用来保存时间戳的ram,该ram一共有n个存储单元,n与该时间队列管理的最大任务数相同。对每一个任务从0~n-1进行编号,然后将ram中的对应存储单元静态分配给该任务。ram中的每个存储单元保存了对应任务的时间戳,以及排在它前面和后面的任务编号。
54.本实施例设计的机制需要保证同一个时间队列的所有任务具有相同的超时时间阈值。这一点对于包括nvme在内的很多应用场景都可以满足。但考虑到如虚拟化等使用场景,要求实现多种超时时间,可以将具有相同超时时间的任务进行分组,每一组用一个时间队列进行管理,因此超时管理系统中可以例化多个时间管理队列来实现上述需求。
55.入队标志寄存器有m个标志位,m与超时管理电路支持的最大任务数相同。每一个标志位静态分配给一个任务,用来标识该任务是否在时间队列中。
56.控制状态机用来接收任务请求,并根据内部状态判断该请求是否被压入时间队列。当它接收到任务时,首先根据入队标志判断该任务是否已在队列中,如果不在,则将当前的时间戳和任务编号压入时间队列;如果已经在时间队列,则不进行任何操作。
57.控制状态机还对比较器输出的超时事件进行响应,当超时发生时,它控制时间队列弹出队首元素,并将该任务的编号和超时事件一同上报给上游模块。同时清零对应的入队标志。
58.控制状态机还处理任务完成事件,当上游模块通知超时管理系统某一任务已经完成,状态机根据该任务的编号向时间队列发送删除请求,并清0对应的入队标志。
59.所述时间队列还包括队列访问逻辑,所述队列访问逻辑用于对任务进行压入、弹出和删除的控制。压入操作指向队列队尾压入任务,弹出操作指从队列的队首弹出任务,删除操作用于任务在超时前完成,需要从时间队列中删除。
60.当执行压入操作时,队列访问逻辑接收待压入的队列编号和时间戳,首先将时间戳写入队列编号所指定的存储单元,然后将该条目的前编号设置为当前的尾任务编号寄存器的编号,同时修改尾任务编号寄存器的值(称为原尾任务编号)为当前接收的任务编号。然后将原尾任务编号所在的存储单元的后编号设置为当前接收的队列编号。
61.当执行弹出操作时,队列访问逻辑将首任务编号寄存器的编号值对应的存储单元读出,并将首任务编号寄存器设置为读出条目的后编号值。
62.当执行删除操作时,队列访问逻辑接收待删除的队列编号,从ram中读出该编号对应的存储单元。然后再分别获取待删除条目的前编号和后编号对应的存储单元(简称前条目和后条目)。将前条目的后编号设置为待删除条目的后编号,再将后条目的前编号设置为待删除条目的前编号,然后将前后条目分别写入原位置。
63.时间队列始终将该队列的队首元素的时间戳和该队列的超时时间提供给比较器进行比较。
64.下面结合实际场景介绍系统的工作流程:
65.初始化和第一个任务:在电路被初始化后,定时器从0开始计时,所有的入队标志均为0。时间队列中的首任务编号和尾任务编号被设置为无效状态。假设此时编号10的任务被下发,当前时间为50,控制状态机查询编号10的入队标志为0,因此向时间队列下发将编号10压入时间队列的请求,时间戳为50。
66.时间队列查询到首任务编号和尾任务编号为无效,然后将这两个寄存器都设置为10,并且将编号设置为有效状态。时间队列将时间戳50写入编号10对应的ram位置,不设置前编号和后编号。时间队列将时间戳50和超时时间输出给比较器。控制状态机将编号10的入队标志置1。
67.后续任务的压入:假设接着有一个编号为31的任务被下发,当前时间为121。控制状态机查询编号31的入队标志为0,因此向时间队列下发将编号31压入时间队列的请求,时间戳为121。时间队列查询到尾任务编号为10,且有效。于是将编号10所在存储单元的后编号设置为31,将尾任务编号设置为31。时间队列再将当前时间戳121写入编号31所对应的存储单元,并将该条目的前任务编号设置为10。控制状态机将编号31的入队标志置1。
68.任务的弹出:假设超时时间为1000,在当前定时器的计时值达到1051时,比较器用当前时间减去时间队列输出的时间戳50得到1001,大于当前时间队列的超时时间,因此输出超时事件。控制状态机收到该事件,向时间队列发送弹出任务的操作,并等待时间队列操作完成。时间队列弹出编号10后,编号31成为队列的第一个元素,因此,时间队列输出时间戳121。然后控制状态机将编号10的入队标志清零,并通知上游模块任务10已超过定时时间。
69.上述虽然结合附图对本发明的具体实施方式进行了描述,但并非对本发明保护范围的限制,所属领域技术人员应该明白,在本发明的技术方案的基础上,本领域技术人员不需要付出创造性劳动即可做出的各种修改或变形仍在本发明的保护范围以内。
再多了解一些

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

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

相关文献