Hyperscan 5.0.0 版本已发布

Hyperscan 5.0.0 版本已于2018年7月9日在Github ( https://github.com/intel/hyperscan ) 上发布。这一新版本主要涉及3个改进:
一是加入Hyperscan/libpcre混合库,支持所有PCRE语法特性;二是加入“逻辑组合”新特性,满足对多规则进行自定义的逻辑组合匹配的需求;三是加入Hyperscan工具对Windows操作系统的支持(包括win32/64平台)。

混合库Chimera

o 特性概要:

该库有效整合Hyperscan与libpcre,旨在支持PCRE完整语法的同时,亦能获益于Hyperscan的高性能优势。对于任何覆盖PCRE所有语法的目标规则集,Chimera对其同时进行Hyperscan与PCRE编译,得到混合database,运行时根据Hyperscan本身对具体规则语法的支持程度,来决定是否用Hyperscan直接进行匹配验证,亦或先扮演过滤角色,由PCRE进行最终匹配验证。

o 应用要点:

Chimera库提供与原生Hyperscan库类似的编译时期和运行时期API。Chimera被设计为和PCRE有相同的匹配行为,包括了贪婪和非贪婪,以及捕获机制等等。同时,Chimera和PCRE一样会同时返回匹配的起始位置和结束位置。与Hyperscan返回所有的匹配位置不同,Chimera只返回无重叠区域的匹配区间。例如,规则 /foofoo/ 在语料 “foofoofoofoo” 中返回的匹配区间仅为(0, 6) 和 (6, 12)。值得注意的是,Chimera对正则语法的支持虽然更加完善,但其匹配性能相较纯Hyperscan而言仍会有所下降,我们建议只在需要对PCRE语法进行完全支持的情况下使用Chimera,而对于Hyperscan本身足够应付的场合仍沿用Hyperscan库以获得高性能表现。

规则“逻辑组合”

o 特性概要:

该特性提供了新的规则使用场景:对于一组规则来说,用户可能关心部分规则的匹配,也可能需要部分规则不被匹配,单个规则有自己的逻辑语义,而整组规则的逻辑组合后的整体匹配行为,才是用户所需要的结果。我们为规则的逻辑语义定义了3种逻辑操作符,即常见的 “NOT”,“AND”,“OR”。规则的逻辑组合用中缀表示法来书写,它包含操作符,操作子,和小括号。操作子是规则ID,定义在别处,操作符为!(NOT),&(AND),|(OR)。例如 ((301 OR 302) AND 303) AND (304 OR NOT 305) 可表示为((301 | 302) & 303) & (304 | !305)。操作符优先级为! > & > |。

o 应用要点:

逻辑组合表达式的匹配仍然沿用Hyperscan的编译和运行时API,只是需要对其设置新的标志位HS_FLAG_COMBINATION来确指。同时,逻辑组合表达式和其内部操作子对应的规则必须同时进行编译。在执行逻辑组合的匹配过程时,每个内部操作子对应规则的匹配位置仍然会被正常报告,在这些位置中,一旦逻辑组合的布尔值为TRUE,组合本身也会在当前位置报告成功匹配。对于只关心逻辑组合结果的情况,标志位HS_FLAG_QUITE可用来取消逻辑组合内部子规则的匹配报告。

Windows支持:

Hyperscan库,包括基本测试工具hsbench,hscheck,hscollider以及hsdump目前可以在Windows8或Windows更新版本上编译和运行,编译工具为Intel C++ Compiler或者Visual Studio 2017。需要注意的是,为了在Windows上正常支持Ragel,用户可能需要借助Cygwin来进行源码构建。
优化了编译阶段无向图的实现,使得图拷贝的开销减少,提升了规则的编译效率。

Bugfix:

o Issue #86: 为安装的PCRE包提供hscollider支持。

原文地址:DPDK开源社区

发表评论

电子邮件地址不会被公开。 必填项已用*标注