summaryrefslogtreecommitdiff
path: root/apps/JAWS/clients/WebSTONE/bin/runbench
blob: 409351f8f5566edeb69890538bd40a01313b36ad (plain)
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
#!/bin/sh
# $Header$
# set -x
set +x
[ -n "$WEBSTONEROOT" ] || WEBSTONEROOT=`pwd`/../

case $# in
  1)
     FILELIST=$1
     ;;
  *)
     FILELIST=$WEBSTONEROOT/conf/filelist
     ;;
esac

# load configurations
. $WEBSTONEROOT/conf/testbed

[ -n "$DEBUG" ] && set +x

# check variables
[ -n "$ITERATIONS" ] || ITERATIONS="1"
[ -n "$MINCLIENTS" ] || MINCLIENTS="1"
[ -n "$MAXCLIENTS" ] || MAXCLIENTS="1"
[ -n "$CLIENTINCR" ] || CLIENTINCR="1"
[ -n "$TIMEPERRUN" ] || TIMEPERRUN="1"
# don't care about PROXYSERVER
[ -n "$SERVER" ] || SERVER="www"
[ -n "$PORTNO" ] || PORTNO="80"
# [ -n "$SERVERINFO" ] || SERVERINFO="uname -a"
# OSTUNINGFILES
# WEBSERVERDIR
# WEBDOCDIR
# WEBSERVERTUNINGFILES
[ -n "$CLIENTS" ] || CLIENTS="localhost"
[ -n "$CLIENTACCOUNT" ] || CLIENTACCOUNT=$USER
[ -n "$CLIENTPASSWORD" ] || CLIENTPASSWORD=$CLIENTACCOUNT
# [ -n "$CLIENTINFO" ] || CLIENTINFO="uname -a"
[ -n "$TMPDIR" ] || TMPDIR="/tmp"
[ -n "$RCP" ] || RCP="rcp"
[ -n "$RSH" ] || RSH="rsh"

export ITERATIONS MINCLIENTS MAXCLIENTS CLIENTINCR TIMEPERRUN 
export SERVER PORTNO SERVERINFO 
export CLIENTS CLIENTACCOUNT CLIENTPASSWORD CLIENTINFO
export TMPDIR RCP RSH

echo "Clients: " $CLIENTS

#
# Estimate run time
#
NUMCLIENTHOSTS=`echo $CLIENTS | wc -w`
TRIALS=`expr 1 + \( $MAXCLIENTS - $MINCLIENTS \) / $CLIENTINCR`
RUNTIME=`expr 60 \* $ITERATIONS \* $TRIALS \* $TIMEPERRUN`
RUNTIME=`expr $RUNTIME + $TRIALS \* \( $MAXCLIENTS + $MINCLIENTS \) \
 / \( 2 \* $NUMCLIENTHOSTS \)`

echo "Estimated run time:" `expr $RUNTIME / 3600` "hours" \
 `expr $RUNTIME % 3600 / 60` "minutes" 

#
# Checking for valid set of benchmark files to retrieve
#
#if [ -z "$PROXYSERVER" ]
#then
#  echo "Checking for a valid set of benchmark files"
#  CHECKLISTTMP=$TMPDIR/webstone-checkfilelist.$$
#  rm -f $CHECKFILELISTTMP
#  $WEBSTONEROOT/bin/checkfilelist $SERVER $PORTNO $FILELIST > $CHECKLISTTMP 2>&1
#  if [ `grep -c ' 4[0-9][0-9] '< $CHECKLISTTMP` -gt 0 ]
#  then
#    echo "ERROR: not all files in filelist are on server:"
#    echo "----- checkfilelist results -----"
#    cat $CHECKLISTTMP
#    echo "----- checkfilelist results -----"
#    rm  -f $CHECKLISTTMP
#    exit 1
#  else
#    echo "OK: All files found"
#  fi
#  rm -f $CHECKLISTTMP
#fi
# end if $PROXYSERVER

