使用dpdk-pktgen进行发包,dpdk-testpmd和dpdk-pdump进行收包并保存为pcap文件
**发包虚拟机版本号:**Ubuntu 16.04,dpdk 19.11.11,pktgen19.12.0
**收包虚拟机版本号:**Ubuntu16.04,dpdk 18.11.11
本文不介绍dpdk的安装,可以参考dpdk官方文档和相关博客进行相应的安装
1.启动发包方的dpdk
启动dpdk总共需要三步:(1)挂载大页内存(2)挂载驱动,绑定网卡(3)预先导出命令RTE_SDK和RTE_TARGET
直接使用命令
./dpdk-start.sh
dpdk-start.sh脚本(need adjust下方的需要修改)如下所示:
#!/bin/bash
//need adjust
//0000:02:06.0是我自己虚拟机中将要绑定到dpdk上的网卡
//0000:02:06.0查看步骤见下文
export PCI_IF="0000:02:06.0"
//end need adjust
if [ `whoami` != 'root' ]; then
echo "Please run this as root..., don't worry about it..."
exit 1
fi
if [ ! -d /mnt/huge ]; then
mkdir /mnt/huge
chmod 777 /mnt/huge/
fi
mount -t hugetlbfs nodev /mnt/huge
echo 1024 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
echo "Setting env..."
//need adjust
//RTE_SDK代表dpdk的安装目录,下方是我自己的dpdk的安装目录,可自行修改
//RTE_TARGE代表dpdk目标环境目录,下方是我自己的dpdk的目标环境目录,可自行修改
export RTE_SDK=/home/p4/dpdk/dpdk-stable-19.11.11
export RTE_TARGET=x86_64-native-linuxapp-gcc
//end need adjust
modprobe uio
//need adjust
insmod /home/p4/dpdk/dpdk-stable-19.11.11/x86_64-native-linuxapp-gcc/kmod/igb_uio.ko
dpdkdevbind=/home/p4/dpdk/dpdk-stable-19.11.11/usertools/dpdk-devbind.py
//end need adjust
$dpdkdevbind --force -u $PCI_IF
$dpdkdevbind -b igb_uio $PCI_IF
$dpdkdevbind -s
echo "dpdk-down..."
在退出dpdk时,使用命令
./dpdk-down.sh
dpdk-down.sh脚本如下所示
#!/bin/bash
//need adjust
export PCI_IF="0000:02:06.0"
rmmod /home/p4/dpdk/dpdk-stable-19.11.11/x86_64-native-linuxapp-gcc/kmod/igb_uio.ko
dpdkdevbind=/home/p4/dpdk/dpdk-stable-19.11.11/usertools/dpdk-devbind.py
//end need adjust
$dpdkdevbind --force -u $PCI_IF
$dpdkdevbind -b e1000 $PCI_IF
$dpdkdevbind -s
0000:02:06.0查看步骤
(1)使用cd命令进入到dpdk安装目录下的usertools目录下
(2)使用以下命令进行查看
./dpdk-devbind.py --status
2.启动pktgen
(1)进入到pktgen安装目录下的/app/x86_64-native-linuxapp-gcc/app中
(2) 输入以下命令执行pktgen
./pktgen -l 0-1 -n 3 -- -P -m "[1].0"
简单解释下相关命令——其中**–**前面的为EAL命令选项,后面的为pktgen命令选项,具体可查看官网文档,附上链接https://pktgen-dpdk.readthedocs.io/en/latest/running.html
-l 代表使用的逻辑核,此例代表使用逻辑核0,1
-n 代表使用的内存通道数,此例代表使用3个内存通道
-P 代表在所有端口上启用混杂模式。
-m 代表用于将端口映射到逻辑内核的矩阵,此例表示逻辑核1处理端口0的发送和接收
(3) 输入下列命令进行发包
set 0 dst ip xxx.xxx.xxx.xxx//设置包的目的ip地址
set 0 dst mac xx:xx:xx:xx//设置包的目的mac地址
set 0 count 100//设置发包数量为100,这个测试pktgen发包性能时可以不用输入
start 0//代表开始发包
quit 0//代表停止发包
3.在接收方虚拟机中启动dpdk
同第一步
4.在接收方编译启动testpmd
(1) 进入dpdk安装目录下的/app/testpmd目录中
(2) 打开终端,进入root用户下,导入环境变量
//need adjust
//RTE_SDK代表dpdk的安装目录,下方是我自己的dpdk的安装目录,可自行修改
//RTE_TARGE代表dpdk目标环境目录,下方是我自己的dpdk的目标环境目录,可自行修改
export RTE_SDK=/home/p4/dpdk/dpdk-stable-18.11.11
export RTE_TARGET=x86_64-native-linuxapp-gcc
//end
(3) 使用make命令进行编译
(4) 启动testpmd进行收包
./testpmd -c 0x3 -n 2 -- -i
**–**前面的为EAL命令选项,后面的为testpmd命令选项
官方文档链接–http://doc.dpdk.org/guides-18.11/testpmd_app_ug/run_app.html
-c 代表使用的逻辑核,此例代表使用的是逻辑核0,1
-i 代表使用交互模式
(5) 进入testpmd交互模式,输入命令
> start
> show port stats all//呈现各个端口的收发包情况
5.在接收方虚拟机中编译启动pdump
(1) 进入dpdk安装目录下的/app/pdump目录中
(2) 打开终端,进入root用户下,导入环境变量
//need adjust
//RTE_SDK代表dpdk的安装目录,下方是我自己的dpdk的安装目录,可自行修改
//RTE_TARGE代表dpdk目标环境目录,下方是我自己的dpdk的目标环境目录,可自行修改
export RTE_SDK=/home/p4/dpdk/dpdk-stable-18.11.11
export RTE_TARGET=x86_64-native-linuxapp-gcc
//end need adjust
(3) 使用make命令进行编译
(4) 输入命令进行收包,并将包存为pcap文件
./build/app/dpdk-pdump -- --pdump 'port=0,queue=*,rx-dev=/home/p4/capture16.pcap'
**–**前面的为EAL命令选项,后面的为pdump命令选项
官方文档链接–http://doc.dpdk.org/guides-18.11/tools/pdump.html
(5)可以在/home/p4/目录下使用wireshark查看capture16.pcap文件