包分类规则的增量更新的制作方法

文档序号:7992404阅读:284来源:国知局
包分类规则的增量更新的制作方法
【专利摘要】提供了一种系统、装置和方法,用于从为包分类的主动搜索过程的角度在一个更新中增加、删除和修改规则。当搜索处理器搜索与从所接收包生成的密钥相匹配的一个或多个规则时,存在对增加、删除、或修改规则的需要。通过从用于包分类的主动搜索过程的角度在一个更新中增加、删除和修改规则,可以维持主动搜索过程的性能和功能性,从而防止包损耗并保持通过量。
【专利说明】包分类规则的增量更新
[0001]相关申请的交叉引用
[0002]本申请要求2011年8月2日提交的美国临时申请N0.61/514,344的权益;2011年8月2日提交的美国临时申请N0.61/514,382的权益;2011年8月2日提交的美国临时申请N0.61/514,379的权益;2011年8月2日提交的美国临时申请N0.61/514,400的权益;2011年8月2日提交的美国临时申请N0.61/514,406的权益;2011年8月2日提交的美国临时申请N0.61/514,407的权益;2011年8月2日提交的美国临时申请N0.61/514,438的权益;2011年8月2日提交的美国临时申请N0.61/514,447的权益;2011年8月2日提交的美国临时申请N0.61/514,450的权益;2011年8月2日提交的美国临时申请N0.61/514,459的权益;和2011年8月2日提交的美国临时申请N0.61/514,463的权益。
[0003]上述申请的全部教导通过参考合并于此。
【背景技术】
[0004]该开放系统互连(OSI)参考模型定义了七个网络协议层(L1-L7),其用于在传输介质上通信。上层(L4-L7)代表端到端通信,并且下层(L1-L3)代表本地通信。
[0005]网络应用感知系统需要处理、过滤并切换L3到L7网络协议层的范围,例如,诸如超文本传送协议(HTTP)和简单邮件传送协议(SMTP)的L7网络协议层和诸如传输控制协议(TCP)的L4网络协议层。除了处理网络协议层之外,该网络应用感知系统需要同时保护访问这些协议通过L4-L7网络协议层有基于访问和内容的安全性,包括防火墙、虚拟专用网络(VPN)、安全套接层(SSL)、侵入检测系统(IDS)、Internet协议安全(IPSec)、防病毒(AV)和在线速下的抗Spam功能性。
[0006]提高现在网络世界中网络操作的效率和安全仍旧是网络用户的终极目标。访问控制、流量工程、侵入检测、和许多其他网络服务需要基于包报头的多个域的包的辨别,这被称作包分类。
[0007]因特网路由器将包分类,以实现许多高级因特网服务,诸如路由选择、速度限制,防火墙中的访问控制、虚拟带宽分配、基于策略的路由选择、服务分化、负载平衡、流量塑性和流量计费。这些服务需要路由器将进入包分为不同流,然后取决于这些分类执行适当动作。
[0008]使用一组过滤器或规则的分类器指定该流或类别。例如,防火墙中的每个规则都可能指定一组来源和目的地址,并且将相应否认或许可动作与其关联。替代地,该规则可能基于包报头的几个域,其包括OSI模型的层2、3、4和5,其中包括地址和协议信息。
[0009]在一些类型的专有硬件上,访问控制表(ACL)指下述规则,这些规则被应用于在主机或层3装置上可利用的端口数或网络守护进程名称,其每个都具有一列允许使用服务的主机和/或网络。独立服务器以及路由器都能够具有网络ACL。ACL能够被配置为控制入站和出站流量。

【发明内容】
[0010]根据一个实施例,装置可以包括存储器,其被配置为存储规则编译数据结构(RCDS)。该规则编译数据结构(RCDS)可以表示一组用于包分类的规则。该装置还可以包括被耦合到存储器的处理器。该处理器可以被配置为接收用于RCDS的增量更新,执行规则编译数据结构(RCDS)的主动搜索以将所接收的包分类,并且从正在执行的主动搜索的角度原子地更新规则编译数据结构(RCDS)。该装置还可以包括接口。该接口可以被配置为接收变化列表;该变化列表可以包括增量更新。处理器可以是搜索处理器。该规则编译数据结构(RCDS)可以包括编译规则组,并且更新规则编译数据结构(RCDS)可以包括编译规则组和一个或多个应用的增量更新。更新的规则编译数据结构(RCDS)实现了与更新的RCDS的编译之前的版本相同的性能。
[0011]根据一个实施例,装置可以包括存储器和被耦合到存储器的处理器。该处理器可以被配置为包括增量更新模块。该增量更新模块可以被配置为接收增加、删除、或修改规则的操作,并且在存储器中建立变化列表。可以建立变化列表,以在原子级上从利用RCDS的主动搜索过程的角度更新规则编译数据结构(RCDS)。该装置还可以包括接口,并且增量更新模块可以进一步被配置为在接口上传递变化列表。该装置还可以包括被耦合到存储器的编译器模块。该编译器模块可以被配置为接收规则组,并且将该规则组编译为二元树。该编译器模块可以进一步被配置为将二元树存储在存储器中,并且在接口上传递二元树。
[0012]根据一个实施例,非瞬时计算机可读介质已经将其上的指令序列编码,这些指令序列在由处理器运行时,使处理器接收用于规则编译数据结构(RCDS)的增量更新。该规则编译数据结构(RCDS)可以代表用于包分类的规则组。该规则编译数据结构(RCDS)可以通过主动搜索过程被利用用于包分类。该处理器可以基于所接收的增量更新原子地更新该规则编译数据结构(RCDS)。可以从利用规则编译数据结构(RCDS)的主动搜索过程的角度原子地更新该规则编译数据结构(RCDS)。
[0013]根据一个实施例,一种方法可以接收用于规则编译数据结构(RCDS)的增量更新。该规则编译数据结构(RCDS)可以表示用于包分类的规则组。该规则编译数据结构(RCDS)可以通过主动搜索过程被利用用于包分类,并且从利用RCDS的主动搜索过程的角度,基于所接收的增量更新而原子地更新。
[0014]该方法可以将规则编译数据结构(RCDS)的状态约束至于先前状态和后来状态。先前状态可以是在接收用于RCDS的增量更新之前规则编译数据结构(RCDS)的状态,后来状态可以是在已经完成对规则编译数据结构(RCDS)的一系列一个或多个修改之后该规则编译数据结构(RCDS)的状态。可以基于所接收的增量更新,已经完成该系列一个或多个修改。基于对正被搜索的规则编译数据结构(RCDS)执行一个更新,一系列一个或多个修改可以对主动搜索过程可见。
[0015]该方法还可以包括:基于增量更新为增加规则操作而原子地将新规则增加到规则编译数据结构(RCDS)、基于增量更新是删除规则操作而原子地从规则编译数据结构(RCDS)删除规则、并且基于增量更新是修改规则操作而原子地修改规则编译数据结构(RCDS)中的规则。修改规则包括下列至少一项。修改规则的优先级或修改规则的至少一个字段。
[0016]该方法还可以包括基于与该规则和一个或多个规则的当前优先级排序不一致的规则的优先级变化,识别优先级适配冲突。该方法可以基于未识别的优先级适配冲突而原子地修改该规则的优先级,并且基于识别的出冲突而原子地修改规则的优先级或另一个规则的优先级。
[0017]该方法还可以包括确定是否需要增加或删除一个或多个规则,并且增加或删除该一个或多个规则。添加或删除该一个或多个规则是原子的。
[0018]该方法还可以包括基于增量更新为指定规则的删除操作而原子地使规则编译数据结构(RCDS)中的指定规则无效。该主动搜索过程跳过无效的指定规则。
[0019]该方法还可以包括将规则编译数据结构(RCDS)表示为规则组的树。该树可以是包括一个或多个节点和一个或多个叶片的二进制数据结构。该方法可以包括将一个或多个节点的至少一个表示为母节点并且将母节点链接到一个或多个子点。该一个或多个子点可以是节点或叶片。将母节点链接到一个或多个子点可以包括将母节点指向兄弟列表。该兄弟列表可以包括开一个或多个子点。该方法可以将树的节点链接到树的一个或多个节点或一个或多个叶片。该方法可以将树的叶片链接到一个或多个桶。每个桶都可以代表规则组的子组。每个桶都包括一个或多个对应于规则组的子组的桶条目。该桶条目可以通过提高或降低规则优先级而排序。该方法还可以包括将规则组存储在规则表中。该规则表内的规则可以有序或无序。
[0020]该规则编译数据结构(RCDS)可以是性能树。该方法还可以包括维持内务管理树。该内务管理树可以是性能树的增强表示。该内务管理树可以包括在树的每个节点处的规则列表和规则的字段范围。原子地更新该性能树可以包括利用内务管理树,以便基于对正被搜索的性能树的一个更新,使对性能树的一系列一个或多个修改对主动搜索过程可见。
[0021]该方法还可以包括建立变化列表,其指定对性能树的一个或多个修改。
[0022]该增量更新可以是增加、删除、或修改操作,并且该方法还可以包括为内务管理树中的每个规则都包括规则的覆盖列表。可以建立变化列表,其基于覆盖列表为一个或多个规则指定增加、删除、或修改。该方法可以包括基于所确定的变化列表更新覆盖列表。
[0023]该方法还可以包括在每个叶片中维持到一个或多个桶的桶和桶规则计数器的指针。该桶规则计数器可以跟踪桶中包括的规则的数目。该桶规则计数器可以基于规则被增加到桶的而递增。该桶规则计数器可以基于从桶删除规则而递减。
[0024]该方法可以包括在每个节点跟踪增量更新的总数。该方法可以在给定节点确定由给定节点代表的规则数目与为给定节点跟踪的增量更新的总数的比率。基于比率大于给定阈值,该方法可以通过重新编译子树来适当调整性能树。
[0025]该方法可以包括原子地将新的规则增加到树。该方法可以将树的叶片分为一个或多个新的节点,并且将规则增加到与一个或多个新的节点的一个或多个叶片关联的桶。
[0026]每个桶都可以是数据结构,并且一个或多个桶条目可以是规则、到规则的索引、到规则的指针、到规则组的指针、或到另一个桶的指针。
[0027]该方法还可以包括原子地将新的规则增加到树,并且从一个或多个桶中识别目标桶以包括新的规则。该方法可以基于确定了目标桶中新的规则空间适配和优先级符合,而将新的规则附加到目标桶的结尾。将新的规则附加到目标桶的结尾花费一个更新。
[0028]空间适配可以基于目标桶中规则的当前数目小于用于目标桶的规则的最大数目。
[0029]优先级适配可以基于与新的规则关联的优先级与目标桶中的当前规则的优先级排序一致。[0030]该方法还可以包括原子地将新的规则增加到树,从一个或多个桶中识别包括新的规则的目标桶,并且基于确定了与新的规则关联的优先级与目标桶中的规则的优先级不一致而建立新桶。该主动搜索过程不受所建立的新桶影响。该方法还可以包括,在新桶中包括目标桶的规则组、在新桶中包括新的规则、和基于提高或降低优先级顺序来调整规则组和新的规则的顺序。该方法可以更新树中的叶片的链接。该叶片可以与从一个或多个桶中的目标桶链接。该链接更新可以包括将叶片指向新桶。该链接更新花费一个更新。
[0031]该方法还可以包括通过从一个或多个桶中识别包括新的规则的目标桶将新的规则增加到树、建立新桶(其中主动搜索过程不受所建立的新桶影响)、在新桶中包括新的规贝U、并且更新目标桶的桶条目以指向新桶。该桶条目更新花费一个更新。
[0032]该方法还可以包括通过从一个或多个桶中识别包括新的规则的目标桶以原子地将新的规则增加到树、并且基于为新的规则确定目标桶中空间不足而建立子树。目标桶中空间不足可以基于用于目标桶的规则组的最大数目而确定。该子树可以包括一个或多个新的叶片或新的节点。该主动搜索过程不受所建立的子树影响。该方法还可以包括将新的规则增加到子树的一个或多个桶、将目标桶的一个或多个规则增加到子树的一个或多个桶、并且通过更新树中的叶片的链接以将子树链接到树。该叶片可以与从一个或多个桶中的目标桶链接。该链接更新可以包括将叶片指向子树,将叶片转换为节点。该链接更新花费一个更新。
[0033]该方法还可以包括原子地将新的叶片或新的节点增加到树中的母节点,其中树中的母节点链接到当前兄弟列表。当前兄弟列表可以包括一个或多个叶片或一个或多个节点。该方法还可以包括建立新的兄弟列表。主动搜索过程不受所建立的新的兄弟列表影响。该方法还可以包括将新的叶片或新的节点增加到新的兄弟列表。该新的兄弟列表可以包括当前兄弟列表。该方法还可以包括通过更新母体的链接以将母节点指向新的兄弟列表,来包括新的兄弟列表。该链接更新花费一个更新。
[0034]该方法还可以包括保留存储空间的碎片整理部分。存储空间的碎片整理部分可以是指派的碎片整理区域。该碎片整理区域可以是在该存储空间的指派区域保留的存储空间的毗连部分。该方法还可以包括识别RCDS的死区。该死区可以是由至少一个未涉及的叶片、节点、桶、或兄弟列表占据的存储空间的部分。该方法还可以包括通过恢复死区对规则编译数据结构(RCDS)进行碎片整理。主动搜索过程不受所恢复的死区的影响,原子地将规则编译数据结构(RCDS)碎片整理。该方法还包括恢复死区,其包括将存储器的所使用部分重新定位。所使用的部分包括邻近被识别为所指派的碎片整理区域的死区定位的一个或多个节点或叶片。该方法还可以包括将新的兄弟列表移动到所恢复的存储空间。所恢复的存储空间可以包括被识别的死区和重新定位的存储器的所使用部分。该方法还可以包括将重新定位的存储器的所使用部分移动到碎片整理区域,从碎片整理区域出来到为RCDS保留的存储空间的结尾部分。
[0035]该方法还可以包括原子地从树删除指定规则,其中桶的桶条目包括指定规则。该方法可以包括通过叶片桶指针将桶链接到叶片,并且使指定规则在桶条目中无效。该方法还可以包括如果桶中全部桶条目均无效,那么通过将叶片桶指针设定为空来更新该链接。使指定规则无效并将叶片桶指针更新为空来花费一个更新。如果叶片桶指针为空,那么主动搜索过程跳过桶。[0036]该方法还可以包括原子地从树删除指定规则,其中桶的桶条目包括指向指定规则的规则指针。该方法可以包括通过叶片桶指针将桶链接到叶片。该方法还可以包括将规则指针设定为空,并且如果桶中全部规则指针均为空,那么通过将叶片桶指针设定为空来更新该链接。将规则指针设定为空并且将叶片桶指针设定为空来花费一个更新。主动搜索过程跳过空的叶片桶指针并且跳过空的规则指针。
[0037]该方法还可以包括原子地从树删除指定规则,其中桶的桶条目包括指向包括指定规则的一组一个或多个规则的规则块指针。该方法可以包括通过叶片桶指针将桶链接到叶片、使得指定规则无效、并且如果该组一个或多个规则中的全部规则无效,那么将规则块指针设定为空。该方法还可以包括如果桶中全部桶条目均无效,那么通过将叶片桶指针设定为空来更新该链接。使指定规则无效、将规则块指针设定为空、并且将叶片桶指针设定为空来花费一个更新。主动搜索过程跳过空的叶片桶指针,空的规则块指针、和无效规则。
[0038]该方法还可以包括基于从该树删除指定规则原子地增加一个或多个规则。该方法可以包括从一个或多个桶中识别包括新的规则的目标桶。该方法还可以包括基于确定用于新的规则的目标桶中空间不足而建立子树。目标桶中空间不足可以基于为目标桶设定的规则的最大数目来确定。该子树可以包括一个或多个新的叶片或新的节点。该主动搜索过程不受所创建的子树影响。该方法还可以包括将新的规则增加到子树的一个或多个桶、将目标桶的一个或多个规则增加到子树的一个或多个桶、并且通过更新树中的叶片的链接以将子树链接到树。该叶片可以与从一个或多个桶中的目标桶链接。该链接更新可以包括将叶片指向子树,将叶片转换为节点。该链接更新花费一个更新。
[0039]该方法还可以包括基于从该树删除指定规则而原子地增加一个或多个规则。该方法还可以包括从一个或多个桶中识别包括新的规则的目标桶,并且基于确定目标桶中新的规则空间适配和优先级适配,将新的规则附加给目标桶的结尾。将新的规则附加给目标桶的结尾花费一个更新。
[0040]根据一个实施例,该增量更新是增加规则操作、删除规则操作、或修改规则操作。基于所接收的增量更新来更新规则编译数据结构(RCDS)还可以包括原子地将一个或多个规则增加到RCDS、从RCDS删除一个或多个规则、修改一个或多个规则、或其任何组合。
【专利附图】

