数据队列的处理方法及装置与流程

文档序号:22845378发布日期:2020-11-06 16:49阅读:164来源:国知局
本发明涉及数据处理领域,具体而言,涉及一种数据队列的处理方法及装置。
背景技术
::在nvme标准的诸多技术中,多队列技术是其中一个重要的提高性能的方法。借助于多队列技术,nvme实现了按照任务、调度优先级和cpu的核来分配不同队列,完成高性能的存储功能。相关技术多队列的情况下,例如8k个队列甚至更多的情况下,无法实现。特别是一个doorbell指针多大2byte的情况,多队列会迅速增大soc面积和功耗。针对上述的问题,目前尚未提出有效的解决方案。技术实现要素:本发明实施例提供了一种数据队列的处理方法及装置,以至少解决相关技术中的多队列处理方法,调度困难,效率低的技术问题。根据本发明实施例的一个方面,提供了一种数据队列的处理方法,包括:获取存储器存储的待处理的队列组,其中,所述待处理的队列组为包括待处理的数据队列的队列组,所述存储器用于接收数据队列消息,并将所述数据队列消息对应的数据队列分成队列组进行存储;对所述待处理的队列组中的数据队列进行处理,其中,所述待处理的队列组的数据队列的数量不超过本地存储数据队列的最大数量。可选的,获取存储器发送的待处理的队列组之前,包括:确定接收的数据队列的数量是否超过本地存储数据队列的最大数量;在所述接收的数据队列的数量不超过本地存储数据队列的最大数量的情况下,直接接收所述数据队列;在所述接收的数据队列的数量超过本地存储数据队列的最大数量的情况下,通过所述存储器接收所述数据队列;在通过所述存储接收所述数据队列的情况下,执行获取存储器存储的待处理的队列组的步骤。可选的,获取存储器发送的待处理的队列组包括:通过第一位图标记确定所述队列组是否为有任务处理的待处理的队列组,其中,所述队列组包括第一位图标记,有任务处理的待处理的队列组的第一位图标记和无任务的队列组的第一位图标记不同;通过读取接口获取所述待处理的队列组的数据队列,其中,所述队列组的数据结构与本地存储的队列数据的数据结构相同。可选的,对待处理的所述队列组中的数据队列进行处理包括:通过第二位图标记确定所述队列组中待处理的数据队列,其中,所述数据队列包括第二位图标记,有任务处理的待处理的数据队列的第二位图标记和无任务的数据队列的第二位图标记不同;确定所述待处理的数据队列是否为保序队列;在所述待处理的数据队列为保序队列的情况下,根据保序队列的顺序对待处理的数据队列和对应保序的数据队列进行处理。可选的,还包括:获取所述队列组中的数据队列的时间戳;根据所述时间戳确定处理所述队列组是否超时,在所述队列组超时的情况下,调度存储器的队列组进行防饿死处理。可选的,还包括:在所述队列组的数据队列处理完成的情况下,将所述队列组的数据队列的处理属性信息发送给所述存储器,其中,所述处理属性信息包括所述队列组的数据队列的处理时间戳,所述存储器根据所述处理时间戳确定所述队列组是否在处理过程中存在更新,在所述队列组的数据队列在处理过程中有更新的情况下,确定所述队列组还有待处理的任务,将所述队列组重新按顺序加入存储队列组。根据本发明实施例的另一方面,还提供了一种数据队列的处理方法,包括:接收数据队列消息,并将所述数据队列消息对应的数据队列分成队列组进行存储;将待处理的队列组发送给处理器,其中,所述待处理的队列组为包括待处理的数据队列的队列组,所述待处理的所述队列组的数据队列的数量不超过所述处理器存储数据队列的最大数量,所述处理器用于对所述队列组中的队列进行处理。可选的,接收数据队列消息之前,包括:确定接收的数据队列的数量是否超过所述处理器存储数据队列的最大数量;在所述接收的数据队列的数量超过所述处理器存储数据队列的最大数量的情况下,执行接收数据队列消息的步骤。根据本发明实施例的另一方面,还提供了一种数据队列的处理装置,包括:获取模块,用于获取存储器存储的待处理的队列组,其中,所述待处理的队列组为包括待处理的数据队列的队列组,所述存储器用于接收数据队列消息,并将所述数据队列消息对应的数据队列分成队列组进行存储;处理模块,用于对所述待处理的队列组中的数据队列进行处理,其中,所述待处理的队列组的数据队列的数量不超过本地存储数据队列的最大数量。根据本发明实施例的另一方面,还提供了一种数据队列的处理装置,包括:存储模块,用于接收数据队列消息,并将所述数据队列消息对应的数据队列分成队列组进行存储;发送模块,用于将待处理的队列组发送给处理器,其中,所述待处理的队列组为包括待处理的数据队列的队列组,所述待处理的所述队列组的数据队列的数量不超过所述处理器存储数据队列的最大数量,所述处理器用于对所述队列组中的队列进行处理。根据本发明实施例的另一方面,还提供了一种计算机存储介质,所述计算机存储介质包括存储的程序,其中,在所述程序运行时控制所述计算机存储介质所在设备执行上述中任意一项所述的数据队列的处理方法。根据本发明实施例的另一方面,还提供了一种处理器,所述处理器用于运行程序,其中,所述程序运行时执行上述中任意一项所述的数据队列的处理方法。在本发明实施例中,采用获取存储器存储的待处理的队列组,其中,待处理的队列组为包括待处理的数据队列的队列组,存储器用于接收数据队列消息,并将数据队列消息对应的数据队列分成队列组进行存储;对待处理的队列组中的数据队列进行处理,其中,待处理的队列组的数据队列的数量不超过本地存储数据队列的最大数量的方式,通过在存储器中将多个数据队列,分成队列组进行存储,处理器以队列组为单位对数据队列进行处理,达到了对多数据队列进行有效快速处理的目的,从而实现了提高多数据队列处理的效率的技术效果,进而解决了相关技术中的多队列处理方法,调度困难,效率低的技术问题。附图说明此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:图1是根据本发明实施例的一种数据队列的处理方法的流程图;图2是根据本发明实施例的另一种数据队列的处理方法的流程图;图3是根据本发明实施方式的nvme队列的示意图;图4是根据本发明实施方式的主机和控制器连接的示意图;图5是根据本发明实施方式的队列和ddr的示意图;图6是根据本发明实施方式的ddr中数据结构的示意图;图7是根据本发明实施方式的队列的sq_cq_entry/9的示意图;图8是根据本发明实施方式的队列的sq_cq_info/10的数据结构的示意图;图9是根据本发明实施方式的队列的order_table/11的示意图;图10是根据本发明实施方式的队列替换group的示意图;图11是根据本发明实施方式的在队列数量较少的情况下队列替换group的示意图;图12是根据本发明实施例的一种数据队列的处理装置的示意图;图13是根据本发明实施例的另一种数据队列的处理装置的示意图。具体实施方式为了使本
技术领域
:的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。根据本发明实施例,提供了一种数据队列的处理方法的方法实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。图1是根据本发明实施例的一种数据队列的处理方法的流程图,如图1所示,该方法包括如下步骤:步骤s102,获取存储器存储的待处理的队列组,其中,待处理的队列组为包括待处理的数据队列的队列组,存储器用于接收数据队列消息,并将数据队列消息对应的数据队列按照第一预定顺序分成队列组进行存储;步骤s104,对待处理的队列组中的数据队列进行处理,其中,待处理的队列组的数据队列的数量不超过本地存储数据队列的最大数量。通过上述步骤,采用获取存储器存储的待处理的队列组,其中,待处理的队列组为包括待处理的数据队列的队列组,存储器用于接收数据队列消息,并将数据队列消息对应的数据队列分成队列组进行存储;对待处理的队列组中的数据队列进行处理,其中,待处理的队列组的数据队列的数量不超过本地存储数据队列的最大数量的方式,通过在存储器中将多个数据队列,分成队列组进行存储,处理器以队列组为单位对数据队列进行处理,达到了对多数据队列进行有效快速处理的目的,从而实现了提高多数据队列处理的效率的技术效果,进而解决了相关技术中的多队列处理方法,调度困难,效率低的技术问题。上述存储器可以为双倍速率同步动态随机存储器ddr(doubledaterate),设置在控制器中,上述步骤的执行主体可以为上述控制器中的队列模块queue,简称队列。由于控制器的队列采用的控制器的存储空间,其空间十分有限,在数据队列的数量较少的情况下,可以暂存在队列本地,但是,随着网络发展,超大数据量的数据队列也成为了常见的需求,由于队列本地难以存储较多数量的数据队列,设置存储器,对数据队列进行存储。由于存储器可以存储大量的数据队列,在队列需要对数据队列进行处理的情况下,从存储器中调取对应的数据队列,然而存储器中的数据队列数据量大,存储和读取都不方便,效率较低,因此,本实施例中,将存储器中的数据队列按照第一顺序组成队列组,将队列组按照第二顺序进行存储,此处的队列组可以为一次被队列接收并处理,因此,待处理的队列组的数据队列的数量不超过本地存储数据队列的最大数量。通常上述队列组的数据队列的数量为队列本地可以存储的数据队列的最大数量。以保证每次存储器的队列组向队列进行迁移,可以实现最大效率的迁移,提高数据队列的迁移效率,从而进一步提高了数据队列的处理效率。上述数据队列可以按照第一顺序组成队列组,上述第一顺序可以为是存储对数据队列的接收顺序,按照正常的处理顺序,先到先处理的原则,将数据队列分成队列组,由于数据队列的接收顺序存在先后,因此,会导致组成的队列组之间也存在先后关系,队列组的先后顺序也即是第二顺序,按照队列组的先后顺序对队列组进行存储,方便之后对队列组的调取和迁移,进而提高数据组的调取和迁移效率,从而提高数据队列的处理效率。可选的,获取存储器发送的待处理的队列组之前,包括:确定接收的数据队列的数量是否超过本地存储数据队列的最大数量;在接收的数据队列的数量不超过本地存储数据队列的最大数量的情况下,直接接收数据队列;在接收的数据队列的数量超过本地存储数据队列的最大数量的情况下,通过存储器接收数据队列;在通过存储接收数据队列的情况下,执行获取存储器存储的待处理的队列组的步骤。上述主机通过门铃将要处理的数据队列通过网络连接发送给处理器或者存储器,具体的,在数据队列的数量不超过处理器存储数据队列的最大数量的情况下,直接发送给处理器;在数据队列的数量超过处理器存储数据队列的最大数量的情况下,发给存储器,由处理器从存储器进行获取数据队列。通过在存储器中将多个数据队列,分成队列组进行存储,处理器以队列组为单位对数据队列进行处理,达到了对多数据队列进行有效快速处理的目的,从而实现了提高多数据队列处理的效率的技术效果,进而解决了相关技术中的多队列处理方法,调度困难,效率低的技术问题。获取存储器发送的待处理的队列组包括:确定队列组是否为顺序最前的队列组;在队列组为顺序最前的队列组的情况下,直接获取队列组;在队列组不是顺序最前的队列组的情况下,通过调度模块对队列组进行调度,使队列组处于队列组顺序的最前,获取调度后的队列组。由于上述队列组在存储器中按照先后的第二顺序进行存储,正常的读取顺序也是按照上述第二顺序,但是,在第二顺序最前的队列组不一定处于待处理状态,因此,在队列组不是顺序最前的队列组的情况下,通过调度模块对队列组进行调度,使队列组处于队列组顺序的最前,获取调度后的队列组。上述调度模块可以为设置在上述队列queue中,可以随时根据队列queue的需求对队列组进行调度和迁移。可选的,获取存储器发送的待处理的队列组包括:通过第一位图标记确定队列组是否为有任务处理的待处理的队列组,其中,队列组包括第一位图标记,有任务处理的待处理的队列组的第一位图标记和无任务的队列组的第一位图标记不同;通过读取接口获取待处理的队列组的数据队列,其中,队列组的数据结构与本地存储的队列数据的数据结构相同。可选的,对待处理的队列组中的数据队列进行处理包括:通过第二位图标记确定队列组中待处理的数据队列,其中,数据队列包括第二位图标记,有任务处理的待处理的数据队列的第二位图标记和无任务的数据队列的第二位图标记不同;确定待处理的数据队列是否为保序队列;在待处理的数据队列为保序队列的情况下,根据保序队列的顺序对待处理的数据队列和对应保序的数据队列进行处理。上述第一位图标记可以为qbitmap/12,第二位图标记可以为qbitmap/8。获取存储器发送的待处理的队列组之前,可以通过确定存储器存储的队列组的多个数据队列的头指针和尾指针;在数据队列的头指针和尾指针的值不相等的情况下,确定数据队列有任务,确定数据队列所在的队列组有任务。处理器在确定数据队列的头指针和尾指针的值不相等的情况下,可以更新数据队列的第二位图标记,从而确定队列组中的待处理的数据队列。或者,存储器在确定数据队列的头指针和尾指针的值不相等的情况下,可以更新数据队列所在的队列组的第一位图标记,从而确定队列组中为待处理队列组。上述数据队列可以为提交队列submissionqueue,或者完成队列completionqueue,其中完成队列为提交队列的完成信息。提交队列和完成队列均包括头指针和尾指针,以标识提交队列和完成队列的数据开始和数据结束。在数据队列的头指针和尾指针的值不相等的情况下,则说明该数据队列中有数据,则确定数据队列有任务,从而确定数据队列所在的队列组有任务。在一种可选的实施例中,有的数据队列为保序队列,也即是对具有保序队列的数据队列必须按照保序的顺序进行处理,例如,第一数据队列和第二数据队列保序为第一数据队列先于第二数据队列,则必须先按照第一数据队列的请求记性操作,在操作后的基础上,才可以对第二数据队列进行处理。可选的,还包括:获取队列组中的数据队列的时间戳;根据时间戳确定处理队列组是否超时,在队列组超时的情况下,调度存储器的队列组进行防饿死处理。在队列组超时的情况下,调度存储器的队列组进行处理,防止饿死的情况发生。可选的,还包括:在所述队列组的数据队列处理完成的情况下,将所述队列组的数据队列的处理属性信息发送给所述存储器,其中,所述处理属性信息包括所述队列组的数据队列的处理时间戳,所述存储器根据所述处理时间戳确定所述队列组是否在处理过程中存在更新,在所述队列组的数据队列在处理过程中有更新的情况下,确定所述队列组还有待处理的任务,将所述队列组重新按顺序加入存储队列组。从而保证对队列组进行有效的处理,防止由于队列queue在处理队列组时由于数据队列的更新,导致数据队列的处理不及时,处理不完全,数据队列处理遗漏的情况,进一步提高了数据队列处理的可靠性和稳定。图2是根据本发明实施例的另一种数据队列的处理方法的流程图,如图,2所示,根据本发明实施例的另一方面,还提供了一种数据队列的处理方法,包括:步骤s202,接收数据队列消息,并将数据队列消息对应的数据队列分成队列组进行存储;步骤s204,将待处理的队列组发送给处理器,其中,待处理的队列组为包括待处理的数据队列的队列组,待处理的队列组的数据队列的数量不超过处理器存储数据队列的最大数量,处理器用于对队列组中的队列进行处理。通过上述步骤,采用接收数据队列消息,并将数据队列消息对应的数据队列分成队列组进行存储;将待处理的队列组发送给处理器,其中,待处理的队列组为包括待处理的数据队列的队列组,待处理的队列组的数据队列的数量不超过处理器存储数据队列的最大数量,处理器用于对队列组中的队列进行处理的方式,通过在存储器中将多个数据队列,分成队列组进行存储,处理器以队列组为单位对数据队列进行处理,达到了对多数据队列进行有效快速处理的目的,从而实现了提高多数据队列处理的效率的技术效果,进而解决了相关技术中的多队列处理方法,调度困难,效率低的技术问题。上述步骤的执行主体可以为上述队列queue。可选的,接收数据队列消息之前,包括:确定接收的数据队列的数量是否超过所述处理器存储数据队列的最大数量;在所述接收的数据队列的数量超过所述处理器存储数据队列的最大数量的情况下,执行接收数据队列消息的步骤。需要说明的是,本实施例还提供了一种可选的实施方式,下面对该实施方式进行详细说明。图3是根据本发明实施方式的nvme队列的示意图,本实施方式的nvme队列如图3所示,这里的主机称为host,中央控制器cpu,而nvme设备称为controller(硬盘,控制器)。主机和控制器之间通过共享内存的队列实现交互。最新的nvme协议中,每一个nvmecontroller(硬盘,控制器)允许最多65535个输入输出io队列和一个用户admin队列。用户admin队列在设备初始化之后随即创建,包括一个发送队列和一个完成队列。其他的io队列则是由用户admin队列中发送的控制命令来产生的。nvme规定的io队列关系比较灵活,即可以一个发送队列对应一个完成队列,也可以几个发送队列共同对应一个完成队列。数据队列的交互流程如下:1.主机host填写命令到对应的sq.tail(submissionqueue.tail,提交队列尾部)指针的位置,并将sq.tail指针加1;2.主机host通过doorbell将将sq.tail指针告诉sq(submissionqueue,提交队列);3.控制器controller判定sq.head(submissionqueue.head,提交队列头部)指针和sq.tail指针,并获取相关任务,并将sq.tail指针加1;4.控制器controller完成相关的任务;5.控制器controller填写完成任务且完成任务包括sq.head信息,并完成cq.tail(completionqueue.tail,完成队列尾部)指针的维护;6.控制器controller发相关的中断到cpu;7.cpu处理相关的cq(completionqueue,完成队列)任务,并通过doorbell更新cq.head(completionqueue.head,完成队列头部)指针;本实施方式解决了多队列(1~64k)的实现的难题,多队列调度困难,低优先级队列难于调度的问题,片上资源可以用于快速访问,高频率访问。先进的片上存储方案,易于多指令command的并发,多指令command的保序,片上cpu可以方便的访问sq/cq信息,易于错误管理和上报。一个队列的任务可以保序或者乱序执行,顺序返回或者乱序返回。不同队列之间的任务乱序执行。以增加并发度,解决系统性能延迟和吞吐率问题。图4是根据本发明实施方式的主机和控制器连接的示意图,如图4所示,主机host通过网络连接interconnect/7更新sqytdbl(submissionqueueytaildoorbell,提交队列的尾门铃)和cqyhdbl(completionqueueyheaddoorbell,完成队列的头门铃),控制器controller会根据队列模式选择,这些门铃doorbell更新到队列queue上或者ddr(doubledaterate,双倍速率同步动态随机存储器)中,同时记录更新的时间戳timestamp。队列queue或者ddr中会有4片sram(staticrandomaccessmemory,静态随机存取存储器)/1/2/3/4或者空间sq/cq_dbl/15,分别对应sq.head/sq.tail/cq.head/cq.tail。当sq.head和sq.tail不相等时,即表示这个队列有任务,并设置相应的bitmap/8/12。队列queue会通过不同队列的权重轮询处理sq队列的任务。sq_cq_entry/9会存储响应的sq_command(提交指令)和cq_command(完成指令)的原始内容,并通过slv/7和网络连接interconnect/7相连,方便软件查询cpu/18或者相关加速器acc/19查询原始命令。其中,sq_cq_entry/9的每一个数据流entry都有唯一编号,方便索引。提交队列/完成队列的信息sq/cq_info/10会存储队列的相关信息,包括不限于qos(qualityofservice,服务质量),队列基地址,队列深度,队列中断,sq和cq的对应关系,队列物理地址是否连续,当前队列的状态等等。命令桌面order_table/11会存储需要保序的指令command的信息,包括不限于和哪个指令command保序,执行情况等等。保序队列有保序深度,如果保序队列满,会影响队列的执行。sq/cq_info/14和提交队列/完成队列的门铃sq/cq_dbl/15可以映射到片上相关单元1/2/3/4/10,如何替换片上资源可以根据分组权重或者老化等设置,方便系统调度。图5是根据本发明实施方式的队列和ddr的示意图,如图5所示,其中队列queue中sram/1/2/3/4的数据结构,包括不限于将1/2/3/4组合分拆成一片或者多片sram(staticrandomaccessmemory,静态随机存取存储器)。其中sqt表示sq.tail,sqh表示sq.head,cqh表示cq.head,cqt表示cq.tail。sqt和cqh由host维护,sqh和cqt由硬件维护。其中,位图bitmap8表示相关队列是否有任务。根据nvme协议,队列queue中cqt/cqh/sqh/sqt分别只需要2byte,可以根据片上资源合理分配门铃doorbell的大小,如片上支持512个数据队列,则需要512*4*2=4kbyte,上述片上资源也即是控制器controller的队列queue的存储资源。ddr中,cap.dstrd根据ddr一次写的最小粒度配置,即需要保证ddr不产生strobe的写,从而保证ddr的效率。由于网络连接interconnect/7的位宽一般为8b的整数倍,可以方便的映射ddr和队列queue的资源。即可以很方便的从ddr中取出下一个512队列的信息替换片上的队列queue中的信息,实现多数据队列的调度。图6是根据本发明实施方式的ddr中数据结构的示意图,如图6所示,ddr的门铃doorbell空间可以按照队列queue上的门铃doorbell资源进行分组,例如每组512个门铃doorbell。每一组门铃doorbell有一个时间戳timestamp寄存器,记录当前cpu更新的时刻。其中,位图qbitmap/12和分组对应。当队列queue发生替换时,队列组以group为单位,并且记录发生替换的时刻,当队列queue发生下一次替换时,比较本地load的时间戳timestamp和cpu更新的时间戳timestamp,如果cpu的时间戳timestamp大于本地load的时间戳timestamp,则主机host又更新了门铃doorbell。此时该队列组group的位图qbitmap/12标记不能改变。图7是根据本发明实施方式的队列的sq_cq_entry/9的示意图,如图7所示,sq_cq_entry/9的深度应该保证acc/19和cpu/18的需要,例如深度为64。其中任务的调度需要支持rr/wrr/user自定义三种。队列组group的替换机制可以有且不限于以下三种:1、固定调度一定的任务;2、超时切换;3、调度完所有的任务,自动切换为下一个group;队列组group内部的调度机制有且不限于以下三种:1、rr调度;2、wrr调度;3、根据sq/cq_info/10中的时间戳timestamp信息,如果发生超时,则必须调度,防止饿死;每一个sq和cq对具有一个指令地址command_id,用于标记该指令command的唯一地址。如果cpu/18或者acc/19有任务,可以申请指令地址command_id,通过slv/6下发一个指令command。sq_cq_entry/9通过mst/5获取相应的sq_command提交队列指令信息,并根据sq/cq_info/10完成cq_command完成队列指令的信息填写。其中,sq_command提交队列指令和cq_command完成队列指令内容与nvme规定的一致。图8是根据本发明实施方式的队列的sq_cq_info/10的数据结构的示意图,如图8所示,为sq_cq_info/10的数据结构,包括不限于以下数据:sq_base_addr:sq队列的基地址;current_saddr:当sq队列的物理地址非连续时,当前代处理的command的物理地址;qsize:sq队列的大小;qid:队列号;cqid:当前队列对应的完成队列;priority/pc:当前队列的优先级/物理地址是否连续;timestamp:当前队列最后一次处理的时间;queue_enable:队列使能;abort_command:当前队列有待取消的任务,需要查询admin队列;abuse:当前队列的上一个任务需要保序;delete:本队列正在删除;current_caddr:cq队列的当前command的物理地址;ien:中断使能;interrupt:中断向量;图9是根据本发明实施方式的队列的order_table/11的示意图,如图9所示,order_table/11的深度应该根据需要保序任务的多少设置,例如8个保序深度。每个保序队列需要存储sq_num(提交队列编号)/sqid(提交队列地址)/command_id(提交队列指令)等信息。当执行单元完成一个指令command且该指令command为保序任务时,需要更新指令地址command_id,order_table/11根据指令地址command_id释放下一个指令command或者回写保序队列的完成状态。图10是根据本发明实施方式的队列替换group的示意图,如图10所示,替换group的机制为:1、队列位图qbitmap[12](queuebitmap)通过硬连线通知队列queue哪个队列组group有任务,其中,硬连线1004可以设置循环multicycle;2、不同的队列组group可以通过rr/wrr轮询;3、队列queue/1001根据轮询的结果发出对应的队列组group的地址,更新队列组group相关信息;4、同时保存队列组编号group_num/1003和负载时间load_time/1002;5、队列queue取当前队列组group的指令command完成任务,直到退出该队列组group的条件满足;6、队列queue通过写命令将队列组编号group_num/1003和负载时间load_time/1002通过1008更新到ddr;7、ddr比较当前队列组group和时间戳timestamp,如果发现在队列queue处理期间有过主机host更新,则不能改变队列位图qbitmap/12的信息,即当前队列组group还有待做的任务;8、队列queue取下一个队列组group;图11是根据本发明实施方式的在队列数量较少的情况下队列替换group的示意图,如图11所示,当需要的队列数较少时,可以直接将所有的队列信息保存在片上系统soc(syetemonchip,片上系统)上,通过复用器mux选择,主机host的更新updata信息全部更新到soc上,实现队列的快速模式,上述片上系统soc可以为控制器controller的片上系统。本实施方式具有以下关键点:1、可以支持1~65536个队列;2、可以根据任务需要,执行不同队列的服务质量qos调度;3、具有防饿死机制,每一个任务都有机会执行;4、将队列分成队列组group,最小化片上和ddr资源,方便按照队列组group为单位替换;5、将队列分成队列组group,按照二级调度,可以优化实现资源同时获得较理想的调度结果,逻辑简单,易于实现;6、片上资源和ddr资源具有相同的数据结构,便于直接替换,易于实现;7、片上的位图bitmap/8实现机制和ddr按照队列组group机制的位图bitmap/12机制及数据结构;8、sq/cq_info/10和sq/cq_info/14具有相同的数据结构以及相关内容;9、sq/cq_doorbell/1/2/3/4/15的数据转换,保证ddr效率的同时,可以方便的实现queue和ddr共享;10、合理的cap.dstrd,保证ddr的最大执行效率;11、时间戳timestamp机制,即记录主机host上任务更新的时刻和片上资源交换的时刻,保证任务不丢失;12、cpu可以直接访问sq/cq_entry,方便任务管理;13、不同的指令command可以乱序和保序执行,同时不影响任务的并发度;14、可以支持快速工作模式,即当任务队列较少时,直接使用片上的资源。本实施方式可以实现任意的队列数(1~64k),不同的队列之间可以进行wrr/rr/user定义的调度方式,积极的防饿死机制,可以有效的管理多队列。多任务可以实现乱序和保序,多任务可以同时工作,提供优异性能的同时也兼顾了面积和实现难度。队列组group机制以及队列组group防止任务丢失机制,可以保证系统安全稳定的运行,每一个任务都有机会参与调度。按照队列组group替换可以有效的节省资源和实现难度,同时获得相对较好的功耗。ddr按照队列组group提供相关信息(任务、时间戳timestamp),有效的节省了实现资源,避免队列queue和ddr交互的困难,方便实现的同时还可以提供优异的性能。主机host将门铃doorbell信息直接写入ddr或者队列queue,可以根据需要选择,当队列较少时,获得相对优异的性能和低功耗。图12是根据本发明实施例的一种数据队列的处理装置的示意图,如图12所示,根据本发明实施例的另一方面,还提供了一种数据队列的处理装置,包括:获取模块1202和处理模块1204,下面对该装置进行详细说明。获取模块1202,用于获取存储器存储的待处理的队列组,其中,待处理的队列组为包括待处理的数据队列的队列组,存储器用于接收数据队列消息,并将数据队列消息对应的数据队列分成队列组进行存储;处理模块1204,与上述获取模块1202相连,用于对待处理的队列组中的数据队列进行处理,其中,待处理的队列组的数据队列的数量不超过本地存储数据队列的最大数量。通过上述装置,采用获取模块1202获取存储器存储的待处理的队列组,其中,待处理的队列组为包括待处理的数据队列的队列组,存储器用于接收数据队列消息,并将数据队列消息对应的数据队列分成队列组进行存储;处理模块1204对待处理的队列组中的数据队列进行处理,其中,待处理的队列组的数据队列的数量不超过本地存储数据队列的最大数量的方式,通过在存储器中将多个数据队列,分成队列组进行存储,处理器以队列组为单位对数据队列进行处理,达到了对多数据队列进行有效快速处理的目的,从而实现了提高多数据队列处理的效率的技术效果,进而解决了相关技术中的多队列处理方法,调度困难,效率低的技术问题。图13是根据本发明实施例的另一种数据队列的处理装置的示意图,如图13所示,根据本发明实施例的另一方面,还提供了一种数据队列的处理装置,包括:存储模块1302和发送模块1304,下面对该装置进行详细说明。存储模块1302,用于接收数据队列消息,并将数据队列消息对应的数据队列分成队列组进行存储;发送模块1304,与上述存储模块1302相连,用于将待处理的队列组发送给处理器,其中,待处理的队列组为包括待处理的数据队列的队列组,待处理的队列组的数据队列的数量不超过处理器存储数据队列的最大数量,处理器用于对队列组中的队列进行处理。通过上述装置,采用存储模块1302接收数据队列消息,并将数据队列消息对应的数据队列分成队列组进行存储;发送模块1304将待处理的队列组发送给处理器,其中,待处理的队列组为包括待处理的数据队列的队列组,待处理的队列组的数据队列的数量不超过处理器存储数据队列的最大数量,处理器用于对队列组中的队列进行处理的方式,通过在存储器中将多个数据队列,分成队列组进行存储,处理器以队列组为单位对数据队列进行处理,达到了对多数据队列进行有效快速处理的目的,从而实现了提高多数据队列处理的效率的技术效果,进而解决了相关技术中的多队列处理方法,调度困难,效率低的技术问题。根据本发明实施例的另一方面,还提供了一种计算机存储介质,计算机存储介质包括存储的程序,其中,在程序运行时控制计算机存储介质所在设备执行上述中任意一项的数据队列的处理方法。根据本发明实施例的另一方面,还提供了一种处理器,处理器用于运行程序,其中,程序运行时执行上述中任意一项的数据队列的处理方法。上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。以上所述仅是本发明的优选实施方式,应当指出,对于本
技术领域
:的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1