CN102073539A - 队列请求处理方法和装置 - Google Patents
队列请求处理方法和装置 Download PDFInfo
- Publication number
- CN102073539A CN102073539A CN 201010577858 CN201010577858A CN102073539A CN 102073539 A CN102073539 A CN 102073539A CN 201010577858 CN201010577858 CN 201010577858 CN 201010577858 A CN201010577858 A CN 201010577858A CN 102073539 A CN102073539 A CN 102073539A
- Authority
- CN
- China
- Prior art keywords
- request
- queue
- sheet
- target engine
- team
- 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
Landscapes
- Mobile Radio Communication Systems (AREA)
Abstract
本发明实施例提供一种队列请求处理方法和装置。该方法包括:接收流队列的队列请求,获得流队列的队列标识;根据队列标识,在片内查找是否存在流队列对应的目标引擎,目标引擎中保存有流队列的片内队列信息表;若查找到目标引擎,将队列请求写入流队列对应的请求队列,处理请求队列中的队列请求,并更新目标引擎中保存的片内队列信息表;当请求队列为空时,根据片内队列信息表的信息更新流队列的片外队列信息表,并将目标引擎释放为空闲引擎。本发明实施例达到了正确访问片外队列信息表的目的。
Description
技术领域
本发明实施例涉及通信技术,尤其涉及一种队列请求处理方法和装置。
背景技术
在流量管理芯片中包含K个流队列(Flow Queue,以下简称:FQ),每个FQ有128bit的队列信息表(Flow Queue Information Table,以下简称:FQIT),队列信息表中包括:队列标识、队头指针、队尾指针、队列深度以及用于控制该队列流量的token(令牌)和credit(信用度)等。每个FQ的每次入队或出队都要访问FQIT,以获取并更新该FQ的队列信息。随着通讯技术的不断提高,FQ队列信息的存储,主要侧重于大容量缓存与高速度访问的相互结合。
目前FQIT存储的一种方法是,将FQIT存入在片内缓存(流理管理芯片内部集成的缓存)中,可提高访问FQIT的速度。然而,片内缓存容量通常较小,限制了所能容纳的FQ数量。考虑到FQIT会占用较大的缓存空间。另一种方法是,将FQIT存储在片外缓存(流理管理芯片外置的缓存)中,如QDR SRAM(Quad Data Rate static RAM,四倍速静态RAM)。
然而,对于片外缓存FQIT的方法,在接收到八队请求或出队请求时,从片外读取的FQIT有可能不是最新的FQIT,从而导致不可恢复的错误。
发明内容
本发明实施例提供一种队列请求处理方法和装置,用以解决现有技术不能正确访问片外FQIT的问题。
本发明实施例提供一种队列请求处理方法,包括:
接收流队列的队列请求,获得所述流队列的队列标识;
根据队列标识,在片内查找是否存在所述流队列对应的目标引擎,所述目标引擎中保存有所述流队列的片内队列信息表;
若查找到目标引擎,将所述队列请求写入所述流队列对应的请求队列,处理所述请求队列中的所述队列请求,并更新所述目标引擎中保存的片内队列信息表;当所述请求队列为空时,根据所述片内队列信息表的信息更新所述流队列的片外队列信息表,并将所述目标引擎释放为空闲引擎。
本发明实施例还提供一种队列请求处理装置,包括:
请求接收模块,用于接收流队列的队列请求,所述队列请求包括入队请求和出队请求;
片内引擎管理模块,用于管理多个片内引擎,所述片内引擎用于根据流队列的片外队列信息表,生成和保存所述流队列的片内队列信息表;
查找模块,用于根据所述请求接收模块接收到的队列标识,在片内引擎管理模块中查找保存有所述流队列的片内队列信息表的目标引擎;
请求队列管理模块,用于将所述流队列的队列请求写入所述流队列相应的请求队列中,并且根据所述请求队列的处理情况,更新目标引擎中所述流队列对应的片内队列信息表。
本发明实施例,通过片内引擎缓存从片外读取的队列信息表。在接收到携带有队列标识的队列请求时,先在片内查找是否存在缓存有与队列标识对应的目标引擎。如果存在,则不需要从片外读取该队列标识对应的队列信息表;如果不存在相应的队列信息表,则从片外读取队列信息表并写入片内一空闲引擎中。从而,避免了从片外读取的队列信息表不是最新的队列信息表的缺陷,达到了正确访问片外队列信息表的目的。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明队列请求处理方法实施例一流程图;
图2A为本发明队列请求处理方法实施例二中入队请求处理方法流程图;
图2B为本发明实施例中引擎队列示意图;
图3为本发明队列请求处理方法实施例三中出队请求处理方法流程图;
图4为本发明队列请求处理方法实施例五中释放引擎的方法流程图;
图5为本发明队列请求处理装置实施例一结构示意图;
图6为本发明队列请求处理装置实施例二结构示意图;
图7为本发明队列请求处理装置实施例三中时钟周期分配示意图;
图8为队列请求处理装置实施例四中引擎仲裁场景示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例基于片内引擎控制对片外FQIT的读/写访问,以达到正确访问片外FQIT的目的。本发明实施例中引擎是指片内缓存中用于缓存FQIT的地址空间。每个FQ仅能占用一个引擎,片内可以设有多个引擎,以对应多个FQ。当引擎中保存有某个FQ的FQIT时,其已与该FQ对应的队列标识相关联,从而使得引擎可以与FQ的请求队列相关联,从而在处理入队或出队请求时,可以根据队列标识查找到相应的引擎来更新引擎中所保存的FQIT。在引擎对应的请求队列为空时,可将引擎中保存的FQIT写入片外,从而相当于释放了FQIT在片内占用的空间。
图1为本发明队列请求处理方法实施例一流程图。如图1所示,本实施例包括:
步骤11:接收流队列的队列请求,获得所述流队列的队列标识。
在本发明实施例中,所述队列请求包括入队请求和出队请求。
步骤12:根据队列标识,在片内查找是否存在流队列对应的目标引擎,目标引擎中保存有流队列的片内队列信息表。
在本发明实施例中,可以为引擎配置与队列标识相关的关联表,也可以根据引擎中的队列信息表所包括的相应的队列标识来查找所述目标引擎。
步骤13:若查找到目标引擎,将队列请求写入流队列对应的请求队列,处理请求队列中的队列请求,并相应的更新目标引擎中保存的片内队列信息表。
如果没有查找到目标引擎,说明片内没有缓存当前队列请求所对应流队列的队列信息表,即当前队列请求对应的队列信息表没有占用片内任何引擎,则选择一片内空闲引擎作为所述流队列的目标引擎,并从片外读取所述流队列对应的片外队列信息表,将所述片外队列信息表的信息写入所述目标引擎,得到所述流队列的片内队列信息表。
步骤14:当请求队列为空时,根据片内队列信息表的信息更新流队列的片外队列信息表,并将目标引擎释放为空闲引擎。
在片内的目标引擎对应的请求队列为空,表明该目标引擎对应的队列请求已全部被处理,为使该目标引擎缓存其它FQ以节省片内空间,将该目标引擎中缓存的队列信息表写回片外,并清空该目标引擎中缓存的队列信息表,即释放该目标引擎。
本发明实施例通过片内引擎缓存从片外读取的队列信息表。在接收到携带有队列标识的队列请求时,先在片内查找是否存在缓存有与队列标识对应的目标引擎。如果存在,则不需要从片外读取该队列标识对应的队列信息表;如果不存在相应的队列信息表,则从片外读取队列信息表并写入片内一空闲引擎中。从而,避免了从片外读取的队列信息表不是最新的队列信息表的缺陷,达到了正确访问片外队列信息表的目的。进一步,在片内的目标引擎对应的队列请求为空时,表明该目标引擎对应的队列请求已处理完成,将该目标引擎中缓存的队列信息表写回到片外,从而节省了片内空间。
为提高访问片外FQIT的速度,本发明实施例将FQIT中各个表项进行了组织。由于入队请求对应的操作只访问队尾指针、队列深度等表项,因此将与入队操作相关的表项(以下简称入队表项)组织在一起。而有些表项,如token和credit,只有出队请求对应的操作才会访问到,因此将与入队操作无关的、只有在处理出出队请求时才访问的其它表项(以下简称出队表项)组织在一起。例如,一个128bit的FQIT在18bit Burst2的QDR中占用4个物理地址,通过合理的规划FQIT各个域的位置,使执行入队请求对应操作时只访问高64bit(2个QDR地址),只在执行出队请求对应操作才访问全部的128bit(4个QDR地址)。本发明实施例用引擎的两个状态:入队表项状态和出队表项状态,分别表示该引擎是否缓存有FQIT的入队表项和FQIT的出队表项。引擎的入队表项状态为占用,表示该引擎已缓存有FQIT的入队表项;引擎的出队表项状态为占用,表示该引擎已缓存有FQIT的出队表项。具体地,每个引擎采用两个比特位的状态标志寄存器engine_fqit_status,分别缓存入队表项状态和出队表项状态。其中,engine_fqit_status[1]为1表示FQIT的高64bit已经缓存在片内RAM了,为0表示FQIT的高64bit还没有缓存在片内。engine_fqit_status[0]为1表示FQIT的低64bit已经缓存在片内,为0表示FQIT的低64bit还没有缓存在片内。以下通过两个实施例分别说明,本发明实施例采用上述结构的队列信息表时如何处理入队请求和如何处理出队请求。
图2A为本发明队列请求处理方法实施例二中入队请求处理方法流程图。
图2B为本发明实施例中引擎队列示意图。如图2A所示,本实施例包括:
步骤21:接收携带有队列标识的入队请求。
步骤22:在入队表项状态为占用的片内引擎中,查找与队列标识对应的目标引擎。若查找到目标引擎,执行步骤23,否则执行步骤24。
如图2B所示,片内一个引擎对应一个引擎编号。每个非空闲引擎缓存一个队列FQ的队列信息表FQIT,每个FQIT中都包含有相应队列FQ的队列标识FQID,因此,每个非空闲引擎对应一个FQID。每个非空闲引擎还对应一个入队请求队列和一个出队请求队列。
例如,引擎编号为8的状态标志寄存器,其高位engine_fqit_status[1]为1时,表明该引擎的入队表项为占用,即该引擎缓存有FQIT的入队表项;其低位engine_fqit_status[0]为0时,表明该引擎的出队表项为空闲,即引擎中还没有缓存FQIT中的出队表项。接收到入队请求时,在engine_fqit_status[1]为1的引擎中,查找与入队请求中队列标识FQID相对应的目标引擎。
步骤23:若查找到目标引擎,将队列请求写入目标引擎对应的入队请求队列中。
在片内查找到与入队请求中FQID相对应的目标引擎时,表明片内已有引擎缓存该FQID对应的FQIT中入队表项。由于入队处理模块处理入队请求时操作的是片内缓存的相应FQIT,因此目标引擎缓存的FQIT表为当前最新的FQIT,不需要再从片外读取。
例如,在engine_fqit_status[1]为1的引擎中,查找到与入队请求中FQID相对应的目标引擎,为编号为2的引擎。将该入队请求写入到编号为2的引擎所对应的入队请求队列,等待入队处理模块的调度。在入队处理模块调度到该入队请求执行相应的入队操作时,直接从编号为2的引擎中读取FQIT。
步骤24:若没有查找到目标引擎,根据队列标识从片外读取队列信息表的入队表项写入片内一空闲引擎,作为队列标识对应的目标引擎。
步骤25:将目标引擎的入队表项状态写为占用,并将入队请求写入目标引擎对应的入队请求队列。
在片内没有查找到与入队请求中FQID相对应的目标引擎时,表明在片内还没有引擎缓存与该FQID对应的FQIT,需要从片外读取FQIT。由于处理入队请求时只操作FQIT中入队表项,因此,在接收到入队请求时,若在片内没有查找到目标引擎,只需从片外读取相应FQIT中入队表项,从而提高了片外访问速度。在从片外读取FQIT中入队表项后,将入队请求写入目标引擎对应的入队请求队列。另外,还需将该目标引擎的入队表项状态写为占用,以表明该目标引擎已缓存有FQIT的入队表项。
例如,在片内没有查找到与入队请求中FQID相对应的目标引擎时,从片内选择一空闲引擎,例如是引擎编号为3的空闲引擎,将从片外读取的与FQID对应的FQIT中入队表项,写入到引擎编号为3的引擎中,并将引擎编号为3的引擎的状态寄存器engine_fqit_status[1]写为1。
本发明实施例在处理入队请求过程中,在所有入队表项为占用的引擎中,若没有匹配到与该队列标识相对应的引擎,此时只从片外读取该FQIT中入队表项。由于只有在片内没有分配给该FQ的引擎时,才从片外读取该FQIT的入队表项,因此确保了从片外读取的FQIT是FQ最新的FQIT,减少了对片外FQIT的访问和节省了片外缓存的带宽,实现了将大量FQIT存储在片外的目的,降低了成本。
图3为本发明队列请求处理方法实施例三中出队请求处理方法流程图。出队请求与入队请求的区别在于:出队请求需访问FQIT的全部内容,而入队请求只访问FQIT的入队表项(本发明实施例中FQIT的高位)。因此,片内没有引擎存储一FQ对应的FQIT的入队表项时,表明还没有从片外读取过该FQ的FQIT。对于出队请求,需从片外读取FQIT的全部内容写入空闲引擎中,并将该引擎的入队表项和出队表项均记录为占用,表明该引擎存储了FQIT的全部内容。具体地,将engine_fqit_status[0]和engine_fqit_status[1]都置为1,以表示该引擎中保存有该FQIT的全部数据。其中,引擎的出队请求队列参见图1B所示,有关引擎的描述参见以上实施例的描述。如图3所示,包括:
步骤31:接收携带有队列标识的出队请求。
步骤32:在入队表项状态为占用的片内引擎中,查找与队列标识对应的目标引擎。若查找到执行步骤33,否则执行步骤36。
步骤33:若查找到与队列标识对应的目标引擎,判断目标引擎的出队表项状态是否为占用。若是执行步骤34,否则执行步骤35。
步骤34:若目标引擎的出队表项状态为占用,将出队请求写入目标引擎对应的出队请求队列。
步骤35:若目标引擎的出队表项状态为空闲,从片外读取队列标识对应的队列信息表中出队表项写入目标引擎,并将目标引擎对应的出队表项状态写为占用,将出队请求写入目标引擎对应的出队请求队列。
例如,在engine_fqit_status[1]为1的引擎中,查找到与出队请求中FQID相对应的目标引擎,为编号为2的引擎,判断编号为2的引擎的engine_fqit_status[0]是否为1。若编号为2的引擎的engine_fqit_status[0]为1,将该出队请求写入到编号为2的引擎所对应的出队请求队列,等待出队处理模块的调度;若编号为2的引擎的engine_fqit_status[0]为0,从片外读取该FQIT的低位写入编号为2的引擎,同时engine_fqit_status[1]写为1,将该出队请求写入到编号为2的引擎所对应的出队请求队列,等待出队处理模块的调度。在出队处理模块调度到该出队请求执行相应的出队操作时,直接从编号为2的引擎中读取FQIT。
步骤36:若没有查找到与队列标识对应的目标引擎,从片外读取队列标识对应的队列信息表写入一空闲引擎,作为队列标识对应的目标引擎。
步骤37:将目标引擎的入队表项状态和出队表项状态均写为占用,并将出队请求写入目标引擎对应的出队请求队列。
例如,在engine_fqit_status[1]为1的引擎中,没有查找到与出队请求中FQID相对应的目标引擎。从片内选择一空闲引擎,例如是引擎编号为4的空闲引擎,从片外读取与FQID对应的FQIT中写入到引擎编号为4的引擎中,并将引擎编号为4的引擎的两个状态寄存器engine_fqit_statuss[0]和engine_fqit_status[1]均写为1。
本发明实施例在处理出队请求过程中,在所有入队表项为占用的引擎中,若没有匹配到与出队请求中携带的队列标识相对应的引擎,从片外缓存中读取队列标识对应的FQIT全部内容写入片内缓存中的空闲引擎中,并将该引擎的入队表项状态和出队表项状态均记录为占用。若匹配到与出队请求中携带的队列标识相同的引擎,判断该引擎的出队表项是否为占用,如果为占用直接将该出队请求写入该引擎对应的出队请求队列,否则还需从片外缓存中读取队列标识对应的FQIT出队表项。由于只有在片内缓存的引擎中没有保存该FQIT的出队表项时才从片外缓存读取FQIT的出队表项,因此确保了从片外缓存读取的FQIT是FQ最新的FQIT,减少了对片外FQIT的访问次数和节省了片外缓存的带宽,实现了将大量FQIT存储在片外的目的,降低了成本。
图4为本发明队列请求处理方法实施例四中释放引擎的方法流程图。如图4所示,本实施例包括:
步骤41:在引擎对应的入队请求队列和出队请求队列均为空时,将引擎缓存的队列信息表写入片外。
在引擎对应的入队请求队列为空,表明入队处理模块已处理完该引擎对应的入队请求队列中的入队请求;在引擎对应的出队请求队列为空时,表明出队处理模块已处理完该引擎对应的出队请求队列中的出队请求。因此,在某引擎对应的入队请求队列为空、且该引擎对应的出队请求队列也为空时,表明已没有入队请求和出队请求需要操作该引擎中保存的FQIT。因而,可将该引擎缓存的FQIT写回片外中。
在将该引擎缓存的FQIT写回片外时,若该引擎对应的入队表项状态为占用,而引擎对应的出队表项状态为空闲,即只对该引擎对应的FQ进行了入队操作,而没有进行出队操作。因此,只需将FQIT的入队表项写回片外缓存中。若引擎的入队表项状态为占用且引擎的出队表项状态为占用时,将队列信息表写回片外,即对该引擎对应的FQ进行了入队操作和出队操作。
步骤42:清空该引擎中缓存的数据。
清空该引擎中缓存的数据包括:清除引擎的两个状态寄存器以及FQIT。清空引擎中存储的数据,以将该引擎分配给下一个FQ使用。
本发明实施例,在引擎对应的入队请求队列和出队请求队列均为空时,将引擎存储的队列信息表写入片外后清空该引擎中数据。在将FQIT写入片外时,若该引擎对应的入队表项状态为占用,而引擎对应的出队表项状态为空闲,只需将FQIT的入队表项写回片外。减少了对片外FQIT的访问次数和节省了片外缓存的带宽,实现了将大量FQIT存储在片外的目的,降低了成本。
图5为本发明队列请求处理装置实施例一结构示意图。本实施例包括:请求接收模块51、查找模块52、请求队列管理模块53以及片内引擎管理模块54。
请求接收模块51,用于接收流队列的队列请求,所述队列请求包括入队请求和出队请求。
片内引擎管理模块54,用于管理多个片内引擎,所述片内引擎用于根据流队列的片外队列信息表,生成和保存所述流队列的片内队列信息表。查找模块52,用于根据请求接收模块51接收到的队列标识,在片内引擎管理模块54中查找保存有所述流队列的片内队列信息表的目标引擎。请求队列管理模块53,用于将所述流队列的队列请求写入所述流队列相应的请求队列中,并且根据所述请求队列的处理情况,更新所述流队列对应的目标引擎中的片内队列信息表。
进一步,如图6所示,所述片内引擎管理模块54包括:信息表读取单元541和信息表写回单元542。
信息表读取单元541,用于在查找模块52没有查找到所述目标引擎时,选择一空闲引擎作为流队列的目标引擎,并根据所述流队列的片外队列信息表在所述目标引擎中生成所述流队列对应的片内队列信息表。
信息表写回单元542,用于在所述流队列对应的请求队列为空时,根据所述流队列对应的目标引擎的片内队列信息表更新所述流队列的片外队列信息表,并将将所述流队列的目标引擎释放。
上述各模块的工作机理参见图1对应实施例中描述,在此不再赘述。
本发明实施例通过片内引擎缓存从片外读取的队列信息表。在接收到携带有队列标识的队列请求时,先在片内查找是否存在缓存有与队列标识对应的目标引擎。如果存在,则不需要从片外读取该队列标识对应的队列信息表;如果不存在相应的队列信息表,则从片外读取队列信息表并写入片内一空闲引擎中。从而,避免了从片外读取的队列信息表不是最新的队列信息表的缺陷,达到了正确访问片外队列信息表的目的。进一步,在片内的目标引擎对应的队列请求为空时,表明该目标引擎对应的队列请求已处理完成,将该目标引擎中缓存的队列信息表写回到片外,从而节省了片内空间。
进一步,队列请求包括入队请求和出队请求。为提高访问片外FQIT的速度,本发明实施例将FQIT中与入队操作相关的表项(入队表项)组织在一起,将其它与入队表项无关的、只有在处理出队请求时才需要访问的表项(出队表项)组织在一起。在目标引擎中只存储有入队表项时,该目标引擎的入队表项状态为占用,出队表项状态为空闲。因此,各模块对入队请求和出队请求的处理方法有所不同,具体如下:
查找模块52,具体用于根据队列标识,在入队表项状态为占用的片内引擎中查找与流队列对应的目标引擎。
请求队列管理模块53,具体用于若查找模块52查找到目标引擎,在请求接收模块51接收到的队列请求为入队请求时,将入队请求写入目标引擎对应的入队请求队列中。
请求队列管理模块53,还具体用于若查找模块52查找到目标引擎,在请求接收模块51接收到的队列请求为出队请求时,判断目标引擎的出队表项状态是否为占用,若为占用,将出队请求写入目标引擎对应的出队请求队列中;若为空闲,通知信息表读取单元541从片外读取流队列对应的片外队列信息表的出队表项写入目标引擎,将出队请求写入目标引擎对应的出队请求队列中,并将目标引擎的出队表项写为占用。
请求队列管理模块53,还具体用于若查找模块52没有查找到目标引擎,在队列请求为入队请求时,通知信息表读取单元541从片外读取流队列对应的片外队列信息表的入队表项写入片内一空闲引擎,作为流队列的目标引擎;将目标引擎的入队表项状态写为占用,并将入队请求写入目标引擎对应的入队请求队列中。
请求队列管理模块53,还具体用于若查找模块52没有查找到目标引擎,在队列请求为出队请求时,通知信息表读取模块541从片外读取流队列对应的片外队列信息表写入一空闲引擎,作为队列标识对应的目标引擎;将目标引擎的入队表项状态和出队表项状态均写为占用,并将出队请求写入目标引擎对应的出队请求队列。
通过以上模块的处理,本发明实施例减少了对片外FQIT的访问和节省了片外缓存的带宽,实现了将大量FQIT存储在片外的目的,降低了成本。
在同一时刻,可能存在多个引擎的入队请求队列同时满足出队条件,多个引擎的出队请求队列同时满足出队条件,多个引擎同时满足释放条件。本发明实施例中在一个处理周期中,以时分复用(Time Division Multiplexed,以下简称:TDM)方式分别固定在三个时钟周期轮询出一个入队请求队列中入队请求出队、轮询出一个出队请求队列中出队请求出队、轮询出一个引擎释放。
进一步,请求队列管理模块53,还用于采用时分复用仲裁方法,在一个处理周期内分别对入队请求队列的出队请求、出队请求队列的出队请求及释放目标引擎的请求,进行仲裁处理。
图7为本发明队列请求处理装置实施例三中时钟周期分配示意图。如图7所示,一个处理周期为8个时钟周期。在一个处理周期内,在T1时钟周期处理一个入队请求,在T5时钟周期处理一个出队请求,因此,一个处理周期内最多会占用两个引擎。为达到引擎占用和释放的平衡,在一个处理周期内分配两个时钟周期来轮询引擎释放请求。分配T0时钟周期调度器在所有符合出队条件的入队请求队列中轮询出一个队列出队,出队的入队请求进入到入队处理模块处理,分配T2时钟周期在所有符合出队条件的出队请求队列中轮询出一个队列出队,出队的出队请求进入到出队处理模块处理,分配T4时钟周期在所有符合释放条件的引擎中轮询出一个释放,分配T6时钟周期在所有符合释放条件的引擎中轮询出一个释放。图8为队列请求处理装置实施例四中引擎仲裁场景示意图,如图8所示,在每次轮询时,以RR(Round Robin)轮询的方式在满足条件的引擎队列中选择一个执行相关的操作。
引擎数目过少会造成对片内处理能力依赖于片外缓存的访问速度,引擎数目过多会造成资源的浪费。本发明实施例中,根据出队处理模块处理出队请求的周期,入队处理模块处理入队请求的处理周期和从发起读片外FQIT的请求到FQIT从片外返回的时延,来决定引擎的数目。
进一步,请求队列管理模块53,还用于根据出队处理模块处理出队请求的周期,入队处理模块处理入队请求的处理周期和读取队列信息表的时延,确定片内的引擎数目。
假设从发出读片外FQIT的读请求,到FQIT返回到片内需要16个处理周期,出队处理模块处理一个出队流程需要8个处理周期,入队处理模块处理一个入队流程需要8个处理周期;如果FQID相同,出队请求队列和入队请求队列可占用同一个引擎。但考虑到最坏情况:在一段时间内出队请求队列和入队请求队列的各个FQID互不相同,即一个队列占用一个引擎。对于出队请求,一个引擎从被占用到释放需24个处理周期,所以对于出队请求来说至少需24个引擎;同理,对于入队请求,一个引擎从被占用到释放也需24个处理周期,所以对于入队请求来说至少需24个引擎。再考虑到其它的一些开销,引擎数目确定为64个。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (9)
1.一种队列请求处理方法,其特征在于,包括:
接收流队列的队列请求,获得所述流队列的队列标识;
根据队列标识,在片内查找是否存在所述流队列对应的目标引擎,所述目标引擎中保存有所述流队列的片内队列信息表;
若查找到目标引擎,将所述队列请求写入所述流队列对应的请求队列,处理所述请求队列中的所述队列请求,并更新所述目标引擎中保存的片内队列信息表;
当所述请求队列为空时,根据所述片内队列信息表的信息更新所述流队列的片外队列信息表,并将所述目标引擎释放为空闲引擎。
2.根据权利要求1所述的队列请求处理方法,其特征在于,所述将所述目标引擎释放为空闲引擎包括:
清空所述目标引擎中数据。
3.根据权利要求1所述的队列请求处理方法,其特征在于,所述引擎是指片内缓存中的地址空间,用于保存所述片内队列信息表。
4.根据权利要求1所述的队列请求处理方法,其特征在于,所述方法还包括:如果没有查找到所述目标引擎,则选择一片内空闲引擎作为所述流队列的目标引擎,并从片外读取所述流队列对应的片外队列信息表,将所述片外队列信息表的信息写入所述目标引擎,得到所述流队列的片内队列信息表。
5.根据权利要求1所述的队列请求处理方法,其特征在于,所述根据队列标识,在片内查找是否存在所述流队列对应的目标引擎,包括:
根据所述队列标识,在入队表项状态为占用的片内引擎中查找与所述流队列对应的目标引擎;
若查找到,在所述队列请求为入队请求时,将所述入队请求写入所述目标引擎对应的入队请求队列中;在所述队列请求为出队请求时,判断所述目标引擎的出队表项状态是否为占用,若为占用,将所述出队请求写入所述目标引擎对应的出队请求队列中;若为空闲,从片外读取所述流队列对应的片外队列信息表的出队表项写入所述目标引擎,将所述出队请求写入所述目标引擎对应的出队请求队列中,并将所述目标引擎的出队表项写为占用;
若没有查找到,在所述队列请求为入队请求时,从片外读取所述流队列对应的片外队列信息表中入队表项写入片内一空闲引擎,作为所述流队列的目标引擎,将所述目标引擎的入队表项状态写为占用,并将所述入队请求写入所述目标引擎对应的入队请求队列中;在所述队列请求为出队请求时,从片外读取所述流队列对应的片外队列信息表写入一空闲引擎,作为所述队列标识对应的目标引擎,将所述目标引擎的入队表项状态和出队表项状态均写为占用,并将所述出队请求写入所述目标引擎对应的出队请求队列。
6.一种队列请求处理装置,其特征在于,包括:
请求接收模块,用于接收流队列的队列请求,获得所述流队列的队列标识;
片内引擎管理模块,用于管理多个片内引擎,所述片内引擎用于根据流队列的片外队列信息表,生成和保存所述流队列的片内队列信息表;
查找模块,用于根据所述请求接收模块接收到的队列标识,在片内引擎管理模块中查找保存有所述流队列的片内队列信息表的目标引擎;
请求队列管理模块,用于将所述流队列的队列请求写入所述流队列相应的请求队列中,并且根据所述请求队列的处理情况,更新目标引擎中所述流队列对应的片内队列信息表。
7.根据权利要求6所述的队列请求处理装置,其特征在于,所述片内引擎管理模块包括:
信息表写回单元,用于在所述流队列的请求队列空闲时,根据所述流队列的目标引擎中的片内队列信息表更新所述流队列的片外流队列信息表,并释放所述目标引擎;
信息表读取单元,用于在所述查找模块没有查找到所述目标引擎时,选择一空闲引擎作为流队列的目标引擎,并根据所述流队列的片外队列信息表在所述目标引擎中生成所述流队列对应的片内队列信息表。
8.根据权利要求7所述的队列请求处理装置,其特征在于,释放所述目标引擎包括将所述目标引擎清空。
9.根据权利要求7或8所述的队列请求处理装置,其特征在于;
所述查找模块,具体用于根据所述队列标识,在入队表项状态为占用的片内引擎中查找与所述流队列对应的目标引擎;
所述请求队列管理模块,具体用于若所述查找模块查找到目标引擎,在所述队列请求为入队请求时,将所述入队请求写入所述目标引擎对应的入队请求队列中;
所述请求队列管理模块,还具体用于若所述查找模块查找到目标引擎,在所述队列请求为出队请求时,判断所述目标引擎的出队表项状态是否为占用,若为占用,将所述出队请求写入所述目标引擎对应的出队请求队列中;若为空闲,通知所述信息表读取单元从片外读取所述流队列对应的片外队列信息表的出队表项写入所述目标引擎,将所述出队请求写入所述目标引擎对应的出队请求队列中,并将所述目标引擎的出队表项写为占用;
所述请求队列管理模块,还具体用于若查找模块没有查找到目标引擎,在所述队列请求为入队请求时,通知所述信息表读取单元从片外读取所述流队列对应的片外队列信息表中入队表项写入片内一空闲引擎,作为所述流队列的目标引擎;将所述目标引擎的入队表项状态写为占用,并将所述入队请求写入所述目标引擎对应的入队请求队列中;
所述请求队列管理模块,还具体用于若查找模块没有查找到目标引擎,在所述队列请求为出队请求时,通知所述信息表读取单元从片外读取所述流队列对应的片外队列信息表写入一空闲引擎,作为所述队列标识对应的目标引擎;将所述目标引擎的入队表项状态和出队表项状态均写为占用,并将所述出队请求写入所述目标引擎对应的出队请求队列。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201010577858 CN102073539B (zh) | 2010-12-02 | 2010-12-02 | 队列请求处理方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201010577858 CN102073539B (zh) | 2010-12-02 | 2010-12-02 | 队列请求处理方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102073539A true CN102073539A (zh) | 2011-05-25 |
CN102073539B CN102073539B (zh) | 2013-10-09 |
Family
ID=44032085
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 201010577858 Active CN102073539B (zh) | 2010-12-02 | 2010-12-02 | 队列请求处理方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102073539B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104423982A (zh) * | 2013-08-27 | 2015-03-18 | 阿里巴巴集团控股有限公司 | 请求的处理方法和处理设备 |
CN106302374A (zh) * | 2015-06-26 | 2017-01-04 | 深圳市中兴微电子技术有限公司 | 一种用于提高表项访问带宽和原子性操作的装置及方法 |
CN115269467A (zh) * | 2022-09-29 | 2022-11-01 | 沐曦科技(成都)有限公司 | 一种总线仲裁的方法、装置、存储介质及电子设备 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1801778A (zh) * | 2005-12-29 | 2006-07-12 | 中山大学 | 一种网络数据流的多维队列调度与管理*** |
CN101246460A (zh) * | 2008-03-10 | 2008-08-20 | 华为技术有限公司 | 缓存数据写入***及方法和缓存数据读取***及方法 |
-
2010
- 2010-12-02 CN CN 201010577858 patent/CN102073539B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1801778A (zh) * | 2005-12-29 | 2006-07-12 | 中山大学 | 一种网络数据流的多维队列调度与管理*** |
CN101246460A (zh) * | 2008-03-10 | 2008-08-20 | 华为技术有限公司 | 缓存数据写入***及方法和缓存数据读取***及方法 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104423982A (zh) * | 2013-08-27 | 2015-03-18 | 阿里巴巴集团控股有限公司 | 请求的处理方法和处理设备 |
CN104423982B (zh) * | 2013-08-27 | 2018-03-06 | 阿里巴巴集团控股有限公司 | 请求的处理方法和处理设备 |
CN106302374A (zh) * | 2015-06-26 | 2017-01-04 | 深圳市中兴微电子技术有限公司 | 一种用于提高表项访问带宽和原子性操作的装置及方法 |
US10545867B2 (en) | 2015-06-26 | 2020-01-28 | Sanechips Technology Co., Ltd. | Device and method for enhancing item access bandwidth and atomic operation |
CN115269467A (zh) * | 2022-09-29 | 2022-11-01 | 沐曦科技(成都)有限公司 | 一种总线仲裁的方法、装置、存储介质及电子设备 |
CN115269467B (zh) * | 2022-09-29 | 2023-01-10 | 沐曦科技(成都)有限公司 | 一种总线仲裁的方法、装置、存储介质及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN102073539B (zh) | 2013-10-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102549552B (zh) | 用于处理流感知网络节点中的数据分组的方法 | |
CN100499565C (zh) | 自由表和环形数据结构管理 | |
US8626955B2 (en) | Directing packets to a processor unit | |
CN103222003B (zh) | 用于根据配置信息执行原子存储器操作的存储器及方法 | |
US10740006B2 (en) | System and method for enabling high read rates to data element lists | |
CN107613529B (zh) | 消息处理方法以及基站 | |
US10055153B2 (en) | Implementing hierarchical distributed-linked lists for network devices | |
CN106503008B (zh) | 文件存储方法和装置及文件查询方法和装置 | |
CN106537858B (zh) | 一种队列管理的方法和装置 | |
US20030056073A1 (en) | Queue management method and system for a shared memory switch | |
CN102073539B (zh) | 队列请求处理方法和装置 | |
CN108399175B (zh) | 一种数据存储、查询方法及其装置 | |
CN101594201B (zh) | 链式队列管理结构整合错误数据过滤的方法 | |
US11068308B2 (en) | Thread scheduling for multithreaded data processing environments | |
US7411902B2 (en) | Method and system for maintaining partial order of packets | |
CN116661703B (zh) | 存储器访问电路及存储器访问方法、集成电路和电子设备 | |
CN106254270A (zh) | 一种队列管理方法及装置 | |
CN112463064A (zh) | 基于双链表结构的i/o指令管理方法及装置 | |
US9767014B2 (en) | System and method for implementing distributed-linked lists for network devices | |
WO2017018978A1 (en) | Scheduling jobs in a computing cluster | |
CN117499351A (zh) | 报文转发装置及方法、通信芯片及网络设备 | |
US9563584B2 (en) | Method and device for buffer processing in system on chip | |
US8428075B1 (en) | System and method for efficient shared buffer management | |
US10067690B1 (en) | System and methods for flexible data access containers | |
CN113986118B (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 |