首页 > 其他分享 >网络性能分析

网络性能分析

时间:2023-10-08 11:02:28浏览次数:31  
标签:分析 PGDEV pgset 性能 网络 发包 net proc pktgen

 

 

 

 

 

pktgen 使用:

 

是什么?

  • 高性能的发包工具
  • Linux kernel的一个模块

不是什么?

  • 不是用户态的工具软件(所以不能用敲命令行的方式来运行pktgen)
  • 不是全能的发包工具, 只支持UDP报文

安装

一般来讲, 我们的系统上都有 pktgen 的模块, 只不过没有运行而已.下面介绍几个基本操作

  • ps aux | grep pktgen 查看 pktgen 是否运行
  • lsmod | grep pktgen 查看 pktgen 是否在内核中已经加载
  • modprobe pktgen 加载 pktgen
  • modprobe -r pktgen 卸载 pktgen

如果系统里边没有 pktgen, 可以下载 Linux 内核源码, 使能 CONFIG_NET_PKTGEN 选项进行编译, 推荐编译成内核模块方式, 之后就能使用以上的命令来加载或者卸载 pktgen 了.

使用

内核里的 pktgen.txt 介绍了使用方法以及所有可用的命令, 对命令有任何疑问可以进行参考.

如何控制 pktgen

pktgen 使用虚拟文件系统实现与用户交互的方式, pktgen 启动后, 会在 /proc/net/pktgen 下建立对应的文件, 并实现了文件的读写操作驱动用来和用户交互.

就像使用文件一样, 我们可以从文件里面读数据, 往文件里面写数据, 只不过读数据的时候调用的这个文件系统驱动的 read 函数(就是由 pktgen 实现的), 写数据调用的 write 函数. 这样 pktgen 就可以根据这些操作和用户交互.

比如, 下面的操作就是让 pktgen 开始发包 (当然, 怎样发包还是要配置的)

echo start > /proc/net/pktgen/pgctrl

关键命令

参考 pktgen.txt 中的 Current commands and configuration options, 比较常用的有如下命令:

  • 发送给 /proc/net/pktgen/pgctrl 的
    • start 开始发包
    • stop 停止发包
    • reset 重置 pktgen, 就是将建立的 /proc/net/pktgen/ 下面的网口全都删除
  • 发送给 /proc/net/pktgen/kpktgend_X 的
    • add_device 将当前的 pktgen 线程(kpktgend_X)关联到某个网口, 例如 eth0
    • rem_device_all 移除所有的关联网口, 基本上和 reset 功能相同, 只不过这个是移除当前线程关联的网口, reset 是移除所有网口
  • 发送给关联网口的 /proc/net/pktgen/ethX
    • count 此次发送的包的个数, 0为一直发
    • clone_skb 每次发送的重复包数. 例如为100, 那么就是构造一个包之后, 重复发这个包100次之后, 再构造新的报文
    • pkt_size 每个报文的大小 (网卡会自动加4字节的 CRC 校验)
    • 等等

操作方法

从上面可以看出 pgctrl 控制 kpktgend_X 的启动停止发包, kpktgend_X 控制 ethX 使用网卡进行实际动作.

从 pktgen 加载之后, 使用 ps aux | grep pktgen 可以看到和 CPU 核心数相同的内核线程.

那么要让 pktgen 发包, 可以想象出来, 按照以下的步骤即可:

  1. 内核线程 kpktgend_X 关联网口 (操作 kpktgend_X)
  2. 配置网口发送参数 (操作 ehtX)
  3. 启动发送 (操作pgctl)

pktgen.txt 中给的 ftp://robur.slu.se/pub/Linux/net-development/pktgen-testing/examples/ 已经失效, 可以从作者给的链接中查看例子, 例如: pktgen.conf-1-1

#! /bin/sh
#modprobe pktgen
# 写虚拟文件系统的函数, 每次操作之前, 设置好要操作的设备 $PGDEV 为 pgctl/kpktgend_X/ehtX
function pgset() {
    local result

    echo $1 > $PGDEV

    result=`cat $PGDEV | fgrep "Result: OK:"`
    if [ "$result" = "" ]; then
         cat $PGDEV | fgrep Result:
    fi
}

function pg() {
    echo inject > $PGDEV
    cat $PGDEV
}

# Config Start Here -----------------------------------------------------------


# thread config
# Each CPU has own thread. Two CPU exammple. We add eth1, eth2 respectivly.

# 移除线程中对应的所有网口, 再添加
PGDEV=/proc/net/pktgen/kpktgend_0
  echo "Removing all devices"
 pgset "rem_device_all" 
  echo "Adding eth1"
 pgset "add_device eth1" 
  echo "Setting max_before_softirq 10000"
 pgset "max_before_softirq 10000"


# device config
# ipg is inter packet gap. 0 means maximum speed.

CLONE_SKB="clone_skb 1000000"
# NIC adds 4 bytes CRC
PKT_SIZE="pkt_size 60"

# COUNT 0 means forever
#COUNT="count 0"
COUNT="count 10000000"
# ipg 参数在我实验的时候无效, 我从2.6.32的源码中也没有看到相关的设置, 可以将 ipg 相关的配置删掉
#IPG="ipg 0"

