X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Ftests%2Fsanity.sh;h=39ab34d34731453fe63286aa2839c80f97bb0d8d;hp=5c8821444b441f4e0f0334fae7a12cdedd88638b;hb=4894683342d77964daeded9fbc608fc46aa479ee;hpb=f7f31f8f969f410cca0b4b8b02f81391148e01f2 diff --git a/lustre/tests/sanity.sh b/lustre/tests/sanity.sh index 5c88214..39ab34d 100755 --- a/lustre/tests/sanity.sh +++ b/lustre/tests/sanity.sh @@ -8829,6 +8829,104 @@ test_64f() { } run_test 64f "check grant consumption (with grant allocation)" +test_64g() { + #[ $MDS1_VERSION -lt $(version_code 2.14.54) ] && + # skip "Need MDS version at least 2.14.54" + + local mdts=$(comma_list $(mdts_nodes)) + + local old=$($LCTL get_param mdc.$FSNAME-*.grant_shrink_interval | + tr '\n' ' ') + stack_trap "$LCTL set_param $old" + + # generate dirty pages and increase dirty granted on MDT + stack_trap "rm -f $DIR/$tfile-*" + for (( i = 0; i < 10; i++)); do + $LFS setstripe -E 1M -L mdt $DIR/$tfile-$i || + error "can't set stripe" + dd if=/dev/zero of=$DIR/$tfile-$i bs=128k count=1 || + error "can't dd" + $LFS getstripe $DIR/$tfile-$i | grep -q pattern.*mdt || { + $LFS getstripe $DIR/$tfile-$i + error "not DoM file" + } + done + + # flush dirty pages + sync + + # wait until grant shrink reset grant dirty on MDTs + for ((i = 0; i < 120; i++)); do + grant_dirty=$(do_nodes $mdts $LCTL get_param -n mdt.*.tot_dirty | + awk '{sum=sum+$1} END {print sum}') + vm_dirty=$(awk '/Dirty:/{print $2}' /proc/meminfo) + echo "$grant_dirty grants, $vm_dirty pages" + (( grant_dirty + vm_dirty == 0 )) && break + (( i == 3 )) && sync && + $LCTL set_param mdc.$FSNAME-*.grant_shrink_interval=5 + sleep 1 + done + + grant_dirty=$(do_nodes $mdts $LCTL get_param -n mdt.*.tot_dirty | + awk '{sum=sum+$1} END {print sum}') + (( grant_dirty == 0 )) || error "$grant_dirty on MDT" +} +run_test 64g "grant shrink on MDT" + +test_64h() { + local instance=$($LFS getname -i $DIR) + local osc_tgt="$FSNAME-OST0000-osc-$instance" + local num_exps=$(do_facet ost1 \ + $LCTL get_param -n obdfilter.*OST0000*.num_exports) + local max_brw_size=$(import_param $osc_tgt max_brw_size) + local avail=$($LCTL get_param -n osc.*OST0000-osc-$instance.kbytesavail) + local p="$TMP/$TESTSUITE-$TESTNAME.parameters" + + # 10MiB is for file to be written, max_brw_size * 16 * + # num_exps is space reserve so that tgt_grant_shrink() decided + # to not shrink + local expect=$((max_brw_size * 16 * num_exps + 10 * 1048576)) + (( avail * 1024 < expect )) && + skip "need $expect bytes on ost1, have $(( avail * 1024 )) only" + + save_lustre_params client "osc.*OST0000*.grant_shrink" > $p + save_lustre_params client "osc.*OST0000*.grant_shrink_interval" >> $p + stack_trap "restore_lustre_params < $p; rm -f $save" EXIT + $LCTL set_param osc.*OST0000*.grant_shrink=1 + $LCTL set_param osc.*OST0000*.grant_shrink_interval=10 + + $LFS setstripe -c 1 -i 0 $DIR/$tfile + dd if=/dev/zero of=$DIR/$tfile bs=1M count=10 oflag=sync + + # drop cache so that coming read would do rpc + cancel_lru_locks osc + + # shrink interval is set to 10, pause for 7 seconds so that + # grant thread did not wake up yet but coming read entered + # shrink mode for rpc (osc_should_shrink_grant()) + sleep 7 + + declare -a cur_grant_bytes + declare -a tot_granted + cur_grant_bytes[0]=$($LCTL get_param -n osc.*OST0000*.cur_grant_bytes) + tot_granted[0]=$(do_facet ost1 \ + $LCTL get_param -n obdfilter.*OST0000*.tot_granted) + + dd if=$DIR/$tfile bs=4K count=1 of=/dev/null + + cur_grant_bytes[1]=$($LCTL get_param -n osc.*OST0000*.cur_grant_bytes) + tot_granted[1]=$(do_facet ost1 \ + $LCTL get_param -n obdfilter.*OST0000*.tot_granted) + + # grant change should be equal on both sides + (( cur_grant_bytes[0] - cur_grant_bytes[1] == + tot_granted[0] - tot_granted[1])) || + error "grant change mismatch, " \ + "server: ${tot_granted[0]} to ${tot_granted[1]}, " \ + "client: ${cur_grant_bytes[0]} to ${cur_grant_bytes[1]}" +} +run_test 64h "grant shrink on read" + # bug 1414 - set/get directories' stripe info test_65a() { [ $PARALLEL == "yes" ] && skip "skip parallel run" @@ -19600,7 +19698,7 @@ test_230d() { error "migrate remote dir error" echo "Finish migration, then checking.." - for file in $(find $migrate_dir); do + for file in $(find $migrate_dir -maxdepth 1); do mdt_index=$($LFS getstripe -m $file) if [ $mdt_index -lt $new_index ] || [ $mdt_index -gt $((new_index + new_count - 1)) ]; then @@ -20157,6 +20255,48 @@ test_230t() } run_test 230t "migrate directory with project ID set" +test_230u() +{ + (( MDSCOUNT > 3 )) || skip_env "needs >= 4 MDTs" + (( MDS1_VERSION >= $(version_code 2.14.53) )) || + skip "Need MDS version at least 2.14.53" + + local count + + mkdir_on_mdt0 $DIR/$tdir || error "mkdir $tdir failed" + mkdir $DIR/$tdir/sub{0..99} || error "mkdir sub failed" + $LFS migrate -m -1 $DIR/$tdir/sub{0..99} || error "migrate sub failed" + for i in $(seq 0 $((MDSCOUNT - 1))); do + count=$($LFS getstripe -m $DIR/$tdir/sub* | grep -c ^$i) + echo "$count dirs migrated to MDT$i" + done + count=$($LFS getstripe -m $DIR/$tdir/sub* | sort -u | wc -l) + (( count >= MDSCOUNT - 1 )) || error "dirs migrated to $count MDTs" +} +run_test 230u "migrate directory by QOS" + +test_230v() +{ + (( MDSCOUNT > 3 )) || skip_env "needs >= 4 MDTs" + (( MDS1_VERSION >= $(version_code 2.14.53) )) || + skip "Need MDS version at least 2.14.53" + + local count + + mkdir $DIR/$tdir || error "mkdir $tdir failed" + mkdir $DIR/$tdir/sub{0..99} || error "mkdir sub failed" + $LFS migrate -m 0,2,1 $DIR/$tdir || error "migrate $tdir failed" + for i in $(seq 0 $((MDSCOUNT - 1))); do + count=$($LFS getstripe -m $DIR/$tdir/sub* | grep -c ^$i) + echo "$count subdirs migrated to MDT$i" + (( i == 3 )) && (( count > 0 )) && + error "subdir shouldn't be migrated to MDT3" + done + count=$($LFS getstripe -m $DIR/$tdir/sub* | sort -u | wc -l) + (( count == 3 )) || error "dirs migrated to $count MDTs" +} +run_test 230v "subdir migrated to the MDT where its parent is located" + test_231a() { # For simplicity this test assumes that max_pages_per_rpc @@ -22011,6 +22151,16 @@ test_270h() { } run_test 270h "DoM: DoM stripe removal when disabled on server" +test_270i() { + (( $MDS1_VERSION >= $(version_code 2.14.54) )) || + skip "Need MDS version at least 2.14.54" + + mkdir $DIR/$tdir + $LFS setstripe -L mdt -S 128k -c -1 $DIR/$tdir && + error "setstripe should fail" || true +} +run_test 270i "DoM: setting invalid DoM striping should fail" + test_271a() { [ $MDS1_VERSION -lt $(version_code 2.10.55) ] && skip "Need MDS version at least 2.10.55" @@ -24839,6 +24989,8 @@ run_test 412 "mkdir on specific MDTs" generate_uneven_mdts() { local threshold=$1 + local lmv_qos_maxage + local lod_qos_maxage local ffree local bavail local max @@ -24848,6 +25000,17 @@ generate_uneven_mdts() { local tmp local i + lmv_qos_maxage=$($LCTL get_param -n lmv.*.qos_maxage) + $LCTL set_param lmv.*.qos_maxage=1 + stack_trap "$LCTL set_param \ + lmv.*.qos_maxage=$lmv_qos_maxage > /dev/null" RETURN + lod_qos_maxage=$(do_facet mds1 $LCTL get_param -n \ + lod.$FSNAME-MDT0000-mdtlov.qos_maxage | awk '{ print $1 }') + do_nodes $(comma_list $(mdts_nodes)) $LCTL set_param \ + lod.*.mdt_qos_maxage=1 + stack_trap "do_nodes $(comma_list $(mdts_nodes)) $LCTL set_param \ + lod.*.mdt_qos_maxage=$lod_qos_maxage > /dev/null" RETURN + echo echo "Check for uneven MDTs: " @@ -24871,9 +25034,15 @@ generate_uneven_mdts() { fi done + (( ${ffree[min_index]} > 0 )) || + skip "no free files in MDT$min_index" + (( ${ffree[min_index]} < 10000000 )) || + skip "too many free files in MDT$min_index" + # Check if we need to generate uneven MDTs local diff=$(((max - min) * 100 / min)) local testdir=$DIR/$tdir-fillmdt + local start mkdir -p $testdir @@ -24881,17 +25050,21 @@ generate_uneven_mdts() { while (( diff < threshold )); do # generate uneven MDTs, create till $threshold% diff echo -n "weight diff=$diff% must be > $threshold% ..." - echo "Fill MDT$min_index with 100 files: loop $i" + echo "Fill MDT$min_index with 1000 files: loop $i" testdir=$DIR/$tdir-fillmdt/$i [ -d $testdir ] || $LFS mkdir -i $min_index $testdir || error "mkdir $testdir failed" $LFS setstripe -E 1M -L mdt $testdir || error "setstripe $testdir failed" - for F in f.{0..99}; do - dd if=/dev/zero of=$testdir/$F bs=1M count=1 > \ + start=$SECONDS + for F in f.{0..999}; do + dd if=/dev/zero of=$testdir/$F bs=64K count=1 > \ /dev/null 2>&1 || error "dd $F failed" done + # wait for QOS to update + (( SECONDS < start + 1 )) && sleep $((start + 1 - SECONDS)) + ffree=($(lctl get_param -n mdc.*[mM][dD][cC]-*.filesfree)) bavail=($(lctl get_param -n mdc.*[mM][dD][cC]-*.kbytesavail)) max=$(((${ffree[max_index]} >> 8) * \ @@ -24958,7 +25131,6 @@ test_qos_mkdir() { local stripe_index=$($LFS getstripe -m $testdir) local test_mkdir_rr=true - echo "dirstripe: '$($LFS getdirstripe $testdir)'" getfattr -d -m dmv -e hex $testdir | grep dmv if (( $? == 0 && $MDS1_VERSION >= $(version_code 2.14.51) )); then echo "defstripe: '$($LFS getdirstripe -D $testdir)'" @@ -25035,7 +25207,7 @@ test_qos_mkdir() { (( ${ffree[min_index]} > 0 )) || skip "no free files in MDT$min_index" - (( ${ffree[min_index]} < 100000000 )) || + (( ${ffree[min_index]} < 10000000 )) || skip "too many free files in MDT$min_index" echo "MDT filesfree available: ${ffree[@]}" @@ -25063,32 +25235,33 @@ test_qos_mkdir() { error "$mkdir_cmd subdir$i failed" done + max=0 for (( i = 0; i < $MDSCOUNT; i++ )); do count=$($LFS getdirstripe -i $testdir/* | grep -c "^$i$") + (( count > max )) && max=$count echo "$count directories created on MDT$i" - - if [ $stripe_count -gt 1 ]; then - count=$($LFS getdirstripe $testdir/* | - grep -c -P "^\s+$i\t") - echo "$count stripes created on MDT$i" - fi done - max=$($LFS getdirstripe -i $testdir/* | grep -c "^$max_index$") min=$($LFS getdirstripe -i $testdir/* | grep -c "^$min_index$") # D-value should > 10% of averge - (( max - min >= num / 10 )) || + (( max - min > num / 10 )) || error "subdirs shouldn't be evenly distributed: $max - $min < $((num / 10))" - # 5% for stripes + # ditto for stripes if (( stripe_count > 1 )); then - max=$($LFS getdirstripe $testdir/* | - grep -c -P "^\s+$max_index\t") + max=0 + for (( i = 0; i < $MDSCOUNT; i++ )); do + count=$($LFS getdirstripe $testdir/* | + grep -c -P "^\s+$i\t") + (( count > max )) && max=$count + echo "$count stripes created on MDT$i" + done + min=$($LFS getdirstripe $testdir/* | grep -c -P "^\s+$min_index\t") - (( max - min >= num * stripe_count / 20 )) || - error "stripes shouldn't be evenly distributed: $max - $min < $((num / 20)) * $stripe_count" + (( max - min > num * stripe_count / 10 )) || + error "stripes shouldn't be evenly distributed: $max - $min < $((num / 10)) * $stripe_count" fi } @@ -25232,7 +25405,7 @@ test_413z() { local pid for subdir in $(\ls -1 -d $DIR/d413*-fillmdt/*); do - unlinkmany $subdir/f. 100 & + unlinkmany $subdir/f. 1000 & pids="$pids $!" done @@ -25357,7 +25530,8 @@ check_lfs_df() { [ "$1" == "blocks" ] && inodes= || inodes="-i" for count in {1..100}; do - do_rpc_nodes "$CLIENTS" cancel_lru_locks + do_nodes "$CLIENTS" \ + $LCTL set_param ldlm.namespaces.*.lru_size=clear sync; sleep 0.2 # read the lines of interest @@ -25370,7 +25544,9 @@ check_lfs_df() { # ":/" for df, "filesystem_summary:" for lfs df # compare the two outputs passed=true - for i in {1..5}; do + # skip "available" on MDT until LU-13997 is fixed. + #for i in {1..5}; do + for i in 1 2 4 5; do [ "${df_out[i]}" != "${lfs_df_out[i]}" ] && passed=false done $passed && break @@ -27395,6 +27571,36 @@ test_822() { } run_test 822 "test precreate failure" +test_823() { + local p="$TMP/$TESTSUITE-$TESTNAME.parameters" + local OST_MAX_PRECREATE=20000 + + save_lustre_params mds1 \ + "osp.$FSNAME-OST*-osc-MDT0000.max_create_count" > $p + do_facet $SINGLEMDS "$LCTL set_param -n \ + osp.$FSNAME-OST*MDT0000.max_create_count=0" + do_facet $SINGLEMDS "$LCTL set_param -n \ + osp.$FSNAME-OST0000*MDT0000.max_create_count=$OST_MAX_PRECREATE" + + stack_trap "restore_lustre_params < $p; rm $p" + + do_facet $SINGLEMDS "$LCTL set_param -n \ + osp.$FSNAME-OST*-osc-MDT*.create_count=100200" + + local count=$(do_facet $SINGLEMDS "$LCTL get_param -n \ + osp.$FSNAME-OST0000*MDT0000.create_count") + local max=$(do_facet $SINGLEMDS "$LCTL get_param -n \ + osp.$FSNAME-OST0000*MDT0000.max_create_count") + local expect_count=$(((($max/2)/256) * 256)) + + log "setting create_count to 100200:" + log " -result- count: $count with max: $max, expecting: $expect_count" + + [[ $count -eq expect_count ]] || + error "Create count not set to max precreate." +} +run_test 823 "Setting create_count > OST_MAX_PRECREATE is lowered to maximum" + # # tests that do cleanup/setup should be run at the end #