Centos7.5下DPDK+Hyperscan环境的搭建

DPDK的安装

安装环境查看

先给出本人机器的Linux版本、Linux kernel以及kernel-devel信息。
首先通过lsb_release -a查看Linux版本信息,输出如下:

[root@hw054 kevin]# lsb_release -a
...
Distributor ID: CentOS
Description: CentOS release 7.5.1804 (Core)
Release: 7.5.1804
Codename: Core

然后同过uname -r查看Linux kernel信息,输出如下:

[root@hw054 kevin]# uname -r
3.10..0-123.el7.x86_64

最后再用yum info kernel-devel查看一下内核头文件信息

[root@hw054 kevin]# yum info kernel-devel
Available Packages
Name : kernel-devel
Version : 3.10.0
Release : 123.el7
...
Description : This package provides kernel headers and makefiles sufficient to build
modules against the kernel package.

安装指定版本kernel-devel和kernel-headers

[root@hw054 kevin]# uanme -a; rpm -qa kernel* | sort


Centos7.5下DPDK+Hyperscan环境的搭建_第1张图片
image.png

如果你的内核版本和kernel-devel以及kernel-headers和内核版本不一致,就需要手动安装kernel-devel和kernel-headers。可以看到我的是一致的,手动安装时,如果安装的版本低于机器自带版本,需要先卸载,然后手动安装手动安装。

卸载kernel-devel和kernel-headers

[root@hw054 kevin]# yum remove kernel-devel-3.10.0-957.1.3.el7.x86_64(替换成你的机器上的版本)

安装kernel-devel和kernel-headers

[root@hw054 kevin]# yum install kernel-devel-$(uname -r) kernel-headers-$(uname -r)
如果通过yum安装失败,就下载源码包安装。

下载及安装DPDK

下载源码和解压

[root@hw054 kevin]# wget http://fast.dpdk.org/rel/dpdk-18.02.2.tar.gz
[root@hw054 kevin]# tar -zxvf dpdk-18.02.2.tar.gz

编译和安装

[root@hw054 kevin]# cd dpdk-stable-18.02.2/usertools/
[root@hw054 kevin]# ./dpdk-setup.sh
首先选择14使用gcc编译安装,然后选择17插入UIO module,再选择21配置大页,最后是选择23绑定网卡。

Hyperscan的安装

Hyperscan需要C99和C++11编译器的支持,目前支持C99和C++11的编译器有,

GCC, v4.8.1或者更高的版本
Clang, v3.4或者更高的版本
Intel C++ compiler v15 或者更高的版本

安装Hyperscan的环境依赖包要求如下:

CMake //版本号大于等于2.8.11
Ragel //版本号6.9
Python //版本号2.7
Boost //版本号大于等于1.57,而且Boost不需要安装,只需要头文件
Pcap //版本号大于等于0.8

首先查看本机有没有安装相关的工具,下面是我的机器的情况

[root@hw054 kevin]# rpm -qa | grep cmake
cmake-2.8.12.2-4.el6.x86_64
[root@hw054 kevin]# rpm -qa | grep ragel
[root@hw054 kevin]# rpm -qa | grep pcap
libpcap-devel-1.4.0-4.20130826git2dbcaa1.el6.x86_64
说明我的机器上已经安装了CMake和pcap,但是没有安装ragel。

安装 gcc

[root@hw054 kevin]# yum install gcc

安装g++

[root@hw054 kevin]# yum -y install gcc-c++

安装CMake

[root@hw054 kevin]# yum -y install cmake

安装ragel

[root@hw054 kevin]# wget http://www.colm.net/files/ragel/ragel-6.9.tar.gz
[root@hw054 kevin]# tar -zxvf ragel-6.9.tar.gz
[root@hw054 kevin]# cd ragel-6.9
[root@hw054 kevin]# ./configure
[root@hw054 kevin]# make && make install

