Whamcloud - gitweb
LU-8586 test: Fix failure due to mixed OST size.
[fs/lustre-release.git] / lustre / tests / sanity-benchmark.sh
index c573af1..398656e 100644 (file)
@@ -29,6 +29,7 @@ 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)}
 
@@ -143,7 +144,7 @@ test_iozone() {
     # 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
@@ -193,9 +194,11 @@ test_fsx() {
     FSX_SEED=${FSX_SEED:-$RANDOM}
     rm -f $testfile
     $LFS setstripe -c -1 $testfile
-    echo Using FSX_SEED=$FSX_SEED FSX_SIZE=$FSX_SIZE FSX_COUNT=$FSX_COUNT
-    fsx -c 50 -p 1000 -S $FSX_SEED -P $TMP -l $FSX_SIZE \
-       -N $(($FSX_COUNT * 100)) $DIR/fsxfile
+    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 fsx "fsx"
@@ -231,27 +234,42 @@ pios_file_size () {
 }
 
 space_check () {
-    local space=$(df -P $DIR | tail -n 1 | awk '{ print $4 }')
-    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
+       local testdir=$DIR/$tdir
+       local stripe=$($LFS getstripe -c $testdir)
+       local min_space_available=0
+
+       # if stripe_count = 1 the size should be less than min ost size,
+       # bug 24294
+       min_space_available=$(lfs df | grep "^$FSNAME-OST" | \
+               awk '{print $4}' | sort -un | head -1)
+       local space=$((min_space_available * OSTCOUNT))
+
+       [ $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
 }
 
 pios_setup() { 
@@ -265,7 +283,7 @@ pios_setup() {
 }
 
 pios_cleanup() {
-    local rc=$1
+    local rc=${1:-0}
     local testdir=$DIR/$tdir
     if [ $rc -eq 0 ]; then
         echo cleanup: testdir=$testdir rc=$rc
@@ -301,8 +319,12 @@ test_pios_ssf() {
     fi
 
     local rc=0
-    space_check || { skip_env "not enough space" && return 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
@@ -317,8 +339,12 @@ test_pios_fpp() {
     fi
 
     local rc=0
-    space_check || { skip_env "not enough space" && return 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
@@ -326,6 +352,6 @@ test_pios_fpp() {
 }
 run_test pios_fpp "pios file per process"
 
-complete $(basename $0) $SECONDS
+complete $SECONDS
 check_and_cleanup_lustre
 exit_status