pktgen使用指南
2021/4/24 10:55:19
本文主要是介绍pktgen使用指南,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
pktgen使用指南
简介
pktgen是一个位于linux内核层的高性能网络测试工具,由瑞士皇家理工大学的TSlab实验室的Robert Olsson开发的(现在应该不在皇家理工了),主要用来测试网络驱动与网卡设备,支持多线程,能够产生随机mac地址、IP地址、UDP端口号的数据包,pktgen 的作者使用多CPU处理器在不同的PCI总线(pci 、pcie等总线)上用千兆以太网卡做过测试(pktgen的表现依赖于CPU处理速率、内存延时、pci总线速率等硬件参数),发送数据速率甚至可以大于10GBit/s。可见是可以满足大多数的网卡等测试需求。
pktgen的配置与统计信息查看都使用/proc文件系统完成,/proc文件系统是一种特殊的,有软件创建的文件系统,内核使用/proc文件系统向外界导出信息,外界也可以通过它配置内核态的一些进程的参数,如ps top uptime等linux发行版中的很多工具就是通过/proc实现的.在大多情况下,我们只用/proc读出数据(用于调试内核驱动等),而在pktgen中配置命令就用到了/proc的写入数据功能。
加载pktgen模块
现在版本的linux发行版大多加入了pktgen,使用以下命令加载pktgen模块:
[root@localhost ~]#modprobe pktgen
加载pktgen内核模块后,会在每个CPU上启动一个内核线程,内核线程的名字从kpktgend_0开始依次增加,下面是四个CPU的主机在加载pktgen后的ps信息
[root@localhost ~]# ps -ef | grep pktgen root 1610 2 0 15:09 ? 00:00:00 [kpktgend_0] root 1611 2 0 15:09 ? 00:00:00 [kpktgend_1] root 1612 2 0 15:09 ? 00:00:00 [kpktgend_2] root 1613 2 0 15:09 ? 00:00:00 [kpktgend_3]
前面也讲到过,pktgen的配置和统计是通过proc文件来完成的,加载pktgen模块后pktgen 的proc文件(在/proc/net/pktgen目录下),kpktgend_x是对应的内核线程的信息,pgctl用来控制pktgen的开始和关闭
kpktgend_0 kpktgend_1 kpktgend_2 kpktgend_3 pgctrl
pktgen使用
将某个端口(如eth0)放到对应的内核线程中配置发送报文的字段
[root@localhost pktgen]# cat kpktgend_1 Running: Stopped: eth0 Result: OK: add_device=eth01echo rem_device_all>kpktgend_1 //为了安全起见,最好先删除绑定在某个线程(kpktgend_1)的所有端口 2echo add_device eth0>kpktgend_1 //添加某个端口(eth1)到某个线程(kpktgend_0)
添加端口后kpktgend_x的信息是
[root@localhost pktgen]# ls eth0 kpktgend_0 kpktgend_1 kpktgend_2 kpktgend_3 pgctrlh0
增加端口后,pktgen目录下也会创建一个和端口同名的文件,如ethx
[root@localhost pktgen]# ls eth0 kpktgend_0 kpktgend_1 kpktgend_2 kpktgend_3 pgctrl
配置发送报文的字段
echo count 1000>eth0 //发送数据包的个数,0 表示一直发送 echo clone_skb 0>eth0 //表示复制多少数据包,clone_skb=1000,克隆1000报文;clone_skb=0表示不克隆,就是一直发送同一个报文。 echo pkt_size 1000>eth0 echo dst 192.168.192.33>eth0 echo dst_mac 00:15:5d:4b:19:b1>eth0
启动pktgen
echo start>pgctrl
查看统计信息
[root@localhost pktgen]# cat eth0 Params: count 1000 min_pkt_size: 58 max_pkt_size: 58 frags: 0 delay: 0 clone_skb: 0 ifname: eth0 flows: 0 flowlen: 0 queue_map_min: 0 queue_map_max: 0 dst_min: 192.168.192.33 dst_max: src_min: src_max: src_mac: 00:15:5d:01:70:01 dst_mac: 00:15:5d:4b:19:b1 udp_src_min: 9 udp_src_max: 9 udp_dst_min: 9 udp_dst_max: 9 src_mac_count: 0 dst_mac_count: 0 Flags: Current: pkts-sofar: 1000 errors: 0 started: 3424209348us stopped: 3424219341us idle: 9324us seq_num: 1001 cur_dst_mac_offset: 0 cur_src_mac_offset: 0 cur_saddr: 192.168.192.45 cur_daddr: 192.168.192.33 cur_udp_dst: 9 cur_udp_src: 9 cur_queue_map: 0 flows: 0 Result: OK: 9992(c668+d9324) usec, 1000 (58byte,0frags) 100072pps 46Mb/sec (46433408bps) errors: 0
pktgen参数
摘自https://www.kernel.org/doc/Documentation/networking/pktgen.txt
测试网络PPS性能,可以通过配置ratep来指定报文发送速率。
Current commands and configuration options ========================================== ** Pgcontrol commands: start stop reset ** Thread commands: add_device rem_device_all ** Device commands: count clone_skb burst debug frags delay src_mac_count dst_mac_count pkt_size min_pkt_size max_pkt_size queue_map_min queue_map_max skb_priority tos (ipv4) traffic_class (ipv6) mpls udp_src_min udp_src_max udp_dst_min udp_dst_max node flag IPSRC_RND IPDST_RND UDPSRC_RND UDPDST_RND MACSRC_RND MACDST_RND TXSIZE_RND IPV6 MPLS_RND VID_RND SVID_RND FLOW_SEQ QUEUE_MAP_RND QUEUE_MAP_CPU UDPCSUM IPSEC NODE_ALLOC NO_TIMESTAMP spi (ipsec) dst_min dst_max src_min src_max dst_mac src_mac clear_counters src6 dst6 dst6_max dst6_min flows flowlen rate ratep xmit_mode <start_xmit|netif_receive> vlan_cfi vlan_id vlan_p svlan_cfi svlan_id svlan_p
pktgen脚本
上面的配置稍微有些复杂,对运维人员不太友好,github上提供了更为方便的pktgen的脚本
https://github.com/netoptimizer/network-testing/tree/master/pktgen - Connect to preview
里面提供了多种pktgen的例子,最常用的是pktgen_sample01_simple.sh和pktgen_sample02_multiqueue.sh,
drwxr-xr-x 1 jiawentao 197121 0 Mar 12 15:24 ./ drwxr-xr-x 1 jiawentao 197121 0 Mar 12 14:23 ../ -rw-r--r-- 1 jiawentao 197121 1843 Mar 12 14:23 README.rst -rw-r--r-- 1 jiawentao 197121 4219 Mar 12 14:23 functions.sh -rw-r--r-- 1 jiawentao 197121 3037 Mar 12 14:23 parameters.sh -rwxr-xr-x 1 jiawentao 197121 2840 Mar 12 14:23 pktgen_bench_xmit_mode_netif_receive.sh* -rwxr-xr-x 1 jiawentao 197121 1995 Mar 12 14:23 pktgen_bench_xmit_mode_queue_xmit.sh* -rwxr-xr-x 1 jiawentao 197121 2029 Mar 12 14:23 pktgen_sample01_simple.sh* -rwxr-xr-x 1 jiawentao 197121 2329 Mar 12 14:23 pktgen_sample02_multiqueue.sh* -rwxr-xr-x 1 jiawentao 197121 2740 Mar 12 14:23 pktgen_sample03_burst_single_flow.sh* -rwxr-xr-x 1 jiawentao 197121 2665 Mar 12 14:23 pktgen_sample04_many_flows.sh* -rwxr-xr-x 1 jiawentao 197121 2411 Mar 12 14:23 pktgen_sample05_flow_per_thread.sh* -rwxr-xr-x 1 jiawentao 197121 3219 Mar 12 14:23 pktgen_sample06_numa_awared_queue_irq_affinity.sh* -rwxr-xr-x 1 jiawentao 197121 3641 Mar 12 14:23 unit_test01_race_add_rem_device_loop.sh*1drwxr-xr-x 1 jiawentao 197121 0
刚才的配置就可以简单化成一条命令,更加方便
./pktgen_sample01_simple.sh -i eth0 -m 00:15:5d:4b:19:b1 -d 192.168.192.33 -t 1 -n 1000
该脚本支持的参数
该脚本是通用脚本,部分参数不支持,需要做简单修改
Usage: ./pktgen_sample01_simple.sh [-vx] -i ethX -i : ($DEV) output interface/device (required) -s : ($PKT_SIZE) packet size -d : ($DEST_IP) destination IP -m : ($DST_MAC) destination MAC-addr -t : ($THREADS) threads to start -f : ($F_THREAD) index of first thread (zero indexed CPU number) -c : ($SKB_CLONE) SKB clones send before alloc new SKB -n : ($COUNT) num messages to send per thread, 0 means indefinitely -b : ($BURST) HW level bursting of SKBs -v : ($VERBOSE) verbose -x : ($DEBUG) debug -6 : ($IP6) IPv6
用pktgen测试网络PPS性能指标
测试的组网和iperf测试基本相同,客户端安装pktgen来发包,接收端通过sar命令(linux系统)来查看端口统计信息,通过对比收发两端的速率来判断是否有丢包。
这篇关于pktgen使用指南的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-19永别了,微服务架构!
- 2024-05-15鸿蒙生态设备数量超8亿台
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?