# UPDATE THE COMMENT ABOVE WITH BUG NUMBERS WHEN CHANGING ALWAYS_EXCEPT!
# with LOD/OSP landing
-# bug number for skipped tests: LU-2036 LU-8139 LU-8411
-ALWAYS_EXCEPT=" 76 101g 407 $ALWAYS_EXCEPT"
+# bug number for skipped tests: LU-2036 LU-8411
+ALWAYS_EXCEPT=" 76 407 $ALWAYS_EXCEPT"
is_sles11() # LU-4341
{
llapi_layout_test -d$DIR/$tdir -p$POOL -o$OSTCOUNT $skip27D ||
error "llapi_layout_test failed"
- cleanup_pools || error "cleanup_pools failed"
+ destroy_test_pools || error "destroy test pools failed"
}
run_test 27D "validate llapi_layout API"
}
run_test 77g "checksum error on OST write, read"
-test_77i() { # bug 13805
- [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
- $GSS && skip "could not run with gss" && return
- #define OBD_FAIL_OSC_CONNECT_CKSUM 0x40b
- lctl set_param fail_loc=0x40b
- remount_client $MOUNT
- lctl set_param fail_loc=0
- for VALUE in `lctl get_param osc.*osc-[^mM]*.checksum_type`; do
- PARAM=`echo ${VALUE[0]} | cut -d "=" -f1`
- algo=`lctl get_param -n $PARAM | sed 's/.*\[\(.*\)\].*/\1/g'`
- [ "$algo" = "adler" ] || error "algo set to $algo instead of adler"
- done
- remount_client $MOUNT
-}
-run_test 77i "client not supporting OSD_CONNECT_CKSUM"
-
test_77j() { # bug 13805
[ $PARALLEL == "yes" ] && skip "skip parallel run" && return
$GSS && skip "could not run with gss" && return
lctl set_param fail_loc=0x40c
remount_client $MOUNT
lctl set_param fail_loc=0
- sleep 2 # wait async osc connect to finish
- for VALUE in `lctl get_param osc.*osc-[^mM]*.checksum_type`; do
- PARAM=`echo ${VALUE[0]} | cut -d "=" -f1`
- algo=`lctl get_param -n $PARAM | sed 's/.*\[\(.*\)\].*/\1/g'`
+ # wait async osc connect to finish and reflect updated state value
+ local i
+ for (( i=0; i < OSTCOUNT; i++ )) ; do
+ wait_osc_import_state client ost$((i+1)) FULL
+ done
+
+ for VALUE in $(lctl get_param osc.*osc-[^mM]*.checksum_type); do
+ PARAM=$(echo ${VALUE[0]} | cut -d "=" -f1)
+ algo=$(lctl get_param -n $PARAM | sed 's/.*\[\(.*\)\].*/\1/g')
[ "$algo" = "adler" ] || error "algo set to $algo instead of adler"
done
remount_client $MOUNT
}
run_test 101f "check mmap read performance"
+test_101g_brw_size_test() {
+ local mb=$1
+ local pages=$((mb * 1048576 / $(page_size)))
+
+ $LCTL set_param osc.*.max_pages_per_rpc=${mb}M ||
+ { error "unable to set max_pages_per_rpc=${mb}M"; return 1; }
+ for mp in $($LCTL get_param -n osc.*.max_pages_per_rpc); do
+ [ $mp -ne $pages ] && error "max_pages_per_rpc $mp != $pages" &&
+ return 2
+ done
+
+ $LCTL set_param -n osc.*.rpc_stats=0
+
+ # 10 RPCs should be enough for the test
+ local count=10
+ dd if=/dev/zero of=$DIR/$tfile bs=${mb}M count=$count ||
+ { error "dd write ${mb} MB blocks failed"; return 3; }
+ cancel_lru_locks osc
+ dd of=/dev/null if=$DIR/$tfile bs=${mb}M count=$count ||
+ { error "dd write ${mb} MB blocks failed"; return 4; }
+
+ # calculate number of full-sized read and write RPCs
+ rpcs=($($LCTL get_param -n 'osc.*.rpc_stats' |
+ sed -n '/pages per rpc/,/^$/p' |
+ awk '/'$pages':/ { reads += $2; writes += $5 };' \
+ 'END { print reads,writes }'))
+ [ ${rpcs[0]} -ne $count ] && error "${rpcs[0]} != $count read RPCs" &&
+ return 5
+ [ ${rpcs[1]} -ne $count ] && error "${rpcs[1]} != $count write RPCs" &&
+ return 6
+
+ return 0
+}
+
test_101g() {
local rpcs
local osts=$(get_facets OST)
local list=$(comma_list $(osts_nodes))
local p="$TMP/$TESTSUITE-$TESTNAME.parameters"
+ local brw_size="obdfilter.*.brw_size"
- save_lustre_params $osts "obdfilter.*.brw_size" > $p
-
- $LFS setstripe -c 1 $DIR/$tfile
+ $LFS setstripe -i 0 -c 1 $DIR/$tfile
+ local orig_mb=$(do_facet ost1 $LCTL get_param -n $brw_size | head -n 1)
if [ $(lustre_version_code ost1) -ge $(version_code 2.8.52) ]; then
- set_osd_param $list '' brw_size 16M
-
- echo "remount client to enable large RPC size"
- remount_client $MOUNT || error "remount_client failed"
-
- for mp in $($LCTL get_param -n osc.*.max_pages_per_rpc); do
- [ "$mp" -eq 4096 ] ||
- error "max_pages_per_rpc not correctly set"
- done
-
- $LCTL set_param -n osc.*.rpc_stats=0
-
- # 10*16 MiB should be enough for the test
- dd if=/dev/zero of=$DIR/$tfile bs=16M count=10
- cancel_lru_locks osc
- dd of=/dev/null if=$DIR/$tfile bs=16M count=10
+ [ $(lustre_version_code ost1) -ge $(version_code 2.9.52) ] &&
+ suffix="M"
+ if [[ $orig_mb < 16 ]]; then
+ save_lustre_params $osts "$brw_size" > $p
+ do_nodes $list $LCTL set_param -n $brw_size=16$suffix ||
+ error "set 16MB RPC size failed"
+
+ echo "remount client to enable new RPC size"
+ remount_client $MOUNT || error "remount_client failed"
+ fi
- # calculate 16 MiB RPCs
- rpcs=$($LCTL get_param 'osc.*.rpc_stats' |
- sed -n '/pages per rpc/,/^$/p' |
- awk 'BEGIN { sum = 0 }; /4096:/ { sum += $2 };
- END { print sum }')
- echo $rpcs RPCs
- [ "$rpcs" -eq 10 ] || error "not all RPCs are 16 MiB BRW rpcs"
+ test_101g_brw_size_test 16 || error "16MB RPC test failed"
+ # should be able to set brw_size=12, but no rpc_stats for that
+ test_101g_brw_size_test 8 || error "8MB RPC test failed"
fi
- echo "set RPC size to 4MB"
-
- $LCTL set_param -n osc.*.max_pages_per_rpc=4M osc.*.rpc_stats=0
- dd if=/dev/zero of=$DIR/$tfile bs=4M count=25
- cancel_lru_locks osc
- dd of=/dev/null if=$DIR/$tfile bs=4M count=25
-
- # calculate 4 MiB RPCs
- rpcs=$($LCTL get_param 'osc.*.rpc_stats' |
- sed -n '/pages per rpc/,/^$/p' |
- awk 'BEGIN { sum = 0 }; /1024:/ { sum += $2 };
- END { print sum }')
- echo $rpcs RPCs
- [ "$rpcs" -eq 25 ] || error "not all RPCs are 4 MiB BRW rpcs"
+ test_101g_brw_size_test 4 || error "4MB RPC test failed"
- restore_lustre_params < $p
- remount_client $MOUNT || error "remount_client failed"
+ if [[ $orig_mb < 16 ]]; then
+ restore_lustre_params < $p
+ remount_client $MOUNT || error "remount_client restore failed"
+ fi
rm -f $p $DIR/$tfile
}
run_test 131e "test read hitting hole"
check_stats() {
+ local facet=$1
+ local op=$2
+ local want=${3:-0}
local res
- local count
- case $1 in
- $SINGLEMDS) res=`do_facet $SINGLEMDS $LCTL get_param mdt.$FSNAME-MDT0000.md_stats | grep "$2"`
+
+ case $facet in
+ mds*) res=$(do_facet $facet \
+ $LCTL get_param mdt.$FSNAME-MDT0000.md_stats | grep "$op")
;;
- ost) res=`do_facet ost1 $LCTL get_param obdfilter.$FSNAME-OST0000.stats | grep "$2"`
+ ost*) res=$(do_facet $facet \
+ $LCTL get_param obdfilter.$FSNAME-OST0000.stats | grep "$op")
;;
- *) error "Wrong argument $1" ;;
+ *) error "Wrong facet '$facet'" ;;
esac
echo $res
- [ -z "$res" ] && error "The counter for $2 on $1 was not incremented"
+ [ "$res" ] || error "The counter for $op on $facet was not incremented"
# if the argument $3 is zero, it means any stat increment is ok.
- if [[ $3 -gt 0 ]]; then
- count=$(echo $res | awk '{ print $2 }')
- [[ $count -ne $3 ]] &&
- error "The $2 counter on $1 is wrong - expected $3"
+ if [[ $want -gt 0 ]]; then
+ local count=$(echo $res | awk '{ print $2 }')
+ [[ $count -ne $want ]] &&
+ error "The $op counter on $facet is $count, not $want"
fi
}
dd if=/dev/zero of=${testdir}/${tfile} conv=notrunc bs=512k count=1 || error "dd failed"
sync
cancel_lru_locks osc
- check_stats ost "write" 1
+ check_stats ost1 "write" 1
dd if=${testdir}/${tfile} of=/dev/null bs=1k count=1 || error "dd failed"
- check_stats ost "read" 1
+ check_stats ost1 "read" 1
> ${testdir}/${tfile} || error "truncate failed"
- check_stats ost "punch" 1
+ check_stats ost1 "punch" 1
rm -f ${testdir}/${tfile} || error "file remove failed"
wait_delete_completed
- check_stats ost "destroy" 1
+ check_stats ost1 "destroy" 1
rm -rf $DIR/${tdir}
}
break
done
- cleanup_pools
+ destroy_test_pools
return $rc
}
run_test 200 "OST pools"
}
test_205() { # Job stats
+ [[ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.7.1) ]] ||
+ { skip "Need MDS version with at least 2.7.1"; return 0; }
+
[ $PARALLEL == "yes" ] && skip "skip parallel run" && return
remote_mgs_nodsh && skip "remote MGS with nodsh" && return
remote_mds_nodsh && skip "remote MDS with nodsh" && return
do_facet ost$((OSTIDX + 1)) lctl set_param fail_val=-1
#define OBD_FAIL_OST_ENOINO 0x229
do_facet ost$((OSTIDX + 1)) lctl set_param fail_loc=0x229
- do_facet mgs $LCTL pool_new $FSNAME.$TESTNAME || return 1
+ create_pool $FSNAME.$TESTNAME || return 1
do_facet mgs $LCTL pool_add $FSNAME.$TESTNAME $OST || return 2
$SETSTRIPE $DIR/$tdir -i $OSTIDX -c 1 -p $FSNAME.$TESTNAME
osp.$mdtosc_proc1.reserved_mb_low)
echo "prev high watermark $last_wm_h, prev low watermark $last_wm_l"
- do_facet mgs $LCTL pool_new $FSNAME.$TESTNAME ||
- error "Pool creation failed"
+ create_pool $FSNAME.$TESTNAME || error "Pool creation failed"
do_facet mgs $LCTL pool_add $FSNAME.$TESTNAME $ost_name ||
error "Adding $ost_name to pool failed"
}
test_255a() {
+ [ $(lustre_version_code ost1) -lt $(version_code 2.8.54) ] &&
+ skip "lustre < 2.8.54 does not support ladvise " && return
+
lfs setstripe -c -1 -i 0 $DIR/$tfile || error "$tfile failed"
ladvise_no_type willread $DIR/$tfile &&
ladvise_no_ioctl $DIR/$tfile &&
skip "ladvise ioctl is not supported" && return
- [ $(lustre_version_code ost1) -lt $(version_code 2.8.54) ] &&
- skip "lustre < 2.8.54 does not support ladvise " && return
-
local size_mb=100
local size=$((size_mb * 1048576))
dd if=/dev/zero of=$DIR/$tfile bs=1048576 count=$size_mb ||
}
run_test 313 "io should fail after last_rcvd update fail"
-test_399() { # LU-7655 for OST fake write
+test_fake_rw() {
+ local read_write=$1
+ if [ "$read_write" = "write" ]; then
+ local dd_cmd="dd if=/dev/zero of=$DIR/$tfile"
+ elif [ "$read_write" = "read" ]; then
+ local dd_cmd="dd of=/dev/null if=$DIR/$tfile"
+ else
+ error "argument error"
+ fi
+
# turn off debug for performance testing
local saved_debug=$($LCTL get_param -n debug)
$LCTL set_param debug=0
local blocks=$((ost1_avail_size/2/1024)) # half avail space by megabytes
[ $blocks -gt 1000 ] && blocks=1000 # 1G in maximum
+ if [ "$read_write" = "read" ]; then
+ truncate -s $(expr 1048576 \* $blocks) $DIR/$tfile
+ fi
+
local start_time=$(date +%s.%N)
- dd if=/dev/zero of=$DIR/$tfile bs=1M count=$blocks oflag=sync ||
- error "real dd writing error"
+ $dd_cmd bs=1M count=$blocks oflag=sync ||
+ error "real dd $read_write error"
local duration=$(bc <<< "$(date +%s.%N) - $start_time")
- rm -f $DIR/$tfile
- # define OBD_FAIL_OST_FAKE_WRITE 0x238
+ if [ "$read_write" = "write" ]; then
+ rm -f $DIR/$tfile
+ fi
+
+ # define OBD_FAIL_OST_FAKE_RW 0x238
do_facet ost1 $LCTL set_param fail_loc=0x238
local start_time=$(date +%s.%N)
- dd if=/dev/zero of=$DIR/$tfile bs=1M count=$blocks oflag=sync ||
- error "fake dd writing error"
+ $dd_cmd bs=1M count=$blocks oflag=sync ||
+ error "fake dd $read_write error"
local duration_fake=$(bc <<< "$(date +%s.%N) - $start_time")
- # verify file size
- cancel_lru_locks osc
- $CHECKSTAT -t file -s $((blocks * 1024 * 1024)) $DIR/$tfile ||
- error "$tfile size not $blocks MB"
-
+ if [ "$read_write" = "write" ]; then
+ # verify file size
+ cancel_lru_locks osc
+ $CHECKSTAT -t file -s $((blocks * 1024 * 1024)) $DIR/$tfile ||
+ error "$tfile size not $blocks MB"
+ fi
do_facet ost1 $LCTL set_param fail_loc=0
- echo "fake write $duration_fake vs. normal write $duration in seconds"
+ echo "fake $read_write $duration_fake vs. normal $read_write" \
+ "$duration in seconds"
[ $(bc <<< "$duration_fake < $duration") -eq 1 ] ||
error_not_in_vm "fake write is slower"
$LCTL set_param -n debug="$saved_debug"
rm -f $DIR/$tfile
}
-run_test 399 "fake write should not be slower than normal write"
+test_399a() { # LU-7655 for OST fake write
+ test_fake_rw write
+}
+run_test 399a "fake write should not be slower than normal write"
+
+
+test_399b() { # LU-8726 for OST fake read
+ if [ "$(facet_fstype ost1)" != "ldiskfs" ]; then
+ skip "only for ldiskfs" && return 0
+ fi
+ test_fake_rw read
+}
+run_test 399b "fake read should not be slower than normal read"
test_400a() { # LU-1606, was conf-sanity test_74
local extra_flags=''