队列管理中的数据出队方法及装置的制作方法

文档序号:7782554阅读:235来源:国知局
专利名称:队列管理中的数据出队方法及装置的制作方法
技术领域
本发明实施例涉及数据处理技术领域,尤其涉及一种队列管理中的数据出队方法及装置。
背景技术
在数据交换类芯片中,队列管理(Queue Manager,简称为QM)是一种常用的关键技术。QM是将芯片输入信元的描述符(Cell Descriptor,简称为⑶)信息按所属队列进行缓存,等待控制通路的调度后再输出。各个队列内部按照先入先出(First In First Out,简称为FIF0)的方式进行管理。各个队列之间采用链表方式共享一块或者多块描述符缓存。描述符缓存的类型通常采用延迟固定的片内的具有静止存储功能的内存(Static Random Access Memory,简称为SRAM)、增强动态随机存取存储器(Enhanced Dynamic Random Access Memory,简称为EDRAM)、或者片外的四相数据率存储器(Quad Data Rate Memory,简称为QDR)、缩短读潜伏时间的动态随机存取器(Reduce Latency Dynamic Random Access Memory,简称为RLDRAM)等等。描述符缓存中的队列链表(Link List Memory,简称为LLM)的数据结构中至少包括队头节点、队尾节点、总节点个数和队长计数。其中,队头节点用于保存队列中队头节点的CD和下一个节点的CD缓存地址。队尾节点用于保存队列的队尾节点CD。总节点个数用于说明队列链表总共的节点数N,每个节点的指针可以取值在0 N-I之间,指针代表了链表的下一个节点的地址。队长计数用于保存队列的长度,单位为CD的个数。每次数据的出入队都需要刷新该计数长度。现有技术中至少存在如下问题数据出队时,需要读取队列链表中下一个节点的地址,然后才能根据该地址发起缓存的读操作,对数据的出队速度有很大影响。

发明内容
本发明实施例提供一种队列管理中的数据出队方法及装置,用以解决现有技术中数据出队速度较慢的问题。本发明实施例提供一种队列管理中的数据出队方法,包括交替使用N组指针在队列链表中指示N个队列,所述N个队列中的每个队列包括多个有顺序的节点,所述N个队列中的每个节点对应一个缓存地址,所述N组指针中的每组指针包括头指针和尾指针,所述头指针用于指示队头节点,所述尾指针用于指示队尾节

根据所述队尾节点对应的缓存地址在缓存中读出出队数据,并输出所述出队数据;N为大于等于2的正整数。本发明实施例提供一种队列管理中的数据出队装置,包括处理单元,用于交替使用N组指针在队列链表中指示N个队列,所述N个队列中的每个队列包括多个有顺序的节点,所述N个队列中的每个节点对应一个缓存地址,所述N组指针中的每组指针包括头指针和尾指针,所述头指针用于指示队列头节点,所述尾指针用于指示队列尾节点;输出单元,用于根据所述队列尾节点对应的缓存地址在缓存中读出出队数据,并输出所述出队数据;N为大于等于2的正整数。本发明实施例的队列管理中的数据出队方法及装置,通过交替使用N组指针在队列链表中指示N个队列,每个队列包括多个有顺序的节点,每个节点对应一个缓存地址,每组指针包括头指针和尾指针,用头指针指示队头节点,用尾指针指示队尾节点,根据队尾节点对应的缓存地址在缓存中读出出队数据,并输出出队数据。其中,N组指针的队尾节点对应的缓存地址在缓存中可以同时读出N组出队数据,尽可能地减少由于队列链表的访问延迟而造成的数据出队的延迟。有效提高了数据出队的速率。


为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本发明一个实施例提供的队列管理中的数据出队方法的流程图;图2为本发明又一实施例提供的队列管理中的数据出队方法的流程图;图3为本发明再一实施例提供的队列管理中的数据出队方法的流程图;图4为本发明还一实施例提供的队列管理中的数据出队方法的流程图;图5a 图5e为本发明实施例提供的信元入队的示意图;图6为本发明又一个实施例提供的队列管理中的数据出队方法的流程图;图7为本发明一个实施例提供的队列管理中的数据出队装置的结构示意图。
具体实施例方式为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。图1为本发明一个实施例提供的队列管理中的数据出队方法的流程图,如图1所示,该方法包括步骤101、交替使用N组指针在队列链表中指示N个队列,该N个队列中的每个队列包括多个有顺序的节点,每个节点对应一个缓存地址,N组指针中的每组指针包括头指针和尾指针,头指针用于指示队头节点,尾指针用于指示队尾节点。需要说明的是,外部器件的时钟周期与芯片访问队列链表的时钟周期是不同的, 例如,外部器件的时钟周期是ls,而芯片访问队列链表的时钟周期是5s。也就是说,外部器件将数据发送给芯片,以使芯片访问队列链表,经过5s,芯片才能够向外部器件返回信息, 那么对于外部器件的器件而言,已经过去了 5个ls,也就是延误了 5个外部器件的时钟周期,这就是访问队列链表的延迟时钟。为了克服上述访问队列链表的延时,本发明实施例通过N组指针去指示队列链表的N个队列。N的数目可以由访问队列链表的延迟时钟来定。仍以上述具体实例为例,访问队列链表的延迟时钟为5个外部器件的时钟周期,那么N优选等于5。也就是说用5组指针去指示队列链表的5个队列,每一组队列都包括多个有顺序的节点,每个节点都对应一个缓冲地址。5组指针中的每组指针都包括头指针和尾指针,其中的头指针用于队头节点, 尾指针用于指示队尾节点。步骤102、根据队尾节点对应的缓存地址在缓存中读出出队数据,并输出该出队数据,其中,N为大于等于2的正整数。由于使用了 N组指针指示队列链表的N个队列,也就是说,N个外部器件的时钟周期,芯片接收到了外部器件发送的N次数据,如果每次接收到的数据进入队列链表中不同的队列,那么就会有N个队尾节点。芯片将N个队尾节点对应的缓存地址通知外部器件, 以使得外部器件根据N个队尾节点对应的缓存地址在缓存中读出N个出队数据,并按照外部器件的时钟周期依次输出该N个出队数据,可以有效避免芯片访问队列链表所造成的延时,实现数据的连续出队。仍以步骤101中的具体实例为例,使用了 5组指针指示队列链表的5个队列,5个外部器件的时钟周期,芯片接收到了 5次数据,每次接收到的数据进入队列链表中不同的队列,那么就有5个队尾节点。芯片将5个队尾节点对应的缓存地址通知外部器件,以使得外部器件根据5个队尾节点对应的缓存地址在缓存中读出5个出队数据,并按照外部器件的时钟周期依次输出5个出队数据。输出最后一个出队数据后,由于已经过了 5个外部器件的时钟周期,下5个出队数据已经读出,准备好依次出队,因此实现了数据的连续出队。这里需要说明的是,出队数据可以是信元,也可以是信元描述符。通过如上描述还可以知道,步骤101中交替使用N组指针在队列链表中指示N个队列具体可以理解为在N个外部器件的时钟周期内交替使用N组指针在队列链表中指示 N个队列。在上述实施方式的基础上,图2为本发明又一实施例提供的队列管理中的数据出队方法流程图,如图2所示,在图1的基础上,该方法还可以包括步骤100a、将入队数据存入缓存中,并按照入队数据的缓存地址在当前队列中创建节点;具体的,在接收到数据的入队请求时,根据接收到的入队请求在缓存中申请该入队数据的缓存地址,并将入队数据存入已申请的缓存地址中,然后根据已申请的缓存地址在当前队列中创建相应的节点。步骤100c、使用当前组指针中的当前尾指针指示所创建的节点,当前组指针中的当前头指针指示当前队列的队头节点。在上述实施方式的基础上,图3为本发明再一实施例提供的队列管理中的数据出队方法流程图,如图3所示,在步骤IOOc之前,该方法还可以包括步骤100b、通过指针数目寄存器对当前组指针进行标识。其中,可以使用一个总指针数目寄存器用于对当前组指针进行标识,这种情况建立在头尾指针彼此关联而作为一组指针的情况。还可以使用头指针数目寄存器对当前组指针的头指针进行标识,使用尾指针数目寄存器对当前组指针的尾指针进行标识,这种情况下头尾指针可以彼此没有关系,而在方法执行过程中任意的头尾指针都可以组成一组指针作为当前组指针。图4为本发明还一实施例提供的队列管理中的数据出队方法的流程图,图4提供的方法是上述方法实施例的一种具体形式,不用以限制本发明的保护范围。如图4所示,该方法包括步骤401、数据交换类芯片接收到输入信元的入队请求,入队请求中携带该请求入队的信元所属队列的ID。步骤402、判断空闲地址池是否为空;如果不为空,则为该请求入队的信元申请一个描述符缓存(⑶RAM)的缓存地址 (CurrentPtr),并执行步骤 403 ;如果为空,则进行相关的异常处理。这里的异常处理包括丢弃当前的描述符、停止入队同时报警等等。其中,空闲地址池可以理解为信元入队时分配的缓冲的空闲地址,用于存放⑶。步骤403、根据该请求入队的信元所属队列的ID,获得该队列当前入队的尾指针。当然在步骤403中还可以获得该队列的长度,作为QM的一个基本元素,用于判断队列是否为空。步骤404、将请求入队的信元的描述符写入描述符缓存中的缓存地址,并将当前入队的尾指针指向LLM的空白处填入当前分配的缓存地址。步骤405、更新当前可用的指针和队列长度。一种实施方式下,如果获得的队列长度为0 N,也就是说全部头尾指针中仍存在没有被使用过的指针,则将当前可用的头指针也更新为当前分配的缓存地址(即与尾指针指向相同的LLM的位置);如果获得的队列长度大于N,也就是说所有的头尾指针都已经被使用过,则需要将当前可用的尾指针更新为当前分配的缓存地址。执行完上述方法后,将队列长度加1。随着N个尾指针的依次使用,可以将同一队列连续入队的⑶均勻地串为N条子链。使得芯片可以同时读取各条子链上的数据,并发送给外部器件。下面通过一种具体的例子对信元的入队方法进行描述,假设LLM的访问延迟是外部器件的时钟周期的两倍,则N为2,即一个队列包含2个头指针和2个尾指针。其中通过头指针数目寄存器对当前出队的头指针进行标识,通过尾指针数目寄存器对当前入队的尾指针进行标识。如图5a 图5e所示的信元入队的示意图。图5a中为初始化状态,头指针数目寄存器HeadPtrNum中标识的当前出队的头指针为HeadPtrJ),尾指针数目寄存器Tai IPtrNum中标识的当前入队的尾指针为Tai lPtr_0, 可用的头指针包括HeadPtr_0和HeadPtr_l,可用的尾指针包括TailPtr_0和TailPtr_l, 队列长度Qlen = 0。图5b在图5a的基础上向LLM输入一个描述符缓存的地址为2的信元,HeadPtrJ) =2,TailPtrJ) = 2,Qlen = 1,可用的头指针仍为HeadPtr_0, TailPtrNum将当前入队的尾指针更新为TailPtr_l。图5c在图5b的基础上向LLM输入一个描述符缓存的地址为4的信元,HeadPtr_l=4,HeadPtr_l = 4,Qlen = 2,可用的头指针仍为HeadPtr_0,TailPtrNum将当前入队的尾指针更新为TailPtrJ)。图5d在图5c的基础上向LLM输入一个描述符缓存的地址为6的信元,HeadPtrJ) =2,HeadPtrJ)指向的下一个信元的描述符缓存的地址为6,TailPtrJ) = 6,Qlen = 3,可用的头指针仍为HeadPtr_0,TailPtrNum将当前入队的尾指针更新为TailPtr_l。图5e为图5d的基础上向LLM输入一个描述符缓存的地址为10的信元,HeadPtr_l =4,HeadPtr_l指向的下一个信元的描述符缓存的地址为10,TailPtr_l = 10,Qlen = 4, 可用的头指针仍为HeadPtr_0,TailPtrNum将当前入队的尾指针更新为TailPtr_0。图6为本发明又一个实施例提供的队列管理中的数据出队方法的流程图,如图6 所示,该方法包括步骤601、数据交换类芯片接收到输入信元的出队请求,出队请求中携带该请求出队的信元所属队列的ID。步骤602、根据该请求出队的信元所属队列的ID,获得该队列的长度以及该队列当前可用的头指针。步骤603、将LLM中第一个节点存储的下一个节点的缓存地址更新为当前可用的头指针指向的位置,并将队列的长度减1。 步骤604、将当前可用的队列头指针送空闲地址管理模块(Free Address Manager,简称为FAM)回收。步骤605、输出在描述符缓存中读出的描述符。本发明实施例的队列管理中的数据出队方法,通过交替使用N组指针在队列链表中指示N个队列,每个队列包括多个有顺序的节点,每个节点对应一个缓存地址,每组指针包括头指针和尾指针,用头指针指示队头节点,用尾指针指示队尾节点,根据队尾节点对应的缓存地址在缓存中读出出队数据,并输出出队数据。其中,N组指针的队尾节点对应的缓存地址在缓存中可以同时读出N组出队数据,尽可能地减少由于队列链表的访问延迟而造成的数据出队的延迟。有效提高了数据出队的速率。本领域普通技术人员可以理解实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括R0M、RAM、磁碟或者光盘等各种可以存储程序代码的介质。图7为本发明一个实施例提供的队列管理中的数据出队装置的结构示意图,如图7所示,该队列管理中的数据出队装置为上述方法实施例中队列管理中的数据出队方法的执行主体,可以为一种具体型号的芯片或者处理器等外部器件(相对于数据交换芯片而言),此处不做限定。该队列管理中的数据出队装置包括处理单元701和输出单元702。 其中,处理单元701用于交替使用N组指针在队列链表中指示N个队列,该N个队列中的每个队列包括多个有顺序的节点,该N个队列中的每个节点对应一个缓存地址,该N组指针中的每组指针包括头指针和尾指针,该头指针用于指示队列头节点,该尾指针用于指示队列尾节点;输出单元702用于根据该队列尾节点对应的缓存地址在缓存中读出出队数据,并输出该出队数据;N为大于等于2的正整数。在上述实施方式的基础上,该处理单元701还用于通过指针数目寄存器对当前组指针进行标识。在上述任一种实施方式的基础上,该处理单元701还用于根据接收的入队请求在缓存中申请该入队数据的缓存地址,并将入队数据存入已申请的缓存地址中本发明实施例的队列管理中的数据出队装置,通过交替使用N组指针在队列链表中指示N个队列,每个队列包括多个有顺序的节点,每个节点对应一个缓存地址,每组指针包括头指针和尾指针,用头指针指示队头节点,用尾指针指示队尾节点,根据队尾节点对应的缓存地址在缓存中读出出队数据,并输出出队数据。其中,N组指针的队尾节点对应的缓存地址在缓存中可以同时读出N组出队数据,尽可能地减少由于队列链表的访问延迟而造成的数据出队的延迟。有效提高了数据出队的速率。最后应说明的是以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
权利要求
1.一种队列管理中的数据出队方法,其特征在于,包括交替使用N组指针在队列链表中指示N个队列,所述N个队列中的每个队列包括多个有顺序的节点,所述N个队列中的每个节点对应一个缓存地址,所述N组指针中的每组指针包括头指针和尾指针,所述头指针用于指示队头节点,所述尾指针用于指示队尾节点;根据所述队尾节点对应的缓存地址在缓存中读出出队数据,并输出所述出队数据;N 为大于等于2的正整数。
2.根据权利要求1所述的方法,其特征在于,还包括将入队数据存入所述缓存中,并按照入队数据的缓存地址在当前队列中创建节点,并使用当前组指针中的当前尾指针指示所创建的节点,所述当前组指针中的当前头指针指示当前队列的队头节点。
3.根据权利要求2所述的方法,其特征在于,所述在使用当前组指针中的当前尾指针指示所创建的节点之前,还包括通过指针数目寄存器对当前组指针进行标识。
4.根据权利要求2或3所述的方法,其特征在于,所述将入队数据存入所述缓存中包括根据接收的入队请求在缓存中申请所述入队数据的缓存地址,并将入队数据存入已申请的缓存地址中。
5.根据权利要求1-4中任一项所述的方法,其特征在于,所述交替使用N组指针在队列链表中指示N个队列包括在N个芯片时钟周期内交替使用N组指针在队列链表中指示N个队列。
6.根据权利要求1-5中任一项所述的方法,其特征在于,所述数据为信元或信元的描述符。
7.一种队列管理中的数据出队装置,其特征在于,包括处理单元,用于交替使用N组指针在队列链表中指示N个队列,所述N个队列中的每个队列包括多个有顺序的节点,所述N个队列中的每个节点对应一个缓存地址,所述N组指针中的每组指针包括头指针和尾指针,所述头指针用于指示队列头节点,所述尾指针用于指示队列尾节点;输出单元,用于根据所述队列尾节点对应的缓存地址在缓存中读出出队数据,并输出所述出队数据;N为大于等于2的正整数。
8.根据权利要求7所述的装置,其特征在于,所述处理单元,还用于将入队数据存入所述缓存中,并按照入队数据的缓存地址在当前队列中创建节点,并使用当前组指针中的当前尾指针指示所创建的节点,所述当前组指针中的当前头指针指示当前队列的队列头节点ο
9.根据权利要求8所述的装置,其特征在于,所述处理单元,还用于通过指针数目寄存器对当前组指针进行标识。
10.根据权利要求8或9所述的装置,其特征在于,所述处理单元,还用于根据接收的入队请求在缓存中申请所述入队数据的缓存地址,并将入队数据存入已申请的缓存地址中。全文摘要
本发明提供一种队列管理中的数据出队方法及装置。方法包括交替使用N组指针在队列链表中指示N个队列,所述N个队列中的每个队列包括多个有顺序的节点,所述N个队列中的每个节点对应一个缓存地址,所述N组指针中的每组指针包括头指针和尾指针,所述头指针用于指示队头节点,所述尾指针用于指示队尾节点;根据所述队尾节点对应的缓存地址在缓存中读出出队数据,并输出所述出队数据;N为大于等于2的正整数。装置包括处理单元和输出单元。本发明提供的方案有效提高了数据出队的速率。
文档编号H04L12/24GK102437929SQ20111042422
公开日2012年5月2日 申请日期2011年12月16日 优先权日2011年12月16日
发明者张科, 秦思林 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1