1#!/bin/sh
2#set -x
3#
4# This is a script to generate a quick "snapshot" of performance for a
5# pair of nodes. At first, it will perform the following tests:
6#
7# TCP Stream test with 56KB socket buffers and 4KB sends
8# TCP Stream test with 32KB socket buffers and 4KB sends
9# TCP Request/Response test with 1 byte requests and 1 byte responses
10# UDP Request/Response test with 1 byte requests and 1 byte responses
11# UDP Request/Response test with 516 byte requests and 4 byte responses
12# UDP Stream test with 32KB socket buffers and 4KB sends
13# UDP Stream test with 32KB socket buffers and 1KB sends
14#
15# All tests will run for sixty seconds. Confidence intervals are used
16# to insure the repeatability of the test. This means that the soonest
17# the script will be finished is 21 minutes.
18#
19# This script takes two parameters. The first parm is the name of the
20# remote host. It is a required parameter. The second will either
21# enable or disable CPU utilization measurements. It is an optional
22# parameter which defaults to no CPU utilization measurements.
23#
24# usage: snapshot_script hostname [CPU]
25#
26# mod 6/29/95 - echo progress information to stderr so that we can 
27#               see forward progress even when the results are 
28#               re-directed to a file
29#
30# mod 5/27/96 - switch from NETHOME to NETPERF and take the user's value
31#               if it is already set
32#
33# mod 8/12/96 - fix the default netperf command variable so it finds the
34#               executable and not the directory...
35#
36# First, let us set-up some of the defaults
37#
38# where is netperf installed, there are a few possible places:
39
40NETPERF_CMD=${NETPERF_CMD:=/opt/netperf/netperf}
41
42
43# there should be no more than two parms passed
44
45if [ $# -gt 2 ]; then
46  echo "try again, correctly -> snapshot_script hostname [CPU]"
47  exit 1
48fi
49
50if [ $# -eq 0 ]; then
51  echo "try again, correctly -> snapshot_script hostname [CPU]"
52  exit 1
53fi
54
55# if there are two parms, parm one it the hostname and parm two will
56# be a CPU indicator. actuall, anything as a second parm will cause
57# the CPU to be measured, but we will "advertise" it should be "CPU"
58
59if [ $# -eq 2 ]; then
60  REM_HOST=$1
61  LOC_CPU="-c"
62  REM_CPU="-C"
63fi
64
65if [ $# -eq 1 ]; then
66  REM_HOST=$1
67fi
68
69# at what port will netserver be waiting? If you decide to run
70# netserver at a differnet port than the default of 12865, then set
71# the value of PORT apropriately
72#NETPERF_PORT="-p some_other_portnum"
73NETPERF_PORT=${NETPERF_PORT:=""}
74
75# How accurate we want the estimate of performance: 
76#      maximum and minimum test iterations (-i)
77#      confidence level (99 or 95) and interval (percent)
78STATS_STUFF="-i 10,3 -I 99,5"
79
80# length in time of the test - should be 60 seconds
81NETPERF_TIME=${NETPERF_TIME:=60}
82
83# where is the bitbucket?
84BITBUCKET="/dev/null"
85
86# announce start of test
87echo Netperf snapshot script started at `date` >&2
88
89# If we are measuring CPU utilization, then we can save beaucoup time
90# by saving the results of the CPU calibration and passing them in
91# during the real tests. So, we execute the new CPU "tests" of netperf
92# and put the values into shell vars.
93
94case $LOC_CPU in
95\-c) LOC_RATE=`$NETPERF_CMD $NETPERF_PORT -t LOC_CPU`;;
96*) LOC_RATE=""
97esac
98
99case $REM_CPU in
100\-C) REM_RATE=`$NETPERF_CMD $NETPERF_PORT -t REM_CPU -H $REM_HOST`;;
101*) REM_RATE=""
102esac
103
104# We will perform three twenty second warm-up tests at this point, but
105# we will not display the results of those tests. This is unlikely to
106# make any difference in the results except right after a system
107# reboot, but this is supposed to be rather "general." We will do a
108# TCP stream and a TCP req/resp test
109
110WARM_TIME="10"
111
112$NETPERF_CMD $NETPERF_PORT -l $WARM_TIME -t TCP_STREAM -H $REM_HOST -- \
113  -s 32768 -S 32768 -m 4096 > ${BITBUCKET}
114$NETPERF_CMD $NETPERF_PORT -l $WARM_TIME -t TCP_STREAM -H $REM_HOST -- \
115  -s 32768 -S 32768 -m 96 > ${BITBUCKET}
116$NETPERF_CMD $NETPERF_PORT -l $WARM_TIME -t TCP_RR -H $REM_HOST -- \
117  -r 1,1 > ${BITBUCKET}
118
119# The warm-ups are complete, so perform the real tests first, the
120# stream tests, then the request/response
121
122echo Starting 56x4  TCP_STREAM tests at `date` >&2
123
124# a 56x4 TCP_STREAM test
125echo
126echo ------------------------------------
127echo Testing with the following command line:
128echo $NETPERF_CMD $NETPERF_PORT -t TCP_STREAM -l $NETPERF_TIME -H $REM_HOST \
129  $LOC_CPU $LOC_RATE $REM_CPU $REM_RATE $STATS_STUFF -- \
130  -s 57344 -S 57344 -m 4096
131echo
132$NETPERF_CMD $NETPERF_PORT -t TCP_STREAM -l $NETPERF_TIME -H $REM_HOST \
133  $LOC_CPU $LOC_RATE $REM_CPU $REM_RATE $STATS_STUFF -- \
134  -s 57344 -S 57344 -m 4096
135echo
136echo
137# a 32x4 TCP_STREAM test
138echo Starting 32x4  TCP_STREAM tests at `date` >&2
139echo
140echo ------------------------------------
141echo Testing with the following command line:
142echo $NETPERF_CMD $NETPERF_PORT -t TCP_STREAM -l $NETPERF_TIME -H $REM_HOST \
143 $LOC_CPU $LOC_RATE $REM_CPU $REM_RATE $STATS_STUFF -- \
144 -s 32768 -S 32768 -m 4096 
145echo
146$NETPERF_CMD $NETPERF_PORT -t TCP_STREAM -l $NETPERF_TIME -H $REM_HOST \
147 $LOC_CPU $LOC_RATE $REM_CPU $REM_RATE $STATS_STUFF -- \
148 -s 32768 -S 32768 -m 4096 
149echo
150echo
151# a single-byte TCP_RR
152echo Starting 1,1   TCP_RR     tests at `date` >&2
153echo
154echo ------------------------------------
155echo Testing with the following command line:
156echo $NETPERF_CMD $NETPERF_PORT -t TCP_RR -l $NETPERF_TIME -H $REM_HOST \
157 $LOC_CPU $LOC_RATE $REM_CPU $REM_RATE $STATS_STUFF -- \
158 -r 1,1
159echo
160$NETPERF_CMD $NETPERF_PORT -t TCP_RR -l $NETPERF_TIME -H $REM_HOST \
161 $LOC_CPU $LOC_RATE $REM_CPU $REM_RATE $STATS_STUFF -- \
162 -r 1,1
163echo
164echo
165echo Starting 1,1   UDP_RR     tests at `date` >&2
166echo
167echo ------------------------------------
168echo Testing with the following command line:
169# a single-byte UDP_RR
170echo $NETPERF_CMD $NETPERF_PORT -t UDP_RR -l $NETPERF_TIME -H $REM_HOST \
171 $LOC_CPU $LOC_RATE $REM_CPU $REM_RATE $STATS_STUFF -- \
172 -r 1,1
173echo
174$NETPERF_CMD $NETPERF_PORT -t UDP_RR -l $NETPERF_TIME -H $REM_HOST \
175 $LOC_CPU $LOC_RATE $REM_CPU $REM_RATE $STATS_STUFF -- \
176 -r 1,1
177echo
178echo
179# a UDP_RR test much like tftp
180echo Starting 512,4 UDP_RR     tests at `date` >&2
181echo
182echo ------------------------------------
183echo Testing with the following command line:
184echo $NETPERF_CMD $NETPERF_PORT -t UDP_RR -l $NETPERF_TIME -H $REM_HOST \
185 $LOC_CPU $LOC_RATE $REM_CPU $REM_RATE $STATS_STUFF -- \
186 -r 516,4
187echo
188$NETPERF_CMD $NETPERF_PORT -t UDP_RR -l $NETPERF_TIME -H $REM_HOST \
189 $LOC_CPU $LOC_RATE $REM_CPU $REM_RATE $STATS_STUFF -- -r 516,4
190# a 32x4 UDP_STREAM test
191echo Starting 32x4  UDP_STREAM tests at `date` >&2
192echo
193echo ------------------------------------
194echo Testing with the following command line:
195echo $NETPERF_CMD $NETPERF_PORT -t UDP_STREAM -l $NETPERF_TIME -H $REM_HOST \
196 $LOC_CPU $LOC_RATE $REM_CPU $REM_RATE $STATS_STUFF -- \
197 -s 32768 -S 32768 -m 4096
198echo
199$NETPERF_CMD $NETPERF_PORT -t UDP_STREAM -l $NETPERF_TIME -H $REM_HOST \
200 $LOC_CPU $LOC_RATE $REM_CPU $REM_RATE $STATS_STUFF -- \
201 -s 32768 -S 32768 -m 4096
202echo
203echo
204# a 32x1 UDP_STREAM test
205echo Starting 32x1  UDP_STREAM tests at `date` >&2
206echo
207echo ------------------------------------
208echo Testing with the following command line:
209echo $NETPERF_CMD $NETPERF_PORT -t UDP_STREAM -l $NETPERF_TIME -H $REM_HOST \
210 $LOC_CPU $LOC_RATE $REM_CPU $REM_RATE $STATS_STUFF -- \
211 -s 32768 -S 32768 -m 1024
212echo
213$NETPERF_CMD $NETPERF_PORT -t UDP_STREAM -l $NETPERF_TIME -H $REM_HOST \
214 $LOC_CPU $LOC_RATE $REM_CPU $REM_RATE $STATS_STUFF -- \
215 -s 32768 -S 32768 -m 1024
216echo
217echo
218
219# and that's that
220echo Tests completed at `date` >&2
221
222echo
223