Whamcloud - gitweb
LU-17914 lnet: Fix erroneous net set error
[fs/lustre-release.git] / lustre / tests / dom-performance.sh
index 8594998..ebcb4c9 100644 (file)
@@ -7,40 +7,43 @@
 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
@@ -48,16 +51,17 @@ DP_NUM=${DP_NUM:-4}
 
 # 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"
 
@@ -99,8 +103,8 @@ dp_setup_test() {
        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
 }
 
@@ -132,8 +136,7 @@ dp_run_cmd() {
 
 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)
@@ -142,10 +145,12 @@ run_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"
@@ -157,38 +162,26 @@ run_MDtest() {
 }
 
 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"
@@ -196,7 +189,7 @@ run_SmallIO() {
 
        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
@@ -206,10 +199,12 @@ run_SmallIO() {
 
 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=""
@@ -219,23 +214,36 @@ run_IOR() {
        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
@@ -247,17 +255,16 @@ run_IOR() {
 
 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"
@@ -270,8 +277,7 @@ run_Dbench() {
 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
@@ -306,25 +312,33 @@ run_FIO() {
        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
@@ -333,6 +347,30 @@ run_FIO() {
        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)
@@ -341,21 +379,23 @@ dp_test_run() {
 
        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() {
@@ -383,9 +423,14 @@ test_fio() {
 }
 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