Whamcloud - gitweb
LU-3963 ptlrpc: convert to linux list api
[fs/lustre-release.git] / lustre-iokit / mds-survey / mds-survey
index e4d20c3..dd3eaa0 100755 (executable)
@@ -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 $(dirname $0)/libecho
+source $(dirname $0)/iokit-libecho
 
 # Customisation variables
 #####################################################################
@@ -54,19 +55,21 @@ layer=${layer:-"mdd"}
 # leave the rest of this alone unless you know what you're doing...
 export LC_ALL=POSIX
 basedir="tests"
+mdtbasedir="MDT%04x-"
 
 create_directories () {
     local host=$1
     local devno=$2
     local ndir=$3
     local rfile=$4
+    local mdtidx=$5
     local idx
 
     for ((idx = 0; idx < $ndir; idx++)); do
         if (( idx == 0 )); then
-            dirname=${basedir}
+            dirname="$(printf "${mdtbasedir}" $mdtidx)${basedir}"
         else
-            dirname=${basedir}${idx}
+            dirname="$(printf "${mdtbasedir}" $mdtidx)${basedir}${idx}"
         fi
         remote_shell $host $lctl --device $devno test_mkdir /$dirname > $rfile 2>&1
         while read line; do
@@ -87,13 +90,14 @@ destroy_directories () {
     local devno=$2
     local ndir=$3
     local rfile=$4
+    local mdtidx=$5
     local idx
 
     for ((idx = 0; idx < $ndir; idx++)); do
         if (( idx == 0 )); then
-            dirname=${basedir}
+            dirname="$(printf "${mdtbasedir}" $mdtidx)${basedir}"
         else
-            dirname=${basedir}${idx}
+            dirname="$(printf "${mdtbasedir}" $mdtidx)${basedir}${idx}"
         fi
         remote_shell $host $lctl --device $devno test_rmdir /$dirname > $rfile 2>&1
     done
@@ -125,12 +129,13 @@ get_global_stats () {
          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;                             \
+           ave += $2;                                          \
+           if ($3 < min) min = $3;                             \
+           if ($4 > max) max = $4;                             \
          }                                                     \
     }                                                          \
     END { if (n == 0) err = 0;                                 \
-          printf "%d %f %f %f\n", err, ave, min, max}'
+          printf "%d %f %f %f\n", err, ave/n, min, max}'
 }
 
 print_summary () {
@@ -163,6 +168,7 @@ fi
 
 declare -a client_names
 declare -a host_names
+declare -a client_indexes
 if [ -z "$targets" ]; then
     targets=$($lctl device_list | awk "{if (\$2 == \"UP\" && \
             \$3 == \"mdt\") {print \$4} }")
@@ -178,6 +184,8 @@ for trgt in $targets; do
     str=(`split_hostname $trgt`)
     host_names[$ndevs]=${str[0]}
     client_names[$ndevs]=${str[1]}
+    client_indexes[$ndevs]=0x$(echo ${str[1]} |
+            sed 's/.*MDT\([0-9a-f][0-9a-f][0-9a-f][0-9a-f]\).*/\1/')
     ndevs=$((ndevs+1))
 done
 
@@ -186,7 +194,7 @@ 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\") { print \$4 } }")
+            (\$3 == \"osc\" || \$3 == \"osp\")) { print \$4 } }")
         if [ -z "$obd" ]; then
             echo "Need obdfilter to test stripe_count"
             exit 1
@@ -247,9 +255,10 @@ for ((idx = 0; idx < $ndevs; idx++)); do
     host=${host_names[$idx]}
     devno=${devnos[$idx]}
     client_name="${host}:${client_names[$idx]}"
+    mdtidx=${client_indexes[$idx]}
     echo "=============> Create $dir_count directories on $client_name" >> $workf
-    destroy_directories $host $devno $dir_count $tmpf
-    ret=`create_directories $host $devno $dir_count $tmpf`
+    destroy_directories $host $devno $dir_count $tmpf $mdtidx
+    ret=`create_directories $host $devno $dir_count $tmpf $mdtidx`
     cat $tmpf >> $workf
     rm $tmpf
     if [ $ret = "ERROR" ]; then
@@ -266,6 +275,7 @@ for ((thr = $thrlo; thr <= $thrhi; thr*=2)); do
     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,12 +295,13 @@ for ((thr = $thrlo; thr <= $thrhi; thr*=2)); do
         for ((idx = 0; idx < $ndevs; idx++)); do
             host=${host_names[$idx]}
             devno=${devnos[$idx]}
+            dirname="$(printf "${mdtbasedir}" ${client_indexes[$idx]})$basedir"
             tmpfi="${tmpf}_$idx"
-            [ $test = "create" ] && test="create -c $stripe_count"
+            [ "$test" = "create" ] && test="create -c $stripe_count"
             echo >> ${cmdsf}_${host}                                                     \
                 "$lctl > $tmpfi 2>&1                                                     \
-                 --threads $thr -$snap $devno test_$test -d /$basedir -D $dir_count      \
-                 -b $start_number -n $file_count"
+                 --threads $thr -$snap $devno test_$test -d /$dirname -D $dir_count      \
+                 -b $start_number -n $file_count_per_thread"
         done
         pidcount=0
         for host in ${unique_hosts[@]}; do
@@ -336,7 +347,7 @@ for ((thr = $thrlo; thr <= $thrhi; thr*=2)); do
             str=`printf "%17s " ERROR`
             status=1
         else
-            str=`awk "BEGIN {printf \"%7.2f [%7.2f,%7.2f] \", \
+            str=`awk "BEGIN {printf \"%7.2f [ %7.2f, %7.2f] \", \
             ${stats[1]}, ${stats[2]}, ${stats[3]}; exit}"`
         fi
         print_summary -n "$str"
@@ -348,9 +359,10 @@ tmpf="${workf}_tmp"
 for ((idx = 0; idx < $ndevs; idx++)); do
     host=${host_names[$idx]}
     devno=${devnos[$idx]}
+    mdtidx=${client_indexes[$idx]}
     client_name="${host}:${client_names[$idx]}"
     echo "=============> Destroy $dir_count directories on $client_name" >> $workf
-    destroy_directories $host $devno $dir_count $tmpf
+    destroy_directories $host $devno $dir_count $tmpf $mdtidx
 done
 
 cleanup $status