【写在前面】飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力,聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域,包含了应用使能套件、软件仓库、软件支持、软件适配认证四大板块,旨在共享尖端技术,为开发者提供一个涵盖多领域的开发平台和工具套件。点击这里开始你的技术升级之旅吧
本文分享至飞腾开发者平台《飞腾平台上Hyperscan安装测试指南》
1 软件介绍
Hyperscan是一款来自于Intel的高性能的正则表达式匹配库。它是基于x86平台以PCRE为原型而开发的,并以BSD许可开源在https://01.org/hyperscan。Hyperscan适用于部署在诸如DPI/IPS/IDS/FW等场景中,目前已经在全球多个客户网络安全方案中得到实际的应用。更多信息详见官网:https://www.hyperscan.io/。
飞腾版Hyperscan是基于5.2.1版本,结合飞腾平台架构特征进行了一系列优化,包括:SSE2NEON指令替换、引用局部变量替换、调优系统参数、内联汇编、数据对齐、指令对齐、内存数据预取、静态分支预测、代码结构优化等。
2 环境要求
2.1 硬件要求
硬件要求如下表所示。
项目 | 说明 |
---|---|
CPU | FT-2000+/64服务器或者飞腾腾锐D2000桌面机 |
网络 | 可访问外网 |
存储 | 无要求 |
内存 | 无要求 |
操作系统要求
操作系统要求如下表所示。
项目 | 说明 |
---|---|
CentOS | 7.6 |
Kernel | 4.19.105 |
软件要求
软件要求如下表所示。
项目 | 版本 | 下载地址 |
---|---|---|
GCC | 8.3.0 | |
Cmake | >=2.8.11 | |
Python | >=2.7 | |
Ragel | >=6.9 | http://www.colm.net/files/ragel/ragel-6.10.tar.gz |
Boost | >=1.57 | https://dl.bintray.com/boostorg/release/1.69.0/source/boost_1... |
PCRE | >=8.4.1 | https://sourceforge.net/projects/pcre/files/pcre/8.43/pcre-8.... |
Sqlite | sqlite3 |
3 配置编译
安装依赖软件包:
步骤一 挂载OS镜像。
mount YOUR_OS.iso /media -o loop
说明:YOUR_OS.iso用实际的iso包名代替。
步骤二 备份repo文件,清空/etc/yum.repos.d/目录文件。
cp -r /etc/yum.repos.d /etc/yum.repos.d-bak
rm /etc/yum.repos.d/*
步骤三 修改“/etc/yum.repos.d/Local.repo”文件。
vi /etc/yum.repos.d/Local.repo
配置yum本地源。
[Local]
name=CentOS-7.6 Local
baseurl=file:///media/
enabled=1
gpgcheck=0
步骤四 使yum源配置生效。
yum clean all
yum makecache
步骤五 yum安装依赖软件。
yum install sqlite-devel
4 编译和安装
4.1 安装依赖包
4.1.1 安装Ragel
步骤一 下载Ragel软件包。
wget http://www.colm.net/files/ragel/ragel-6.10.tar.gz
步骤二 解压软件包。
tar -xzf ragel-6.10.tar.gz
步骤三 编译和安装。
./configure;make;make install
步骤四 检验安装。
ragel -v
Ragel State Machine Compiler version 6.10 March 2017
4.1.2 安装Boost
步骤一 下载Boost软件包。
wget https://dl.bintray.com/boostorg/release/1.69.0/source/boost_1_69_0.tar.gz
步骤二 解压软件包。
tar -xzf boost_1_69_0.tar.gz
步骤三 环境配置。
./bootstrap.sh --with-libraries=all --with-toolset=gcc
步骤四 编译和安装。
./b2 toolset=gcc
./b2 install --prefix=/usr
步骤五 更新系统动态链接库。
ldconfig
步骤六 检验安装,安装后显示如下:
failed updateing 60 targets ... update 11593 targets
4.2 编译和安装
步骤一 下载Hyperscan源码。
步骤二 添加Pcre依赖库,将解压后的pcre-8.43文件拷贝到Hyperscan源码目录下,并将文件夹重命名为pcre。
cp -rf ***/pcre-8.43 ***/phytium-hyperscan/pcre
说明:Cmake低于2.8.1时需将pcre/CMakeLists.txt中第77行注释掉(\#CMAKE_POLICY(SETCMP0026 OLD))。
4.2.1 编译静态库
步骤一 切换至解压目录,并创建编译目录。
cd phytium-hyperscan;
mkdir -p build;
cd build;
步骤二 编译和安装,安装库如图4.1所示。
cmake ..;
make -j64;make install
步骤三 编译成功如上图所示。
make
步骤四 编译静态库如下图所示。
4.2.2 编译动态库
步骤一 切换至解压目录,并创建编译目录。
cd phytium-hyperscan;
mkdir -p build;
cd build;
步骤二 编译和安装,安装成功如图下所示。
cmake .. -DBUILD_SHARED_LIBS=ON;
make -j64;make install
步骤三 编译动态库如下图所示。
5 测试
5.1 功能测试
5.1.1 测试步骤
Hyperscan自带单元测试包含3746个基本函数功能测试集,测试命令为:
cd phytium-hyperscan/build/bin;
./unit-hyperscan
FT-2000+/64下测试结果如下图所示。
5.1.2 测试分析
单元测试主要验证Hyperscan基本功能,其测试结果图5.1所示,3746个单元测试用例都通过,总共用时615秒。结果显示,Hyperscan功能正常。
5.2 性能测试
5.2.1 测试步骤
步骤一 下载测试规则和数据。
https://01.org/downloads/sample-data-hyperscan-hsbench-performance-measurement
步骤二 解压测试规则和数据。
步骤三 运行测试脚本。
./run_bench.sh ./hsbench
步骤四 测试结果如下表所示。
表1 FT-2000+/64不同线程下性能表现
1线程(Mb/s) | 4线程(Mb/s) | 16线程(Mb/s) | 64线程(Mb/s) | 加速比 | |
---|---|---|---|---|---|
snort literals | 1419 | 4475 | 19010 | 73914 | 52.09 |
snort pcre | 439 | 1594 | 6597 | 25263 | 57.54 |
teakettle | 1188 | 4064 | 18193 | 69513 | 58.51 |
表2 飞腾腾锐D2000不同线程下性能表现
1线程 (Mb/s) | 2线程 (Mb/s) | 4线程 (Mb/s) | 6线程 (Mb/s) | 8线程 (Mb/s) | 加速比 | |
---|---|---|---|---|---|---|
snort literals | 1555 | 2736 | 5648 | 8466 | 11243 | 7.23 |
snort pcre | 470 | 905 | 1803 | 2697 | 3591 | 7.64 |
teakettle | 1304 | 2519 | 4785 | 7126 | 9350 | 7.17 |
说明:snort_literals是从Snort3网络入侵检测系统自带的样本规则集中提取的一组3316个纯字符串规则。
snort_pcres是从包含Snort3的样本规则集中提取的一组847个正则表达式集,取自针对HTTP流量的规则。
teakettle_2500是由一个脚本生成的2500个合成的有限复杂度规则集,它们主要由字典单词组成,并在单词间插入重复的字符集和分隔符。
5.2.2 测试分析
从测试结果来看,Hyperscan在各种规则集下成线性加速比。在纯字符串规则集下性能最高,纯正则表达式下性能最低。
推荐阅读
欢迎广大开发者来飞腾开发者平台获取更多前沿技术文档及资料
如开发者在使用飞腾产品有任何问题可通过在线工单联系我们
版权所有。飞腾信息技术有限公司 2023。保留所有权利。
未经本公司同意,任何单位、公司或个人不得擅自复制,翻译,摘抄本文档内容的部分或全部,不得以任何方式或途径进行传播和宣传。
商标声明
Phytium和其他飞腾商标均为飞腾信息技术有限公司的商标。
本文档提及的其他所有商标或注册商标,由各自的所有人拥有。
注意
本文档的内容视为飞腾的保密信息,您应当严格遵守保密任务;未经飞腾事先书面同意,您不得向任何第三方披露本文档内容或提供给任何第三方使用。
由于产品版本升级或其他原因,本文档内容会不定期进行更新。除非另有约定,本文档仅作为使用指导,飞腾在现有技术的基础上尽最大努力提供相应的介绍及操作指引,但飞腾在此明确声明对本文档内容的准确性、完整性、适用性、可靠性的等不作任何明示或暗示的保证。
本文档中所有内容,包括但不限于图片、架构设计、页面布局、文字描述,均由飞腾和/或其关联公司依法拥有其知识产权,包括但不限于商标权、专利权、著作权等。非经飞腾和/或其关联公司书面同意,任何人不得擅自使用、修改,复制上述内容。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。