一种将专用搜索寄存器和专用状态机寄存器与相关执行硬件集成以支持规则集合对数据...的制作方法

文档序号:6298359阅读:231来源:国知局
专利名称:一种将专用搜索寄存器和专用状态机寄存器与相关执行硬件集成以支持规则集合对数据 ...的制作方法
技术领域
本发明涉及信息处理领域,特别涉及内容分析和处理领域。
背景技术
计算和通信中的重大趋势正在导致充满内容分析和处理的环境的出现。这些环境要求某类功能上的高性能以及可编程性,所述某类功能即消息、文档或分组中的内容的搜索、解析、分析、解释和变换。强调这种丰富内容分析和处理的著名领域包括内容感知(content-aware)网络、基于内容的安全系统、监视、分布式计算、无线通信、人机接口、信息存储和检索系统、语义网上的内容搜索、生物信息学及其他。
内容感知网络领域要求搜索和检查分组或消息内的内容,以便确定把这种分组和消息路由或转发到何处。这种检查必须以“线路速度”在正处理的消息上执行,其中“线路速度”是网络连接的数据速率。假定现代网络中的线路速率在从100M比特/秒直到40G比特/秒的范围内,则在内容检查功能需要被执行的速度上存在巨大的压力。
基于内容的安全系统以及监视和监控系统需要分析消息或分组的内容并且应用一个规则集合以确定是否有安全缺口或入侵可能性。通常,在现代网络入侵检测系统(NIDS)中,众多模式、规则和表达式必须被以线路速度应用到输入有效载荷上,以确保所有可能的系统弱点都被揭露。假定网络和计算基础设施是持续发展的,则新的弱点持续出现。此外,越来越复杂完善的攻击被入侵者所采用以便躲避检测。入侵检测系统需要能够检测系统上的所有已知攻击,还需要足够智能以检测预示着新攻击的不寻常且可疑的行为。所有这些因素导致了对内容分析和处理上的可编程性以及极高性能的要求。
随着分布式且集群式计算的出现,任务目前被分布到彼此合作和通信以完成复合工作的多个计算机或服务器。此分布导致了计算机通信的迅速增长,要求这种消息处理上的高性能。随着作为通用数据交换的新标准的XML(可扩展标记语言)的出现,应用程序利用XML作为“应用层数据传送”来彼此通信。消息和文档目前被嵌入到XML标记中。所有消息处理首先要求XML文档被解析并且有关内容被抽取和解释,之后是任何所需的变换和过滤。由于这些功能需要以高消息速率来执行,因此它们变得在计算上非常苛求。
随着无系留通信和无线网络的发展,来自无线设备的信息访问有所增长。已知客户机设备轻便的外形参数,递送到此设备的数据被过滤并且有效载荷被保持得较小是很重要的。未来的环境将把来自有线基础设施的XML内容过滤和变换成无线基础设施上的轻型内容(利用无线标记语言或WML)。随着无线网络的越来越多的使用,此内容变换功能将会如此常见以致将会需要用于其处理的高效解决方案。
另一个重要的正在出现的需求是利用像语音这样的人机接口与计算机通信和交互的能力。语音处理和自然语言处理在内容搜索、词法分析、内容解析和语法处理中极为密集。一旦语音流被转换成文本,语音系统就需要在输入的文本流上应用大词汇表以及句法和语义规则以理解语音。
环球网的出现和发展已给信息检索(IR)系统带来了巨大的计算负荷。信息持续被高速添加到网中。此信息通常被对照着详尽的词汇表完全编入索引,并且被添加到搜索引擎和IR系统的数据库中。由于信息在被持续地创建和添加,因此编索引者需要“始终在工作状态”。为了提供高效实时上下文搜索,存在用于编索引功能的高性能模式匹配系统是有必要的。
强调丰富内容分析和处理的另一个领域是生物信息学领域。基因分析学和蛋白体学需要基因序列和结构上的复杂搜索和分析算法的应用。这种计算又一次要求高性能搜索、分析和解释能力。
从而,正在出现的未来的计算机和通信环境将强调丰富的内容分析和处理。这种环境将需要以下功能的高效且可编程的解决方案—文档、消息或分组中的内容的搜索、词法分析、解析、特征描述、解释、过滤和变换。
这些丰富内容处理功能的中心是(1)执行上下文且基于内容的搜索、查找、导航和丰富联想查找的操作,和(2)高效地对照输入数据流对状态机估值的能力。
在现有技术中,搜索和查找处理通常是以两种方式之一来执行的。首先,这种处理利用了固定专用集成电路(ASIC)解决方案来执行,该方案使用内容可寻址存储器(CAM)、比较器硬件和专用逻辑的组合。例如,搜索规则被存储在内容可寻址存储器中,数据被流经该结构,一次移动1字节或1个字。或者,特定比较器被安排在固定位置以识别输入数据中的特定值。匹配的发生被专用逻辑按照目标应用程序的要求记录和消费。虽然固定ASIC方法可提高性能,但它缺乏易编程性,因此其应用严重受限。此外,与为每个目标解决方案设计和特制特定芯片相关的花费高得令人望而却步。
第二,带通用执行数据通路的传统通用微处理器已被用于处理丰富搜索和查找功能以及相关的内容处理。微处理器是完全可编程的设备,能够针对解决问题的发展中的需求-仅仅通过重编软件新功能就能被重部署。但是,传统微处理器在它可提供给丰富内容分析和处理的性能水平上是有限的。
内容分析性能中的局限是微处理器体系结构的设计和发展中所固有的。微处理器作为计算单元起源,在1、2、4、8字节的字上执行算术操作。后来,随着计算领域发展,更多功能被逐渐添加到微处理器以针对解决新兴领域。因此,通用微处理器在功能上横跨非常多种应用程序,但是对于任何一种都没有特别地好好调整。根本地,当它应用到内容分析的需求时,微处理器体系结构具有两个关键局限-(1)它缺乏在大数据集合上同时执行大规模并行和微粒模式匹配和比较操作的能力,以及(2)它缺乏根据输入数据做出迅速和多个状态转换以及高效多方向控制流改变的能力。
许多搜索和模式匹配算法已发展来最佳利用微处理器。Boyer-Moore算法被广泛认为是微处理器上采用来查找给定数据集合的模式的出现的已知的最佳技术之一。该算法一次只处理一个模式,如果在数据集合中要搜索多个模式则它必须被重复调用。对于要搜索的每个模式,它顺序前进经过数据集合,根据从模式的预特征描述获得的观察资料做出选择性比较。此算法通过减小给定数据集合内的总比较数目提供了相对于其他模式匹配算法较好的性能。但是,由于算法的顺序性质,性能被微处理器体系结构的根本性约束所限,即标量指令集合和分支招致的惩罚。
由于微处理器的上述体系结构局限,传统微处理器的效率和能力被稍早所述的新兴的计算和通信环境严重挑战。可提供几个数据点来支持这些论点。例如,在像Snort这样的网络入侵检测系统(NIDS)中,已经期望在输入分组上的数百个串上应用签名检测。在采用Boyer-Moore模式匹配算法的改进版本的基于商业微处理器的系统中的3GHz Pentium IV处理器上以8字节模式的签名执行此工作量将分组速率限制为小于50Mbps。同样地,在这种平台上解析XML文档限于10MB/s范围,语音处理限于有限语法和词汇上的1个实时流。这些数据点表明2003或2004年的传统微处理器将能够以约100Mbps范围的速率递送丰富内容分析和处理。但是,到那时1Gbps至10Gbps之间的数据速率在企业网络和环境中将不会罕见。明显地,在传统微处理器可递送的性能与环境所要求的性能之间有一至二个数量级的严重失配。虽然有可能采用多个并行微处理器系统来以目标速率执行某些期望的功能,但是这大大增加了系统的成本。明显存在对这些目标功能的更高效解决方案的需求。.
类似的对比存在于状态机估值的情况中。状态机的历史回溯至早期计算机科学。在其最简单的表述中,状态机是包括状态、状态间的转换和输入表示的形式模型。从Turing的算法计算模型(1936)开始,状态机已经是计算理论的中心。20世纪50年代,正则表达式被Kleene开发作为描述和刻画串集合的形式标志。有限状态自动机作为状态机模型被开发,该模型被发现是等价于正则表达式的。非确定性自动机随后被开发并被证明是等价于确定性自动机的。Thompson和其他人后来的工作导致了用于构造有限状态自动机以对正则表达式求值的构造算法体。大量参考文献可供用于正则表达式和有限状态自动机的描述。关于该材料的参考文本,参见“Speech and Language Processing”(由Daniel Jurafsky和James H.Martin所著,Prentice-Hall Inc,2000)。
利用现有技术中可用的技术,状态机和有限状态自动机处理可以按三种方式之一来执行。首先,这种处理利用了固定专用集成电路(ASIC)解决方案来执行,该方案直接实现事前已知的固定和选中的状态机。虽然固定ASIC方法可提高性能,但它缺乏可编程性,因此其应用严重受限。此外,与为每个目标解决方案设计和特制特定芯片相关的花费高得令人望而却步。
第二,现场可编程门阵列(FPGA)可用于以可编程的方式实现状态机。从本质上来说,FPGA体系结构提供通用可编程逻辑,这种通用可编程逻辑可对多种应用程序配置,而不是对状态机的实现特别优化。利用此方法,只能在一个芯片上容纳少量状态机,此外估值可进行的速率是有限的。实现的密度和性能特性使得这一方案选择对于多种新兴应用程序不充分。
第三,传统通用微处理器已被用于实现多种状态机。微处理器是完全可编程的设备,并且能够针对解决问题的发展中的需求一仅仅通过重编软件新功能就能被重部署。但是,传统微处理器在它能够实现状态机以及对状态机估值的效率上是有限的。
需要新的解决方案,用于可编程处理装置,该装置更适合于内容分析和处理,并且在包括状态机估值以及用于消息、分组或文档上的内容的上下文搜索、词法分析、解析、解释和变换的操作的执行的功能集合上是高效的。

发明内容
本发明公开了一种规则处理器和使用该处理器的方法。在一个实施例中,所述规则处理器包括通用寄存器文件、指令序列发生器、耦合到所述通用寄存器文件的解码器,以及耦合到所述解码器并且具有状态机寄存器和耦合到所述状态机寄存器的状态机执行硬件的状态机单元,所述指令序列发生器用于提供指令,所述解码器用于解码由所述指令序列发生器指定的指令集合,所述状态机寄存器用于存储一个或多个状态机,所述状态机执行硬件用于响应于对所述指令集合中的一个或多个指令的执行并且根据来自所述解码器和所述通用寄存器文件之一或两者的信息对所述一个或多个状态机估值。


