使用网络处理器的高速灵活分组分类的制作方法

文档序号:15105972发布日期:2018-08-04 16:53阅读:193来源:国知局
本申请要求对2015年12月15日提交,标题为“HIGHSPEEDFLEXIBLEPACKETCLASSIFICATIONUSINGNETWORKPROCESSORS”的美国非临时专利申请号14/969834的权益和优先权,其通过引用以其整体被结合于本文中。
技术领域
本公开一般涉及网络业务处理的领域,并且更具体地说,涉及使用网络处理器的高速灵活分组分类。
背景技术
:网络处理器可用于在网络中处理分组数据。网络处理器可以是可编程的,允许其实现定制化处理。网络处理器可在各种联网装备中使用,诸如路由器、交换机、防火墙、侵入检测和预防装置、网络监视系统、和其它类型的装备。在一些实现中,网络处理器可执行分组分类。分组分类可包含将规则应用到分组以确定它们属于哪个流并判定它们应接收什么服务。分组分类通常是由网络处理器所执行的第一分组处理步骤之一。它用于进一步的联网应用,包含网络安全性和访问控制、深度分组审查、云计算需要、多媒体和业务计费(例如,它可在像IP上话音(VoIP)或IP上多媒体的对等应用中使用,包含流播实况音频/视频(A/V)数据或实时交互式A/V数据、视频会话即时消息通讯、在线游戏)等。附图说明图1图示根据某些实施例,用于分类分组的系统的组件的框图。图2图示根据某些实施例,可由图1的网络装置来执行的规则搜索的框图。图3图示根据某些实施例,用于使用串行操作来选择规则的示例流程图。图4图示根据某些实施例,用于使用并行操作来选择规则的示例流程图。图5图示根据某些实施例,用于使用串行和并行操作来选择规则的示例流程图。图6图示根据某些实施例,用于使用单个定索引函数来从表格识别规则的示例流程图。图7图示根据某些实施例,用于使用多个定索引函数来从表格识别规则的示例流程图。图8图示根据某些实施例,用于使用单个定索引函数和索引的表格来从表格识别规则的示例流程图。图9图示根据某些实施例,用于使用多个定索引函数和索引的表格来从表格识别规则的示例流程图。图10图示根据某些实施例,用于使用单个定索引函数和索引的二维表格来从表格识别规则的示例流程图。图11图示根据某些实施例,用于使用多个定索引函数和索引的二维表格来从表格识别规则的示例流程图。图12图示根据某些实施例,用于使用单个定索引函数和初步过滤来从表格识别规则的示例流程图。图13图示根据某些实施例,用于使用多个定索引函数和初步过滤来从表格识别规则的示例流程图。图14图示根据某些实施例,用于使用单个定索引函数、索引的表格和初步过滤来从表格识别规则的示例流程图。图15图示根据某些实施例,用于使用多个定索引函数、索引的表格和初步过滤来从表格识别规则的示例流程图。图16图示根据某些实施例,图示了可同时匹配相同分组的规则对的示例图。图17图示根据某些实施例,使用级别链(chainoflevels)的基于掩码的索引函数的框图。图18图示根据某些实施例,使用二叉树的基于掩码的索引函数的框图。图19图示根据某些实施例,用于分类分组的示例方法。各种图中的相似标号和标示指示相似元素。具体实施方式图1图示根据某些实施例,用于分类分组的系统100的组件的框图。系统100包含经由网络106A和106B耦合到网络节点102A和102B的网络装置104。网络装置104包含中央处理单元(CPU)108、存储器110、逻辑112和通信接口114。在本公开的各种实施例中,网络装置104可实现可配置的高性能分组分类方法。这些方法可利用快速智能搜索算法和灵活的架构以满足由现代高速链路施加的性能约束,并且消除或减轻基于三元内容可寻址存储器(TCAM)或基于分解的算法的广泛使用的基于硬件的分组分类技术和基于软件的分组分类技术(诸如基于判定树的算法、基于树的算法或其它基于软件的技术)的缺点。在分组分类期间,检查进入分组的一个或多个报头字段,以查找预定义规则集中(称为规则/策略数据库、过滤器集、或分类器)的匹配。每个规则可具有带有关联值的相同预设数量的字段、用于在多个匹配之间进行区分的优先级、和如果(基于优先级或其它搜索准则)匹配和选择了规则便要采取的动作。不同字段可要求各种类型的匹配,诸如精确匹配、前缀匹配、范围匹配或其它适合类型的匹配。在分组匹配一些规则时,它将由联网处理器根据指派到最高优先级匹配规则的动作来进一步处理。在一些实施例中,可执行多匹配分组分类,其中可报告所有匹配规则(与仅最佳匹配规则相反)。任何适合的动作可由规则来指定。例如,规则可指示应拒绝(例如,丢弃)、接受(例如,以正常方式转发)、重定向(例如,转发到分类设备或关联设备的具体端口)的分组,或者应对分组执行的另一适合动作(例如,可修改分组字段)。作为分组分类的示例,考虑带有以下值的这5个字段:(152.163.17.0,152.163.80.0,80,4245,UDP)的进入分组和带有3个规则的数据库(表格1中示出)的5字段分组分类器。此分组将匹配规则R2和R3。在最佳匹配搜索设置(如果规则R2具有比R3更高的优先级)中,搜索的输出将是带有对应动作接受(ACCEPT)的规则R2。也就是说,分组将被网络装置104接受和处理。规则数据库可在大小(例如,一些规则数据库可具有超过100000个规则)和字段的数量(典型分组分类器可包括五到十五个字段)方面有范围变化。规则数据库可用于实现各种类型的功能,包含例如接入控制列表(ACL);防火墙(FW)、IP链(IPC)、用于因特网服务提供商(ISP)路由器和/或交换机的过滤器、等等。规则数据库可还支持诸如网络侵入检测系统(NIDS)、虚拟专用网络(VPN)、防火墙和边缘路由器中的网络地址转换(NAT)和各种其它应用的附加应用。本公开的各种实施例包含分类技术,其中规则数据库被划分成规则的多个数据库(例如,表格),这些数据库被独立搜索以从每个表格识别单个候选规则或有限数量的候选规则(或未识别出候选规则的指示)。仅检查所识别的候选规则以确定哪个规则是对于分组的最佳匹配(即,匹配分组并且具有匹配分组的规则的最高优先级)。如果小部分的规则数据库未良好适配于表格之一,则那些规则可被单独处理(例如,经由小的CAM)。此类实施例可避免由基于树的分类方案所要求的有序(逐步)链判定和如由基于(T)CAM的解决方案所要求的那样来检查大量规则两者。各种实施例可提供各种各样的技术优点,诸如有确定性运行时间的快速搜索操作、低等待时间设计(例如,对于基于静态随机存取存储器(SRAM)的解决方案)、规则数据库的快速编译、灵活和可配置的架构、对在单个引擎中使用的不同规则数据库的支持、功率节省、对于超高性能(例如,低TCAM空间要求和低处理开销)的易伸缩性、支持多匹配分类而能够实现与搜索命令关联的各种选项(例如,查找所有匹配的规则而不是仅最高优先级匹配的规则的选项,或在规则数据库的一个或多个部分中执行搜索的选项)、规则中字段的长度和数量的运行时间配置(包含范围(端口)字段)、搜索和编辑(插入/删除)命令的交错流、以及不用中断搜索操作的规则编辑操作。网络装置104可包含用于执行任何适合的联网功能的逻辑。例如,网络装置104可以是路由器、交换机、防火墙、侵入检测和预防装置、会话边界控制器、网络监视系统、和/或可操作以分类进入分组的其它适合装置。网络装置可包含一个或多个CPU108以提供网络装置功能性。CPU108可包含任何处理器或处理装置,诸如微处理器、嵌入式处理器、数字信号处理器(DSP)、应用处理器、协处理器、芯片上系统(SoC)、或用于执行代码的其它装置。在特定实施例中,CPU108是带有对联网应用适配的特征集的网络处理器。例如,网络处理器可以是带有用于联网应用的优化的能力(例如,特殊化指令集和/或定制化架构)的软件可编程装置,诸如模式匹配、关键查找、数据比特字段操纵、队列管理、和/或其它功能。CPU108可包含任何适合数量的处理元素(例如,核),其可包含不对称处理元素或对称处理元素。在一个实施例中,处理元素指用于支持软件线程的硬件或逻辑。硬件处理元素的示例包含:线程单元、线程槽、线程、处理单元、上下文、上下文单元、逻辑上处理器、硬件线程、核、和/或有能力保存处理器的状态(诸如执行状态或架构状态)的任何其它元素。换而言之,在一个实施例中,处理元素指的是有能力独立地与代码(诸如软件线程、操作系统、应用、或其它代码)关联的任何硬件。物理处理器(或处理器插座(processorsocket))一般指的是集成电路,其潜在地包含任何数量的其它处理元素,诸如核或硬件线程。CPU108可各自包括任何适合数量的处理器核。核可相互耦合、耦合到存储器110、耦合到逻辑112、和/或耦合到通信接口114。在具体实施例中,CPU108在永久地或可移除地耦合到网络装置104的插座内实施。核可指的是位于集成电路上的逻辑,其有能力维持独立架构状态,其中每个独立维持的架构状态与至少一些专用执行资源关联。硬件线程可指的是位于集成电路上有能力维持独立架构状态的任何逻辑,其中独立维持的架构状态共享对执行资源的访问。如能够看到的,在某些资源被共享并且其它资源专用于架构状态时,在硬件线程与核的命名之间的界线重叠。通常还有,核和硬件线程被操作系统视为各个逻辑上处理器,其中操作系统能够在每个逻辑上处理器上单独调度操作。在各种实施例中,核可包含一个或多个乱序处理器核或一个或多个有序处理器核。然而,核可从任何类型的核中单独选择,如原生核(nativecore)、软件管理的核、适于执行原生指令集架构(ISA)的核、适于执行转换的ISA的核、协同设计的核、或其它已知核。在异质核环境(即,不对称核)中,诸如二进制转换的某种转换形式可用于调度或执行一个或两个核上的代码。核可包含耦合到获取单元以解码所获取的元素的解码模块。在一个实施例中,获取逻辑包含与核的线程槽关联的各个定序器。通常,核与第一ISA关联,其定义/指定在核上可执行的指令。作为第一ISA的一部分的机器代码指令经常包含引用/指定要执行的指令或操作的指令的一部分(称为操作码)。解码逻辑可包含从其操作码识别这些指令并且在流水线中传递所解码的指令以便如由第一ISA所定义那样进行处理的电路系统。例如,在一个实施例中,作为解码器包含设计成或适于识别诸如事务指令的特定指令的逻辑。由于解码器所进行的识别,核的架构采取特定的预定义动作来执行与适当指令关联的任务。重要的是注意到,可响应于单个或多个指令来执行本文中描述的任何任务、块、操作和方法;所述指令中的一些可以是新指令或旧指令。在一个实施例中,核的解码器识别相同ISA(或其子集)。备选的是,在异质核环境中,一个或多个核的解码器可识别第二ISA(第一ISA的子集或有区别的ISA)。在各种实施例中,核可还包含一个或多个算术逻辑单元(ALU)、浮点单元(FPU)、高速缓存、指令流水线、中断处置硬件、寄存器、或促进核的操作的其它适合的硬件。存储器110可包括任何形式的易失性或非易失性存储器,包含但不限于磁介质(例如,一个或多个磁带驱动器)、光介质、随机存取存储器(RAM)、内容可寻址存储器(CAM)、只读存储器(ROM)、闪速存储器、可移除介质、或任何其它适合的一个或多个本地或远程存储器组件。存储器110可由平台102用于短期、中期和/或长期存储。存储器110可存储由网络装置104利用的任何适合的数据或信息,包含在计算机可读介质中嵌入的软件和/或在硬件中结合或以其它方式存储(例如,固件)的编码的逻辑。存储器110可存储由CPU108的核使用的数据。在一些实施例中,存储器110可还包括用于指令116的存储装置,指令116可由CPU108的核或其它处理元素(例如,逻辑112)执行以提供网络装置104的功能性。存储器110可还存储由CPU108或逻辑112执行的各种运算和确定的结果和/或中间结果。在描绘的实施例中,存储器110可存储配置数据118,配置数据118可存储用于实现本文中描述的实施例的任何适合的数据。例如,配置数据118可包括可用存储器模块的属性(例如,大小、类型等)以便在编译期间用于确定如何在各种规则数据库之中划分规则。在各种实施例中,存储器110可包括通过存储器控制器(其可在CPU108外部或与其集成)耦合到CPU的系统存储器的一个或多个模块。在各种实施例中,存储器110的一个或多个具体模块可专用于具体CPU108或另一处理装置,或者可跨多个CPU108或其它处理装置被共享。存储器110可包括任何适合数量的离散存储器模块(例如,物理存储器单元各自具有其自己的电连接器集以将存储器模块耦合到网络装置104的其它组件)。在描绘的实施例中,存储器110包含配置成存储多个规则数据库124的多个RAM存储器模块120。规则数据库124可包括规则和与所述规则关联的其它数据(例如,在以下实施例中描述的任何数据,诸如定索引函数、定索引表格的数据、笼数据(cagedata)或其它适合数据)。存储器110也包含至少一个CAM存储器模块122,其配置成存储包含未放置在规则数据库124中的规则的规则数据库126。逻辑112可用于执行在本文中描述的流程和方法中公开的任何适合的步骤。“逻辑”(例如,如在本申请中在逻辑112中或在对逻辑的其它引用中所找到的)可指用于执行一个或多个功能的硬件、固件、软件和/或每个的组合。在各种实施例中,逻辑可包含可操作以执行软件指令的微处理器或其它处理元素、诸如专用集成电路(ASIC)的离散逻辑、诸如现场可编程门阵列(FPGA)的编程的逻辑装置、含有指令的存储器装置、逻辑装置的组合(例如,如会在印刷电路板上发现的)或其它适合的硬件和/或软件。逻辑可包含一个或多个门或其它电路组件。在一些实施例中,逻辑可还被完全实施为软件。通信接口114可用于在网络装置104与一个或多个网络106和/或网络节点102之间传递信令和/或数据。例如,通信接口114可用于发送和接收诸如数据分组的网络业务。在具体实施例中,通信接口114包括也称为网络接口卡或网络适配器的一个或多个物理网络接口控制器(NIC)。NIC可包含用于使用诸如以太网(例如,如由IEEE802.3标准所定义的)、光纤信道、InfiniBand、Wi-Fi的任何适合物理层和数据链路层标准或其它适合标准进行通信的电子电路系统。NIC可包含可耦合到电缆(例如,以太网电缆)的一个或多个物理端口。NIC可使得在网络装置104与耦合到网络装置104的另一装置(例如,网络节点102)的任何适合元素之间的通信能实现。网络装置104的元素可以任何适合的方式被耦合在一起。例如,总线可将任何组件耦合在一起。总线可包含任何已知互连,诸如多点总线(multi-dropbus)、网状互连、环形互连、点对点互连、串行互连、并行总线、一致(例如高速缓存一致)总线、分层协议架构、差分总线、或射击收发器逻辑(GTL)(Gunningtransceiverlogic)总线。系统100的元素可以任何适合的方式被耦合在一起,诸如通过一个或多个网络106。网络106可以是任何适合的网络或使用一个或多个适合的联网协议来操作的一个或多个网络的组合。网络可表示用于接收和传送通过通信系统传播的信息分组的一系列节点、点和互连通信路径。例如,网络可包含一个或多个防火墙、路由器、交换机、安全设施、防病毒服务器或其它有用的网络装置。网络提供在源和/或主机之间的通信接口,并且可包括任何局域网(LAN)、无线局域网(WLAN)、城域网(MAN)、内联网、外联网、因特网、广域网(WAN)、虚拟专用网(VPN)、蜂窝网络、或促进网络环境中的通信的任何其它适当的架构或系统。网络能够包括通过通信介质相互耦合(并且相互通信)的任何数量的硬件或软件元素。网络节点102可以是可操作以发送和接收网络业务(例如,数据分组)的任何适合的计算装置。在各种实施例中,“计算装置”可以是或者包括用于处理和传递数据的计算机、工作站、服务器、大型机、嵌入式计算机、嵌入式控制器、嵌入式传感器、个人数字助理、膝上型计算机、蜂窝电话、IP电话、智能电话、平板计算机、可转换平板计算机、计算设施、网络设施、接收器、可佩戴式计算机、手持式计算器、虚拟机、虚拟设施或任何其它电子、微电子或微机电装置。客户端装置可包含适当的操作系统,诸如MicrosoftWindows、Linux、Android、MacOSX、AppleiOS、Unix或类似操作系统。图2图示根据某些实施例,可由网络装置104执行的规则搜索的框图200。各种实施例尝试将规则搜索的以下想象的“完美”行为变为现实:给定输入分组201,计算(在不引用大的表格、树或其它数据容器的情况下)“如果存在匹配,则它是规则编号X”形式的初步判定(即,一个或多个候选规则209),并且随后只检查候选规则209以查看它们是否匹配输入分组201。换而言之,避免了基于树的方案的有序(逐步)链判定和检查基于(T)CAM的解决方案中过多数量的规则两者。各种实施例准许在两个位置中进行有限多变体计算:(i)规则的数据库被划分成被独立搜索的几个片段(即,规则表格204)(其中最终选择在部分搜索结果之中,即候选规则209);(ii)初步判定可返回多于一个候选规则209(但仍是小量的候选规则)。在一些情景下,小部分的数据库将不适合方案(或者将要求上面提及的变体的不可接受的倍增),并且因此可被单独处理。例如,未被放置到规则表格204中的规则208可被放置在CAM206(其在一些实施例中是TCAM)中。在描绘的实施例中,规则的数据库被划分成可各自包括任何适合数量的规则的多个规则表格204。这些规则表格中的每个可被存储在RAM中,诸如,例如SRAM或DRAM中。在其它实施例中,规则表格可被存储在任何适合类型的存储器中。网络装置104可包含任何适合数量的离散RAM模块。RAM模块可包含规则表格204的一个或多个。未被放置在规则表格204中的规则被放置在CAM206中。数据库的主要部分和所有辅助数据结构(例如,下面描述的索引表格或笼结构)可被存储在常规RAM中。在此类实施例中,部分搜索能够通过有限次数的RAM访问来执行,并且能够以流水线方式来组织,这能够实现极高吞吐量。要求的数据处理和控制逻辑(对于大型数据库)的量比对应存储器的大小小得多。将数据库规则集划分成规则表格204在软件/固件编译期间被执行,并且可被动态优化以适合给定硬件约束(诸如存储器的大小),并且可被动态优化以改进次要优化参数(诸如更佳的覆盖/最差情况性能、功率消耗的预测性降低等)。在数据库编译期间,分析规则208,并且将能够使用RAM和比较逻辑来处理的规则放置到规则表格204中,同时将剩余规则208放置到定制CAM206中。可运行优化过程以最小化要被引导到CAM206的规则的数量。此优化由给定规则数据库来驱动。每个计算索引块212可包含用于对输入分组201执行基于掩码的定索引函数的逻辑,以便从规则表格208中识别候选规则209。在最佳规则表格204中,构建规则表格,使得在给定输入分组的条件下,计算索引块212可计算指向极小数量(例如,不多于两个)的候选规则209的一个或多个索引。随后,从RAM读取候选规则209,并且对应检查匹配块214(其可包含用于针对输入分组201来检查规则209的逻辑)执行匹配测试。计算索引块212可利用掩码,一种与规则208和输入分组201有相同长度的比特序列。候选规则209必须适合掩码(即,规则的所有“不关心(don'tcare)”比特必须被遮蔽),并且在可能程度内,遮蔽应最大程度地保留规则之间的差别。也就是说,规则的大集群不应在遮蔽后变得同一。下面将更详细地描述适当掩码的使用和识别。存在对象的两个主要类:分组和规则。分组与规则之间的关系可被表述如下:“分组P匹配(或不匹配)规则R”(以对称的方式使用概念“匹配”,即,表述“分组P匹配规则R”和“规则R匹配分组P”被认为是完全可互换的同义词)。规则集被称为数据库。数据库可指规则的聚合集合(aggregatecollection)或规则的聚合集合的子集(例如,规则表格204或CAM206)。数据库由其大小(它含有的规则的数量)和格式来表征。格式指定规则和分组的结构。根据格式,每个分组和每个规则被拆分成称为字段的片段。每个字段由其长度(正整数)和类型来表征。分组和规则的长度被定义为所有字段的长度之和。存在字段的两个主要类型:数字字段和比特字段。比特字段按顺序具有若干子类型。除字段外,每个规则还具有至少两个额外属性:优先级和流ID。可选的是,分组和规则两者均可具有另外的属性。长度为N的分组是N比特序列。分组的字段是此序列的组块(chunk)(上面提及的格式指定拆分的细节,即字段的数量、其长度、和类型)。在本公开中,从零开始从右到左枚举比特序列的元素:P=(bN-1,bN-2,...,b1,bO),而字段/组块将以其自然的从左到右顺序被列出:P={field1,field2,field3,...}。在本文中具体的数字示例中,可在无括号和逗号的情况下编写比特序列,例如,P=01101而不是P=(0,1,1,0,1)。对于分组,比特字段与数字字段之间的差别仅在于其解译,数字字段另外表示为非负整数的相应数字值(长度为L的数字字段表示0与2L-1之间的值)。因此,含有比特序列01000101的数字字段等效于8比特整数64+4+1=69(十进制)=45(十六进制)等。长度为N的规则R可被表述为更抽象的概念。例如,规则可被表述为三元组(<谓词,优先级,流ID>),其中优先级和流ID是数字(例如,来自给定范围的非负整数;更小的数字指示更高优先级),并且谓词是函数,其在给定长度为N的任何分组P的情况下确定P是否匹配R。以按字段的方式来定义匹配,也就是说,如果分组P的所有字段匹配,也就是说,如果对于所有i=1...k,PFi匹配RFi,则带有字段{PF1,...,PFk}的分组P匹配带有字段{RF1,...,RFk}的规则R。对于比特字段和数字字段,可不同地定义字段匹配。规则的长度为L的比特字段能够被写为L个符号“0”、“1”或“x”的序列。例如,长度为4的规则可被写为x01x。如果所有L个符号匹配分组的字段中的对应L个比特(符号“0”和“1”分别匹配比特0和1,并且符号“x”匹配任何比特),则此规则匹配分组的L比特字段。也就是说,规则的比特字段“x01x”匹配分组的以下四比特字段:0010、0011、1010和1011。存在比特字段的两个重要子类。精确匹配字段是只含有符号“0”和“1”(即,无“x”),或是完全未定义(仅含有“x”符号)的字段。前缀字段是仅在最右位置含有一个或多个符号“x”(如果有的话)的字段,例如,“0110xxxx”。非“x”符号的数量被称为前缀的长度,因此,“0110xxxx”具有长度=7并且前缀长度=4。精确匹配字段可被认为是前缀字段的子类。规则的长度为L的数字字段(也称为范围)是一对整数LB(下限)和UB(上限),其中。通常通过分隔符“:”将数字字段写为LB:UB。规则能够以不同方式被编码。优先级和流ID是数字,并且因此能够自然地由长度足以表述其最大值的二进制序列表示。在一个实施例中,谓词可包含长度为N的规则的2N个比特,其被组织成两个N比特向量。例如,规则的长度为L的比特字段能够被编码为L比特内容和L比特掩码:符号内容掩码“0”01“1”11“x”00例如,表示“x01x”的长度为4的比特字段能够被编码为内容0010和掩码0110。长度为L的数字字段能够被编码为两个L比特二进制数字,其中第一数字表示其下限,并且第二数字表示其上限。例如,考虑表示3:8的长度为5的字段。此字段映射到5比特数字3和8或相应的二进制序列00011和01000。当然,在其它实施例中,规则可以任何适合的方式被组织和/或编码。作为一个示例,精确匹配字段只具有两个可能掩码00...0和11...1,因此能够用1比特对其掩码进行编码。作为另一示例,可使用掩码的长度,也就是说,非“x”符号的数量而不是掩码其本身来编码前缀字段。作为阐明示例,假设格式指定5个字段:长度为8的第一前缀字段、长度为8的第二前缀字段、长度为6的第一数字字段、长度为6的第二数字字段和长度为4的比特字段。相应地,符合此格式的分组或规则的长度为8+8+6+6+4=32。假设规则R具有字段{“11010xxx”,“011xxxxx”,13:43,10:10,“x0x1”},并且分组P具有值11010011_01111101_010000_001010_1001(分组中包含下划线只是为了通过指示字段的边界来增强可读性)。分组P匹配规则R,因为11010011匹配“11010xxx”,01111101匹配“011xxxxx”,010000(十进制16)匹配13:43,001010(十字制10)匹配10:10,以及1001匹配“x0x1”。规则R的谓词可被编码为32比特序列的以下对(再次,添加下划线只是为了可读性):11010000_0110000_001101_001010_0001和11111000_1110000_101011_001010_0101在此示例中,第一序列包含比特字段的内容和数字字段的下限,并且第二序列由比特字段的掩码和数字字段的上限组成。可由本公开的各种系统执行的分组分类的目的如下:在给定规则的数据库和分组(与该数据库具有相同格式)的情况下,查找匹配分组的规则。如果没有此类规则,则报告未找到匹配规则。如果存在匹配分组的多个规则,则选择带有最高优先级的规则(本文中更高优先级被表示为更小数字值的那些优先级,其中优先级=0表示最高可能优先级)。如果存在最高优先级的不止一个匹配规则,则可确定的是数据库配置不当,并且未定义分类的结果。各种实施例可具有另外或其它特征,诸如:只输出匹配规则的流ID和/或优先级并且不输出规则其本身(或者识别规则的信息,诸如其中存储了规则的存储器的地址或诸如此类);查找所有匹配规则;如果存在多个匹配规则,则输出匹配规则的数量;仅在带有具有给定范围的优先级的规则之中执行搜索(例如,忽略带有高于给定阈值的优先级的规则)。本公开的各种实施例可执行以下目的:在给定数据库的情况下,识别其尽可能大的子集S(其可被放置到规则表格204A中),使得约束为此子集S的分类问题能够始终通过快速直线(即,无循环)算法A1(S)(其可通过计算索引212A被执行)而得以解决。如果问题的回答R属于S,则此算法解决分类问题,否则它可明确地失败(即,报告未找到匹配规则),或者找到比R具有更低优先级的不同规则R'。在剩余的数据库之中,识别其尽可能大的子集(其可被放置到规则表格204B中),使得约束为此子集的分类问题能够始终通过快速直线算法A2(其可通过计算索引212B被执行)而得以解决,并以此类推,直至整个数据库被放置在规则表格204中,或者直至步骤的给定最大数量已达到(无论哪个先发生)。如果在数据库中有其余规则,则它们可被放置在CAM206中,并且基于CAM的方法可用于它们(例如,这可以是序列中的最后算法)。因此,定索引函数不用于为最佳规则搜索CAM。在此类实施例中,算法Ai应是灵活且可配置的,以满足各种数据库的要求。图3图示了根据某些实施例,用于使用串行操作来选择规则的示例流程图300。流程图300表示算法集的链式(即,有序)组织。图4图示了根据某些实施例,用于使用并行操作来选择规则的示例流程图400。流程图400表示相同算法集的备选(并行)组织。图5图示了根据某些实施例,用于使用串行和并行操作来选择规则的示例流程图500。流程图500表示用于实现相同算法集的混合手段。如果部分算法Ai中的至少之一找到R(当然,索引i将通常对于不同分组是不同的),则由流程图300、400和500所表示的聚合算法解决分类问题(即,它找到匹配给定分组P的最高优先级规则R)。注意,算法可相互不同(例如,它们可具有不同数字参数或者利用不同分类算法,诸如不同定索引函数)。在这些流程图中,p=优先级(R)是以下所述的速记:if(规则R被定义并且匹配分组P)thenp=R的优先级else(其中“∞”能够被实现为大于任何规则的优先级的数字)在各种实施例中,算法Ai(其中最终算法An可能例外,其可能具有不同性质,诸如基于CAM的算法)可包括基于掩码的定索引算法。这些算法可基于定索引函数。定索引函数F将分组P用作自变量,并且计算来自预定义范围的整数结果(即,索引)。因此,索引=F(P)。如果定索引函数F对匹配某一规则R的所有分组P产生相同索引,则可以说函数F支持规则R(其可被指代为索引=F(R)),否则,可以说函数F不支持规则R(在此情况下,F(R)将被视为未定义)。可能构建许多种定索引函数。“好的”定索引函数应支持尽可能多的规则,并且应最大程度地区分规则(即,它应降低其中不同规则导致相同索引的冲突的数量,特别是多路冲突)。下面将更详细描述定索引函数的可能实现的细节。本公开的各种实施例提供在分组分类中使用定索引函数的变体。这些实施例利用一个或多个表格。本文中我们假设带有X个条目的表格的条目从0到X-1被编号,并且如果定索引函数F用于产生用于此类表格的索引,则F的值是在0与X-1之间的整数。在讨论的每个实施例中,输入是分组P,并且输出是规则R或失败报告(例如,由“未定义的规则”表示)。本文中,“R是好的”和“R是不好的”可分别用于“R是规则,并且R匹配P”和“R是未定义的规则或者R不匹配P”。图6图示根据某些实施例,用于使用单个定索引函数F来从表格TR识别规则R的示例流程图600。定索引函数F接收作为输入的分组P,并且输出索引。在通过索引所识别的位置访问表格TR,并且检索该位置的内容(其可以是规则或未定义的规则的指示)。在检查匹配框,针对分组P来检查所检索的规则R,并且如果规则匹配分组P,则输出规则。如果规则R不匹配分组P,或者如果使用所计算的索引来访问的表格TR的条目未包含规则,则返回失败报告。图7图示根据某些实施例,用于使用多个定索引函数F1、F2、...FNI来从表格TR识别规则R'的示例流程图700。流程图700中示出的实施例是流程图700中示出的实施例的变体。此实施例利用产生指向表格TR中位置的索引的多个定索引函数。NI(索引的数量)是大于一的整数参数,并且函数F1...FNI是有区别的定索引函数。在一个实施例中,流程可在逻辑中被实现如下:R=未定义规则对于i=1…NI进行重复{index=Fi{P)R'=TR[index]if(R'是好的)thenif(R是不好的或优先级(R)>优先级(R'})thenR=R'}返回R也就是说,表示规则R的变量被初始化成象征未定义的规则的值。在每次迭代中,定索引函数接收分组作为输入,并且运算索引。在通过索引所识别的位置访问表格TR,并且检索该位置的内容。在检查匹配框,针对分组P来检查所检索的规则R'。如果规则R'是好的(即,规则不是未定义的,并且规则匹配分组P),那么如果变量R是不好的(例如,是象征未定义的规则的值)、或者如果规则R'的优先级的值比规则R的优先级的值更低(意思是规则R'具有更高优先级),则规则R被设置成规则R'。随后,开始下一迭代。在所有迭代后,规则R被输出(其能够是有效的规则,或者指示未定义的规则的值,这将指示未找到有效的值)。此流程还是无循环的,因为用于各个定索引函数的所有NI段可被扩展成直线代码。例如,本文中在描绘一个或多个重复循环的各种流程中,硬件单元(例如,处理器或其它逻辑)可与正由其它硬件单元所执行的其它迭代并行执行重复循环的迭代的全部或一部分。因此,在各种实施例中,流程可在流水线中实现而不要求反馈。图8图示根据某些实施例,用于使用单个定索引函数F和索引的表格TI来从表格TR识别规则R的示例流程图800。如果表格TR(例如,将与图6的流程一起使用)的高度远远大于在表格中存储的有效规则的数量,则通过以更密集方式来存储规则并引入辅助表格TI以将原始索引映射到此密集表格的索引中来节省空间变得可能(例如,可使用更小的存储器大小)。辅助表格可被表述为TI[0:NTR-1](次要索引的表格),其中此表格的条目是在0与NTR(其中NTR的值表示“无此类规则”情况)之间的整数。从0到NTR-1的值是有效的次要索引。注意,表格TI可以比新TR高得多(即,具有更多的总条目),但TI的条目极短(例如,甚至对于百万规则的数据库,TI的条目能够是log21000000≈20比特长)。在一个实施例中,流程可在逻辑中被实现如下:index1=F(P)index2=TI[index1]if(index2=NTR)then返回未定义规则R=TR[index2]if(R是好的)then返回R返回未定义规则在此流程中,定索引函数F接收分组P作为输入,并且输出索引index1。在通过index1所识别的位置访问表格TI,并且检索该位置的内容。此值(index2)可以是到表格TR的索引或者指示无效索引的值(例如,NTR)。如果index2指示无效索引,则输出未找到有效规则的指示。否则,在通过index2所识别的位置访问表格TR,并且检索该位置的内容。在检查匹配框,针对分组来检查所检索的规则R,并且如果规则匹配分组P,则输出规则。如果规则R不匹配分组P,则输出未找到有效规则的指示。图9图示根据某些实施例,用于使用多个定索引函数F1、F2、...FNI和索引的表格TI来从表格TR识别规则R的示例流程图900。此流程以与图7的流程概括图6的流程相同的方式来概括图8的流程。变量R将含有迄今为止最佳规则匹配P(如果有的话),并且其值在基于连续定索引函数的输出而找到更佳规则(即,带有更佳优先级的匹配规则)时能够按顺序被更新。每个输入分组导致对表格TI的NI次访问和对表格TR的多达NI次访问(如果对表格TI的每次访问产生到表格TR的一个有效索引)。图10图示根据某些实施例,用于使用单个定索引函数F和索引的二维表格TI来从表格TR识别规则R的示例流程图1000。在此实施例中,可通过相同索引来对多于一个规则进行定索引。例如,使NW(方式的数量)充当凝聚因子(condensationfactor)。NW是大于一的正整数参数,其限制通过单个索引来定索引的规则的数量。在此类示例中,TI中的每个条目包含在0与NTR之间的NW个整数的阵列。因此,符号TI[i]现在可表示整个第i个阵列(即,TI的行),并且TI[i,j]指此阵列的第j个元素,其中j是在0与NI-1之间的值。对于每个阵列TI[i],可通过将等于NTR的值放置在所有其它值之后的这种方式来布置阵列的元素。在一个实施例中,流程可在逻辑中被实现如下:R=未定义规则index1=F(P)对于i=0…NW-1进行重复{index2=TI[index1,i]if(index2=NTR)then结束循环R'=TR[index2]if(R'是好的)thenif(R是不好的或优先级(R)>优先级(R'})thenR=R'}返回R在此流程中,R被初始化成表示未定义规则的值。定索引函数F接收分组P作为输入,并且输出索引index1。在通过index1所识别的位置访问表格TI,并且检索索引TI[index1]的阵列。检索阵列的第一元素TI[index1,0]。如果所检索的元素具有NTR的值,则循环结束,并且R被输出,带有指示未找到匹配规则的值。如果第一元素没有NTR的值,则在第一元素的值访问表格TR。如果从表格TR获得匹配分组的规则R',并且R是不好的,或者新获得的规则R'具有比R更好的优先级,则R被设置成R'。对于TI[index1]的每个元素重复这些步骤,直至已迭代通过每个元素,或者直至从阵列检索到NTR的值,在该点输出R的值。在一些实施例中,可在表格TR中的连续区域中放置从TI的行连接到的所有规则。因此,假设每个下一索引等于前一索引加1,则二维表格TI能够被替换成结构<索引的数量,第一索引>的一维表格。此方案降低了TI的大小,但使得插入/删除各个规则变得更困难。在本文中讨论的任何其它实施例中可使用类似结构。也可以压缩形式来存储稀疏索引表格TI以降低存储器大小。例如,使NW=2,并且假定在四个连续行中的每个(被索引的4k,4k+1,4k+2,4k+3)之中操作多于3个有效索引。这4个行可通过带有三个索引和指定在所述四个行(在此示例中,行被称为A、B、C和D)之间这三个索引的分布的短“描述符”的单个结构而被替换成3个索引。在此具体示例中,在操作分布的24=16个变体,即带有来自不同行的3个索引的4个变体(ABC,ABD,ACD,BCD)和来自一个行的两个索引和来自不同行的第三索引的12个变体(AAB,AAC,AAD;BBA,BBC,BBD;CCA,CCB,CCD;DDA,DDB,DDC)时,可使用4比特描述符。只带有两个或更少索引的变体能够通过使用范围外值NTR作为伪填充物而被嵌入到所示出的16个变体之一中。因此,在此示例中,行的数量已被减少4倍,缺点是行长度更长了稍微大于1.5倍,导致大约40%的TI的总压缩。在本文中讨论的任何其它实施例中可应用此方法论(通过适当的修改)。图11图示根据某些实施例,用于使用多个定索引函数F1、F2、...FNI和索引的二维表格TI来从表格TR识别规则R的示例流程图1100。此流程概括在图10中描绘的流程。此实施例以与图10的流程相同的方式操作,包含多个定索引函数,其可各自产生一个索引,该索引能够指向多个索引,各自指向要检查的规则。每个搜索请求可包含对TI的NI次访问(假设TI的整个行能够作为统一对象来读取)和对TR的多达NIxNW次访问。在一个实施例中,流程可在逻辑中被实现如下:R=未定义规则对于i=0…NI进行重复{index=Fi{P)对于j=0…NW-1进行重复{index2=TI[index1,j]if(index2=NTR)then结束内循环R'=TR[index2]if(R'是好的)thenif(R是不好的或优先级(R)>优先级(R'})thenR=R'}}返回R在本公开的各种实施例中,TI表格可包含额外信息,其可(尽可能经常地)预测在分组与一个或多个规则之间失配的情况。如果此预测针对在TI中存储的具体索引而发生,则跳过从TR读取对应规则。此类实施例可在访问TR是有关性能的瓶颈时改进整个系统的性能。利用此想法的简单方法包含将定索引函数“扩展”到大于log2NTI比特的长度,并且在索引附近在TI中放置额外比特。在搜索期间将检查额外比特,并且如果它们不匹配从分组计算的对应额外比特,则对TR的访问将被跳过。图12图示根据某些实施例,用于使用单个定索引函数F和初步过滤来从表格TR识别规则R的示例流程图1200。此流程通过以下方式概括在图10中示出的流程:代替索引的表格TI,使用笼的表格TC,其中每个条目TC[i](称为“笼”)含有NW个元素TC[i,j]的阵列,其中每个TC[i,j]是一对<ind,func>(后缀符号X.ind和X.func将用于指对X的组分),其中按顺序“ind”是索引到TR的数字(因此,TF[i,j].ind类似于图10的流程的TI[i,j]),并且“func”描述试图预测违反了条件“分组P匹配规则TR[TC[i,j].ind]”的简单函数(带有作为输入的分组和作为输出的指示是或否的值)。更具体地说,此类函数的输出的可能值可被解译为“能够匹配”和“不能匹配”。在“能够匹配”情况下,应从TR提取并且检查规则,因为规则可或可不匹配分组,但在“不能匹配”情况下,预先已知道规则不匹配分组,并且因此无需从TR读取规则。在各种实施例中,可使用内部变量CurCage,其表示TC的一个笼和到“潜在匹配”规则的索引的辅助集(阵列)SPRM。在一个实施例中,流程可在逻辑中被实现如下:R=未定义规则Index1=F(P)SPMR=空集CurCage=TC[index1]对于i=0…NW-1并行进行if(CurCage[i].func(P)="是"}then将CurCage[i].ind的值添加到集SPRM对于来自集SPRM的每个元素index2进行重复{R'=TR[index2]if{R'是好的)thenif(R是不好的或优先级(R)>优先级(R'))thenR=R*}返回R在此示例中,潜在规则匹配SPRM集具有不多于NW个元素,因此,在上面的流程中“对于每个进行重复”的循环仍可不被展开(例如,在硬件中并行实现)。另外,在一些实施例中,SPRM可受束缚,使得它将从不含有多于NW'个元素,其中NW'是算法的整数参数,并且0<NW'≤NW。NW'的更小值将保证本文中讨论的各种实施例的某些实现的更快执行,因为它们将限制每搜索请求对TR的访问的次数,这可以是对于总性能的关键因素。图10的流程可以以下方式通过图12的流程直接建模:定义NW'=NW,由对<n,F是>将每个TI的条目替换为值n<NTR,并且由对<0,F否>将每个TI的条目替换为值n=NTR,其中F是和F否是始终分别返回“是”和“否”的函数。图13图示根据某些实施例,用于使用多个定索引函数F1、F2、...FNI和初步过滤来从表格TR识别规则R的示例流程图1300。除多个定索引函数用于访问表格TC的条目外,该流程类似于图12的流程。在一个实施例中,流程可在逻辑中被实现如下:R=未定义规则对于i=0…NI进行重复{index=Fi{P)SPMR=空集CurCage=TC[index1]对于j=0…NW-1并行进行if(CurCage[j].func(P)="是"}then将CurCage[j].ind的值添加到集SPRM对于来自集SPRM的每个元素index2进行重复{R'=TR[index2]if{R'是好的)thenif(R是不好的或优先级(R)>优先级(R'))thenR=R'}}返回R图14图示根据某些实施例,用于使用单个定索引函数F、索引的表格TI和初步过滤来从表格TR识别规则R的示例流程图1400。此流程类似于图12的流程,但在通过所检索的索引index2来访问笼的表格TC前,函数F的输出用于访问索引的表格TI。此类实施例可允许笼以更密集的方式被放置在TC中。在一个实施例中,流程可在逻辑中被实现如下:(其中NTC表示表格TC的条目的数量):R=未定义规则Index1=F(P)index2=TI[index1]if(index2<NTC)then{SPMR=空集CurCage=TC[index2]对于i=0…NW-1并行进行if(CurCage[i].func(P)="是"}then将CurCage[i].ind的值添加到集SPRM对于来自集SPRM的每个元素index3进行重复{R'=TR[index3]if{R'是好的)thenif(R是不好的或优先级(R)>优先级(R'))thenR=R'}}返回R图15图示根据某些实施例,用于使用多个定索引函数F1、F2、...FNI、索引的表格TI和初步过滤来从表格TR识别规则R的示例流程图1500。此流程类似于图14的流程,但利用多个定索引函数来输出用于从表格TI检索笼索引的索引。在搜索请求期间,操作对TI的NI次访问,不多于对TC的NI次访问(index1可指向TI的未使用元素),并且不多于对TR的NIxNW'次访问。在一个实施例中,流程可在逻辑中被实现如下:R=未定义规则对于i=1…NI进行重复{index1=Fi(P)index2=TI[index1]if(index2<NTC)then{SPMR=空集CurCage=TC[index2]对于j=0…NW-1并行进行if(CurCage[j].func(P)="是"}then将CurCage[i].ind的值添加到集SPRM对于来自集SPRM的每个元素index3进行重复M{R'=TR[index3]if{R'是好的)thenif(R是不好的或优先级(R)>优先级(R'))thenR=R'}}}返回R在图12-15的流程中使用的笼是数据结构,其可含有到在TR中存储的规则的多达NW个链路(索引/指针)和本地过滤/判定信息,对于每个进入分组P,该信息允许滤除通过由定索引函数所选择的笼的索引所指向的多达所有(但不多于NW')的规则。例如,参数NW=2和NW'=1的组合意味着该笼能够指向两个规则,但在给定任何分组P的情况下,我们可消除其中之一。此行为可例如由形式“检查P的第i个比特;如果它为0,则选取第一规则,否则选取第二规则”的判定算法来实现。如更早所提及的,不保证所选规则将匹配分组P;但保证未选取的规则不匹配分组P。并非所有规则对能够以此类方式来区分(例如,判定算法可通过两个规则;或者在规则之间进行区分可要求审查多于一个比特)。防止此类不需要的情况可在数据库编译期间被完成。在形式上,笼可被视为NW个元素的阵列,其中每个元素是一对<ind,func>。但在具体实现中,能够以不同形式来写此信息。可优选更紧凑的形式,即使这造成对支持的函数的类和/或对TR中规则分配策略施加约束。作为示例,与具体笼有关的所有规则可被存储在TR的连续区域中。在此情况下,代替具体规则的多达NW个索引,仅一个索引(第一规则的索引)和规则的数量(范围0...NW的整数)需要被存储在笼中。在一些实施例中,一个笼中的所有函数func取决于分组的相同(例如,极小)数量的比特。在此情况下,在分组内对其位置的描述能够由所有NW个笼的元素共享,如在以下实施例中所进行的(参见下面的LBIA)。在一个示例中,笼可以是数据结构,含有:·本地比特索引阵列LBIA,含有范围0...L-1的B个整数(B是小的整数参数,(例如,B=4),并且L是分组的长度);·本地表格LTT(在一些实施例中,其可在TCAM中被实现),带有NW个行和B个列;条目为“0”、“1”和“x”;·索引的本地表格LTI,含有NW个索引(指向TR中规则的范围0...NTR-1的整数)。在给定分组P的情况下,可如下使用此数据结构(例如,可在图12-15的流程的“并行进行”循环中执行以下动作):·提取比特P[LBIA[0]]...P[LBIA[B-1]](创建P的“本地指纹”)·从所有LTI[i]创建集SPRM,使得LTT的第i行匹配本地指纹。换而言之,函数CurCage[j].func(P)能够被定义为“P的本地指纹(由来自位置CurCage.LBIA的比特所定义)匹配CurCage.LTT[j]”,并且值CurCage[j].ind是CurCage.LTI[j]。作为示例,使L=64(两个32比特前缀字段),B=3,NW=5以及NW'=3。假定以下5个规则的群组是在带有NTR=256个条目的表格TR中:使LBIA含有值49、47和5(在这些位置的比特以粗体突出显示)。提取这些比特,获得带有5行和3列(为了参考,包含了规则的地址)的以下表格LTT:001(规则#109)011(规则#167)01x(规则#211)1x0(规则#230)xx1(规则#234)因此,笼具有以下结构:·LBIA是三个六比特整数(49,47,5)的阵列;·LTT是0/1/x阵列,带有3个符号的5字符串,各自为:(“001”,“011”,“01x”,“1x0”,“xx1”);·LTT是五个八比特整数(109,167,211,230,234)的阵列;在输入分组P(例如,P=00110100111001011011011001000110_10010111010000100000011110111101)由笼处理时,执行以下操作:·根据LBIA来创建本地指纹,即,从位置49,47,5(以粗体突出显示)提取比特:它们分别是0、1和1;·测试比特字符串011和五个符号字符串“001”,“011”,“01x”,“1x0”,“xx1”(来自LTT)中的每个的匹配。回答分别是否、是、是、否和是;·从对应于“是”回答的LTI的元素来创建SPRM;这些元素是(167,211,234)。尽管不保证带有这些数字的规则匹配分组(规则#167和#234不匹配,因为在最右比特中有失配),但保证没有匹配规则从SPRM中的位置被省略。在最差情况下,通过NW个元素生成SPRM。在数据库编译期间进行将此集的大小降低到小于NW的值(在平均或最差情况下)的函数的处理。此处理可包含将规则关联于笼以及准确地识别指纹比特的位置。还应创建函数,使得NW'的限制(小于笼的大小NW的数字)得以满足(否则,可产生运行时间失败)。如果两个规则在相同列中具有相反符号(即,“0”和“1”),则它们不能匹配相同分组。图16描绘了来自上面示例的规则之间的关系。圆圈表示规则;虚线边缘连接能够匹配相同分组的规则对;实线连接从不匹配相同分组的规则对(标签“a”、“b”、“c”分别表示最左、中间和最右比特中的不同;像“a,c”的用于相同边缘的多个标签示出多个比特中的不同)。能够看到的是,规则167、211和234不能被区分:没有连接它们的实线;但在任何四个规则之中,有至少一条实线。因此,在NW'=3(或4、5等)时,能够在一个笼中组合这五个规则,但在NW'=2或1时不能(至少对于上面做出的指纹比特的选取)。这些比特的不同选取可通常导致NW'的不同限制;但在此示例中,实现更佳的限制是不可能的,因为匹配规则#167的任何分组也匹配规则#211和#234。图17图示根据某些实施例,使用级别链的基于掩码的索引函数1700的框图。在本文中的实施例中,可使用任何适合的定索引函数,但定索引函数优选具有以下属性:(i)输出值的给定范围(以匹配要被定索引的表格的地址空间),(ii)匹配相同规则的所有分组的相同输出值,以及(iii)匹配不同规则的分组的不同输出值(这是期望属性,但不是必需的)。基于掩码的定索引函数可包含这些属性中的每个。基于掩码的定索引函数的中心对象是掩码,其是与规则数据库的格式具有相同长度的零和一的序列。在一个实施例中,如果在与掩码M进行与(AND)操作(以逐比特方式)时匹配规则R的所有分组产生相同结果,则规则R适合掩码M(或换而言之,掩码M适合规则R)。在更具建设性的形式中,“规则适应掩码”意味着:·对于比特字段:在规则的任何“x”符号的位置中,掩码必须具有比特0;在符号“0”或“1”的位置中,掩码可含有任何比特值;·对于数字字段:考虑下限与上限之间(含上下限)的所有可能整数的二进制符号记数法;随后对于其中数字未全部含有相同二进制位的任何比特位置,掩码都必须具有比特0;对于其中所有数字都具有相同二进制位的位置,掩码可含有任何比特值。作为示例,规则{“11010xxx”,“011xxxxx”,13:43,10:10,“x0x1”}适合掩码01110000_11000000_000000_111100_0001(添加的下划线是为了可读性目的),但不适合任何以下掩码(违反以粗体标记的比特):基于掩码的索引函数的类可被定义如下。使FM(P)是基于掩码M的(L,K)索引函数,如果它能够以形式f(P&M)来表示,其中“&”是在L比特分组P与L比特掩码M之间的逐比特与(AND)操作,并且f是带有L比特输入和K比特输出的函数(输出值将被解译为来自范围0...2K-1的数字)。通过此定义,属性(i)和(ii)得以满足,并且期望的属性(iii)能够被变换成形式“序列M应具有尽可能多的1并且函数f必须是足够好的特征/散列”的语句,也就是说,f应产生尽可能少的冲突。任何适合的技术可用于识别索引函数。例如,如果有若干可能的掩码,使得所有期望的规则适合它们中的每个,则可选择带有最大数量的1的掩码。作为另一示例,可在函数内使用压缩单元的链或树。图16图示了压缩单元CU的链,并且图17图示了压缩单元的树。索引函数1700包含在分组P与掩码M之间执行逐比特与操作的遮蔽单元(MU)。遮蔽单元的输出被拆分成B比特的各种段。索引函数1700包含n级别的压缩单元链,其中n=L/B(上舍入)。在具体实施例中,如果L<nB,则遮蔽单元可还通过将一和零的任何适合组合添加到遮蔽单元的输出来提供填充,使得L+填充比特的数量=nB。索引函数1700还包含压缩单元CU,其各自对来自遮蔽单元的B比特加上来自前一级别的A比特输出(或如果压缩单元是在第一级别,则为种子值)计算简单的散列,以输出A比特的值。在具体实施例中,在索引函数中的内部总线的宽度A的值可以是大约2*log2(规则的数量)。宽度B能够等于A或者不同(B的值通常不确定散列的质量,但它直接影响整个计算的复杂性和延迟)。相同索引函数内的CU可以相对于彼此是独特的或同一的。可由索引函数来使用各种CU的任何适合组合。在各种实施例中,选取CU,使得散列可在软件中被轻松计算,并且在硬件中具有低深度实现。可执行任何适合的散列,诸如线性或乘法散列算法。理想的是,使用能够被轻松计算并且在硬件中具有低深度实现的散列。索引函数1700还包含缩短单元(SU),其通过截除A比特的一个或多个比特(例如,最高有效比特或最低有效比特),或者通过使用压缩算法以基于A比特来生成K比特,将来自最后CU的A比特结果缩短到比特的期望数量K。图18图示根据某些实施例,使用二叉树的基于掩码的索引函数1800的框图。索引函数1800包含在分组P与掩码M之间执行逐比特与操作的遮蔽单元(MU)。遮蔽单元的输出被拆分成B比特的各种段。索引函数1800包含具有n个叶(即,在顶级别的n个压缩单元)的二叉树。在具体实施例中,如果L<nB,则遮蔽单元可还通过将一和零的任何适合组合添加到遮蔽单元的输出来提供填充,使得L+填充比特的数量=nB。索引函数1800还包含第一级别的压缩单元CU,其各自对来自遮蔽单元的B比特加上具有A比特的种子值来计算简单散列。每个压缩单元输出A比特的散列值。两个压缩单元的输出是到树的下一级别处的压缩单元的输入。最后压缩单元的输出被馈送到缩短单元SU,其通过截除A比特的一个或多个比特(例如,最高有效比特或最低有效比特),或者通过使用压缩算法以基于A比特来生成K比特,将A比特结果缩短到比特的期望数量K。图19图示根据某些实施例,用于分类分组的示例方法。方法的步骤可由网络装置104单独或者与一个或多个其它装置或逻辑组合执行。在步骤1902,接收规则数据库。在一个示例中,与网络装置关联的网络管理员或其它用户可向网络装置104发送规则(或规则可从其中生成的其它准则)。规则数据库可包含任何适合数量的规则。在步骤1904,规则数据库被划分成多个规则数据库,并且这些更小的规则数据库中的每个可被存储在例如RAM中。将规则划分成这些更小规则数据库可基于任何适合因素,诸如将存储规则数据库的具体存储器模块的数量或大小、将用于基于进入分组来选择规则的定索引函数的确定、与规则数据库关联的预期性能、或其它适合因素。在各种实施例中,选择用于规则数据库(即,表格TR)的一个或多个定索引函数,以便最大化可在规则数据库中放置的规则的数量(即,最大化使用对应于该规则数据库的定索引函数而可被区分的规则的数量)。在一些实施例中,第一规则数据库可包含在步骤1902中接收的50-90%的规则,其中每个连续规则数据库包含更小量的规则。可生成连续定索引函数和规则数据库,直至满足一个或多个条件。例如,在已生成最大数量的定索引函数或规则表格时,在指定用于规则存储的RAM用尽时,在剩余规则的目标数量达到时,在剩余规则的数量将适合一个或多个指定的CAM时,或者满足其它适合的条件,将规则划分成各种数据库可停止。在步骤1906,未被放置到规则数据库之一(例如,在RAM中)中的任何规则被放置到CAM(或类似存储器)中,诸如TCAM。例如,使用RAM和比较逻辑不能高效处理的规则被放置到TCAM中。在各种实施例中,在规则被划分成RAM中的两个到四个数据库后,仅小部分(例如,1%-2%)剩余,并且被放置到CAM存储器中。在步骤1908,接收进入数据分组。在步骤1910,从多个规则数据库获得最佳规则。可使用分组作为输入对每个规则数据库执行搜索。对于在RAM中存储的数据库中的每个,一个或多个定索引函数可用于从数据库中识别候选规则,其随后可基于它们是否匹配分组及其相应优先级而被过滤。对于在CAM中存储的数据库,将基于CAM的方法用于识别最佳规则(如果存在至少一个匹配规则)。随后,在步骤1912,分析来自各种数据库的最佳规则以选择最佳规则。在步骤1914,对数据分组应用由最佳规则所指定的动作。网络装置104可执行动作,或者可指挥不同装置执行动作。在适当之处可重复、组合、修改或删除图19中图示的步骤中的一些,并且也可将另外的步骤添加到流程图。另外,在不脱离特定实施例的范畴的情况下,可以任何适合的顺序执行步骤。设计可经历从创建到仿真到制造的各种阶段。表示设计的数据可以多种方式来表示设计。首先,如在仿真中有用的,硬件可使用硬件描述语言(HDL)或另一功能描述语言来表示。另外,可在设计过程的某些阶段产生具有逻辑和/或晶体管门的电路级别模型。此外,在某个阶段,大多数设计达到表示在硬件模型中各种装置的物理放置的数据级别。在其中使用常规半导体制造技术的情况下,表示硬件模型的数据可以是指定在用于产生集成电路的掩膜的不同掩膜层(masklayer)上存在或不存在各种特征的数据。在一些实现中,此类数据可以数据库文件格式(诸如图形数据系统II(GDSII)、开放式作品系统交换标准(OASIS)或类似格式)来存储。在一些实现中,除其它示例外,基于软件的硬件模型、以及HDL和其它功能描述语言对象能够还包含寄存器传送语言(RTL)文件。此类对象能够是机器可解析的,使得设计工具能够接受HDL对象(或模型)、解析HDL对象以了解描述的硬件的属性、并且从对象中确定物理电路和/或芯片上布局。设计工具的输出能够用于制作物理装置。例如,除为实现在HDL对象中建模的系统而将被实现的其它属性外,设计工具也能够从HDL对象确定各种硬件和/或固件元素的配置,诸如总线宽度、寄存器(包括大小和类型)、存储器块、物理链路路径、组构拓扑。设计工具能够包含用于确定芯片上系统(SoC)和其它硬件装置的拓扑和组构配置的工具。在一些实例中,HDL对象能够被用作用于开发模型和设计文件的基础,模型和设计文件能够由制作设备用于制作所描述的硬件。实际上,HDL对象其本身能够作为输入被提供到制作系统软件以促成所描述的硬件。在设计的任何表示中,数据可被存储在任何形式的机器可读介质中。存储器或者磁或光存储装置(诸如盘)可以是机器可读介质,其用于存储经由被调制或以其它方式生成以传送信息的光或电波所传送的此类信息。传送指示或携带代码或设计的电载波时,就执行电信号的复制、缓冲或重新传送而言,做出新的副本。因此,通信提供商或网络提供商可在有形机器可读介质上至少暂时存储诸如编码到载波中的信息等制品,实施本公开的实施例的技术。本文中使用的模块指的是硬件、软件和/或固件的任何组合。作为示例,模块包含与非暂态介质关联的硬件(诸如微控制器),以存储适于由微控制器执行的代码。因此,在一个实施例中,对模块的引用指的是硬件,其特定配置成识别和/或执行要保存在非暂态介质上的代码。此外,在另一实施例中,模块的使用指的是包含代码的非暂态介质,其特定适于由微控制器执行以执行预确定的操作。而且如能够推断的,在还有的另一实施例中,术语模块(在此示例中)可指的是微控制器和非暂态介质的组合。常常,图示为分离的模块边界通常变化,并潜在地重叠。例如,第一和第二模块可共享硬件、软件、固件、或其组合,同时潜在地保持一些独立的硬件、软件、或固件。在一个实施例中,术语逻辑的使用包含硬件,诸如晶体管、寄存器、或其它硬件(诸如可编程逻辑装置)。在一个实施例中,短语“以”或“配置成”的使用指的是安排、装配、制作、提供销售、导入和/或设计设备、硬件、逻辑或元素以执行指定或确定的任务。在此示例中,如果未正在操作的设备或其元素被设计、耦合和/或互连以执行所述指定的任务,则其仍“配置成”执行指定的任务。作为纯说明性示例,逻辑门可在操作期间提供0或1。但“配置成”向时钟提供使能信号的逻辑门不包含可提供1或0的每个潜在逻辑门。相反,逻辑门是在操作期间1或0输出将启用时钟的以某一方式耦合的逻辑门。再一次注意,术语“配置成”的使用不要求操作,而是专注于设备、硬件和/或元素的隐藏状态上,其中在隐藏状态中,设备、硬件和/或元素被设计成在设备、硬件和/或元素正在操作时执行具体任务。此外,在一个实施例中,短语“有能力/能够”和或“可操作以”的使用指的是以此类方式设计的某一设备、逻辑、硬件和/或元素使以特定方式使用该设备、逻辑、硬件和/或元素能够实现。如上注意,在一个实施例中,“以”,“能够”或“可操作以”的使用指的是设备、逻辑、硬件和/或元素的隐藏状态,其中设备、逻辑、硬件和/或元素未正在操作,但以此类方式设计成使以特定方式使用设备能够实现。在本文中使用时,值包含数字、状态、逻辑的状态、或二进制逻辑的状态的任何已知表示。常常,逻辑级别、逻辑值或逻辑的值的使用也称为1和0,这简单地表示二进制逻辑状态。例如,1指的是高逻辑级别,并且0指的是低逻辑级别。在一个实施例中,诸如晶体管或闪速单元的存储单元可有能力保持单个逻辑的值或多个逻辑的值。然而,计算机系统中值的其它表示已被使用。例如,十进制数字十也可被表示为二进制值1010和十六进制字母A。因此,值包含有能力被保持在计算机系统中的信息的任何表示。另外,状态可由值或值的部分表示。作为示例,第一值(诸如逻辑的一)可表示默认或初始状态,而第二值(诸如逻辑的零)可表示非默认状态。另外,在一个实施例中,术语重置和设置分别指的是默认和更新的值或状态。例如,默认值潜在地包含高逻辑的值,即重置,而更新的值潜在地包含低逻辑的值,即设置。注意,值的任何组合可用于表示任何数量的状态。上述方法、硬件、软件、固件或代码集的实施例可经由在机器可访问、机器可读、计算机可访问或计算机可读介质上存储的指令或代码来实现,所述指令或代码是处理元件可执行的。非暂态机器可访问/可读介质包含以由机器(诸如计算机或电子系统)可读的形式来提供(即,存储和/或传送)信息的任何机制。例如,非暂态机器可访问介质包含诸如静态RAM(SRAM)或动态RAM(DRAM)的随机存取存储器(RAM)、ROM、内容可寻址存储器(CAM)、磁或光存储介质、闪速存储器装置、电存储装置、光存储装置、声存储装置、用于保持从暂态(传播的)信号(例如,载波、红外信号、数字信号)接收的信息的其它形式的存储装置等,其要与从其中可接收信息的非暂态介质区分开。用于对逻辑进行编程以执行本公开的实施例的指令可存储在系统中的存储器内,如DRAM、高速缓存、闪速存储器或其它存储装置。此外,指令能够经由网络或借助于其它计算机可读介质来分发。因此,机器可读介质可包括用于以由机器(例如,计算机)可读的形式存储或传送信息的任何机制,但不限于软盘、光盘、紧致盘只读存储器(CD-ROM)、和磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、可擦可编程只读存储器(EPROM)、电可擦可编程只读存储器(EEPROM)、磁或光卡、闪速存储器、或经由电、光、声或其它形式的传播信号(例如,载波、红外信号、数字信号等)在通过因特网传送信息中使用的有形机器可读存储装置。相应地,计算机可读介质包含适合用于以由机器(例如计算机)可读的形式存储或传送电子指令或信息的任何类型的有形机器可读介质。在一个实施例中,一种系统包括逻辑,所述逻辑用于:接收数据分组;基于数据分组来识别多个候选规则,候选规则包括来自规则的第一数据库的第一候选规则和来自规则的第二数据库的第二候选规则;以及基于与某个规则关联的优先级和该规则匹配数据分组的确定,从多个候选规则之中选择该规则,该规则指定要对数据分组执行的至少一个动作。系统可进一步包括包含规则的第一数据库的第一随机存取存储器和包含规则的第二数据库的第二随机存取存储器。系统可进一步包括内容可寻址存储器以存储规则的第三数据库,并且其中多个候选规则包括从规则的第三数据库识别的第三规则。逻辑进一步用于基于数据分组来运算索引;并且基于索引,从规则的第一数据库识别第一候选规则。基于数据分组来运算索引可包括将逐比特掩码应用到数据分组。基于数据分组来运算索引可包括基于数据分组来运算散列值。基于数据分组来运算索引可包括截除通过基于数据分组来运算一系列的散列值而获得的结果。逻辑可基于所运算的索引来访问索引的表格,以获得一个或多个第二索引;并且基于一个或多个第二索引来访问规则的第一数据库,以识别多个候选规则中的至少一个候选规则。多个候选规则可包括基于通过基于数据分组所计算的有区别的索引而从规则的第一数据库所选择的多个规则。逻辑可包括在随机存取存储器中存储的规则的多个数据库之中分布多个规则的大多数,并且将多个规则中的剩余规则指派到内容可寻址存储器。逻辑可对数据分组执行由所选择的规则指定的动作。逻辑可基于规则的一个或多个比特与数据分组的一个或多个比特的比较,确定规则的第一数据库中的规则的至少一个规则不匹配分组。在一个实施例中,一种方法包括:接收数据分组;基于数据分组来识别多个候选规则,候选规则包括来自规则的第一数据库的第一候选规则和来自规则的第二数据库的第二候选规则;以及基于与某个规则关联的优先级和该规则匹配数据分组的确定,从多个候选规则之中选择该规则,该规则指定要对数据分组执行的至少一个动作。方法可进一步包括:基于数据分组来运算索引;并且基于索引,从规则的第一数据库识别第一候选规则。方法可进一步包括:基于所运算的索引来访问索引的表格,以获得一个或多个第二索引;并且基于一个或多个第二索引来访问规则的第一数据库,以识别多个候选规则中的至少一个候选规则。基于数据分组来运算索引可包括将逐比特掩码应用到数据分组。基于数据分组来运算索引可包括基于数据分组来运算散列值。基于数据分组来运算索引可包括截除通过基于数据分组来运算一系列的散列值而获得的结果。方法可进一步包括在随机存取存储器中要存储的规则的多个数据库之中分布多个规则的大多数,并且将多个规则中的剩余规则指派到内容可寻址存储器。方法可进一步包括对数据分组执行由规则指定的至少一个动作。多个候选规则可包括基于通过基于数据分组所计算的有区别的索引而从规则的第一数据库所选择的多个规则。方法可进一步包括基于规则的一个或多个比特与数据分组的一个或多个比特的比较,确定规则的第一数据库中的规则的至少一个规则不匹配分组。方法可进一步包括在第一随机存取存储器中存储规则的第一数据库和在第二随机存取存储器中存储规则的第二数据库。方法可进一步包括在内容可寻址存储器中存储规则的第三数据库。多个候选规则可包括从规则的第三数据库识别的第三规则。一种设备包括:用于接收数据分组的部件;用于基于数据分组来识别多个候选规则的部件,候选规则包括来自规则的第一数据库的第一候选规则和来自规则的第二数据库的第二候选规则;以及用于基于与某个规则关联的优先级和该规则匹配数据分组的确定来从多个候选规则之中选择该规则的部件,该规则指定要对数据分组执行的至少一个动作。设备可进一步包括:用于基于数据分组来运算索引的部件;以及用于基于索引来从规则的第一数据库识别第一候选规则的部件。设备可进一步包括:用于基于所运算的索引来访问索引的表格以获得一个或多个第二索引的部件;以及用于基于一个或多个第二索引来访问规则的第一数据库以识别多个候选规则中的至少一个候选规则的部件。基于数据分组来运算索引可包括将逐比特掩码应用到数据分组。基于数据分组来运算索引可包括基于数据分组来运算散列值。基于数据分组来运算索引可包括截除通过基于数据分组来运算一系列的散列值而获得的结果。设备可进一步包括用于在随机存取存储器中要存储的规则的多个数据库之中分布多个规则的大多数并将多个规则中的剩余规则指派到内容可寻址存储器的部件。设备可进一步包括用于对数据分组执行由规则指定的至少一个动作的部件。多个候选规则可包括基于通过基于数据分组所计算的有区别的索引而从规则的第一数据库所选择的多个规则。设备可进一步包括用于基于规则的一个或多个比特与数据分组的一个或多个比特的比较来确定规则的第一数据库中的规则的至少一个规则不匹配分组的部件。对比可进一步包括用于在第一随机存取存储器中存储规则的第一数据库和在第二随机存取存储器中存储规则的第二数据库的部件。设备可进一步包括用于在内容可寻址存储器中存储规则的第三数据库的部件,并且其中多个候选规则包括从规则的第三数据库识别的第三规则。在一个实施例中,至少一中在其上存储有指令的机器可读存储介质,指令在由机器执行时,促使机器:接收数据分组;基于数据分组来识别多个候选规则,候选规则包括来自规则的第一数据库的第一候选规则和来自规则的第二数据库的第二候选规则;以及基于与某个规则关联的优先级和该规则匹配数据分组的确定,从多个候选规则之中选择该规则,该规则指定要对数据分组执行的至少一个动作。指令在由机器执行时,可进一步促使机器:基于数据分组来运算索引;并且基于索引,从规则的第一数据库识别第一候选规则。指令在由机器执行时,可进一步促使机器:基于所运算的索引来访问索引的表格,以获得一个或多个第二索引;并且基于一个或多个第二索引来访问规则的第一数据库,以识别多个候选规则中的至少一个候选规则。基于数据分组来运算索引可包括将逐比特掩码应用到数据分组。基于数据分组来运算索引可包括基于数据分组来运算散列值。基于数据分组来运算索引可包括截除通过基于数据分组来运算一系列的散列值而获得的结果。指令在由机器执行时,可进一步促使机器在随机存取存储器中要存储的规则的多个数据库之中分布多个规则的大多数,并且将多个规则中的剩余规则指派到内容可寻址存储器。指令在由机器执行时,可进一步促使机器对数据分组执行由规则指定的至少一个动作。多个候选规则可包括基于通过基于数据分组所计算的有区别的索引而从规则的第一数据库所选择的多个规则。指令在由机器执行时,可进一步促使机器基于规则的一个或多个比特与数据分组的一个或多个比特的比较,确定规则的第一数据库中的规则的至少一个规则不匹配分组。指令在由机器执行时,可进一步促使机器在第一随机存取存储器中存储规则的第一数据库和在第二随机存取存储器中存储规则的第二数据库。指令在由机器执行时,可进一步促使机器在内容可寻址存储器中存储规则的第三数据库,并且其中多个候选规则包括从规则的第三数据库识别的第三规则。此说明书通篇对“一个实施例”或“实施例”的引用意味着结合该实施例描述的具体特征、结构或特性被包含在本公开的至少一个实施例中。因此,此说明书通篇各种位置中出现的短语“在一个实施例中”或“在实施例中”不一定全部指相同实施例。此外,具体特征、结构或特性可在一个或多个实施例中以任何适合的方式被组合。在前述说明书中,已参照特定示范实施例给出详细描述。然而,将显然的是,在不脱离如随附权利要求中所述的本公开的更广泛精神和范畴的情况下,可对其进行各种修改和改变。相应地,本说明书和附图要被视为是说明性意义而不是约束性意义。此外,实施例和其它示范语言的前述使用不一定指的是相同实施例或相同示例,而是可指的是不同和有区别的实施例以及潜在地指的是相同实施例。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1