202 lines
6.1 KiB
Bash
Executable file
202 lines
6.1 KiB
Bash
Executable file
#!/bin/sh
|
|
#
|
|
# This script runs a series of netperf tests intended to gather the
|
|
# raw material necessary to arrive at estimates for the cost of
|
|
# sending and receiving a TCP segment, the cost of each additional byte
|
|
# and the cost of each incremental segment.
|
|
#
|
|
# there are a number of data points gathered by this script - it might
|
|
# run for a considerable length of time.
|
|
#
|
|
# rick jones 4/99
|
|
#
|
|
# teach it about processor affinity and the TCP_MSS test
|
|
# rick jones 2007-11-08
|
|
#
|
|
|
|
if [ $# -gt 2 ]; then
|
|
echo "try again, correctly -> packet_byte_script hostname [CPU]"
|
|
exit 1
|
|
fi
|
|
|
|
if [ $# -eq 0 ]; then
|
|
echo "try again, correctly -> packet_byte_script hostname [CPU]"
|
|
exit 1
|
|
fi
|
|
|
|
# where is netperf
|
|
NETPERF_DIR=${NETPERF_DIR:=/opt/netperf2/bin}
|
|
|
|
|
|
# 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 NETPERF_PORT apropriately
|
|
# NETPERF_PORT="-p some_other_portnum"
|
|
NETPERF_PORT=${NETPERF_PORT:=""}
|
|
|
|
|
|
# The test length in seconds
|
|
NETPERF_TIME=${NETPERF_TIME:=30}
|
|
|
|
# How accurate we want the estimate of performance:
|
|
# maximum and minimum test iterations (-i)
|
|
# confidence level (99 or 95) and interval (percent)
|
|
NETPERF_STATS=${NETPERF_STATS:="-i 30,3 -I 99,5"}
|
|
|
|
# The socket sizes that we will be testing - using -1 will let it
|
|
# be the system default.
|
|
NETPERF_SKTS=${NETPERF_SKTS:="-1"}
|
|
|
|
# The CPU affinity to be applied
|
|
NETPERF_AFFINITY=${NETPERF_AFFINITY:=""}
|
|
|
|
# NETPERF_CMD is an amalgam of previous variables
|
|
NETPERF_CMD="${NETPERF_DIR}/netperf ${NETPERF_AFFINITY}"
|
|
|
|
# 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 2 ]; then
|
|
REM_HOST=$1
|
|
LOC_CPU="-c"
|
|
REM_CPU="-C"
|
|
fi
|
|
|
|
if [ $# -eq 1 ]; then
|
|
REM_HOST=$1
|
|
fi
|
|
|
|
MSS=`$NETPERF_CMD -H $REM_HOST -t TCP_MSS -P 0 -v 0`
|
|
|
|
# The request,response sizes that we will be using. The netperf
|
|
# command parser will treat "1" the same as "1,1" - I use 1,1 to
|
|
# remember that it is "request,response"
|
|
|
|
# start at one and multiply by two on our way to the MSS
|
|
bar=1
|
|
while [ $bar -lt $MSS ]
|
|
do
|
|
NETPERF_REQS="${NETPERF_REQS} $bar"
|
|
bar=`expr $bar \* 2`
|
|
done
|
|
|
|
# and now multiples of the mss and that plus one
|
|
for i in 1 2 3
|
|
do
|
|
bar=`expr $MSS \* $i`
|
|
NETPERF_REQS="${NETPERF_REQS} $bar"
|
|
NETPERF_REQS="${NETPERF_REQS} `expr $bar + 1`"
|
|
done
|
|
|
|
bar=1
|
|
while [ $bar -lt $MSS ]
|
|
do
|
|
NETPERF_RESP="${NETPERF_RESP} $bar"
|
|
bar=`expr $bar \* 2`
|
|
done
|
|
|
|
for i in 1 2 3
|
|
do
|
|
bar=`expr $MSS \* $i`
|
|
NETPERF_RESP="${NETPERF_RESP} $bar"
|
|
NETPERF_RESP="${NETPERF_RESP} `expr $bar + 1`"
|
|
done
|
|
|
|
|
|
|
|
# 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=`$NETPERF_CMD $PORT -t LOC_CPU`;;
|
|
*) LOC_RATE=""
|
|
esac
|
|
|
|
case $REM_CPU in
|
|
\-C) REM_RATE=`$NETPERF_CMD $PORT -t REM_CPU -H $REM_HOST`;;
|
|
*) REM_RATE=""
|
|
esac
|
|
|
|
# This disables header display
|
|
NO_HDR="-P 0"
|
|
NO_HDR=""
|
|
|
|
for SOCKET_SIZE in $NETPERF_SKTS
|
|
do
|
|
echo
|
|
echo ------------------------------------------------------
|
|
echo Testing with the following command line:
|
|
# we echo the command line for cut and paste to th database
|
|
echo $NETPERF_CMD $NETPERF_PORT -l $NETPERF_TIME -H $REM_HOST -t TCP_RR \
|
|
$LOC_CPU $LOC_RATE $REM_CPU $REM_RATE $NETPERF_STATS --\
|
|
-s $SOCKET_SIZE -S $SOCKET_SIZE
|
|
echo
|
|
echo and these settings for send sizes $NETPERF_REQS
|
|
echo
|
|
|
|
for REQ in $NETPERF_REQS
|
|
do
|
|
# since we have the confidence interval stuff, we do not
|
|
# need to repeat a test multiple times from the shell
|
|
$NETPERF_CMD $NETPERF_PORT -l $NETPERF_TIME -H $REM_HOST $NO_HDR \
|
|
-t TCP_RR $LOC_CPU $LOC_RATE $REM_CPU $REM_RATE $NETPERF_STATS --\
|
|
-r ${REQ},1 -s $SOCKET_SIZE -S $SOCKET_SIZE
|
|
NO_HDR="-P 0"
|
|
done
|
|
echo
|
|
echo ------------------------------------------------------
|
|
NO_HDR=""
|
|
echo Testing with the following command line:
|
|
# we echo the command line for cut and paste to th database
|
|
echo $NETPERF_CMD $NETPERF_PORT -l $NETPERF_TIME -H $REM_HOST -t TCP_RR \
|
|
$LOC_CPU $LOC_RATE $REM_CPU $REM_RATE $NETPERF_STATS --\
|
|
-s $SOCKET_SIZE -S $SOCKET_SIZE
|
|
echo and these settings for response sizes $NETPERF_RESP
|
|
echo
|
|
for RESP in $NETPERF_RESP
|
|
do
|
|
# since we have the confidence interval stuff, we do not
|
|
# need to repeat a test multiple times from the shell
|
|
$NETPERF_CMD $PORT -l $NETPERF_TIME -H $REM_HOST $NO_HDR \
|
|
-t TCP_RR $LOC_CPU $LOC_RATE $REM_CPU $REM_RATE $NETPERF_STATS --\
|
|
-r 1,${RESP} -s $SOCKET_SIZE -S $SOCKET_SIZE
|
|
NO_HDR="-P 0"
|
|
done
|
|
echo
|
|
echo ------------------------------------------------------
|
|
NO_HDR=""
|
|
echo Testing with the following command line:
|
|
# we echo the command line for cut and paste to th database
|
|
echo $NETPERF_CMD $NETPERF_PORT -l $NETPERF_TIME -H $REM_HOST -t TCP_STREAM\
|
|
$LOC_CPU $LOC_RATE $REM_CPU $REM_RATE $NETPERF_STATS --\
|
|
-s $SOCKET_SIZE -S $SOCKET_SIZE
|
|
echo and these settings for response sizes $NETPERF_RESP
|
|
echo
|
|
for REQ in $NETPERF_REQS
|
|
do
|
|
# since we have the confidence interval stuff, we do not
|
|
# need to repeat a test multiple times from the shell
|
|
$NETPERF_CMD $PORT -l $NETPERF_TIME -H $REM_HOST $NO_HDR \
|
|
-t TCP_STREAM $LOC_CPU $LOC_RATE $REM_CPU $REM_RATE $NETPERF_STATS --\
|
|
-m ${REQ} -s $SOCKET_SIZE -S $SOCKET_SIZE -D
|
|
NO_HDR="-P 0"
|
|
done
|
|
done
|
|
|
|
# The test length in seconds for the CRR test, which needs to be
|
|
# longer for a connect/request/response test
|
|
|
|
NETPERF_CRR_TIME=${NETPERF_CRR_TIME:=120}
|
|
|
|
# now we do the TCP_CRR test
|
|
echo
|
|
echo ------------------------------------------------------
|
|
echo $NETPERF_CMD $NETPERF_PORT -l $NETPERF_CRR_TIME -H $REM_HOST -t TCP_CRR\
|
|
$LOC_CPU $LOC_RATE $REM_CPU $REM_RATE $NETPERF_STATS --\
|
|
-s $SOCKET_SIZE -S $SOCKET_SIZE
|
|
echo
|
|
$NETPERF_CMD $NETPERF_PORT -l $NETPERF_CRR_TIME -H $REM_HOST -t TCP_CRR\
|
|
$LOC_CPU $LOC_RATE $REM_CPU $REM_RATE $NETPERF_STATS --\
|
|
-s $SOCKET_SIZE -S $SOCKET_SIZE
|