set -e
ONLY=${ONLY:-"$*"}
-ALWAYS_EXCEPT=${ALWAYS_EXCEPT:-"$DOM_PERFORMANCE_EXCEPT"}
-# UPDATE THE COMMENT ABOVE WITH BUG NUMBERS WHEN CHANGING ALWAYS_EXCEPT!
-
-[ "$SLOW" = "no" ] && EXCEPT_SLOW=""
-
-LUSTRE=${LUSTRE:-$(cd $(dirname $0)/..; echo $PWD)}
+LUSTRE=${LUSTRE:-$(dirname $0)/..}
. $LUSTRE/tests/test-framework.sh
-
-init_test_env $@
-. ${CONFIG:=$LUSTRE/tests/cfg/$NAME.sh}
+init_test_env "$@"
init_logging
+ALWAYS_EXCEPT="$DOM_PERFORMANCE_EXCEPT"
+build_test_filter
+
SAVED_FAIL_ON_ERROR=$FAIL_ON_ERROR
FAIL_ON_ERROR=false
SAVED_DEBUG=$($LCTL get_param -n debug 2> /dev/null)
+. $LUSTRE/tests/functions.sh
check_and_setup_lustre
-build_test_filter
+clients=${CLIENTS:-$HOSTNAME}
+generate_machine_file $clients $MACHINEFILE ||
+ error "Failed to generate machine file"
-DP_DNE=${DP_DNE:-"no"}
DP_DIO=${DP_DIO:-"no"}
DOM_SIZE=${DOM_SIZE:-"1M"}
DP_OSC="mdc"
-rm -rf $DIR/*
-
DP_NORM=$DIR/dp_norm
DP_DOM=$DIR/dp_dom
+DP_DOM_DNE=$DIR/dp_dne
DP_STATS=${DP_STATS:-"no"}
+if $DO_CLEANUP; then
+ rm -rf $DIR/*
+else
+ rm -rf $DP_NORM $DP_DOM $DP_DOM_DNE
+fi
+
# total number of files
DP_FNUM=${DP_FNUM:-16384}
# number of threads
# 1 stripe for normal files
mkdir -p $DP_NORM
-$LFS setstripe -c 1 $DP_NORM ||
+$LFS setstripe -c 2 $DP_NORM ||
error "Cannot create test directory for ordinary files"
-if [ "x$DP_DNE" == "xyes" ] ; then
- $LFS setdirstripe -i 0 -c 2 $DP_DOM ||
- error "Cannot create striped directory"
-else
- mkdir -p $DP_DOM
+if [[ $MDSCOUNT -gt 1 ]] ; then
+ $LFS setdirstripe -i 0 -c $MDSCOUNT $DP_DOM_DNE ||
+ error_noexit "Cannot create striped directory"
+ $LFS setstripe -E ${DOM_SIZE} -L mdt -E EOF $DP_DOM_DNE ||
+ error_noexit "Cannot create test directory for dom files"
fi
+mkdir -p $DP_DOM
$LFS setstripe -E ${DOM_SIZE} -L mdt -E EOF $DP_DOM ||
error "Cannot create test directory for dom files"
local cli=$1
cancel_lru_locks $cli
- ### drop all debug
- $LCTL set_param -n debug=0
+ ### drop all debug except critical
+ $LCTL set_param -n debug="error warning console emerg"
dp_clear_stats $cli
}
run_MDtest() {
if ! which mdtest > /dev/null 2>&1 ; then
- echo "Mdtest is not installed, skipping"
- return 0
+ skip_env "Mdtest is not installed, skipping"
fi
local mdtest=$(which mdtest)
local th_num=$((DP_FNUM * 2 / DP_NUM))
local bsizes="8192"
- [ "$SLOW" = "yes" ] && bsizes="4096 16384"
+ chmod 0777 $TDIR
+
+ [ "$SLOW" = "yes" ] && bsizes="4096 32768"
for bsize in $bsizes ; do
- dp_run_cmd "mpirun -np $DP_NUM $mdtest -i 3 -I $th_num -F \
+ dp_run_cmd "mpi_run -np $DP_NUM $mdtest -i 3 -I $th_num -F \
-z 1 -b 1 -L -u -w $bsize -R -d $TDIR"
if [ ${PIPESTATUS[0]} != 0 ]; then
error "MDtest failed, aborting"
}
run_SmallIO() {
- if [ ! -f createmany ] ; then
- echo "Createmany is not installed, skipping"
- return 0
- fi
-
- if [ ! -f smalliomany ] ; then
- echo "Smalliomany is not installed, skipping"
- return 0
- fi
-
local TDIR=${1:-$DIR}
local count=$DP_FNUM
local MIN=$((count * 16))
- [ $MDSSIZE -le $MIN ] && count=$((MDSSIZE / 16))
+ local mdssize=$(mdssize_from_index $TDIR 0)
+ [ $mdssize -le $MIN ] && count=$((mdssize / 16))
- dp_run_cmd "./createmany -o $TDIR/file- $count | grep 'total:'"
+ dp_run_cmd "createmany -o $TDIR/file- $count | grep 'total:'"
if [ ${PIPESTATUS[0]} != 0 ]; then
error "File creation failed, aborting"
fi
- if [ -f statmany ]; then
- dp_run_cmd "./statmany -s $TDIR/file- $count $((count * 5)) |
- grep 'total:'"
- if [ ${PIPESTATUS[0]} != 0 ]; then
- error "File stat failed, aborting"
- fi
-
+ dp_run_cmd "statmany -s $TDIR/file- $count $((count * 5)) |
+ grep 'total:'"
+ if [ ${PIPESTATUS[0]} != 0 ]; then
+ error "File stat failed, aborting"
fi
for opc in w a r ; do
- dp_run_cmd "./smalliomany -${opc} $TDIR/file- $count 300 |
+ dp_run_cmd "smalliomany -${opc} $TDIR/file- $count 300 |
grep 'total:'"
if [ ${PIPESTATUS[0]} != 0 ]; then
error "SmallIO -${opc} failed, aborting"
done
- dp_run_cmd "./unlinkmany $TDIR/file- $count | grep 'total:'"
+ dp_run_cmd "unlinkmany $TDIR/file- $count | grep 'total:'"
if [ ${PIPESTATUS[0]} != 0 ]; then
error "SmallIO failed, aborting"
fi
run_IOR() {
if ! which IOR > /dev/null 2>&1 ; then
- echo "IOR is not installed, skipping"
- return 0
+ skip_env "IOR is not installed, skipping"
fi
+ # Requires at least 20GB (roughly)
+ (( MDSSIZE >= 20000000 )) || skip "Require MDS of at least 20GB"
+
local IOR=$(which IOR)
local iter=$((DP_FNUM / DP_NUM))
local direct=""
fi
local TDIR=${1:-$MOUNT}
- local bsizes="8"
- [ "$SLOW" = "yes" ] && bsizes="4 16"
+
+ chmod 0777 $TDIR
+
+ # for DoM large files (beyond the DoM size) use
+ # DOM_SIZE=1M :
+ # bsize="4096 " - 4Mb
+ # nsegments=$((128 * 1024))
+ # DOM_SIZE=64k :
+ # bsize="1024 " - 1Mb
+ # nsegments=$((32 * 1024))
+ local bsizes=${BSIZES:-"4 32"}
+ local nsegments=${NSEGMENTS:-128}
+ [ "$SLOW" = "no" ] && bsizes="8"
for bsize in $bsizes ; do
- segments=$((128 / bsize))
+ segments=$((nsegments / bsize))
- dp_run_cmd "mpirun -np $DP_NUM $IOR \
+ dp_run_cmd "mpi_run -np $DP_NUM $IOR \
-a POSIX -b ${bsize}K -t ${bsize}K -o $TDIR/ -k \
- -s $segments -w -r -i $iter -F -E -z -m -Z $direct"
+ -s $segments -w -r -i $iter -F -E -z -m -Z $direct" |
+ awk '($1 !~ /^(write|read|access)$/) || NF>12 {print}'
if [ ${PIPESTATUS[0]} != 0 ]; then
error "IOR write test for ${bsize}K failed, aborting"
fi
# check READ performance only (no cache)
- dp_run_cmd "mpirun -np $DP_NUM $IOR \
+ dp_run_cmd "mpi_run -np $DP_NUM $IOR \
-a POSIX -b ${bsize}K -t ${bsize}K -o $TDIR/ -X 42\
- -s $segments -r -i $iter -F -E -z -m -Z $direct"
+ -s $segments -r -i $iter -F -E -z -m -Z $direct" |
+ awk '($1 !~ /^(read|access|remove)$/) || NF>12 {print}'
if [ ${PIPESTATUS[0]} != 0 ]; then
error "IOR read test for ${bsize}K failed, aborting"
fi
run_Dbench() {
if ! which dbench > /dev/null 2>&1 ; then
- echo "Dbench is not installed, skipping"
- return 0
+ skip_env "Dbench is not installed, skipping"
fi
- if [ "x$DP_DNE" == "xyes" ] ; then
- echo "dbench uses subdirs, skipping for DNE setup"
+ local TDIR=${1:-$MOUNT}
+
+ if [ "x$DP_DOM_DNE" == "x$TDIR" ] ; then
+ echo "dbench uses subdirs, skipping for DNE dir"
return 0
fi
- local TDIR=${1:-$MOUNT}
-
dp_run_cmd "dbench -D $TDIR $DP_NUM | egrep -v 'warmup|execute'"
if [ ${PIPESTATUS[0]} != 0 ]; then
error "Dbench failed, aborting"
run_FIO() {
# https://github.com/axboe/fio/archive/fio-2.8.zip
if ! which fio > /dev/null 2>&1 ; then
- echo "No FIO installed, skipping"
- return 0
+ skip_env "No FIO installed, skipping"
fi
local fnum=128 # per thread
fi
local bsizes="8"
- [ "$SLOW" = "yes" ] && bsizes="4 16"
+ [ "$SLOW" = "yes" ] && bsizes="4 32"
for bsize in $bsizes ; do
- dp_run_cmd "$base_cmd --bs=${bsize}k --rw=randwrite $direct \
- --file_service_type=random --randrepeat=1 \
- --norandommap --group_reporting=1 --loops=$loops |
- awk -F\; '{printf \"WRITE: BW %dKiB/sec, IOPS %d, \
- lat (%d/%d/%d)usec\n\",\
- \$48, \$49, \$53, \$57, \$81}'"
+ local write_cmd="$base_cmd --bs=${bsize}k --rw=randwrite \
+ $direct --file_service_type=random --randrepeat=1 \
+ --norandommap --group_reporting=1 --loops=$loops"
+ if [ "x$DP_STATS" != "xyes" ] ; then
+ dp_run_cmd "$write_cmd | awk -F\; '{printf \"WRITE: \
+ BW %dKiB/sec, IOPS %d, lat (%d/%d/%d)usec\n\", \
+ \$48, \$49, \$53, \$57, \$81}'"
+ else
+ dp_run_cmd "$write_cmd"
+ fi
if [ ${PIPESTATUS[0]} != 0 ]; then
error "FIO write test with ${bsize}k failed, aborting"
fi
- dp_run_cmd "$base_cmd --bs=${bsize}k --rw=randread $direct \
- --file_service_type=random --randrepeat=1 \
- --norandommap --group_reporting=1 --loops=$loops |
- awk -F\; '{printf \"READ : BW %dKiB/sec, IOPS %d, \
- lat (%d/%d/%d)usec\n\",\
- \$7, \$8, \$12, \$16, \$40}'"
+ local read_cmd="$base_cmd --bs=${bsize}k --rw=randread \
+ $direct --file_service_type=random --randrepeat=1 \
+ --norandommap --group_reporting=1 --loops=$loops"
+ if [ "x$DP_STATS" != "xyes" ] ; then
+ dp_run_cmd "$read_cmd | awk -F\; '{printf \"READ : \
+ BW %dKiB/sec, IOPS %d, lat (%d/%d/%d)usec\n\", \
+ \$7, \$8, \$12, \$16, \$40}'"
+ else
+ dp_run_cmd "$read_cmd"
+ fi
if [ ${PIPESTATUS[0]} != 0 ]; then
error "FIO read test with ${bsize}k failed, aborting"
fi
return 0
}
+run_compbench() {
+ local compilebench
+ if [ x$cbench_DIR = x ]; then
+ compilebench=$(which compilebench 2> /dev/null)
+ else
+ cd $cbench_DIR
+ [ -x compilebench ] ||
+ skip_env "compilebench is missing in $cbench_DIR"
+ compilebench=compilebench
+ fi
+
+ [ x$compilebench != x ] ||
+ skip_env "Compilebench is not installed, skipping"
+
+ local TDIR=${1:-$MOUNT}
+
+ dp_run_cmd "$compilebench -D $TDIR -i 2 -r 2 --makej"
+ if [ ${PIPESTATUS[0]} != 0 ]; then
+ error "Compilebench failed, aborting"
+ fi
+
+ rm -rf $TDIR/*
+}
+
dp_test_run() {
local test=$1
local facets=$(get_facets MDS)
save_lustre_params $facets "mdt.*.dom_lock" >> $p
- printf "\n##### $test: DoM files, IO lock on open\n"
+ printf "\n##### $test: DoM files\n"
do_nodes $nodes "lctl set_param -n mdt.*.dom_lock=1"
DP_OSC="mdc"
run_${test} $DP_DOM
- printf "\n##### $test: DoM files, no IO lock on open\n"
- do_nodes $nodes "lctl set_param -n mdt.*.dom_lock=0"
- DP_OSC="mdc"
- run_${test} $DP_DOM
+ if [ -d $DP_DOM_DNE ] ; then
+ printf "\n##### $test: DoM files + DNE\n"
+ DP_OSC="mdc"
+ run_${test} $DP_DOM_DNE
+ fi
printf "\n##### $test: OST files\n"
DP_OSC="osc"
run_${test} $DP_NORM
restore_lustre_params < $p
+ rm -f $p
}
test_smallio() {
}
run_test fio "Performance comparision: FIO"
+test_compbench() {
+ dp_test_run compbench
+}
+run_test compbench "Performance comparision: compilebench"
+
FAIL_ON_ERROR=$SAVED_FAIL_ON_ERROR
$LCTL set_param -n debug="$SAVED_DEBUG"
-complete $SECONDS
+complete_test $SECONDS
check_and_cleanup_lustre
exit_status