centos7.3环境编译安装pktgen-dpdk,dpdk工具
阅读原文时间:2021年04月21日阅读:1
  1. 概述
  2. 编译环境
  3. 编译DPDK
  4. 编译Pktgen-dpdk
  5. Debug

概述

DPDK(Date Plane Development Kit)主要基于Linux系统运行,用于快速数据包处理的函数库与驱动集合,可以极大提高数据处理性能和吞吐量,提高数据平面应用程序的工作效率。
pktgen-dpdk:一种网络流量收集器,pktgen有单独的版本。这里pktgen-dpdk是集成了DPDK。能够加快网卡的收发包,主要用于测量各种场景下二三层网络性能。
该文档说明如何在centos操作系统上编译安装dpdk和pktgen-dpdk。该方法可适用于centos其他版本,但针对安装包不同和编译环境不同可能会导致编译不成功,如遇到编译问题本文档Debug部分给出解决思路可供参考。

编译环境

操作系统:CentOS Linux release 7.5.1804 (Core)
内核版本:3.10.0-693.21.1.el7.x86_64
GCC编译器版本:gcc version 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC)
实验虚拟机配置:4core 8G内存

注意事项:
1.在pktgen-dpdk的官网上建议在编译dpdk前最好将gcc的版本升级到4.9以上,但是实测在gcc的4.8.5版本可以编译成。如果遇到GCC编译器的问题考虑将GCC的版本进行升级。
2.pktgen-dpdk官网建议在编译前最好安装kernel-devel,kernel-header,kernel.x86_64包。
3.pktgen-dpdk官网建议在编译前安装libcap和libcap-devel包。

编译DPDK

安装环境依赖

考虑到上节的注意事项,我们需要在DPDK安装之前现在环境中进行将必要的依赖包进行更新。(博主心声:能够用yum源安装更新的决不优先使用源码包来安装。因为这些依赖包通过源码编译如果产生了新的依赖,那么编译DPDK将会成为遥遥无期的事情。)这里给出两种依赖包的安装方式。第一种方式精确一些,第二种方式简单粗暴,各有好处。

方式一:

yum makecache;
yum install -y gcc gcc-c++  kernel-devel kernel-headers kernel.x86_64 net-tools
yum install -y numactl-devel.x86_64 numactl-libs.x86_64
yum install -y pciutils
yum install kernel-devel-$(uname -r)

方式二:

yum install -y gcc* 
yum install -y kernel* 
yum install -y numactl* 
yum install -y pciutils 
yum install -y net-tools 
yum install -y readline* 
yum install -y epel-release
yum install -y libpcap-devel
yum install -y lua*
yum install -y git*

设置大页内存

DPDK的使用必须要使用到大页内存,所以这里可以事先设置好。
检查大页内存是否开启:

#grep -i huge /boot/config-2.6.35-24-generic
CONFIG_HUGETLBFS=y
CONFIG_HUGETLB_PAGE=y

设置大页:

#echo 2048 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
#mkdir /mnt/huge
#chmod 777 /mnt/huge
#vim /etc/fstab 

在fstab中最后一行添加如下,是指能够开机自动挂载

nodev /mnt/huge hugetlbfs defaults 0 0

检查大页内存是否生效:

#grep -i huge /proc/meminfo

HugePages_Total:      128
HugePages_Free:       128
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB

编译安装DPDK

下载DPDK


这里因为是直接下载的最新版,所以直接用git下载,如果有特殊需,可以在dpdk.org官网下载对应的源码包编译安装,或者通过git来选择对应的分支来选择下载。

#git clone git://dpdk.org/dpdk

设置环境变量

临时设置环境变量:

#export RTE_SDK=/root/dpdk-18.08
#export RTE_TARGET=x86_64-native-linuxapp-gcc

设置永久环境变量:(考虑到之后要便宜pktgen-dpdk,这里推荐将环境变量设置添加到profile中)

