Hyperscan Release 4.5.0
Hyperscan 4.5.0 版本已于2017年6月9日在Github (https://github.com/01org/hyperscan) 上发布。这一版本中,我们不仅加入模糊匹配、AVX-512指令支持两种新特性,还对模式编译效率(尤其针对许多大型模式集合)进行了重大改进。
更新日志如下:
1. 新API特性:提供基于“编辑距离”扩展参数的模糊匹配。用户可以获取某一模式的精确匹配在给定编辑距离范围内的所有有效匹配作为输出。
* 模糊字符串匹配是一种对给定模式进行近似匹配而非精确匹配的 技术。该问题需要对参与匹配的字符串之间的 “接近性” 进行合理定义——即促使某一匹配转化为精确匹配所需的原子操作(插入/删除/修改1个字符)的数目。这一数目即称为“编辑距离”。
* 正则模式的模糊匹配可以匹配到距其原始模式串的“编辑距离”不超过指定值的任意字符串。以“/foo(bar)+/”为例,若以原始模式“foobarbar”为基准,“foobarbar”,“foobarb0r”,“fooarbar”,“foobarba”,“f0obarbar”,“fobarbar”都是在“编辑距离”为1下的有效匹配。
2. 开始支持Intel(R) AVX-512指令集。该特性在默认情况下禁用,用户可通过向 “cmake” 命令传递 “-DBUILD_AVX512=1” 启用。
3. 改善了许多子系统的主要编译时间,极大提升了对许多大型模式集的编译性能。
4. 对字符串匹配引擎进行内部重构,使之先针对至多8个字符进行操作,再由Rose解释程序进行后续确认。这一改进降低了算法复杂度以及编译后数据库的空间开销,提升了许多模式集的匹配性能。
5. 提升了FDR字符串匹配引擎的前端性能。
6. 改进了字符串分组机制以及其他影响FDR文本匹配引擎性能的启发式方法。
7. 利用扩展参数约束( “min_offset” 等)改进了优化过程。
8. 新增了多分支扫描指令,对多分支前缀使用轻量级 “Lookaround” 引擎替代NFA引擎,提升了扫描性能。
9. 优化了Rose解释程序的构造过程,以减少某些情况下生成的程序规模。
10. 移除原有的 “Rose” 模式分解分析过程,以支持Hyperscan 4.3.0 版本中引入的新的 “Violet” 过程。
11. 在流模式下尽可能去检测流中不可能再产生匹配的状态,减少了维护当前历史数据带来的开销,改进了扫描性能。
12. 提升了对只出现于模式开头的“控制标识”的解析能力。同时允许模式对所支持的“标识”以任意顺序进行组合。
* “控制标识”是引导匹配引擎进行模式转换的起控制作用的字符流,比如‘(*UTF8)’等编码标识,正常匹配过程将忽略其本身的字符意义,PCRE中也有类似机制。
13. 将测试工具中用于语法及语义参考的PCRE版本更新到PCRE 8.40。
14. 调整支持的Intel(R) 微架构代码名为 Skylake,Skylake Server 以及 Goldmont。
15. CMake:
* 当本地build使用的GCC版本无法识别宿主机器的编译器时,调整所选微架构参数为 “-march=native”。
* SQLite只在构建 “hsbench” 工具时需要使用,其缺失不会造成CMake失败。
* 直接检测libc++,并基于检测结果告知Boost版本需求。
16. Bugfix:
* Issue #51:提升上一版本 “Fat Runtime” 编译的可靠性。
* Issue #46, #52:通过 “sqlite3_errmsg()” 来允许使用SQLite 3.6.x。
DPDK文章精选
DPDK开源社区
最权威的DPDK社区
长按二维码关注