环境

虚拟机系统:ubuntu:1404

安装dpdk

参考:https://www.cnblogs.com/yanhai307/p/10598138.html

先从官网(www.dpdk.org)下载安装包,解压到/opt目录

/opt# tar -xvf dpdk-18.11.11.tar.xz
/opt# ls
dpdk-18.11.11.tar.xz dpdk-stable-18.11.11

安装依赖

# apt install libnuma-dev
# apt-get install libpcap-dev
# apt-get install pkg-config

环境配置

/opt/dpdk-stable-18.11.11# export RTE_SDK=/opt/dpdk-stable-18.11.11
/opt/dpdk-stable-18.11.11# export RTE_TARGET=x86_64-native-linuxapp-gcc
/opt/dpdk-stable-18.11.11# sed -ri 's,(PMD_PCAP=).*,\1y,' config/common_base
/opt/dpdk-stable-18.11.11# make config T=$RTE_TARGET
Configuration done using x86_64-native-linuxapp-gcc

编译

/opt/dpdk-stable-18.11.11# export DESTDIR=/usr/local
/opt/dpdk-stable-18.11.11# make -j 10 install T=$RTE_TARGET

编译成功

Build complete [x86_64-native-linuxapp-gcc]
================== Installing /usr/local/
Installation in /usr/local/ complete

遇到过的问题

/home/code/dpdk-stable-16.11.11/mk/rte.subdir.mk:61: recipe for target 'linuxapp' failed
make[5]: *** [linuxapp] Error 2
/home/code/dpdk-stable-16.11.11/mk/rte.subdir.mk:61: recipe for target 'librte_eal' failed
make[4]: *** [librte_eal] Error 2
/home/code/dpdk-stable-16.11.11/mk/rte.sdkbuild.mk:78: recipe for target 'lib' failed
make[3]: *** [lib] Error 2
/home/code/dpdk-stable-16.11.11/mk/rte.sdkroot.mk:126: recipe for target 'all' failed
make[2]: *** [all] Error 2
/home/code/dpdk-stable-16.11.11/mk/rte.sdkinstall.mk:85: recipe for target 'pre_install' failed
make[1]: *** [pre_install] Error 2
/home/code/dpdk-stable-16.11.11/mk/rte.sdkroot.mk:101: recipe for target 'install' failed
make: *** [install] Error 2
root@2543f489a7d0:/home/code/dpdk-stable-16.11.11# apt-get install linuxapp 解决办法:在VM编译没遇到 /opt/dpdk-stable-18.11.11/drivers/net/pcap/rte_eth_pcap.c:19:18: fatal error: pcap.h: No such file or directory
#include <pcap.h>
^
compilation terminated.
CC nfp_nsp_eth.o
make[6]: *** [rte_eth_pcap.o] Error 1
make[5]: *** [pcap] Error 2
make[5]: *** Waiting for unfinished jobs.... 解决办法1: apt-get install libpcap-dev 解决办法2:libpcap 网络数据包捕获函数库安装
下载:http://www.tcpdump.org 找到libpcap并下载 # tar zxvf libpcap
# sudo apt-get install build-essential
# sudo apt-get install m4
# sudo apt-get install flex
# sudo apt-get install bison
# ./configure
# make
# sudo make install

dpdk使用

视频教程:https://www.bilibili.com/video/BV1HU4y147Hk?t=372

dpdk的设置命令

dpdk-stable-18.11.11# ./usertools/dpdk-setup.sh

设置hugepage

cpu从内存中是以4k为单位拿取。设置了hugepage后则预先拿一整块内存如:1G,减少了内存交换次数从而提高运行效率。

设置dpdk hugepage

dpdk-stable-18.11.11# ./usertools/dpdk-setup.sh
-----------------
RTE_SDK exported as /opt/dpdk-stable-18.11.11
[21] Setup hugepage mappings for non-NUMA systems
[22] Setup hugepage mappings for NUMA systems <<< NUMA: 统一内存块 Option: 21 <<< 选项 Removing currently reserved hugepages
Unmounting /mnt/huge and removing directory Input the number of 2048kB hugepages
Example: to have 128MB of hugepages available in a 2MB huge page system,
enter '64' to reserve 64 * 2MB pages <<< 2M一个页单位
Number of pages: 64 <<< 配置hugepage
Reserving hugepages
Creating /mnt/huge and mounting as hugetlbfs

