使用netperf工具测试DPU网卡极致性能

本文介绍了一个使用NetPerf工具进行网络性能测试的脚本。该脚本能够测试TCP及UDP的吞吐量,并通过多次执行获取平均值以提高准确性。此外,脚本还支持设置环境变量来调整测试行为。
netperf测试性能

###################################################
#  文件:NetperfDemo+tcpdump.sh
#  作者:xxxxx
#  日期:2022.04.19
#  版本:V1.1
#  功能:网卡性能测试TCPUDP的吞吐+时延
###################################################
#!/bin/sh

echo "--***当前脚本执行路径作为测试结果输出路径***--"
echo "--***请保证输入输出路径在当前用户下可以读写***--"
echo "-----请保证当前环境支持python3以及库xlsxwriter-----"
sleep 1

path="$(eval pwd)"/
dumpint=p1p1

while true
do
  read -p "请输入 netserverIP:" ip
  result=`echo $ip | grep '^[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}$'`
  echo $result
  if [[ "$result" == "" ]]
  then
    echo "ip输入格式有误,请重新输入ip"
  else
    break
   fi
done

read -p "请输入 执行次数:" times

echo "-**- netserverIP = $ip;执行次数:$times;执行路径:$path -**-"

while true
do
  read -p "是否设置环境变量LD_PRELOAD=libyusur_socket.so?(yes/no):" LD_P
  if [ "${LD_P}" == "yes" ] || [ "${LD_P}" == "y" ]
  then
    setenv="LD_PRELOAD=libyusur_socket.so "
    break
  elif [ "${LD_P}" == "no" ] || [ "${LD_P}" == "n" ]
  then
    setenv=" "
    break
  else
    echo "请输入 yes/no 或者 y/n !"
  fi
done

# #提取关键字段
# s0="15."
# s1="10."

#初始化结果记录文件名称
#rfileTCP[0]="TCP时延.txt"
rfileTCP[0]="TCP吞吐.txt"
#rfileUDP[0]="UDP时延.txt"
rfileUDP[0]="UDP吞吐.txt"
#命令数组 对应循环参数 i
#netperfTCP[0]="taskset -c 1,2,3 netperf -t TCP_RR -H $ip -l 30 -- -r"
netperfTCP[0]="taskset -c 1,2,3 netperf -t TCP_STREAM -H $ip -l 30 -- -m" 
#netperfUDP[0]="taskset -c 1,2,3 netperf -t UDP_RR -H $ip -l 30 -- -r"
netperfUDP[0]="taskset -c 1,2,3 netperf -t UDP_STREAM -H $ip -l 30 -- -m"

#testnameTCP[0]="TCP时延"
testnameTCP[0]="TCP吞吐"
#testnameUDP[0]="UDP时延"
testnameUDP[0]="UDP吞吐"

#字节数组 对应循环参数 j
bytesTCP=(16 32 64 128 256 512 1024 1460)
bytesUDP=(16 32 64 128 256 512 1024 1472)
# bytesTCP=(16 32 64 128 256 512 1024 1460 2048 4096 16384 65536)
# bytesUDP=(16 32 64 128 256 512 1024 1472 2048 4096 16384)

