r=jitendra,cliffw
Some documentation (s/.pl//g) fixes.
Add a $rslt_loc variable to set the location of the $rslt file. Defaults
to /tmp for backward compatibility.
Cleanup some syntax/style:
- put $ next to variable names in awk scriptlets
- one space on either side of |
Make sure the amount of data the sgp_dd is going to write actually fits in
the device and suggest reducing $size and exiting with an error if it does
not.
The included script "parse.pl" will process output files and create
.csv files for spreadsheet import
The included script "parse.pl" will process output files and create
.csv files for spreadsheet import
-The "plot-sgpdd.pl" script plots the results directly using gnuplot.
+The "plot-sgpdd" script plots the results directly using gnuplot.
# Report generation for plot-sgpdd
# ================================
# The plot-sgpdd script is used to generate csv file and
# Report generation for plot-sgpdd
# ================================
# The plot-sgpdd script is used to generate csv file and
-# instructions files for gnuplot from the output of sgpdd-survey.pl script.
+# instructions files for gnuplot from the output of sgpdd-survey script.
#
# The plot-sgpdd also creates .scr file that contains instructions
# for gnuplot to plot the graph. After generating .dat and .scr files this
#
# The plot-sgpdd also creates .scr file that contains instructions
# for gnuplot to plot the graph. After generating .dat and .scr files this
# $ sgpdd-survey > log_filename
# $ plot-sgpdd <log_filename>
# [Note: 1. This script may need modifications whenever there will be
# $ sgpdd-survey > log_filename
# $ plot-sgpdd <log_filename>
# [Note: 1. This script may need modifications whenever there will be
-# modifications in output format of sgpdd-survey.pl script.
+# modifications in output format of sgpdd-survey script.
# 2. Gnuplot version 4.0 or above is required.]
sub usage()
{
print STDERR "Usage: $0 [options] <log_filename>\n";
# 2. Gnuplot version 4.0 or above is required.]
sub usage()
{
print STDERR "Usage: $0 [options] <log_filename>\n";
- print STDERR " $0 parses and plots graphs from the output of sgpdd-survey.pl\n";
+ print STDERR " $0 parses and plots graphs from the output of sgpdd-survey\n";
print STDERR " It generates text data files (.dat) and graphs (.png) using gnuplot.\n";
print STDERR "options:\n";
print STDERR " --rt: Subtitle for read graphs\n";
print STDERR " It generates text data files (.dat) and graphs (.png) using gnuplot.\n";
print STDERR "options:\n";
print STDERR " --rt: Subtitle for read graphs\n";
# result file prefix. date/time+hostname makes unique
# NB ensure the path exists if it includes subdirs
# result file prefix. date/time+hostname makes unique
# NB ensure the path exists if it includes subdirs
-rslt=${rslt:-"/tmp/sgpdd_survey_`date +%F@%R`_`uname -n`"}
+rslt_loc=${rslt_loc:-"/tmp"}
+rslt=${rslt:-"$rslt_loc/sgpdd_survey_`date +%F@%R`_`uname -n`"}
# what to do (read or write)
actions=${actions:-"write read"}
# what to do (read or write)
actions=${actions:-"write read"}
# we will test for a LUN, the test for a partition
# if the partition number is > 9 this will fail
for d in $scsidevs; do
# we will test for a LUN, the test for a partition
# if the partition number is > 9 this will fail
for d in $scsidevs; do
- devs[$i]=`sg_map | awk "{if ($ 2 == \"$d\") print $ 1}"`
+ devs[$i]=`sg_map | awk "{if (\\\$2 == \"$d\") print \\\$1}"`
if [ -z "${devs[i]}" ]; then
echo "Can't find SG device for $d, testing for partition"
pt=`echo $d | sed 's/[0-9]$//'`
# Try again
if [ -z "${devs[i]}" ]; then
echo "Can't find SG device for $d, testing for partition"
pt=`echo $d | sed 's/[0-9]$//'`
# Try again
- devs[$i]=`sg_map | awk "{if ($ 2 == \"$pt\") print $ 1}"`
+ devs[$i]=`sg_map | awk "{if (\\\$2 == \"$pt\") print \\\$1}"`
if [ -z "${devs[i]}" ]; then
echo "Can't find SG device $pt"
exit 1
if [ -z "${devs[i]}" ]; then
echo "Can't find SG device $pt"
exit 1
# determine block size. This should also work for raw devices
# If it fails, set to 512
# 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}'`))
+bs=$((`sg_readcap -b ${devs[0]} | awk '{print $2}'`))
if [ $bs == 0 ];then
echo "sg_readcap failed, setting block size to 512"
bs=512
if [ $bs == 0 ];then
echo "sg_readcap failed, setting block size to 512"
bs=512
t0=`date +%s.%N`
for ((i=0;i<ndevs;i++)); do
dev=${devs[i]}
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"
if [ $action = read ]; then
inf="if=$dev"
outf="of=/dev/null"