| #!/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 |