dc87cb3f1945210f8d793d2e65c270229e53d672
[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=180
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   i=1;
31   fileName=$1
32   while [ $i -le $2 ]; do
33     echo "killing dc-$i ${fileName}"
34     ssh dc-${i} pkill -u ${USER} -f ${fileName} 
35     i=`expr $i + 1`
36   done
37 }
38
39 # killClientsWith USR1 signal <fileName> <# of machines>
40 function killclientswithSignal {
41   i=1;
42   fileName=$1
43   while [ $i -le $2 ]; do
44     echo "killing dc-$i ${fileName}"
45     ssh dc-${i} killall -USR1 ${fileName} 
46     i=`expr $i + 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 1
262     done
263     sleep 2
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 "====================================== Recovery Execution Time ============================="
303   for count in 2 4 6 8
304   do
305     echo "------- Running $count threads $BM_NAME recovery on $count machines -----"
306     runRecovery 1 $count ${BM_NAME}
307   done
308   echo "================================================================================="
309
310   echo "====================================== DSM Execution Time ============================="
311   for count in 2 4 6 8
312   do
313     echo "------- Running $count threads $BM_NAME dsm on $count machines -----"
314     runDSM 1 $count $BM_DSM
315   done
316   echo "================================================================================="
317
318 #  echo "=============== Running javasingle for ${BM_NAME} on 1 machines ================="
319 #  javasingle 1 ${BM_NAME}
320 #  cd $TOPDIR
321 #  echo "================================================================================="
322
323 #  echo "=============== Running recoverysingle for ${BM_NAME} on 1 machines ================="
324 #  recoverysingle 1 ${BM_NAME}
325 #  cd $TOPDIR
326 #  echo "================================================================================="
327
328
329 }
330
331 function javasingle {
332   DIR=`echo ${BASEDIR}\/${2}\/${JAVASINGLEDIR}`;
333   cd $DIR
334   echo ${BM_ARGS}
335   i=0;
336   echo "ssh dc-1 cd $DIR'; ./${2}.bin 1 ${BM_ARGS}";
337   while [ $i -lt $1 ]; do
338     /usr/bin/time -f "%e" ./${2}.bin 1 ${BM_ARGS} 2> ${DIR}/tmp
339     cat ${DIR}/tmp >> ${LOGDIR}/${2}_javasingle.txt
340     sleep 2
341     i=`expr $i + 1`
342   done
343 }
344
345 function recoverysingle {
346   DIR=`echo ${BASEDIR}\/${2}\/${RECOVERYDIR}`;
347   cd $DIR
348   echo ${BM_ARGS}
349   rm dstm.conf
350   ln -s ${DSTMDIR}/dstm_1.conf dstm.conf
351   cd `pwd`
352   i=0;
353   fName="${2}.bin";
354   while [ $i -lt $1 ]; do
355     echo "Running master machine ... "
356     echo "ssh dc-1 cd $DIR'; ./${2}.bin master 1 ${BM_ARGS}";
357     ssh dc-1 'cd '$DIR'; ./'${2}'.bin master '1 ${BM_ARGS} >> ${LOGDIR}/${2}_recoverysingle.txt 2>&1 &
358     echo "Start waiting"
359     sleep $WAITTIME
360     echo "killing dc-1 ${fName}"
361     pkill -u ${USER} -f ${fName} 
362     i=`expr $i + 1`
363   done
364 }
365
366 echo "---------- Starting Benchmarks ----------"
367 nmach=$1
368 source bm_args.txt
369 echo "----------- done ------------"