From 5d773de6ffb0cbaf0b94f5305a8e4091741aa9c2 Mon Sep 17 00:00:00 2001 From: Andreas Dilger Date: Wed, 8 Feb 2017 15:20:27 -0700 Subject: [PATCH] LU-8139 ofd: allow brw_size with 'M' suffix Allow specifying the 'M' suffix for the obdfilter.*.brw_size tunable to maintain compatibility with original version of this tunable. Fix sanity.sh test_101g() to only specify the 'M' suffix if this is allowed by the server version, otherwise specify only the number. Check both read and write RPC counts in the test, and also 8MB RPCs. Clean up test_101g() to remove duplicate code, and only change the brw_size parameter and remount the clients if the current brw_size is not large enough. Calculate the number of pages correctly for systems with different PAGE_SIZE. Test-Parameters: trivial envdefinitions=ONLY=101 testlist=sanity,sanity Test-Parameters: envdefinitions=ONLY=101 testlist=sanity,sanity,sanity Signed-off-by: Andreas Dilger Change-Id: If7b268e3ec1160b41a676590a07511a2953ebbe5 Reviewed-on: https://review.whamcloud.com/25335 Reviewed-by: Gu Zheng Tested-by: Jenkins Tested-by: Maloo Reviewed-by: Bob Glossman Reviewed-by: Oleg Drokin --- lustre/ofd/lproc_ofd.c | 8 ++-- lustre/tests/sanity.sh | 101 ++++++++++++++++++++++++++++--------------------- 2 files changed, 60 insertions(+), 49 deletions(-) diff --git a/lustre/ofd/lproc_ofd.c b/lustre/ofd/lproc_ofd.c index 86de1ad..417d9e6 100644 --- a/lustre/ofd/lproc_ofd.c +++ b/lustre/ofd/lproc_ofd.c @@ -525,16 +525,14 @@ ofd_brw_size_seq_write(struct file *file, const char __user *buffer, __s64 val; int rc; - rc = lprocfs_str_to_s64(buffer, count, &val); + rc = lprocfs_str_with_units_to_s64(buffer, count, &val, 'M'); if (rc) return rc; - if (val < 0) + if (val <= 0) return -EINVAL; - val = val * ONE_MB_BRW_SIZE; - if (val <= 0 || val > DT_MAX_BRW_SIZE || - val < (1 << ofd->ofd_blockbits)) + if (val > DT_MAX_BRW_SIZE || val < (1 << ofd->ofd_blockbits)) return -ERANGE; spin_lock(&ofd->ofd_flags_lock); diff --git a/lustre/tests/sanity.sh b/lustre/tests/sanity.sh index 933c416..eb9f862 100755 --- a/lustre/tests/sanity.sh +++ b/lustre/tests/sanity.sh @@ -13,8 +13,8 @@ ALWAYS_EXCEPT=" 42a 42b 42c 42d 45 68b $SANITY_EXCEPT" # 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 { @@ -6685,60 +6685,73 @@ test_101f() { } 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" + test_101g_brw_size_test 4 || error "4MB RPC test failed" - $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" - - 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 } -- 1.8.3.1