From 7c5f067165b16c3e6d719ee89c0d6bd8728c78a1 Mon Sep 17 00:00:00 2001 From: grev Date: Fri, 27 Mar 2009 18:59:38 +0000 Subject: [PATCH] b=18921 i=Robert.Read acc-sm new TYPE2_TESTS testsuite --- lustre/tests/Makefile.am | 1 + lustre/tests/acceptance-small.sh | 9 +- lustre/tests/type2-tests.sh | 432 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 441 insertions(+), 1 deletion(-) create mode 100644 lustre/tests/type2-tests.sh diff --git a/lustre/tests/Makefile.am b/lustre/tests/Makefile.am index 10ed573..27f243a 100644 --- a/lustre/tests/Makefile.am +++ b/lustre/tests/Makefile.am @@ -16,6 +16,7 @@ noinst_SCRIPTS += performance-sanity.sh mdsrate-create-small.sh noinst_SCRIPTS += mdsrate-create-large.sh mdsrate-lookup-1dir.sh noinst_SCRIPTS += mdsrate-stat-small.sh mdsrate-stat-large.sh noinst_SCRIPTS += lockorder.sh socketclient socketserver runmultiop_bg_pause +noinst_SCRIPTS += type2-tests.sh nobase_noinst_SCRIPTS = cfg/local.sh nobase_noinst_SCRIPTS += acl/make-tree acl/run cfg/ncli.sh nobase_noinst_SCRIPTS += racer/dir_create.sh racer/file_create.sh racer/file_list.sh diff --git a/lustre/tests/acceptance-small.sh b/lustre/tests/acceptance-small.sh index ccf9cf4..594e85d 100755 --- a/lustre/tests/acceptance-small.sh +++ b/lustre/tests/acceptance-small.sh @@ -23,7 +23,7 @@ fi [ "$DEBUG_OFF" ] || DEBUG_OFF="eval lctl set_param debug=\"$DEBUG_LVL\"" [ "$DEBUG_ON" ] || DEBUG_ON="eval lctl set_param debug=0x33f0484" -export TESTSUITE_LIST="RUNTESTS SANITY DBENCH BONNIE IOZONE FSX SANITYN LFSCK LIBLUSTRE RACER REPLAY_SINGLE CONF_SANITY RECOVERY_SMALL REPLAY_OST_SINGLE REPLAY_DUAL INSANITY SANITY_QUOTA PERFORMANCE_SANITY" +export TESTSUITE_LIST="RUNTESTS SANITY DBENCH BONNIE IOZONE FSX SANITYN LFSCK LIBLUSTRE RACER REPLAY_SINGLE CONF_SANITY RECOVERY_SMALL REPLAY_OST_SINGLE REPLAY_DUAL INSANITY SANITY_QUOTA PERFORMANCE_SANITY TYPE2_TESTS" if [ "$ACC_SM_ONLY" ]; then for O in $TESTSUITE_LIST; do @@ -409,6 +409,13 @@ if [ "$PERFORMANCE_SANITY" != "no" ]; then PERFORMANCE_SANITY="done" fi +which mpirun > /dev/null 2>&1 || TYPE2_TESTS="no" +if [ "$TYPE2_TESTS" != "no" ]; then + title type2 tests + bash type2-tests.sh + TYPE2_TESTS="done" +fi + RC=$? title FINISHED echo "Finished at `date` in $((`date +%s` - $STARTTIME))s" diff --git a/lustre/tests/type2-tests.sh b/lustre/tests/type2-tests.sh new file mode 100644 index 0000000..10be707 --- /dev/null +++ b/lustre/tests/type2-tests.sh @@ -0,0 +1,432 @@ +#!/bin/bash +# +#set -vx + +set -e + +LUSTRE=${LUSTRE:-$(cd $(dirname $0)/..; echo $PWD)} +. $LUSTRE/tests/test-framework.sh +init_test_env $@ +. ${CONFIG:=$LUSTRE/tests/cfg/$NAME.sh} + +# +# compilbench +# +# Boulder cluster compilebench default location +cbench_DIR=${cbench_DIR:-/testsuite/tests/$(arch)/compilebench} +cbench_IDIRS=${cbench_IDIRS:-10} +cbench_RUNS=${cbench_RUNS:-10} # FIXME: wiki page requirements is 30, do we really need 30 ? + +if [ "$SLOW" = "no" ]; then + cbench_IDIRS=2 + cbench_RUNS=2 +fi + +# +# metabench +# +# Boulder cluster metabench default location +METABENCH=${METABENCH:-/testsuite/tests/$(arch)/METABENCH/src/metabench} +mbench_NFILES=${mbench_NFILES:-30400} +[ "$SLOW" = "no" ] && mbench_NFILES=10000 +MACHINEFILE=${MACHINEFILE:-$TMP/$(basename $0 .sh).machines} +# threads per client +mbench_THREADS=${mbench_THREADS:-4} + +# +# simul +# +# Boulder cluster default location +SIMUL=${SIMUL:-/testsuite/tests/$(arch)/simul/simul} +# threads per client +simul_THREADS=${simul_THREADS:-2} +simul_REP=${simul_REP:-20} +[ "$SLOW" = "no" ] && simul_REP=2 + +# +# connectathon +# +# Boulder cluster default location +cnt_DIR=${cnt_DIR:-/testsuite/tests/$(arch)/connectathon} +cnt_NRUN=${cnt_NRUN:-10} +[ "$SLOW" = "no" ] && cnt_NRUN=2 + +# +# cascading rw +# +# Boulder cluster default location +CASC_RW=${CASC_RW:-/testsuite/tests/$(arch)/parallel/cascading_rw} +# threads per client +casc_THREADS=${casc_THREADS:-2} +casc_REP=${casc_REP:-300} +[ "$SLOW" = "no" ] && casc_REP=10 + +# +# IOR +# +# Boulder cluster default location +IOR=${IOR:-/testsuite/tests/$(arch)/IOR/src/C/IOR} +# threads per client +ior_THREADS=${ior_THREADS:-2} +ior_blockSize=${ior_blockSize:-6} # Gb +ior_DURATION=${ior_DURATION:-30} # minutes +[ "$SLOW" = "no" ] && ior_DURATION=5 + +# +# write_append_truncate +# +# threads per client +write_THREADS=${write_THREADS:-8} +write_REP=${write_REP:-10000} +[ "$SLOW" = "no" ] && write_REP=100 + +# +# write_disjoint +# +# Boulder cluster default location +WRITE_DISJOINT=${WRITE_DISJOINT:-/testsuite/tests/x86_64/lustre/lustre/tests/write_disjoint} +# threads per client +wdisjoint_THREADS=${wdisjoint_THREADS:-4} +wdisjoint_REP=${wdisjoint_REP:-10000} +[ "$SLOW" = "no" ] && wdisjoint_REP=100 + +build_test_filter +check_and_setup_lustre + +print_opts () { + local var + + echo OPTIONS: + + for i in $@; do + var=$i + echo "${var}=${!var}" + done + [ -e $MACHINEFILE ] && cat $MACHINEFILE +} + +# Takes: +# 5 min * cbench_RUNS +# SLOW=no 10 mins +# SLOW=yes 50 mins +# Space estimation: +# compile dir kernel-1 680MB +# required space 680MB * cbench_IDIRS = ~7 Gb + +test_compilebench() { + print_opts cbench_DIR cbench_IDIRS cbench_RUNS + + [ -d $cbench_DIR ] || \ + { skip "No compilebench found" && return; } + + [ -e $cbench_DIR/compilebench ] || \ + { skip "No compilebench build" && return; } + + local space=$(df -P $DIR | tail -n 1 | awk '{ print $4 }') + if [ $space -le $((680 * 1024 * cbench_IDIRS)) ]; then + cbench_IDIRS=$(( space / 680 / 1024)) + [ $cbench_IDIRS = 0 ] && \ + skip "Need free space atleast 680 Mb, have $space" && return + + log free space=$space, reducing initial dirs to $cbench_IDIRS + fi + # FIXME: + # t-f _base needs to be modifyed to set properly tdir + # for new "test_foo" functions names + # local testdir=$DIR/$tdir + local testdir=$DIR/d0.compilebench + mkdir -p $testdir + + local savePWD=$PWD + cd $cbench_DIR + local cmd="./compilebench -D $testdir -i $cbench_IDIRS -r $cbench_RUNS --makej" + + log "$cmd" + + local rc=0 + eval $cmd + rc=$? + + cd $savePWD + [ $rc = 0 ] || error "compilebench failed: $rc" + rm -rf $testdir +} +run_test compilebench "compilebench" + +test_metabench() { + [ -e $METABENCH ] || \ + { skip "metabench not found" && return; } + + local clients=$CLIENTS + [ -z $clients ] && clients=$(hostname) + + num_clients=$(get_node_count ${clients//,/ }) + + # FIXME + # Need space estimation here. + + generate_machine_file $clients $MACHINEFILE || \ + error "can not generate machinefile $MACHINEFILE" + + print_opts METABENCH clients mbench_NFILES mbench_THREADS + + local testdir=$DIR/d0.metabench + mkdir -p $testdir + # mpi_run uses mpiuser + chmod 0777 $testdir + + # -C Run the file creation tests. + # -S Run the file stat tests. + # -c nfile Number of files to be used in each test. + # -k Cleanup. Remove the test directories. + local cmd="$METABENCH -w $testdir -c $mbench_NFILES -C -S -k" + echo "+ $cmd" + mpi_run -np $((num_clients * $mbench_THREADS)) -machinefile ${MACHINEFILE} $cmd + local rc=$? + if [ $rc != 0 ] ; then + error "metabench failed! $rc" + fi + rm -rf $testdir +} +run_test metabench "metabench" + +test_simul() { + [ -e $SIMUL ] || \ + { skip "simul not found" && return; } + + local clients=$CLIENTS + [ -z $clients ] && clients=$(hostname) + + local num_clients=$(get_node_count ${clients//,/ }) + + # FIXME + # Need space estimation here. + + generate_machine_file $clients $MACHINEFILE || \ + error "can not generate machinefile $MACHINEFILE" + + print_opts SIMUL clients simul_REP simul_THREADS + + local testdir=$DIR/d0.simul + mkdir -p $testdir + # mpi_run uses mpiuser + chmod 0777 $testdir + + # -n # : repeat each test # times + # -N # : repeat the entire set of tests # times + + local cmd="$SIMUL -d $testdir -n $simul_REP -N $simul_REP" + + echo "+ $cmd" + mpi_run -np $((num_clients * $simul_THREADS)) -machinefile ${MACHINEFILE} $cmd + + local rc=$? + if [ $rc != 0 ] ; then + error "simul failed! $rc" + fi + rm -rf $testdir +} +run_test simul "simul" + +test_connectathon() { + print_opts cnt_DIR cnt_NRUN + + [ -d $cnt_DIR ] || \ + { skip "No connectathon dir found" && return; } + + [ -e $cnt_DIR/runtests ] || \ + { skip "No connectathon runtests found" && return; } + + local testdir=$DIR/d0.connectathon + mkdir -p $testdir + + local savePWD=$PWD + cd $cnt_DIR + + # -f a quick functionality test + # -a run basic, general, special, and lock tests + # -N numpasses - will be passed to the runtests script. This argument + # is optional. It specifies the number of times to run + # through the tests. + + local cmd="./runtests -N $cnt_NRUN -a -f $testdir" + + log "$cmd" + + local rc=0 + eval $cmd + rc=$? + + cd $savePWD + [ $rc = 0 ] || error "connectathon failed: $rc" + rm -rf $testdir +} +run_test connectathon "connectathon" + +test_ior() { + [ -e $IOR ] || \ + { skip "IOR not found" && return; } + + local clients=$CLIENTS + [ -z $clients ] && clients=$(hostname) + + local num_clients=$(get_node_count ${clients//,/ }) + + local space=$(df -P $DIR | tail -n 1 | awk '{ print $4 }') + echo "+ $ior_blockSize * 1024 * 1024 * $num_clients * $ior_THREADS " + if [ $((space / 2)) -le $(( ior_blockSize * 1024 * 1024 * num_clients * ior_THREADS)) ]; then + echo "+ $space * 9/10 / 1024 / 1024 / $num_clients / $ior_THREADS" + ior_blockSize=$(( space /2 /1024 /1024 / num_clients / ior_THREADS )) + [ $ior_blockSize = 0 ] && \ + skip "Need free space more than ($num_clients * $ior_THREADS )Gb: $((num_clients*ior_THREADS *1024 *1024*2)), have $space" && return + + echo "free space=$space, Need: $num_clients x $ior_THREADS x $ior_blockSize Gb (blockSize reduced to $ior_blockSize Gb)" + fi + + generate_machine_file $clients $MACHINEFILE || \ + error "can not generate machinefile $MACHINEFILE" + + print_opts IOR ior_THREADS ior_DURATION MACHINEFILE + + local testdir=$DIR/d0.ior + mkdir -p $testdir + # mpi_run uses mpiuser + chmod 0777 $testdir + + # + # -b N blockSize -- contiguous bytes to write per task (e.g.: 8, 4k, 2m, 1g)" + # -o S testFileName + # -t N transferSize -- size of transfer in bytes (e.g.: 8, 4k, 2m, 1g)" + # -w writeFile -- write file" + # -r readFile -- read existing file" + # -T maxTimeDuration -- max time in minutes to run tests" + # -k keepFile -- keep testFile(s) on program exit + local cmd="$IOR -a POSIX -b ${ior_blockSize}g -o $testdir/iorData -t 2m -v -w -r -T $ior_DURATION -k" + + echo "+ $cmd" + mpi_run -np $((num_clients * $ior_THREADS)) -machinefile ${MACHINEFILE} $cmd + + local rc=$? + if [ $rc != 0 ] ; then + error "ior failed! $rc" + fi + rm -rf $testdir +} +run_test ior "ior" + +test_cascading_rw() { + [ -e $CASC_RW ] || \ + { skip "cascading_rw not found" && return; } + + local clients=$CLIENTS + [ -z $clients ] && clients=$(hostname) + + num_clients=$(get_node_count ${clients//,/ }) + + # FIXME + # Need space estimation here. + + generate_machine_file $clients $MACHINEFILE || \ + error "can not generate machinefile $MACHINEFILE" + + print_opts CASC_RW clients casc_THREADS casc_REP MACHINEFILE + + local testdir=$DIR/d0.cascading_rw + mkdir -p $testdir + # mpi_run uses mpiuser + chmod 0777 $testdir + + # -g: debug mode + # -n: repeat test # times + + local cmd="$CASC_RW -g -d $testdir -n $casc_REP" + + echo "+ $cmd" + mpi_run -np $((num_clients * $casc_THREADS)) -machinefile ${MACHINEFILE} $cmd + + local rc=$? + if [ $rc != 0 ] ; then + error "cascading_rw failed! $rc" + fi + rm -rf $testdir +} +run_test cascading_rw "cascading_rw" + +test_write_append_truncate() { + # location is lustre/tests dir + if ! which write_append_truncate > /dev/null 2>&1 ; then + skip "write_append_truncate not found" + return + fi + + local clients=$CLIENTS + [ -z $clients ] && clients=$(hostname) + + local num_clients=$(get_node_count ${clients//,/ }) + + # FIXME + # Need space estimation here. + + generate_machine_file $clients $MACHINEFILE || \ + error "can not generate machinefile $MACHINEFILE" + + local testdir=$DIR/d0.write_append_truncate + local file=$testdir/f0.wat + + print_opts clients write_REP write_THREADS MACHINEFILE + + mkdir -p $testdir + # mpi_run uses mpiuser + chmod 0777 $testdir + + local cmd="write_append_truncate $file $write_REP" + + echo "+ $cmd" + mpi_run -np $((num_clients * $write_THREADS)) -machinefile ${MACHINEFILE} $cmd + + local rc=$? + if [ $rc != 0 ] ; then + error "write_append_truncate failed! $rc" + return $rc + fi + rm -rf $testdir +} +run_test write_append_truncate "write_append_truncate" + +test_write_disjoint() { + [ -e $WRITE_DISJOINT ] || \ + { skip "write_disjoint not found" && return; } + + local clients=$CLIENTS + [ -z $clients ] && clients=$(hostname) + + local num_clients=$(get_node_count ${clients//,/ }) + + # FIXME + # Need space estimation here. + + generate_machine_file $clients $MACHINEFILE || \ + error "can not generate machinefile $MACHINEFILE" + + print_opts WRITE_DISJOINT clients wdisjoint_THREADS wdisjoint_REP MACHINEFILE + local testdir=$DIR/d0.write_disjoint + mkdir -p $testdir + # mpi_run uses mpiuser + chmod 0777 $testdir + + local cmd="$WRITE_DISJOINT -f $testdir/file -n $wdisjoint_REP" + + echo "+ $cmd" + mpi_run -np $((num_clients * $wdisjoint_THREADS)) -machinefile ${MACHINEFILE} $cmd + + local rc=$? + if [ $rc != 0 ] ; then + error "write_disjoint failed! $rc" + fi + rm -rf $testdir +} +run_test write_disjoint "write_disjoint" + +equals_msg `basename $0`: test complete, cleaning up +check_and_cleanup_lustre +[ -f "$TESTSUITELOG" ] && cat $TESTSUITELOG || true -- 1.8.3.1