Centos一般是自带Python2.7的,如果不是,也可以自行下载源码安装;最后关于Boost要说明一下,只需要下载Boost的源码,但不需要安装,这个是官网给的说明,

[root@hw054 kevin]# wget http://downloads.sourceforge.net/project/boost/boost/1.60.0/boost_1_60_0.tar.gz
[root@hw054 kevin]# tar -zxvf boost_1_6-_0.tar.gz
[root@hw054 kevin]# ln -s /home/kevin/boost_1_60_0/boost /home/kevin/hyperscan-4.0.0/include/boost

注意:这里的boost_1_60_0最好为绝对路径,刚开始我用的是相对路径报错了。

安装Hyperscan

注意:这里的hs_build和hyperscan是在平级目录,hyperscan源码是从github上clone来的,算了,我还是把获取hyperscan源码的方法贴出来吧。

git clone http://www.github.com/intel/hyperscan.git

[root@hw054 kevin]# mkdir hs_build
[root@hw054 kevin]# cd hs_build
[root@hw054 hs_build]# cmake ../hyperscan
如果gcc版本小于4.8,在这里会报错,也就需要先升级然后再安装。我就不说具体怎么升级GCC了,这里甩一篇升级GCC的博客。
CentOS gcc升级4.8步骤
注意:千万不要以为升级完后再cmake ../hyperscan就会解决问题,没那么简单。
升级完后,相当于现在你的Linux环境下有两个版本的gcc/g++,一个是4.4.7版本,一个是4.8.1版本。如果你运行命令cmake ../hyperscan后还是出现上面的g++版本bug,出现这个bug的具体原因就不说了。这时需要考虑为cmake指定gcc编译器了,指定的方法呢有好几种,在这里介绍两种,有兴趣深入了解的可以看看这篇博客。
How to specify new GCC path for CMake
方法一:
[root@hw054 hs_build]# export C=/usr/local/bin/gcc
[root@hw054 hs_build]# export CXX=/usr/local/bin/g++

方法二:

[root@hw054 hs_build]# cmake -DCMAKE_C_COMPILER=/usr/local/bin/gcc -DCMAKE_CXX_COMPILER=/usr/local/bin/g++ ../hyperscan

最后再编译就行了

[root@hw054 hs_build]# make
[root@hw054 hs_build]# make install

到这里Hyperscan的安装就完成了,有可能有人会在上面make时遇到一些奇怪问题,比如error with no such instruction这类的指令不匹配问题,同样还是甩一篇博客吧,真有遇到问题可以参考参考。
hyperscan compile error with no such instruction

运行测试用例

还是在hs_build目录下运行下面的命令

[root@hw054 hs_build]# ./bin/unit-hyperscan

在编译hyperscan/examples/下的示例程序时,可能会遇到下面所示问题:

In function Benchmark::scanBlock(char const*, int):
(.text+0x141): undefined reference to hs_scan
......
(.text+0x2f7): undefined reference to hs_compile_muliti

这些错误告诉你找不到函数定义,我采用的解决办法(当然不一定是最优雅的)是将相关头文件放到/usr/include/目录下,是那些相关头文件呢,看下面的code:

[root@hw054 hs_build]# ls /usr/local/include/hs/
hs_common.h hs_compile.h hs.h hs_runtime.h
[root@hw054 hs_build]# cp /usr/local/include/hs/* /usr/include/

好后再次编译示例程序应该就没有问题了。
如果make告诉你找不到动态库文件,错误如下

/usr/bin/ld: cannot find -lhs
那可能是动态库文件没有生成,或者路径不对,先找一下libhs.so文件有没有,如果没有就再找一下libhs.a文件,在makefile中指定其中一个就行了,比如指定libhs.a文件,具体路径根据自己机器而定。
...
LDLIBS += -L/user/local/lib64

你可能感兴趣的:(Centos7.5下DPDK+Hyperscan环境的搭建)