- # start test
- t0=`date +%s.%N`
- for ((i=0;i<crg;i++)); do
- sgp_dd 2> ${rslt}_tmp${i} \
- $f1 $f2 ${skip}=$((1024+i*blocks)) \
- thr=$((thr/crg)) count=$count bs=$bs bpt=$bpt time=1&
- done
- wait
- t1=`date +%s.%N`
- # collect all results in 1 file
- rfile=${rslt}_thr${thr}_crg${crg}_rsz${rsz}
- echo > $rfile
- ok=0
- for ((i=0;i<crg;i++)); do
- rtmp=${rslt}_tmp${i}
- if grep 'time to transfer data' $rtmp > /dev/null 2>&1; then
- ok=$((ok + 1))
+ # run tests
+ for action in $actions; do
+ print_summary -n "$action "
+ echo "=====> $action" >> $workf
+ tmpf=${workf}_tmp
+ # start test
+ t0=`date +%s.%N`
+ for ((i=0;i<ndevs;i++)); do
+ dev=${devs[i]}
+ devsize=$((bs*`sg_readcap -b ${dev} | awk '{print $1}'`/1024))
+ if [ $devsize -lt $actual_size ]; then
+ echo -e "device $(sg_map | grep $dev | awk '{ print $2; }') not big enough: $devsize < $actual_size.\nConsider reducing \$size"
+ exit 1
+ fi
+ if [ $action = read ]; then
+ inf="if=$dev"
+ outf="of=/dev/null"
+ skip=skip
+ else
+ inf="if=/dev/zero"
+ outf="of=$dev"
+ skip=seek
+ fi
+ for ((j=0;j<crg;j++)); do
+ sgp_dd 2> ${tmpf}_${i}_${j} \
+ $inf $outf ${skip}=$((1024+j*blocks)) \
+ thr=$((thr/crg)) count=$count bs=$bs bpt=$bpt time=1&
+ done
+ done
+ wait
+ t1=`date +%s.%N`
+ # collect/check individual stats
+ echo > $tmpf
+ ok=0
+ for ((i=0;i<ndevs;i++)); do
+ for ((j=0;j<crg;j++)); do
+ rtmp=${tmpf}_${i}_${j}
+ 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
+ cat ${rtmp} >> $workf
+ rm ${rtmp}
+ done
+ done
+ if ((ok != ndevs*crg)); then
+ print_summary -n "$((ndevs*crg - ok)) failed "
+ else
+ # compute MB/sec from elapsed
+ bw=`awk "BEGIN {printf \"%7.2f MB/s\", $actual_size * $ndevs / (( $t1 - $t0 ) * 1024); exit}"`
+ # compute MB/sec from nregions*slowest
+ check=`awk < $tmpf \
+ '/time to transfer data/ {mb=$8/1.048576; if (n == 0 || mb < min) min = mb; n++}\
+ END {printf "%5d x %6.2f = %7.2f MB/s", n, min, min * n}'`
+ print_summary -n "$bw $check "