#!/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
# [ 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
#####################################################################
# 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
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
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 () {
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} }")
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
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
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
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
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
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"
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