#vim /etc/profile
    在该文件最后加入
    export RTE_SDK="/root/dpdk-18.08"
    export RTE_TARGET="x86_64-native-linuxapp-gcc"
#source /etc/profile

note:如果你想将编译出来的文件指定到特定的目录,这里可以在环境变量中加入参数:

export DESTDIR = 你想指定的目录

编译安装

首先进入到RTE_SDK的目录下,这里我进入的目录为“/root/dpdk-18.08”。执行编译命令如下

 make config T=x86_64-native-linuxapp-gcc #如果系统已经有,则会提示不需要配置。
sed -ri 's,(PMD_PCAP=).*,\1y,' build/.config # 该步骤是为了将pcap启用,启用pcap需要使用libpcap header
 make install T=x86_64-native-linuxapp-gcc 

加载使用dpdk

如果编译完成的话在x86_64-native-linuxapp-gcc文件夹下会出现igb_uio.ko和rte_kni.ko文件,可供加载。该文件主要支持将网卡更换igb_uio类型,使之能够支持DPDK。

#cd x86_64-native-linuxapp-gcc/
#modprobe uio
#insmod x86_64-native-linuxapp-gcc/kmod/igb_uio.ko
#insmod x86_64-native-linuxapp-gcc/kmod/rte_kni.ko
查询网卡驱动以及状态
#./usertools/dpdk-devbind.py --status 查询网卡状态

编译Pktgen-dpdk

安装依赖包

#yum install -y numactl-devel gcc  readline-devel lua-devel libpcap-devel gcc-g++ net-tools numactl-devel readline epel-release

note:这里需要注意,在3.5以上的pktgen-dpdk编译时,lua的版本必须要在5.3以上。而centos7yum源中自带的lua包只支持到5.1。我们需要通过其他手段来更新lua包。

使用rpm包下载lua5.3:

wget https://centos7.iuscommunity.org/ius-release.rpm
rpm -Uvh ius-release*rpm  
yum --enablerepo=ius-archive install lua53u*

使用源码包编译安装:

lua官网下载地址:https://www.lua.org/ftp/

tar -xvf #解压lua
cd lua-5.4.3
make linux #编译链接库
make install #安装到系统中同时修改系统环境变量
make local #使当前用户

检查lua的版本和lua库是否更新:

lua –v #成功是5.3.x,x代表你下载的具体版本
ls /usr/lib64/lua/ #成功会有5.1、5.3两个文件夹
whereis lua #检查是否有/usr/local/bin/lua

编译安装Pktgen-dpdk

在编译安装Pktgen-dpdk前,需要确保dpdk编译完成,并且DPDK导入的变量RTE_SDK和RTE_TARGET仍然生效。进入到你现在的Pktgen-dpdk目录中,直接执行make安装即可。在本实验中,执行则如下:

git clone git://dpdk.org/apps/pktgen-dpdk
cd /root/pktgen-dpdk
make -j 4 #这里我是四核的虚机,为了加速编译,这里使用了-j参数,让4个内核直接参与编译。

Debug

在出现问题之后建议先将之前编译错误进行清除,可考虑使用make clean命令。make相关的清除命令如述。

 # make clean:清理大多数编译生成的文件,但会保留config文件等,make   install 后再执行,不然 make install 会因为找不到需要安装的东西而重新make
 # make mrproper: 清理所有编译生成的文件、 config及某些备份文件,几乎只在第一次执行内核编译前才用这条命令
 # make distclean: mrproper、 patches以及编辑器备份文件

编译DPDK时缺少numa.h

错误描述:

/root/dpdk-stable-18.05.1/lib/librte_eal/linuxapp/eal/eal_memory.c:27:18: fatal error: numa.h: No such file or directory
#include <numa.h>
                  ^
compilation terminated.
make[7]: *** [eal_memory.o] Error 1
make[6]: *** [eal] Error 2
make[5]: *** [linuxapp] Error 2
make[4]: *** [librte_eal] Error 2
make[3]: *** [lib] Error 2
make[2]: *** [all] Error 2
make[1]: *** [pre_install] Error 2
make: *** [install] Error 2

