pktgen是一款网络测试工具,可以用于压力测试、性能测试、负载均衡测试等方面。它使用Lua脚本来生成和发送数据包,并且支持多线程处理。
pktgen可以在Linux系统上运行,支持多种协议和数据包类型,如TCP、UDP、ICMP、ARP等。用户可以通过命令行或者图形界面来控制pktgen的运行。
pktgen还提供了详细的统计信息和日志记录功能,可以帮助用户更好地分析测试结果。同时,pktgen的开源性和社区支持也使得它成为了一个非常受欢迎的网络测试工具。
网上有很多讲解pktgen的文章,但总是不够全面细致,看完之后自己还是不会写pktgen测试脚本,为此本文对pktgen进行详细的阐述,让大家看完本文后能够自己动手写pktgen shell.
1.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的写入数据功能。
2.使用pktgen进行发包实验
现在版本的linux发行版大多加入了pktgen,使用以下命令加载pktgen模块:
1 |
|
然后你将在你的电脑的/proc/net/pktgen看到以下文件:
1 |
|
其中kpktgen_*的多少是根据你的CPU的个数决定的,如我的机子的CPU数目为4,则有四个此文件。
通过命令cat /proc/net/pktgen/pgctrl可以查看pktgen的版本等信息:
1 |
|
2.1使用pktgen一些需要注意的地方
1)中断亲和力
当使用某个线程(kpktgend_x)通过某个端口(ethx)发送(接受)数据时,我们应该把这个端口所对应的中断绑定到某一个CPU上,从而防止CPU的变动(操作系统引起的)导致CPU缓存的丢失。具体做法如下
首先,通过以下命令查看ethx所对应的中断,在这里我们以eth3为例
# cat /proc/interrupts | grep eth3
47: 45836 0 0 0 PCI-MSI-edge eth3-TxRx-0
48: 45836 0 0 0 PCI-MSI-edge eth3-TxRx-1
49: 45836 0 0 0 PCI-MSI-edge eth3-TxRx-2
50: 45836 0 0 0 PCI-MSI-edge eth3-TxRx-3
51: 0 0 0 0 PCI-MSI-edge eth3:lsc
由上可以看出eth3使用了五个中断号,为47-51,我们在这里将其都绑定在CPU0上
echo 1 > /proc/irq/47/smp_affinity
echo 1 > /proc/irq/48/smp_affinity
echo 1 > /proc/irq/49/smp_affinity
echo 1 > /proc/irq/50/smp_affinity
echo 1 > /proc/irq/51/smp_affinity文章来源:https://www.toymoban.com/news/detail-825562.html
在文件 /proc/irq/51文章来源地址https://www.toymoban.com/news/detail-825562.html
到了这里,关于pktgen网络测试工具介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!