git-svn-id: https://www4.informatik.uni-erlangen.de/i4svn/danceos/trunk/devel/fail@1578 8c4709b5-6ec9-48aa-a5cd-a96041d1645a
61 lines
1.5 KiB
Bash
Executable File
61 lines
1.5 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# client.sh
|
|
# Starts a single FailBochs client in an endless loop. Adds ./bochslibs to
|
|
# LD_LIBRARY_PATH if existent. Terminates if ./stop exists, or bochs
|
|
# terminates with exit status 1.
|
|
#
|
|
# Prerequisite: All necessary FailBochs ingredients (see multiple-clients.sh)
|
|
# in the current directory.
|
|
#
|
|
rm -f stop
|
|
|
|
LIBDIR=$PWD/bochslibs
|
|
if [ -d $LIBDIR ]
|
|
then
|
|
export LD_LIBRARY_PATH=$LIBDIR
|
|
fi
|
|
|
|
while [ ! -e stop ]
|
|
do
|
|
# fiws fairness (don't use this host while someone else is logged in)
|
|
# since these pool computers are used by students
|
|
# NOTE: this will only work if fail-client terminates from time to time
|
|
# TODO: only on Mo-Fr/20h-6h and Sa-So/24h ?
|
|
if [[ $(uname -n) == fiws[1-2][0-9][0-9] ]]; then
|
|
FIWS_FREE=0
|
|
while [ "$FIWS_FREE" -eq 0 ]; do
|
|
if [ -e stop ]; then
|
|
#repeated exit condition from above
|
|
exit 0
|
|
fi
|
|
FIWS_FREE=1
|
|
for user in $(users); do
|
|
if [[ "$user" != `whoami` ]]; then
|
|
# someone else uses this host, don't do any experiments
|
|
FIWS_FREE=0
|
|
fi
|
|
done
|
|
if [ "$FIWS_FREE" -eq 0 ]; then
|
|
sleep 300
|
|
fi
|
|
done
|
|
fi
|
|
|
|
# only start a client if at least 500 MiB is available
|
|
FREE_MEM=$(free -m | grep "buffers/cache:" | awk '{print $4}')
|
|
if [ $FREE_MEM -lt "500" ]; then
|
|
# waiting for free memory. sleep 1-60s and retry.
|
|
sleep $(($RANDOM / (32768 / 60) + 1))
|
|
else
|
|
#nice -n 19 ./bochs -q 2>&1 | tee log.$$.txt | fgrep Result
|
|
#nice -n 18 ./bochs -q 2>&1 | fgrep Result
|
|
nice -n 18 ./fail-client -q >/dev/null 2>&1
|
|
if [ $? -eq 1 ]
|
|
then
|
|
break
|
|
fi
|
|
fi
|
|
done
|
|
echo DONE
|