【附图说明】
[0041]如附图中所说明的,从本发明的实例实施例的下列更特别的描述中前述事项将变得显而易见,在附图中遍及不同视图相同附图标记指代相同部件。附图不需要按比例绘制,而是将重点放在说明本发明的实施例上。
[0042]图1是包括网络元件的典型的网络拓扑的方框图,该网络元件可以采用本文中所公开的技术。
[0043]图2A说明了原子地更新规则编译数据结构(RCDS)的系统的一个实施例,该系统包括控制面装置和数据数据面装置。
[0044]图2B是说明将规则载入存储器结构的编译器模块的实例实施例的方框图。
[0045]图3示出搜索处理器的一个实施例的架构。
[0046]图4是说明搜索区块或搜索群的实例实施例的方框图。
[0047]图5A是用于为按照一个实施例的规则编译数据结构(RCDS)的增量更新的方法的一个实施例的流程图。
[0048]图5B是用于表示规则编译数据结构(RCDS)的方法的一个实施例的流程图。
[0049]图6A说明了用于按照一个实施例的规则编译数据结构(RCDS)的原子更新的方法的流程图。
[0050]图6B说明了由图表表示的规则。
[0051]图6C示出了由切割规则空间得到的树的实施例。
[0052]图6D示出了规则字段改变的实施例。
[0053]图6E示出了由切割规则空间得到的树的实施例。
[0054]图6F示出了规则字段改变的实施例。
[0055]图6G示出了由切割规则空间得到的树的实施例。
[0056]图6H说明了按照一个实施例用于修改规则的方法的流程图。
[0057]图7是按照一个实施例增加可以适合桶的规则的流程图。
[0058]图8A是按照一个实施例的一个或多个修改的所述系列的流程图。
[0059]图8B说明了按照一个实施例的叶片指向桶的树。
[0060]图SC示出了根据一个实施例增加优先级比另一个规则更高的规则,可以建立新桶。
[0061 ]图9A是建立子树的方法的实施例的流程图。
[0062]图9B说明了树的节点和叶片的实施例。
[0063]图9C说明了根据一个实施例的新的子树的创造。
[0064]图1OA是用于将新的叶片或新的节点原子地增加到树中的亲代节点的方法的一个实施例的流程图。
[0065]图1OB说明了根据一个实施例的亲代节点及其子点。
[0066]图1OC说明了将叶片/节点增加到树,按照一个实施例创建增加了叶片/节点的新的兄弟列表。
[0067]图1lA是根据一个实施例的碎片整理过程的流程图。
[0068]图1lB说明了具有三级的树的一个实施例。
[0069]图1lC说明了按照一个实施例增加规则。
[0070]图12A是说明了按照一个实施例删除规则的流程图。
[0071]图12B示出了按照一个实施例具有规则的规则表。
[0072]图13示出了按照一个实施例指向桶和规则计数器的叶片。
[0073]图14A说明了用于删除规则的实施例。
[0074]图14B示出按照一个实施例合并两个桶,其包括建立一个桶。
[0075]图15是说明按照一个实施例用于从所述树原子地删除具体规则的方法的流程图。
[0076]图16是按照用于从树原子地删除具体规则的方法的另一个实施例的流程图。
[0077]图17是按照用于从树原子地删除具体规则的方法的还另一个实施例的流程图。
[0078]图18是按照一个实施例用于树的适当调整的方法的流程图。
[0079]图19A说明了用于增加规则的按照另一个实施例的增量更新。
[0080]图19B说明了用于将叶片分为节点和多个叶片的根据另一个实施例的增量更新。[0081]图19C说明了用于将桶增加到节点的按照另一个实施例的增量更新。
[0082]图19D说明了用于重新编辑子树的按照另一个实施例的增量更新。
[0083]图19E说明了用于删除规则的按照另一个实施例的增量更新。
[0084]图19F说明了用于改变规则的按照另一个实施例的增量更新。
[0085]图19G说明了用于碎片整理的按照另一个实施例的增量更新。
[0086]图20是计算机的方框图,其中可以实施本文中所公开的各种实施例。
【具体实施方式】
[0087]接着是本发明的实例实施例的描述。
[0088]本文中所引用的全部专利、公开申请和参考文献的教导全部内容通过参考合并。
[0089]由于在网络装置中执行的网络应用的数目增加,网络应用的复杂性增加。包分类广泛被用于各种应用,诸如服务感知路由、阻止入侵和流量成形。要求包分类解决方法能够处理在边缘、访问和核心装置上的按指数增加的流量。
[0090]图1是包括网络元件的典型的网络拓扑的方框图100,该网络元件可以采用本文中所公开的技术。该网络拓扑包括因特网核心102,其包括多个核心路由器104a-h。多个核心路由器104a_h的每个都连接到多个核心路由器104a_h的至少一个其他路由器。在因特网核心102边缘上的核心路由器104a-h (例如,核心路由器104b-e和104h)与至少一个边缘路由器106a_f耦合。每个边缘路由器106a_f被耦合到至少一个访问路由器108a_e。
[0091]该核心路由器104a_h可以被配置为在因特网核心102或因特网主干中工作。该核心路由器104a-h可以被配置为支持因特网核心102的多路电信接口,并且可以进一步被配置为以每个多路电信协议的最大速度运送包。
[0092]该边缘路由器106a可以置于因特网核心102的边缘处。边缘路由器106a_f可以将因特网核心102外侧的访问路由器108a-e和因特网核心102中的核心路由器104a_h桥接。边缘路由器106a_f可以被配置为采用桥接协议将包从访问路由器108a-e运送到核心路由器104a_h,反之亦然。
[0093]访问路由器108a-e可以是由最终用户(诸如家庭用户或办公室)使用的路由器,以连接到边缘路由器106a_f的一个,该边缘路由器可以通过连接到核心路由器104a_h的一个进而连接到因特网核心102。以这种方式,该边缘路由器106a-f可以经由边缘路由器106a-f和互连的核心路由器104a_h连接到任何其他边缘路由器106a_f。
[0094]本文中所述的处理器可以存在于任何核心路由器104a_h、边缘路由器106a_f和访问路由器108a_e中。在这些路由器的每个内的本文中所述的搜索处理器可以被配置为基于规则组来分析(例如,分类)因特网协议(IP)包,并将IP包沿着适当网络通路运送。包分类必须是智能的,以没有显著的性能损失而处理多种类型的规则组。此外,诸如多核心处理器的新的技术提供了前所未有的计算能力,以及高度集成的资源。因此,包分类解决方法必须非常适合于高级硬件和软件技术。
[0095]现有的包分类方法用存储器换取时间。尽管该权衡已经不断改进,但是合理的存储器的量所花费的时间仍将通常很差。因为现有方法的问题,出售商使用三进制可按内容寻址的存储器(TCAM),其使用爆破并行硬件同时对着全部规则复查包。TCAM优于现有方法的主要优点是速度和决定论(TCAM为全部数据库工作)。[0096]TCAM是用作完全相关联存储器的硬件装置。TCAM单元存储三个值:0、1、或“X”,其代表不关心位,并且作为使TCAM能够匹配包含通配符(诸如kleen星)的规则的每单元掩码。在工作中,能够将整个包报头呈现给TCAM,以确定其匹配那个条目(规则)。然而,TCAM的复杂性已经只允许消耗大量电力的小的刚性的相对缓慢的执行方式。因此,继续存在对在专业化数据结构上工作的有效方法的需要。
[0097]当前方法仍处于数学分析和/或软件模拟(基于观测的解决方法)的阶段中。提出的数学解决方法已经被报告为具有优秀的时间/特别的复杂性。然而,这种类型的方法还未发现在现实的网络装置中有任何执行,因为数学解决方法通常增加特殊条件,以简化问题和/或省略可能隐蔽明确的最坏情况边界的大的恒定因子。提出的基于观测的解决方法采用在规则中观测到的统计特征值,从而为现实应用实现有效解决方法。然而,这些方法通常只对指定类型的规则组有效。因为用于差异应用的包分类规则具有多种特征,所以很少有基于观测的方法能够完全利用不同类型规则组中的冗余,而在各种条件下获得稳定的性倉泛。
[0098]可以使用包分类器执行包分类,其也被称作策略数据库、流分类器、或简单地分类器。分类器是许多规则或策略的集合。所接收的包被与规则相匹配,其确定与所匹配的包进行的动作。一般的包分类基于包的报头的多个字段需要路由器将包分类。分类器的每个规则都指定了按照对包报头的“F”个字段的标准包可以属于的分类,并且分类器的每个规则都将标识符(例如,分类ID)与每个分类关联。例如,流分类器中的每个规则都是流说明,其中每个流都在单独的分类中。这个标识符唯一地指定与每个规则关联的动作。每个规则都具有“F”个字段。规则R的第i个字段(被称作R[i])是对包报头的第i个字段的正规表达式。如果对于每个i包P匹配特定规则R,P的报头的第i个领域满足正规表达式R[i]。
[0099]由规则指定的分类可以重叠。例如,一个包可以匹配几个规则。在这个情形中,当几个规则重叠时,该规则在分类器中出现的顺序确定规则相对优先级。换句话说,匹配多重规则的包属于由规则中在分类器中首先出现的规则的标识符(分类ID)标识。
[0100]本文中所公开的方法可以采用决策树,其被用于将所接收的包与规则相匹配。决策树是决策支持工具,其使用决策的树状图表或模型和其可能的后果,包括随机事件结果、资源成本和实用性。决策树通常被用于操作研究,具体地用于决策分析,以帮助识别很可能达到目标的战略。决策树的另一用途是作为用于计算条件概率的描述性装置。
[0101]如本文中所述,诸如搜索处理器的处理器可以使用决策树选择将所接收的包与分类器表中的规则匹配,以确定怎样处理接收的包。在运行时间前,可以离线编辑规则并且下载到搜索处理器中。在运行时间期间,包流过搜索处理器。该搜索处理器可以从包生成密钥,搜索匹配密钥的一个或多个规则,并且返回找到或未找到的匹配的结果。在搜索处理器搜索匹配密钥的一个或多个规则(例如,搜索处理器运行主动搜索过程)的同时,可能存在增加、删除、修改规则的需要一存在增量更新的需要。按照如本文中所公开的技术,该搜索处理器可以增加、删除或改变规则,而在性能(例如,每单位时间搜索多少包)和功能性上不影响搜索处理器搜索匹配密钥的一个或多个规则的能力。
[0102]图2A说明了包括控制面装置224和数据面装置226的系统200,该系统200从利用规则编译数据结构(RCDS)214的主动搜索过程212的角度更新了规则编译数据结构(RCDS)214。[0103]控制面装置224可以包括控制面处理器202,其可以包括编译器模块216、增量更新模块210,并可以被耦合到控制面存储器208。该控制面存储器208可以包括二元树218、内务管理树220、和变化列表222。该编译器模块216可以被配置为接收规则文件230,并且被配置为将所接收的规则文件编译为决策树,诸如二元树218 (例如,二元数据结构)。
[0104]图2B是说明将规则载入存储器结构的编译器模块216的实例实施例的方框图。该编译器模块216接收规则组230。该编译器生成编译规则的二元格式(218)。编译规则的二元格式(218)包括树282、桶284和规则286。该树282包括节点288a_d、叶片节点290a_b和根节点292。树282的每个叶片节点290a-b指向一组桶284的一个。
[0105]各桶是数据结构,其可以包括一个或多个桶条目。桶条目可以是规则、到规则的索弓丨、指向规则的指针、指向规则组的指针、或指向另一个桶的指针。桶可以包括条目,其包括上述任何组合。例如,桶可以具有作为指向规则的指针的一个条目和作为指向规则组的指针的一个条目等等。
[0106]每个桶都可以包括桶条目,其可以含有规则或块指针296。该规则286可以包括规则294的块。(规则的)块294能够为连续组的规则、或者遍及存储器分散的一组规则,这些规则由多个指针组织或者通过重新收集分散的块294 (例如,使用散列函数)。
[0107]该二元树218可以通过接口 232被下载到数据面装置206。该接口 232可以是快速外围部件互连(PCIe)接口、智能接口控制器(I2C)接口、或本领域技术人员可以已知的任何其他适当接口。
[0108]该数据面装置可以包括包处理模块234,其包括被耦合到数据面存储器236的数据面处理器204。该包处理模块可以被耦合到分类器模块206,分类器模块206也可以包括在数据面一起226中。该分类器模块206可以包括搜索处理器238,其可以被耦合到搜索处理器存储器240。该数据面处理器204可以由接口耦合到搜索处理器238,该接口诸如因特雷根接口、或本领域技术人员可以已知的任何其他适当接口。
[0109]该二元树218可以在接口 242上被下载到分类器模块206,并且被存储为规则编译数据结构(RCDS) 214,其可以被包括在搜索处理器存储器214中。替代地,该二元树218可以在接口 244上被下载到搜索处理器238,并且被存储为规则编译数据结构(RCDS) 214。该接口 244可以是智能接口控制器(I2C)接口、或本领域技术人员可以已知的任何其他适
当接口。
[0110]增量更新模块210可以接收规则或规则操作,用于为规则编译数据结构(RCDS)增力口、删除或修改规则。该增量更新模块210可以使用二元树218和内务管理树220以建立变化列表222,用于原子地更新规则编译数据结构214。该内务管理树220可以是规则编译数据结构(RCDS) 214包括树的附加信息的增大表示,以便为树确定一个或多个更新。
[0111]该内务管理树220可以包括并维持用于树中的每个规则的信息,诸如覆盖列表。覆盖列表可以包括由规则覆盖或者因为较高优先级规则不被增加到树的规则组。被覆盖的规则是“无用”规则,因为其不匹配。通过为每个规则维持覆盖列表,该增量更新模块210可以确定什么时候增加或删除规则。例如,如果规则将被删除,那么增量更新模块210可以确定增加先前未增加的一个或多个规则,因为其被现在删除的规则所覆盖。如果该覆盖规则被删除,那么先前的“无用”规则现在可能是有用的,因为存在其被匹配上的可能性。覆盖列表是可以被包括并维持在内务管理树中的规则信息的一个实例,也可以包括其他规则信息,以便帮助增量更新确定树更新。
[0112]该变化列表可以指定一个或多个命令用于原子地更新在搜索处理器存储器240中存储的规则编译数据结构(RCDS)214。另一方面,可能的是因为编译器模块216还未编译二元树218而未存储规则编译数据结构(RCDS)214。在这种情形中,增量更新模块210可以建立变化列表222,其建立规则编译数据结构(RCDS)214。该变化列表222可以在接口 232上被传递到数据面装置206,然后在接口 242上被传递到搜索处理器238。替代地,该变化列表222可以在接口 244上被传递到搜索处理器238。该规则编译数据结构214可以由主动搜索过程212用于将所接收的包246分类。
[0113]该包处理模块234可以被配置为传输包252并接收包246。该数据面处理器204可以将查找要求248发送到搜索处理器238,并且从搜索处理器238接收结果250。该搜索处理器238可以被配置为通过利用规则编译数据结构(RCDS)214找到匹配包的一个或多个规则(匹配规则)。例如,包可以被分解为部分,诸如报头、负荷量、和尾部。包的报头(或包报头)可以进一步被分解为字段。。该搜索处理器238可以被配置为找到匹配所接收的包的一个或多个部分的一个或多个规则。
[0114]该查找要求248可以包括包报头和组标识符(GID)。该GID可以为整体定义/描述表(⑶T)中的条目提供索引。每个⑶T条目可以包括η个表标识符(TID)、包报头索引(PHIDX)和密钥格式表索引(KFTIDX)。每个TID可以为树位置表(TLT)中的条目提供索引。每个TLT条目可识别查找引擎(例如,搜索处理器),以寻找一个或多个匹配规则。以这种方式,每个TID可以指定谁将寻找一个或多个匹配规则和在哪寻找一个或多个匹配规则。
[0115]每个表标识符(TID)也可以为树访问表(TAT)中的条目提供索引。TAT可以被用于这样的背景中,其中在超级群中聚集在一起的许多查找引擎寻找一个或多个匹配规则。每个TAT条目可以在存储器中提供被称作规则表或树的许多规则(或指向规则的指针)的集合的初始地址。术语规则表或规则树(或简单地表或树)遍及本公开可互换使用。TID识别其中寻找一个或多个匹配规则的那个规则集合或规则组,诸如规则编译数据结构214,。
[0116]该包报头索引(PHIDX)可以为包报头表(PHT)中的条目提供索引。PHT中的每个条目可以描述怎样从包报头中提取η个数目的密钥。该密钥格式表索引(KFTIDX)可以为密钥格式表(KFT)中的条目提供索引。KFT中的每个条目可以提供指令,用于从η个数目的密钥的每个提取一个或多个字段(例如,包报头的部分),这些字段是从包报头提取的。
[0117]每个所提取的字段与每个TID—起可以用于寻找规则子组,所有这些都是从查找要求导出的。每个子组包括可以有可能匹配每个所提取字段的规则。每个子组的每个规则可以对着所提取字段比较。匹配的规则可以在答复(例如,查找答复)中提供作为结果250。
[0118]如上所述该查找要求及其列举阶段被提供以仅仅为了展示概念。这些概念可以以许多方式实施。例如,按照本发明的实例实施例,这些概念可以由搜索处理器实施,诸如搜索处理器212。
[0119]图3示出了实例搜索处理器300的架构,其被提供以用来找到与用于包分类的包的一个或多个部分匹配的一个或多个规则,这可以被称作“规则处理”。除了其他部件外,该处理器包括接口 302 (例如因特雷肯LA接口),以从主机(例如,数据面处理器204)接收请求并且将答复发送给主机;查找前端(LUF) 304a-b,以处理、计划、并命令请求和答复;查找引擎(LUE) 306a-h,以寻找规则、给定请求,其匹配用于包分类的匹配密钥;存储器沃克聚合器MWA308和存储器区块控制器(MBC) 310a-b,以协调位于处理器外部的存储器(未示出)的读取和写出;和桶后处理器(BPP) 312a-b,以寻找规则,这些规则被存储在位于处理器外部的存储器(未示出)中,这些规则匹配用于包分类的密钥。
[0120]如图3所示,LUE与片上存储器314a_h相关联。在图3中也示出,多个LUE306a_h和其关联的片上存储器314a-h与横杆装置316 —起组织为超级群SC0318。该实例搜索处理器可以具有超过一个这种超级群(例如,SC0318和SC1320)。
[0121]图4是说明搜索区块或搜索群410的实例实施例的方框图400。为了突出实例搜索处理器的工作,参考图2A,搜索群410包括片上存储器(0CM)408、树径引擎(TWE)404、桶径引擎(BWE ) 414和多个规则匹配引擎(RME ) 420a-c。0CM408将规则编译数据结构(RCDS )存储为树数据结构,桶存储数据结构和块和/或规则数据结构。在本文中,术语树和规则编译数据结构(RCDS)可互换使用。该树数据结构可以包括该桶存储数据结构和块和/或规则数据结构。
[0122]该搜索群410在TWE404从LUF304a_b (图3)接收密钥402。TWE404发出并接收到0CM408的多个树输入/输出(I/O)通路406。基于密钥402,该TWE404使树从根节点行走到可能的叶片节点。如果TWE404未发现适当的叶片节点,那么TWE404发出非匹配412(例如,非匹配)。然后,如果TWE404发现适当的叶片节点,那么叶片节点能够指示指向桶的指针410。TWE404为BWE414提供指向桶的指针410。BWE414通过将I/O通路416发出到0CM408访问0CM408。该桶I/O通路416为BWE414取回指向块的至少一个指针418。BWE414将指向块的指针418提供到多个RME420a-c的一个。选定的RME420a_C的一个也接收密钥402。多个RME420a-c的每个都被配置为使用指向块的指针418从OCM中的块下载适当规则以分析密钥402,来发出规则和/或块I/O通路424给0CM408。然后,RME420a_C使用从0CM408访问的规则来分析密钥,并且对应于密钥是否由0CM408中存储的树和桶指示的匹配规则或块,来发出答复或非匹配422a-c。
[0123]已经提供搜索处理器的综述及其查找请求的执行方式(参考图1),现在描述用于规则编译数据结构(RCDS)214的增量更新的实施例。如上所述,该搜索处理器应该增加、删除或改变规则,并且按照性能(例如,每单位时间搜索多少包)和功能性两者,不影响搜索处理器搜索一个或多个匹配密钥的规则。
[0124]图5A是按照一个实施例的方法500的流程图,其开始(502)并可以为规则编译数据结构(RCDS)接收增量更新。该规则编译数据结构(RCDS)可以表示用于包分类的规则组。从主动搜索过程利用规则编译数据结构(RCDS) (506)和结尾(508)的角度,该规则编译数据结构(RCDS)可以通过主动搜索过程利用而用于包分类,并且基于所接收的增量更新而原子地更新。
[0125]图5B是按照一个实施例表示规则编译数据结构(RCDS)的方法520的流程图。该规则编译数据结构(RCDS)可以被表示为规则组的树,该树可以是包括一个或多个节点和一个或多个叶片的二元数据结构(524)。一个或多个节点的至少一个可以被表示为母节点,并且被链接到一个或多个子点,该一个或多个子点可以是节点或叶片(526)。该母节点可以通过将母节点指向包括一个或多个子点的兄弟列表,而被链接到一个或多个子点。该树的节点可以被链接到该树的一个或多个节点和一个或多个叶片(528)。该树的叶片可以被链接到一个或多个桶,每个桶都可以表示规则组的子组,每个桶都可以包括对应于规则组的子组的一个或多个桶条目。该桶条目可以通过提高或降低规则优先级来排序。存储规则组可以被存储在规则表中,规则表内的规则是有序或无序的(532)并且该方法结束(534)。
[0126]关于功能性,在搜索处理器执行搜索的同时,搜索处理器应该发现在增加、删除或者修改规则“之前”或“之后”的规则(或规则表)的状态。该搜索处理器不应该发现规则的状态处于将在增加、删除或修改规则“之前”和“之后”之间的一些中间状态。例如,情形不应为,在搜索时,搜索处理器发现有规则在某些时间因为规则更新而匹配密钥。如上所述,在不影响功能性或性能的情况下规则的添加、删除或修改被认为是“原子”更新、或“原子地”更新。
[0127]执行原子更新(或原子地更新)的挑战是任何规则的增加、删除或修改可以进行超过一个更新而完成。一些规则不能在单个更新中增加、删除或修改(例如,通过简单地改变规则中的比特,规则不能被增加、删除或修改)。
[0128]图6A说明了按照一个实施例用于原子更新(600)的方法的流程图。该方法开始(602)。该规则编译数据结构(RCDS)的原子更新可以包括将规则编译数据结构(RCDS)的状态限制于先前状态和后来状态。先前状态为接收用于规则编译数据结构(RCDS)的增量更新之前该规则编译数据结构(RCDS)的状态(604)。该规则编译数据结构(RCDS)可以由主动搜索过程利用(606),并且可以接收增量更新(608)。可以基于所接收的增量更新,完成该系列一个或多个修改(610)。可以预先形成规则编译数据结构(RCDS)的一个更新(612)。后来状态为已经完成(614)对规则编译数据结构(RCDS)的一系列一个或多个修改之后该规则编译数据结构(RCDS)的状态。可以对正在搜索的主动搜索过程而言可见的(基于对正在搜索的规则编译数据结构(RCDS)执行一个更新)做出一系列的一个或多个修改。该方法可以结束(618)。
[0129]根据本文中所公开的技术,从搜索处理器执行主动搜索的角度,增加、删除和修改规则似乎花费一个更新。该规则编译数据结构(RCDS)、或规则的树或树,代表规则组。该树是具有节点和叶片的二元数据结构。树的每个叶片指向规则的子组,被称作规则的桶、或桶。每个桶代表规则的子组。每个桶都是数据结构(例如,阵列),其含有规则、指向规则的指针、指向规则的块的指针、或其任何组合,这些可以被存储在规则表中。桶内的规则(或指向规则的指针)按优先级排序(例如,以优先级提高或降低)。规则表是含有规则的数据结构(例如,阵列)。该规则表内的规则可以有序或无序。
[0130]除了其他内容以外,规则具有优先级和一个或多个字段。以这种方式,修改规则包括修改优先级和/或一个或多个字段。为了描述修改规则的优先级,根据一个实施例提供下列实例。
[0131]网络路由器可以维持被称作为“白列表”中的规则,用于允许来自特定网络的流量。这白列表也可以包括用于从全部网络放下流量的规则,被称作“默认路由器”或“默认规则”。该规则可以按优先级排序,以便该路由器首先对着最高优先级规则比较流量,并且如果没有发现匹配,那么接着对着次高级优先级规则比较流量。该路由器可以继续比较、沿规则列表向下进行,直到发现匹配或者直到路由器到达最低优先级规则,在这个情形中,流量放下在该省缺路径中。
[0132]这白列表可以妥协,并且路由器可以允许冒犯流量。与经历每个规则发现允许冒犯流量(其可以是费时的)的规则相反,路由器的操作人员或管理人员可以通过将默认路径的优先级从最低变为最高优先级,而“重新按优先级排序”该规则。给定默认路径最高优先级停止了包括冒犯流量的全部流量。
[0133]根据一个实施例,修改规则的优先级包括确定改变规则的优先级是否与另一个规则的优先级冲突或重叠。使用上面的白列表实例,假定最高的优先级规则具有O的优先级并且不存在高于O的优先级。如果默认路径的优先级被改变为0,那么存在冲突。在有冲突优先级的情形,如前所述,删除规则,然后如上所述增加规则。在没有冲突优先级的情形中(例如,最高优先级规则具有I的优先级,并且默认路径的优先级被转换为0),该规则的优先级被修改,而不删除和增加规则。为了描述修改规则的字段,根据一个实施例提供下列实例。
[0134]图6B说明了具有“η”个字段的规则,“η”个字段能够由“η”维图表表示,其中每个字段由维表示。例如,图6Β将两个规则Rl和R2示为方框。在图6Β的实例说明中,每个规则具有两个字段X和Y,这些在图6Β中表示为维X和维Y。沿着维X的边代表用于字段X的值(或前缀)的范围。例如,如图6Β中所示,沿着维X表示R2的方框的边表示15-30的范围的字段X。同样,沿着维Y的边代表用于字段Y的值(或前缀)的范围。例如,如图6Β中所示,沿着维Y表示R2的方框的边表示20-40的范围的字段Y。图6Β如所示,其图表可以通过用“切割线” “切割”含有Rl和R2的规则空间而被表示为树,其具有节点和叶片。
[0135]图6C示出了由切割规则空间得到的树,所述规则空间包括如图6Β中所示的Rl和R2。该树具有根节点(RN)、节点(N)、和叶片(L1、L2和L3)。N指向表示规则Rl和R2的叶片。叶片LI指向含有规则Rl的桶;叶片L2指向含有规则Rl和R2的桶;和叶片L3指向不含有规则的桶。
[0136]图6D为该规则R2示出了从15_30变化到10_30的字段X的范围。
[0137]图6Ε示出了通过与图6Β的相同的切割线切割规则空间得到的树,所述规则空间包括Rl和“修改的”规则R2。如图6C和9e示出,修改规则R2的字段X需要将规则R2增加到由叶片LI指向的桶并增加到由叶片L3指向的桶。如上所述,通过本文中所公开的技术,该规则可以被增加到桶。
[0138]图6F为该规则R2示出了从20_40变化到30_40的字段Y的范围。
[0139]图6G示出了用与图6B的相同的切割线切割规则空间得到的树,所述规则空间包括Rl和“修改的”规则R2。如图6C和6E示出,修改规则R2的字段Y需要从由叶片L2指向的桶删除规则R2。如上所述,通过本文中所公开的技术,该规则可以从桶删除。
[0140]图6H说明了按照一个实施例用于修改规则的方法630的流程图。该方法通过接收用于规则编译数据结构(RCDS)的增量更新开始(632)。如果增量更新是增加规则操作(636),那么根据本文中所示的实施例,新的规则可以原子地增加到规则编译数据结构(RCDSX638),并且方法结束(662)。如果增量更新是删除规则操作(640),那么根据本文中所示的实施例,新的规则可以原子地从规则编译数据结构(RCDS)删除(638),并且方法结束(662)。可以进行检查,以确定增量更新是否是改变规则操作(644)。修改规则可以包括下列至少一项:修改规则的优先级或修改规则的至少一个字段。
[0141]如果该规则将被修改,可以进行检查,以确定增量更新是否将被修改(646)。如果优先级将被修改,那么可以进行检查,以基于与该规则和一个或多个规则的当前优先级排序不一致的规则的优先级变化,识别优先级适配冲突(648)。如果没有识别该优先级适配冲突,那么规则的优先级可以原子地修改(658),并且方法结束(662)。如果识别出该优先级适配冲突,那么规则的优先级和另一个规则的优先级可以原子地修改(656),并且方法结束(662)。如果该优先级没有修改,那么可以进行检查,以确定规则的至少一个字段是否将被修改(650)。如果没有,该方法结束(662)。如果至少一个字段将被修改,那么可以进行确定,用于识别需要被增加或删除的一个或多个规则(652)。在一些情形中,修改规则的字段可以涉及修改字段而未增加或删除规则。可以进行检查,以确定另一个字段是否正在被修改(654),并且迭代以识别需要被增加或删除的一个或多个规则(652)。如果没有更多字段将被修改,那么所确定的一个或多个规则可以被增加或删除,或者增加或删除所确定的一个或多个规则是原子的(660),并且该方法结束(662)。
[0142]规则可以被增加到桶,直到达到上限。将能够被增加到桶的规则的数目封顶避免了将树的二元搜索制成桶的线性搜索。当达到上限时,能够这样说,桶中不存在能增加规则的“空间”。当将规则增加到按照空间和优先级两者“适合”的桶时,该规则仅被简单地增加到桶的末尾。该规则及其优先级被附加到规则表。规则可以包括它的优先级。
[0143]通过包括规则优先级,其可以不需要在存储器中慢慢移动(移动)规则,以便实现具体的优先级顺序。根据一个实施例,相反,规则的优先级可以被更新。规则优先级可以被分配在区块中。孔(例如,优先级差)可以存在与桶的规则之间。可以基于确定存在的孔来确定优先级适配。如果规则的更优先级适配在优先级孔中,那么其他规则可以不需要将其优先级调整。另外,如果该规则没有争夺匹配,那么桶中包括的规则(经由如本文中所公开的指针直接或间接地)可以具有相同优先级。即使规则的优先级正被修改为与桶中另一个规则相同,也可以确定优先级适配。
[0144]图7是增加可以适合桶的规则的流程图700。该方法开始(702),并且从一个或多个桶中识别包括新的规则的目标桶(704)。进行检查以确定是否存在空间适配(706)。空间可以基于用于桶中可以包括的桶条目的数目的可调整阈值。如果存在空间适配,那么进行检查以确定是否存在优先级适配(708)。如果存在空间适配和优先级适配,那么该新的规则可以被附加到目标桶的结尾。将新的规则附加给目标桶的结尾算花费一个更新(710)。如果不存在空间适配或优先级适配,那么可以确定一系列的一个或多个修改(712),并且方法结束(714)。
[0145]例如,根据一个实施例,当将规则增加到不适合优先级法则(例如,将规则增加到桶的结尾导致不正确的优先权顺序)的桶时,建立“新的”桶。该新桶可以包括来自“旧的”桶的规则和以正确优先级顺序增加的新的规则。从树(叶片)到旧的桶的链接可以用从树到新桶的新的链接替换。在一个更新中完成建立到新桶的这个新的链接(其为增加新桶的一个部分),以免影响性能或正在树上执行的任何主动搜索。
[0146]图8A是如果将规则增加到桶不适合优先级法则,那么按照一个实施例确定一个或多个修改的系列的流程图。该方法开始(800)开始(802),并且从一个或多个桶中识别包括新的规则的目标桶(804)。可以针对新的规则是否适合优先级法则进行检查(816)。如果新的规则不适合,那么可以基于确定与新的规则关联的优先级与目标桶中的规则的优先级排序不一致,建立新桶(806)。该主动搜索过程不受所创建的新桶影响。目标桶的规则组可以被包括在新桶中(808)。可以基于提高或降低优先级顺序来调整该规则组和新的规则的顺序(810)。树中的叶片的链接可以被更新以将叶片指向新桶,该链接修改算花费一个更新(812),并且方法结束(814)。
[0147]图8B说明了叶片822指向826桶824的树820。该(旧的)桶包括(按照优先级降低顺序的)规则Rl、R5和R7。
[0148]图SC示出了根据一个实施例为了增加优先级比另一个规则R7834更高的规则R2832,建立新桶836。该新桶836包括按照优先级降低顺序的规则Rl、R2、R5和R7。在一个更新中,使叶片指向838新桶836,而不是旧的桶824。
[0149]当在桶中不存在增加规则的空间时,根据一个实施例,建立子树,该规则被增加到子树的桶,并且树的叶片被更新为指向子树。
[0150]图9A是建立子树并且原子地将新的规则增加到该树的方法的实施例的流程图(900)。该方法开始(902),并且从一个或多个桶中识别包括新的规则的目标桶(904)。针对用于新的规则的桶中的空间适配进行检查(906)。目标桶中空间不足可以基于为目标桶设定的可调节的最大规则数目来确定。.如果存在空间,该方法结束(916),并且可以根据本文中所公开的其他实施例增加规则。如果不存在空间适配,可以基于确定用于新的规则的目标桶中空间不足来建立子树,该子树可以包括一个或多个节点和叶片(908)。该主动搜索过程不受所创建的子树影响。该新的规则可以被增加到子树的一个或多个桶(910)。目标桶的一个或多个规则可以被增加到子树的一个或多个桶(912)。该子树可以通过更新将树的叶片指向子树的链接被链接到树(914)。例如,通过将叶片指向子树,可以更新具有到一个或多个桶中的目标桶的链接的叶片,因此将叶片转换为节点。该链接更新花费一个更新,并且该新的规则可以被原子地增加到树。
[0151]图9B说明了树的节点和叶片。母节点950指向包括节点和叶片的兄弟列表952(例如,子点的列表)。叶片954 (未示出)指向956具有八个规则的桶958。在一个实施例中,每个桶的规则的数目被限制为八。不存在将另一个规则(例如,第9个规则)增加到桶的空间。根据一个实施例,建立子树。
[0152]图9C说明了根据一个实施例建立新的子树960。通过将叶片指向964可以包括叶片和节点的新的兄弟列表966,叶片954可以被转换为节点。该规则可以被增加到子树960的一个或多个桶962a-b (例如,使用如本文中所公开的增加规则机制的一个)。
[0153]建立子树可以花费比一个更新更多的时间,但是其不影响搜索的性能和功能性。尽管正在建立子树,但是子树和树彼此分开并且不同。因此,该树可以仍旧被搜索,而未搜索子树。一旦建立子树,该叶片就被更新为指向子树,而不是桶,使叶片为树的节点。更新叶片(其为增加新的子树的一个部分)花费一个更新并且为原子的。因为该树在更新后包括子树,所以树的搜索包括增加的规则。
[0154]如早前描述的,树表示规则组。当将规则的新的“区域”增加到该设定(例如,切割规则)时,叶片被增加到树,或者在一些情形中,节点被增加到树。根据一个实施例,将叶片/节点增加给树包括建立节点和叶片的兄弟列表,其包括叶片/节点正被增加以及随后将母节点更新为指向兄弟列表。
[0155]图1OA是用于将新的叶片或新的节点原子地增加到树中的亲代节点的方法的一个实施例的流程图(1000)。树中的母节点被链接到当前兄弟列表;该当前兄弟列表可以包括一个或多个叶片或一个或多个节点(1004)。如果没有进行确定以将新的叶片或新的节点增加到母体,那么该方法结束(1014)。如果进行确定以增加新的叶片或新的节点并且主动搜索过程不受所建立的新的兄弟列表的影响,那么可以建立新的兄弟列表(1008)。新的叶片或新的节点可以被增加到新的兄弟列表,该新的兄弟列表可以包括当前兄弟列表(1010)。通过更新将母节点指向新的兄弟列表的母体的链接,该新的兄弟列表可以被包括在树中(1012)。该链接更新花费一个更新,并且该方法结束(1014)。
[0156]图1OB说明了母节点1050和它的子点,其为由节点1050指向1060的兄弟列表1052中布置的节点和叶片。叶片指向规则的桶1064a-c (未示出)。根据一个实施例,为了增加叶片/节点到树,能够建立具有所增加的叶片/节点的新的兄弟列表。
[0157]图1OC说明了为了将叶片/节点增加到树,按照一个实施例创建具有增加的叶片/节点的新的兄弟列表。例如,一旦建立新的兄弟列表1054,该母节点1050就被更新为指向1058新的兄弟列表,而不是指向1060旧的兄弟列表1052。新叶片1066被包括在新的兄弟列表1054中。该新的叶片1066指向规则的新桶1064d (未示出)。将该母节点1050更新为指向1058到新的兄弟列表1054花费一个更新,并且为原子的。
[0158]当首先建立规则的树(节点和叶片)和规则的桶时,这些在存储器中为毗邻的,例如其占据存储布局,在一个存储器地址开始并且在另一个存储器地址结束。随着时间过去,如上所述,增加和删除规则导致不再参考的“旧的”叶片和“旧的”桶。这在不使用的存储器的存储布局中建立“孔”或“孔洞”。该存储布局因此说是片断的。为了恢复存储布局中的这些孔或孔洞,使用整理碎片或整理碎片机理。像如上所述的增量更新机制,从搜索处理器执行主动搜索的角度,该碎片整理机构是原子的,并且看起来花费一个更新。
[0159]图1lA是根据一个实施例的碎片整理过程的流程图(1100)。根据一个实施例,碎片整理可以包括为碎片整理过程保留存储器的一些部分(例如,整理碎片区域或指派区域)。通过保留存储空间的碎片整理部分,该方法开始(1102),存储空间的碎片整理部分可以是指派的碎片整理区域,其为在存储空间的指派区域处保留的存储空间的连续部分(1104)。可以识别规则编译数据结构(RCDS)的死区(1106)。该死区可以是由至少一个未涉及的叶片、节点、桶、或兄弟列表占据的存储空间的部分。恢复该死区可以包括重新定位存储器的所使用部分,该所使用部分包括邻近被识别为指派碎片整理区域的死区定位的一个或多个节点或叶片(1110)。
[0160]新的兄弟列表可以被移动到恢复的存储空间(1112)。所恢复的存储空间可以包括被识别的死区和重新定位的存储器的所使用部分。存储器的所使用部分可以被从碎片整理区域中被重新定位到为规则编译数据结构(RCDS)保留的存储空间的结尾部分(1114),并且方法结束(1116)。可以通过恢复死区对规则编译数据结构(RCDS)进行碎片整理,主动搜索过程不受所恢复的死区的影响,因为规则编译数据结构(RCDS)被原子地碎片整理。
[0161]图1lB说明了具有三级1152a_c的树1150,每级都包括一个或多个节点1154a_f。每个节点占据存储器的单元。在树1152a的级一,存在一个节点1154a,根节点,其占据存储器的一个单元。该母节点指向1160包括四个节点(1154b)的兄弟列表1160。在树的级二,存在四个节点(1154b ),为根节点的子节点,其占据存储器的四个单元。在树的级三,存在八个节点(I 154c-f),根节点的孙节点,其占据存储器的八个单元。
[0162]图1lC说明了在树的级二处增加规则(1152b),根据一个实施例其包括建立六个节点的新的兄弟列表,其占据存储器的六个单元。该新的兄弟列表1170不能在由树的“旧的”级二(1152b)占据的存储空间中建立,因为没有足够的空间,需要存储器的六个单元,但是仅刻得到存储器的四个单元(连续存储器)有效。
[0163]存储空间1158示出连续的存储单元1154a’-f’,其对应于节点1154a_f。存储空间1156a和1156b被分派新的兄弟列表1170,并且更新节点1154a链接,以便其不再指向1157旧的兄弟列表1154b,而是改为指向1174位于存储单元1156a-b中的新的兄弟列表1170。该链接更新花费一个更新,并且是原子的。由树的“旧的”级二占据的存储空间1154b’现在未用,并且示出为“死区”的实例。
[0164]为了恢复该死区(例如,在这个实例中四个存储单元),可以通过在存储器中将死区之后的一个或多个节点死区移动到死区1154b’,作出用于新的兄弟列表(六个存储单元)的空间(即,在树1152c的级三的两个节点,其占据两个存储单元1154c’ _d’)。通过将存储单元复制到不同的位置并更新节点链接来移动节点。为移动的每个节点更新节点链接花费一个更新,并且是原子的。然后,可以通过将存储单元1154e’-f’复制到1154c’-d’,然后在一个更新中原子地更新相应链接,来移动节点1154e和1154f。通过将1156a和1156b复制到指派碎片整理区域1172,例如通过将1156a和1156b复制至Ij 1156a’和1156b’,该新的兄弟列表1170可以被移动。从1154a到新的兄弟列表1170的链接然后可以在一个更新中更新,并且是原子的。通过将1156a’和1156b’复制到存储单元1154e’-f和需要的1156a的两个节点部分,可以再次移动现在位于碎片整理的新的兄弟列表1170。通过将节点1154a链接更新为指向重新定位的新的兄弟列表1170,可以移动新的兄弟列表。因此,现在恢复了该死区并且以毗连的方式利用存储器。可选地,被移动到整理碎片区域的一个或多个节点可以被移动出整理碎片区域,到由树占据的存储布局的结尾。
[0165]根据一个实施例,删除规则可以包括使规则表中的规则无效。
[0166]图12A是说明了按照一个实施例删除规则的流程图(1200)。该方法开始(1210),并且确定规则将被删除(1212)。如果未删除规则,那么方法结束(1220)。如果该规则正被删除,那么作出确定以使该规则无效(1214)。如果该规则没有无效,那么方法结束(1220)。基于增量更新为指定规则的删除操作,原子地删除规则编译数据结构(RCDS)中的指定规贝U。通过将对应于规则的有效位设定为无效,该规则在一个更新中被无效。主动搜索过程跳过无效的指定规则(1218),并且该方法结束(1220)。
[0167]图12B示出了具有规则R1、R2、R3和R4的规则表1202。有效位1204可以与每个规则关联。将给定规则的有效位(例如,Rl)设定为(I )NVALID1206将规则识别为无效规则。当规则匹配引擎(RME)对着密钥(或其他数据)比较规则时,该RME跳过无效规则,并且有效地删除该规则。
[0168]树的叶片可以包括指向规则的桶(bPTR)的指针和桶中的规则数目(nRule)的计数器。桶中的规则数目的计数器可以被包括并维持在内务管理树220中。
[0169]图13示出了具有到桶的指针bPtrl304的叶片1302和规则计数器nRulel306。当删除(无效)来自桶的规则时,该nRule计数器1306可以递减。当该nRule计数器1306到达零时,叶片被认为具有零规则。bPtrl304可以被设定为空。
[0170]当树径引擎(TWE)行走树时,该TWE跳过桶指针被设定为空(例如,叶片指向具有零规则的桶)的叶片。通过跳过叶片,由叶片指向的桶(与叶片关联的桶)未被通过到桶行走引擎(BWE)而用于处理,并且可以通过将桶指针设定为空,删除该桶。
[0171]图14A说明了用于删除规则的实施例。图14A说明了当删除规则时,规则的两个或多个桶可以被合并为新桶。图14A示出母节点和它的子点、叶片LI和L2和节点NI和N2。子点被组织为在由母体1402指向1406的兄弟列表1404。叶片LI和L2的每个都指向5个规则(未示出)的桶1408a-b (BI和B2)。从每个桶删除规则,在每个桶中留下四个规则。
[0172]图14B示出,根据一个实施例,为了合并两个桶,包括用八个剩余规则建立桶B’ 1408c并且建立指向新桶B’ 1408c的新的叶片L’ 1410。建立包括L’的新的兄弟列表1412。该母节点1402被更新为指向1414新的兄弟列表(L’、N1、N2)1412,而不是旧的兄弟列表(L1、L2、N1、N2) 1404。更新母节点花费一个更新(其为合并桶的一个部分),并且为原子的。如后面更详细描述的,合并桶可以使一个或多个子树被重新编译。
[0173]图15是说明用于原子地从树删除指定规则的方法的流程图,其中桶的桶条目包括指定规则(1500)。该方法开始(1502),并且该桶通过叶片桶指针链接到叶片(1504)。该桶包括为指定规则的桶条目(1506)。进行检查,用于删除指定规则(1508),如果规则未被删除,那么方法结束(1516)。如果该指定规则将被删除,那么桶条目中的指定规则可以被无效(1510)。然后,可以进行检查,以确定是否桶中的全部桶条目均无效(1512)。如果该桶含有至少一个有效条目,那么方法结束(1516)。如果桶中的全部桶条目都无效,那么通过将叶片桶指针设定为空,可以更新到桶的链接(1514)。使指定规则无效并将叶片桶指针更新为空来花费一个更新。此外,如果叶片桶指针为空,那么主动搜索过程可以跳过桶。
[0174]图16是按照用于原子地从树删除指定规则的方法的另一个实施例的流程图,其中桶的桶条目包括指向指定规则的规则指针(1600)。该方法开始(1602),并且该桶通过叶片桶指针链接到叶片(1604)。该桶包括为指向指定规则的规则指针的桶条目(1606)。进行检查,用于删除指定规则(1608),如果规则未被删除,那么方法结束(1616)。如果该指定规则要被删除,那么该规则指针被设定为空(1610)。可以进行检查,以确定是否桶中的全部桶条目均无效(1612)。如果该桶含有至少一个有效条目,那么方法结束(1616)。如果桶中的全部桶条目都无效,那么通过将叶片桶指针设定为空,可以更新到桶的链接(1614)。将规则指针设定为空并且将叶片桶指针设定为空花费一个更新,其中主动搜索过程跳过空叶片桶指针并且跳过空规则指针。
[0175]图17是按照用于原子地从树删除指定规则的方法的还另一个实施例的流程图,其中桶的桶条目包括指向包括指定规则的一组一个或多个规则的规则块指针(1700)。该方法开始(1702),并且该桶通过叶片桶指针链接到叶片(1704)。该桶包括桶条目,其为指向包括指定规则的一组规则的规则块指针(1706)。进行检查,用于删除指定规则(1708)。如果该规则未被删除,那么方法结束(1720)。如果该指定规则要被删除,那么桶条目中的指定规则可以被无效(1710)。可以进行检查,以确定是否该组中的全部规则均无效(1712)。如果不是,该方法结束(1720)。如果该组中全部规则均无效,那么规则块指针可以被设定为空(1714)。可以进行检查,以确定是否桶中的全部桶条目均无效(1716)。如果该桶含有至少一个有效条目,那么方法结束(1720)。如果桶中的全部桶条目都无效,那么通过将叶片桶指针设定为空,可以更新到桶的链接(1718),并且该方法结束(1720)。使指定规则无效、将规则块指针设定为空、并且将叶片桶指针设定为空来花费一个更新。主动搜索过程跳过空叶片桶指针、空的规则块指针、无效(例如,被无效的)规则。
[0176]如上所述,在增加、删除和修改规则、节点时,可以增加、删除、分开或合并树的节点、叶片和/或桶。与当第一次编译该树时的该树相比,该树可以变为在深度和存储的意义上小于理想的。例如,树可以表示100个规则。100个规则的树可以被分为4个叶片/节点和平均结果,每个叶片/节点25个规则。如本文中实施例所述,可以删除规则,并且可以合并两个或多个桶。合并可以将叶片/节点的数目从4减少到3,并且结果平均,每叶片/节点33个规则。可以形成一个或多个子树。为了在深度和存储的意义上“改进”该树,在增量更新后,可以重新编译树的部分或子树。
[0177]根据一个实施例,重新编译子树被称为“树的适配调整”,其包括用在树的每个节点处的计数器进行的对更新数目的跟踪。例如,该内务管理树220可以包括保持该更新计数器。对于给定节点,可以从为给定节点跟踪的更新数目和由给定节点表示的规则数目确定比率。当用于给定节点的这个比率大于一值(例如可以由反馈机制预先配置或动态配置)时,可以重新编译给定节点的子树。
[0178]图18是按照一个实施例用于树的适配调整的方法的流程图(1800)。该方法开始(1802)。可以在每个节点跟踪增量更新的总数(1804)。可以确定由给定节点代表的规则数目与为给定节点跟踪的增量更新的总数的比率(1806)。可以进行检查,以确定比率是否大于阈值。如果该比率是小于或等于该阈值,那么方法结束(1816)。如果该比率大于该阈值,那么可以通过重新编译子树来调整(1810)。可以进行确定,以便为给定节点调整阈值(1812),并且可以调整阈值(1814),并且该树可以由比率和(经调整)阈值的另一个检查迭代地调整。如果该比率是小于或等于该阈值,那么方法结束(1816)。
[0179]图19A说明了用于增加规则的按照另一个实施例的增量更新(1900)。
[0180]图19B说明了用于将叶片分为节点和多个叶片的根据另一个实施例的增量更新(1902)。
[0181]图19C说明了用于将桶增加到节点的按照另一个实施例的增量更新(1904)。
[0182]图19D说明了用于重新编译子树的按照另一个实施例的增量更新(1906)。
[0183]图19E说明了用于删除规则的按照另一个实施例的增量更新(1908)。
[0184]图19F说明了用于修改规则的按照另一个实施例的增量更新(1910)。
[0185]图19G说明了用于碎片整理的按照另一个实施例的增量更新(1912)。
[0186]图20是计算机2000的内部结构的方框图,其中可以实施本发明的各种实施例。计算机2000包括系统总线2479,其中总线是一组用于在计算机或处理系统的部件之间数据传送的硬件线。总线2479本质上是共用管路,其连接计算机系统的不同元件(例如,处理器、存储磁盘、存储器、输入/输出端口、网络端口等),使得信息能够在元件之间传送。I/O装置接口 2482连到系统总线2479,I/O设备接口 2482用于将各种输入输出装置(例如,键盘、鼠标、显示器、打印机、话筒等)连接到计算机2400。网络接口 2486允许计算机2400连接到各种其他连到网络的装置。存储器2490为计算机软件指令2492a和数据2494a提供易失性存储。存储磁盘2495为计算机软件指令2492b和数据2494b提供非易失性存储。中央处理单元2484也连到系统总线2479,并且保证计算机指令的运行。
[0187]该处理器例行程序2492a_b和数据2494a_b是计算机程序产品,其包括计算机可读介质(例如,可移去存储介质,诸如一个或多个DVD-ROM、CD-ROM、磁盘、磁带等),其为本发明的系统的实施例提供至少一份软件指令。计算机程序产品2492a-b可以由本领域中众所周知的任何适当的软件安装程序安装。在另一个实施例中,至少一部分软件指令也可以通过线缆、通信和/或无线连接下载。[0188]进一步,本发明的实施例可以以各种计算机架构来实施。图20的通用计算机是用于说明的目的,而非本文公开的任何技术的限制。
[0189]尽管本发明已经特别参考其实例实施例示出并描述,但是本领域技术人员将理解,在这里可以进行各种形式和细节的变化,而不偏离由附加权利要求涵盖的本发明的保护范围。
[0190]实施例可以在硬件、处理器、软件、固件或上述任何组合中执行。实施例也可以被执行为非瞬时机器可读介质上存储的指令,其可以被读取并由一个或多个程序运行。非瞬时机器可读介质可以包括用于以由机器(例如,计算装置)可读的格式存储或传输的信息的任何机构。例如,非瞬时机器可读介质可以包括只读存储器(ROM);随机访问存储器(RAM);磁盘存储介质;光存储介质;闪速存储器装置等。进一步,固件、软件、例行程序、或指令在本文中可以被描述为运行某些动作。然而,应该理解,这些描述仅仅是为了方便起见,并且这些动作实际上由计算装置、处理器、控制器、或运行固件、软件、例行程序、指令等的其他装置引起。
[0191]如本领域技术人员将理解,本文中所公开的技术可以涵盖为系统、方法或计算机程序产品。因此,本文中所公开的技术可以采取完全硬件实施例、完全软件实施例(包括固件、常驻软件、微代码等等)或结合软件和硬件方面的实施例的形式,这些可以在本文中全部大体上被称作“单元”、“模块”或“系统”。
[0192]应该理解,方框图可以包括被不同布置或不同表示的更多或更少的元件。应该理解,实施方式可以规定区块和流程图以及说明本文中所公开方法运行的区块和流程图的数目。
【权利要求】
1.一种方法,包括: 为规则编译数据结构(RCDS)接收增量更新,所述规则编译数据结构(RCDS)表示用于包分类的规则组,所述规则编译数据结构(RCDS)通过主动搜索过程被用于包分类;和基于所述接收的增量更新,原子地更新所述规则编译数据结构(RCDS),所述规则编译数据结构(RCDS)从利用所述RCDS的所述主动搜索过程的角度被原子地更新。
2.根据权利要求1所述的方法,其中原子地更新所述规则编译数据结构(RCDS)包括:将所述规则编译数据结构(RCDS)的状态约束为先前状态和过后状态,所述先前状态是在接收用于所述RCDS的增量更新之前所述规则编译数据结构(RCDS)的状态,所述过后状态是在已经完成对所述规则编译数据结构(RCDS)的一系列一个或多个修改之后所述规则编译数据结构(RCDS)的状态,所述一系列一个或多个修改已经基于所述接收的增量更新而完成,所述一系列一个或多个修改基于对正被搜索的所述规则编译数据结构(RCDS)实行一个更新而对所述主动搜索过程可见。
3.根据权利要求1所述的方法,其中基于所述接收的增量更新来更新所述规则编译数据结构(RCDS)包括: 基于所述增量更新为增加规则操作,原子地将新的规则增加到所述规则编译数据结构(RCDS); 基于所述递增更新为删除规则操作,原子地从所述规则编译数据结构(RCDS)删除规则;基于所述增量更新为修改规则操作,原子地修改所述规则编译数据结构(RCDS)中的规则,其中修改所述 规则包括下列至少一项:修改所述规则的优先级或修改所述规则的至少 一个字段。
4.根据权利要求3所述的方法,其中修改所述规则的优先级包括: 基于所述规则的优先级的改变与所述规则和一个或多个其他规则的当前优先级排序不一致,识别优先级适配冲突; 基于未识别所述优先级适配冲突,原子地修改所述规则的优先级;和 基于识别出所述冲突,原子地修改所述规则的优先级和另一个规则的优先级。
5.根据权利要求3所述的方法,其中修改所述规则的至少一个字段包括: 确定是否需要增加或删除一个或多个规则;和 增加或删除所述一个或多个规则,其中增加或删除所述一个或多个规则是原子的。
6.根据权利要求1所述的方法,进一步包括: 基于所述增量更新是指定所述规则的删除操作,原子地使所述规则编译数据结构(RCDS)中的所述指定的规则无效,其中所述主动搜索过程跳过所述无效的指定规则。
7.根据权利要求1所述的方法,进一步包括: 将所述规则编译数据结构(RCDS)表示为所述规则组的树,所述树是包括一个或多个节点和一个或多个叶片的二进制数据结构; 将所述一个或多个节点的至少一个表示为母节点,并且将所述母节点链接到一个或多个子点,所述一个或多个子点为节点或叶片,其中将所述母节点链接到所述一个或多个子点包括将所述母节点指向兄弟列表,所述兄弟列表包括所述一个或多个子点; 将所述树的节点链接到所述树的一个或多个节点和一个或多个叶片;和将所述树的叶片链接到一个或多个桶,每个桶表示所述规则组的子组,每个桶都包括对应于所述规则组的子组的一个或多个桶条目,通过提高或降低规则优先级将桶条目排序;和 将所述规则组储存在规则表中,所述规则表内部的所述规则有序或无序。
8.根据权利要求7所述的方法,其中所述规则编译数据结构(RCDS)是性能树,所述方法进一步包括: 维持内务管理树,所述内务管理树是所述性能树的增强表示,所述内务管理树包括在所述树的每个节点处的所述规则的列表和所述规则的字段范围,其中原子地更新所述性能树还包括利用所述内务管理树,以便基于对正被搜索的所述性能树的一个更新,而进行对所述主动搜索过程可见的、所述性能树的一系列一个或多个修改。
9.根据权利要求8所述的方法,进一步包括: 建立指定所述性能树的所述一个或多个修改的变化列表。
10.根据权利要求8所述的方法,其中所述增量更新是增加、删除或修改操作,权利要求8所述的方法还包括: 包括用于所述内务管理树中的每个规则的规则覆盖列表; 基于所述覆盖列表,建立指定用于增加、删除或修改的一个或多个规则的变化列表;和 基于确定的变化列表,更新所述覆盖列表。
11.根据权利要求8所述的方法,进一步包括:· 在每个叶片中维持到所述一个或多个桶中的桶的指针和桶规则计数器,所述桶规则计数器跟踪所述桶中包括的规则的数目,基于规则被增加给所述桶使所述桶规则计数器递增,并且基于从所述桶删除规则使所述桶规则计数器递减。
12.根据权利要求8所述的方法,进一步包括: 在每个节点处跟踪增量更新的总数; 确定在给定节点处的由所述给定节点表示的规则的数目与为所述给定节点跟踪的所述增量更新的总数的比率;和 基于所述比率大于给定阈值,通过重新编译子树,来适配地调整所述性能树。
13.根据权利要求7所述的方法,其中所述增量更新包括原子地将新的规则增加到所述树,所述方法进一步包括: 将所述树的叶片分为一个或多个新的节点,并且将所述规则增加到与所述一个或多个新的节点的一个或多个叶片相关联的桶。
14.根据权利要求7所述的方法,其中每个桶是数据结构,并且所述一个或多个桶条目是规则、到规则的索引、到规则的指针、到规则组的指针、或到另一个桶的指针。
15.根据权利要求7所述的方法,其中所述增量更新包括原子地将新的规则增加到所述树,所述方法进一步包括: 从所述一个或多个桶中识别用于包括所述新的规则的目标桶;和 基于确定所述目标桶中所述新的规则空间适配和优先级适配,将所述新的规则附加到所述目标桶的结尾,其中将所述新的规则附加到所述目标桶的结尾花费一个更新。
16.根据权利要求15所述的方法,其中所述空间适配基于:在所述目标桶中的当前的规则数目小于用于所述目标桶的最大规则数目。
17.根据权利要求15所述的方法,其中所述优先级适配基于:与所述新的规则相关联的所述优先级与所述目标桶中的当前规则的优先级排序一致。
18.根据权利要求7所述的方法,其中所述增量更新包括原子地将新的规则增加到所述树,所述方法进一步包括: 从所述一个或多个桶中识别用于包括所述新的规则的目标桶; 基于确定与所述新的规则相关联的优先级与所述目标桶中的规则的优先级排序不一致,建立新桶,所述主动搜索过程不受所述建立的新桶影响; 在所述新桶中包括所述目标桶的所述规则组; 在所述新桶中包括所述新的规则; 基于提高或降低优先级顺序,调整所述规则组和所述新的规则的顺序;和更新所述树中的叶片的链接,所述叶片具有到所述一个或多个桶中的目标桶的链接,其中所述链接更新包括将所述叶片指向所述新桶,其中所述链接更新花费一个更新。
19.根据权利要求7所述的方法,其中所述增量更新包括原子地将新的规则增加到所述树,所述方法进一步包括: 从所述一个或多个桶中识别用于包括所述新的规则的目标桶; 建立新桶,所述主动搜索过程不受所述建立的新桶影响; 在所述新桶中包括所述新的规则;和 更新所述目标桶的桶条目以指向所述新桶,其中所述更新的桶条目花费一个更新。`
20.根据权利要求7所述的方法,其中所述增量更新包括原子地将新的规则增加到所述树,所述方法进一步包括: 从所述一个或多个桶中识别用于包括所述新的规则的目标桶; 基于确定在所述目标桶中对于所述新的规则的空间不足而建立子树,所述目标桶中的空间不足是基于为所述目标桶设定的最大规则数目确定的,所述子树包括一个或多个新的叶片或新的节点,所述主动搜索过程不受所述建立的子树影响; 将所述新的规则增加到所述子树的一个或多个桶; 将所述目标桶的一个或多个规则增加到所述子树的一个或多个桶;和通过更新所述树中的叶片的链接,将所述子树链接到所述树,所述叶片具有到所述一个或多个桶中的所述目标桶的链接,其中所述链接更新包括将所述叶片指向所述子树,将所述叶片转换为节点,其中所述链接更新花费一个更新。
21.根据权利要求7所述的方法,其中所述增量更新包括将新的叶片或新的节点原子地增加到所述树中的母节点,其中所述树中的母节点被链接到当前兄弟列表,所述当前兄弟列表包括一个或多个叶片或一个或多个节点,所述方法进一步包括: 建立新的兄弟列表,所述主动搜索过程不受所述建立的新的兄弟列表影响; 将所述新的叶片或所述新的节点增加到所述新的兄弟列表,所述新的兄弟列表包括所述当前兄弟列表;和 通过更新所述母体的链接以将所述母节点指向所述新的兄弟列表,而在所述树中包括所述新的兄弟列表,其中所述链接更新花费一个更新。
22.根据权利要求7所述的方法,进一步包括: 保留所述存储空间的碎片整理部分,所述存储空间的碎片整理部分是指派的碎片整理区域,所述碎片整理区域是在所述存储空间的指派区域处保留的所述存储空间的毗连部分; 识别所述RCDS的死区,所述死区是所述存储空间中由至少一个未引用的叶片、节点、桶、或兄弟列表所占据的部分;和 通过恢复所述死区,对所述规则编译数据结构(RCDS)进行碎片整理,所述主动搜索过程不受所述恢复的死区影响,所述规则编译数据结构(RCDS)被原子地碎片整理。
23.根据权利要求22所述的方法,其中恢复所述死区包括: 重新定位存储器的使用部分,所述使用部分包括位于被识别为所述指派的碎片整理区域的所述死区附近的一个或多个节点或叶片;和 将新的兄弟列表移动到恢复的存储空间,所述恢复的存储空间包括所述识别的死区和重新定位的所述存储器的使用部分。
24.根据权利要求23所述的方法,进一步包括: 将所述重新定位到所述碎片整理区域的所述存储器的使用部分移出所述碎片整理区域,到为所述RCDS保留的所述存储空间的结尾部分。
25.根据权利要求7所述的方法,其中所述增量更新包括原子地从所述树删除指定规贝U,其中桶的桶条目包括所述指定规则,所述方法进一步包括: 通过叶片桶指针将所述桶链接到叶片; 使所述桶条目中的所述指定规则无效;和· 如果所述桶中的所有桶条目均被无效,那么通过将所述叶片桶指针设定为空,来更新所述链接,其中使所述指定规则无效并且更新所述叶片桶指针为空花费一个更新,其中如果所述叶片桶指针为空,那么所述主动搜索过程跳过桶。
26.根据权利要求7所述的方法,其中所述增量更新包括原子地从所述树删除指定规贝U,其中桶的桶条目包括指向所述指定规则的规则指针,所述方法进一步包括: 通过叶片桶指针将所述桶链接到叶片; 将所述规则指针设定为空;和 如果所述桶中的所有规则指针均为空,那么通过将所述叶片桶指针设定为空,来更新所述链接,其中将所述规则指针设定为空并且将所述叶片桶指针设定为空花费一个更新,其中所述主动搜索过程跳过空的叶片桶指针并且跳过空的规则指针。
27.根据权利要求7所述的方法,其中所述增量更新包括原子地从所述树删除指定规贝U,其中桶的桶条目包括指向包括所述指定规则的一个或多个规则的组的规则块指针,所述方法进一步包括: 通过叶片桶指针将所述桶链接到叶片; 使所述指定规则无效; 如果所述一个或多个规则的组中的所有规则无效,那么将所述规则块指针设定为空;和 如果所述桶中的全部桶条目均被无效,那么通过将所述叶片桶指针设定为空,来更新所述链接,其中使所述指定规则无效、将所述规则块指针设定为空、并且将所述叶片桶指针设定为空花费一个更新,其中所述主动搜索过程跳过空的叶片桶指针、空的规则块指针、被无效的规则。
28.根据权利要求7所述的方法,其中所述增量更新包括基于从所述树删除指定规则而原子地增加一个或多个规则,所述方法进一步包括: 从所述一个或多个桶中识别用于包括所述新的规则的目标桶; 基于确定所述目标桶中对于所述新的规则的空间不足而建立子树,所述目标桶中的空间不足是基于为所述目标桶设定的最大规则数目确定的,所述子树包括一个或多个新的叶片或新的节点,所述主动搜索过程不受所述建立的子树的影响; 将所述新的规则增加到所述子树的一个或多个桶; 将所述目标桶的一个或多个规则增加到所述子树的一个或多个桶;和通过更新所述树中的叶片的链接,将所述子树链接到所述树,所述叶片具有到所述一个或多个桶中的所述目标桶的链接,其中所述链接更新包括将所述叶片指向所述子树,将所述叶片转换为节点,其中所述链接更新花费一个更新。
29.根据权利要求7所述的方法,其中所述增量更新包括基于从所述树删除指定规则而原子地增加一个或多个规则,所述方法进一步包括: 从所述一个或多个桶中识别用于包括所述新的规则的目标桶;和基于确定所述目标桶中所述新的规则空间适配和优先级适配,将所述新的规则附加到所述目标桶的结尾,其中将所述新的规则附加到所述目标桶的结尾花费一个更新。
30.根据权利要求1所述的方法,其中所述增量更新为增加规则操作、删除规则操作、或修改规则操作,并且进一步地,其中基于所述接收的增量更新来更新所述规则编译数据结构(RCDS)进一步包括: 原子地将一个或多个规则增加到所述RCDS、从所述RCDS删除一个或多个规则、修改一个或多个规则、或上述任何组合。`
31.一种装置,包括: 存储器,被配置为储存规则编译数据结构(RCDS),所述规则编译数据结构(RCDS)表示用于包分类的规则组;和 处理器,被耦合到所述存储器,所述处理器被配置为: 接收用于所述RCDS的增量更新; 执行所述规则编译数据结构(RCDS)的主动搜索,以将所接收的包分类;和基于用于所述RCDS的增量更新,从执行所述主动搜索的角度,原子地更新所述规则编译数据结构(ROTS)。
32.根据权利要求31所述的装置,进一步包括接口,其中变化列表包括所述增量更新并且所述接口被配置为接收所述变化列表。
33.根据权利要求31所述的装置,其中所述处理器是搜索处理器。
34.根据权利要求31所述的装置,其中所述规则编译数据结构(RCDS)包括编译规则组,并且更新的规则编译数据结构(RCDS)包括所述编译规则组和一个或多个被应用的增量更新,其中所述更新的规则编译数据结构(RCDS)实现与所述更新的RCDS被编译之前的版本相同的性能。
35.根据权利要求31所述的装置,其中所述处理器进一步被配置为: 将所述规则编译数据结构(RCDS)的状态约束为先前状态和过后状态,所述先前状态是在接收用于所述RCDS的增量更新之前所述规则编译数据结构(RCDS)的状态,所述过后状态是在已经完成对所述规则编译数据结构(RCDS)的一系列一个或多个修改之后所述规则编译数据结构(RCDS)的状态,所述一系列一个或多个修改已经基于所述接收的增量更新而完成,所述一系列一个或多个修改基于对正被搜索的所述规则编译数据结构(RCDS)执行一个更新而对所述主动搜索过程可见。
36.根据权利要求31所述的装置,其中所述处理器进一步被配置为: 基于所述增量更新为增加规则操作,原子地将新的规则增加到所述规则编译数据结构(RCDS); 基于所述增量更新为删除规则操作,原子地从所述规则编译数据结构(RCDS)删除规则; 基于所述增量更新为修改规则操作,原子地修改所述规则编译数据结构(RCDS)中的规贝U,其中修改所述规则包括下列至少一项:修改所述规则的优先级或修改所述规则的至少一个字段。
37.根据权利要求36所述的装置,其中优先级适配冲突基于所述规则的优先级的变化与所述规则和一个或多个其他规则的当前优先顺序不一致,其中所述处理器进一步被配置为: 基于未识别所述优先级适配冲突,原子地修改所述规则的优先级;和 基于识别出所述冲突,原子地修改所述规则的优先级和另一个规则的优先级。
38.根据权利要求36所述的装置,其中所述处理器进一步被配置为:· 增加或删除所述一个或多个规则,其中增加或删除所述一个或多个规则是原子的。
39.根据权利要求31所述的装置,其中所述处理器进一步被配置为: 基于所述增量更新是指定规则的删除操作,原子地使所述规则编译数据结构(RCDS)中的所述指定规则无效,其中所述主动搜索过程跳过所述无效的指定规则。
40.根据权利要求31所述的装置,其中所述处理器进一步被配置为: 将所述规则编译数据结构(RCDS)表示为所述规则组的树,所述树是包括一个或多个节点和一个或多个叶片的二进制数据结构; 将所述一个或多个节点的至少一个表示为母节点,并且将所述母节点链接到一个或多个子点,所述一个或多个子点为节点或叶片,其中将所述母节点链接到所述一个或多个子点包括将所述母节点指向兄弟列表,所述兄弟列表包括所述一个或多个子点; 将所述树的节点链接到所述树的一个或多个节点和一个或多个叶片;和将所述树的叶片链接到一个或多个桶,每个桶表示所述规则组的子组,每个桶都包括对应于所述规则组的子组的一个或多个桶条目,通过提高或降低规则优先级将桶条目排序;和 将所述规则组储存在规则表中,所述规则表内的所述规则有序或无序。
41.根据权利要求40所述的装置,其中所述增量更新包括原子地将新的规则增加到所述树,其中所述处理器进一步被配置为: 将所述树的叶片分为一个或多个新的节点,并且将所述规则增加到与所述一个或多个新的节点的一个或多个叶片相关联的桶。
42.根据权利要求40所述的装置,其中每个桶是数据结构,并且所述一个或多个桶条目是规则、到规则的索引、到规则的指针、到规则组的指针、或到另一个桶的指针。
43.根据权利要求40所述的装置,其中所述增量更新包括原子地将新的规则增加到所述树,其中所述处理器进一步被配置为: 基于确定所述目标桶中所述新的规则的空间适配和优先级适配,将所述新的规则附加到所述目标桶的结尾,其中将所述新的规则附加到所述目标桶的结尾花费一个更新。
44.根据权利要求43所述的装置,其中所述空间适配基于在所述目标桶中的当前的规则数目小于用于所述目标桶的最大规则数目。
45.根据权利要求43所述的装置,其中所述优先级适配基于与所述新的规则关联的所述优先级与所述目标桶中的当前规则的优先级排序一致。
46.根据权利要求40所述的装置,其中所述增量更新包括原子地将新的规则增加到所述树,其中所述处理器进一步被配置为: 基于确定与所述新的规则关联的优先级与目标桶中的规则的优先级排序不一致,而建立新桶,所述主动搜索过程不受所述建立的新桶的影响; 在所述新桶中包括所述目标桶的所述规则组; 在所述新桶中包括所述新的规则; 基于提高或降低优先级顺序,调整所述规则组和所述新的规则的顺序;和更新所述树中的叶片的链接,所述叶片具有到所述一个或多个桶中的目标桶的链接,其中所述链接更新包括将所述叶片指向所述新桶,其中所述链接更新花费一个更新。
47.根据权利要求40所述的装置,其中所述增量更新包括原子地将新的规则增加到所述树,其中所述处理器进一步被配置为: 建立新桶,所述主动搜索过程不受`所述建立的新桶的影响; 在所述新桶中包括所述新的规则;和 更新目标桶的桶条目以指向所述新桶,其中所述更新的桶条目花费一个更新。
48.根据权利要求40所述的装置,其中所述增量更新包括原子地将新的规则增加到所述树,其中所述处理器进一步被配置为: 基于确定所述目标桶中对于所述新的规则的空间不足而建立子树,所述目标桶中的空间不足是基于为所述目标桶设定的最大规则数目确定的,所述子树包括一个或多个新的叶片或新的节点,所述主动搜索过程不受所述建立的子树的影响; 将所述新的规则增加到所述子树的一个或多个桶; 将所述目标桶的一个或多个规则增加到所述子树的一个或多个桶;和通过更新所述树中的叶片的链接,将所述子树链接到所述树,所述叶片具有到所述一个或多个桶中的所述目标桶的链接,其中所述链接更新包括将所述叶片指向所述子树,将所述叶片转换为节点,其中所述链接更新花费一个更新。
49.根据权利要求40所述的装置,其中所述增量更新包括将新的叶片或新的节点原子地增加到所述树中的母节点,其中所述树中的母节点被链接到当前兄弟列表,所述当前兄弟列表包括一个或多个叶片或一个或多个节点,其中所述处理器进一步被配置为: 建立新的兄弟列表,所述主动搜索过程不受所述建立的新的兄弟列表的影响; 将所述新的叶片或所述新的节点增加到所述新的兄弟列表,所述新的兄弟列表包括所述当前兄弟列表;和 通过更新所述母体的链接以将所述母节点指向所述新的兄弟列表,而在所述树中包括所述新的兄弟列表,其中所述链接更新花费一个更新。
50.根据权利要求40所述的装置,其中所述处理器进一步被配置为: 保留所述存储空间的碎片整理部分,所述存储空间的碎片整理部分是指派的碎片整理区域,所述碎片整理区域是在所述存储空间的指派区域处保留的所述存储空间的毗连部分;和 通过恢复所述死区,对所述规则编译数据结构(RCDS)进行碎片整理,所述主动搜索过程不受所述恢复的死区的影响,所述规则编译数据结构(RCDS)被原子地碎片整理。
51.根据权利要求50所述的装置,其中所述处理器进一步被配置为: 重新定位存储器的使用部分,所述使用部分包括位于被识别为所述指派的碎片整理区域的所述死区附近的一个或多个节点或叶片;和 将新的兄弟列表移动到恢复的存储空间,所述恢复的存储空间包括所述识别的死区和重新定位的所述存储器的使用部分。
52.根据权利要求51所述的装置,其中所述处理器进一步被配置为: 将所述重新定位到所述碎片整理区域的所述存储器的使用部分移出所述碎片整理区域,到为所述RCDS保留的所述存储空间的结尾部分。
53.根据权利要求40所述的装置,其中所述增量更新包括原子地从所述树删除指定规贝U,其中桶的桶条目包括所述指定规则,其中所述处理器进一步被配置为: 通过叶片桶指针将所述桶链接到叶片; 使所述桶条目中的所述指定规则`无效;和 如果所述桶中的全部桶条目均被无效,那么通过将所述叶片桶指针设定为空,来更新所述链接,其中使所述指定规则无效并且更新所述叶片桶指针为空花费一个更新,其中如果所述叶片桶指针为空,那么所述主动搜索过程跳过桶。
54.根据权利要求40所述的装置,其中所述增量更新包括原子地从所述树删除指定规则,其中桶的桶条目包括指向所述指定规则的规则指针,其中所述处理器进一步被配置为: 通过叶片桶指针将所述桶链接到叶片; 将所述规则指针设定为空;和 如果所述桶中的全部规则指针均为空,那么通过将所述叶片桶指针设定为空,来更新所述链接,其中将所述规则指针设定为空并且将所述叶片桶指针设定为空花费一个更新,其中所述主动搜索过程跳过空叶片桶指针并且跳过空规则指针。
55.根据权利要求40所述的装置,其中所述增量更新包括原子地从所述树删除指定规贝U,其中桶的桶条目包括指向包括所述指定规则的一个或多个规则的组的规则块指针,其中所述处理器进一步被配置为: 通过叶片桶指针将所述桶链接到叶片; 使所述指定规则无效; 如果所述一个或多个规则的组中的全部规则被无效,那么将所述规则块指针设定为空;和 如果所述桶中的全部桶条目均被无效,那么通过将所述叶片桶指针设定为空,来更新所述链接,其中使所述指定规则无效、将所述规则块指针设定为空、并且将所述叶片桶指针设定为空花费一个更新,其中所述主动搜索过程跳过空叶片桶指针、空规则块指针、被无效的规则。
56.根据权利要求40所述的装置,其中所述增量更新包括基于从所述树删除指定规贝U,原子地增加一个或多个规则,其中所述处理器进一步被配置为: 基于确定所述目标桶中对于所述新的规则的空间不足而建立子树,所述目标桶中的空间不足是基于为所述目标桶设定的最大规则数目确定的,所述子树包括一个或多个新的叶片或新的节点,所述主动搜索过程不受所述建立的子树的影响; 将所述新的规则增加到所述子树的一个或多个桶; 将所述目标桶的一个或多个规则增加到所述子树的一个或多个桶;和通过更新所述树中的叶片的链接,将所述子树链接到所述树,所述叶片具有到所述一个或多个桶中的所述目标桶的链接,其中所述链接更新包括将所述叶片指向所述子树,将所述叶片转换为节点,其中所述链接更新花费一个更新。
57.根据权利要求40所述的装置,其中所述增量更新包括基于从所述树删除指定规贝U,原子地增加一个或多个规则,其中所述处理器进一步被配置为: 基于确定所述目标桶中所述新的规则的空间适配和优先级适配,将所述新的规则附加到所述目标桶的结尾,其中将所述新的规则附加到所述目标桶的结尾花费一个更新。
58.一种装置,包括: 存储器; 处理器,耦合到所述存储器,所述处理器被配置为包括增量更新模块,所述增量更新模块被配置为:· 接收增加、删除、或修改规则操作;和 在所述存储器中建立变化列表,从利用所述RCDS的主动搜索过程的角度,所述变化列表被建立以原子地更新规则编译数据结构(RCDS)。
59.根据权利要求58所述的装置,进一步包括: 接口,其中所述增量更新模块被配置为在所述接口上传递所述变化列表: 编译器模块,耦合到所述存储器,所述编译器模块被配置为接收规则组并将所述规则组编辑为二元树,并且被配置为将所述二元树存储在所述存储器中,并且被配置为将所述二元树在所述接口上传递,其中所述二元树将所述一个或多个节点的至少一个表示为母节点,并且将所述母节点链接到一个或多个子点,所述一个或多个子点为节点或叶片,其中将所述母节点链接到所述一个或多个子点包括将所述母节点指向兄弟列表,所述兄弟列表包括所述一个或多个子点,进一步地,其中所述二元树将所述树的节点链接到所述树的一个或多个节点和一个或多个叶片;和 将所述树的叶片链接到一个或多个桶。
60.根据权利要求59所述的装置,其中所述规则编译数据结构(RCDS)是性能树,所述处理器进一步被配置为: 维持内务管理树,所述内务管理树是所述性能树的增强表示,所述内务管理树包括在所述树的每个节点处的所述规则的字段范围和所述规则的列表,其中原子地更新所述性能树还包括利用所述内务管理树,以便基于对正被搜索的所述性能树的一个更新,而进行所述主动搜索过程可见的对所述性能树的一系列一个或多个修改。
61.根据权利要求59所述的装置,其中所述处理器进一步被配置为: 建立指定对所述性能树的所述一个或多个修改的变化列表。
62.根据权利要求59所述的装置,其中所述增量更新是增加、删除或修改操作,并且进一步地,其中所述处理器被进一步配置为: 包括用于所述内务管理树中的每个规则的规则覆盖列表; 基于所述覆盖列表,建立指定用于增加、删除或修改的一个或多个规则的变化列表;和 基于确定的变化列表,更新所述覆盖列表。
63.根据权利要求59所述的装置,所述处理器被进一步配置为: 在每个叶片中维持到所述一个或多个桶中的桶的指针和桶规则计数器,所述桶规则计数器跟踪所述桶中包括的规则的数目,基于规则被增加给所述桶使所述桶规则计数器递增,并且基于从所述桶删除规则使所述桶规则计数器递减。
64.根据权利要求59所述的装置,所述处理器被进一步配置为: 在每个节点处跟踪增量更新的总数; 确定在给定节点处的由所述给定节点表示的规则的数目与为所述给定节点跟踪的所述增量更新的总数的比率;和 基于所述比率大于给定阈值,通过重新编译子树来适配地调整所述性能树。
65.一种非瞬态计算机可读介质,其上编码有指令序列,所述指令序列在被处理器执行时,使所述处理器:` 为规则编译数据结构(RCDS)接收增量更新,所述规则编译数据结构(RCDS)表示用于包分类的规则组,所述规则编译数据结构(RCDS)通过主动搜索过程被用于包分类;和 基于所述接收的增量更新原子地更新所述规则编译数据结构(RCDS),所述规则编译数据结构(RCDS)从利用所述RCDS的所述主动搜索过程的角度被原子地更新。
【文档编号】H04L12/813GK103858392SQ201280048291
【公开日】2014年6月11日 申请日期:2012年8月2日 优先权日:2011年8月2日
【发明者】R·戈亚尔, K·A·布里斯, S·L·比拉 申请人:凯为公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1