基于存储器层次的有限自动机的编译的制作方法_4

文档序号:9263437阅读:来源:国知局
的绝对地址或指向下一节点N2 510和N3 512的指针的索引或偏移。替代性地,也可以使用用于直接或间接地指示该多个下一节点的下一节点地址的其他合适的形式。
[0108]该隐含的理解可以包括配置行走器320以基于包括在该分离节点元数据之内的一个特定的条目位置中的节点元数据来选择多个下一节点中的一个给定的下一节点。编译器306可以被配置成用于生成该分离节点元数据,包括一个该给定的下一节点在所指定的条目位置的指示。于是,编译器306可以使用如下隐含的理解来生成NFA图形504:—个给定路径,如上方ε路径530a,在分离节点NI 508处将被行走器320选择。
[0109]图5B是用于以一个有效载荷542行走图5A的NFA图形的处理周期的示例实施例的一个表538。应当理解的是,一个处理周期可以包括一个或多个时钟周期。
[0110]如在表538中所示的,处理周期540a_h可以包括在当前偏移532用来自有效载荷542的一个区段行走一个当前节点530以确定一个匹配结果534并基于匹配结果534确定行走行动536。在该示例实施例中,节点NO 506可以具有字符节点类型。例如,节点NO 506可以是一个字符节点,该字符节点被配置成用于匹配在输入流中的字符“h”。在该示例实施例中,行走器320可以在处理周期540a中在当前偏移520a处用区段522a ( S卩,“h”)行走起始节点NO 506。
[0111]当区段522a匹配在节点NO 506处的字符“h”时,行走器320可以确定匹配结果534是肯定匹配结果。如经由与起始节点NO 506相关联的元数据(未展示)通过编译器306指定的,行走器320可以在正向方向上行走并提取由与节点NO 506相关联的元数据指示的下一节点并且可以将当前偏移从520a(即,“O”)增大到520b( S卩,“I”)。通过节点NO506指示的下一节点在该示例实施例中是分离节点N1508。于是,行走器320采取处理周期540a的行动536,该行动包括将有效载荷542中的当前偏移更新到“I”并且转换到分离节点N1508。转换可以包括提取(在此也被称为加载)分离节点NI 508。
[0112]由于分离节点NI 508呈现多个转换路径选项,如ε路径530a和530b,处理周期540b的行动536可以包括选择上方ε路径530a并提取与有效载荷542无关的节点Ν2 510而不从有效载荷542进行消耗(B卩,处理)。因为没有通过分离节点NI 508执行匹配功能,所以当前偏移/区段532没有变化,并且由此对于处理周期540b而言有效载荷没有被消耗(即,处理)。
[0113]因为分离节点NI 508呈现多个路径选项,行动536可以包括存储未探索的上下文,如通过存储节点N3 512和当前偏移520b (即,“I”)的一个间接或直接的标识符。所选的转换路径在此可以被称为当前的或活动的线程,并且所存储的每个未遍历的转换路径在此可以被称为存储线程。每个线程可以通过一个相应的节点标识符和在有效载荷中的偏移来标识。于是,未探索的上下文可以标识一个未探索的线程(即,路径)。
[0114]存储该未探索的上下文可以使得行走器320能够记得返回到节点N3 512以便在沿所选的部分匹配路径发生否定匹配结果的事件中在有效载荷542中的偏移520b处用区段“I”行走节点N3 512,例如,如果该否定匹配结果是在节点N2 510处或沿从节点N2 510延伸的路径上的节点处确定的。根据在此披露的实施例,未探索的上下文可以用一个丢弃未探索的处理(DUP)指示符来标记,该指示符指示在沿所选的转换路径标识一个用于图样502的最终匹配的事件中行走器320是丢弃还是处理该未探索的上下文。
[0115]例如,基于到达指示在输入流中对于图样502的最终(即,完整或完全)的匹配的标记节点N5 515,行走器320可以采用该DUP指示符来确定是否通过在偏移520b处以区段“X”行走节点N3 512来处理该未探索的上下文,以努力确定NFA图形504的匹配图样502的另一个路径,或者是否丢弃该未探索的上下文。用DUP指示符标记该未探索的上下文可以包括以任何合适的方式标记该未探索的上下文,如通过将与该未探索的上下文相关的一个位或字段设定为真,以表示堆栈条目的所希望的处理,或者设定为假,以表示堆栈条目的所希望的丢弃。
[0116]一个存储线程是否被遍历可以通过编译器306来确定。例如,编译器306可以控制是否对应于每个节点的元数据来配置一种设定从而设定该DUP指示符。替代性地,编译器306可以配置一个包括在与该有限自动机相关联的全局元数据中的全局设定,指定所有存储线程都需要被遍历,从而使得所有可能的匹配能够得到标识。
[0117]在该示例实施例中,ε转换路径530a的选择可能造成检测到在节点Ν2 510或在当前线程的一个后续节点如N4 514处的匹配失败。于是,如果检测到匹配失败,则用于ε转换路径530b的存储线程可以被遍历。替代性地,如果由编译器306指定,ε转换路径530b可以被遍历,而无论遍历ε转换路径530b是否造成检测到匹配失败。
[0118]存储该未遍历的转换路径可以包括在一个堆栈(如图4的运行堆栈460)中推送一个条目,这是通过与在该条目中的当前偏移522b的指示相关联地存储下一节点N3 513的一个标识符。下一节点N3 513的标识符可以是一个值、指针或该下一节点的任何其他合适的指示符。偏移的值可以是一个数值、指针或标识区段516在有效载荷542中位置的任何其他合适的值。
[0119]根据该示例实施例,基于选择上方路径(即,ε转换路径530a),行走器320可以提取节点N2 510并且尝试将在当前偏移520b (即,“I”)处的区段522b (即,“x”)与处理周期540c中节点N2 510的元素“a”进行匹配。因为“x”并不匹配节点N2 510处的元素“a”,处理周期540c的行动536可以包括从运行堆栈460弹出一个条目。弹出的条目544b可以是一个最近弹出的条目,如在该示例实施例中指示节点N3 512和偏移520b (即,“I”)的一个存储条目544a。
[0120]行走器320可以转换并且行走节点N3 512并且用在有效载荷542中偏移520b处定位的区段“X”。于是,处理周期540d展示了匹配结果534对于处理周期540d是肯定的。处理周期540d的行动536可以包括将当前偏移更新到偏移520c并且转换回到分离节点NI508,该节点可以是由节点N3 512指示的下一节点。
[0121]因为所有从分离节点508的弧线转换都是ε转换,所以行走器320可以再次选择该多个路径选项中的一个路径,并且不对来自有效载荷542的一个区段进行消耗(即,处理),由于当前偏移对于处理周期540e没有更新。在示例实施例中,行走器320再次选择ε转换路径530a。于是,行走器320通过在运行堆栈460上推送节点N3512和当前偏移(现在为520c (即,“2”))再次存储一个线程。如对于处理周期540f所示的,行走器320提取节点N2 510并将在偏移520c ( S卩,“2”)处的区段522c (即,“a”)与节点N2 510的元素“a”进行匹配。因为“a”在节点N2 510处匹配,行走器320将当前偏移更新到520d( SP,“3”)并且转换到节点N4 514,该节点由如通过编译器306配置的节点N2 510元数据(未展示)指定。例如,N2 510元数据可以指定从一个给定节点如节点N2 510经由与给定节点N2 510相关联的下一节点地址(未展示)到下一节点如节点N4 514的转换511。根据在此披露的实施例,该下一节点地址可以被配置成用于标识该下一节点和该多个存储器456中的编译器306将该下一节点分布到其中用于存储的一个给定存储器。
[0122]于是,对于处理周期540g,行走器320可以提取下一节点N4514和在偏移520d处的下一个区段522d(即,“b”)。因为“b”在节点N4 514处匹配,行走器320可以转换到下一节点N5 515。节点N5515是与一个指示符相关联的标记节点,该指示符表示与该输入流中的正则表达式图样542的一个最终(B卩,完全或完整)的匹配。由此,对于处理周期540h,行走器320可以不继续沿当前路径行走并且通过在匹配结果缓冲器466中存储一个条目来报告该最终匹配。行走器320然后可以对运行堆栈460检查存储线程并且如由相应的DUP指示符所指示的那样要么丢弃所存储的线程要么激活它们。于是,行走器320弹出标识节点N3 512和偏移520(即,“2”)的条目,并且根据与所弹出的条目相关的DUP指示符来确定是通过以在偏移520c处的区段522c行走节点N3 512来激活存储的线程还是丢弃所存储的线程。
[0123]在此披露的实施例可以由于以上披露的组合的DFA和NFA类型的处理而能够获得优化的匹配性能。例如,以上披露的实施例可以减少在NFA处理中的误报的数目,因为NFA处理可以是基于经由DFA处理标识的部分匹配。另外,因为在此披露的实施例包括每规则(即,每图样)NFA,这些NFA可以通过DFA处理进行标识,在此披露的实施例进一步优化匹配性能。
[0124]如以上所披露的,DFA 312是一个统一的DFA并且该至少一个NFA 314各自是一个每图样NFA。通过HFA 110使有效载荷走过该统一的DFA 312可以被认为是标记图样的起始点(中间匹配)的一个第一解析块并且对可能从该标记继续行走的该至少一个NFA 314提供该起始点以确定一个最终匹配。例如,基于由穿过一个统一的DFA 312处理一个输入流的有效载荷的多个区段而确定的部分匹配结果,行走器320可以确定规则集310的给定数目的规则(即,图样)需要被进一步处理,并且HFA 110可以产生可能被变换为给定数目的NFA行走的图样匹配结果,因为该至少一个NFA 314各自是一个每图样NFA。
[0125]图6是行走器320的一个环境600的示例实施例的框图600。一个数据包1la输入流可以被接收602并且可以包括数据包616a-f,这些数据包可以是来自不同流,如一个第一流614a和一个第二流614b。例如,数据包Pl 616a、P4 616d、和P6 616f可以是在第一流614a中的数据包,而数据包P2 616b、P3 616c、和P5 616e可以属于第二流614b。处理内核603可以是安全装置102的通用处理器内核,如以上参考图1所披露的,该安全装置可以被配置成用于执行处理数据包1la的高层协议并且可以被配置成用于是该图样匹配方法分流到HFA 110和HNA108。
[0126]数据包1la可以被转发604到HFA 110并且行走器320可以使这些数据包1la的区段走过该统一的DFA,如图3A的统一的DFA312,以确定在该输入流中的正则表达式图样304的部分匹配。行走器320可以被配置成用于转发606这些部分匹配的结果,这些部分匹配的结果可以标识数据包1la的区段的偏移和每图样NFA的节点,如该至少一个NFA314,以通过HNA 108来进行这些部分匹配,该HNA 108可以基于HFA 110的DFA处理的部分匹配结果来行走该至少一个NFA314,因为这些部分匹配结果可以与数据包1la中的相应数据包一起被转发608到HNA 108。
[0127]HNA 108可以允许确定部分匹配结果618c、618b、和618a形成对该输入流中的这些正则表达式图样304中的一个给定的正则表达式图样的一个最终(S卩,完整的)匹配。例如,通过间接地经由处理内核603或直接地从HFA 110,从HFA 110转发606这些HFA部分匹配结果到HNA 108,每个通过HFA 110部分匹配的数据包可以使得HNA108能够使该部分匹配前进,因为行走器320可以用来自HFA 110的“提示”或起始信息使数据包1la的区段走过该至少一个NFA 314。
[0128]例如,如以上参考图4披露的,输入堆栈458可以包括至少一个工作,如该至少一个指令453中的SI 459a、S2 459b、或S3 459c,用于通过HNA 108进行处理。该至少一个指令的该至少一个工作可以各自属于一个相同的给定的有效载荷,如有效载荷462,该有效载荷由HFA 110处理。可以基于由HFA 110 “预筛选”的数据包的此类“提示”或起始信息可以包括NFA开始节点以及相应的有效载荷区段的偏移,用于以一个每图样NFA行走,如以上所披露的。于是,行走器320可以确定对于可以从HNA 108转发到处理内核603的数据包1la和可以在适当时作为网络中的数据包1lb然后被转发612的数据包1la的最终匹配结果610。
[0129]除了可以减少NFA处理的误报数目的通过HFA 110进行的此类数据包预筛选之夕卜,在此披露的实施例可以通过将每个每图样NFA的节点基于节点局域性分布到在一个存储器层次中的多个存储器来进一步优化匹配性能。由于每个NFA可以是一个每图样NFA,在此披露的实施例可以基于如下理解有利地将每个每图样NFA的节点分布到在一个层次中的多个存储器:规则(即,图样)越长,从该规则的结束部分生成的节点需要被访问(即,行走或遍历)的可能性就越小。通过将该每图样NFA的每个的更早的节点存储在相对更快的(即,更高性能)的存储器中,在此披露的实施例可以进一步优化匹配性能。应当理解的是,因为此类节点分布可以是基于层级到存储器映射,所以节点可以有利地基于所映射的层级来分布,从而能够采用优化匹配性能的任何合适的分布。
[0130]如以上所披露的,该至少一个NFA 314(如图5A的每图样NFA504)可以被存储在至少一个存储器中,如图1的存储器104或图4的图形存储器456。根据在此披露的实施例,行走器320的匹配性能可以基于智能编译器306有利地跨可以包括在一个存储器层次中的多个图形存储器的该至少一个存储器456来分布该每图样NFA 504的节点来进行优化。
[0131]例如,行走器320的匹配性能可以是基于将连续的节点(如图5A的每图样NFA504的区段509的节点NO 506、NI 508、N2 510和N3 512)存储在一个更快性能的存储器中来进行优化,该存储器相对于可以在存储器层次中映射到更低层级的另一个存储连续节点N4 514和N5 515的存储器映射到一个更高层级。由于NFA 504是从单个图样(如图样502)生成的一个每图样NFA,NFA 504与从其他图样生成的其他NFA分离并且因此在此披露的实施例可以是基于对该每图样NFA的节点的所识别的局域性并不存在于一个统一的NFA的节点中。
[0132]在此披露的实施例可以是基于以下理解,即,一个每图样NFA图形(如每图样NFA图形504)的更早的节点(如节点NO 506、NI 508、N2 510和N3 512)可以具有比节点N4514和N5 515更高的被遍历的可能性,因为节点N4 514和N5 515是朝向该规则(S卩,图样)502的结束处定位的并因此要求该有效载荷中的更多得到匹配以便进行行走(即,遍历)。于是,一个每图样HFA (如NFA 504)或其他任何合适的每图样NFA图形的更早的节点可以被认为是与仅在出现图样完整匹配的事件中被访问的“低触摸”节点相比由于误报可以被更频繁访问的“高触摸”节点。
[0133]根据在此披露的实施例,编译器306可以基于对每个每图样NFA中的哪些节点被认为是“高触摸”节点而哪些节点被认为是“低触摸”节点的理解将每个每图样NFA的节点分布到在一个层次中的存储器。这种理解可以被用于通过将这些节点分布到在一个存储器层次中的存储器来“预高速缓存”(即,静态存储)每个每图样NFA的节点,从而允许改进的匹配性能。例如,“高触摸”节点可以基于以下理解被分布到更快的存储器:“高触摸”节点由于其在该每图样NFA中的局域性将被更频繁地访问(即,行走或遍历)。
[0134]—般而言,基于一组正则表达式图样生成的一个统一 NFA的正则表达式访问图样可以是随机的,因为这种访问图样可以是基于具体的有效载荷。因此,正则表达式访问图样的历史无法用于预测进一步的正则表达式访问图样。例如,高速缓存一个统一的NFA的最近遍历的节点不能对行走器提供性能收益,因为在该统一的NFA内访问的下一节点可能不是所高速缓存的节点。
[0135]图7是编译器306的一个环境700的实施例的框图。如以上所披露的,编译器306可以被称为智能编译器,该智能编译器可以被配置成用于通过标识规则集310的可能最好适合DFA或NFA处理的部分来将规则集310
当前第4页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1