X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre-iokit%2Fmds-survey%2Fmds-survey;h=ffa062ea51683ae6817dfb678c3fb26914618188;hp=5888491f0f76e6d3ddfb6f884df5e44b77ebe5b3;hb=43f5fe89a53ffe8da2e1ff93f63d55851490d930;hpb=24f601a0d459d48449d2e16b00f6ff3a889ed3b3 diff --git a/lustre-iokit/mds-survey/mds-survey b/lustre-iokit/mds-survey/mds-survey index 5888491..ffa062e 100755 --- a/lustre-iokit/mds-survey/mds-survey +++ b/lustre-iokit/mds-survey/mds-survey @@ -1,5 +1,6 @@ #!/bin/bash -# vim:expandtab:shiftwidth=4:softtabstop=4:tabstop=4: +# -*- mode: Bash; tab-width: 4; indent-tabs-mode: t; -*- +# vim:shiftwidth=4:softtabstop=4:tabstop=4: ###################################################################### # customize per survey @@ -17,7 +18,7 @@ # [ NOTE: It is advised to have automated login (passwordless entry) on server ] # include library -source libecho +source $(dirname $0)/libecho # Customisation variables ##################################################################### @@ -54,7 +55,6 @@ layer=${layer:-"mdd"} # leave the rest of this alone unless you know what you're doing... export LC_ALL=POSIX basedir="tests" -case=disk create_directories () { local host=$1 @@ -102,34 +102,36 @@ destroy_directories () { get_stats () { local rfile=$1 - gawk < $rfile \ - '/start at/ { n=0; next } \ - /error at/ {n = -1; exit} \ - /end/ {exit} \ - /^[0-9]+\/[0-9]+ Total: [0-9]+\.[0-9]+\/second$/ \ - { n++; v=strtonum($3); \ - if (n == 1 || v < min) min = v; \ - if (n == 1 || v > max) max = v; \ - next; \ - } \ - { if (n != 0) {n = -1; exit } } \ - END {printf "%d %f %f\n", n, min, max}' + gawk < $rfile \ + '/starting/ { n=0; next } \ + /error/ {n = -1; exit} \ + /^Total: total [0-9]+ threads [0-9]+ sec [0-9\.]+ [0-9]+\.[0-9]+\/second$/ \ + { ave = strtonum($8); n++; next} \ + /^[0-9]+\/[0-9]+ Total: [0-9]+\.[0-9]+\/second$/ \ + { n++; v = strtonum($3); \ + if (n == 1 || v < min) min = v; \ + if (n == 1 || v > max) max = v; \ + next; \ + } \ + { if (n != 0) {n = -1; exit } } \ + END { if (n == 1) { min = ave; max = ave; } \ + printf "%d %f %f %f\n", n, ave, min, max}' } get_global_stats () { local rfile=$1 - awk < $rfile \ - 'BEGIN {n = 0;} \ - { n++; \ - if (n == 1) { err = $1; min = $2; max = $3}\ - else \ - { if ($1 < err) err = $1; \ - if ($2 < min) min = $2; \ - if ($3 > max) max = $3; \ - } \ - } \ - END { if (n == 0) err = 0; \ - printf "%d %f %f\n", err, min, max}' + awk < $rfile \ + 'BEGIN {n = 0;} \ + { n++; \ + if (n == 1) { err = $1; ave = $2; min = $3; max = $4} \ + else \ + { if ($1 < err) err = $1; \ + if ($2 < min) min = $2; \ + if ($3 > max) max = $3; \ + } \ + } \ + END { if (n == 0) err = 0; \ + printf "%d %f %f %f\n", err, ave, min, max}' } print_summary () { @@ -171,16 +173,6 @@ if [ -z "$targets" ]; then fi fi -# check for ost -if (( $stripe_count > 0 )); then - obd=$($lctl device_list | awk "{if (\$2 == \"UP\" && \ - \$3 == \"obdfilter\") {print \$4} }") - if [ -z "$obd" ]; then - echo "Need obdfilter to test stripe_count" - exit 1 - fi -fi - # split out hostnames from mdt names ndevs=0 for trgt in $targets; do @@ -190,6 +182,19 @@ for trgt in $targets; do ndevs=$((ndevs+1)) done +# check for ost +if (( $stripe_count > 0 )); then + for ((i=0; i < $ndevs; i++)); do + host=${host_names[$i]} + obd=$(remote_shell $host $lctl device_list | awk "{if (\$2 == \"UP\" && + (\$3 == \"osc\" || \$3 == \"osp\")) { print \$4 } }") + if [ -z "$obd" ]; then + echo "Need obdfilter to test stripe_count" + exit 1 + fi + done +fi + # check and insert obdecho module if ! lsmod | grep obdecho > /dev/null; then modprobe obdecho @@ -255,12 +260,14 @@ for ((idx = 0; idx < $ndevs; idx++)); do done snap=1 +status=0 for ((thr = $thrlo; thr <= $thrhi; thr*=2)); do thr_per_dir=$((${thr}/${dir_count})) # skip if no enough thread if (( thr_per_dir <= 0 )); then continue fi + file_count_per_thread=$((${file_count}/${thr})) str=`printf 'mdt %1d file %7d dir %4d thr %4d ' \ $ndevs $file_count $dir_count $thr` echo "=======================> $str" >> $workf @@ -285,7 +292,7 @@ for ((thr = $thrlo; thr <= $thrhi; thr*=2)); do echo >> ${cmdsf}_${host} \ "$lctl > $tmpfi 2>&1 \ --threads $thr -$snap $devno test_$test -d /$basedir -D $dir_count \ - -b $start_number -n $file_count" + -b $start_number -n $file_count_per_thread" done pidcount=0 for host in ${unique_hosts[@]}; do @@ -293,8 +300,6 @@ for ((thr = $thrlo; thr <= $thrhi; thr*=2)); do pidarray[$pidcount]=0 pidcount=$((pidcount+1)) done - # timed run of all the per-host script files - t0=`date +%s.%N` pidcount=0 for host in ${unique_hosts[@]}; do remote_shell $host bash < ${cmdsf}_${host} & @@ -307,16 +312,11 @@ for ((thr = $thrlo; thr <= $thrhi; thr*=2)); do pidcount=$((pidcount+1)) done #wait - t1=`date +%s.%N` # clean up per-host script files for host in ${unique_hosts[@]}; do rm ${cmdsf}_${host} done - # compute bandwidth from total data / elapsed time - str=`awk "BEGIN {printf \"%7.2f \", \ - ( $file_count * $thr_per_dir ) / ( $t1 - $t0 )}"` - print_summary -n "$str" # collect/check individual MDT stats echo -n > $tmpf for ((idx = 0; idx < $ndevs; idx++)); do @@ -335,14 +335,11 @@ for ((thr = $thrlo; thr <= $thrhi; thr*=2)); do stats=(`get_global_stats $tmpf`) rm $tmpf if ((stats[0] <= 0)); then - if ((stats[0] < 0)); then - str=`printf "%17s " ERROR` - else - str=`printf "%17s " SHORT` - fi + str=`printf "%17s " ERROR` + status=1 else - str=`awk "BEGIN {printf \"[%7.2f,%7.2f] \", \ - ${stats[1]}, ${stats[2]}; exit}"` + str=`awk "BEGIN {printf \"%7.2f [%7.2f,%7.2f] \", \ + ${stats[1]}, ${stats[2]}, ${stats[3]}; exit}"` fi print_summary -n "$str" done @@ -358,5 +355,5 @@ for ((idx = 0; idx < $ndevs; idx++)); do destroy_directories $host $devno $dir_count $tmpf done -cleanup 0 -exit 0 +cleanup $status +exit $status