Hyperscan4.4.0 版本已于2017年1月20日在Github(https://github.com/01org/hyperscan)上发布。在最新版本中,我们增加了一些新功能并在原有基础上对编译和匹配性能进行了优化。具体如下:
添加了“Fat Runtime”功能
Hyperscan在匹配过程中大量使用了Intel指令集来加速性能。Hyperscan匹配时采用的指令取决于运行平台对指令集的支持程度。我们增加了“Fat Runtime”功能来简化用户编译流程,提升了跨平台编译的灵活性。这个功能在编译时将同时生成多个指令集版本的运行代码。在运行时利用GCC 提供的“ifunc”属性动态选取最适用于当前平台的运行代码。目前“Fat Runtime”功能只支持Linux系统,且在支持的情况下被默认开启。
添加了hs_valid_platform() API
Hyperscan要求处理器至少支持SSSE3指令。新版本中增加了新的API “hs_valid_platform()”来帮助用户检验当前处理器是否满足Hyperscan的最低要求。
添加了“hsbench” 性能测试工具
新版本中增加了官方的性能测试工具“hsbench”。用户可以将规则及匹配数据作为输入,利用此工具快速测出Hyperscan的匹配性能。“hsbench” 简化了性能测试的流程,提供了较为精确的性能数据。
NFA (Nondeterministic Finite Automaton) 优化
添加了64 比特数据宽度的NFA类型。在64位处理器上使用了通用寄存器实现,而在32位处理器上通过SSE寄存器来实现。
DFA (Deterministic Finite Automaton) 优化
提升了McClellan DFA 的匹配性能。
添加了新的DFA引擎类型(“McSheng”)。McSheng同时结合了现有的两种DFA类型McClellan和Sheng的算法,提升了部分规则的匹配性能。
Small Write DFA是在块模式下针对少于64字节匹配数据的引擎。新版本中减少了Small Write DFA的空间开销。
纯字符串匹配优化。
优化了长字符串匹配处理机制并简化了在流模式下针对长字符串的哈希算法。
添加了”Lookaround”机制类型
因匹配引擎带来开销较大,“Lookaround”是在运行匹配引擎前的预处理机制。“Lookaround”通过在引擎匹配范围内的特定位移寻找特定字符或字符集来决定是否触发匹配引擎。新版本添加了基于SIMD指令的多种“Lookaround”实现方式来提升性能。
编译中的图算法优化
提升了去除图的冗余路径的算法。
添加了图描述结构“ue2_graph”来替代Boost库中“adjacency_list”类型。提升了编译性能及代码安全性。
Windows优化
对MSVC工具链的支持实现了进一步的优化。