解决方法:安装numactl-devel

yum install numactl-devel

编译DPDK时缺少内核编译包

错误描述:

make: *** /lib/modules/3.10.0-514.16.1.el7.x86_64/build: No such file or directory.  Stop.
make[6]: *** [igb_uio.ko] Error 2
make[5]: *** [igb_uio] Error 2
make[4]: *** [linux] Error 2
make[3]: *** [kernel] Error 2
make[2]: *** [all] Error 2
make[1]: *** [pre_install] Error 2
make: *** [install] Error 2

解决方法:
首先查看/usr/src/kernels下有没有对应的内核开发包。实际看到发现版本不对3.10.0-862.14.4.el7.x86_64,这里需要先去下载对应的kernel-devel包。这里通过网上查找,找到一个有用的链接如下:

yum install http://vault.centos.org/7.3.1611/updates/x86_64/Packages/kernel-devel-3.10.0-514.16.1.el7.x86_64.rpm

进入/lib/modules/查看是否有3.10.0-514.2.2.el7.x86_64存在,如果没有则需要创建软连接

ln -s /usr/src/kernels/3.10.0-514.2.2.el7.x86_64/ /lib/modules/3.10.0-514.2.2.el7.x86_64/build

我创建的时候,创建失败,提示 :“ln: 创建符号链接 “build”: 文件已存在”

ls -l /lib/modules/3.10.0-514.2.2.el7.x86_64
1

此时只需要删除软连接,重新创建即可:

rm ./build
ln -s /usr/src/kernels/3.10.0-693.el7.x86_64/ build

编译pktgen-dpdk时如果遇到未知错误可考虑安装libpcap包

如果在Pktgen-dpdk使用yum安装的libpcap没有用的话,需要考虑手动安装一遍libpcap。

1.安装GCC:

 yum -y install gcc-c++

2.安装flex:

  yum -y install flex # 没有flex,直接安装libpcap会提示"Your operating system's lex is insufficient to compile libpcap"错误

3.安装bison
yum -y install bison #前面安装的是flex,就需要搭配bison,如不会提示"don’t have both flex and bison;reverting to lex/yacc"错误

4.安装 libpcap
下载地址:http://www.tcpdump.org/
下载版本:wget -c http://www.tcpdump.org/release/libpcap-1.5.3.tar.gz
解压软件包

 tar zxf libpcap-1.5.3.tar.gz

进入解压后的目录,输入命令行:
命令如下:

   ./configure
   make
   make install

编译pktgen-dpdk时在lua报错

错误描述:
编译时出现无法找到/usr/lib64/pkgconfig/lua5.3.pc文件。
解决办法:
首先确保lua已经升级到5.3的版本了。没有升级的先去升级。pktgen编译时会需要/usr/lib64/pkgconfig/lua5.3.pc,但安装lua5.3后自动生成的文件叫lua-5.3.pc,需要手动改名.

mv /usr/lib64/pkgconfig/lua-5.3.pc /usr/lib64/pkgconfig/lua5.3.pc

编译Pktgen-dpdk时在lua报错,提示无法找到readline

错误描述:
lua.c:80:31: fatal error: readline/readline.h: No such file or directory
解决办法:
缺少libreadline-dev依赖包

yum install readline-devel

##编译Pktgen-dpdk是在lua报错,提示command not found

错误描述:

== lua
/bin/sh: line 2: patch: command not found
make[2]: *** [get_tarball] Error 127
make[1]: *** [lua] Error 2
make: *** [lib] Error 2

解决办法:
在pktgen-dpdk的脚本中可以看到会执行一个patch命令,这里发现系统缺少patch命令,需要安装。脚本文件在./lib/lua/Makefile中
安装linux-headers

yum -y install kernel-headers  #安装kernel-headers
yum -y install kernel-devel    #安装kernel-devel

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章