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