helloworld演示

编译helloworld示例

# cd /opt/dpdk-stable-18.11.11/examples/helloworld
helloworld# export RTE_SDK=/opt/dpdk-stable-18.11.11
helloworld# make

# cd /opt/dpdk-stable-18.11.11/examples/helloworld
helloworld# gcc -o helloworld main.c -I /usr/local/include/dpdk/ -ldpdk -lnuma -lpthread -ldl
helloworld# ls
helloworld main.c Makefile meson.build

运行

helloworld# ./build/helloworld
EAL: Detected 2 lcore(s)
EAL: Detected 1 NUMA nodes
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Probing VFIO support...
EAL: PCI device 0000:03:00.0 on NUMA socket -1
EAL: Invalid NUMA socket, default to 0
EAL: probe driver: 15ad:7b0 net_vmxnet3
hello from core 1
hello from core 0

遇到问题

helloworld# ./build/helloworld
EAL: Detected 2 lcore(s)
EAL: Detected 1 NUMA nodes
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: No free hugepages reported in hugepages-2048kB
EAL: FATAL: Cannot get hugepage information.
EAL: Cannot get hugepage information.
PANIC in main():
Cannot init EAL
5: [./build/helloworld() [0x47e5af]]
4: [/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf5) [0x7f586fcc5f45]]
3: [./build/helloworld() [0x473551]]
2: [./build/helloworld(__rte_panic+0xb8) [0x46001f]]
1: [./build/helloworld(rte_dump_stack+0x1a) [0x65308a]]
Aborted (core dumped) 解决:需要设置hugepage

timer演示

# cd /opt/dpdk-stable-18.11.11/examples/timer
timer# make
CC main.o
LD timer
INSTALL-APP timer
INSTALL-MAP timer.map timer# ./build/timer
EAL: Detected 2 lcore(s)
EAL: Detected 1 NUMA nodes
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Probing VFIO support...
EAL: PCI device 0000:03:00.0 on NUMA socket -1
EAL: Invalid NUMA socket, default to 0
EAL: probe driver: 15ad:7b0 net_vmxnet3
Starting mainloop on core 1
Starting mainloop on core 0
timer1_cb() on lcore 1
timer1_cb() on lcore 0
timer0_cb() on lcore 0
timer1_cb() on lcore 1

参考:

  1. 官方文档:https://dpdk-docs.readthedocs.io/en/latest/linux_gsg/intro.html
  2. 官方文档:https://core.dpdk.org/doc/
  3. meson编译:https://www.yuque.com/zzqcn/opensource/ik2tg2
  4. docker编译dpdk: https://www.cnblogs.com/yanhai307/p/10880089.html

DPDK编译与演示的更多相关文章

  1. DPDK编译步骤

    大页内存分配:  NUMA系统(现在的linux一般都是) echo 1024 > /sys/devices/system/node/node0/hugepages/hugepages-2048 ...

  2. [dpdk] dpdk编译成动态库使用 -- PCI port自动发现与pmd动态加载

    1.  修改配置文件 .conf, 设置如下变量的值. [root@D129 x86_64-native-linuxapp-gcc]# cat dpdk/x86_64-native-linuxapp- ...

  3. boost.python编译及演示样例

    欢迎转载,转载请注明原文地址:http://blog.csdn.net/majianfei1023/article/details/46781581 linux编译boost的链接:http://bl ...

  4. centos 6.x下编译dpdk 16.7 心得

    之前对dpdk编译了解得较少,之前直接就把centos yum update了,造成测试经理部署的centos 6.5升级为6.9,造成dpdk编译出错. 先说说centos 6.9下编译的心得: 1 ...

  5. dpdk在虚拟机上出错处理

    目录 1. 所用系统与软件版本 2. 虚拟机配置 3. Ubuntu 12.04上的配置 3.1 准备 3.2 通过setup脚本进行配置 3.3 通过命令配置 4. CentOS 7.0上的配置 4 ...

  6. 【DPDK】虚拟机开发环境配置

    DPDK介绍见:www.dpdk.org 本文介绍的步骤基本适用于dpdk 1.7.0 - dpdk 2.0.0 各版本.只是setup.sh显示的菜单有一些小的不同:同样的,也适用于ubuntu更高 ...

  7. GCC编译源代码的四个步骤【转】

    GCC编译C源代码有四个步骤:预处理---->编译---->汇编---->链接. 可以利用GCC的参数来控制执行的过程,这样就可以更深入的了解编译C程序的过程. 下面将通过对一个程序 ...

  8. 编译SASS

    编译SASS sass编译有很多种方式,如命令行编译模式.sublime插件SASS-Build.编译软件koala.前端自动化软件codekit.Grunt打造前端自动化工作流grunt-sass. ...

  9. 【淡墨Unity3D Shader计划】五 圣诞用品: Unity在Shader三种形式的控制&amp;混合操作编译

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/42060963 作者:毛星云(浅墨)  ...

  10. [.NET产品源码保护].NET防止反编译(非混淆加密)

    .NET产品源码保护产生的背景: .NET源码加密方案支持C#及VB.NET等语言开发的ASP.NET及WINFORM应用.利用.NET支持托管代码与非托管代码共存的特性,将C#代码经过处理放于非托管 ...

随机推荐

  1. aardio + PowerShell 可视化快速开发独立 EXE 桌面程序

    aardio 可以方便地调用 PowerShell ,PowerShell 中也可以自由调用 aardio 对象与函数.不用带上体积很大的System.Management.Automation.dl ...

  2. POJ1639 Picnic Planning (限制入度最小生成树)

    节点1是有度数限制的,把节点1去掉,就会形成若干个连通块,在每个连通块内部求最小生成树(prim算法实现),并求出每个连通块与1相连的最短的边,这样形成了初始状态的生成树. 假设(1,x)这条边没在生 ...

  3. 文心ERNIE-ViLG,你的免费插图画师

    你是否想拥有一个专属画师,免费为你的优美文字插上几幅优美的插图?如今依然实现 最近AI作画确实很火,在DALL-E和Imagen崭露头角之后,ERNIE-ViLG.Stable-Diffusion(S ...

  4. 一键生成通用高亮代码块到剪贴板,快捷粘贴兼容 TT/WX/BJ 编辑器

    有些在线图文编辑器不支持直接插入代码块,但可以直接粘贴 HTML 格式的高亮代码块. 花了一点时间研究了一下各家的编辑器,规则却各不相同.有的要求代码块被包含于 <code> ... &l ...

  5. 将Java代码打包成jar文件转换为.exe可执行程序方法

    ​ 做完学生管理系统后我想将代码打包成一个可执行程序,那样就可以直接点击在Windows下运行了,下面就跟大家分享下打包方法. 将Java的代码转换成 .exe 文件需要先把代码打包成 jar 文件然 ...

  6. virtualenv +virtualenvwrapper

    一.虚拟环境virtualenv 1.安装:pip3 install virtualenv 2.创建虚拟环境:virtualenv venv #venv为虚拟环境目录名,目录名自定义 #virtual ...

  7. C# 8.0 中的 Disposable ref structs(可处置的 ref 结构)

    官方文档中的解释:   用 ref 修饰符声明的 struct 可能无法实现任何接口,因此无法实现 IDisposable. 因此,要能够处理 ref struct,它必须有一个可访问的 void D ...

  8. 题解 P2080 增进感情

    \(\sf Link\) 爆搜最香了. 感觉有点像01背包(? 对于每件事,我们可以选择干或者不干,如果干就将好感值处理一下,当所有的事都搜完之后,记录最小值\(minn\) . 最终答案就是\(mi ...

  9. .NET 7 中 LINQ 的疯狂性能提升

    LINQ 是 Language INtegrated Query 单词的首字母缩写,翻译过来是语言集成查询.它为查询跨各种数据源和格式的数据提供了一致的模型,所以叫集成查询.由于这种查询并没有制造新的 ...

  10. 常用到的read命令

    记录一下. 几个简单参数介绍 read -p :显示提示信息 read -s :静默模式(Silent mode),不会在屏幕上显示输入的字符.当输入密码和其它确认信息的时候,这是很有必要的. rea ...