使用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系统基本都具备,真是一个非常不错的工具!

相关推荐
AOwhisky11 分钟前
Linux 文本处理三剑客:awk、grep、sed 完全指南
linux·运维·服务器·网络·云计算·运维开发
Gavin_91534 分钟前
从零开始部署经典开源项目管理系统最新版redmine6-Linux Debian12
linux·ruby on rails·开源·debian·ruby·redmine
花小璇学linux1 小时前
imx6ull-驱动开发篇31——Linux异步通知
linux·驱动开发·嵌入式软件
shelutai1 小时前
ubuntu 编译ffmpeg6.1 增加drawtext,libx264,libx265等
linux·ubuntu·ffmpeg
runfarther1 小时前
搭建LLaMA-Factory环境
linux·运维·服务器·python·自然语言处理·ai编程·llama-factory
hello_ world.2 小时前
RHCA10NUMA
linux
神秘人X7072 小时前
Linux高效备份:rsync + inotify实时同步
linux·服务器·rsync
轻松Ai享生活2 小时前
一步步学习Linux initrd/initramfs
linux
轻松Ai享生活2 小时前
一步步深入学习Linux Process Scheduling
linux
绵绵细雨中的乡音4 小时前
网络基础知识
linux·网络