Hyperscan介绍
最新消息
[2026-03-30]: 发布Hyperscan 2.6.0。新增基于鲲鹏920新型号处理器优化Hyperscan 2~4字节短字节规则匹配算法。
[2025-12-30]: 发布Hyperscan KHSEL 2.5.3。优化Hyperscan多模匹配算法。优化Rose解释器后端长字符串校验。增加短规则旁路算法开关。
Hyperscan是一款高性能的开源正则表达式匹配库,在支持PCRE的大部分语法的前提下,增加了特定的语法和工作模式来保证其在真实网络场景下的实用性。Hyperscan针对不同使用场景设计了短规则旁路、假阳性阻断等高效匹配算法,以及结合SIMD指令,实现了正则表达式的高性能匹配。Hyperscan适用于部署在诸如DPI/IPS/IDS/FW等场景中。在鲲鹏平台上,华为基于NEON指令集对Hyperscan进行了改造,以适配AAarch64架构,同时针对算法进行了优化。
特性介绍
| 特性名称 | 特性介绍 |
|---|---|
| 短规则旁路技术 | 短规则旁路技术特性包括单字节短规则算法和2~4字节短规则算法,通过将导致性能瓶颈的短规则从常规规则中分离,用旁路规则算法消除冗余操作,从而大幅提升整体匹配性能。 |
| 假阳性阻断技术 | 假阳性阻断技术特性能够减少解释器大量无用的调用,进而大幅提高Hyperscan匹配性能。 |
├── chimera # Chimera接口目录,提供PCRE兼容的正则表达式功能
│ ├── ch.h # Chimera公共API头文件
│ ├── ch_compile.cpp # Chimera编译时功能实现
│ ├── ch_runtime.c # Chimera运行时功能实现
│ └── ... # 其他Chimera相关文件
├── cmake # CMake构建系统配置目录
├── doc # 开发参考文档目录
│ └── dev-reference # RST文件和Doxygen配置,生成API文档和开发指南
├── docs # 项目文档目录
│ └── zh # 中文文档目录
│ ├── figures # 中文文档图片资源目录
│ ├── quick_start.md # 快速入门
│ ├── release_notes.md # 版本说明书
│ ├── compilation_guide.md # 编译指南
│ ├── developer_guide.md # 开发指南
│ ├── user_guide.md # 用户指南
├── examples # 示例代码目录
│ ├── CMakeLists.txt # 示例代码构建配置
│ ├── README.md # 示例代码说明文档
│ ├── simplegrep.c # 简单的grep实现示例
│ ├── pcapscan.cc # 网络数据包扫描示例
│ └── patbench.cc # 模式匹配性能测试示例
├── include # 公共头文件目录
│ └── boost-patched/ # Boost库补丁版本
├── src # 核心源代码目录
│ ├── compiler/ # 编译器模块,负责将正则表达式编译为内部表示
│ ├── fdr/ # FDR引擎
│ ├── hwlm/ # HWLM引擎
│ ├── kunpeng-enhanced/ # 鲲鹏平台增强实现,包含Lily引擎
│ ├── nfa/ # NFA引擎
│ ├── nfagraph/ # NFA图构建和优化模块
│ ├── rose/ # ROSE引擎相关模块
│ ├── som/ # SOM(Start of Match)相关实现
│ └── util/ # 内部工具函数
├── tools # 工具目录
│ ├── fuzz/ # fuzz测试工具
│ ├── hsbench/ # 性能基准测试工具
│ │ ├── CMakeLists.txt # 构建配置
│ │ ├── README.md # 性能基准测试工具说明文档
│ │ ├── scripts/ # 辅助脚本
│ │ └── ... # 其他源文件
│ ├── hscheck/ # Hyperscan检查工具
│ ├── hscollider/ # 对比pcre的正确性测试工具
│ └── hsdump/ # Hyperscan转储工具
├── unit # 单元测试目录
│ ├── chimera/ # Chimera接口单元测试
│ ├── gtest/ # Google Test框架
│ ├── hyperscan/ # Hyperscan核心功能单元测试
│ ├── internal/ # 内部模块单元测试
│ └── CMakeLists.txt # 单元测试工具构建配置
├── util # 实用工具目录
│ ├── CMakeLists.txt # 实用工具构建配置
│ ├── ExpressionParser.rl # 正则表达式解析器(ragel)
│ ├── cross_compile.cpp # 交叉编译支持
│ ├── database_util.cpp # 数据库工具
│ ├── ng_corpus_editor.cpp # 语料库编辑器
│ ├── ng_corpus_generator.cpp # 语料库生成器
│ └── ... # 其他实用工具
├── README.md # 项目说明文档
├── config.txt # 配置文件
└── ... # 其他根级文件每个版本的特性变更详细信息,具体请参见《版本说明书》。
约束与限制
Arm平台上,Hyperscan使用lily引擎对单字节规则、2-4字节短规则匹配场景进行性能增强,该优化特性存在如下约束:
lily单字节、2-4字节短规则匹配引擎各自仅能处理至多8条单字节规则,超出部分将采用原有引擎处理。 在单条语料中,lily引擎所负责匹配的单字节规则命中次数合计应不大于4096,否则将停止匹配,并返回HS_SCAN_TERMINATED错误码。 在单条语料中,lily引擎所负责匹配的2-4字节短规则命中次数合计应不大于4096,否则将停止匹配,并返回HS_SCAN_TERMINATED错误码。
介绍Hyperscan的环境依赖及安装方式和编译方法,具体请参见《安装指南》。
Hyperscan的快速入门通过使用Hyperscan官方提供的性能Benchmark工具hsbench,具体请参见《快速入门》。
| 名称 | 简介 |
|---|---|
| 快速入门 | 提供快速上手验证指导。 |
| 版本说明书 | 提供Hyperscan每个发布版本的基础信息和特性更新信息。 |
| 安装指南 | 指导用户如何安装部署及编译软件。 |
| 开发指南 | 提供Hyperscan特性相关接口说明及定义等。 |
| 用户指南 | 提供Hyperscan特性使用指导。 |
欢迎大家为社区做贡献,如果使用过程中有任何问题/建议,或者需要反馈特性需求和bug报告,可以提交Issues联系我们,具体贡献方法可参考这里。同时也欢迎大家在讨论专区展开讨论交流。感谢您的支持。
此代码仓计划参与Hyperscan软件开源,仅作Hyperscan性能提升,编码风格遵照原生开源软件,继承原生开源软件安全设计,不破坏原生开源软件设计及编码风格和方式,软件的任何漏洞与安全问题,均由相应的上游社区根据其漏洞和安全响应机制解决。请密切关注上游社区发布的通知和版本更新。鲲鹏计算社区对软件的漏洞及安全问题不承担任何责任。
本项目采用BSD License许可证。详见LICENSE文件。
本项目的文档适用CC-BY 4.0许可证,具体请参见LICENSE文件。