echo "Test Begin $data"
rm -f *.txt
rm -f *.xlsx
for ((i=0;i<${#netperfTCP[@]};i++));do #i对应测试命令/结果记录文件,当前设置了2条命令
	#记录文件检索是否存在,不存在则创建
	if [ -f "$path${rfileTCP[$i]}" ];then
 		echo "$path${rfileTCP[$i]}文件已存在"
	else
 		echo "$path${rfileTCP[$i]}文件不存在,已新建"
		touch $path${rfileTCP[$i]}
	fi
	
	eval "date >> $path${rfileTCP[$i]}"

	eval "echo >> $path${rfileTCP[$i]}"

	eval "echo "----------${testnameTCP[$i]}----------" >> $path${rfileTCP[$i]}"
	
	for ((j=0;j<${#bytesTCP[*]};j++));do #j对应数组bytes
		eval "echo "------bytesTCP=${bytesTCP[$j]}------" >> $path${rfileTCP[$i]}"
		for ((k=0;k<$times;k++));do #每项测试执行N次取平均值
			t=`expr $k + 1`
			eval "echo "----Times=$t----" >> $path${rfileTCP[$i]}"				
			
      		#dumpfile="TCPlatency_"${bytesTCP[$j]}"_"$k".pcap"
      		eval "${setenv} ${netperfTCP[$i]} ${bytesTCP[$j]} >> $path${rfileTCP[$i]}"
            # for ((r=0;r<2;r++));do
            # {
            #     if [ $r -eq 0 ] && [ $i -eq 0 ];then
            #         #eval "tcpdump -i $dumpint -c 3000 -w $dumpfile"
            #         echo $dumpfile
            #     elif [ $r -eq 1 ];then
			      #   eval "${setenv} ${netperfTCP[$i]} ${bytesTCP[$j]} >> $path${rfileTCP[$i]}"
            #     else
            #         continue
            #     fi
            # }&
            # done			
			wait
			sleep 1			
			eval "echo >> $path${rfileTCP[$i]}"
		done



		eval "echo "----------END----------">> $path${rfileTCP[$i]}"
		eval "echo >> $path${rfileTCP[$i]}"
	done

	OutputFile=$path${testnameTCP[$i]}"extract.txt"

	#cat  $path${rfileTCP[$i]}| grep "^ *[[:digit:]]"|grep $s1|awk '{if(NF>4) print $NF}' >> $OutputFile
	cat  $path${rfileTCP[$i]}| grep "^ *[[:digit:]]"|awk '{if(NF>4) print $NF}' >> $OutputFile
	
done

for ((i=0;i<${#netperfUDP[@]};i++));do #i对应测试命令/结果记录文件,当前设置了2条命令
	#记录文件检索是否存在,不存在则创建
	if [ -f "$path${rfileUDP[$i]}" ];then
 		echo "$path${rfileUDP[$i]}文件已存在"
	else
 		echo "$path${rfileUDP[$i]}文件不存在,已新建"
		touch $path${rfileUDP[$i]}
	fi
	
	eval "date >> $path${rfileUDP[$i]}"

	eval "echo >> $path${rfileUDP[$i]}"

	eval "echo "----------${testnameUDP[$i]}----------" >> $path${rfileUDP[$i]}"
	
	for ((j=0;j<${#bytesUDP[*]};j++));do #j对应数组bytes
		eval "echo "------bytesUDP=${bytesUDP[$j]}------" >> $path${rfileUDP[$i]}"
		for ((k=0;k<$times;k++));do #每项测试执行N次取平均值
			t=`expr $k + 1`
			eval "echo "----Times=$t----" >> $path${rfileUDP[$i]}"				
			#eval "${netperfUDP[$i]} ${bytes[$j]} >> $path${rfileUDP[$i]}"
            # dumpfile="UDPlatency_"${bytesUDP[$j]}"_"$k".pcap"
            # echo $dumpfile
            # for ((r=0;r<2;r++));do
            # {
            #     if [ $r -eq 0 ] && [ $i -eq 0 ];then
            #         eval "tcpdump -i $dumpint -c 3000 -w $dumpfile"
            #     elif [ $r -eq 1 ];then
			eval "${setenv} ${netperfUDP[$i]} ${bytesUDP[$j]} >> $path${rfileUDP[$i]}"
            #     else
            #         continue
            #     fi
            # }&
            # done			
			wait
			sleep 1			
			eval "echo >> $path${rfileUDP[$i]}"
		done



		eval "echo "----------END----------">> $path${rfileUDP[$i]}"
		eval "echo >> $path${rfileUDP[$i]}"
	done
	#提取结果:
	#if [ $i -eq 3 ];then
		#cat  $path${rfileUDP[$i]}| grep $s1 | awk '{print $2 "\t" $NF}' >> $path${rfileUDP[$i]}
	#else
	OutputFile=$path${testnameUDP[$i]}"extract.txt"
	#cat  $path${rfileUDP[$i]}| grep $s1 | awk '{print $NF}' >> $OutputFile
	#cat  $path${rfileUDP[$i]}| grep "^ *[[:digit:]]"|grep $s1| awk '{if(NF>4) print $NF}' >> $OutputFile
	cat  $path${rfileUDP[$i]}| grep "^ *[[:digit:]]"| awk '{if(NF>=4) print $NF}' >> $OutputFile
	#fi
done

# sleep 2

##bytesTCP=$(echo ${bytesTCP[@]})#将数组转换为字符串传递给python脚本
##bytesUDP=$(echo ${bytesUDP[@]})

eval "python3.6 makeExcel.py $times $path "
#$bytesTCP $bytesUDP"

echo "Test End"





评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值