modified script for other results
[IRC.git] / Robust / src / Benchmarks / Recovery / runjava.sh
1 # !/bin/sh
2
3 # Usage
4 #
5 # ./runjava.sh <num_machine>
6 #
7
8 #set -x
9
10 BASEDIR=`pwd`
11 RECOVERYDIR='recovery'
12 JAVASINGLEDIR='java'
13 WAITTIME=200
14 KILLDELAY=20
15 LOGDIR=~/research/Robust/src/Benchmarks/Recovery/runlog
16 MACHINELIST='dc-1.calit2.uci.edu dc-2.calit2.uci.edu dc-3.calit2.uci.edu dc-4.calit2.uci.edu dc-5.calit2.uci.edu dc-6.calit2.uci.edu dc-7.calit2.uci.edu dc-8.calit2.uci.edu'
17 USER='adash'
18
19 # 0 mean new test 
20 # 1~8 machine id to be killed
21 ORDER=( 0 1 3 5 7 8 2    
22         0 1 2 3 4 5 6 
23         0 1 8 4 6 3 7 
24         0 8 7 3 6 5 4
25         0 7 4 6 8 1 2 );
26
27 # killClients <fileName> <# of machines>
28 function killclients {
29   i=1;
30   fileName=$1
31   while [ $i -le $2 ]; do
32     echo "killing dc-$i ${fileName}"
33     ssh dc-${i} pkill -u ${USER} -f ${fileName} 
34     i=`expr $i + 1`
35   done
36 }
37
38 # killonemachine <Benchmark file name> <machine_num>
39 function killonemachine {
40   fileName=$1
41   let "machine= $2";
42   echo "killing dc-$machine ${fileName}";
43   ssh dc-${machine} pkill -u ${USER} -f ${fileName}
44 }
45
46 # runmachines <log filename>
47 function runMachines {
48   echo "Running on ${NUM_MACHINE} machines ... "
49   
50   # Start machines
51   echo "Running machines"
52   let "k= $NUM_MACHINE"
53   
54   DIR=`echo ${BASEDIR}\/${BM_DIR}\/${RECOVERYDIR}`;
55   echo "DIR = $DIR";
56  
57   # Run machines
58   while [ $k -gt 1 ]; do
59     echo "SSH into dc-${k}"
60     ssh dc-${k} 'cd '$DIR'; ./'$BM_NAME'.bin '>> $1'-'$k 2>&1 &
61     k=`expr $k - 1`
62     sleep 1
63   done
64   echo "Running master machine ... "
65   echo "ssh dc-1 cd $DIR'; ./$BM_NAME.bin master $NUM_MACHINE $BM_ARGS";
66   ssh dc-1 'cd '$DIR'; ./'$BM_NAME'.bin master '$NUM_MACHINE $BM_ARGS >> $1'-1' 2>&1 &
67 }
68
69 ########### Normal execution
70 function runNormalTest {
71 # Run java version
72   j=1;
73   BM_DIR=${BM_NAME}
74   fName="$BM_NAME.bin";
75   echo ${BM_DIR}
76   cd ${BM_DIR}
77
78   tt=1;
79   while [ $tt -le $NUM_MACHINE ]; do
80     echo "------------------------------- Normal Test $1 ----------------------------" >> log-$tt
81     tt=`expr $tt + 1`
82   done
83   
84 # run test
85   runMachines log
86   
87   sleep $WAITTIME
88
89   killclients $fName 8
90   sleep 10
91   cd -
92 }
93
94 ########### Failure case
95 function runFailureTest {
96 # Run java version
97   j=1;
98   BM_DIR=${BM_NAME}
99   fName="$BM_NAME.bin";
100   cd ${BM_DIR}
101
102   test_iter=1;
103
104   for k in ${ORDER[@]}
105   do
106     if [ $k -eq 0 ]; then         # if k = 0, it is a new test
107       if [ $test_iter -ne 1 ]; then
108         sleep $WAITTIME           # wait the end of execution
109         killclients $fName 8   # kill alive machines
110         outputIter=0;
111         for outputIter in 1 2 3 4 5 6 7 8
112         do
113           echo "----------------------------------------------------------------------------------" >> log-$outputIter
114         done
115       fi
116
117       outputIter=0;
118       for outputIter in 1 2 3 4 5 6 7 8
119       do
120         echo "------------------------------- Failure Test $test_iter ----------------------------" >> log-$outputIter
121       done
122       echo "------------------------------- Failure Test $test_iter ----------------------------"
123       runMachines log   
124       sleep 10           # wait until all machine run
125       test_iter=`expr $test_iter + 1`
126     else                 # if k != 0, time to kill machines!
127       echo "------------------------ dc-$k is killed ------------------------" >> log-$k
128       echo "------------------------ dc-$k is killed ------------------------"
129       killonemachine $fName $k
130       
131       let "delay= $RANDOM % $KILLDELAY + 3"
132       sleep $delay
133     fi 
134   done
135
136   killclients $fName 8   # kill alive machines
137   sleep 10
138  cd -
139 }
140
141 function runDSM {
142   i=0;
143   DIR=`pwd`
144   HOSTNAME=`hostname`
145   while [ $i -lt $1 ]; do
146     echo "$DIR" > ~/.tmpdir
147     echo "bin=$3" > ~/.tmpvars
148     ct=0
149     MACHINES=''
150     for j in $MACHINELIST; do
151       if [ $ct -lt $2 ]; then
152         if [ "$j" != "$HOSTNAME" ]; then
153           MACHINES="$MACHINES $j"
154         fi
155       fi
156       let ct=$ct+1
157     done
158
159     rm dstm.conf
160     DSTMDIR=${HOME}/research/Robust/src/Benchmarks/Prefetch/config
161     if [ $2 -eq 2 ]; then 
162       arg=$ARGS2
163       ln -s ${DSTMDIR}/dstm_2.conf dstm.conf
164     fi
165     if [ $2 -eq 3 ]; then 
166       arg=$ARGS3
167       ln -s ${DSTMDIR}/dstm_3.conf dstm.conf
168     fi
169     if [ $2 -eq 4 ]; then 
170       arg=$ARGS4
171       ln -s ${DSTMDIR}/dstm_4.conf dstm.conf
172     fi
173     if [ $2 -eq 5 ]; then 
174       arg=$ARGS5
175       ln -s ${DSTMDIR}/dstm_5.conf dstm.conf
176     fi
177     if [ $2 -eq 6 ]; then 
178       arg=$ARGS6
179       ln -s ${DSTMDIR}/dstm_6.conf dstm.conf
180     fi
181     if [ $2 -eq 7 ]; then 
182       arg=$ARGS7
183       ln -s ${DSTMDIR}/dstm_7.conf dstm.conf
184     fi
185     if [ $2 -eq 8 ]; then 
186       arg=$ARGS8
187       ln -s ${DSTMDIR}/dstm_8.conf dstm.conf
188     fi
189     chmod +x ~/.tmpvars
190     for machine in `echo $MACHINES`
191     do
192       ssh ${machine} 'cd `cat ~/.tmpdir`; source ~/.tmpvars; ./$bin' &
193       echo ""
194     done
195     sleep 2
196     perl -x${TOPDIR} ${TOPDIR}/switch/fetch_stat.pl clear_stats settings=switch/clearsettings.txt
197     /usr/bin/time -f "%e" ./$3 master $arg 2> ${LOGDIR}/tmp
198     perl -x${TOPDIR} ${TOPDIR}/switch/fetch_stat.pl settings=switch/settings.txt
199     cat ${LOGDIR}/tmp >> ${LOGDIR}/${3}_${2}Thrd_${EXTENSION}.txt
200     if [ $i -eq 0 ];then echo "<h3> Benchmark=${3} Thread=${2} Extension=${EXTENSION}</h3><br>" > ${LOGDIR}/${3}_${EXTENSION}_${2}Thrd_a.html  ;fi
201     cat ${LOGDIR}/tmp >> ${LOGDIR}/${3}_${EXTENSION}_${2}Thrd_a.html
202     echo "<a href=\"${3}_${2}Thrd_${EXTENSION}_${i}.html\">Network Stats</a><br>" >> ${LOGDIR}/${3}_${EXTENSION}_${2}Thrd_a.html
203     mv ${TOPDIR}/html/dell.html ${LOGDIR}/${3}_${2}Thrd_${EXTENSION}_${i}.html
204     echo "Terminating ... "
205     for machine in `echo $MACHINES`
206     do
207       ssh ${machine} 'source ~/.tmpvars; killall $bin'
208     done
209     sleep 2
210     i=`expr $i + 1`
211   done
212 }
213
214 function testcase {
215   nummachines=$1
216   shift
217   line=$@
218   BM_NAME=`echo $line | cut -f1 -d":"`
219   BM_ARGS=`echo $line | cut -f2 -d":"`
220
221
222   # Setup for remote machine
223   echo "BM_NAME='$BM_NAME'" 
224   echo "BM_ARGS='$BM_ARGS'" 
225
226   fileName=${BM_NAME}.bin
227
228   # terminate if it doesn't have parameter
229   let "NUM_MACHINE= $nummachines + 0";
230 #
231 #  echo "====================================== Normal Test =============================="
232 #  runNormalTest $NUM_MACHINES 1 
233 #  echo "================================================================================"
234 #
235 #  echo "====================================== Failure Test ============================="
236 #  runFailureTest $NUM_MACHINES
237 #  echo "================================================================================="
238 #
239 #  echo "====================================== Recovery Execution Time ============================="
240 #  for count in 2 4 6 8
241 #  do
242 #     echo "------- Running $count threads $BMDIR non-prefetch + non-cache on $count machines -----"
243 #     runRecovery 1 $count $NONPREFETCH_NONCACHE
244 #  done
245 #  echo "================================================================================="
246 #
247 #  echo "====================================== Normal DSM Execution Time ============================="
248 #  for count in 2 4 6 8
249 #  do
250 #  echo "------- Running $count threads $BMDIR non-prefetch + non-cache on $count machines -----"
251 #  runDSM 1 $count $NONPREFETCH_NONCACHE
252 #  done
253 #  echo "================================================================================="
254 #
255   echo "=============== Running javasingle for ${BM_NAME} on 1 machines ================="
256   javasingle 1 ${BM_NAME}
257   cd $TOPDIR
258   echo "================================================================================="
259
260   echo "=============== Running recoverysingle for ${BM_NAME} on 1 machines ================="
261   recoverysingle 1 ${BM_NAME}
262   cd $TOPDIR
263   echo "================================================================================="
264
265
266 }
267
268 function javasingle {
269   DIR=`echo ${BASEDIR}\/${2}\/${JAVASINGLEDIR}`;
270   cd $DIR
271   echo ${BM_ARGS}
272   i=0;
273   echo "ssh dc-1 cd $DIR'; ./${2}.bin 1 ${BM_ARGS}";
274   while [ $i -lt $1 ]; do
275     /usr/bin/time -f "%e" ./${2}.bin 1 ${BM_ARGS} 2> ${DIR}/tmp
276     cat ${DIR}/tmp >> ${LOGDIR}/${2}_javasingle.txt
277     sleep 2
278     i=`expr $i + 1`
279   done
280 }
281
282 function recoverysingle {
283   DIR=`echo ${BASEDIR}\/${2}\/${RECOVERYDIR}`;
284   cd $DIR
285   echo ${BM_ARGS}
286   rm dstm.conf
287   DSTMDIR=${HOME}/research/Robust/src/Benchmarks/Prefetch/config
288   ln -s ${DSTMDIR}/dstm_1.conf dstm.conf
289   cd `pwd`
290   i=0;
291   fName="${2}.bin";
292   while [ $i -lt $1 ]; do
293     echo "Running master machine ... "
294     echo "ssh dc-1 cd $DIR'; ./${2}.bin master 1 ${BM_ARGS}";
295     ssh dc-1 'cd '$DIR'; ./'${2}'.bin master '1 ${BM_ARGS} >> ${LOGDIR}/${2}_recoverysingle.txt 2>&1 &
296     echo "Start waiting"
297     sleep $WAITTIME
298     echo "killing dc-1 ${fName}"
299     pkill -u ${USER} -f ${fName} 
300     i=`expr $i + 1`
301   done
302 }
303
304 echo "---------- Starting Benchmarks ----------"
305 nmach=$1
306 source bm_args.txt
307 echo "----------- done ------------"