X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Ftests%2Fsanity-benchmark.sh;h=b01dc450de7bce702ab44382ed3b3fc6b82f9fc9;hb=61138e82b52b19ab2a73398c2a238410ed559198;hp=5eedb00f75a0da92ea9fae6476de3653c2ac5d33;hpb=df764443d452c1db1db5e72f72c9ad6e0819f567;p=fs%2Flustre-release.git diff --git a/lustre/tests/sanity-benchmark.sh b/lustre/tests/sanity-benchmark.sh index 5eedb00..b01dc45 100644 --- a/lustre/tests/sanity-benchmark.sh +++ b/lustre/tests/sanity-benchmark.sh @@ -8,17 +8,18 @@ set -e ONLY=${ONLY:-"$*"} -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_logging -# bug number: ALWAYS_EXCEPT="$SANITY_BENCHMARK_EXCEPT" +[ "$SLOW" = "no" ] && EXCEPT_SLOW="iozone" + +build_test_filter MAX_THREADS=${MAX_THREADS:-20} -RAMKB=`awk '/MemTotal:/ { print $2 }' /proc/meminfo` +RAMKB=$(awk '/MemTotal:/ { print $2 }' /proc/meminfo) if [ -z "$THREADS" ]; then THREADS=$((RAMKB / 16384)) [ $THREADS -gt $MAX_THREADS ] && THREADS=$MAX_THREADS @@ -29,20 +30,8 @@ RSIZE=${RSIZE:-512} DEBUG_LVL=${DEBUG_LVL:-0} DEBUG_OFF=${DEBUG_OFF:-"eval lctl set_param debug=\"$DEBUG_LVL\""} DEBUG_ON=${DEBUG_ON:-"eval lctl set_param debug=0x33f0484"} +DIRECTIO=${DIRECTIO:-directio} -PIOSBIN=${PIOSBIN:-$(which pios 2> /dev/null || true)} - -pios_THREADCOUNT=${pios_THREADCOUNT:-"1,8,40"} -[ "$SLOW" = "no" ] && pios_THREADCOUNT=8 - -pios_REGIONCOUNT=${pios_REGIONCOUNT:-1024} -pios_CHUNKSIZE=${pios_CHUNKSIZE:-1M} -pios_REGIONSIZE=${pios_REGIONSIZE:-8M} -pios_OFFSET=${pios_OFFSET:-16M} - -[ "$SLOW" = "no" ] && EXCEPT_SLOW="iozone" - -build_test_filter check_and_setup_lustre assert_DIR @@ -116,6 +105,7 @@ test_iozone() { export O_DIRECT local IOZDIR=$DIR/d0.iozone + wait_delete_completed || true mkdir -p $IOZDIR $LFS setstripe -c -1 $IOZDIR sync @@ -138,16 +128,18 @@ test_iozone() { tail -1 $IOZLOG | grep -q complete || \ { error "iozone (1) failed" && return 1; } rm -f $IOZLOG + wait_delete_completed || true $DEBUG_ON # check if O_DIRECT support is implemented in kernel if [ -z "$O_DIRECT" ]; then touch $DIR/f.iozone - if ! ./directio write $DIR/f.iozone 0 1; then + if ! $DIRECTIO write $DIR/f.iozone 0 1; then log "SKIP iozone DIRECT IO test" O_DIRECT=no fi rm -f $DIR/f.iozone + wait_delete_completed || true fi if [ "$O_DIRECT" != "no" -a "$IOZONE_DIR" != "no" ]; then $DEBUG_OFF @@ -155,6 +147,7 @@ test_iozone() { tail -1 $IOZLOG | grep -q complete || \ { error "iozone (2) failed" && return 1; } rm -f $IOZLOG + wait_delete_completed || true $DEBUG_ON fi @@ -175,6 +168,7 @@ test_iozone() { tail -1 $IOZLOG | grep -q complete || \ { error "iozone (3) failed" && return 1; } rm -f $IOZLOG + wait_delete_completed || true $DEBUG_ON elif [ $IOZVER -lt 3145 ]; then VER=`iozone -v | awk '/Revision:/ { print $3 }'` @@ -184,164 +178,27 @@ test_iozone() { run_test iozone "iozone" test_fsx() { - local testfile=$DIR/f0.fsxfile - FSX_SIZE=$SIZE - FSX_COUNT=1000 - local SPACE=`df -P $MOUNT | tail -n 1 | awk '{ print $4 }'` - [ $SPACE -lt $FSX_SIZE ] && FSX_SIZE=$((SPACE * 3 / 4)) - $DEBUG_OFF - FSX_SEED=${FSX_SEED:-$RANDOM} - rm -f $testfile - $LFS setstripe -c -1 $testfile - CMD="fsx -c 50 -p 1000 -S $FSX_SEED -P $TMP -l $FSX_SIZE \ - -N $((FSX_COUNT * 100)) $testfile" - echo "Using: $CMD" - $CMD || error "fsx failed" - rm -f $testfile - $DEBUG_ON -} -run_test fsx "fsx" - - -############################################################ -# PIOS -# - -iterpr_KMGT () { - local str=$1 - local num=${str:0:${#str}-1} - case ${str:${#str}-1} in - k|K ) num=$((num << 10));; # - m|M ) num=$((num << 20));; # emacs is confsued by the << and - g|G ) num=$((num << 30));; # these comments help it out. - t|T ) num=$((num << 40));; # - * ) num=$str;; - esac - echo $num -} - -pios_file_size () { - # pios.c: check_device_size () - # /* Adding 10% to total test size for filesystem overhead */ - # size = size + (double)(size) * (double) (0.1); - # pios.c: set_actual_streams () - # total_test_size = runarg->regioncount * runarg->regionsize + local testfile=$DIR/f0.fsxfile + FSX_SIZE=$SIZE + FSX_COUNT=1000 + local SPACE=`df -P $MOUNT | tail -n 1 | awk '{ print $4 }'` - local size=$(($(iterpr_KMGT $pios_REGIONCOUNT) * \ - $(iterpr_KMGT $pios_REGIONSIZE) )) - echo $size -} - -space_check () { - local testdir=$DIR/$tdir - local stripe=$($LFS getstripe -c $testdir) - - # if stripe_count = 1 the size should be less than min ost size, bug 24294 - local space=$($LFS df $testdir | grep "filesystem summary:" | awk '{print $3}') - [ $stripe -eq 1 ] && space=$(min_ost_size) - - local size=$(pios_file_size) - size=$(( size + size / 10 )) - # we can not use pios --cleanup|-x because we need the files exist for pios --verify, - # so, we need space available for each of pios_THREADCOUNT value run - local num_runs=$(echo ${pios_THREADCOUNT//,/ } | wc -w) - size=$(( size * $num_runs)) - space=$((space * 1024)) - echo size=$size space=$space - if [ $space -le $size ]; then - local ratio=$(( size / space + 1 )) - echo "Need free space atleast $size, available $space, ratio=$ratio" - local rgcount=$(( pios_REGIONCOUNT / ratio )) - echo "reducing pios_REGIONCOUNT=$pios_REGIONCOUNT on $ratio" - if [ $rgcount -eq 0 ]; then - echo "fs is too small, reduced pios_REGIONCOUNT=$rgcount" - return 10 - fi - pios_REGIONCOUNT=$(( pios_REGIONCOUNT / ratio )) - echo using pios_REGIONCOUNT=$pios_REGIONCOUNT size=$(pios_file_size) - fi -} + check_set_fallocate -pios_setup() { - local testdir=$DIR/$tdir - mkdir -p $testdir - - stripes=1 - [ "$1" == "--stripe" ] && stripes=-1 - $LFS setstripe $testdir -c $stripes - echo "Test directory $testdir stripe count: $stripes" -} - -pios_cleanup() { - local rc=${1:-0} - local testdir=$DIR/$tdir - if [ $rc -eq 0 ]; then - echo cleanup: testdir=$testdir rc=$rc - rm -rf $testdir - wait_delete_completed || true - fi -} - -run_pios () { - local testdir=$DIR/$tdir - local cmd="$PIOSBIN -t $pios_THREADCOUNT -n $pios_REGIONCOUNT \ - -c $pios_CHUNKSIZE -s $pios_REGIONSIZE \ - -o $pios_OFFSET $@ -p $testdir" - - if [ ! -d $testdir ]; then - error "No test directory created, setup_pios must have failed" - return 20 - fi - - log "$cmd" - - local rc=0 - eval $cmd - rc=$? - - return $rc -} - -test_pios_ssf() { - if [ -z "$PIOSBIN" ]; then - skip_env "$0 : pios not found PIOSBIN=$PIOSBIN" - return - fi - - local rc=0 - pios_setup --stripe || return - if ! space_check; then - skip_env "not enough space" - pios_cleanup - return 0 - fi - run_pios || return - run_pios --verify || rc=$? - pios_cleanup $rc - return $rc -} -run_test pios_ssf "pios shared single file" - -test_pios_fpp() { - if [ -z "$PIOSBIN" ]; then - skip_env "pios not found PIOSBIN=$PIOSBIN" - return - fi - - local rc=0 - pios_setup || return - if ! space_check; then - skip_env "not enough space" - pios_cleanup - return 0 - fi - run_pios -L fpp || return - run_pios -L fpp --verify || rc=$? - pios_cleanup $rc - return $rc + [ $SPACE -lt $FSX_SIZE ] && FSX_SIZE=$((SPACE * 3 / 4)) + $DEBUG_OFF + FSX_SEED=${FSX_SEED:-$RANDOM} + rm -f $testfile + $LFS setstripe -c -1 $testfile + CMD="$FSX -c 50 -p 1000 -S $FSX_SEED -P $TMP -l $FSX_SIZE \ + -N $((FSX_COUNT * 100)) $FSXOPT $testfile" + echo "Using: $CMD" + $CMD || error "fsx failed" + rm -f $testfile + $DEBUG_ON } -run_test pios_fpp "pios file per process" +run_test fsx "fsx" -complete $(basename $0) $SECONDS +complete $SECONDS check_and_cleanup_lustre exit_status