centos7.3环境编译安装pktgen-dpdk,dpdk工具

2023-05-16

  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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

centos7.3环境编译安装pktgen-dpdk,dpdk工具 的相关文章

  • 拿什么拯救你,我的团队

    一向认为软件开发就像是在搭房子或者说是在构建一座宏伟的大厦 xff0c 当然这根据工程的大小而定 其实细细想来软件工程的很多地方都是借助于建筑方面的知识 xff0c 就从 工程 这个词来说就是从建筑学引进的 xff0c 类似的还有设计模式
  • 【Spring Boot 2.0学习之旅-15】SpringBoot2.0响应式编程

    SpringBoot2 0响应式编程 一 SpringBoot2 0 响应式编程基础知识 Spring WebFlux官方文档 SpringBoot WebFlux文档 1 什么是Spring WebFlux xff1f 在了解Spring
  • 【Spring Boot 2.0学习之旅-16】Spring boot整合SSE实现服务器实时推送流信息

    Spring boot整合SSE实现服务器实时推送流信息 SSE全程Server Sent Event xff0c 就是服务器发送事件 本文将在springboot的基础上实现一个sse xff0c 实现服务器实时推流 预备知识 xff1a
  • 【Spring Boot 2.0学习之旅-17】SpringBoot2.x监控Actuator实战

    SpringBoot2 x监控Actuator实战 Spring Boot 包含许多附加功能 xff0c 可帮助您在将应用程序推送到生产环境时监控和管理应用程序 您可以选择使用 HTTP 端点或 JMX 来管理和监控您的应用程序 审计 健康
  • 【Spring Boot 2.0学习项目】SpringBoot+ElasticSearch博客检索系统

    SpringBoot 43 ElasticSearch博客检索系统 一 初识ElasticSearch 1 ElasticSearch概念和适用场景 分布式 xff1b 全文检索 xff1b 实时快速 xff1b Restful API x
  • 【网络编程学习之旅】一文学习网络编程之NIO

    一文学习网络编程之NIO 前置知识 xff1a Java基础知识 xff1b BIO网络编程知识 xff1b 多线程编程知识 xff1b 一 网络编程模型 1 编程模型 模型 xff1a 对事务共性的抽象 xff1b 编程模型 xff1a
  • 【秋招&毕业】自由奔赴的行者2021年终总结

    秋招 amp 毕业 自由奔赴的行者2021年终总结 xff01 2022年1月18日晚7点在实验室敲下我的2021年终总结 xff0c 两个关键词用来概括我的2021 秋招 和 毕业 一 秋招 本人情况简略介绍 xff08 脱敏处理部分信息
  • 【网络编程学习之旅】Netty之WebSocket编程实战

    Netty之WebSocket编程实战 一 Netty初介绍 1 1 什么是Netty xff1f 高性能 事件驱动 异步非阻塞 xff1b 基于NIO的客户端 服务端编程框架 xff1b 稳定性和 伸缩性 xff1b 1 2 Netty使
  • 【Docker学习之旅】手把手教你Java应用进行Docker化

    手把手教你Java应用进行Docker化 简介 xff1a 简介 xff1a Docker是一个使用Go语言开发的开源的应用容器引擎 xff0c 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中 xff0c 然后发布到任何流行的机器
  • 【RPC学习之旅】手把手实现一个RPC框架

    手把手实现一个RPC框架 一 RPC前置知识介绍 1 什么是RPC xff1f RPC是远程过程调用 xff08 Remote Procedure Call xff09 的缩写形式 假设我们有两台服务器A与B xff0c 一个在A服务器上部
  • 【SpringBoot之旅】手把手教你Swagger接口文档神器使用

    手把手教你Swagger接口文档神器使用 相关内容地址Swagger官方文档swagger io docs specif Swagger常用注解blog csdn net weixin 4252 Swagger2常用注解blog csdn
  • 年度回忆录(2011.01----2011.07)

    看了看上次的总结是 2011 年 1 月 1 日 xff0c 距离这次的总结有将近七个月的时间 xff0c 下面来说一说这七个月的学习情况 xff08 按照时间进度 xff09 l 英语 xff08 1 月 now xff09 上次做总结的
  • VFH避障流程以及策略

    VFH避障核心代码讲解 xff0c 以及避障流程 VFH是一种由人工势场法改进而来的机器人导航算法 在机器人移动的过程中 xff0c 利用传感器探测周围障碍物信息 xff08 图1 xff09 xff0c 生成极坐标直方图 xff08 图2
  • 解决E: 仓库 “ubuntu bionic Release” 没有 Release 文件

    span class token function sudo span span class token function apt get span update 时候 xff0c 发现404 Not Found E 仓库 http ppa
  • c#/winform 串口编程

    这里结合看到的一些知识和在实际项目中应用的一些方法说明一下如何在 NET平台下使用C 创建串口通信程序 在 net 2 0中提供了串口通信的功能 xff0c 其功能的实现主要是System IO Ports 命名空间下实现的 可以通过加入这
  • c++:线程和进程的区别

    线程是指进程内的一个执行单元 也是进程内的可调度实体 与进程的区别 1 地址空间 进程内的一个执行单元 进程至少有一个线程 它们共享进程的地址空间 而进程有自己独立的地址空间 2 资源拥有 进程是资源分配和拥有的单位 同一个进程内的线程共享
  • Mac设置环境变量

    环境变量是电脑操作系统中常用的一些变量 xff0c 作用类似于将一些常用命令所在的文件夹位置预先告诉操作系统 xff0c 当以后需要用到这些命令时 xff0c 操作系统就自动来这些位置取 例如 xff0c 常见的Java开发中配置的相关环境
  • Java--Java版本和JDK版本

    对于Java初学者 xff0c 经常会听到同事 xff0c 或看到网上Java版本和JDK版本不一的叫法 xff0c 不明白这两者到底什么关系 xff1f 其实博主当年初学Java时也有这样的困惑 xff0c 今天我们就来好好探讨一下 xf
  • Oracle-Windows双击Oracle的setup.exe一闪而过;Oracle安装后的默认账号和密码

    双击Oracle解压包之后的setup exe之后 xff0c 界面一闪而过 xff0c 主要是如下三种原因 1 安装路径不要包含中文 2 安装路径不要包含空格 3 右击 xff0c 选择 以管理员身份运行 顺带提下Oracle安装之后的默
  • Java--Stream流详解

    Stream 是Java 8 API添加的一个新的抽象 xff0c 称为流Stream xff0c 以一种声明性方式处理数据集合 xff08 侧重对于源数据计算能力的封装 xff0c 并且支持序列与并行两种操作方式 xff09 Stream