从以下给出的详细描述和本发明的各种实施例的附图中将会更详细地理解本发明,但各种实施例不应被理解为把本发明限制到特定实施例,而只是用于说明和理解。
图1是规则处理器的框图。
图2是规则处理器的一个实施例的用途的实例。
图3示出规则处理器的一个实施例的接口。
图4是带后备(look-aside)配置的线路卡的一个实施例的框图。
图5是带直通配置的线路卡的一个实施例的框图。
图6是服务器共处理器配置的一个实施例的框图。
图7是带搜索装置的规则处理器的一个实施例的框图。
图8A是搜索寄存器和搜索执行硬件的一个实施例的框图。
图8B是搜索阵列的一个实施例的框图。
图9A是分类器的一个实施例的框图。
图9B是分类器中的范围选择机制的一个实施例的框图。
图10是搜索阵列的一个实施例的电路示意图。
图11示出包括四个处理阶段的规则处理器的典型微体系结构。
图12示出用于典型规则处理器的复杂模式匹配规则集的示例伪代码和相应微代码。
图13示出图12所示的微代码的逐时钟流水线执行。
图14从编程观点示出根据本发明的一个实施例的基本状态机估值构造块或有限状态自动机构造块(FSA构造块)。
图15示出根据本发明的一个实施例用于实现FSA构造块的逻辑电路。
图16示出根据本发明的一个实施例的FSA构造块,其中实现了多个特征来提供附加功能。
图17示出根据本发明的一个实施例的片上状态机单元,该单元被称为RE处理器。
具体实施例方式
描述了一种可编程规则处理器装置,该装置将专用搜索寄存器和专用状态机寄存器与执行硬件集成以支持规则集合和语法对数据的快速应用。这种处理器可用于内容分析和搜索。在一个实施例中,可编程规则处理器包括通常在通用处理器中找到的部分或装置,以及与搜索/解析执行阵列耦合的搜索寄存器以及与状态机估值单元耦合的状态机寄存器。通用处理器的部分可包括指令(或规则)存储器、指令指针和指令序列发生器以及解码器和通用寄存器文件的使用。其他部分也可被使用并且将在下文中更详细描述。
在一个实施例中,搜索寄存器把数据或内容存储在阵列中,并且通用处理器前端把规则提供给阵列用于执行搜索。内容可以是分组、流、消息或文档。搜索寄存器和搜索/解析执行阵列允许对照内容有效载荷的规则的并行且递归的序列发生,以及并行模式匹配能力和做出多个迅速的基于内容的状态转换的能力。诸如模式匹配、词法分析、解析和解释功能这样的操作可被执行。
相反,在一个实施例中,状态机寄存器和状态机估值引擎通过存储编程的规则到状态机寄存器中并且通过使数据流经它们,来以相反的方式操作。注意对于这里的讨论,状态机寄存器、自动机寄存器和表达式寄存器这些术语可以互换使用。
利用通用序列发生器和指令集合格式将搜索寄存器和搜索/解析阵列与状态机寄存器和估值逻辑耦合提供了强大的可编程规则处理器,该处理器通过专用和特制的硬件加速规则处理功能,并且允许在单个集成处理器装置中执行丰富的混合操作。通过把专用搜索寄存器和相关搜索/解析执行硬件与通用处理器装置集成,联想搜索和查找功能可被有效加速,并且丰富的混合通用操作仍可同时被执行。类似地,通过将状态机寄存器和相关状态机执行硬件与通用处理器装置集成,状态机估值功能可被加速,并且同时丰富的混合通用功能可在数据上执行。所有这三块装置-搜索寄存器和搜索执行硬件、状态机寄存器和状态机估值硬件,以及通用处理器硬件的集成产生了强大的可编程规则处理器解决方案。数据可被馈入规则处理器,并且搜索功能、状态机估值功能以及通用编程功能的混合可被同时执行。状态机硬件和搜索硬件可被视为规则处理器中的另一个专用资源。可对数据执行多种操作,其中数据可被逐渐分析和变换。在一个实施例中,此规则处理器中可执行的各种功能操作可以按任何次序或顺序以及并行执行,导致加速的内容分析和变换能力。
以下详细描述的某些部分是按照计算机存储器内的数据比特上的操作的算法和符号表示来给出的。这些算法描述和表示被数据处理领域技术人员用于最有效地将其工作的实质传达给本领域的其他技术人员。算法在这里一般被想成导致期望的结果的步骤的首尾一致的序列。步骤是那些要求物理量的物理操作的步骤。通常,虽然不是必要地,这些量采取能够被存储、传送、合并、比较或者以其他方式操作的电或磁信号的形式。已经证明,有时主要由于公用的原因,将这些信号称为比特、值、元素、符号、字符、项、数字等是较方便的。
但是应该记住所有这些和类似的术语都要与适当的物理量相关联并且仅为应用到这些量的方便标签。除非特别声明,否则正如以下讨论中显而易见的,要理解在整个描述中,利用诸如“处理”或“计算(computing)”或“计算(calculating)”或“确定”或“显示”等术语的讨论都是指计算机系统或类似的电子计算设备的动作和过程,其将表示为计算机系统的寄存器和存储器内的物理(电子)量的数据操作和变换成同样表示成计算机系统存储器或寄存器或其他这种信息存储装置、传输或显示设备内的物理量的其他数据。
本发明还涉及用于执行这里的操作的装置。此装置可为所要求的用途特别构造,或者它可包括由存储在计算机中的计算机程序选择性激活或重配置的通用计算机。这种计算机程序可被存储在计算机可读存储介质上,例如但不限于任何类型的盘,包括软盘、光盘、CD-ROM以及磁光盘、只读存储器(ROM)、随机访问存储器(RAM)、EPROM、EEPROM、磁或光卡或适用于存储电子指令并且各自耦合到计算机系统总线的任何类型的媒体。
这里给出的算法和显示不内在涉及任何特定的计算机或其他装置。各种通用系统可用于根据这里的教导的程序,或者可能证明构造更专用的装置来执行所要求的方法步骤较为方便。用于多种这些系统的所要求的结构将出现在以下描述中。此外,本发明不是参考任何特定编程语言来描述的。将会理解多种编程语言可用于实现这里描述的本发明的教导。
一种机器可读介质包括任何用于以机器(例如计算机)可读的方式存储或传输信息的机制。例如,机器可读介质包括只读存储器(“ROM”);随机访问存储器(“RAM”);磁盘存储媒体;光存储媒体;闪存设备;电、光、声或其他形式的传播信号(例如载波、红外信号、数字信号等);等等。
综述本发明公开了一种可编程规则处理器,该处理器包括具有通用寄存器、附接到其上的通用执行数据通路和指令序列发生器的通用处理器部分。通用处理器部分与带搜索执行单元的搜索寄存器和带状态机执行单元的状态机寄存器紧密耦合。搜索寄存器与搜索执行单元一起以及状态机识别单元与状态机执行单元一起可各自被视为处理器执行单元,这与浮点单元和整数单元是通用处理器中的执行单元很相似。根据指令类型(例如操作码),通用处理器部分中的解码器能够将指令引向这些执行块中的任何一个。
通用处理器部分将数据和规则馈送到搜索寄存器和状态机寄存器,并且能够从其中任何一个接收结果并将其提供给另一个或两者。即,通用处理器部分与搜索寄存器和状态机寄存器集成,使得通用处理器部分可访问搜索寄存器和状态机寄存器中的所有数据,以及在搜索寄存器和状态机寄存器以及通用寄存器之间移动数据。
通用处理器部分还包括(规则)指令存储器,其用于存储指令;包括指令指针的指令序列发生器,其用于顺序发生存储在指令存储器中的指令集合;以及解码器,其用于解码每个指令。解码器能够检查馈送给它的指令并且获得搜索参数和操作数或取出到存储这种参数和操作数的通用寄存器文件中的位置的索引。从而,解码器对指令解码,然后组装操作数和参数并且准备将要提供给各种规则处理执行单元的规则。
图1是可编程规则处理器的一个实施例的框图。可编程规则处理器将传统微处理器能力与语法处理、表达式处理和串匹配能力集成。简单串匹配由搜索寄存器和搜索字节集合的搜索/解析阵列提供。表达式处理由检测和处理多个串和操作符的组合的状态机硬件提供。语法处理由这两块专用硬件与通用处理器的结合使用来实现,以便通过应用规则和表达式树来执行上下文渐进解析,产生带复杂控制流的上下文搜索。
从而,本发明的可编程处理器集成了并行模式匹配、上下文搜索、导航和渐进规则分析、状态机硬件以及传统处理器的元件(例如整数、加载/存储、联想查找、分支)。
参见图1,指令被存储在指令存储器102中。指令被流程控制用取指令指针和分支预测单元104选择。指令指针指向指令存储器102中取指令的位置。这发生在硬件流水线的取阶段。取指令指针和分支预测单元104以本领域中公知的方式操作来把指令顺序传递到解码器106。
解码器106在解码阶段读取和解码指令。就用于由搜索寄存器和搜索硬件进行的规则处理的解码后的指令来说,来自解码器106的结果包括每个像指令110这样的规则的操作码、模式、掩码和导航控制(例如在何处开始和结束搜索的窗口)的标识,或者对这种信息存储在通用寄存器文件108中何处的指示。指令格式被展开以指定用于数据搜索和分析的规则。注意也可使用其他指令格式。在从寄存器文件108读取后,这些值可被用于将特定值结合或写入到被组装的规则的各种字段。
就用于由状态机装置进行的规则处理的解码后的指令来说,来自解码器的结果包括操作码标识、输入数据值或指向数据值所在位置的指针(或者在通用寄存器108中,或者在分组缓冲器134中,或者在外部地址中),以及关于哪个状态机寄存器124和状态机单元需要被调用的代码或指示。
接下来,每个指令的参数被解码器106提供给状态机单元120、搜索寄存器和搜索/分类阵列112、整数(或其他算术逻辑单元(ALU))单元118、加载/存储单元116和分支单元114。在另一个实施例中,这是用指令序列发生器单元完成的,该单元既充当指令序列发生器又充当解码器。
加载/存储单元106把值加载到搜索寄存器以及状态机寄存器124中,或者从中存储值,以及把数据流进状态机单元120。
指令可指定规则用于数据搜索和分析。在这种情况下,规则被提供给搜索寄存器和搜索/分类阵列112的搜索寄存器。搜索执行硬件在搜索寄存器中查找指定的模式,如果该模式存在的话。分类阵列分类和递送期望的匹配位置和匹配结果,并且完成搜索执行。搜索结果被发送到搜索结果存储装置130。
更具体来说,搜索寄存器和搜索/分类阵列112包括搜索寄存器和分类器。这些将在下文更详细描述。搜索寄存器存储可搜索的数据,这种数据可以是来自文档、消息、分组或可接受搜索的任何其他公知的数据源的内容。搜索寄存器的大小可以是任意的,在一个实施例中被组织在更大的阵列内,该阵列被称为搜索阵列,其具有多行,每行有预定数目的字节。来自搜索寄存器的数据被以复制方式存储在搜索阵列中。不论可搜索的数据是以何种方式组织在整个搜索阵列中的,搜索阵列都从规则110接收模式和掩码。该模式被与搜索阵列中的条目比较。掩码提供对模式中不是被搜索模式的一部分的那些字节的指示。在一个实施例中,搜索阵列对于搜索阵列中的每行具有输出线,其指示被搜索的模式是否匹配存储在该特定行中的数据。搜索阵列的输出线被耦合到分类器的输入端。
分类器接收分别指示搜索寄存器中要搜索的范围的开始和结束点的偏置。根据来自搜索阵列的匹配指示线和偏置指定的开始和结束范围,分类器处理搜索阵列的结果。这种处理可包括执行一个或多个操作。这些操作可以是输出与操作类型相符的特定匹配索引的索引解算功能。在一个实施例中,操作包括Find_Fisrt_Forward、Find_First_Reverse和Find_Population_Count。操作由搜索指令110中的操作码指定。分类器可存储后续操作可结合来自搜索阵列的匹配指示线使用的先前操作的中间或最终结果。按这种方式,分类器可用于通过发射一系列利用先前操作结果的操作,来在可搜索的数据集合中从头到尾逐渐导航。从而,处理后分类器生成指示是否存在匹配的输出以及与匹配相关的索引。索引可指示搜索寄存器中相对于搜索寄存器的顶部第一个匹配发生的位置或最后一个匹配发生的位置。或者,索引可指示在偏置指定的范围内发生的匹配数目。
在对输出,即匹配指示和索引进行的计算之后,可通过将输出存储在通用寄存器中并且在后续指令中利用间接指定,根据匹配指示分支到指令存储器(例如指令存储器102)中指定的地址,或者其他类似技术,从而用所述输出来控制接下来的一个或多个搜索指令的执行。例如可使搜索结果存储装置130中的搜索结果供用于经由分支单元114分支,所述分支单元114根据那些结果而进行分支,或者供指令指针和分支预测单元104用于更改指令指针的值以及确定要由规则处理器执行的新的规则集合。注意,分支单元114可根据规则或操作码字段中指定的值分支,分支单元114是在解码后接收此值的。分支单元114以本领域中公知的方式操作,并且在下文中被更详细描述。
此外,分类器也可被耦合到寄存器文件,用于存储先前操作的结果,以便用于可在执行任意数目的其他操作后执行的后续操作。分类器的结果也被耦合到规则处理器指令序列发生器104,以生成或帮助生成规则程序偏置(例如分支地址)。
或者,指令可指定规则以用于表达式处理或状态机估值。这种指令可指示状态机单元要被调用,什么状态机要被测试以及什么数据要被流入或输入这些状态机。在这种情况下,状态机单元120响应于指令而执行表达式处理。状态机控制器122根据状态机配置信息控制状态机寄存器124。状态机配置信息可由状态机单元120经由加载/存储单元116、分组缓冲器134或总线136接收,并且状态机控制器122将此信息加载到状态机寄存器124中。状态机配置信息用于把状态机行为编程到状态机寄存器124中。一旦被编程,则数据可被流经状态机并且状态机可被估值。状态机估值单元126包括在考虑提供给状态机单元120的数据的情况下对编程到状态机寄存器124中的一个或多个状态机估值的硬件。在一个实施例中,状态机估值单元126对大量状态机并行估值。状态机单元20的一个实施例在下文更详细描述。
多个状态机可被并行估值。每个状态机的行为是在状态机寄存器集合中指定的。对于每个状态机寄存器集合,状态机估值单元对照输入数据执行寄存器集合中指定的状态机。多个状态机是经由多个状态机寄存器集合指定的。通过为每个状态机寄存器集合提供执行单元,可对多个状态机并行估值。每个状态机可被馈送独立的数据,以使得多个状态机可在多个不同数据流上被并行估值。
上下文静态随机访问存储器(SRAM)128用于为多个正被估值的数据集合(例如来自多个不同流的数据)存储上下文信息。如果分组来自不同的流或连接,则可编程规则处理器的前端向状态机控制器122发布指示,该指示表明是新流(或连接)并且不是与先前被处理的字节相同的流的一部分。此指示可在专用指令上发布或在调用状态机操作的指令的字段上发布。作为响应,状态机控制器122使存在于状态机寄存器124和状态机估值单元126中的累积状态机估值信息被存储到上下文SRAM 128中作为上下文。更具体地,一旦新规则提供此指示(例如经由操作码),则状态机控制器122首先把迄今为止所有临时的执行状态存储在上下文SRAM128中,并且载入对应于新规则的流的上下文。如果它是新流,则到目前还没有上下文累积,则它以初始化的寄存器上下文开始。注意在这种情况下在新流的第一分组结束之后,新上下文被创建。注意在一个实施例中,加载/存储单元116具有对上下文SRAM 128的访问权限。
注意状态机单元120和搜索寄存器和搜索/分类阵列116充当可并行操作的不同执行单元。它们可能在处理相同或不同的数据,或者在不同时间处理相同的数据。
在一个实施例中,加载/存储单元116把值存储到搜索寄存器112中或者从搜索寄存器112中删除值。加载/存储单元116能以本领域中公知的方式把值加载到通用寄存器文件108中。加载/存储单元116与片上数据存储器或数据高速缓存132以及外部存储器通信(通过总线和片外接口136)。
加载/存储单元116还从消息缓冲器或分组缓冲器(临时存储装置)134中读和写。分组流进消息缓冲器或数据缓冲器或分组缓冲器134。加载/存储单元116可将其移动到搜索寄存器112中,以使得整个分组或消息或文档可经由分组缓冲器134存储在搜索寄存器112中。这允许了可编程规则处理器接收分组、消息、文档或流数据并将其加载到搜索寄存器112中,并且利用规则处理器进行一系列查找或导航窗口搜索以定位数据的特定部分、描述分组特征或勾划分组中的不同区段或分组中感兴趣的区域,在这些区域中必须进行更多模式匹配或状态机估值。存储在指令存储器中的规则集合指定程序的高级别控制流,该控制流包括指定需要应用或执行的规则的图或树的总控制流程图。从而多种丰富序列或规则集合或语法可被应用到数据。例如,最初根据要执行的上下文搜索,搜索寄存器112被加载以查找感兴趣的区段。一旦数据中感兴趣的区段已被找到,加载/存储单元116就把该区域传送到状态机单元120,以便将一定数目的规则或正则表达式应用到数据的该区段或部分。传送后,新规则被提供给状态机控制器122,其指示对照此数据区段对哪个状态机估值。
加载/存储单元116可访问状态机单元120。例如,加载/存储单元116可发送值,以便用状态机行为对状态机寄存器124编程。加载/存储单元116可提供来自多个源的数据用于估值。加载/存储单元116可提供来自分组缓冲器134的数据,并且可被流入或馈入状态机单元120。加载/存储单元116可经由片外接口136提供来自总线的数据。加载/存储单元116可发送程序或数据值。然后状态机单元120通过使状态机控制器122取得数据并将其馈送到状态机寄存器124和状态机估值单元126用于估值,来对这种数据估值。
注意虽然未示出,但在一个实施例中,状态机单元120和搜索寄存器和搜索/分类阵列112可用专用总线或共享总线来耦合到一起,以在彼此间传送数据和/或结果。
整数单元118执行通用整数功能。在一个实施例中,整数单元118计算索引或地址,或者对之后可反馈回搜索寄存器或状态机寄存器的数据进行变换。
从而,可编程规则处理器的一个实施例包括三个寄存器集合。这些寄存器集合包括通用寄存器和两个其他的寄存器集合,即搜索寄存器和状态机寄存器。执行单元耦合到搜索寄存器和状态机寄存器中的每一个。对于状态机寄存器,执行单元是状态机估值单元,而对于搜索寄存器,执行单元是搜索和分类阵列。从而,规则处理器采取传统微处理器前端并且添加搜索寄存器以及搜索和分类执行硬件以及状态机寄存器和状态机执行单元以对状态机估值。
图2是示出规则处理器的一个实施例执行丰富规则树的能力的实例,该规则树包括操作序列,其中操作包括协议解码功能,之后是使用正则表达式处理来在输入数据的特定部分中查找感兴趣的模式。参见图2,规则树被示为具有两个阶段或级别。第一阶段涉及协议解码操作,其中经过网络的分组被检查和解码以理解什么协议在起作用。这可能要求每个分组的所有字节上的模式匹配。在这种情况下,搜索寄存器和搜索/解析阵列被用于执行一系列查找操作。在此示例中,下文更详细讨论的FindForward和FindNotForward操作的各种例程被用于确定所使用的协议是否HTTP,以及确定GET命令或POST命令是否正被使用。更具体地,FindNotForward和FindForward操作定位命令开始和结束的位置,以及定位用于任何通用资源标识符(URI)的自变量。注意一系列这种定位操作中的每一个可在周期的单次迭代中执行。
在确定分组是某类HTTP分组之后,确定是否存在取得(get)命令或公布(post)命令,并且在定位自变量后,程序中所示的最后的序列,即FINDRE序列或函数,被用于确定是否存在模式集合。为此,由搜索寄存器和搜索/解析执行硬件找到的开始和结束位置标识搜索寄存器中可由加载/存储单元抽取并发送到状态机单元以由其处理的有关字节的位置。指令序列发生器提供命令以指向用于估值的状态机群组,状态机控制器解码该群组并且对照数据调用它们。最后可得到指示在该区段中是否找到任何URI(即是否存在匹配)的结果。结果信息可被传递回规则处理器的剩余部分,该剩余部分例如可利用分支单元根据所述结果来分支到某个其他位置(可能是由于分组的有效载荷中标识的某个模式引起的)。
从而,可编程规则处理器的一个实施例在高速数据流上执行状态检查、模式匹配、分析和状态机估值。
这里描述的规则处理器的实施例包括一个或多个有利特征。例如,规则处理器的一个实施例可利用非程序高级语言来描述数据和数据模式。高级描述的使用减少了编码工作。本发明的实施例还提供对复杂协议和数据格式的支持,比如可变大小、串终止的、条件的、被覆盖的或任意排序的数据以及任意数据格式。
典型卡配置图3示出规则处理器的一个实施例的接口。参见图3,规则处理器300包括主机接口301、流接口302、存储器接口303和后备接口304。主机接口301例如可包括PCI-X接口。流接口302例如可包括SPI 4.2接口或HT & Cascade接口。存储器接口303例如可包括DDRII接口。后备接口304例如可包括LA-1接口。注意在其他实施例中,规则处理器可具有另外的接口或图3所示的接口的子集。
像规则处理器300这样的规则处理器可被包括在多个卡配置中。图4-6示出多个典型卡配置。图4是线路卡后备配置的框图。图5是线路卡直通配置的框图。线上(in-line)代码在独立基础上操作。因此,在这种配置中,规则处理器不把结果发送回主机处理器。规则处理器在一个接口上接收分组,拆开分组并确定检测分组的协议。规则处理器产生结果并且可修改要发送的数据。随后规则处理器把数据发送到其下一个目的地。注意规则处理器执行存储、路由、递送和其他网络功能。
图6是服务器共处理器卡配置的框图。在此配置中,主机处理器接收消息,因为主机处理器处理所有网络功能。主机处理器发送消息(分组或缓冲)和某些指令,指示哪类规则处理器将被应用到规则处理器。作为响应,规则处理器应用规则处理序列或程序,然后把结果发送给主机处理器。然后主机能够在必要时采取任何行动。
参见图4,线路卡配置包括具有耦合到其存储接口的存储器402的规则处理器401以及耦合到规则处理器401的流接口的网络处理器403。规则处理器401具有主机接口,用于耦合到主机或其他控制面。
网络处理器403耦合到存储器404,并且包括接口407,用于耦合到主机或其他控制面。网络处理器403具有输入405A和输出405B。输入405A被耦合以接收网络流量,该流量是网络处理器403转发到规则处理器401以用于处理的(例如利用模式、规则、表达式和语法进行的攻击检测)。网络流量经由输出406从网络处理器403转发。
参见图5,线路卡直通配置包括具有耦合到其存储器接口的存储器502的规则处理器501、耦合到其流接口的网络处理器503A的输出505B以及耦合到其后备接口的网络处理器503B的输入506A。规则处理器501具有主机接口,用于耦合到主机或其他控制面。
网络处理器503A被耦合到存储器504A并且包括用于耦合到主机或其他控制面的接口507A。网络处理器503A具有输入505A和输出505B。输入505A被耦合以接收网络流量,该流量是网络处理器503A经由输出505B转发到规则处理器501以用于处理的(例如利用模式、规则、表达式和语法进行的攻击检测)。处理后,规则处理器501经由输入506A将网络流量转发到网络处理器503B。网络处理器503B被耦合到存储器504B,并且包括接口507B以用于耦合到主机或其他控制面。网络处理器506B经由输出506B输出网络流量。
参见图6,共处理器卡类似于包括经由主机接口耦合到芯片集604的主机处理器606的标准PCI-X卡。芯片集604包括耦合到主机存储器605的存储器接口。芯片集604还包括两个PCI-X接口,一个被耦合到网络接口卡(NIC)603,另一个被耦合到规则处理器601的主机接口。规则处理器601还包括耦合到存储器602的存储器接口。
在图6的布置中,内容经由NIC 603被接收,并且经由芯片集604被发送到主机存储器605。处理器606接收指示内容已被接收到并存储在主机存储器605中的指示(例如中断)。作为响应,主机处理器606用信号通知规则处理器601实行内容处理。一旦完成,规则处理器601就用信息通知主机处理器606,主机处理器606用信号通知NIC 603,向NIC 603指示主机存储器605中的数据已准备好用于传送。最后,NIC 603经由芯片集604访问来自主机存储器605的网络流量并且把网络流量发出到网络。
搜索寄存器和搜索/分类阵列硬件的典型实施例以下给出搜索寄存器和搜索/分类阵列硬件的一个实施例。注意也可使用搜索寄存器和搜索/分类阵列硬件的其他实施例。
图7是包括搜索寄存器701和搜索执行硬件702的规则处理器的一个实施例的一部分的框图。这样一部分可以是图1的规则处理器的一部分。搜索指令703被提供给搜索寄存器701和搜索执行硬件702。如上所述,处理器进一步包括称为规则/指令存储器704的指令存储装置以及控制指令流程的装置,在一个实施例中该装置包括指令序列发生器705和指令指针706。
典型搜索需要提供指令或规则给搜索寄存器。规则指定模式以及一个或多个附加搜索参数。在一个实施例中,搜索功能返回多个结果。这些结果包括对在模式和搜索寄存器中的内容之间是否找到匹配的指示,以及指示有效载荷搜索寄存器中发生匹配的位置的匹配位置。
附加搜索控制参数由规则处理器提供给搜索执行硬件702。搜索指令可提供掩码向量以及包括目标搜索模式的字节集合。掩码向量可包括对应于一个或多个目标模式字节的比特。在一个实施例中,目标模式中在搜索操作期间将会忽略的特定比特是通过将掩码向量中的对应比特设置为预定的逻辑电平0或1来选择的。从而,搜索中所使用的目标模式的大小可被减小。此外,规则处理指令可指定构成搜索寄存器701中的搜索窗或字节范围的开始和结束位置,搜索被限制在该范围内。
到搜索指令的附加参数可包括分支地址,该地址将被规则处理器用在非成功搜索的情况中。
搜索指令的一个实例是加窗查找前向首个(windowed-find-first-forward)指令。在一个实施例中,在加窗查找前向首个搜索中,给定在规则中或由规则指定的8字节模式、8比特掩码、指向搜索寄存器701中的内容数据(例如文档数据)中的开始字节的开始位置偏置地址以及指向搜索寄存器701中的内容数据(例如文档数据)的结束字节的结束位置偏置地址,搜索返回搜索寄存器701中在指定的开始位置地址之后匹配被掩蔽的模式的第一个串的开始地址,如果此地址开始于结束位置偏置地址之前的话。在另一个实例中可执行加窗查找反向首个(windowed-find-first-reverse)搜索。在一个实施例中,在加窗查找反向首个搜索中,给定规则中的8字节模式、8比特掩码、指向搜索寄存器701中的内容的开始字节的开始位置偏置地址以及指向搜索寄存器701中的内容的结束字节的结束位置地址,搜索返回指定的结束位置地址之前匹配被掩蔽的模式的最后一个串的开始位置,如果此地址开始于开始位置偏置地址之后的话。
规则处理器还提供包含要应用到有效载荷数据的规则或规则集合的控制存储装置或规则存储器704。在一个实施例中,存储器704保存描述需要在搜索寄存器701中应用和检测的模式、规则、表达式或语法的规则集合或指令序列或代码。规则词汇表可指定操作范围,包括但不限于利用完全匹配或部分匹配的将单个或多个匹配信息递送到某些寄存器的全局或局部(加窗)搜索,生成规则处理器的输出有效载荷中的偏置和地址的基元,以及将应用到搜索结果的逻辑和计算操作符。这种规则可包括指定上述各种参数的多个字段。每个参数可在规则内直接指定或者通过使用指向包含要使用的值的寄存器或存储器位置的指针来间接指定。在允许直接和间接指定两者的实施例中,每个这种字段可包括附加子字段,该子字段指示所使用的是直接还是间接指定。
在一个实施例中,规则处理器执行锚接或未锚接的模式的按优先排序且定向的搜索以及在文档、流、消息或分组中的任意位置开始的任意长的模式的加窗或限定范围的搜索的序列。模式以及范围控制和程序控制流(例如分支地址)可在程序存储装置中包含的规则中静态指定或者利用规则中宣布的指针或索引来从寄存器文件间接动态选择。这允许了强大的动态上下文模式匹配。
规则处理器把一个或多个搜索规则提供给搜索寄存器结构。在一个实施例中,搜索寄存器是2KB寄存器文件,其中每个条目为一个字节宽。要搜索的数据被加载到搜索寄存器文件中。每个规则可指定提供给搜索寄存器文件的模式以确定该模式是否出现在那里存储的数据中。掩码也可被提供来进一步配置模式和/或减小搜索中使用的模式的大小。
参见图7,搜索寄存器701和搜索执行硬件702被共同提供搜索指令703。搜索指令703在图8A中进一步示出。参见图8A,搜索指令801包括描述搜索操作类型的操作码801a、搜索模式801b、指定模式中与当前搜索指令有关的字节的掩码801c以及分别指定搜索寄存器中与当前搜索指令有关的位置的开始和结束范围的两个偏置801d和801e。搜索执行单元802输出结果803,在一个实施例中该结果包括对搜索操作成功的指示,还包括一个或多个参数,例如但不限于指示搜索寄存器内符合搜索操作的搜索指令的位置的索引。
搜索执行硬件802包括搜索寄存器802a和分类器802b,如图8A所示。搜索寄存器802a存储可搜索数据,该可搜索数据可以是来自文档、消息、分组或可接受搜索的任何其他公知的数据源的内容。搜索寄存器802a的大小可以是任意的M字节,并且在一个实施例中被组织到更大的阵列中,该阵列被称为搜索阵列802c,该阵列有M行,每行N字节。来自搜索寄存器802a的数据以复制方式存储在搜索阵列中。
在一个实施例中,要搜索的数据是根据从地址生成器811生成的地址通过使用数据生成器813来存储在搜索寄存器中的,该地址被地址解码器812解码。存储过程还需要记录搜索寄存器802a中可搜索数据的大小。对于大小小于搜索寄存器802a的能力的数据集合,搜索寄存器802a提供机制来将搜索操作限制到适当的数据。在一个实施例中,数据生成器813可存储模式,该模式被先验地确定为会被对搜索阵列802c中的剩余位置中的搜索操作忽略的数据,或者在其他实施例中搜索寄存器802a禁止搜索阵列802c中的适当位置参与搜索操作。
不论可搜索数据被以何种方式组织在整个搜索阵列802c中,搜索阵列802c都接收模式801b和掩码801c。模式801b被与搜索阵列802c中的条目比较。在一个实施例中,搜索阵列802c具有M行,每行N字节,其中N是与模式801b中的相同的字节数目。掩码801c提供对模式801b中不是所搜索的模式的一部分的那些字节的指示。换句话说,如果模式801b是小于N字节的模式,则掩码801c指定搜索阵列802c要忽略模式801b的哪些字节。在一个实施例中,搜索阵列802c对搜索阵列802c中的M行中每一行具有输出线,指示被搜索的模式是否匹配存储在该特定行中的内容数据。在一个实施例中,如果输出为1,则模式匹配特定行中的内容数据。搜索阵列802c的M条输出线耦合到分类器802b的输入。
分类器802b还耦合到接收偏置801d和801e,这两个偏置分别指示搜索寄存器802a中要搜索的范围的开始和结束点。在一个实施例中,这些偏置是log2M比特的数字。根据来自搜索阵列802c的匹配指示线和由偏置801d和80le指定的开始和结束范围,分类器802b处理搜索阵列802c的结果。这种处理可包括执行一个或多个操作。这些操作可能是输出与操作类型相符的特定匹配索引的索引解算功能。在一个实施例中,操作包括Find_First_Forward、Find_First_Reverse和Find_Population_Count。操作是由搜索指令801中的操作码801a指定的。分类器802a可存储可能结合来自搜索阵列802c的匹配指示线用于后续操作中的先前操作的中间或最终结果。按这种方式,分类器802b可用于通过发射一系列利用先前操作结果的操作,来在可搜索的数据集合中从头到尾逐渐导航。此外,分类器802b还可耦合到寄存器文件,用于存储先前操作的结果,以便用于可能在执行任意数目的其他操作之后执行的后续操作中。分类器802b的结果还可耦合到规则处理器指令序列发生器,例如图7的指令序列发生器705,以生成或帮助生成规则程序偏置(例如分支地址)。
在处理之后,分类器802b生成指示是否存在匹配的输出,以及与该匹配相关的索引。索引可指示搜索寄存器802a中相对于搜索寄存器802a的顶部第一个匹配发生或最后一个匹配发生的位置(地址)。或者,索引可指示偏置指定的范围内发生的匹配的数目。
注意偏置指定的范围可被动态更改。例如,在偏置801d和偏置801e指定的范围包括搜索阵列802c的所有行的同时,第一搜索指令最初可被应用到搜索阵列802c。但是,在第一搜索指令并且匹配被标识之后,在后续搜索指令中开始和结束范围可被更改,以使得搜索从包括先前搜索指令指定的范围内找到的匹配线的位置开始。此能力是通过使用允许规则或指令的字段引用通用寄存器文件中的值的间接功能来实现的。
在图8A中,在一个实施例中,搜索阵列802c包括2K行,每行8字节。从而搜索寄存器802a保存2K字节数据。搜索阵列802c保存复制的数据。以搜索寄存器802a中的相异字节开始的每个8字节串作为相异字节行被存储在搜索阵列802c中。这些串包括来自搜索寄存器802a的相异字节,还有搜索寄存器802a中该字节之后的7个连续字节。从而,搜索阵列802c的每行保存前一行的7个最高字节,以及另一个紧随其后的高阶字节,该字节被附到这7字节之右。
数据被数据生成器813加载到搜索阵列802c中,在一个实施例中数据生成器813从源数据为每行提供适当的8字节数据。
在一个实施例中,8字节搜索模式被提供在每个搜索指令中。搜索模式被与搜索阵列802c对齐,以便阵列中的8列中的每一列被提供唯一的字节。这在图8B中示出。参见图8B,对于行1至行2K中的每一行,状态字节1至8被存储在搜索阵列中。对于作为图8B中所示的2K行8列搜索阵列的元素存储的每个字节,存在信号线310。例如,行1的字节1生成信号线31011,行1的字节2生成信号线31012,行2的字节1生成信号线31021,以此类推。在搜索操作期间当存储的字节与提供给该元素所属的同一列的搜索模式的字节匹配时,每个字节的信号被断言(assert)。在这个每行包含8字节的实施例中,8个信号线,例如31011至31018,被用于指示行中的每个字节电平匹配。每行的字节电平匹配被和来自行和掩码解算器模块311中的掩码102c的掩码与(AND)在一起。与函数的结果是对每行中是否发生匹配的指示。在搜索阵列包括2K行的这一实施例中,2K个匹配线被输出到分类器。此阵列中的字节元素312中的两个的电路结构在图10中示出。电路以这样一种方式操作,该方式通过在一个时钟周期中在其所有行内执行同时搜索来提供完全并行的搜索操作。当搜索操作被进行时,列中的所有字节电平匹配线401同时指示与其各自的存储字节的匹配。搜索操作在所有列上被同时调用,允许每行中被掩蔽的缩减块指示行电平匹配。从而,在搜索阵列的此实施例中,在单个时钟中,搜索寄存器中包括8个连续字节的所有2K个串的并行搜索被执行并且结果被指示在2K个匹配线上。
图9A是分类器的一个实施例的框图。参见图9A,来自搜索阵列的匹配线910被耦合并且输入到范围掩蔽和选择单元901。在一个实施例中,匹配线910包括匹配1至匹配2048。范围掩蔽和选择单元901接收指示来自搜索阵列的M个匹配线的行范围的一对偏置,以执行进一步处理。在一个实施例中,偏置是11比特的数字,这些数字被转换成可以和匹配线与在一起以提供输出的2K掩码比特。这种实例在图9B中示出,其中开始范围的偏置被转换成一个或多个0并且剩余比特为比特1,而范围结束的偏置被转换成从底部开始直到某个点全为0,并且之后所有比特都是1。通过将这些寄存器和匹配线与在一起,指定的开始和结束范围内发生的匹配在无更改的情况下被输出,而该范围外的其他匹配线被掩蔽(例如被更改到预定的逻辑电平)。
范围掩蔽和选择单元901的输出耦合到索引解算功能单元902的输入。在一个实施例中,索引解算功能单元902包括一个或多个在范围掩蔽和选择单元901的输出上执行的功能。例如,如图所示,分类器包括升序优先编码器902A,以查找指定的N字节模式与搜索阵列中的内容数据之间的由未掩蔽的匹配线指示的匹配的第一次发生(相对于搜索阵列的顶部)。降序优先编码器902B也可被包括来查找指定的N字节模式与搜索阵列中的内容数据之间由未掩蔽的匹配线指示的匹配的最后一次发生(相对于搜索阵列的顶部)。总数计数器902C指示N字节模式与搜索阵列中由未掩蔽的匹配线指示的数据之间发生的匹配的数目。其他索引选择器也可被使用。
索引解算功能单元902的输出被输入到索引组合和选择单元903,该索引组合和选择单元也被耦合以接收操作码102a。操作码102a是在搜索指令中指定的,并且选择索引解算功能输出之一作为分类器的输出。索引组合和选择单元903生成指示存在匹配的匹配指示符921以及索引922,如果升序优先编码器902a的输出被选中,则该索引指示数据搜索阵列内匹配第一次发生的位置,如果降序优先指示符902B的输出被选中,则该索引指示匹配最后一次发生的位置,如果总数计数器902C被选中,则指示未掩蔽的匹配线中的匹配的数目,等等。在对输出,即匹配指示符921和索引922的计算之后,可通过将输出存储在通用寄存器中并且在后续指令中利用间接指定,根据匹配指示符921分支到指令存储器(例如指令存储器704)中的指定地址,或者其他类似技术,从而用所述输出来控制随后的一个或多个搜索指令的执行。
图11示出包括搜索装置的规则处理器的微体系结构。参见图11,搜索指令被存储在指令存储器1101中。指令由流程控制利用取指令指针寄存器1102来选择。指令被解码器1103解码。每个指令的单个子集或者是从指令获得的,或者是从通用寄存器文件1104取出的。然后每个指令的不同子集被提供给单独的单元,即搜索阵列1105、包括分类单元1106a和特征描述单元1106b的分类器1106,传统算术逻辑单元(ALU)1107,如上所述。在一个实施例中,每个指令的处理遵循4阶段流水线,包括(i)取指令阶段1108、(ii)指令组装阶段1109、(iii)搜索/执行阶段1110和(iv)结果分类与递送和/或分支阶段1111。
一个实施例中,规则引擎指令格式包括多个比特,这些比特被划分成包含各种字段的子集,以发布指示到规则处理器上的各种硬件引擎。在一个实施例中,搜索子集包括搜索/分类操作码字段、模式字段(在一个实施例中,这包括值或指向提供值的位置的指针,以及指定指令中的值是否指针的附加比特),字节电平掩码字段、开始位置地址字段(在一个实施例中,此字段包括值或指向提供值的寄存器的指针,以及指示开始位置地址包含值还是这种指针的附加比特)以及结束位置地址字段(在一个实施例中,此字段包括值或指向提供该值的寄存器的指针,以及指示结束位置地址信息是否指针的附加比特)、指定搜索操作的结果将被返回何处的结果寄存器字段以及分支地址字段(在一个实施例中,此字段包括值或指向提供该值的寄存器的指针,以及指定分支地址信息是否指针的附加比特)。
图12示出可由上述规则处理器的一个实施例处理的规则集合的示例伪代码1201。规则具有多个模式,并且对这种模式可存在于消息或文档或分组中的什么位置有某些特定约束。约束是通过使用诸如BEFORE和AND这样的关键字来表示在伪代码中的。为了简便起见,1201中的模式在串间无任何附加分隔符的情况下用于此例中,串间带附加分隔符可能是实际中的情况。此外,在图12中是典型规则处理器的相应微代码的列表1202。指令的格式如稍早所述。用第一指令1203来做说明,它包括FIND_FIRST_FORWARD操作码,其中模式“cp/bin/”的所有8个字节对于搜索都是有关的(通过用0xFF作为掩码),并且开始和结束偏置被表示为常数(通过使用间接标记)以表示搜索寄存器中保存的可搜索有效载荷的开始和结束。为了简短起见,这里略去了常数的推导。此操作码的结果示为被加载到通用寄存器A中,并且最后分支地址被指定为常数值11,这是图12所示的微代码片段之后的指令。此指令将使得搜索执行硬件在搜索寄存器802a的字节位置0x03D和0x800内搜索“cp/bin/”的出现。搜索阵列802c中的所有匹配的行都将会在微体系结构流水线的搜索执行阶段1110的结束前断言其各自的匹配线910。在分类和分支阶段1111中,分类器802b将0x03D和0x800转换成如图9B所示的比特向量。比特向量被用于执行范围掩蔽和选择功能901,以否定任何开始于从0x03D到0x800的位置窗口之外的匹配。在目前在位置窗口内的剩余匹配中,此指令的操作码选择来自索引解算功能902的升序优先编码器902a来将编号最低的匹配转换成11比特二进制编码的位置。如果这样的匹配被找到,则匹配921将被断言,并且索引922将保存该11比特的位置。如果由于匹配未被找到而匹配921不会被断言,则指令序列发生器705将把分支地址0xB加载到指令指针706中。索引922将被寄存器文件1104的控制电路加载到通用寄存器A中。加载到通用寄存器A中和指令指针的加载如果适用的话将在分类和分支执行阶段1111结束之前完成。第二指令1204,FIND_FORWARD_ANCHORED,进一步示出典型规则引擎的丰富词汇表。它是FIND_FIRST_FORWARD的变体,其变化之处在于为了搜索成功,匹配开始于start_offset处。
图13示出图12所示的微代码在图11所示的典型规则处理器的微体系结构内的执行。表701显示跨多个时钟周期的执行。为了简便起见,假定所有搜索指令都成功找到搜索寄存器中的指定模式。在一个实施例中,执行以流水线方式前进经过图11所示的4个阶段。通过使用间接指定,搜索指令的执行可使用之前紧邻的指令中计算的偏置。因此,指令1至8是在连续周期中执行的。指令8是取决于分别在时钟周期8和时钟周期9中计算的通用寄存器A和通用寄存器B的内容的比较结果的分支。分支在时钟周期11中进行并且指令执行在时钟周期14中完成。从而,用伪代码1201描述的复杂模式匹配表达式是通过使用典型规则处理器的丰富指令词汇在仅仅14个时钟周期中执行的。此实例示出典型规则处理器在执行包括文档、消息或分组的动态上下文搜索和分析的功能上的能力和效率。
状态机单元硬件的典型实施例以下描述状态机单元硬件的一个实施例。注意也可使用状态机单元硬件的其他实施例。
描述了允许状态机和有限状态自动机的高效实现和估值的状态机估值体系结构。在一个实施例中,装置采用了以可编程方式允许硬件中任意控制流程图的物理实现的方式利用电路来构建图的技术。该装置为多个状态机以及大型复杂状态机的实现提供高性能和紧凑的解决方案。该装置可用于经由输入数据流上的数千正则表达式的分级应用来进行数据的高效解析和估值。这种装置可以是用于正则表达式处理器的中央估值引擎。注意有限状态机单元的一个实施例被描述在2003年8月27日提交的题为“Method and Apparatus for Efficient Implementation and Evaluation of StateMachines and Programmable Finite State Automata(用于状态机和可编程有限状态自动机的高效实施和估值的方法和装置)”的美国专利申请No.10/650,364;以及与本申请同时提交的题为“__”的美国专利申请号No.__中,此处通过引用将这些申请包含进来。
图14从编程观点示出根据本发明的一个实施例的基本状态机估值构造块或有限状态自动机构造块(FSA构造块)。图14所示的FSA构造块1400包括允许FSA构造块完全可编程的多个寄存器。寄存器1401包含指定FSA的当前状态的节点元素。寄存器1402包含状态转换估值符号,在匹配该符号时状态将被转换。寄存器1403包含指定FSA的哪个状态被连接(即启用的状态连接)的状态转换连接控制矩阵。
最初节点处于一定状态。对于每个估值周期,输入(例如输入字节)1405被输入到状态转换动态触发计算1410,它将输入与寄存器1402中包含的状态转换估值符号相比较。比较信息被输入到状态转换互连和下一状态估值逻辑1415。然后根据寄存器1403中包含的节点连接,下一状态被计算和锁存,然后变成当前状态。即下一状态是用触发器、连接控制和当前状态比特来计算的。FSA构造块的体系结构允许每个时钟周期分析输入数据的一个字符,无需外部存储器。
图15示出根据本发明的一个实施例用于实现FSA构造块的逻辑电路。图15所示的逻辑电路1500可用于实现状态机体系结构,以实现带R个节点、R个符号和R^2个弧的非确定性有限状态自动机。在图15中,R被设置为变量M,硬件组织被设计和布局为可对任何M缩放。通过固定M的值并且提供适当级别的硬件,可实现具体带M个实例化的节点的FSA构造块。
节点元素N1-NM与互连1501完全连接。每个节点元素具有到其自身以及每个其他节点元素的弧或互连。因此,对于M=32,有32×32或1024个互连1501。类似地,对于M=16,有16×16或256个互连1501。
对于M=32,状态转换连接控制1502包括组织为32比特×32比特矩阵的1024比特。类似地,对于M=16,状态转换连接控制1502包括组织为16比特×16比特矩阵的256比特。行Y和列Z中的比特代表启用或禁用节点元素NY和节点元素Nz之间的互连的控制。状态转换连接控制1502启用或禁用节点元素N1-NM之间的互连1501的机制被实现为互连(例如导线)1501上的开关,并且开关被该互连的相关控制比特门控。这也可用与门逻辑来实现。
在此实施例中,状态转换估值符号1503的数目与机器中的状态的数目相同。对于M=32,有32个符号。对于M=16,有16个符号。每个符号可包括单个8比特字符值和比较操作符,以便输入数据被指定,以用于与8比特字符值相比较来计算状态转换动态触发器1504。在此实施例中,用于状态转换动态触发器1504计算的逻辑如下。输入数据的新字节被同时馈送到所有M个比较器中。M个匹配线的集合充当状态转换动态触发器1504。M再一次可以为16或32。
状态转换动态触发器1504管理节点元素N1-NM之间的值的更新和传送(在已启用的互连1501上)的机制在此实施例中被实现为单个与门逻辑。即,与门和或(OR)门协同起作用以启用和/或禁用互连1501。
数据传送单元1505动态配置和编程状态转换连接控制1502和状态转换估值符号1503。这允许了控制流程图结构或配置的范围的动态实现。在此实施例中,对于M=32,状态转换连接控制1502的比特矩阵可实现为各含32比特的32个寄存器。类似地,对于M=16,状态转换连接控制1502的比特矩阵可实现为各含16比特的16个寄存器。在此实施例中,对于M=32,状态转换估值符号1503的存储装置可实现为各含8比特的32个寄存器。类似地,对于M=16,状态转换估值符号1503的存储装置可实现为各含8比特的16个寄存器。
数据传送单元1505还提供对读写节点元素N1-NM的访问权限。对于M=32,节点元素可被视为32比特的逻辑寄存器。类似地,对于M=16,节点元素可被视为16比特的逻辑寄存器。数据传送单元1505执行加载和存储操作以便从所有这些寄存器中读取值并向这些寄存器中写入值。读写节点元素N1-NM的这一能力可用于允许数据传送单元1505与外部互连结构通信以把状态机构造块连接到其他这样的构造块,以便构造更大的状态机或图。数据传送单元1505在专用信号线上输出来自选中的节点元素的值,这些值可被发送到例如其他状态机(例如另一个FSA构造块)或外部互连结构。类似地,它在专用信号线上接收来自外部互连结构的值。这些值可被传送到选中的节点元素。
单个复位信号1507被馈送到装置的各种元件以将值清零。
在状态机估值开始之前,状态转换连接控制1502和状态转换估值符号1503应该已经被用期望的配置值编程。因此,分配给这些控制的存储装置中的信号值在状态机估值开始之前将会是稳定的。
在一个实施例中有控制状态机估值的开始的机制。在一个实施例中,对于M=32,开始状态选择控制1509包括32比特的寄存器。在一个实施例中,对于M=16,开始状态选择控制1509包括16比特的寄存器。此寄存器中的每个比特对应于一个节点元素。此寄存器中的任何数目的比特可被设为1(活动)。在状态机初始化时,对应于开始状态选择控制1509中的活动比特的节点元素将作为活动状态开始。
在一个实施例中,状态机估值的过程被确定估值周期的时钟1508调节。在一个实施例中,每个估值周期中输入数据的新字节被提供给装置,并且此字节被对照所有状态转换估值符号并行估值(在此实施例中,这是输入字节对8比特字符值的比较),这导致代表状态转换动态触发器1504的M个匹配线的集合的更新。这M个触发器1504以及对应于状态转换连接控制1502的M^2比特,与节点元素N1-NM中的当前状态值结合,以计算每个节点元素的下一个状态值。用于每个节点元素的下一状态的计算的逻辑方程如下如果状态转换动态触发器为T1至TM如果节点元素为N1至NM如果状态转换连接控制是比特矩阵CI,J,其中I=1,M且J=1,M则,给定节点元素NK的前一状态PSK,下一状态NSK如下NSK=OR( [PS2AND T2AND C2,K]……………………[PSIAND TIAND CI,K]……………………[PSMAND TMAND CM,K])从效果上来说,对于每个节点元素,下一状态计算是M项的大型或函数。每个项是通过将3个值与在一起来计算的,这三个值即一节点元素的前一状态值,对应的动态触发器,以及指示特定互连1501是否被启用的对应的连接控制比特。
一旦下一状态计算完成,节点元素就被用下一状态值更新,状态机完成单个估值周期。正如可由下一状态计算的逻辑方程所看到的,装置的估值周期时间是三级逻辑估值。第一级包括与门以计算触发器,第二级包括与门以把连接控制包括在内,最后是M个输入或门。此估值周期时间比管理商业微处理器的操作频率的周期时间短得多。
注意上述步骤序列代表单个逻辑估值周期中所需的计算。从物理上来说,附加流水线操作是可能的,以进一步提高操作频率。例如,状态转换动态触发的计算(给定输入数据的新字节)可与下一状态估值解耦。
在一个实施例中有控制状态机估值的停止的机制。对于M=32,接受状态选择控制1510包括32比特的寄存器。对于M=16,接受状态选择控制1510包括16比特的寄存器。此寄存器中的每个比特对应于一个节点元素。此寄存器中的任何数目的比特可被设置为1(活动)。一旦状态机进入这些状态中的任何一个(对应的节点元素变得活动),状态机即停止其估值。
前文提供了对单个FSA构造块的估值周期的描述。当这种FSA构造块经由外部互连结构耦合到其他状态机(例如另一个FSA构造块)时,将会导致额外的同步握手以允许各估值周期协作。
如上所述的基本FSA构造块可以按多种方式实现。详细描述的剩余部分将讨论针对解决多个问题的特定实施例。
如上文所讨论的,本发明的实施例提供固定大小的FSA构造块(即具有固定数目的状态的FSA构造块)来促进高效实现。在其他实施例中可实现不同大小的FSA构造块。但是,固定大小的FSA构造块的规则的、可重复的结构允许了在芯片上高效实现大量(例如1000个)FSA构造块。
固定大小的FSA构造块虽然较易实现,但却引起了如何针对解决状态数目大于FSA构造块的固定大小的RE的问题。对于本发明的一个实施例,FSA构造块的固定大小是根据特定问题空间来确定的,并且两个或多个FSA构造块被连接(缝合)以适应具有较大状态数目的RE。
对于一个实施例,按如下方式实现FSA构造块的缝合以解决状态数目过大的RE。RE被转换成句法树。然后句法树被分割成多个子树,每个子树的字符数目不超过FSA构造块的固定大小。句法树的这一划分可用多种公知的算法来实现。然后每个子树被转换成具有固定大小的FSA构造块可适应的状态数目的NFA。然后每个子树的NFA被实现在单独的FSA构造块上,然后每个单独的FSA构造块被缝合在一起以实现RE的估值。
根据问题空间中的RE的大小,多个FSA构造块可被群集在一起。例如,对于16个状态的固定大小FSA构造块,将16个FSA构造块群集在一起将会适应具有256个状态的RE。对于本发明的一个实施例,片上的约1000个FSA构造块被划分成各含16个FSA构造块的群组。通过将每个FSA构造块与其群组内的所有FSA构造块互连,避免了跨群组转换的时钟惩罚。
对于一个实施例,每个FSA构造块群组不与每个群组互连,相反群组被级联,并且某些群组“触发”一个或多个特定的其他群组。对于这种体系结构无法适应超大RE的一个实施例,采用了控制器来读取FSA构造块的状态并显式地写入转换状态。
如上所述,RE可能太大以至于不能被单个FSA构造块解决。相似地,有时RE小于FSA构造块的固定大小。对于一个实施例,两个或多个RE是用单个FSA构造块来解决的,如下所述。
对于一个实施例,可解决的RE的数目不被FSA构造块内实例化的RE的数目所限制。对于一个实施例,RE可被从规则存储器(例如传统存储器)中加载到FSA构造块中,该存储器可存储比硬件中实现的多得多的RE。将FSA构造块耦合到规则存储器允许了RE被存储在存储器中并且被用于对FSA构造块动态编程。
有时,到FSA构造块的输入数据是分段的,即输入数据的第一部分之后紧跟的是无关数据,其后是输入数据的剩余部分。为了针对解决此情况,本发明的一个实施例提供将部分上下文存储到上下文存储器并且在适当的时候访问部分上下文的能力。
对于本发明的一个实施例,FSA构造块包括计数器、指针和状态寄存器,以提供附加功能(例如除是否辨认出了模式之外)。例如,计数器可用于指示特定RE匹配的次数或实现更复杂的RE;指针可用于指示RE匹配的开始和结束位置;状态比特可用于指示RE搜索期间的各种事件。
系统图16示出根据本发明的一个实施例的FSA构造块,其中实现了多个特征来提供附加功能。图16所示的FSA构造块1600是16状态FSA构造块。FSA构造块1600包括由外部编程的开始偏置/结束偏置寄存器驱动的使能信号1615。即当接收输入数据流时,不必在流开始处着手估值。
估值的开始和结束点可被确定和编程以驱动FSA构造块1600的使能信号1615。时钟信号1608控制估值过程,重置信号1607重置FSA构造块(即将所有节点元素1616设为零)。开始状态寄存器1609被经由软件编程以指示16个状态中哪些最初是活动的。当初始时钟信号1608被接收到时,如果使能信号1615为高,则开始状态寄存器1609中包含的值被锁存到节点元素1616中。当输入字节1606被接收到时,它被与符号估值单元(SEU)1603的估值符号相比较。关于输入字节是否匹配的确定被转发到状态转换互连和下一状态估值逻辑(STINSEL)1617。然后在匹配时,根据编程到状态转换连接控制(STCC)寄存器1602中的节点连接,动态下一状态(DNS)1625被启用并且被下一状态确定逻辑(NSDL)1618用于确定下一状态。然后NSDL 1618在时钟周期结束时将下一状态锁存到节点元素1616。然后锁存后的值变成FSA构造块的当前状态,下一个输入数据字节被接收,估值继续。
符号估值单元根据本发明的一个实施例,SEU 1603包含多个寄存器和附属逻辑,以允许复杂RE的高效估值。
RE可被定义为采用范围而不是单个字符符号。例如,RE可引用a-z或0-9范围中的字符。如图16所示,SEU 1603包括两个范围寄存器,即低范围寄存器1620和高范围寄存器1621,以便为多个(例如达四个)范围分别指定低范围值和高范围值。输入字节1606和高低范围值被提供给范围检测逻辑1619,以确定输入是否在指定的范围内。此信息与输入字节1606和来自符号寄存器1622的编程的匹配符号一起被提供给符号匹配检测逻辑(SMDL)1622,该检测逻辑对照符号本身对输入字节1606估值。这允许了软件对范围、字符或其组合之上的状态转换编程。这是通过扩展字符定义(例如包括范围信息)并为字符定义提供额外空间来实现的。对于一个实施例,各含24比特的16个符号寄存器被实现,并且24比特中的12个被用于定义扩展字符,12个用于比特掩码(下文讨论)。在用于扩展字符的12比特中,8个被用于字符本身,四个被用于指定扩展字符是否具有范围。
SEU 1603包括符号掩码寄存器1623,以指示不会被比较的一个或多个特定比特。对于某些应用程序,掩蔽输入数据的比特(即对估值逻辑编程以使得特定比特不被考虑)可能效率更高。例如,ASCII提供8比特字符来表示字符a-z(小写)和A-Z(大写),其中第五比特指定大小写。如果RE采用a-z和A-Z范围,则它可通过忽略大小写(即掩蔽第五比特)来更高效地实现。即,通过掩蔽大小写比特(第五比特),将不必对小写实现比较并对大写实现单独比较,单个状态就可完成比较。
SEU 1603包括逻辑操作寄存器1624,该寄存器可用于在出现匹配符号时结合逻辑操作符指示状态转换。例如,RE可被编程以使得转换发生在估值的负极性而不是估值的正极性上(例如转换发生在“非(NOT)”匹配而不是匹配时)。对于一个这样的实施例,逻辑操作寄存器提供16比特(即每个状态一比特),以指定逻辑操作符“NOT”。
接受状态检测单元当DNS 1625被启用时,下一状态被检查以确定是否已达到接受状态。接受状态检测单元1610包括接受状态寄存器1626和接受状态检测逻辑(ASDL)1627。接受状态寄存器1626是用接受状态编程的。ASDL1627使用DNS 1625来确定是否到达了编程的接受状态,如果是的话,命中被记录在对应于接受状态寄存器1626的命中寄存器1628a中。然后命中寄存器记录命中的数目,此信息可经由寄存器读/写总线1628b供外部所用。根据本发明的一个实施例,ASDU 1610包括两个接受状态寄存器1626以帮助将两个RE封装到单个FSA构造块中。如上所述,状态总数不超过FSA构造块的固定的状态数目的两个或多个RE可被封装到单个FSA构造块中。每个RE可具有唯一的接受状态,因此对于每个被封装的RE应该在FSA构造块上实现一个接受状态寄存器。因为每个RE可能单独到达接受状态,因此对于每个接受状态寄存器应该实现一个对应的命中寄存器。对于图16所示的实施例,两个接受状态寄存器1626与对应的命中寄存器1628a和1628b一起被实现。为了保持灵活性,每个寄存器是完整的16比特寄存器,这允许了封装不同大小的RE。例如,12状态RE可与4状态RE一起被封装,或者极端情况下15状态RE可与1状态RE一起被封装。如果特定FSA构造块不被封装,则附加的接受状态寄存器和相应的命中寄存器不被使用。
匹配位置指针对于某些应用程序,确定匹配开始和结束的位置是有用的。为了实现这种确定,根据一个实施例,开始位置寄存器1629和结束位置寄存器1630以及字节计数1631被实现在FSA构造块中。当估值开始时,字节计数1631被提供,当下一状态的转换发生时(例如匹配被启动时),该点的字节计数的值被锁存到开始位置寄存器1629中。当随后DNS 1625被启用时,确定是否达到接受状态(例如确定匹配),该点字节计数1631的值被锁存到结束位置寄存器1630中,从而提供匹配的开始和结束位置。
状态转换计数器单元FSA构造块1600包括状态转换计数器单元(STCU)1632,该单元包括多个寄存器和附属逻辑以允许复杂RE的高效估值。例如,计数器允许不仅在接收到指定符号时采用状态转换而且在接收到指定符号指定次数时也采用状态转换的RE被编程。因此,例如,RE可被编程为ab{2,4}c,它在a被接收到然后“b”出现二至四次然后是“c”(即abbc、abbbc和abbbbc)时指示匹配。计数器触发状态(CTS)寄存器1633可用计数器1634的触发状态(例如状态1,对应于“b”的状态)来编程。对于此例,CTS寄存器1633被编程为状态1,计数器下方值(CLV)寄存器1635被编程为2(即对于匹配的最少出现次数),并且计数器上方值(CUV)寄存器1636被编程为4(对于匹配的最大出现次数)。CTS1633、CLV 1635和CUV 1636的编程值与计数器1634的值一起,被输入到计数器逻辑1637。当RE的条件被满足时,计数器逻辑输出1638将被激活。从一个状态到下一状态的转换是由计数器逻辑输出1638控制的,因此直到计数器逻辑输出为高才会发生转换。
对于一个实施例,CTS寄存器1633可用多个触发状态来编程以实现更复杂的RE。例如编程为a(b|c){2,4}的RE将会要求把对应于“b”和“c”(即状态1和2)的状态编程为触发状态。
对于一个实施例,CTS 1633的触发状态可被编程到RE的接受状态,以对RE命中的次数计数。
为了实现缝合,FSA构造块1600包括缝合输出控制单元(SOCU)1639,该单元带两个主叫呼出状态(COS)寄存器1640和两个对应的主叫目标FSA(CTF)寄存器1641。每个COS寄存器被以缝合到另一FSA构造块的状态编程。对应的CTF寄存器1641指示缝合到哪个FSA构造块(即被叫FSA构造块)。缝合触发计算逻辑(STCL)1642接收分别来自COS寄存器1640和对应的CTF寄存器1641的缝合状态信息和目标FSA构造块信息,并且利用该信息激活FSA开始输出1643。FSA开始输出1643连接到并激活被叫FSA构造块的FSA开始输入1644。在被叫FSA构造块处,接收状态选择器(RSS)1645被编程,以确定访问哪个被叫接收状态(CRS)寄存器1646来获得被叫接收状态。然后NSDL 1618使用选中的CRS寄存器1646中的值、开始状态1609和DNS 1625来确定被叫FSA构造块的下一状态,然后该状态被锁存到节点元素1616。对于一个实施例,选中的CRS寄存器1646中的值、开始状态1609和DNS 1625被进行或运算以确定下一状态。
类似地,当被叫FSA构造块达到接受状态寄存器1626中包含的接受状态时,它通过参考接受的目标FSA(ATF)寄存器1647来确定返回到哪个FSA构造块。ASDL 1627使用接受状态寄存器1626中的值和ATF寄存器1647中的值来确定何时激活缝合返回输出(SRO)1648。SRO 1648连接到并激活目标FSA构造块的缝合返回输入(SRI)1649,估值在目标FSA构造块处继续。
根据本发明的一个实施例,FSA构造块可被互连以提供FSA构造块缝合。每个FSA构造块可经由n个内部连接来连接到其自身。
图17示出根据本发明的一个实施例的称为RE处理器的片上状态机单元。图17所示的RE处理器1700包括多个FSA构造块1705,这些FSA构造块可如上所述被互连在群组中。对于一个实施例,FSA构造块1705的数目可为约1000-2000。RE处理器1700还包括提供输入数据到FSA构造块1705的自动机控制器1710。自动机控制器1710将FSA构造块1705耦合到规则存储器1715和上下文存储器1720以及片上总线和接口1725,用于通过片外接口1735与片外存储器1730和其他系统设备通信。
上下文存储器如上所述,如果输入数据被分段,则FSA构造块的状态(上下文)应该被保存以便在输入数据继续开始时继续开始适当的估值。FSA构造块的上下文包括节点元素值、计数器值并且可能包括位置寄存器。在继续开始输入数据时,保存的上下文存储器被加载到FSA构造块,以便估值可继续。根据一个实施例,在输入数据中断时,能够读写FSA构造块的自动机控制器1710从FSA构造块的适当寄存器读取上下文,并且将上下文存储在片上上下文存储器1720中。在输入数据继续开始时,自动机控制器1710将来自上下文存储器1720的上下文加载到FSA构造块。上下文数据的量相对于FSA构造块的编程的寄存器来说较小。因此,通过实现片上上下文存储器,可以高效处理多个同时发生的分段RE估值。
规则存储器最初,FSA构造块是用定义有关RE的规则来编程的。在没有更多规则的情况下,FSA构造块只能对那些特定RE估值。但是应用程序常包含比FSA构造块实际能实现的更多的RE。本发明的实施例提供完全可编程和可重编程的FSA构造块。对于一个实施例,附加规则被存储在规则存储器1715中。自动机控制器1710将规则从规则存储器1715移动到适当的FSA构造块中,反之亦然。即,根据外部提供的指令,自动机控制器1710用存储在规则存储器1715中的规则对特定FSA构造块重编程。在片上存储附加规则允许了FSA构造块的快速重编程。可实际存储在片上的规则量至少是片上FSA构造块中实现的规则量的几倍。
将FSA构造块互连在群组中允许了上下文和规则信息被并行写入FSA构造块或者从FSA构造块中并行读出。这种互连还允许了通过同时对多个数据输入流估值来增加吞吐量。例如,如果应用程序只要求可用FSA构造块的一部分,则有关规则可通过多个数据输入流来重复加载到可用FSA构造块和被估值的RE中。
虽然许多本发明的许多变更和修改无疑会变得对已阅读过上述描述的本领域普通技术人员显而易见,但是应当理解,任何通过例证方式示出和描述的特定实施例都不应被视为限制性的。因此,对各种实施例的细节的引用不是用来限制权利要求书的范围的,权利要求书本身只陈述被视为对本发明必要的特征。
权利要求
1.一种可编程规则处理器,包括通用寄存器文件;指令序列发生器,用于提供指令;耦合到所述通用寄存器文件的解码器,用于解码由所述指令序列发生器指定的指令集合;以及耦合到所述解码器并且具有状态机寄存器和耦合到所述状态机寄存器的状态机执行硬件的状态机单元,所述状态机寄存器用于存储一个或多个状态机,所述状态机执行硬件用于响应于对所述指令集合中的一个或多个指令的执行并且根据来自所述解码器和所述通用寄存器文件之一或两者的信息对所述一个或多个状态机估值。
2.如权利要求1所述的可编程规则处理器,其中所述被估值的状态机是有限状态自动机,用于检测输入数据上的正则表达式。
3.一种可编程规则处理器,包括通用寄存器文件;指令序列发生器,用于提供指令;耦合到所述通用寄存器文件的解码器,用于解码由所述指令序列发生器指定的指令集合;搜索寄存器和搜索执行硬件,所述搜索执行硬件耦合到所述多个搜索寄存器并被耦合以接收来自所述解码器和所述通用寄存器文件之一或两者的搜索参数,用于响应于对所述指令集合中的一个或多个指令的执行而在所述搜索寄存器中的内容上执行一个或多个上下文搜索;以及耦合到所述解码器并且具有状态机寄存器和耦合到所述状态机寄存器的状态机执行硬件的状态机单元,所述状态机寄存器用于存储一个或多个状态机,所述状态机执行硬件用于响应于对所述指令集合中的一个或多个指令的执行并且根据来自所述解码器和所述通用寄存器文件之一或两者的信息对所述一个或多个状态机估值。
4.如权利要求3所述的处理器,其中,或者所述搜索执行硬件执行一个或多个上下文搜索而得到的结果随后被所述状态机单元用于对至少一个状态机估值,或者所述一个或多个状态机的估值结果随后被所述搜索执行硬件用于执行至少一个上下文搜索。
5.如权利要求3所述的处理器,其中,所述搜索执行硬件响应于对一个或多个搜索指令的执行,经由并行模式匹配执行所述一个或多个上下文搜索中的至少一个,所述搜索指令指定了所述一个或多个模式搜索并将一个或多个模式提供给所述搜索寄存器中的内容。
6.如权利要求5所述的规则处理器,其中所述搜索执行硬件包括耦合到所述多个搜索寄存器的搜索阵列,其中所述多个搜索寄存器中的内容被复制并存储在所述搜索阵列中;以及耦合到所述搜索阵列的分类器,用于响应由一个或多个搜索指令指定的信息执行一个或多个操作。
7.如权利要求3所述的处理器,其中所述状态机执行硬件包括状态机估值单元。
8.如权利要求3所述的规则处理器,还包括存储器,用于存储一个或多个搜索指令,所述搜索指令将被应用到所述搜索寄存器中的数据,或将被应用以被所述状态机执行硬件估值。
9.如权利要求3所述的规则处理器,还包括指令序列发生器,用于将一个或多个搜索指令应用到所述搜索执行引擎和所述状态机执行硬件。
10.如权利要求3所述的规则处理器,其中至少一个搜索指令包括字段,该字段指定用于控制所述搜索的参数或一个指针,该指针指向存储用于控制所述搜索的参数的存储器。
11.如权利要求10所述的规则处理器,其中所述指针指向通用寄存器。
12.如权利要求3所述的可编程规则处理器,其中被估值的状态机是有限状态自动机,用于检测输入数据上的正则表达式。
13.如权利要求3所述的规则处理器,其中一个或多个搜索指令中的至少一个指定要对照所述多个搜索寄存器中的内容而搜索的模式,以及零个或多个搜索参数。
14.如权利要求13所述的规则处理器,其中一个参数指定所述模式中将被掩蔽的部分,以允许对照所述搜索寄存器中的内容而搜索所述模式的子集。
15.如权利要求14所述的规则处理器,其中所述模式中将被掩蔽的部分是由掩码向量来指定的,所述掩码向量掩去所述模式中的特定字节。
16.如权利要求14所述的规则处理器,其中所述零个或多个参数指定组成所述搜索寄存器内的内容的范围的开始和结束位置,所述搜索执行引擎将把搜索限制在所述范围内。
17.如权利要求3所述的规则处理器,其中所述一个或多个搜索指令指定至少一个模式、范围控制和程序控制流。
18.一种可编程规则处理器,包括通用寄存器文件;多个搜索寄存器;多个状态机寄存器;多个执行单元;指令序列发生器,用于提供指令;解码器,其耦合到所述通用寄存器文件、所述多个搜索寄存器、所述多个状态机寄存器和所述多个执行单元,用于解码由所述指令序列发生器指定的指令集合,并且基于所述指令集合中的每个指令的操作码,将解码后的指令提供给一个或多个执行单元,以及所述多个搜索寄存器和多个状态机寄存器中的一个或多个,以用于由其执行。
19.如权利要求18所述的处理器,其中所述多个执行单元之一包括状态机估值单元。
20.如权利要求18所述的可编程规则处理器,其中所述执行单元中的至少一个对由所述状态机寄存器中的数据表示的状态机估值。
21.如权利要求20所述的可编程规则处理器,其中所述被估值的状态机是有限状态自动机,用于检测输入数据上的正则表达式。
22.如权利要求18所述的处理器,其中所述多个执行单元中的一个包括分类阵列。
23.如权利要求18所述的处理器,其中所述执行单元中的两个包括状态机估值单元和搜索执行硬件,并且其中,或者所述搜索执行硬件处理数据而得到的结果随后被所述状态机估值单元用于对至少一个状态机估值,或者所述一个或多个状态机的估值结果随后被所述搜索执行硬件用于执行至少一个搜索。
24.如权利要求18所述的处理器,还包括分支单元,用于根据涉及所述状态机寄存器和所述搜索寄存器中的一个或多个的数据处理的结果,分支到另一个包括一个或多个指令的集合。
25.一种用于利用规则处理器执行上下文搜索的过程,所述过程包括从所述规则处理器上的存储器中取出第一规则;解码所述第一规则以标识搜索参数是位于所述第一规则中还是所述规则处理器中的通用寄存器文件中;利用从所述第一规则和所述通用寄存器文件之一或两者获得的搜索参数,在所述规则处理器的多个搜索寄存器中的值上执行一个或多个搜索操作,所述多个搜索寄存器在其中存储内容;生成执行所述一个或多个搜索操作的搜索结果;从所述存储器取出第二规则;根据从所述第一规则和所述通用寄存器文件之一或两者获得的参数,利用所述规则处理器中的状态机执行硬件,就所述搜索结果标识的数据对一个或多个状态机估值。
全文摘要
本发明公开了一种规则处理器和使用该处理器的方法。在一个实施例中,所述规则处理器包括通用寄存器文件、指令序列发生器、耦合到所述通用寄存器文件的解码器,以及耦合到所述解码器并且具有状态机寄存器和耦合到所述状态机寄存器的状态机执行硬件的状态机单元,所述指令序列发生器用于提供指令,所述解码器用于解码由所述指令序列发生器指定的指令集合,所述状态机寄存器用于存储一个或多个状态机,所述状态机执行硬件用于响应于对所述指令集合中的一个或多个指令的执行并且根据来自所述解码器和所述通用寄存器文件之一或两者的信息对所述一个或多个状态机估值。
文档编号G05B19/042GK1759393SQ200480006397
公开日2006年4月12日 申请日期2004年1月9日 优先权日2003年1月9日
发明者哈施瓦翰·沙朗帕尼, 玛诺耶·卡里, 肯特·菲尔得恩, 理耶施·帕提尔, 扎吉·肯尼迪·阿罗拉 申请人:思科系统公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1