Whamcloud - gitweb
b=10958
[fs/lustre-release.git] / lustre-iokit / sgpdd-survey / plot-sgpdd
diff --git a/lustre-iokit/sgpdd-survey/plot-sgpdd b/lustre-iokit/sgpdd-survey/plot-sgpdd
new file mode 100755 (executable)
index 0000000..274ab31
--- /dev/null
@@ -0,0 +1,116 @@
+#!/usr/bin/perl -w
+# Report generation for plot-sgpdd.pl
+# ===================================
+#        The plot-sgpdd.pl script is used to generate csv file and
+# instructions files for gnuplot from the output of sgpdd-survey.pl script.
+#
+#        The plot-sgpdd.pl also creates .scr file that contains instructions
+# for gnuplot to plot the graph. After generating .dat and .scr files this
+# script invokes gnuplot to display graph.
+#
+# Syntax:
+# $ plot-sgpdd.pl <log_filename>
+# [Note: 1. This script may need modifications whenever there will be
+#           modifications in output format of sgpdd-survey.pl script.
+#        2. Gnuplot version 4.0 or above is required.]
+
+# arg 0 is filename
+sub usages_msg() {
+       print "Usage: $0 <log_filename> \n";
+       print "       The $0 parses and plots graph for output of sgpdd-survey.pl using gnuplot,\n";
+       print "       it generates .dat and .scr files for results graphing\n";
+       print "e.g.> perl $0 sgpdd-log \n";
+       exit 1;
+}
+
+my @GraphTitle;
+if ( !$ARGV[0] ) {
+       usages_msg();
+}
+$file = $ARGV[0];
+$region = 0;
+$thread = 0;
+$count = 0;
+open ( PFILE, "$file") or die "Can't open results";
+LABEL: while ( <PFILE> ) {
+       chomp;
+       @line = split( /\s+/ );
+       if ($count == 0) {
+               @GraphTitle = @line;
+               $count++;
+               next LABEL;
+       }
+       $rindex = 18;
+       if ($line[9]) {
+           if ($line[10] eq "failed") {
+               $rindex = 12;
+           } else {
+               $out{$line[7]}{$line[5]} = $line[9];    
+           }
+       }
+       #print "rg$line[5] th$line[7] w$line[9] r$line[$rindex]\n";
+       if ($line[$rindex]) {
+           if (!($line[$rindex+1] eq "failed")) {
+               if ($line[5] <= 1 ) {
+                       $out{$line[7]}{$line[5] - 1} = $line[$rindex];
+               } else {
+                       $out{$line[7]}{$line[5] + 1} = $line[$rindex];
+               }
+           }
+       }
+       if ( $region < $line[7] ) {
+               $region = $line[7];
+       }
+       if ( $thread < $line[5] ) {
+               $thread = $line[5];
+       }
+       $count++;
+}
+close PFILE;
+
+print "@GraphTitle\n";
+# Open .csv file for writting required columns from log file.
+open ( DATAFILE, "> $file.dat" ) or die "Can't open csv file for writting";
+printf DATAFILE "%-6s", "0";
+for ($j = 1; $j <= $thread ; $j = $j + $j) {
+       printf DATAFILE "%-8s%-8s", "wr$j", "rd$j";
+}
+for ( $i = 1; $i <= $region; $i = $i + $i ) {
+       printf DATAFILE "\n%-6s", $i;
+       for ($j = 1; $j <= $thread ; $j = $j + $j) {
+               if ( $out{$i}{$j} ) {
+                       printf DATAFILE "%-8s", $out{$i}{$j};
+                   } else {
+                       printf DATAFILE "%-8s", "-";
+                   }
+               if ( $j <= 1 && $out{$i}{$j - 1}) {
+                   printf DATAFILE "%-8s", $out{$i}{$j - 1};
+               } elsif ($out{$i}{$j + 1}) {
+                   printf DATAFILE "%-8s", $out{$i}{$j + 1};
+               } else {
+                   printf DATAFILE "%-8s", "-";
+               }
+       }
+}
+close DATAFILE;
+open ( SCRFILE, "> $file.scr" ) or die "Can't open scr file for writting";
+print SCRFILE "set title \"@GraphTitle\"\n";
+print SCRFILE "set xlabel \"Threads\"\n";
+print SCRFILE "set ylabel \"Speeds(MB/s)\"\n";
+my $plot = "plot";
+$i = 2;
+$xrange = 1;
+# generate instructions for gnuplot, with adjusting X-axes ranges
+for ($j = 1; $j <= $thread ; $j = $j + $j) {
+       if ($j > 15 ) {
+               $xrange = 2;
+       }
+       printf SCRFILE "$plot \"$file.dat\" using 1:$i axes x%dy1 title \"write$j\" with line\n", $xrange;
+       $plot = "replot";
+       $i++;
+       printf SCRFILE "$plot \"$file.dat\" using 1:$i axes x%dy1 title \"read$j\" with line\n", $xrange;
+       $i++;
+}
+print SCRFILE "pause -1\n";
+close SCRFILE;
+system ("gnuplot $file.scr") == 0 or die "ERROR: while ploting graph.\nMake sure that gnuplot is working properly";