Skip to content

Instantly share code, notes, and snippets.

@therandomsecurityguy
Created November 1, 2015 18:00
Show Gist options
  • Save therandomsecurityguy/5a3b060fd6879315b721 to your computer and use it in GitHub Desktop.
Save therandomsecurityguy/5a3b060fd6879315b721 to your computer and use it in GitHub Desktop.
#!/bin/sh
#
# This is an example script for using netperf. Feel free to modify it
# as necessary, but I would suggest that you copy this one first.
# This script performs various UDP unidirectional stream tests.
# usage: ./netperf_udp_stream.sh [machine A's IP] [CPU] [-Tx,x] > filename.txt
#
if [ $# -gt 4 ]; then
echo "try again, correctly -> udp_stream_script hostname [CPU] [-Tx,x] [I]"
exit 1
fi
if [ $# -eq 0 ]; then
echo "try again, correctly -> udp_stream_script hostname [CPU]"
exit 1
fi
# where the programs are
NETHOME=/usr/local/bin
#NETHOME="/opt/netperf"
#NETHOME="."
# at what port will netserver be waiting? If you decide to run
# netserver at a differnet port than the default of 12865, then set
# the value of PORT apropriately
#PORT="-p some_other_portnum"
PORT=""
# The test length in seconds
TEST_TIME=5
# How accurate we want the estimate of performance:
# maximum and minimum test iterations (-i)
# confidence level (99 or 95) and interval (percent)
STATS_STUFF="-i 10,2 -I 99,10"
# The socket sizes that we will be testing. This should be a list of
# integers separated by spaces
SOCKET_SIZES="32768 4M"
# The send sizes that we will be using. Using send sizes that result
# in UDP packets which are larger than link size can be a bad thing to do.
# for FDDI, you can tack-on a 4096 data point
SEND_SIZES="64 1024 1472"
# if there are two parms, parm one it the hostname and parm two will
# be a CPU indicator. actually, anything as a second parm will cause
# the CPU to be measured, but we will "advertise" it should be "CPU"
if [ $# -eq 4 ]; then
REM_HOST=$1
LOC_CPU=""
REM_CPU=""
AFFINITY=""
STREAM="UDP_STREAM"
case $2 in
\CPU) LOC_CPU="-c";REM_CPU="-C";;
\I) STREAM="UDP_MAERTS";;
*) AFFINITY=$2
esac
case $3 in
\CPU) LOC_CPU="-c";REM_CPU="-C";;
\I) STREAM="UDP_MAERTS";;
*) AFFINITY=$3
esac
case $4 in
\CPU) LOC_CPU="-c";REM_CPU="-C";;
\I) STREAM="UDP_MAERTS";;
*) AFFINITY=$4
esac
fi
if [ $# -eq 3 ]; then
REM_HOST=$1
LOC_CPU=""
REM_CPU=""
AFFINITY=""
STREAM="UDP_STREAM"
case $2 in
\CPU) LOC_CPU="-c";REM_CPU="-C";;
\I) STREAM="UDP_MAERTS";;
*) AFFINITY=$2
esac
case $3 in
\CPU) LOC_CPU="-c";REM_CPU="-C";;
\I) STREAM="UDP_MAERTS";;
*) AFFINITY=$3
esac
fi
if [ $# -eq 2 ]; then
REM_HOST=$1
LOC_CPU=""
REM_CPU=""
AFFINITY=""
STREAM="UDP_STREAM"
case $2 in
\CPU) LOC_CPU="-c";REM_CPU="-C";;
\I) STREAM="UDP_MAERTS";;
*) AFFINITY=$2
esac
fi
if [ $# -eq 1 ]; then
REM_HOST=$1
LOC_CPU=""
REM_CPU=""
AFFINITY=""
STREAM="UDP_STREAM"
fi
# If we are measuring CPU utilization, then we can save beaucoup
# time by saving the results of the CPU calibration and passing
# them in during the real tests. So, we execute the new CPU "tests"
# of netperf and put the values into shell vars.
case $LOC_CPU in
\-c) LOC_RATE=`$NETHOME/netperf $PORT -t LOC_CPU`;;
*) LOC_RATE=""
esac
case $REM_CPU in
\-C) REM_RATE=`$NETHOME/netperf $PORT -t REM_CPU -H $REM_HOST`;;
*) REM_RATE=""
esac
# This will tell netperf that headers are not to be displayed
NO_HDR="-P 0"
for SOCKET_SIZE in $SOCKET_SIZES
do
for SEND_SIZE in $SEND_SIZES
do
echo
echo ------------------------------------------------------
echo Testing with the following command line:
echo $NETHOME/netperf $PORT -l $TEST_TIME -H $REM_HOST $STATS_STUFF \
$LOC_CPU $LOC_RATE $REM_CPU $REM_RATE -t $STREAM -- \
-m $SEND_SIZE -s $SOCKET_SIZE -S $SOCKET_SIZE $AFFINITY
$NETHOME/netperf $PORT -l $TEST_TIME -H $REM_HOST $STATS_STUFF \
$LOC_CPU $LOC_RATE $REM_CPU $REM_RATE -t $STREAM -- \
-m $SEND_SIZE -s $SOCKET_SIZE -S $SOCKET_SIZE $AFFINITY
done
done
echo
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment