85e45feea8234350f706e7ec8d6fe2647996ef4b
[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=120
14 KILLDELAY=10
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 8 4 6 3 7 );
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 8
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         killclientswithSignal $fName 8  #kill machines when there is more than 1 order
130         outputIter=0;
131         for outputIter in 1 2 3 4 5 6 7 8
132         do
133           echo "----------------------------------------------------------------------------------" >> log-$outputIter
134         done
135       fi
136
137       outputIter=0;
138       for outputIter in 1 2 3 4 5 6 7 8
139       do
140         echo "------------------------------- Failure Test $test_iter ----------------------------" >> log-$outputIter
141       done
142       echo "------------------------------- Failure Test $test_iter ----------------------------"
143       runMachines log   
144       sleep 10           # wait until all machine run
145       test_iter=`expr $test_iter + 1`
146     else                 # if k != 0, time to kill machines!
147       echo "------------------------ dc-$k is killed ------------------------" >> log-$k
148       echo "------------------------ dc-$k is killed ------------------------"
149       killonemachine $fName $k
150       
151       let "delay= $RANDOM % $KILLDELAY + 4"
152       sleep $delay
153     fi 
154   done
155
156   sleep $WAITTIME           # wait the end of execution
157 #  killclients $fName 8   # kill alive machines
158   killclientswithSignal $fName 8 #kill machines when finished processing everything in ORDER{ }
159   sleep 10
160  cd -
161 }
162
163 ###
164 ###runRecovery <num iterations> <num machines> <recovery file name>
165 ###
166 function runRecovery {
167   i=1;
168   DIR=`echo ${BASEDIR}\/${BM_NAME}\/${RECOVERYDIR}`;
169   cd ${DIR}
170   fName="$BM_NAME.bin";
171   HOSTNAME=`hostname`
172   while [ $i -le $1 ]; do
173     tt=1;
174     while [ $tt -le $2 ]; do
175       echo "------------------------------- running Recovery on $2 machines for iter=$i ----------------------------" >> log-$tt
176       tt=`expr $tt + 1`
177     done
178
179     #select the correct dstm config file
180     rm dstm.conf
181     if [ $2 -eq 2 ]; then 
182       ln -s ${DSTMDIR}/dstm_2.conf dstm.conf
183     fi
184     if [ $2 -eq 3 ]; then 
185       ln -s ${DSTMDIR}/dstm_3.conf dstm.conf
186     fi
187     if [ $2 -eq 4 ]; then 
188       ln -s ${DSTMDIR}/dstm_4.conf dstm.conf
189     fi
190     if [ $2 -eq 5 ]; then 
191       ln -s ${DSTMDIR}/dstm_5.conf dstm.conf
192     fi
193     if [ $2 -eq 6 ]; then 
194       ln -s ${DSTMDIR}/dstm_6.conf dstm.conf
195     fi
196     if [ $2 -eq 7 ]; then 
197       ln -s ${DSTMDIR}/dstm_7.conf dstm.conf
198     fi
199     if [ $2 -eq 8 ]; then 
200       ln -s ${DSTMDIR}/dstm_8.conf dstm.conf
201     fi
202
203     #Start machines
204     let "k= $2"
205     while [ $k -gt 1 ]; do
206       echo "SSH into dc-${k}"
207       ssh dc-${k} 'cd '$DIR'; ./'$BM_NAME'.bin '>> log'-'$k 2>&1 &
208       k=`expr $k - 1`
209       sleep 1
210     done
211     sleep 2
212     #Start master
213     echo "Running master machine ..."
214     ssh dc-1 'cd '$DIR'; ./'$BM_NAME'.bin master '$2 $BM_ARGS >> log'-1' 2>&1 &
215     sleep $WAITTIME
216     echo "Terminating ... "
217     killclientswithSignal $fName $2
218     sleep 5
219     i=`expr $i + 1`
220   done
221   cd -
222 }
223
224 ###
225 ###runDSM <num iterations> <num machines> <dsm file name>
226 ###
227 function runDSM {
228   i=1;
229   DIR=`echo ${BASEDIR}\/${BM_NAME}\/${RECOVERYDIR}`;
230   cd ${DIR}
231   fName="$BM_DSM.bin";
232   HOSTNAME=`hostname`
233   while [ $i -le $1 ]; do
234     tt=1;
235     while [ $tt -le $2 ]; do
236       echo "------------------------------- running DSM on $2 machines for iter=$i ----------------------------" >> log-$tt
237       tt=`expr $tt + 1`
238     done
239
240     #select the correct dstm config file
241     rm dstm.conf
242     if [ $2 -eq 2 ]; then 
243       ln -s ${DSTMDIR}/dstm_2.conf dstm.conf
244     fi
245     if [ $2 -eq 3 ]; then 
246       ln -s ${DSTMDIR}/dstm_3.conf dstm.conf
247     fi
248     if [ $2 -eq 4 ]; then 
249       ln -s ${DSTMDIR}/dstm_4.conf dstm.conf
250     fi
251     if [ $2 -eq 5 ]; then 
252       ln -s ${DSTMDIR}/dstm_5.conf dstm.conf
253     fi
254     if [ $2 -eq 6 ]; then 
255       ln -s ${DSTMDIR}/dstm_6.conf dstm.conf
256     fi
257     if [ $2 -eq 7 ]; then 
258       ln -s ${DSTMDIR}/dstm_7.conf dstm.conf
259     fi
260     if [ $2 -eq 8 ]; then 
261       ln -s ${DSTMDIR}/dstm_8.conf dstm.conf
262     fi
263
264     #Start machines
265     let "k= $2"
266     while [ $k -gt 1 ]; do
267       echo "SSH into dc-${k}"
268       ssh dc-${k} 'cd '$DIR'; ./'$BM_DSM'.bin '>> log'-'$k 2>&1 &
269       k=`expr $k - 1`
270       sleep 3
271     done
272     sleep 6
273     #Start master
274     echo "Running master machine ..."
275     ssh dc-1 'cd '$DIR'; ./'$BM_DSM'.bin master '$2 $BM_ARGS >> log'-1' 2>&1 &
276     sleep $WAITTIME
277     echo "Terminating ... "
278     killclientswithSignal $fName $2
279     sleep 5
280     i=`expr $i + 1`
281   done
282   cd -
283 }
284
285 function testcase {
286   nummachines=$1
287   shift
288   line=$@
289   BM_NAME=`echo $line | cut -f1 -d":"`
290   BM_ARGS=`echo $line | cut -f2 -d":"`
291
292
293   # Setup for remote machine
294   echo "BM_NAME='$BM_NAME'" 
295   echo "BM_ARGS='$BM_ARGS'" 
296   BM_DSM=${BM_NAME}DSM
297
298   fileName=${BM_NAME}.bin
299
300   # terminate if it doesn't have parameter
301   let "NUM_MACHINE= $nummachines + 0";
302
303   echo "====================================== Normal Test =============================="
304   runNormalTest $NUM_MACHINES 1 
305   echo "================================================================================"
306
307   echo "====================================== Failure Test ============================="
308   runFailureTest $NUM_MACHINES
309   echo "================================================================================="
310
311 #  echo "=============== Running javasingle for ${BM_NAME} on 1 machines ================="
312 #  javasingle 1 ${BM_NAME}
313 #  cd $TOPDIR
314 #  echo "================================================================================="
315
316 # echo "=============== Running recoverysingle for ${BM_NAME} on 1 machines ================="
317 #  recoverysingle 1 ${BM_NAME}
318 #  cd $TOPDIR
319 #  echo "================================================================================="
320
321 #  echo "=============== Running dsmsingle for ${BM_NAME} on 1 machines ================="
322 #  dsmsingle 1 ${BM_DSM}
323 #  cd $TOPDIR
324 #  echo "================================================================================="
325
326 #  echo "====================================== Recovery Execution Time ============================="
327 #  for count in 2 4 8
328 #  do
329 #    echo "------- Running $count threads $BM_NAME recovery on $count machines -----"
330 #    runRecovery 1 $count ${BM_NAME}
331 #  done
332 #  echo "================================================================================="
333
334 #  echo "====================================== DSM Execution Time ============================="
335 #  for count in 2 4 8
336 #  do
337 #    echo "------- Running $count threads $BM_NAME dsm on $count machines -----"
338 #    runDSM 1 $count $BM_DSM
339 #  done
340 #  echo "================================================================================="
341
342 }
343
344 function javasingle {
345
346   DIR=`echo ${BASEDIR}\/${2}\/${JAVASINGLEDIR}`;
347   cd $DIR
348   echo ${BM_ARGS}
349   i=0;
350   echo "ssh dc-1 cd $DIR'; ./${2}.bin 1 ${BM_ARGS}";
351   while [ $i -lt $1 ]; do
352     /usr/bin/time -f "%e" ./${2}.bin 1 ${BM_ARGS} 2> ${DIR}/tmp
353     cat ${DIR}/tmp >> ${LOGDIR}/${2}_javasingle.txt
354     sleep 2
355     i=`expr $i + 1`
356   done
357 }
358
359 function recoverysingle {
360   DIR=`echo ${BASEDIR}\/${2}\/${RECOVERYDIR}`;
361   cd $DIR
362   echo ${BM_ARGS}
363   rm dstm.conf
364   ln -s ${DSTMDIR}/dstm_1.conf dstm.conf
365   cd `pwd`
366   i=0;
367   fName="${2}.bin";
368   while [ $i -lt $1 ]; do
369     echo "Running master machine ... "
370     echo "ssh dc-1 cd $DIR'; ./${2}.bin master 1 ${BM_ARGS}";
371     ssh dc-1 'cd '$DIR'; ./'${2}'.bin master '1 ${BM_ARGS} >> ${LOGDIR}/${2}_recoverysingle.txt 2>&1 &
372     echo "Start waiting"
373     sleep $WAITTIME
374     echo "killing dc-1 ${fName}"
375     pkill -u ${USER} -f ${fName} 
376     i=`expr $i + 1`
377   done
378 }
379
380 function dsmsingle {
381   DIR=`echo ${BASEDIR}\/${BM_NAME}\/${RECOVERYDIR}`;
382   cd $DIR
383   echo ${BM_ARGS}
384   rm dstm.conf
385   ln -s ${DSTMDIR}/dstm_1.conf dstm.conf
386   cd `pwd`
387   i=0;
388   fName="${2}.bin";
389   while [ $i -lt $1 ]; do
390     echo "Running master machine ... "
391     echo "ssh dc-1 cd $DIR'; ./${2}.bin master 1 ${BM_ARGS}";
392     ssh dc-1 'cd '$DIR'; ./'${2}'.bin master '1 ${BM_ARGS} >> ${LOGDIR}/${BM_NAME}_dsmsingle.txt 2>&1 &
393     echo "Start waiting"
394     sleep $WAITTIME
395     echo "killing dc-1 ${fName}"
396     pkill -u ${USER} -f ${fName} 
397     i=`expr $i + 1`
398   done
399 }
400
401 echo "---------- Starting Benchmarks ----------"
402 nmach=$1
403 source bm_args.txt
404 echo "----------- done ------------"