PGDEV=/proc/net/pktgen/eth1
  echo "Configuring $PGDEV"
 pgset "$COUNT"
 pgset "$CLONE_SKB"
 pgset "$PKT_SIZE"
 #pgset "$IPG"
 # 配置目标IP
 pgset "dst 10.10.11.2" 
 # 配置目标MAC
 pgset "dst_mac  00:04:23:08:91:dc"


# Time to run
PGDEV=/proc/net/pktgen/pgctrl
# 发送 start 给 pgctl, 让 pktgen 开始发包
 echo "Running... ctrl^C to stop"
 pgset "start" 
 echo "Done"

# Result can be vieved in /proc/net/pktgen/eth1

到这里, 应该可以自己写脚本来控制 pktgen 发包了

源码分析

pktgen 的源码位于 linux_src/net/core/pktgen.c, 可以在线浏览pktgen.c

参考
pktgen - linuxfoundation
虚拟文件系统-概述

本文地址 pktgen的使用 转载请注明出处

 

参考应用:

https://blog.csdn.net/WANGYONGZIXUE/article/details/125988090

https://blog.csdn.net/weixin_39879219/article/details/116786632

http://jialeicui.github.io/blog/pktgen.html

 

标签:分析,PGDEV,pgset,性能,网络,发包,net,proc,pktgen
From: https://www.cnblogs.com/rebrobot/p/17748374.html

相关文章

  • 升讯威在线客服系统的并发高性能数据处理技术:对接百度自动翻译
    我在业余时间开发维护了一款免费开源的升讯威在线客服系统,也收获了许多用户。对我来说,只要能获得用户的认可,就是我最大的动力。最近客服系统成功经受住了客户现场组织的压力测试,获得了客户的认可。客户组织多名客服上线后,所有员工同一时间打开访客页面疯狂不停的给在线客服发消......
  • JVM性能调优总结
    #tomcat的jvm优化生产案例:[root@centos8~]#vim/usr/local/tomcat/bin/catalina.shJAVA_OPTS="-server-Xms4g-Xmx4g-Xss512k-Xmn1g-XX:CMSInitiatingOccupancyFraction=65-XX:+AggressiveOpts-XX:+UseBiasedLocking-XX:+DisableExplicitGC-XX:MaxTenuringThreshol......
  • 文本分类 2018-2020 文献分析
    文本分类转自https://mp.weixin.qq.com/s/0hKzedHimfPtWgzEk49YzAhttps://mp.weixin.qq.com/s/0hKzedHimfPtWgzEk49YzA ASurveyonTextClassification:FromShallowtoDeepLearning,2020[1]     2018Multi-grainedattentionnetworkforaspect-level......
  • 三维模型3DTile格式轻量化的纹理压缩和质量关系分析
    三维模型3DTile格式轻量化的纹理压缩和质量关系分析 在三维模型的3DTile格式轻量化处理中,纹理压缩是一个重要环节。但是,纹理压缩和模型质量之间存在明显的关系需要权衡。以下是纹理压缩和模型质量关系的详细分析:1、压缩率与纹理质量:一般来说,高度压缩的纹理可以大大减小文件大......
  • 基于 Linux、C++实现的高性能内存池
    1.引入内存池的意义  内存池(MemoryPool)是一种内存分配方式,又被称为固定大小区块规划(fixed-size-blocksallocation)。通常我们习惯直接使用new、malloc等API申请分配内存,但是这种方式非常容易产生内存碎片,早晚都会申请内存失败。并且在比较复杂的代码或者继承的屎山......
  • Java网络编程
    InetAddress端口协议......
  • 计算机网络 基础面试第二弹
    1.TCP三次握手和四次挥手TCP三次握手的过程如下:第一步(SYN):客户端向服务器发送一个带有SYN(同步)标志的TCP包,指示客户端希望建立连接。这个包包含一个随机的初始序列号(ISN)。第二步(SYN-ACK):服务器收到客户端的SYN包后,会发送一个带有SYN和ACK(确认)标志的TCP包作为回应。服务器也会......
  • java题目编写及分析
    首先想分享给大家的是三个题目集,其难易程度是由易到难(我会着重挑几个题目给大家分析)  第一个题目集所包含的题目为身体质量指数BMI测算,长度质量单位换算,奇数求和,房产税费计算,游戏角色选择,学号识别,巴比伦法求平方根近似值,二进制数值提取,判断三角形类型共九个题目,在第一个题目......
  • Linux p1 VMware虚拟机网络连接三种模式
    VMware虚拟机网络连接三种模式:想自己记录笔记,但是完全写不出来啊,直接转载吧桥接模式:桥接模式,点击查看NAT模式:NAT模式,点击查看主机模式:主机模式,点击查看......
  • 实验3:OpenFlow协议分析实践 实验4:开源控制器实践——OpenDaylight
    实验3:OpenFlow协议分析实践一、实验目的能够运用wireshark对OpenFlow协议数据交互过程进行抓包;能够借助包解析工具,分析与解释OpenFlow协议的数据包交互过程与机制。二、实验环境Ubuntu21.10三、实验内容搭建拓扑,完成相关IP配置,并连接OpenDaylight控制器,实现主机......