1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202
|
#!/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
|