CN101594302A - 数据出队的方法及装置 - Google Patents
数据出队的方法及装置 Download PDFInfo
- Publication number
- CN101594302A CN101594302A CNA2009100880759A CN200910088075A CN101594302A CN 101594302 A CN101594302 A CN 101594302A CN A2009100880759 A CNA2009100880759 A CN A2009100880759A CN 200910088075 A CN200910088075 A CN 200910088075A CN 101594302 A CN101594302 A CN 101594302A
- Authority
- CN
- China
- Prior art keywords
- team
- message
- processing engine
- goes out
- group
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/90—Buffering arrangements
- H04L49/9047—Buffering arrangements including multiple buffers, e.g. buffer pools
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/90—Buffering arrangements
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/90—Buffering arrangements
- H04L49/901—Buffering arrangements using storage descriptor, e.g. read or write pointers
Abstract
一种数据出队的方法及装置,其主要包括:获取各个队列中的报文的存储地址,并根据各个队列中的报文的存储地址,由多个出队处理引擎并行对各个队列中的报文进行出队操作。本发明实施例通过多出队处理引擎执行出队处理的方式同时对多个队列的报文进行出队处理,从而可以有效提高数据调度出队的效率,改善数据调度出队的性能。
Description
技术领域
本发明涉及通信技术领域,尤其涉及一种数据调度出队技术。
背景技术
在通信芯片中,经常需要处理大量的队列,相应的队列数据通常存放在单独的片外存储器中,并以采用链表的数据结构进行管理。其中,链表的控制信息可以单独存放在访问速度较快的SSRAM(同步静态存储器)中,队列数据则可以存放于容量较大且可并行操作的SDRAM(同步动态存储器)中。
队列数据的结构可以采用头尾指针(header,tail)作为主要信息进行管理。在对数据进行出队操作的过程中可以包括:
(1)接收出队命令,相应的出队命令可以为指示将一个或多个报文出队,相应的总的出队数据量可以为credit个字节;
(2)读取头指针header所指的链表单元,并采用读出的所述链表单元中的下个链表单元地址nxt_pd_ptr更新头指针header;
(3)从credit个字节中减去读出的链表单元中的信息info中的数据长度,若剩余的字节数credit>0,则仍存在需要出队的数据,即需要重复执行步骤(2),直到剩余字节credit<=0时,完成出队操作。
在实现本发明过程中,发明人发现现有技术中至少存在如下问题:
在上述处理过程中,只有读出了队列头所指的链表单元的下一指针,才可以开始对下一个链表单元的节点对应的数据进行出队,这种前后操作顺序的依赖性导致出队性能受到限制,降低了出队效率。
发明内容
本发明的实施例提供了一种数据出队的方法及装置,以有效提高出队的效率,改善数据出队处理性能。
一种数据出队的方法,包括:
获取各个队列中的报文的存储地址;
根据各个队列中的报文的存储地址,由多个出队处理引擎并行对各个队列中的报文进行出队操作。
一种数据出队的装置,包括:
信息获取单元,用于获取各个队列中的报文的存储地址;
多引擎出队操作单元,用于根据所述信息获取单元获取的各个队列中的报文的存储地址,由多个出队处理引擎并行对各个队列中的报文进行出队操作。
由上述本发明的实施例提供的技术方案可以看出,其通过多出队处理引擎的方式同时并行地对待出队的多个报文进行出队处理,从而可以有效提高数据调度出队的效率,改善数据调度出队的性能。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的处理过程示意图;
图2A为本发明实施例提供的装置结构示意图一;
图2B为本发明实施例提供的装置结构示意图二;
图3为本发明实施例中应用的多链表数据结构示意图;
图4为本发明实施例提供的装置结构示意图三。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例中,在接收到出队命令后,可以获取各个队列中的报文的存储地址,并根据各个队列中的报文的存储地址,由多个出队处理引擎并行对各个队列中的报文进行出队操作,其中,相应的各个出队处理引擎可以各自独立的对报文执行相应的出队操作,即多个出队处理引擎可以同时对多个报文执行相应的出队操作,相应的报文的存储地址则可以为报文首的存储地址,也可以为报文首的存储地址和报文尾的存储地址。
进一步地,为了能够实现多队列高速率的出队处理,本发明实施例提供的数据出队的实现方案中,如图1所示,具体可以包括以下步骤:
步骤1,接收到出队命令,该出队命令中包含出队数据量信息,该出队数据量信息指示了根据该出队命令需要执行出队操作的出队数据量;
步骤2,为需要出队的报文分配对应的出队处理引擎,确定各个出队处理引擎各自需要执行出队操作的数据量;
具体地,在接收到所述出队命令后,则可以在多个出队处理引擎中为当前需要出队的报文选择分配对应的出队处理引擎,并将从出队命令中获取的出队数据量减去已经分配出队处理引擎的报文的数据量,同时,还将该已经分配出队处理引擎的报文的数据量作为相应报文对应的出队处理引擎需要执行出队操作的数据量;
在上述将从出队命令中获取的出队数据量减去已经分配出队处理引擎的报文的数据量的过程中,根据相减后的结果,还需要确定是否继续其他需要出队的报文分配对应的出队处理引擎,具体的处理方式可以包括:
(1)若相减后的值大于零,则表示可以继续进行出队处理,并继续为下一个需要出队的报文分配对应的出队处理引擎,直到相减后的值小于或等于零时,停止本次出队操作过程中的出队处理引擎的分配,即不再继续为未出队的报文分配对应的出队处理引擎;
(2)若相减后的值小于零,则在接收到下一个出队命令后,可以从下一个接收到的出队命令携带的新的出队数据量中扣除所述小于零的绝对值,并将扣除后的结果作为接收到的出队命令的更新后的出队数据量。即当相应的相减后的值小于零时,则需要对下次收到的出队命令中包含的新的出队数据量进行更新,以扣除之前出队操作过程中已经提前出队的数据量;
在为当前需要出队的报文选择分配对应的出队处理引擎的过程中,具体可以根据预先设置的规则在多个出队处理引擎中选择一个出队处理引擎作为当前需要出队的报文的出队处理引擎;相应的预先设置的规则可以为随机选择的方式选择出队处理引擎,或者,也可以为依次选择的方式选择出队处理引擎,或者也可以为其他任意设定的选择方式选择出队处理引擎。
步骤3,将各个出队处理引擎各自需要执行出队操作的数据量传送给相应的出队处理引擎;
例如,可以将需要出队的报文的数据量作为需要执行出队操作的数据量传送给为该报文分配的出队处理引擎;
在为当前需要出队的报文分配对应的出队处理引擎后,对于队列首报文(即队列中的队首报文),除将各个出队处理引擎各自需要执行出队操作的数据量传送给为其分配的出队处理引擎外,还可以将在出队命令中携带相应的队列首报文的存储地址传送给为其分配的出队处理引擎;而对于非队列首报文,则可以不必在出队命令中携带相应的报文的存储地址(即无需将非队列首报文的存储地址(即队列首报文首的存储地址)传送给为其分配的出队处理引擎),此时,出队处理引擎可以根据之前获得的相应的队列首报文的存储地址来计算确定相应的非队列首报文的存储地址(即非队列首报文首的存储地址)。当然,对于非队列首报文,也可以在出队命令中携带相应的报文的存储地址(即报文首的存储地址),并可以将非队列首报文的存储地址传送给为其分配的出队处理引擎,此时,出队处理引擎便可以直接获得相应的报文的存储地址。
步骤4,所述多个出队处理引擎根据获得的报文的存储地址(即报文首的存储地址),以及各自需要执行出队操作的数据量,对各个队列中的报文进行的出队操作,以实现相应的出队操作;
进一步地,在该步骤中,各个出队处理引擎可以根据获得的其自身需要执行出队操作的数据量,从相应的报文的存储地址(即报文首的存储地址)开始执行相应的出队操作,直到出队的数据量达到其自身需要执行出队操作的数据量时停止执行出队操作;
相应的出队处理引擎具体通过计算的方式获得的该报文的存储地址,也可以通过接收外部传递来的报文的地址信息的方式获得相应的报文存储地址,或者,也可以通过其他方式获得相应的报文的存储地址;
其中,在执行出队操作时,可以根据报文所在的地址依次执行出队操作,也可以打乱顺序,不是依次出队。
在该步骤中,多个出队处理引擎采用了各自独立的并行对报文执行相应的出队操作的出队处理方式,从而可以有效提高出队操作的效率。
再者,为了能够实现多队列高速率的出队处理,本发明实施例提供的数据出队的实现方案中,也可以包括以下过程:
(1)接收到出队命令,该出队命令中包含需要执行出队操作的各个队列中的报文的存储地址;
相应的报文的存储地址具体可以包括:报文首的存储地址和报文尾的存储地址,以便于确定报文的首尾位置;
(2)为需要出队的报文分配对应的出队处理引擎,并将各个队列中的报文的存储地址传送给相应的出队处理引擎;
(3)多个出队处理引擎根据获得的报文的存储地址,对各个队列中的报文进行的出队操作,以实现相应的出队操作。
本发明实施例中,在通过相应的上述步骤4或上述过程(3)完成对一个报文或队列的出队处理后,还可以释放该报文或队列占用的出队处理引擎,以便于其他报文或队列的出队处理操作过程中可以占用该出队处理引擎。例如,在对各个报文进行出队操作时,可以由为同一报文分配的出队处理引擎对该报文包含的多个信元进行出队处理,即由该报文对应的出队处理引擎连续地优先对该报文包含的多个信元进行出队操作,此时,在该报文的所有信元的出队处理操作完成后,便可以释放为该报文分配的出队处理引擎。
综上所述,本发明实施例中,针对多报文的出队操作提出一套多引擎的出队处理的方案,从而可以有效地利用片外存储器的访问带宽,充分提高系统的出队处理性能。
本发明实施例还提供了一种数据出队的装置,其具体实现结构如图2A和图2B所示,可以包括以下处理单元:
信息获取单元201,用于获取各个队列中的报文的存储地址,以便于出队操作过程中可以获知相应的报文的位置;
多引擎出队操作单元202,用于通过上述信息获取单元201获取的各个队列中的报文的存储地址,由多个出队处理引擎并行对各个队列中的报文进行出队操作,相应的报文的存储地址可以为报文首的存储地址,也可以为报文首的存储地址和报文尾的存储地址,相应的各个出队处理引擎可以各自独立的对报文执行相应的出队操作,使得多个出队处理引擎可以同时对多个报文执行相应的出队操作;即由多个出队处理引擎采用了各自独立的并行对报文执行相应的出队操作的出队处理方式,从而可以有效提高出队操作的效率。
进一步地,该装置还可以包括引擎分配处理单元203和出队管理单元204,其中:
引擎分配处理单元203,用于为当前需要出队的报文分配对应的出队处理引擎,以便于多引擎出队操作单元202可以通过为各报文分配的出队处理引擎并行对各个报文进行出队操作;该单元还将从接收到的出队命令中获取的该报文的存储地址传送给为其分配的出队处理引擎,以便于所述信息获取单元201可以获得相应的报文的存储地址,或者,将该报文的数据量作为需要执行出队操作的数据量传送给为该报文分配的出队处理引擎,以便通过相应的出队处理引擎对该报文进行出队处理;
其中,在该引擎分配处理单元203为当前需要出队的报文分配对应的出队处理引擎的过程中,具体可以根据预先设置的规则在多个出队处理引擎中选择一个出队处理引擎作为当前需要出队的报文的出队处理引擎;相应的预先设置的规则可以为随机选择的方式选择出队处理引擎,或者,也可以为依次选择的方式选择出队处理引擎,或者,也可以为其他任意设定的选择方式选择出队处理引擎,等等;
在该引擎分配处理单元203将报文的存储地址传送给出队处理引擎的过程中,相应的报文的存储地址具体可以包括:报文首的存储地址和报文尾的存储地址,相应的报文的存储地址可以从接收到的出队命令获得。而在该引擎分配处理单元203将该报文的数据量作为需要执行出队操作的数据量传送给为该报文分配的出队处理引擎的过程中,也可以将队列首报文的存储地址传送给为该报文分配的出队处理引擎,其中,相应的队列首报文的存储地址具体可以从接收到的出队命令中获得,例如,对于队列首报文(即队列中的队首报文),还可以在出队命令中携带队列首报文的存储地址;对于非队列首报文,则可以不必在出队命令中携带相应的报文的存储地址,此时,出队处理引擎可以根据相应的队列首报文的存储地址来确定相应的非队列首报文的存储地址;当然,对于非队列首报文,也可以在出队命令中携带相应的报文的存储地址(此时,只需要报文首的存储地址即可),此时,出队处理引擎便可以直接获得相应的报文的存储地址,进而确定相应的报文的存储位置。
出队管理单元204,用于将从出队命令中获取的出队数据量减去已经分配出队处理引擎的报文的数据量后,若相减后的值大于零,则通知上述引擎分配处理单元203继续为下一个需要出队的报文分配对应的出队处理引擎,直到相减后的值小于或等于零,则该出队管理单元204不再通知上述引擎分配处理单元203继续为下一个未出队的报文继续分配相应的出队处理引擎。
在该装置进行出队处理过程中,相应的出队管理单元204获得的相减后的值可能小于零,此时,在该装置还可以包括出队数据量更新单元205,用于在上述出队管理单元204获得的相减后的值小于零时,在接收到新的出队命令后,从接收到的新的出队命令携带的新的出队数据量中扣除所述小于零的绝对值,并将扣除后的结果作为接收到的出队命令的更新后的出队数据量,以实现对下一次收到的出队命令中的新的出队数据量的更新操作。
进一步地,该装置还可以包括引擎释放单元206,用于在多引擎出队操作单元202完成对一个报文或队列的出队处理后,释放该报文或队列占用的出队处理引擎。假设,该多引擎出队操作单元202具体可以采用为同一报文分配的出队处理引擎对该报文包含的多个信元进行出队处理,则相应的引擎释放单元206可以在所述出队操作单元针对该报文的所有信元的出队处理操作完成后,释放为该报文分配的相应的出队处理引擎,以便于其他报文可以占用该出队处理引擎。
可见,上述装置实施例具体通过多出队处理引擎的方式同时对待出队的多个报文进行出队处理,从而可以有效提高数据调度出队的效率,改善数据调度出队的性能。
为便于对本发明实施例的理解,下面将以多重链表的队列管理方式为例,结合相应的附图对本发明实施例的具体应用进行详细的说明。
多重链表的队列管理结构可以如图3所示,其中,第1层次的链表单元称作PD(Packet Descriptor,报文描述符),第2层次的链表单元称作CD(Cell Descriptor,报文的信元描述符),若是单重链表,则链表中只有PD,而没有CD。队列以头尾指针(header,tail)表示的队列数据结构。
基于多重链表的队列,本发明实施例提供了相应的多引擎的并行出队的处理装置,如图4所示,在该装置中,从调度模块scheduler moduler接收出队命令(或称出队请求),相应的多重链表管理的待出队的报文(或称数据)保存于SDRAM(同步动态随机存取存储器)中。
仍如图4所示,该装置的具体实现结构可以包括:
(1)引擎缓存eng_mem、引擎管理free_eng和引擎控制eng_ctrl,其中:具体由引擎管理free_eng负责管理引擎缓存eng_mem中保存的多个出队处理引擎,并为各个待出队的报文分配对应的引擎,以管理各个引擎的应用,即用于实现图2B所示装置中的引擎分配单元203的功能;以及由引擎控制eng_ctrl实现有效引擎发射eng_req,发送相应的读链表数据(即以链表方式保存的报文)的命令,以实现链表数据的出队处理,即实现多引擎出队操作单元202的功能。
相应的引擎管理free_eng还可以实现图2B所示装置中的引擎释放单元206的功能。
(2)引擎竞争仲裁器arb1,第一队列等待缓冲qinfo_buff和第二队列等待缓冲qpb_fifo,以及派生引擎缓冲fork_fifo等,其中:
引擎竞争仲裁器arb1与引擎管理free_eng连接,用于对第一队列等待缓冲qinfo_buff和第二队列等待缓冲qpb_fifo,以及派生引擎缓冲fork_fifo传送来的出队通知进行按照预定的优先级(即各个出队通知的处理优先级)进行处理,为其选择对应的引擎,例如,为优先级高的出队通知优先选择相应的引擎。
其中,派生引擎缓冲fork_fifo传送来的出队通知为针对下一个报文的出队通知,而第一队列等待缓冲qinfo_buff和第二队列等待缓冲qpb_fifo共同联合传送来的出队通知为针对新的出队命令的出队通知,且派生引擎缓冲fork_fifo传送来的出队通知的优先级更高。
(3)链表处理模块Ink_proc和竞争仲裁器arb0,其中:
链表处理模块Ink_proc用于实现图2B所示装置中的出队管理单元204的功能,以及出队数据量更新单元205的功能;且相应的链表处理模块Ink_proc还通过向引擎竞争仲裁器arb1发送命令的方式控制多引擎出队操作单元202采用为同一报文分配的出队处理引擎对该报文包含的多个信元进行出队处理;进一步地,该控制过程中传递的命令在到达引擎竞争仲裁器arb1后,相应的优先级高于派生引擎缓冲fork_fifo传送给引擎竞争仲裁器arb1的出队通知;
竞争仲裁器arb0用于对接收到的链表处理模块Ink_proc发来的信息及调度模块scheduler moduler发来的出队命令进行处理,且相应的链表处理模块Ink_proc发来的信息的处理优先级高于调度模块scheduler moduler发来的出队命令的优先级。在图4中,相应的xoff req from QM是表示qpb_fifo满,对竞争仲裁器arb0反压,以使竞争仲裁器arb0不响应调度模块scheduler moduler发送来的新的出队请求,即为保证不发生溢出,故需要对调度模块schedulermoduler发送来的新出队请求进行反压。
基于图4所示的装置,相应的多引擎并行出队处理机制的执行过程具体可以包括以下步骤:
步骤1,从调度模块scheduler moduler发来的携带总的出队数据量credit的出队命令deq_req(或称出队请求),并以低优先级在竞争仲裁器priorityarb0作检查,在没有出队充值请求,即没有新的出队命令发来的出队数据量credit时,执行以下处理:
(1)若该队列号是第一次出队(即非工作working状态),则直接将出队命令所携带的credit(c_new,即新的credit)和qinfo_buf的剩余credit(c_old,即原credit,可以为大于0或小于等于0)合并Credit_sum;
其中,若合并相加后的credit>0,则表示可以竞争新的出队引擎,即令deq_req命令进入qbp_fifo,且将第一队列等待缓冲qinfo_buf中的剩余credit(c_old)清0,并标记该队列为出队工作状态,即标记为working状态;否则,若合并后的credit<=0,则将该合并后的credit写入第一队列等待缓冲qinfobuf,等待出现后续的出队充值请求时,对其进行处理;
(2)若该队列号对应的队列已是出队状态(即工作working状态),则直接将携带credit(c_new)和qinfo_buf的剩余credit(c_old)合并起来通过fifo_wr_ctrl写入到第二队列等待缓冲qinfo_buf中,并等待后继的充值(precharge)操作;
相应的,图3中的credit_bp部分用于计算每个队列等待分配出队引擎的总的credit量。为避免其溢出,也需要对调度模块scheduler moduler送来的新出队请求进行反压。
步骤2,进入第二队列等待缓冲qpb_fifo的deq_req命令以最低优先级在引擎竞争仲裁器priority arb1作检查,以竞争获得相应的出队引擎;
具体地,若当前在引擎竞争仲裁器priority arb1处,没有派生引擎缓冲fork_fifo的下一个PD请求nxt_pd_req请求,也没有直接从链表处理模块Ink_proc传递过来的下一个CD请求nxt_cd_req,则在引擎管理(free_eng)有空闲的引擎的情况下,qpb_fifo的deq_req命令便会获得一个出队引擎,以便于通过该出队引擎进行后续的出队操作。
步骤3,将获得出队引擎的出队命令所带的出队信息记入引擎缓存eng_mem,根据出队命令有效性规则,在出队引擎中选择一个有效的引擎作为该出队命令的出队引擎,向片外SRAM直接发出读操作命令;
其中,出队命令的有效性规则是指符合有效出队条件的检查,例如,可以检查下一级来的反压,其中,未被下一级反压的队列的出队命令为有效,相应的队列数据才可以出队。
步骤4,经过若干个时钟周期,SRAM返回链表处理模块Ink_proc的读数据,即PD链表单元或CD链表单元的地址信息,链表处理模块Ink_proc将对读回的链表单元数据进行处理;
相应的处理具体可以包括:完整性检查(如ECC等),nxt_cd_ptr、nxt_pd_ptr提取等。
对于正确的PD或CD数据,链表处理模块Ink_proc将其返回给最初发出队命令的调度模块作为PD或CD响应,同时还需要继续遍历链表后继的链表单元以进行后续的报文出队处理,具体可以执行下述处理:
(一)对于nxt_cd_ptr区分有效(!=NULL)和无效(==NULL)两种情况,分别采用以下处理方式:
对于nxt_cd_ptr有效的情况,则表示当前出队的报文的各信元尚未出队完成,则生成nxt_cd_req,并将生成的nxt_cd_req作为最高优先级的命令在引擎竞争仲裁器priority arb1获得引擎缓存eng_mem的更新权,以令原出队引擎采用新的CD地址访问该报文的下一个CD数据,并执行步骤5;
对于nxt_cd_ptr无效的情况,则表示当前出队的报文的各个信元已经完成出队操作,此时,可以由引擎管理free_eng释放所占用的出队引擎资源,以便于其他报文可以应用相应的出队引擎完成相应的报文数据的出队操作;
(二)在链表处理模块Ink_proc中,还将出队引擎携带的当前的credit减去已经分配引擎的PD中报文长度,在当前的credit减去已经分配引擎的PD中报文长度后,根据相应的剩余credit是否大于零采用不同的处理,其中;
(1)若还有剩余credit,即credit大于0,则表示出队操作未完成,也可以用nxt_pd_ptrl=NULL来表示,此时,可以用nxt_pd_ptr作为下一PD的地址结合剩余的credit值对下一个报文进行出队操作,相应的剩余credit和nxt_pd_req等信息将会缓存在派生引擎缓冲fork_fifo中,相应的派生引擎缓冲fork_fifo的深度可以与系统的引擎数相同;相应的派生引擎缓冲fork_fifo输出的nxt_pd_req在引擎竞争仲裁器priority arb1以第二优先级(仅低于链表处理模块Ink_proc发来的nxt_cd_req)竞争引擎,在成功后以获得分配的引擎后,继续对下一报文执行出队操作,直到剩余credit耗尽或者nxt_pd_ptr==NULL(无效)时进入下面过程(2)描述的处理状态,从而保证了先下发的credit将以相对较快的速度获得出队引擎,及时完成出队操作。
(2)若剩余credit为0或者是负值(即赤字态)时,则:
如果nxt_pd_ptr为有效,则表示队列中的数据还没有出队完成,此时,可以以高优先级发prechacrge_req到竞争仲裁器priority arb0,以获得第一队列等待缓冲qinfo_buff的访问权,从而将相应的当前剩余credit的信息及相应的nxt_pd_ptr保存于第一队列等待缓冲qinfo_buff,等待新的充值操作;之后,接收新的出队命令并获得新的credit,直到credit大于0后再次进入qpb_fifo竞争相应的用于出队操作的引擎;
如果nxt_pd_ptr为无效,且重新从出队命令获得新的PD指针即获得有效的nxt_pd_ptr时,再次进入qpb_fifo去竞争出队引擎。
步骤5,对于步骤4中的nxt_cd_ptr有效(!=NULL)的情况,则可以产生下一CD出队的请求命令nxt_cd_req,并发送给引擎竞争仲裁器priority arb1,且引擎竞争仲裁器priority arb1将产生的nxt_cd_req作为最高优先级采用该报文对应的引擎对下一CD进行出队处理,从而使得已经获得出队引擎的队列中的某报文能够以最快的速率完成报文PD、CD链表单元的出队处理,以保证先获得出队引擎的队列中的报文能够以最快的速度将CD链表单元出队。
在上述处理过程中,相应的引擎缓存eng_mem可以但不限于采用寄存器实现,且在出队处理过程中,仅需要通过少量的几个引擎(如4-8个引擎)实现多个队列出队便可以完全弥补SSRAM的访问延迟造成的间隙。另外,相应的引擎缓存eng_mem也可以采用通常ASIC(专用集成电路)结构的RA(寄存器阵列)或FPGA(现场可编程门阵列)结构的distribute ram(分布式随机存储器)实现,这样可以使得相应的实现资源代价较小。
而且,上述描述的硬件逻辑实现队列处理的系统中,仅以多链表的数据管理模式为例进行说明,同样,本发明实施例还可以应用于单链表或的数据结构或者以其他方式管理的数据结构中的数据出队处理,如以图的遍历的方式管理的数据结构等。
综上所述,本发明实施例中,具体通过引入多引擎并行处理的概念,使得原来单流程的出队处理因为访问片外SSRAM的多个周期延迟造成的带宽浪费的问题,在多队列的应用场景下获得解决。
在上述实现方案中,还采用竞争仲裁器priority arb0和引擎竞争仲裁器priority arb1的固定优先级的特性,保证了先到的出队命令先得到相应的出队处理,使得在前级调度器保证的情况下,能够保证几个引擎在大量的队列之间提供相对公平的服务。
本发明实施例不仅可以应用于单链表或多链表形式的数据结构中,还可以应用于图的遍历过程中,具体实现过程与上述描述的处理过程类似,故在此不再详细描述。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过数字逻辑的硬件电路来完成,所述的数字逻辑的硬件电路可以为ASIC芯片电路,也可以为FPGA电路,该电路工作时可包括如上述各方法的实施例的流程。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
Claims (12)
1、一种数据出队的方法,其特征在于,包括:
获取各个队列中的报文的存储地址;
根据各个队列中的报文的存储地址,由多个出队处理引擎并行对各个队列中的报文进行出队操作。
2、根据权利要求1所述的方法,其特征在于,在由多个出队处理引擎并行对各个队列中的报文进行出队操作前,该方法还包括:
为当前需要出队的队列中的报文分配对应的出队处理引擎,并将从接收到的出队命令中获取的该报文的存储地址传送给为其分配的出队处理引擎;
或者,
为当前需要出队的队列中的报文分配对应的出队处理引擎,并将该报文的数据量作为需要执行出队操作的数据量传送给所述出队处理引擎;还将从接收到的出队命令中获取的出队数据量减去已经分配出队处理引擎的报文的数据量后,若相减后的值大于零,则继续为下一个需要出队的报文分配对应的出队处理引擎,直到相减后的值小于或等于零。
3、根据权利要求2所述的方法,其特征在于,该方法还包括:
若所述相减后的值小于零,则在接收到新的出队命令后,从接收到的出队命令携带的新的出队数据量中扣除所述小于零的绝对值,直到将扣除后大于零的结果作为接收到的出队命令的更新后的出队数据量。
4、根据权利要求2所述的方法,其特征在于,该方法还包括:
通过优先级仲裁器优先保证当前接收到的出队命令中的需要出队的各个队列中的出队数据量信息优先被分配对应的出队处理引擎;
通过优先级仲裁器优先保证已经分配到出队处理引擎的报文被该出队处理引擎优先执行出队操作。
5、根据权利要求1至4任一项所述的方法,其特征在于,该方法还包括:
在完成对一个报文或队列的出队处理后,释放该报文或队列占用的出队处理引擎。
6、根据权利要求1至4任一项所述的方法,其特征在于,所述对各个队列中的报文进行出队操作的步骤具体包括:
由为同一报文分配的出队处理引擎对该报文包含的多个信元进行出队处理,并在该报文的所有信元的出队处理操作完成后,释放为该报文分配的所述出队处理引擎。
7、一种数据出队的装置,其特征在于,包括:
信息获取单元,用于获取各个队列中的报文的存储地址;
多引擎出队操作单元,用于根据所述信息获取单元获取的各个队列中的报文的存储地址,由多个出队处理引擎并行对各个队列中的报文进行出队操作。
8、根据权利要求7所述的装置,其特征在于,该装置还包括:
引擎分配处理单元,用于为当前需要出队的队列中的报文分配对应的出队处理引擎;并将从接收到的出队命令中获取的该报文的存储地址传送给为其分配的出队处理引擎,或者,将该报文的数据量作为需要执行出队操作的数据量传送给为该报文分配的出队处理引擎;
出队管理单元,用于在所述引擎分配处理单元将从所述出队命令中获取的出队数据量减去已经分配出队处理引擎的报文的数据量后,若相减后的值大于零,则通知所述引擎分配处理单元在可用的出队处理引擎中继续为下一个需要出队的报文分配对应的出队处理引擎。
9、根据权利要求8所述的装置,其特征在于,该装置还包括:
出队数据量更新单元,用于在所述出队管理单元获得的相减后的值小于零时,在接收到新的出队命令后,从接收到的出队命令携带的新的出队数据量中扣除所述小于零的绝对值,并将扣除后的结果作为接收到的出队命令的更新后的出队数据量。
10、根据权利要求8所述的装置,其特征在于,该装置还包括:
第一优先级仲裁器,用于优先保证当前接收到的出队命令中的需要出队的各个队列中的出队数据量信息优先被分配对应的出队处理引擎;
第二优先级仲裁器,用于优先保证已经分配到出队处理引擎的报文被该出队处理引擎优先执行出队操作。
11、根据权利要求7至10任一项所述的装置,其特征在于,该装置还包括引擎释放单元,用于在所述出队操作单元完成对一个报文或队列的出队处理后,释放该报文或队列占用的出队处理引擎。
12、根据权利要求11所述的装置,其特征在于,所述多引擎出队操作单元具体采用为同一报文分配的出队处理引擎对该报文包含的多个信元进行出队处理,且所述引擎释放单元具体用于在所述出队操作单元针对该报文的所有信元的出队处理操作完成后,释放为该报文分配的所述出队处理引擎。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009100880759A CN101594302B (zh) | 2009-07-01 | 2009-07-01 | 数据出队的方法及装置 |
US12/829,165 US8325603B2 (en) | 2009-07-01 | 2010-07-01 | Method and apparatus for dequeuing data |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009100880759A CN101594302B (zh) | 2009-07-01 | 2009-07-01 | 数据出队的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101594302A true CN101594302A (zh) | 2009-12-02 |
CN101594302B CN101594302B (zh) | 2011-08-03 |
Family
ID=41408756
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2009100880759A Active CN101594302B (zh) | 2009-07-01 | 2009-07-01 | 数据出队的方法及装置 |
Country Status (2)
Country | Link |
---|---|
US (1) | US8325603B2 (zh) |
CN (1) | CN101594302B (zh) |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101848150A (zh) * | 2010-04-26 | 2010-09-29 | 华为技术有限公司 | 维护多播计数器的计数值的方法及装置 |
CN102437929A (zh) * | 2011-12-16 | 2012-05-02 | 华为技术有限公司 | 队列管理中的数据出队方法及装置 |
CN102957629A (zh) * | 2011-08-30 | 2013-03-06 | 华为技术有限公司 | 队列管理的方法和装置 |
CN102984083A (zh) * | 2012-11-19 | 2013-03-20 | 中兴通讯股份有限公司 | 队列管理方法及装置 |
CN103365705A (zh) * | 2012-03-27 | 2013-10-23 | 腾讯科技(深圳)有限公司 | 消息队列处理方法和装置 |
CN103577119A (zh) * | 2012-06-19 | 2014-02-12 | 马维尔国际贸易有限公司 | 用于下一代固态硬盘控制器中乱序传输数据的系统和方法 |
CN103581055A (zh) * | 2012-08-08 | 2014-02-12 | 华为技术有限公司 | 报文的保序方法、流量调度芯片及分布式存储系统 |
CN103744801A (zh) * | 2014-01-24 | 2014-04-23 | 深圳市华宝电子科技有限公司 | 一种实时数据缓存方法及装置 |
CN103914341A (zh) * | 2013-01-06 | 2014-07-09 | 中兴通讯股份有限公司 | 数据队列出队管控方法和装置 |
CN105991346A (zh) * | 2015-04-28 | 2016-10-05 | 杭州迪普科技有限公司 | 会话日志的处理方法及装置 |
CN109802897A (zh) * | 2017-11-17 | 2019-05-24 | 华为技术有限公司 | 一种数据传输方法及通信设备 |
WO2020143308A1 (zh) * | 2019-01-08 | 2020-07-16 | 盛科网络(苏州)有限公司 | 一种多级调度方法、装置、网络芯片及存储介质 |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2012024185A1 (en) | 2010-08-16 | 2012-02-23 | Ventana Medical Systems, Inc. | Substrates for chromogenic detection and methods of use in detection assays and kits |
US8935550B2 (en) * | 2011-01-21 | 2015-01-13 | Broadcom Corporation | System and method for selectively placing portions of a physical layer into low power mode |
US20170017419A1 (en) * | 2015-07-15 | 2017-01-19 | Innovium, Inc. | System And Method For Enabling High Read Rates To Data Element Lists |
US20170017420A1 (en) * | 2015-07-15 | 2017-01-19 | Innovium, Inc. | System And Method For Enabling High Read Rates To Data Element Lists |
JP6982250B2 (ja) * | 2018-07-31 | 2021-12-17 | 日本電信電話株式会社 | パケット転送装置、方法、及びプログラム |
WO2022005732A1 (en) * | 2020-06-30 | 2022-01-06 | Arris Enterprises Llc | Virtual elastic queue |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7558197B1 (en) * | 2002-01-17 | 2009-07-07 | Juniper Networks, Inc. | Dequeuing and congestion control systems and methods |
US8078763B1 (en) * | 2002-04-04 | 2011-12-13 | Juniper Networks, Inc. | Dequeuing and congestion control systems and methods for single stream multicast |
CN1146192C (zh) | 2002-04-17 | 2004-04-14 | 华为技术有限公司 | 以太网交换芯片输出队列管理调度方法和装置 |
-
2009
- 2009-07-01 CN CN2009100880759A patent/CN101594302B/zh active Active
-
2010
- 2010-07-01 US US12/829,165 patent/US8325603B2/en active Active
Cited By (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101848150A (zh) * | 2010-04-26 | 2010-09-29 | 华为技术有限公司 | 维护多播计数器的计数值的方法及装置 |
CN102957629B (zh) * | 2011-08-30 | 2015-07-08 | 华为技术有限公司 | 队列管理的方法和装置 |
CN102957629A (zh) * | 2011-08-30 | 2013-03-06 | 华为技术有限公司 | 队列管理的方法和装置 |
CN102437929A (zh) * | 2011-12-16 | 2012-05-02 | 华为技术有限公司 | 队列管理中的数据出队方法及装置 |
CN102437929B (zh) * | 2011-12-16 | 2014-05-07 | 华为技术有限公司 | 队列管理中的数据出队方法及装置 |
CN103365705A (zh) * | 2012-03-27 | 2013-10-23 | 腾讯科技(深圳)有限公司 | 消息队列处理方法和装置 |
CN103365705B (zh) * | 2012-03-27 | 2016-02-24 | 腾讯科技(深圳)有限公司 | 消息队列处理方法和装置 |
CN103577119B (zh) * | 2012-06-19 | 2018-05-18 | 马维尔国际贸易有限公司 | 用于下一代固态硬盘控制器中乱序传输数据的系统和方法 |
CN103577119A (zh) * | 2012-06-19 | 2014-02-12 | 马维尔国际贸易有限公司 | 用于下一代固态硬盘控制器中乱序传输数据的系统和方法 |
CN103581055A (zh) * | 2012-08-08 | 2014-02-12 | 华为技术有限公司 | 报文的保序方法、流量调度芯片及分布式存储系统 |
CN103581055B (zh) * | 2012-08-08 | 2016-12-21 | 华为技术有限公司 | 报文的保序方法、流量调度芯片及分布式存储系统 |
CN102984083B (zh) * | 2012-11-19 | 2018-07-24 | 南京中兴新软件有限责任公司 | 队列管理方法及装置 |
WO2014075488A1 (zh) * | 2012-11-19 | 2014-05-22 | 中兴通讯股份有限公司 | 队列管理方法及装置 |
CN102984083A (zh) * | 2012-11-19 | 2013-03-20 | 中兴通讯股份有限公司 | 队列管理方法及装置 |
RU2641250C2 (ru) * | 2012-11-19 | 2018-01-16 | ЗэтТиИ Корпорейшн | Устройство и способ управления очередью |
CN103914341B (zh) * | 2013-01-06 | 2018-09-25 | 中兴通讯股份有限公司 | 数据队列出队管控方法和装置 |
WO2014106436A1 (zh) * | 2013-01-06 | 2014-07-10 | 中兴通讯股份有限公司 | 数据队列出队管控方法和装置 |
CN103914341A (zh) * | 2013-01-06 | 2014-07-09 | 中兴通讯股份有限公司 | 数据队列出队管控方法和装置 |
CN103744801A (zh) * | 2014-01-24 | 2014-04-23 | 深圳市华宝电子科技有限公司 | 一种实时数据缓存方法及装置 |
CN105991346A (zh) * | 2015-04-28 | 2016-10-05 | 杭州迪普科技有限公司 | 会话日志的处理方法及装置 |
CN109802897A (zh) * | 2017-11-17 | 2019-05-24 | 华为技术有限公司 | 一种数据传输方法及通信设备 |
CN109802897B (zh) * | 2017-11-17 | 2020-12-01 | 华为技术有限公司 | 一种数据传输方法及通信设备 |
US11297011B2 (en) | 2017-11-17 | 2022-04-05 | Huawei Technologies Co., Ltd. | Data transmission method and communications device |
WO2020143308A1 (zh) * | 2019-01-08 | 2020-07-16 | 盛科网络(苏州)有限公司 | 一种多级调度方法、装置、网络芯片及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
US8325603B2 (en) | 2012-12-04 |
CN101594302B (zh) | 2011-08-03 |
US20110002345A1 (en) | 2011-01-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101594302B (zh) | 数据出队的方法及装置 | |
CN102693198A (zh) | Dma传输方法及系统 | |
CN101241446A (zh) | 非易失数据存储装置中虚拟文件系统命令调度方法和设备 | |
CN107257329B (zh) | 一种数据分段卸载发送方法 | |
CN102681952A (zh) | 将数据写入存储设备的方法与存储设备 | |
CN102377682A (zh) | 基于定长单元存储变长分组的队列管理方法及设备 | |
CN106325758B (zh) | 一种队列存储空间管理方法及装置 | |
CN101840328B (zh) | 一种数据处理方法及系统以及相关设备 | |
CN102789439A (zh) | 控制数据传输过程中的中断的方法 | |
CN112084136B (zh) | 队列缓存管理方法、系统、存储介质、计算机设备及应用 | |
CN108234348A (zh) | 一种队列操作中的处理方法及装置 | |
CN107995129A (zh) | 一种nfv报文转发方法和装置 | |
CN102193874B (zh) | 用于管理存储器的缓存管理器和方法 | |
CN103946803A (zh) | 具有高效工作排队的处理器 | |
CN104102542A (zh) | 一种网络数据包处理方法和装置 | |
CN105159841B (zh) | 一种内存迁移方法及装置 | |
CN107204198A (zh) | 高速访问双倍速率同步动态随机存储器的控制方法及装置 | |
CN109388590A (zh) | 提升多通道dma访问性能的动态缓存块管理方法和装置 | |
CN105095150B (zh) | 一种支持片上网络的网络接口 | |
CN110045922A (zh) | 网络设备和操作方法 | |
CN103297350A (zh) | 一种信元交换系统的实现方法和交换设备 | |
CN100539538C (zh) | 具有链表处理器的存储器管理系统 | |
CN101118524A (zh) | 直接存储器存取传输控制装置 | |
CN109558250A (zh) | 一种基于fpga的通信方法、设备、主机及异构加速系统 | |
CN106294225A (zh) | 一种数据读取方法、对端设备及控制器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |