⑴ 只有一个网卡可以安装dpdk吗
dpdk需要至少两块网卡,eth0和eth1用于dpdk使用,eth2用于跟主机通信
⑵ DPDK编程指南(翻译)( 三十一)
DPDK 需要一个构建系统用于编译等操作。 本节介绍 DPDK 框架中使用的约束和机制。
这个框架有两个使用场景:
以下提供了如何构建DPDK二进制文件。
安装之后,将创建一个构建目录结构。 每个构件目录包含文件、库和应用程序。
构建目录特定于配置的体系结构、执行环境、工具链。 可以存在几个构建目录共享源码,但是配置不一样的情况。
例如,要使用配置模板 config/defconfig_x86_64-linuxapp 创建一个名为 my_sdk_build_dir 的构建目录,我们使用如下命令:
这会创建一个新的 new my_sdk_build_dir 目录,之后,我们可以使用如下的命令进行编译:
相当于:
目录 my_sdk_build_dir 的内容是:
请参阅 Development Kit Root Makefile Help 获取更详细的信息。
由于DPDK本质上是一个开发工具包,所以最终用户的第一个目标就搜此是使用这个SDK创建新的应用程序。 要编译应用程序,用户必须设置 RTE_SDK 和 RTE_TARGET 环境变量。
对于一个新的应用程序,用户必须创建新的 Makefile 并包含指定的 .mk 文件,如 ${RTE_SDK}/mk/rte.vars.mk 和 ${RTE_SDK}/mk/rte.app.mk。 这部分内容描述请参考 Building Your Own Application .
根据 Makefile 所选定的目标(架构、机器、执行环境、工具链)或环境变量,应用程序和库将使用适当的h头文件进行编译,并和适当的a库链接。 这些文件位于 ${RTE_SDK}/arch-machine-execenv-toolchain,由 ${RTE_BIN_SDK} 内部引用。
为了编译应用程序猛袜,用户只需要调用make命令。编译结果将置于 /path/to/my_app/build 目录。
示例应用程序在example目录中提供。
在DPDK中,Makefiles始终遵循相同的方案:
根据Makefile最后包含的 .mk 文件,Makefile将具有不同的角色。 注意到,并不能在同一个Makefile文件中同时编译库和应用程序。 因此,用户必须创建两个独立的Makefile文件,最好是置于两个不同的目录中。
无论如何,rte.vars.mk 文件必须包含用户Makefile。
这些 Makefiles 生成一个二进制应用程序。
创建一个 .a 库。
app/dpdk-pmdinfogen
dpdk-pmdinfogen 扫描各种总所周知的符号名称对象文件。这些目标文件由各种宏定义,用于导出关于pmd文件的硬件支持和使用的重要信息。 例如宏定义:
创建以下的符号:
将被 dpdk-pmdinfogen 扫描。使用这个虚拟系,可以从目标文件中导出其他相关位信息,并用于产生硬件支持描述, 然后 dpdk-pmdinfogen 按照以下格式编码成 json 格式的字符串:
然后可以通过外部工具搜索这些字符串,以确定给定库或应用程序的硬件支持。
一些变量可以用来配置构建系统的行为。在文件 Development Kit Root Makefile Help 及 External Application/Library Makefile Help 中有描述。
这避免了根据编译器(icc或gcc)使用不同世知迅的情况。而且,这个变量可以从命令行覆盖,这允许绕过标志用于测试目的。
⑶ 在虚拟机编译运行dpvs
修改:PKG_CONFIG_PATH应该谨唯悄是*.pc所在目录,祥渣如下设置即可。
export PKG_CONFIG_PATH=/root/dpvs/dpdk/dpdklib/lib/x86_64-linux-gnu/pkgconfig
修改:安装libnuma-dev即可。apt install libnuma-dev
修改:src/Makefile 中加上 -Wno-address-of-packed-member
CFLAGS += -Wall -Werror -Wstrict-prototypes -Wmissing-prototypes -Wno-address-of-packed-member -mcmodel=medium
修改:src/Makefile 中加上 -Wno-packed-not-aligned
CFLAGS += -Wall -Werror -Wstrict-prototypes -Wmissing-prototypes -Wno-address-of-packed-member -Wno-packed-not-aligned -mcmodel=medium
修改:注山困释掉下面两行
修改:安装 apt-get install libpopt-dev
修改:修改dpip的makefile,添加CFLAGS += $(DEFS) -Wno-address-of-packed-member
⑷ DPDK PKTGEN使用
PKTGEN有两种形式,一种是直接由linux系统自带的内核模块进行发包(也就是略过协议栈,直接控制发包),另一种是依赖于dpdk的pktgen也就是本文主要讲的,需要进行稍微复杂的编译
modprobe pktgen
在/proc/net/pktgen看到以下文件:
kpktgend_0 kpktgend_1 kpktgend_2 kpktgend_3 pgctrl
其中kpktgen_*的多少是根据你的CPU的个数决定的,如我的机子的CPU数目为4,则有四个此文件皮宴。
通卜迹过命令cat /proc/net/pktgen/pgctrl可以型握并查看pktgen的版本等信息:
注:也有使用insmod的,和modprobe的区别是:比如需要安装b模块,但是b依赖于a模块,因此使用insmod安装就需要先安装a模块再安装b模块;如果使用modprobe的话,就可以直接安装b模块,默认将安装a模块
基本上设置完成后就可以进行测试,要查看是否有流量,可以使用ifstat,tcpmp工具查看,使用应用层的抓包工具是无法看到的
关键参数介绍
参数中,最复杂的是 -m <string>
-m <string> 配置端口到逻辑核的映射关系,使用类似BNF类语法.映射的逻辑核要与 [EAL options]中的逻辑核要一致。
运行命令 ./app/x86_64-native-linuxapp-gcc/pktgen -l 0-2 -n 3 -- -P -m "[1].0, [2].1"
官方的default.cfg内容如下:
需要修改的地方有三处:
修改完后即可执行。
图中port1和port2已经有明显区别,收包数相差100个包
用pkggen再发1000个包
⑸ DPDK实验环境搭建
事情是是是是是这样的!
我要用DPDK,但是我觉得搞两台服务器连端口发包,太麻烦,虽然实际上,可能并不麻烦。。。。但我就是想在单台服务器上做。
docker+DPDK+OVS 这种方式来做测试。
然后呢就在网上找了个教程,和我的需求真的是一模一样。。但是按照那个教程做的过程中啊,出了一些问题。记录一下~
教程链接: https://blog.csdn.net/me_blue/article/details/78589592
其中安装部分按照教程里的做就可以了。
安装完dpdk和ovs之后创建网桥以及下发流表用的脚本可以在我的github上获取。 https://github.com/LinanJ/DPDK-OVS-
在这个实验中,把pktgen和testpmd放在两个容器中,然后进行测试。创建容器都没问题,问题是在启动pktgen的时候,总是报内存的错误,要么是内存没有,要么是内存不足!!!
重点来了,朋友们,教程里的socket_mem部分是两个1024对吧。那是因为人家有连个NUMA节点,你有么???
我是没有的。。所以,就会报错,说是socket1上没有内存。。显然没有。所以啊,如果你只有一个numa节点,那么你在pktgen上和testpmd上的命令应该是这样的:
dpdk挂载的就是红线框的这两条
这样就可以了。
⑹ 怎么使用dpdk的steup.sh安装
怎旁扰么使用dpdk的steup.sh安装
setup.exe是安装程序,用于安装许多程序。属Setup Executable(安装可执行文件)。
一般正规的软件或Windows系统都是通过旦明Setup.exe来执行安装的。
也有伪装成正规程序的Setup.exe的病毒。
也有用Installation.exe执行应用程序或驱动程序安装的。
Windows系统真正setup.exe的位置在C:\WINDOWS\system32路径下。
如果setup.exe没有在上面描述的位置,那么请使用修复工具修复,由于部分杀毒软件进行查杀后未对setup.exe的进行系统修复,所以会出现setup.exe错误情运迟旦况。
安装了杀毒软件就可以监控到的伪装成正常程序的Setup.exe,并加以查杀,没提示一般说明是正常程序。
⑺ dpdk-pktgen简单使用
这一步之前,DPDK环境已塔好,pktgen已编译成功,网卡已绑定成功等一系列初始化工作已完成。
命令行参数:-P 和 -m 这两个参数是必要的!
./app/build/pktgen [EAL options] -- \
[-h] [-P] [-G] [-T] [-f cmd_file] \
[-l log_file] [-s P:PCAP_file] [-m ]
-s P: file PCAP packet stream file, 'P' is the port number -f filename Command file (.pkt) to execute or a Lua script (.lua) file
-l filename Write log to filename 写日志
-P Enable PROMISCUOUS mode on all ports 开启混杂模式,必须要的参数
-g address Optional IP address and port number default is (localhost:0x5606)
If -g is used that enable socket support as a server application
-G Enable socket support using default server values localhost:0x5606
-N Enable NUMA support
-T Enable the color output 输出颜色
--crc-strip Strip CRC on all ports
-h Display the help information
参数中,最复杂的是 -m <string>
-m <string> 配置端口到逻辑核的映射关系,使用类似BNF类语法.映射的逻辑核要与 [EAL options]中的逻辑核要一致。
如下,也可以用 {} 来代替 [].
[EAL options]里的参数与DPDK基本一样,主要是配置逻辑核掩码和内存通道数。这里不详解。以上是命令行参数,下面介绍运漏姿行时参数。
详细可参考官网中的资料: pktgen运行时参数
Pktgen:/> help #有帮助提示
这里只介绍最常用的命嫌银令,最常用的配置就是MAC,IPv4|IPv6|ARP,TCP|UDP|ICMP,SPORT|DPORT,PROTO,SEQ等
这些配置可以用 set命令来完成。
除了set命令,常用的还有显示主页面,page 0 | page main
加载和保存 .lua脚本的配置信息 load | save <path-to-file>
启动/结束发包:start | stop <portlist>.
其实不用刻意去记命令怎么使用,按两次Tab键会有命令使用的提示。我现在用的是版本是3.1.2,最新版已到了3.5.0,所以一些配置命令会有些不一样,比如配置ip时,<portlist>的顺序就不一样。以上配置是基于最新版来的,如果在实际中发现按上面的命令不对,请先确认是否为最新版.其实只要大致记住一些命令就行,实际使用时可以按两次Tab键就会有提示,也可以把配置保存成.lua文件,下一次运行时候,直接加载就不用再配置了。由于对lua脚本不太熟,关于lua脚本的使用,等使用熟悉了再来深入讨论一些功能。最后,放一张运行时候的图来压压惊。。。芹搜宴
运行命令:./app/app/x86_64-native-linuxapp-gcc/pktgen -l 1-4 -n 4 -- -P -T -m "[1:2].0,[3:4].1"
祝大家生活愉快。
⑻ 编译和运行DPDK示例程序
DPDK(Data Plane Development Kit)是数据平面开发工具包,由用于加速在各种CPU架构上运行的数据包处理的库组成。
在Linux上部署DPDK的方法请参考:
在Linux(CentOS)上部署DPDK------命令行方式
该章节的内容参照自官网的 DPDK build sample apps
当DPDK的target环境创建好后(例如 x86_64-native-linuxapp-gcc ), x86_64-native-linuxapp-gcc 目录中会包含编译应用程序的库和头文件。
在编译DPDK应用程序之前,首先需要指定两个环境变量:
在DPDK的 examples 路径下面有许多示例应用,这里以其中的 helloworld 为例进行编译:
DPDK的 examples 路径下面的应用均可以通过这种方式编译,也可以直接在 examples 路径下面运行 make ,将这些应用全都编译好。
在运行应用程序之前,需要确保:
DPDK应用程序与DPDK target环境的环境抽象层EAL(Environmental Abstraction Layer )库相关联,该库提供了一些通用于每个DPDK应用程序的选项。
EAL的详细配置请参照: DPDK EAL参数
可按照下列参数运行 ./helloworld :
其中 -l 命令指定cpu cores list是EAL必须的配置;若没有指定 --socket-mem ,则默认会按照预留的hugepages size来分配。
⑼ dpdk源码中未定义的宏是如何在编译时期生成的
它不可能“生成”,磨轮还是需要你指定的,具体对于这些宏如虚肢何指定 要看它编译命令,但是一般编译器可以通过编译环境、差游世命令行参数等方式来定义宏