6 MOUNT=${MOUNT:-/mnt/lustre}
7 DIR=${DIR:-$MOUNT/$HOSTNAME}
8 SCRIPT=$(realpath "$0")
9 LUSTRE=${LUSTRE:-$(dirname "$SCRIPT")/..}
10 . $LUSTRE/tests/test-framework.sh
19 Usage: $SCRIPT [-C] [-D DIR] [dbench options]
20 -C use chroot instead of change directory
21 -D DIR use DIR as work directory
30 trap '' ERR HUP INT TERM EXIT
32 if (( rc > 128 )); then
33 local signal=$((rc - 128))
34 echo "dbench killed by signal $signal"
38 echo "stopping dbench $PREFIX $DIR at $(date) with return code $rc"
40 if [[ -n "$DBENCHPID" ]]; then
41 if ps -h -p "$DBENCHPID" && kill "$DBENCHPID"; then
42 echo "killed dbench main pid $DBENCHPID"
46 if [[ -d "$DIR" ]]; then
47 echo "clean dbench files $PREFIX $DIR"
49 rm -frv clients client.txt dbench "${LIBS71[@]}"
53 if (( rc == 0 )); then
54 echo "dbench successfully finished"
56 echo "dbench exit with error $rc"
62 trap clean_dbench ERR HUP INT TERM EXIT
64 if [[ -n "$DBENCH_LIB" ]]; then
65 PATH=${DBENCH_LIB}:${PATH}
68 while getopts "CD:" OPT; do
70 D) test -d "$OPTARG" && DIR="$OPTARG" ;;
78 echo "looking for dbench program"
79 if ! type -P dbench; then
80 if [[ -z "$MISSING_DBENCH_OK" ]]; then
81 error "dbench is not installed"
84 skip_env "dbench is not installed"
89 if [[ ! -d "$DIR" ]]; then
90 echo "creating output directory $DIR"
95 error "failed to change directory to $DIR"
98 if [[ -n "$DBENCH_SRC" && -s "$DBENCH_SRC" ]]; then
99 echo "use dbench client file $DBENCH_SRC"
100 cp -v "$DBENCH_SRC" client.txt
102 CLIENT_DIRS=(/usr/share/dbench /usr/local/share /usr/lib/dbench)
103 CLIENT_FILES=(client.txt client_plain.txt dbench_client)
105 if [[ -n "$DBENCH_LIB" ]]; then
106 CLIENT_DIRS=("$DBENCH_LIB" "${CLIENT_DIRS[@]}")
109 for CLIENT_DIR in "${CLIENT_DIRS[@]}"; do
110 for CLIENT_FILE in "${CLIENT_FILES[@]}"; do
111 CLIENT_PATH="$CLIENT_DIR/$CLIENT_FILE"
112 if [[ -s "$CLIENT_PATH" ]]; then
113 echo "found dbench client file $CLIENT_PATH"
114 cp -v "$CLIENT_PATH" client.txt
121 if [[ ! -s client.txt ]]; then
122 skip_env "no dbench client file found" \
123 "DBENCH_LIB=$DBENCH_LIB DBENCH_SRC=$DBENCH_SRC"
127 if [[ "$CHROOT" == "yes" ]]; then
128 echo "copying required dbench files to chroot directory $DIR"
129 cp -v "$(type -P dbench)" dbench
130 LIBS71=($(ldd dbench | awk '
132 if (NF == 2 && $1 ~ /^[/]/)
134 else if (NF == 4 && $3 ~ /^[/]/)
138 print(substr(lib, 2))
141 if (( ${#LIBS71[@]} == 0 )); then
142 error "failed to get required dbench libraries"
144 if ! tar -C / -chf - "${LIBS71[@]}" | tar -xvf -; then
145 error "failed to copy libs ${LIBS71[*]} to $DIR"
153 echo "running 'dbench $*' $PREFIX $DIR at $(date)"
154 $RUN dbench -c client.txt "$@" &
156 echo "waiting for dbench pid $DBENCHPID"