rslt=${rslt:-"/tmp/sgpdd_survey_`date +%F@%R`_`uname -n`"}
# what to do (read or write)
-actions="write read"
+actions=${actions:-"write read"}
# total size per device (MBytes)
# NB bigger than device cache is good
size=${size:-8192}
# record size (KBytes)
-rszlo=1024
-rszhi=1024
+rszlo=${rszlo:-1024}
+rszhi=${rszhi:-1024}
# Concurrent regions per device
crglo=${crglo:-1}
#####################################################################
# leave the rest of this alone unless you know what you're doing...
-# sgp_dd's idea of disk sector size (Bytes)
-bs=512
# and max # threads one instance will spawn
SG_MAX_QUEUE=16
ndevs=${#devs[@]}
+# determine block size. This should also work for raw devices
+# If it fails, set to 512
+bs=$((`sg_readcap -b ${devs[0]} |awk '{print $2}'`))
+if [ $bs == 0 ];then
+ echo "sg_readcap failed, setting block size to 512"
+ bs=512
+fi
rsltf=${rslt}.summary
workf=${rslt}.detail
echo -n > $rsltf
echo $minusn "$*"
}
-time_v=`date`
-hostname=`hostname`
-if [ "$rawdevs" ]; then
- print_summary "$time_v sgpdd-survey on $rawdevs from $hostname"
-fi
-if [ "$scsidevs" ]; then
- print_summary "$time_v sgpdd-survey on $scsidevs from $hostname"
-fi
+print_summary "$(date) sgpdd-survey on $rawdevs$scsidevs from $(hostname)"
for ((rsz=$rszlo;rsz<=$rszhi;rsz*=2)); do
for ((crg=$crglo;crg<=$crghi;crg*=2)); do
for ((i=0;i<ndevs;i++)); do
for ((j=0;j<crg;j++)); do
rtmp=${tmpf}_${i}_${j}
- if grep 'time to transfer data' $rtmp > /dev/null 2>&1; then
+ if grep 'error' $rtmp > /dev/null 2>&1; then
+ echo "Error found in $rtmp"
+ elif grep 'time to transfer data' $rtmp > /dev/null 2>&1; then
ok=$((ok + 1))
fi
cat ${rtmp} >> $tmpf