专利名称:队列请求处理方法和装置的制作方法
技术领域:
本发明实施例涉及通信技术,尤其涉及一种队列请求处理方法和装置。
背景技术:
在流量管理芯片中包含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的问题。本发明实施例提供一种队列请求处理方法,包括接收流队列的队列请求,获得所述流队列的队列标识;根据队列标识,在片内查找是否存在所述流队列对应的目标引擎,所述目标引擎 中保存有所述流队列的片内队列信息表;若查找到目标引擎,将所述队列请求写入所述流队列对应的请求队列,处理所述 请求队列中的所述队列请求,并更新所述目标引擎中保存的片内队列信息表;当所述请求 队列为空时,根据所述片内队列信息表的信息更新所述流队列的片外队列信息表,并将所 述目标引擎释放为空闲引擎。本发明实施例还提供一种队列请求处理装置,包括请求接收模块,用于接收流队列的队列请求,所述队列请求包括入队请求和出队 请求;片内引擎管理模块,用于管理多个片内引擎,所述片内引擎用于根据流队列的片 外队列信息表,生成和保存所述流队列的片内队列信息表;查找模块,用于根据所述请求接收模块接收到的队列标识,在片内引擎管理模块 中查找保存有所述流队列的片内队列信息表的目标引擎;请求队列管理模块,用于将所述流队列的队列请求写入所述流队列相应的请求队CN 102073539 A
说明书
2/8页
列中,并且根据所述请求队列的处理情况,更新目标引擎中所述流队列对应的片内队列信息表。本发明实施例,通过片内引擎缓存从片外读取的队列信息表。在接收到携带有队 列标识的队列请求时,先在片内查找是否存在缓存有与队列标识对应的目标引擎。如果存 在,则不需要从片外读取该队列标识对应的队列信息表;如果不存在相应的队列信息表,则 从片外读取队列信息表并写入片内一空闲引擎中。从而,避免了从片外读取的队列信息表 不是最新的队列信息表的缺陷,达到了正确访问片外队列信息表的目的。
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现 有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发 明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以 根据这些附图获得其他的附图。图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 根据队列标识,在片内查找是否存在流队列对应的目标引擎,目标引擎
5中保存有流队列的片内队列信息表。在本发明实施例中,可以为引擎配置与队列标识相关的关联表,也可以根据引擎 中的队列信息表所包括的相应的队列标识来查找所述目标引擎。步骤13 若查找到目标引擎,将队列请求写入流队列对应的请求队列,处理请求 队列中的队列请求,并相应的更新目标引擎中保存的片内队列信息表。如果没有查找到目标引擎,说明片内没有缓存当前队列请求所对应流队列的队列 信息表,即当前队列请求对应的队列信息表没有占用片内任何引擎,则选择一片内空闲引 擎作为所述流队列的目标引擎,并从片外读取所述流队列对应的片外队列信息表,将所述 片外队列信息表的信息写入所述目标引擎,得到所述流队列的片内队列信息表。步骤14 当请求队列为空时,根据片内队列信息表的信息更新流队列的片外队列 信息表,并将目标引擎释放为空闲引擎。在片内的目标引擎对应的请求队列为空,表明该目标引擎对应的队列请求已全部 被处理,为使该目标引擎缓存其它FQ以节省片内空间,将该目标引擎中缓存的队列信息表 写回片外,并清空该目标引擎中缓存的队列信息表,即释放该目标引擎。本发明实施例通过片内引擎缓存从片外读取的队列信息表。在接收到携带有队列 标识的队列请求时,先在片内查找是否存在缓存有与队列标识对应的目标引擎。如果存在, 则不需要从片外读取该队列标识对应的队列信息表;如果不存在相应的队列信息表,则从 片外读取队列信息表并写入片内一空闲引擎中。从而,避免了从片外读取的队列信息表不 是最新的队列信息表的缺陷,达到了正确访问片外队列信息表的目的。进一步,在片内的目 标引擎对应的队列请求为空时,表明该目标引擎对应的队列请求已处理完成,将该目标引 擎中缓存的队列信息表写回到片外,从而节省了片内空间。为提高访问片外FQIT的速度,本发明实施例将FQIT中各个表项进行了组织。由 于入队请求对应的操作只访问队尾指针、队列深度等表项,因此将与入队操作相关的表项 (以下简称入队表项)组织在一起。而有些表项,如token和credit,只有出队请求对应的 操作才会访问到,因此将与入队操作无关的、只有在处理出出队请求时才访问的其它表项 (以下简称出队表项)组织在一起。例如,一个的FQIT在18bit Burst2的QDR中 占用4个物理地址,通过合理的规划FQIT各个域的位置,使执行入队请求对应操作时只访 问高64bit (2个QDR地址),只在执行出队请求对应操作才访问全部的128bit (4个QDR地 址)。本发明实施例用引擎的两个状态入队表项状态和出队表项状态,分别表示该引擎是 否缓存有FQIT的入队表项和FQIT的出队表项。引擎的入队表项状态为占用,表示该引擎已 缓存有FQIT的入队表项;引擎的出队表项状态为占用,表示该引擎已缓存有FQIT的出队表 项。具体地,每个引擎采用两个比特位的状态标志寄存器engine_fqit_StatUS,分别缓存入 队表项状态和出队表项状态。其中,engine_fqit_status[l]为1表示FQIT的高64bit已经 缓存在片内RAM 了,为0表示FQIT的高64bit还没有缓存在片内。engine_fqit_status
为1表示FQIT的低64bit已经缓存在片内,为0表示FQIT的低64bit还没有缓存在片内。 以下通过两个实施例分别说明,本发明实施例采用上述结构的队列信息表时如何处理入队 请求和如何处理出队请求。图2A为本发明队列请求处理方法实施例二中入队请求处理方法流程图。图2B为本发明实施例中引擎队列示意图。如图2A所示,本实施例包括
步骤21 接收携带有队列标识的入队请求。步骤22 在入队表项状态为占用的片内引擎中,查找与队列标识对应的目标引 擎。若查找到目标引擎,执行步骤23,否则执行步骤M。如图2B所示,片内一个引擎对应一个引擎编号。每个非空闲引擎缓存一个队列FQ 的队列信息表FQIT,每个FQIT中都包含有相应队列FQ的队列标识FQID,因此,每个非空闲 引擎对应一个FQID。每个非空闲引擎还对应一个入队请求队列和一个出队请求队列。例如,引擎编号为8的状态标志寄存器,其高位engine_fqit_StatuS[l]为1时, 表明该引擎的入队表项为占用,即该引擎缓存有FQIT的入队表项;其低位engine_fqit_ status
为0时,表明该引擎的出队表项为空闲,即引擎中还没有缓存FQIT中的出队表 项。接收到入队请求时,在engine_fqit_StatUS[l]为1的引擎中,查找与入队请求中队列 标识FQID相对应的目标引擎。步骤23 若查找到目标引擎,将队列请求写入目标引擎对应的入队请求队列中。在片内查找到与入队请求中FQID相对应的目标引擎时,表明片内已有引擎缓存 该FQID对应的FQIT中入队表项。由于入队处理模块处理入队请求时操作的是片内缓存的 相应FQIT,因此目标引擎缓存的FQIT表为当前最新的FQIT,不需要再从片外读取。例如,在engine_fqit_status[l]为1的引擎中,查找到与入队请求中FQID相对 应的目标引擎,为编号为2的引擎。将该入队请求写入到编号为2的引擎所对应的入队请 求队列,等待入队处理模块的调度。在入队处理模块调度到该入队请求执行相应的入队操 作时,直接从编号为2的引擎中读取FQIT。步骤M 若没有查找到目标引擎,根据队列标识从片外读取队列信息表的入队表 项写入片内一空闲引擎,作为队列标识对应的目标引擎。步骤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的全部 内容写入空闲引擎中,并将该引擎的入队表项和出队表项均记录为占用,表明该引擎存储 7 FQIT 的全部内容。具体地,将 engine_fqit_status
和 engine_fqit_status[1]都置 为1,以表示该引擎中保存有该FQIT的全部数据。其中,引擎的出队请求队列参见图IB所 示,有关引擎的描述参见以上实施例的描述。如图3所示,包括步骤31 接收携带有队列标识的出队请求。步骤32 在入队表项状态为占用的片内引擎中,查找与队列标识对应的目标引 擎。若查找到执行步骤33,否则执行步骤36。步骤33 若查找到与队列标识对应的目标引擎,判断目标引擎的出队表项状态是 否为占用。若是执行步骤34,否则执行步骤35。步骤34:若目标引擎的出队表项状态为占用,将出队请求写入目标引擎对应的出 队请求队列。步骤35 若目标引擎的出队表项状态为空闲,从片外读取队列标识对应的队列信 息表中出队表项写入目标引擎,并将目标引擎对应的出队表项状态写为占用,将出队请求 写入目标引擎对应的出队请求队列。例如,在engine_fqit_status[l]为1的引擎中,查找到与出队请求中FQID相对 应的目标引擎,为编号为2的引擎,判断编号为2的引擎的engine_fqit_StatUSW]是否 为1。若编号为2的引擎的engine_fqit_StatuSW]为1,将该出队请求写入到编号为2 的引擎所对应的出队请求队列,等待出队处理模块的调度;若编号为2的引擎的engine fqit_status
为0,从片外读取该FQIT的低位写入编号为2的引擎,同时engine_fqit_ status[1]写为1,将该出队请求写入到编号为2的引擎所对应的出队请求队列,等待出队 处理模块的调度。在出队处理模块调度到该出队请求执行相应的出队操作时,直接从编号 为2的引擎中读取FQIT0步骤36 若没有查找到与队列标识对应的目标引擎,从片外读取队列标识对应的 队列信息表写入一空闲引擎,作为队列标识对应的目标引擎。步骤37 将目标引擎的入队表项状态和出队表项状态均写为占用,并将出队请求 写入目标引擎对应的出队请求队列。例如,在engine_fqit_status[l]为1的引擎中,没有查找到与出队请求中FQID 相对应的目标引擎。从片内选择一空闲引擎,例如是引擎编号为4的空闲引擎,从片外读取 与FQID对应的FQIT中写入到引擎编号为4的引擎中,并将引擎编号为4的引擎的两个状 态寄存器 engine_fqit_statuss
禾口 engine_fqit_status[1]均写为 I0本发明实施例在处理出队请求过程中,在所有入队表项为占用的引擎中,若没有 匹配到与出队请求中携带的队列标识相对应的引擎,从片外缓存中读取队列标识对应的 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以及片内引擎管理模块M。请求接收模块51,用于接收流队列的队列请求,所述队列请求包括入队请求和出 队请求。片内引擎管理模块M,用于管理多个片内引擎,所述片内引擎用于根据流队列的 片外队列信息表,生成和保存所述流队列的片内队列信息表。查找模块52,用于根据请求接 收模块51接收到的队列标识,在片内引擎管理模块M中查找保存有所述流队列的片内队 列信息表的目标引擎。请求队列管理模块53,用于将所述流队列的队列请求写入所述流队 列相应的请求队列中,并且根据所述请求队列的处理情况,更新所述流队列对应的目标引 擎中的片内队列信息表。进一步,如图6所示,所述片内引擎管理模块M包括信息表读取单元541和信息 表写回单元M2。信息表读取单元M1,用于在查找模块52没有查找到所述目标引擎时,选择一空 闲引擎作为流队列的目标引擎,并根据所述流队列的片外队列信息表在所述目标引擎中生
9成所述流队列对应的片内队列信息表。信息表写回单元M2,用于在所述流队列对应的请求队列为空时,根据所述流队列 对应的目标引擎的片内队列信息表更新所述流队列的片外队列信息表,并将将所述流队列 的目标引擎释放。上述各模块的工作机理参见图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个时钟周期。在一个处理周期内,在Tl时钟周期处理一个入队请求,在 T5时钟周期处理一个出队请求,因此,一个处理周期内最多会占用两个引擎。为达到引擎占 用和释放的平衡,在一个处理周期内分配两个时钟周期来轮询引擎释放请求。分配TO时钟 周期调度器在所有符合出队条件的入队请求队列中轮询出一个队列出队,出队的入队请求 进入到入队处理模块处理,分配T2时钟周期在所有符合出队条件的出队请求队列中轮询 出一个队列出队,出队的出队请求进入到出队处理模块处理,分配T4时钟周期在所有符合 释放条件的引擎中轮询出一个释放,分配T6时钟周期在所有符合释放条件的引擎中轮询 出一个释放。图8为队列请求处理装置实施例四中引擎仲裁场景示意图,如图8所示,在每 次轮询时,以RR(Round Robin)轮询的方式在满足条件的引擎队列中选择一个执行相关的 操作。引擎数目过少会造成对片内处理能力依赖于片外缓存的访问速度,引擎数目过多 会造成资源的浪费。本发明实施例中,根据出队处理模块处理出队请求的周期,入队处理模 块处理入队请求的处理周期和从发起读片外FQIT的请求到FQIT从片外返回的时延,来决 定引擎的数目。进一步,请求队列管理模块53,还用于根据出队处理模块处理出队请求的周期,入 队处理模块处理入队请求的处理周期和读取队列信息表的时延,确定片内的引擎数目。假设从发出读片外FQIT的读请求,到FQIT返回到片内需要16个处理周期,出队 处理模块处理一个出队流程需要8个处理周期,入队处理模块处理一个入队流程需要8个 处理周期;如果FQID相同,出队请求队列和入队请求队列可占用同一个引擎。但考虑到最 坏情况在一段时间内出队请求队列和入队请求队列的各个FQID互不相同,即一个队列占 用一个引擎。对于出队请求,一个引擎从被占用到释放需M个处理周期,所以对于出队请 求来说至少需M个引擎;同理,对于入队请求,一个引擎从被占用到释放也需M个处理周 期,所以对于入队请求来说至少需对个引擎。再考虑到其它的一些开销,引擎数目确定为 64个。本领域普通技术人员可以理解实现上述方法实施例的全部或部分步骤可以通过 程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序 在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括R0M、RAM、磁碟或者 光盘等各种可以存储程序代码的介质。最后应说明的是以上实施例仅用以说明本发明的技术方案,而非对其限制;尽 管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解其依然 可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替 换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精 神和范围。
权利要求
1.一种队列请求处理方法,其特征在于,包括接收流队列的队列请求,获得所述流队列的队列标识;根据队列标识,在片内查找是否存在所述流队列对应的目标引擎,所述目标引擎中保 存有所述流队列的片内队列信息表;若查找到目标引擎,将所述队列请求写入所述流队列对应的请求队列,处理所述请求 队列中的所述队列请求,并更新所述目标引擎中保存的片内队列信息表;当所述请求队列为空时,根据所述片内队列信息表的信息更新所述流队列的片外队列 信息表,并将所述目标引擎释放为空闲引擎。
2.根据权利要求1所述的队列请求处理方法,其特征在于,所述将所述目标引擎释放 为空闲引擎包括清空所述目标引擎中数据。
3.根据权利要求1所述的队列请求处理方法,其特征在于,所述引擎是指片内缓存中 的地址空间,用于保存所述片内队列信息表。
4.根据权利要求1所述的队列请求处理方法,其特征在于,所述方法还包括如果没有 查找到所述目标引擎,则选择一片内空闲引擎作为所述流队列的目标引擎,并从片外读取 所述流队列对应的片外队列信息表,将所述片外队列信息表的信息写入所述目标引擎,得 到所述流队列的片内队列信息表。
5.根据权利要求1所述的队列请求处理方法,其特征在于,所述根据队列标识,在片内 查找是否存在所述流队列对应的目标引擎,包括根据所述队列标识,在入队表项状态为占用的片内引擎中查找与所述流队列对应的目 标引擎;若查找到,在所述队列请求为入队请求时,将所述入队请求写入所述目标引擎对应的 入队请求队列中;在所述队列请求为出队请求时,判断所述目标引擎的出队表项状态是否 为占用,若为占用,将所述出队请求写入所述目标引擎对应的出队请求队列中;若为空闲, 从片外读取所述流队列对应的片外队列信息表的出队表项写入所述目标引擎,将所述出队 请求写入所述目标引擎对应的出队请求队列中,并将所述目标引擎的出队表项写为占用;若没有查找到,在所述队列请求为入队请求时,从片外读取所述流队列对应的片外队 列信息表中入队表项写入片内一空闲引擎,作为所述流队列的目标引擎,将所述目标引擎 的入队表项状态写为占用,并将所述入队请求写入所述目标引擎对应的入队请求队列中; 在所述队列请求为出队请求时,从片外读取所述流队列对应的片外队列信息表写入一空闲 引擎,作为所述队列标识对应的目标引擎,将所述目标引擎的入队表项状态和出队表项状 态均写为占用,并将所述出队请求写入所述目标引擎对应的出队请求队列。
6.一种队列请求处理装置,其特征在于,包括请求接收模块,用于接收流队列的队列请求,获得所述流队列的队列标识;片内引擎管理模块,用于管理多个片内引擎,所述片内引擎用于根据流队列的片外队 列信息表,生成和保存所述流队列的片内队列信息表;查找模块,用于根据所述请求接收模块接收到的队列标识,在片内引擎管理模块中查 找保存有所述流队列的片内队列信息表的目标引擎;请求队列管理模块,用于将所述流队列的队列请求写入所述流队列相应的请求队列中,并且根据所述请求队列的处理情况,更新目标引擎中所述流队列对应的片内队列信息表。
7.根据权利要求6所述的队列请求处理装置,其特征在于,所述片内引擎管理模块包括信息表写回单元,用于在所述流队列的请求队列空闲时,根据所述流队列的目标引擎 中的片内队列信息表更新所述流队列的片外流队列信息表,并释放所述目标引擎;信息表读取单元,用于在所述查找模块没有查找到所述目标引擎时,选择一空闲引擎 作为流队列的目标引擎,并根据所述流队列的片外队列信息表在所述目标引擎中生成所述 流队列对应的片内队列信息表。
8.根据权利要求7所述的队列请求处理装置,其特征在于,释放所述目标引擎包括将 所述目标引擎清空。
9.根据权利要求7或8所述的队列请求处理装置,其特征在于;所述查找模块,具体用于根据所述队列标识,在入队表项状态为占用的片内引擎中查 找与所述流队列对应的目标引擎;所述请求队列管理模块,具体用于若所述查找模块查找到目标引擎,在所述队列请求 为入队请求时,将所述入队请求写入所述目标引擎对应的入队请求队列中;所述请求队列管理模块,还具体用于若所述查找模块查找到目标引擎,在所述队列请 求为出队请求时,判断所述目标引擎的出队表项状态是否为占用,若为占用,将所述出队请 求写入所述目标引擎对应的出队请求队列中;若为空闲,通知所述信息表读取单元从片外 读取所述流队列对应的片外队列信息表的出队表项写入所述目标引擎,将所述出队请求写 入所述目标引擎对应的出队请求队列中,并将所述目标引擎的出队表项写为占用;所述请求队列管理模块,还具体用于若查找模块没有查找到目标引擎,在所述队列请 求为入队请求时,通知所述信息表读取单元从片外读取所述流队列对应的片外队列信息表 中入队表项写入片内一空闲引擎,作为所述流队列的目标引擎;将所述目标引擎的入队表 项状态写为占用,并将所述入队请求写入所述目标引擎对应的入队请求队列中;所述请求队列管理模块,还具体用于若查找模块没有查找到目标引擎,在所述队列请 求为出队请求时,通知所述信息表读取单元从片外读取所述流队列对应的片外队列信息表 写入一空闲引擎,作为所述队列标识对应的目标引擎;将所述目标引擎的入队表项状态和 出队表项状态均写为占用,并将所述出队请求写入所述目标引擎对应的出队请求队列。
全文摘要
本发明实施例提供一种队列请求处理方法和装置。该方法包括接收流队列的队列请求,获得流队列的队列标识;根据队列标识,在片内查找是否存在流队列对应的目标引擎,目标引擎中保存有流队列的片内队列信息表;若查找到目标引擎,将队列请求写入流队列对应的请求队列,处理请求队列中的队列请求,并更新目标引擎中保存的片内队列信息表;当请求队列为空时,根据片内队列信息表的信息更新流队列的片外队列信息表,并将目标引擎释放为空闲引擎。本发明实施例达到了正确访问片外队列信息表的目的。
文档编号G06F9/46GK102073539SQ201010577858
公开日2011年5月25日 申请日期2010年12月2日 优先权日2010年12月2日
发明者丁德宏, 卞云峰, 程柏 申请人:华为技术有限公司