Linux内核pktgen使用
本文最后更新于:2023年9月21日 下午
内核pktgen使用
什么是pktgen
pktgen 是一款 Linux 发包工具,可在内核高速发包。由于pktgen
是内核内置的,使用内核空间,所以它可以达到高带宽、高发包速率,以此更好地测试路由器、交换机和其他网络设备。
一旦加载pktgen
模块后,会自动为每一个CPU创建一个内核线程[1],并将该线程绑定在对应的CPU上。与此同时,在/proc/net/pktgen/
目录下,为每一个线程创建一个kpktgend_X
文件(其中的X为CPU编号),用来控制和监控这些线程,以及一个pgctrl
文件,用来控制pktgen
程序。当卸载pktgen
模块时,/proc/net/pktgen
文件夹会被自动删除。
同时,当将某个网卡绑定在某个线程时,也会在/proc/net/pktgen/
目录下自动创建以该网卡名称为名的文件,用于记录此网卡设备的配置信息和运行信息。
测试程序可以配置成一直运行,或者在发送固定数量的包之后结束。也可以使用快捷键Ctrl+C终止运行。
使能 pktgen
使用pktgen
需要在内核配置文件开启CONFIG_NET_PKTGEN
,
内核在执行一下命令后:
1 |
|
会在文件夹/proc/net/
下创建一个pktgen
文件夹
使用pktgen发包
在加载pktgen之后会在proc/net/pktgen
下创建出如下几个文件:
添加设备
1 |
|
设置报文
- 部分配置
1 |
|
- 查看配置结果
1 |
|
发送报文
1 |
|
查看统计信息
1 |
|
配置命令
控制命令
名称 | 含义 |
---|---|
start | 所有的线程开始发送 |
stop | 停止 |
线程命令
名称 | 含义 |
---|---|
add_device | 添加某个端口到某个线程 |
rem_device_all | 删除绑定在某个线程的所有端口 |
max_before_softirq | 在最多发送多少个数据包后执行do_softirq() |
端口命令
名称 | 含义 |
---|---|
count | 发送数据包的个数,0 表示一直发送 |
clone_skb | 对每个skb进行多少个复制,0表示不复制。对于Dos等测试必须至零 |
debug | 调试 |
frags | 数据包的片段数量 |
delay | 发送两个数据包之间的延时 |
src_mac_count | 源mac的数量,从src mac设置的mac开始轮询 |
dst_mac_count | 目的mac的数量,从dst mac设置的mac开始轮询 |
pkt_size | 链路包的大小(前去CRC的值) |
min_pkt_size | 数据包最小值 |
max_pkt_size | 数据包最大值 |
udp_src_min | 最小源udp端口号 |
udp_src_max | 最大源udp端口号 |
udp_dst_min | 最小目的udp端口号 |
udp_dst_max | 最大目的udp端口号 |
flag IPSRC_RND TXSIZE_RND IPDST_RND UDPSRC_RND UDPDST_RND MACSRC_RND MACDST_RND |
PSRC_RND 源IP随机发送 |
dst_min | 目的IP的最小值 |
dst_max | 目的IP的最大值 |
src_min | 源IP最小值 |
src_max | 源IP最大值 |
dst_mac | 目的mac |
src_mac | 源mac |
clear_counters | 清空计数器,一般程序自动清空 |
dst6 | 目的IPv6地址 |
src6 | 源IPv6地址 |
flows | 并发流的个数 |
flowlen | 流的长度 |
pktgen脚本
脚本实例
1 |
|
执行结果
内核pktgen脚本
在仓库torvalds/linux/samples/pktgen中提供了多个pktgen的脚本例子,
脚本使用
1 |
|
测试网络PPS性能指标,判断是否丢包
客户端安装pktgen来发包,接收端通过sar命令(linux系统)来查看端口统计信息,通过对比收发两端的速率来判断是否有丢包。
其他pktgen命令
查看版本
1 |
|
查看kpktgend进程
1 |
|
参考
pktgen | 孙勇峰的部落格 (sunyongfeng.com)
pktgen——the packet generator within linux kernel-CSDN博客
kernel.org/doc/Documentation/networking/pktgen.txt
networking:pktgen Wiki (linuxfoundation.org)
pktgen使用指南 - mrwuzs - 博客园 (cnblogs.com)
pktgen使用详细教程 - 可酷可乐 - 博客园 (cnblogs.com)
利用pktgen发包工具做性能测试_pktgen prbs_S100400507的博客-CSDN博客
network-testing/pktgen at master · netoptimizer/network-testing (github.com) pktgen测试脚本。
pktgen的使用 (jialeicui.github.io)
https://mp.weixin.qq.com/s/D7h2AnlrDrEGU_eGmWGXcA
↩