DPDK+Pktgen环境安装

DPDK - Data Plane Development Kit (官网:http://dpdk.org/

Pktgen - Packet generation (在dpdk官网有链接)

两者搭配,可以实现普通模式下网卡无法达到的包发送速率,在公司的服务器上测试千兆网卡基本可以打满,40G光口在OpenStack passthrough的模式下可以跑到24G左右,据说纯物理服务器可以打到38G左右的速率。第一次见到这种模式,还是比较有意思的,今天主要用最新的版本编译并运行一下这两个软件组合。

准备材料:
KVM + virt-manager
Centos7.4-1708_x64虚拟机 :操作系统安装是选择development模式 + 3个虚拟网卡(其中两个网卡类型为virtio,另外一个可以留用ssh链接guest) + libpcap-dev软件包
dpdk-17.05.2.tar.xz
pktgen-3.4.5.zip

dpdk-17.05.2是当前的一个stable版本,Pktgen则是在一直更新,下载最新的测试,安装方式很简单:

1.解压dpdk和pktgen

# tar xfJ dpdk-17.05.2.tar.xz
# unzip pktgen-3.4.5.zip

2.编译dpdk

# cd dpdk-stable-17.07.2/usertools
# ./dpdk-setup.sh
[12] x86_64-native-linuxapp-gcc

一般libpcap-dev安装正常之后应该都可以成功编译,编译完成之后会在dpdk-stable-17.07.2目录下生成一个x86_64-native-linuxapp-gcc目录,里面会存有dpdk相关的头文件和内核模块,其他程序调用会用到,并且自动将dpdk的相关程序安装到/usr/local/bin,/usr/local/sbin目录下

3.编译pktgen

有了上一步dpdk编译后的环境,首先配置RTE_SDK环境变量为dpdk所在目录,例如

export RTE_SDK=/root/dpdk1.7/dpdk-stable-17.05.2

再配置RTE_TARGET

export RTE_SDK=x86_64-native-linuxapp-gcc

直接编译

make

注意在这个版本的pktgen会出现两个问题:

a: pktgen会自动联网下载lua-5.3.4.tar.gz包,所以如果服务器无法联网就比较麻烦,我在编译完成之后搜索pktgen目录,发现下载的lua-5.3.4.tar.gz包是放在./lib/lua下面的,推测手动去其他地方下载后拷贝进去应该也可以使用

b: pktgen有两个地方编译会提示找不到rte_bus_pci.h,事实确实是没有这个头文件,查看报错的文件里面有一个宏定义,只要dpdk版本高于17.05,就include <rte_bus_pci.h>,实际上dpdk并没有生成这个文件,所以最简单的办法就是将这一段宏注释掉,并分别包含rte_bus.h和rte_pci.h,例如pktgen-stats.c中修改如下

/*
#if RTE_VERSION >= RTE_VERSION_NUM(17, 5, 0, 0)
#include <rte_bus_pci.h>
#endif
*/
#include <rte_bus.h>
#include <rte_pci.h>

然后编译就可以通过了

4.运行pktgen

pktgen实在是一个太过于强大的工具,信息量太大一时无法全部理清,只能参考文档先运行起来再说,基本上前提条件有三:

a: 系统已经配置了大页内存

b: 加载了dpdk的内核模块

c: dpdk已经绑定了网卡

把所有的内容都写下来,可以固化成一个脚本

查询网卡可以直接执行"dpdk-devbind --status"命令或者通过"ethtool -i 网卡名" 找到其对应的总线信息。运行pktgen需要在其根目录下执行,不能cd到pktgen程序所在的目录,运行参数如上所示,也可以-h查看帮助。

今天先到这里,pktgen的功能比较复杂,一时还不能全部熟悉,下一步要研究参数的意义和灵活配置以及pktgen加载本地的pcap数据进行发包的可行性,还有dpdk绑定mellanox网卡的方法。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据