X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Ftests%2Frundbench;h=11f619116dba6b00dd33ca6d6626f974f307c9d1;hp=821ac46dd5e45744d3887a3569927d270369da8c;hb=980f8741339f2bece106f6955b0b076d35211850;hpb=a2a0746305449dbd925879b14dc2c0d6040bb8bf diff --git a/lustre/tests/rundbench b/lustre/tests/rundbench index 821ac46..11f6191 100755 --- a/lustre/tests/rundbench +++ b/lustre/tests/rundbench @@ -1,13 +1,100 @@ -#!/bin/sh -MNT=${MNT:-/mnt/lustre} -DIR=${DIR:-$MNT/`hostname`} -#[ -e /proc/sys/portals/debug ] && echo 0 > /proc/sys/portals/debug +#!/bin/bash + +LUSTRE=${LUSTRE:-$(cd $(dirname $0)/..; echo $PWD)} +. $LUSTRE/tests/test-framework.sh + +usage() { + echo "-C use chroot instead of cd" + echo "-D DIR - use 'DIR' as work directory" + echo + exit; +} + +PATH=${DBENCH_LIB}:${PATH} +MOUNT=${MOUNT:-/mnt/lustre} +DIR=${DIR:-$MOUNT/`hostname`} + +PREFIX="on" +while getopts "CD:" opt $*; do + case $opt in + D) [ -d $OPTARG ] && DIR=$OPTARG ;; + C) CHROOT="yes" ;; + \?) usage ;; + esac +done + mkdir -p $DIR TGT=$DIR/client.txt -SRC=${SRC:-/usr/lib/dbench/client.txt} -[ ! -e $TGT -a -e $SRC ] && echo "copying $SRC to $TGT" && cp $SRC $TGT -SRC=/usr/lib/dbench/client_plain.txt -[ ! -e $TGT -a -e $SRC ] && echo "copying $SRC to $TGT" && cp $SRC $TGT +CLIENT_PREFIX="${DBENCH_LIB} /usr/share/dbench /usr/local/share /usr/lib/dbench" +CLIENT_FILE="client.txt client_plain.txt dbench_client" +if ! which dbench > /dev/null 2>&1 ; then + [ "$MISSING_DBENCH_OK" ] || { error "$0 : $(hostname) dbench is not installed !" && exit 3; } + skip_env "$0 : $(hostname) dbench is not installed" + exit 0 +fi +CLIENT="" + +for prefix in $CLIENT_PREFIX; do + for file in $CLIENT_FILE; do + if [ -s "${prefix}/${file}" ]; then + CLIENT="${prefix}/${file}"; + break; + fi + done + [ "x$CLIENT" != "x" ] && break; +done + +if [ -n "$DBENCH_SRC" -a -s "$DBENCH_SRC" ]; then + CLIENT=$DBENCH_SRC +fi + +[ ! -s "$CLIENT" ] && + skip_env "$0: no client file found for dbench on $(hostname): "\ + "DBENCH_LIB=$DBENCH_LIB DBENCH_SRC=$DBENCH_SRC" && exit 0 + +[ ! -s "$TGT" ] && echo "copying $CLIENT to $TGT" && cp $CLIENT $TGT +[ ! -s "$TGT" ] && \ + echo "$0 : $(hostname) $TGT file doesn't exist after cp $CLIENT $TGT" && exit 1 + +if [ "x$CHROOT" == "xyes" ]; then + echo "copying necessary libs to $DIR" + cp `which dbench` $DIR + LIBS71=$(ldd $DIR/dbench | + sed -e 's/\t*//' -e 's/.*=> //' -e 's/ .*//' -e 's/^\///' | + grep -v 'linux-vdso.so.1') + tar -C / -chf - $LIBS71 | tar -C $DIR -xvf - + if [ "${PIPESTATUS[*]}" != "0 0" ]; then + echo "can't copy libs $LIBS71 to $DIR" + rm -f $DIR/dbench + exit 1 + fi + RUN="chroot $DIR" + PREFIX="in" + PATH=.:/:$PATH +fi + +shift $((OPTIND - 1)) + +trap ' +echo kill dbench main pid=$DBENCHPID +kill $DBENCHPID +rm -rf dbench $LIBS71 client.txt +exit 0 +' TERM + +# turn off errexit. rundbench will return error code on failure +trap '' ERR +set +e + cd $DIR -echo "running 'dbench $@' on $PWD at `date`" -dbench -c client.txt $@ +echo "running 'dbench $@' $PREFIX $PWD at `date`" + +$RUN dbench -c client.txt $@ & +DBENCHPID=$! +echo "dbench PID=$DBENCHPID" +wait $DBENCHPID +RC=$? +[ $RC -ne 0 ] && killall -9 dbench + +rm -rf dbench $LIBS71 client.txt +exit $RC