【写在前面】飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力,聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域,包含了应用使能套件、软件仓库、软件支持、软件适配认证四大板块,旨在共享尖端技术,为开发者提供一个涵盖多领域的开发平台和工具套件。点击这里开始你的技术升级之旅吧

image.png

本文分享至飞腾开发者平台《飞腾平台上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 硬件要求

  硬件要求如下表所示。

项目说明
CPUFT-2000+/64服务器或者飞腾腾锐D2000桌面机
网络可访问外网
存储无要求
内存无要求

操作系统要求

  操作系统要求如下表所示。

项目说明
CentOS7.6
Kernel4.19.105

软件要求

  软件要求如下表所示。

项目版本下载地址
GCC8.3.0
Cmake>=2.8.11
Python>=2.7
Ragel>=6.9http://www.colm.net/files/ragel/ragel-6.10.tar.gz
Boost>=1.57https://dl.bintray.com/boostorg/release/1.69.0/source/boost_1...
PCRE>=8.4.1https://sourceforge.net/projects/pcre/files/pcre/8.43/pcre-8....
Sqlitesqlite3

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

image.png

  步骤三 编译成功如上图所示。

make

image.png

  步骤四 编译静态库如下图所示。

image.png

4.2.2 编译动态库

  步骤一 切换至解压目录,并创建编译目录。

cd phytium-hyperscan;

mkdir -p build;

cd build;

  步骤二 编译和安装,安装成功如图下所示。

cmake .. -DBUILD_SHARED_LIBS=ON;

make -j64;make install

image.png

  步骤三 编译动态库如下图所示。

image.png

5 测试

5.1 功能测试

5.1.1 测试步骤

  Hyperscan自带单元测试包含3746个基本函数功能测试集,测试命令为:

cd phytium-hyperscan/build/bin;

./unit-hyperscan

  FT-2000+/64下测试结果如下图所示。

image.png

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 literals14194475190107391452.09
snort pcre439159465972526357.54
teakettle11884064181936951358.51

  表2 飞腾腾锐D2000不同线程下性能表现

1线程 (Mb/s)2线程 (Mb/s)4线程 (Mb/s)6线程 (Mb/s)8线程 (Mb/s)加速比
snort literals1555273656488466112437.23
snort pcre4709051803269735917.64
teakettle130425194785712693507.17

  说明:snort_literals是从Snort3网络入侵检测系统自带的样本规则集中提取的一组3316个纯字符串规则。

  snort_pcres是从包含Snort3的样本规则集中提取的一组847个正则表达式集,取自针对HTTP流量的规则。

  teakettle_2500是由一个脚本生成的2500个合成的有限复杂度规则集,它们主要由字典单词组成,并在单词间插入重复的字符集和分隔符。

5.2.2 测试分析

  从测试结果来看,Hyperscan在各种规则集下成线性加速比。在纯字符串规则集下性能最高,纯正则表达式下性能最低。


推荐阅读

欢迎广大开发者来飞腾开发者平台获取更多前沿技术文档及资料

如开发者在使用飞腾产品有任何问题可通过在线工单联系我们



版权所有。飞腾信息技术有限公司 2023。保留所有权利。

未经本公司同意,任何单位、公司或个人不得擅自复制,翻译,摘抄本文档内容的部分或全部,不得以任何方式或途径进行传播和宣传。

商标声明

Phytium和其他飞腾商标均为飞腾信息技术有限公司的商标。

本文档提及的其他所有商标或注册商标,由各自的所有人拥有。

注意

本文档的内容视为飞腾的保密信息,您应当严格遵守保密任务;未经飞腾事先书面同意,您不得向任何第三方披露本文档内容或提供给任何第三方使用。

由于产品版本升级或其他原因,本文档内容会不定期进行更新。除非另有约定,本文档仅作为使用指导,飞腾在现有技术的基础上尽最大努力提供相应的介绍及操作指引,但飞腾在此明确声明对本文档内容的准确性、完整性、适用性、可靠性的等不作任何明示或暗示的保证。

本文档中所有内容,包括但不限于图片、架构设计、页面布局、文字描述,均由飞腾和/或其关联公司依法拥有其知识产权,包括但不限于商标权、专利权、著作权等。非经飞腾和/或其关联公司书面同意,任何人不得擅自使用、修改,复制上述内容。


飞腾开发者
6 声望3 粉丝

飞腾开发者技术小助手,定期分享飞腾技术文档,助力开发者打怪升级。更多材料获取:[链接]