X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre-iokit%2Fsgpdd-survey%2Fplot-sgpdd;h=e3386ecdc53dd90ba2d5446075838ef005df9f62;hp=8b5d8b87e7d7c7d17106143f5acfb453b09cbcc5;hb=90e1ec3035c82ae9cc1ad471c0c8cad7d448f23f;hpb=b52a09e6044e44fcdaded37b7aa92e7ed1732e20 diff --git a/lustre-iokit/sgpdd-survey/plot-sgpdd b/lustre-iokit/sgpdd-survey/plot-sgpdd index 8b5d8b8..e3386ecd 100755 --- a/lustre-iokit/sgpdd-survey/plot-sgpdd +++ b/lustre-iokit/sgpdd-survey/plot-sgpdd @@ -31,34 +31,40 @@ sub usage() # check whether gnuplot exists? system ("which gnuplot > /dev/null") == 0 or die "gnuplot does not exist, please install it and try again.\n"; +# check whether gnuplot supports png +$pngsupport = "ldd `which gnuplot` | grep -q libpng"; +system ("$pngsupport") == 0 or die "gnuplot installed does not support png. + Please install gnuplot to support png and try again.\n"; + my @GraphTitle; #Subroutine to write .scr file that further used by gnuplot to plot the graph. sub write_scr_file() { my $op = $_[0]; + my $rwlabel = $_[1]; print "generating plot $file-$rsz-$op.png\n"; open ( SCRFILE, "> $file-$rsz-$op.scr" ) or die "Can't open scr file for writing"; - if ($op eq "rd") { - $rwlabel = "Read"; - } - if ($op eq "wr") { - $rwlabel = "Write"; - } if ($opt_rdtitle || $opt_wrtitle) { if ($op eq "rd") { - print SCRFILE "set title \"@GraphTitle\\n$rwlabel, Rsize = $rsz, $opt_rdtitle\"\n"; + print SCRFILE "set title \"@GraphTitle\\n$rwlabel, " . + "Rsize = $rsz, $lun LUNs, $opt_rdtitle\"\n"; } if ($op eq "wr") { - print SCRFILE "set title \"@GraphTitle\\n$rwlabel, Rsize = $rsz, $opt_wrtitle\"\n"; + print SCRFILE "set title \"@GraphTitle\\n$rwlabel, " . + "Rsize = $rsz, $lun LUNs, $opt_wrtitle\"\n"; } } else { - print SCRFILE "set title \"@GraphTitle\\n$rwlabel, Rsize = $rsz\"\n"; + print SCRFILE "set title \"@GraphTitle\\n$rwlabel, " . + "Rsize = $rsz, $lun LUNs\"\n"; } - print SCRFILE "set xlabel \"Threads\"\n"; - print SCRFILE "set ylabel \"Speeds(MB/s)\"\n"; + print SCRFILE "set xlabel \"Threads/LUN\"\n"; + print SCRFILE "set ylabel \"Throughput (MiB/s)\"\n"; print SCRFILE "set logscale x\n"; print SCRFILE "set grid\n"; + print SCRFILE "set key right bottom\n"; + print SCRFILE "set terminal png\n"; + print SCRFILE "set output \"/dev/null\"\n"; if ($opt_y != 0) { print SCRFILE "set yrange [ 0:$opt_y ]\n"; } else { @@ -69,17 +75,15 @@ sub write_scr_file() { $i = 2; $xrange = 1; # generate instructions for gnuplot, with adjusting X-axes ranges - for ($j = 1; $j <= $thread ; $j = $j + $j) { - if ($op eq "wr") { - printf SCRFILE "$plot \"$file-$rsz-$op.dat\" using 1:$i axes x%dy1 title \"write$j\" with line\n", $xrange; - } - if ($op eq "rd") { - printf SCRFILE "$plot \"$file-$rsz-$op.dat\" using 1:$i axes x%dy1 title \"read$j\" with line\n", $xrange; - } + for ($j = $first_crg; $j <= $crg ; $j = $j + $j) { + $tmp=$j/$lun; + printf SCRFILE "$plot \"$file-$rsz-$op.dat\" " . + "using 1:$i:xticlabels(1) axes x%dy1 " . + "title \"$tmp crg/LUN\" " . + "with linespoints lw 2\n", $xrange; $i++; $plot = "replot"; } - print SCRFILE "set terminal png\n"; print SCRFILE "set output \"$file-$rsz-$op.png\"\n"; print SCRFILE "replot\n"; close SCRFILE; @@ -88,32 +92,33 @@ sub write_scr_file() { system ("rm $file-$rsz-$op.scr"); } + #Subroutine to write .dat file that further used by gnuplot to plot the graph. sub write_dat_file() { my $op = $_[0]; print "writing data $file-$rsz-$op.dat\n"; # Open .csv/.dat file for writing required columns from log file. - open ( DATAFILE, "> $file-$rsz-$op.dat" ) or die "Can't open csv file for writing"; - printf DATAFILE "%-6s", "0"; - for ($j = 1; $j <= $thread ; $j = $j + $j) { - printf DATAFILE "%-8s", "$op$j"; - } - for ( $i = 1; $i <= $region; $i = $i + $i ) { - printf DATAFILE "\n%-6s", $i; - for ($j = 1; $j <= $thread ; $j = $j + $j) { - if (($op eq "rd" && $rdwr) || ($op eq "wr" && $wrrd) || ($readop) || ($writeop)) { - if ( $out{$i}{$j} ) { - printf DATAFILE "%-8s", $out{$i}{$j}; + my $datafile = "$file-$rsz-$op.dat"; + open ( DATAFILE, "> $datafile" ) or die "Can't open csv $datafile for writing"; + printf DATAFILE "%-6s", "thrd"; + for ($j = $first_crg; $j <= $crg ; $j = $j + $j) { + $tmp = $j/$lun; + printf DATAFILE "%-10s", "$tmp-crg"; + } + for ( $i = $first_thread; $i <= $thread; $i = $i + $i ) { + printf DATAFILE "\n%-6s", $i/$lun; + for ($j = $first_crg; $j <= $crg ; $j = $j + $j) { + if ($op eq "rd") { + if ( $ard{$i}{$j} ) { + printf DATAFILE "%-10s", $ard{$i}{$j}; } else { - printf DATAFILE "%-8s", "-"; + printf DATAFILE "%-10s", "-"; } - } else { - if (($j <= 1 && $out{$i}{$j - 1})) { - printf DATAFILE "%-8s", $out{$i}{$j - 1}; - }elsif ($out{$i}{$j + 1} && $j > 1) { - printf DATAFILE "%-8s", $out{$i}{$j + 1}; + } elsif ($op eq "wr" ) { + if ( $awr{$i}{$j} ) { + printf DATAFILE "%-10s", $awr{$i}{$j}; } else { - printf DATAFILE "%-8s", "-"; + printf DATAFILE "%-10s", "-"; } } } @@ -121,20 +126,33 @@ sub write_dat_file() { close DATAFILE; } +#Subroutine to call .scr and .dat file write routines. +sub write_files() { + for ($cnt = 0; $cnt < @operations; $cnt = $cnt + 1) { + if($operations[$cnt] eq "read") { + &write_dat_file("rd"); + &write_scr_file("rd", "read"); + } elsif ($operations[$cnt] eq "write") { + &write_dat_file("wr"); + &write_scr_file("wr", "write"); + } + } +} + if ( !$ARGV[0] ) { usage(); } -$region = 0; +$crg = 0; $thread = 0; +$first_crg = 1; +$first_thread = 1; $count = 0; -$wrrd = 0; -$rdwr = 0; -$writeop = 0; -$readop = 0; $rsz = 0; $opt_rdtitle = ""; $opt_wrtitle = ""; $opt_y = 0; +$cnt = 0; +@operations = (); # Command line parameter parsing use Getopt::Long; GetOptions ('help' => \$opt_help, 'rt=s' => \$opt_rdtitle, 'wt=s' => \$opt_wrtitle, 'y=i' => \$opt_y) or usage(); @@ -146,108 +164,58 @@ $file = $ARGV[0]; open ( PFILE, "$file") or die "Can't open $file"; LABEL: while ( ) { chomp; + # replace error strings to ensure same ordering of line fields + s/failed/failed . . . . ./g; @line = split( /\s+/ ); - if ($line[27]) { - print "invalid file format\n"; - exit 1; - } if ($count == 0) { - @GraphTitle = @line; + @GraphTitle = @line[0 .. 6]; $count++; next LABEL; } - if ($line[8]) { - if ($line[8] eq "ENOMEM") { - next LABEL; - } - } - if (!$rsz && $line[3]) { - $rsz = $line[3]; - } - if ($rsz != $line[3]) { - if($readop) { - &write_dat_file("rd"); - &write_scr_file("rd"); - } - if($writeop) { - &write_dat_file("wr"); - &write_scr_file("wr"); - } - if ($wrrd || $rdwr) { - &write_dat_file("rd"); - &write_scr_file("rd"); - &write_dat_file("wr"); - &write_scr_file("wr"); - } - $rsz = $line[3]; - $region = 0; - $thread = 0; + # output format + # dev 1 sz 1048576K rsz 1024K crg 1 thr 8 write 604.55 [ 606.43, 606.43] read 754.02 [ 756.95, 756.95] + $linelen = @line; + if ($linelen < 11) { + print "invalid file format at line $count\n"; + exit 1; } - #print "rg$line[5] th$line[7] w$line[9] r$line[$rindex]\n"; - $rindex = 18; - if ($line[18]) { - if ($line[10] eq "failed") { - $rindex = 12; - } - if ($line[8] eq "write" && $line[17] eq "read") { - $wrrd = 1; - } - if ($line[8] eq "read" && $line[17] eq "write") { - $rdwr = 1; - } - } else { - if ($line[8] eq "write" && $line[9]) { - $writeop = 1; - } - if ($line[8] eq "read" && $line[9]) { - $readop = 1; + if ($line[10]) { + if ($line[10] eq "ENOMEM") { + next LABEL; } - } - if ($wrrd || $rdwr) { - $out{$line[7]}{$line[5]} = $line[9]; - if ($line[$rindex+1]) { - if (!($line[$rindex+1] eq "failed")) { - goto LABEL2; - } - } else { -LABEL2: if ($line[5] <= 1 ) { - $out{$line[7]}{$line[5] - 1} = $line[$rindex]; - } else { - $out{$line[7]}{$line[5] + 1} = $line[$rindex]; + if (!$rsz || $rsz ne $line[5]) { + &write_files() unless !$rsz; + $cnt = 0; + $lun = $line[1]; + $rsz = $line[5]; + $first_crg = $line[7]; + $first_thread = $line[9]; + for ($i = 10; $i <= $linelen; $i = $i + 5) { + if ($line[$i]) { + $operations[$cnt] = $line[$i]; + $cnt++; } } } - if ($writeop) { - $out{$line[7]}{$line[5]} = $line[9]; - } - if ($readop) { - $out{$line[7]}{$line[5]} = $line[9]; + for ($i = 0; $i < @operations; $i++) { + if ($operations[$i] eq "read") { + $ard{$line[9]}{$line[7]} = $line[$i * 5 + 11]; + } elsif ($operations[$i] eq "write") { + $awr{$line[9]}{$line[7]} = $line[$i * 5 + 11]; + } } - if ( $region < $line[7] ) { - $region = $line[7]; + if ( $crg < $line[7] ) { + $crg = $line[7]; } - if ( $thread < $line[5] ) { - $thread = $line[5]; + if ( $thread < $line[9] ) { + $thread = $line[9]; } $count++; } close PFILE; if ($count > 1 && $rsz) { - if($readop) { - &write_dat_file("rd"); - &write_scr_file("rd"); - } - if($writeop) { - &write_dat_file("wr"); - &write_scr_file("wr"); - } - if ($wrrd || $rdwr) { - &write_dat_file("rd"); - &write_scr_file("rd"); - &write_dat_file("wr"); - &write_scr_file("wr"); - } + &write_files() } else { print "Invalid log file format\n"; }