#!/bin/bash
-set -e
######################################################################
# customize per survey
# one can specify only case=disk or case=network or case=netdisk through
# command line.
-# Perquisite: For "disk" case and "netdisk" case you need to have lustre setup
+# Prerequisite: For "disk" case and "netdisk" case you need to have lustre setup
# with one or more ost's. For "network" case you need to have all
# modules (those llmount.sh loades) loaded in kernel. And the
# 'lctl dl' output must be blank.
echo $minusn "$*"
}
+# Return a numeric version code based on a version string. The version
+# code is useful for comparison two version strings to see which is newer.
version_code() {
# split arguments like "2.3.61" into "2", "3", "61"
eval set -- $(tr "[:punct:]" " " <<< $*)
echo -n "$((($1 << 16) | ($2 << 8) | $3))"
}
+# inspired from the lustre_build_version routine in test-framework.sh
get_lustre_version() {
local host=${1:-${unique_hosts[0]}}
- remote_shell $host $lctl get_param -n version |
- awk '/^lustre:/ {print $2}'
+ local ver
+
+ ver=$(remote_shell $host "$lctl get_param -n version 2>/dev/null ||
+ $lctl lustre_build_version 2>/dev/null ||
+ $lctl --version 2>/dev/null | cut -d' ' -f2")
+ local lver=$(egrep -i "lustre: |version: " <<<$ver | head -n 1)
+ [ -n "$lver" ] && ver="$lver"
+
+ sed -e 's/.*: //' -e 's/^v//' -e 's/-.*//' -e 's/_/./g' <<<$ver |
+ cut -d. -f1-4
}
# Check whether the record size (KBytes) exceeds the maximum bulk I/O RPC size
restart_nobj=1
# machine's page size (KB)
-PAGE_SIZE=${PAGE_SIZE:-$(($(getconf PAGE_SIZE) / 1024))}
-PAGE_SIZE=${PAGE_SIZE:-4}
+PAGE_SIZE_KB=${PAGE_SIZE_KB:-$(( ${PAGE_SIZE:-$(getconf PAGE_SIZE)} / 1024))}
+PAGE_SIZE_KB=${PAGE_SIZE_KB:-4}
-# max buffer_mem (total_threads * buffer size)
-# (to avoid lctl ENOMEM problems)
-max_buffer_mem=$((1024 * 1024))
snap=1
clean_srv_OSS=0
# Customisation variables ends here.
exit 1
fi
# Now start client setup
- osc_names_str=$($lctl dl| grep osc | grep -v mdt | grep UP)
+ osc_names_str=$($lctl dl| grep osc | grep -v mdt | grep UP || true)
if [ -n "$osc_names_str" ]; then
echo "The existing setup must be cleaned";
exit 0;
host=${host_names[$i]}
devno=($(get_ec_devno $host "${client_names[$i]}" "${ost_names[$i]}"))
if ((${#devno[@]} != 3)); then
- exit 1
+ cleanup 2
fi
devnos[$i]=${devno[0]}
client_names[$i]=${devno[1]}
echo "no devices or hosts specified"
cleanup 0 $clean_srv_OSS $cleanup_oscs
fi
-# Buffers will be spread out among all hosts, so allow for that
-max_buffer_mem=$(( ${max_buffer_mem} * ${#unique_hosts[@]} ))
+
print_summary "$(date) Obdfilter-survey for case=$case from $(hostname)"
for ((rsz = $rszlo; rsz <= $rszhi; rsz*=2)); do
for ((nobj = $nobjlo; nobj <= $nobjhi; nobj*=2)); do
# compute parameters
total_thr=$((ndevs * thr))
total_nobj=$((ndevs * nobj))
- pages=$((rsz / PAGE_SIZE))
- actual_rsz=$((pages * PAGE_SIZE))
+ pages=$(( (rsz + PAGE_SIZE_KB - 1) / PAGE_SIZE_KB))
+ actual_rsz=$((pages * PAGE_SIZE_KB))
count=$((size * 1024 / (actual_rsz * thr)))
actual_size=$((actual_rsz * count * thr))
total_size=$((actual_size * ndevs))
$ndevs $total_size $actual_rsz $total_nobj $total_thr)
echo "=======================> $str" >> $workf
print_summary -n "$str"
- if ((total_thr * actual_rsz > max_buffer_mem)); then
- print_summary "Too much buffer space"
- continue
- fi
# create the objects
tmpf="${workf}_tmp"
rm $tmpf
if [ $first_obj = "ERROR" ]; then
print_summary "created object #s on $client_name not contiguous"
- exit 1
+ cleanup 3
fi
first_objs[$idx]=$first_obj
done # $ndevs
for test in ${tests[@]}; do
declare -a pidarray
for host in ${unique_hosts[@]}; do
+ remote_shell $host \
+ "lctl set_param -n osd*.*.force_sync 1 &>/dev/null || true"
echo "starting run for test: $test rsz: $rsz " \
"threads: $thr objects: $nobj" >> ${vmstatf}_${host}
done
str=$(printf "%17s " SHORT)
fi
else
- str=$(awk "BEGIN {printf \"[%7.2f,%7.2f] \",\
+ str=$(awk "BEGIN {printf \"[%7.2f, %7.2f] \",\
(${stats[1]} * $actual_rsz)/1024,\
(${stats[2]} * $actual_rsz)/1024; exit}")
fi