随机推荐

  • Kubernetes - Kubernetes详解;安装部署(一)

    一 Kubernetes Kubernetes 这个单词源于希腊语 xff0c 意为 舵手 或 飞行员 Kubernetes xff0c 也称为K8S xff0c 其中8是代表中间 ubernete 的8个字符 xff0c 是Google在
  • Shiro - Shiro简介;Shiro与Spring Security区别;Spring Boot集成Shiro

    一 Shiro 以下引自百度百科 shiro xff08 java安全框架 xff09 百度百科 Apache Shiro是一个强大且易用的Java安全框架 xff0c 执行身份验证 授权 密码和会话管理 使用Shiro的易于理解的API
  • 最近

    距离软考还有 3 天的时间 xff0c 该复习的都复习了 xff0c 复习不到的知识点也只有搁置了 任何事情都不可能是完美的 xff0c 软考也一样 xff0c 要的只是追求完美的过程 xff0c 结果重要但是过程更重要 复习到现在感觉基础
  • 微信小程序-微信小程序登录流程(一)

    微信小程序 xff0c 小程序的一种 xff0c 英文名Wechat Mini Program xff0c 是一种不需要下载安装即可使用的应用 xff0c 它实现了应用 触手可及 的梦想 xff0c 用户扫一扫或搜一下即可打开应用 冷启动
  • 微信小程序-获取不限制的小程序码(二)

    一 获取小程序码 获取小程序码 微信开放文档 与 createQRCode 总共生成的码数量限制为 100 000 xff0c 请谨慎调用 调用方式 HTTPS 调用 POST https api weixin qq com wxa get
  • 微信-微信退款(三)

    一 微信申请退款 微信支付退款 API 地址 https pay weixin qq com wiki doc api app app php chapter 61 9 4 amp index 61 6 应用场景 当交易发生之后一段时间内
  • iOS-UILabel根据文本、字体大小计算label宽度;以及自适应高度

    下载地址 GitHub源码 或者 Demo下载 想获得所有字体 xff0c 如下 xff1a 获取到所有的字体名称 NSArray familyNames 61 UIFont familyNames NSLog 64 34 所有字体名称 6
  • iOS开发Provisioning profile "iOS Team Provisioning Profile:xxx" doesn't include signing certificate

    连接真机设备时爆红 因博主忘了截图已经处理过的截图 问题如下 xff1a Provisioning profile 34 iOS Team Provisioning Profile com xxx xxx 34 doesn 39 t inc
  • clang-format的使用

    clang format使用 1 clang format简介2 clang format的使用2 1 clang format中 clang format file2 2 示例 xff1a 配置google的代码风格2 3 vscode
  • NVIDIA TX2i刷机过程记录

    毕业设计做的视觉系统 xff0c 需要用到TX2i xff0c 以下为本人疫情期间在家摸索了十几天 xff0c 才刷机成功的全过程 关于tx2i的注意点 xff1a 首先推荐买个usb扩展器 xff0c 因为只有2个usb口 xff0c 我
  • Java基础(五):重写toString()方法

    目录 1 Object 类的 toString 2 重写toString 方法意义 3 总结 1 Object 类的 toString Java默认的toString方法来自Object类 在Java中每个类都直接或者间接继承Object类
  • Mysql基础(十九):锁

    目录 1 Mysql锁机制 1 1 乐观锁和悲观锁 1 1 1 乐观锁 1 1 2 悲观锁 1 2 共享锁与排他锁 1 2 1 共享锁 1 2 2 排他锁 1 3 行锁与表锁 1 3 1 行锁 1 3 2 表锁 1 4 间隙锁 1 4 1
  • 大数据时代的图表可视化利器——highcharts,D3和百度的echarts

    还记得阿里巴巴那个令人澎湃激情的双十一吗 xff1f 还记得淘宝生动形象地把你的的消费历程一一地展示给你看吗 xff1f 还记得那些酷炫拽的it报告图表吗 xff1f 在这个大数据越来越盛行的年代 xff0c 怎样去表达一些用户的关系 xf
  • 对三层和MVC的认识过程

    三层架构就是 MVC xff01 起初老师总说三层 MVC xff0c MVC 三层架构 所以开始的时候脑子就一个概念 xff1a 三层就是 MVC xff0c MVC 就是三层架构 而且想想也合理啊 xff0c 都是 三 MVC 是三个字
  • ROS雷达包出现:ERROR: cannot launch node of type: rplidar_ros

    ROS雷达包出现 xff1a ERROR cannot launch node of type rplidar ros 问题分析详情 问题分析 仅安装了基础ROS xff0c rplidar ros包没有安装 详情 下载包并解压缩 1 使用
  • nvidia-smi出现的比较慢

    一个比较老的问题 xff0c 一般四卡以上的机器可能会出现 以前我都是 nvidia span class hljs attribute smi span span class hljs attribute pm span span cla
  • 【tensorflow】tensorflow的安装及应用

    安装tensorflow的三种方法 1 在cmd命令行中输入pip install tensorflow xff0c 默认安装最新版 2 其他旧版本的安装 xff0c 去pypi org官网 可以点击release history选择想要的
  • 汇编:stmdb和ldmia指令

    参考了网上一些文章 xff0c 简单说一下stmdb和ldmia指令的作用 xff0c 如有错误欢迎指正 首先一句话说一下stmdb和ldmia指令 的作用 xff1a stmdb和ldmia指令一般配对使用 xff0c stmdb用于将寄
  • ARM 内联汇编 加速 算法

    首推移动端arm cpu优化学习笔记第4弹 内联汇编入门 xff0c 但是其只给出了代码 xff0c 很多人还不知道怎么在手机上跑起来 xff0c 其实只需要一个CMakeLists txt就可以了 cmake minimum requir
  • centos7.3环境编译安装pktgen-dpdk,dpdk工具

    概述编译环境编译DPDK编译Pktgen dpdkDebug 概述 DPDK xff08 Date Plane Development Kit xff09 主要基于Linux系统运行 xff0c 用于快速数据包处理的函数库与驱动集合 xff