changes to enable n iterations of each launch
[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 DSTMDIR=${HOME}/research/Robust/src/Benchmarks/Prefetch/config
17 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'
18 USER='adash'
19
20 # 0 mean new test 
21 # 1~8 machine id to be killed
22 ORDER=( 0 1 3 5 7 8 2    
23         0 1 2 3 4 5 6 
24         0 1 8 4 6 3 7 
25         0 8 7 3 6 5 4
26         0 7 4 6 8 1 2 );
27
28 # killClients <fileName> <# of machines>
29 function killclients {
30   k=1;
31   fileName=$1
32   while [ $k -le $2 ]; do
33     echo "killing dc-$k ${fileName}"
34     ssh dc-${k} pkill -u ${USER} -f ${fileName} 
35     k=`expr $k + 1`
36   done
37 }
38
39 # killClientsWith USR1 signal <fileName> <# of machines>
40 function killclientswithSignal {
41   k=1;
42   fileName=$1
43   while [ $k -le $2 ]; do
44     echo "killing dc-$k ${fileName}"
45     ssh dc-${k} killall -USR1 ${fileName} 
46     k=`expr $k + 1`
47   done
48 }
49
50 # killonemachine <Benchmark file name> <machine_num>
51 function killonemachine {
52   fileName=$1
53   let "machine= $2";
54   echo "killing dc-$machine ${fileName}";
55   ssh dc-${machine} pkill -u ${USER} -f ${fileName}
56 }
57
58 # runmachines <log filename>
59 function runMachines {
60   echo "Running on ${NUM_MACHINE} machines ... "
61   
62   # Start machines
63   echo "Running machines"
64   let "k= $NUM_MACHINE"
65   
66   DIR=`echo ${BASEDIR}\/${BM_DIR}\/${RECOVERYDIR}`;
67   echo "DIR = $DIR";
68  
69   # Run machines
70   while [ $k -gt 1 ]; do
71     echo "SSH into dc-${k}"
72     ssh dc-${k} 'cd '$DIR'; ./'$BM_NAME'.bin '>> $1'-'$k 2>&1 &
73     k=`expr $k - 1`
74     sleep 1
75   done
76   echo "Running master machine ... "
77   echo "ssh dc-1 cd $DIR'; ./$BM_NAME.bin master $NUM_MACHINE $BM_ARGS";
78   ssh dc-1 'cd '$DIR'; ./'$BM_NAME'.bin master '$NUM_MACHINE $BM_ARGS >> $1'-1' 2>&1 &
79 }
80
81 ########### Normal execution
82 #  runNormalTest $NUM_MACHINES 1 
83 function runNormalTest {
84 # Run java version
85   j=1;
86   BM_DIR=${BM_NAME}
87   fName="$BM_NAME.bin";
88   echo ${BM_DIR}
89   cd ${BM_DIR}
90
91   tt=1;
92   while [ $tt -le $NUM_MACHINE ]; do
93     echo "------------------------------- Normal Test $1 ----------------------------" >> log-$tt
94     tt=`expr $tt + 1`
95   done
96   
97 # run test
98   runMachines log
99   
100   sleep $WAITTIME
101
102   killclients $fName 8
103   sleep 10
104   cd -
105 }
106
107 ########### Failure case
108 function runFailureTest {
109 # Run java version
110   j=1;
111   BM_DIR=${BM_NAME}
112   fName="$BM_NAME.bin";
113   cd ${BM_DIR}
114
115   test_iter=1;
116
117   for k in ${ORDER[@]}
118   do
119     if [ $k -eq 0 ]; then         # if k = 0, it is a new test
120       if [ $test_iter -ne 1 ]; then
121         sleep $WAITTIME           # wait the end of execution
122         killclients $fName 8   # kill alive machines
123         outputIter=0;
124         for outputIter in 1 2 3 4 5 6 7 8
125         do
126           echo "----------------------------------------------------------------------------------" >> log-$outputIter
127         done
128       fi
129
130       outputIter=0;
131       for outputIter in 1 2 3 4 5 6 7 8
132       do
133         echo "------------------------------- Failure Test $test_iter ----------------------------" >> log-$outputIter
134       done
135       echo "------------------------------- Failure Test $test_iter ----------------------------"
136       runMachines log   
137       sleep 10           # wait until all machine run
138       test_iter=`expr $test_iter + 1`
139     else                 # if k != 0, time to kill machines!
140       echo "------------------------ dc-$k is killed ------------------------" >> log-$k
141       echo "------------------------ dc-$k is killed ------------------------"
142       killonemachine $fName $k
143       
144       let "delay= $RANDOM % $KILLDELAY + 3"
145       sleep $delay
146     fi 
147   done
148
149   killclients $fName 8   # kill alive machines
150   sleep 10
151  cd -
152 }
153
154 ###
155 ###runRecovery <num iterations> <num machines> <recovery file name>
156 ###
157 function runRecovery {
158   i=1;
159   DIR=`echo ${BASEDIR}\/${BM_NAME}\/${RECOVERYDIR}`;
160   cd ${DIR}
161   fName="$BM_NAME.bin";
162   HOSTNAME=`hostname`
163   while [ $i -le $1 ]; do
164     tt=1;
165     while [ $tt -le $2 ]; do
166       echo "------------------------------- running Recovery on $2 machines for iter=$i ----------------------------" >> log-$tt
167       tt=`expr $tt + 1`
168     done
169
170     #select the correct dstm config file
171     rm dstm.conf
172     if [ $2 -eq 2 ]; then 
173       ln -s ${DSTMDIR}/dstm_2.conf dstm.conf
174     fi
175     if [ $2 -eq 3 ]; then 
176       ln -s ${DSTMDIR}/dstm_3.conf dstm.conf
177     fi
178     if [ $2 -eq 4 ]; then 
179       ln -s ${DSTMDIR}/dstm_4.conf dstm.conf
180     fi
181     if [ $2 -eq 5 ]; then 
182       ln -s ${DSTMDIR}/dstm_5.conf dstm.conf
183     fi
184     if [ $2 -eq 6 ]; then 
185       ln -s ${DSTMDIR}/dstm_6.conf dstm.conf
186     fi
187     if [ $2 -eq 7 ]; then 
188       ln -s ${DSTMDIR}/dstm_7.conf dstm.conf
189     fi
190     if [ $2 -eq 8 ]; then 
191       ln -s ${DSTMDIR}/dstm_8.conf dstm.conf
192     fi
193
194     #Start machines
195     let "k= $2"
196     while [ $k -gt 1 ]; do
197       echo "SSH into dc-${k}"
198       ssh dc-${k} 'cd '$DIR'; ./'$BM_NAME'.bin '>> log'-'$k 2>&1 &
199       k=`expr $k - 1`
200       sleep 1
201     done
202     sleep 2
203     #Start master
204     echo "Running master machine ..."
205     ssh dc-1 'cd '$DIR'; ./'$BM_NAME'.bin master '$2 $BM_ARGS >> log'-1' 2>&1 &
206     sleep $WAITTIME
207     echo "Terminating ... "
208     killclientswithSignal $fName $2
209     sleep 5
210     i=`expr $i + 1`
211   done
212   cd -
213 }
214
215 ###
216 ###runDSM <num iterations> <num machines> <dsm file name>
217 ###
218 function runDSM {
219   i=1;
220   DIR=`echo ${BASEDIR}\/${BM_NAME}\/${RECOVERYDIR}`;
221   cd ${DIR}
222   fName="$BM_DSM.bin";
223   HOSTNAME=`hostname`
224   while [ $i -le $1 ]; do
225     tt=1;
226     while [ $tt -le $2 ]; do
227       echo "------------------------------- running DSM on $2 machines for iter=$i ----------------------------" >> log-$tt
228       tt=`expr $tt + 1`
229     done
230
231     #select the correct dstm config file
232     rm dstm.conf
233     if [ $2 -eq 2 ]; then 
234       ln -s ${DSTMDIR}/dstm_2.conf dstm.conf
235     fi
236     if [ $2 -eq 3 ]; then 
237       ln -s ${DSTMDIR}/dstm_3.conf dstm.conf
238     fi
239     if [ $2 -eq 4 ]; then 
240       ln -s ${DSTMDIR}/dstm_4.conf dstm.conf
241     fi
242     if [ $2 -eq 5 ]; then 
243       ln -s ${DSTMDIR}/dstm_5.conf dstm.conf
244     fi
245     if [ $2 -eq 6 ]; then 
246       ln -s ${DSTMDIR}/dstm_6.conf dstm.conf
247     fi
248     if [ $2 -eq 7 ]; then 
249       ln -s ${DSTMDIR}/dstm_7.conf dstm.conf
250     fi
251     if [ $2 -eq 8 ]; then 
252       ln -s ${DSTMDIR}/dstm_8.conf dstm.conf
253     fi
254
255     #Start machines
256     let "k= $2"
257     while [ $k -gt 1 ]; do
258       echo "SSH into dc-${k}"
259       ssh dc-${k} 'cd '$DIR'; ./'$BM_DSM'.bin '>> log'-'$k 2>&1 &
260       k=`expr $k - 1`
261       sleep 3
262     done
263     sleep 6
264     #Start master
265     echo "Running master machine ..."
266     ssh dc-1 'cd '$DIR'; ./'$BM_DSM'.bin master '$2 $BM_ARGS >> log'-1' 2>&1 &
267     sleep $WAITTIME
268     echo "Terminating ... "
269     killclientswithSignal $fName $2
270     sleep 5
271     i=`expr $i + 1`
272   done
273   cd -
274 }
275
276 function testcase {
277   nummachines=$1
278   shift
279   line=$@
280   BM_NAME=`echo $line | cut -f1 -d":"`
281   BM_ARGS=`echo $line | cut -f2 -d":"`
282
283
284   # Setup for remote machine
285   echo "BM_NAME='$BM_NAME'" 
286   echo "BM_ARGS='$BM_ARGS'" 
287   BM_DSM=${BM_NAME}DSM
288
289   fileName=${BM_NAME}.bin
290
291   # terminate if it doesn't have parameter
292   let "NUM_MACHINE= $nummachines + 0";
293 #
294 #  echo "====================================== Normal Test =============================="
295 #  runNormalTest $NUM_MACHINES 1 
296 #  echo "================================================================================"
297 #
298 #  echo "====================================== Failure Test ============================="
299 #  runFailureTest $NUM_MACHINES
300 #  echo "================================================================================="
301
302   echo "=============== Running javasingle for ${BM_NAME} on 1 machines ================="
303   javasingle 1 ${BM_NAME}
304   cd $TOPDIR
305   echo "================================================================================="
306
307   echo "=============== Running recoverysingle for ${BM_NAME} on 1 machines ================="
308   recoverysingle 1 ${BM_NAME}
309   cd $TOPDIR
310   echo "================================================================================="
311
312 #  echo "=============== Running dsmsingle for ${BM_NAME} on 1 machines ================="
313 #  dsmsingle 1 ${BM_DSM}
314 #  cd $TOPDIR
315 #  echo "================================================================================="
316 #
317   echo "====================================== Recovery Execution Time ============================="
318   for count in 2 4 6 8
319   do
320     echo "------- Running $count threads $BM_NAME recovery on $count machines -----"
321     runRecovery 2 $count ${BM_NAME}
322   done
323   echo "================================================================================="
324
325 #  echo "====================================== DSM Execution Time ============================="
326 #  for count in 6 8
327 #  do
328 #    echo "------- Running $count threads $BM_NAME dsm on $count machines -----"
329 #    runDSM 1 $count $BM_DSM
330 #  done
331 #  echo "================================================================================="
332
333 }
334
335 function javasingle {
336
337   DIR=`echo ${BASEDIR}\/${2}\/${JAVASINGLEDIR}`;
338   cd $DIR
339   echo ${BM_ARGS}
340   i=0;
341   echo "ssh dc-1 cd $DIR'; ./${2}.bin 1 ${BM_ARGS}";
342   while [ $i -lt $1 ]; do
343     /usr/bin/time -f "%e" ./${2}.bin 1 ${BM_ARGS} 2> ${DIR}/tmp
344     cat ${DIR}/tmp >> ${LOGDIR}/${2}_javasingle.txt
345     sleep 2
346     i=`expr $i + 1`
347   done
348 }
349
350 function recoverysingle {
351   DIR=`echo ${BASEDIR}\/${2}\/${RECOVERYDIR}`;
352   cd $DIR
353   echo ${BM_ARGS}
354   rm dstm.conf
355   ln -s ${DSTMDIR}/dstm_1.conf dstm.conf
356   cd `pwd`
357   i=0;
358   fName="${2}.bin";
359   while [ $i -lt $1 ]; do
360     echo "Running master machine ... "
361     echo "ssh dc-1 cd $DIR'; ./${2}.bin master 1 ${BM_ARGS}";
362     ssh dc-1 'cd '$DIR'; ./'${2}'.bin master '1 ${BM_ARGS} >> ${LOGDIR}/${2}_recoverysingle.txt 2>&1 &
363     echo "Start waiting"
364     sleep $WAITTIME
365     echo "killing dc-1 ${fName}"
366     pkill -u ${USER} -f ${fName} 
367     i=`expr $i + 1`
368   done
369 }
370
371 function dsmsingle {
372   DIR=`echo ${BASEDIR}\/${BM_NAME}\/${RECOVERYDIR}`;
373   cd $DIR
374   echo ${BM_ARGS}
375   rm dstm.conf
376   ln -s ${DSTMDIR}/dstm_1.conf dstm.conf
377   cd `pwd`
378   i=0;
379   fName="${2}.bin";
380   while [ $i -lt $1 ]; do
381     echo "Running master machine ... "
382     echo "ssh dc-1 cd $DIR'; ./${2}.bin master 1 ${BM_ARGS}";
383     ssh dc-1 'cd '$DIR'; ./'${2}'.bin master '1 ${BM_ARGS} >> ${LOGDIR}/${BM_NAME}_dsmsingle.txt 2>&1 &
384     echo "Start waiting"
385     sleep $WAITTIME
386     echo "killing dc-1 ${fName}"
387     pkill -u ${USER} -f ${fName} 
388     i=`expr $i + 1`
389   done
390 }
391
392 echo "---------- Starting Benchmarks ----------"
393 nmach=$1
394 source bm_args.txt
395 echo "----------- done ------------"