#
# distribute webclient binary
#
for i in $CLIENTS
do
	$RCP $WEBSTONEROOT/bin/webclient $i:$TMPDIR #/usr/local/bin
done

# BEGIN iterations
J=1
while [ $J -le $ITERATIONS ]
do
  NUMCLIENTS=$MINCLIENTS
  while [ $NUMCLIENTS -le $MAXCLIENTS ]
  do
    echo "***** Iteration $J, Total clients "`expr $NUMCLIENTS`" **********"
    date
    TIMESTAMP=`date +"%y%m%d_%H%M"`
    LOGDIR=$WEBSTONEROOT/bin/runs/$TIMESTAMP
    
    #
    # nuke debug files
    #
    for client in $CLIENTS
    do
      $RSH $client "rm /tmp/webstone-debug*" > /dev/null 2>&1
    done
    
    mkdir -p $LOGDIR
    rm -f $LOGDIR/config
    touch $LOGDIR/config
    CLIENTSPERHOST=`expr $NUMCLIENTS / $NUMCLIENTHOSTS`
    EXTRACLIENTS=`expr $NUMCLIENTS % $NUMCLIENTHOSTS`
    
    for i in $CLIENTS
    do
      if [ $EXTRACLIENTS -gt 0 ]
      then
	echo "$i $CLIENTACCOUNT $CLIENTPASSWORD `expr $CLIENTSPERHOST + 1`" \
	 >> $LOGDIR/config
	EXTRACLIENTS=`expr $EXTRACLIENTS - 1`
      else
	echo "$i $CLIENTACCOUNT $CLIENTPASSWORD $CLIENTSPERHOST" \
	 >> $LOGDIR/config
      fi
    done
    cp $FILELIST $LOGDIR/`basename $FILELIST`
    
    #
    # Put test configuration files on clients
    #
    for i in $CLIENTS localhost
    do
      $RSH $i "rm -f $TMPDIR/config $TMPDIR/`basename $FILELIST`"
      $RCP $LOGDIR/config $i:$TMPDIR/config
      $RCP $LOGDIR/`basename $FILELIST` $i:$TMPDIR/filelist
    done
    
    #
    # Get starting configuration and stats from each participant
    #
    $RSH $SERVER "$SERVERINFO" > $LOGDIR/hardware.$SERVER 2>&1
    for i in $CLIENTS
    do
      $RSH $i "$CLIENTINFO" > $LOGDIR/hardware.$i 2>&1
    done
    
    # set -x
    for i in $OSTUNINGFILES $WEBSERVERTUNINGFILES
    do
      $RCP $SERVER:$i $LOGDIR
    done
    set +x
    
    #
    # Run benchmark
    #
    date
    CMD="$WEBSTONEROOT/bin/webmaster -v -u  $TMPDIR/filelist"
    CMD=$CMD" -f $TMPDIR/config -l $TIMEPERRUN"
    [ -n "$SERVER" ] && CMD=$CMD" -w $SERVER"
    [ -n "$PORTNO" ] && CMD=$CMD" -p $PORTNO"
    [ -n "$PROXYSERVER" ] && CMD=$CMD" -P $PROXYSERVER"
    [ -n "$DEBUG" ] && CMD=$CMD" -d"
    echo $CMD

    # dump environment into $LOGDIR
    rm -rf $LOGDIR/controller.env
    env > $LOGDIR/controller.env
    
    $CMD | tee $LOGDIR/run
    
    #
    # Get ending configuration and stats from each participant
    #
    date
    #for i in $SERVER $CLIENTS
    #do
    #$WEBSTONEROOT/bin/getstats $i > $LOGDIR/end.$i 2>&1
    #done
    #date
    NUMCLIENTS=`expr $NUMCLIENTS + $CLIENTINCR`
  done
  # while NUMCLIENTS
  J=`expr $J + 1`
done
# while J
# end