1、pktgen工具简介
pktgen是一个位于linux内核层的高性能网络测试工具,主要用来测试网络驱动与网卡设备,支持多线程,能够产生随机mac地址、IP地址、UDP端口号的数据包。
pktgen的配置与统计信息查看都使用/proc文件系统完成,/proc文件系统是一种特殊的,有软件创建的文件系统,内核使用/proc文件系统向外界导出信息,外界也可以通过它配置内核态的一些进程的参数,如ps top uptime等linux发行版中的很多工具就是通过/proc实现的。在大多情况下,我们只用/proc读出数据(用于调试内核驱动等),而在pktgen中配置命令就用到了/proc的写入数据功能。
2、安装pktgen工具
现在版本的linux发行版大多加入了pktgen,使用以下命令加载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的版本等信息:
#cat /proc/net/pktgen/pgctrl
Packet Generator for packet performance testing. Version: 2.74
3、测试虚机配置
使用pktgen打流可以达到10G的流量,所以虚机的配置要尽可能的高,如果可以使用裸机测试,也是可以的。
在正式测试之前,要对收发包虚机进行以下配置:
3.1 udp buffer
将所有设备加大udp buffer的配置
sysctl -w net.core.rmem_default=212992000
sysctl -w net.core.rmem_max=212992000
3.2 发包虚机 pktgen配置
添加设备
modprobe pktgen
echo "rem_device_all" > /proc/net/pktgen/kpktgend_0
echo "add_device bond0" > /proc/net/pktgen/kpktgend_0 #指定发包的网卡
配置报文eip
配置方法,样例仅给出部分配置
echo "pkt_size 256" > /proc/net/pktgen/ bond0
echo "count 0" > /proc/net/pktgen/ bond0
echo "dst 172.168.1.248" > /proc/net/pktgen/ bond0
echo "dst_mac fa:16:3e:2e:25:92" > /proc/net/pktgen/ bond0
端口范围:10(一个端口就是一条流)
echo "udp_src_min 400" > /proc/net/pktgen/ bond0
echo "udp_src_max 444" > /proc/net/pktgen/ bond0
echo "udp_dst_max 544" > /proc/net/pktgen/ bond0
echo "udp_dst_min 400" > /proc/net/pktgen/ bond0
3.3 查看配置结果:
cat /proc/net/pktgen/ bond0
3.4 发送报文
echo "start" > /proc/net/pktgen/pgctrl
3.5 查看发送结果:
cat /proc/net/pktgen/bond0
4、监控结果
4.1 在收包的虚机上查看pps
sar -n DEV 1 10000