使用pktgen进行高吞吐发包

引言

一直在寻找一个可以发送高吞吐量的工具,终于发现了pktgen这个宝贝。

它是基于linux内核层的高性能网络测试工具,在虚拟机上测试(本项目中使用虚拟机为ubuntu18版本),发现报文吞吐量可达750Mbps,这还只是应用在单核上。如果用多核,性能应该可以更高。

以下为操作步骤。

加载pktgen模块

使用以下命令加载pktgen模块:

#modprobe pktgen

加载pktgen内核模块后,会在每个CPU上启动一个内核线程,内核线程的名字从kpktgend_0开始依次增加,如下:

#cd /proc/net/pktgen/
#ls
kpktgend_0  pgctrl

kpktgend_0表示只有1个cpu。

kpktgend_x是对应的内核线程的信息。

pgctl用来控制pktgen的开始和关闭。

将网卡配置到内核线程的发送字段

首先,查看未添加网卡前的情况:

#cat kpktgend_0 
Running: 
Stopped: 
Result: NA

查看虚拟机网卡信息:

# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.159.137  netmask 255.255.255.0  broadcast 192.168.159.255
        inet6 fe80::3e85:d37c:8bc2:b054  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:5d:7e:c3  txqueuelen 1000  (Ethernet)
        RX packets 1059  bytes 739186 (739.1 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 512  bytes 56059 (56.0 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

表示虚拟机有一个网卡ens33。

将该网卡添加到内核线程,如下:

# echo "add_device ens33" > /proc/net/pktgen/kpktgend_0
# cat kpktgend_0 
Running: 
Stopped: ens33 
Result: OK: add_device=ens33

此时目录下会增加新文件ens33,如下:

root@ubuntu:/proc/net/pktgen# ls
ens33  kpktgend_0  pgctrl

配置参数

# echo count 999 > ens33   //发送数据包的个数,0表示一直发送
# echo clone_skb 0 > ens33 //表示复制多少数据包,clone_skb=1000,克隆1000报文;clone_skb=0表示不克隆,就是一直发送同一个报文。
# echo pkt_size 998 > ens33 //包的长度
# echo dst 192.168.1.100 > ens33 //目的ip
# echo dst_mac 11:22:33:44:55:66 > ens33  //目的mac

配置完成,可以查看信息(省略了未更改的内容),如下:

# cat ens33
Params: count 999  min_pkt_size: 998  max_pkt_size: 998
     frags: 0  delay: 0  clone_skb: 0  ifname: ens33
     src_mac: 00:0c:29:5d:7e:c3 dst_mac: 11:22:33:44:55:66
     ......
Current:
     cur_saddr: 192.168.1.10  cur_daddr: 192.168.1.10
	 ......

启动发送

# echo start>pgctrl

通过命令查看,如下:

# cat ens33 
......
Result: OK: 18359(c15517+d2842) usec, 999 (998byte,0frags)
  54413pps 434Mb/sec (434433392bps) errors: 0

可以看到结果,发送的包数、帧长、平均流量。

使用wireshark抓包分析流量

注意:由于是对虚拟网卡抓包,所以不要使用实际物理网卡。默认情况下,选择VMnet8即可。如果更改了网卡模式,修改wireshark抓包的网卡设置。

如果是一直发送,即把count设置为0,如下:

# echo count 999 > ens33   //发送数据包的个数,0表示一直发送

通过抓包分析,可以看到能达到750Mbps,如下:

这个效果,挺不错的。

停止发送

# echo stop>pgctrl

总结

使用pktgen,能够高效方便地发送测试流量,不用自己再费劲巴拉写代码了,而且linux系统基本都具备,真是一个非常不错的工具!

相关推荐
Labiod1 小时前
PlantUML 安装
linux·运维·服务器
小流年 °2 小时前
抓包工具Wireshark
网络·测试工具·wireshark
命里有定数3 小时前
Ubuntu问题 -- 设置ubuntu的IP为静态IP (图形化界面设置) 小白友好
linux·tcp/ip·ubuntu·ip
荆棘鸟骑士4 小时前
Linux修改/etc/hosts不起作用(ping: xxx: Name or service not known)的解决方法——开启NSCD
linux
猫猫不是喵喵.4 小时前
【Linux】Linux入门实操——进程管理(重点)
linux·运维·服务器
jackknight5 小时前
浪潮云启操作系统(InLinux) bcache宕机问题分析
linux
基极向上的三极管5 小时前
【Linux学习】【Ubuntu入门】1-8 ubuntu下压缩与解压缩
linux·ubuntu
送南阳马生序6 小时前
Linux 命令之 tar
linux
high20116 小时前
【Apache Paimon】-- 5 -- Flink 向 Paimon 表写入数据
linux·flink·apache·paimon
小小小汐-6 小时前
【linux】高级IO
linux·网络