Blame src/components/appio/tests/iozone/iozone_visualizer.pl

Packit 577717
#!/usr/bin/perl
Packit 577717
Packit 577717
use warnings;
Packit 577717
use strict;
Packit 577717
Packit 577717
# arguments: one of more report files
Packit 577717
#
Packit 577717
# Christian Mautner <christian * mautner . ca>, 2005-10-31
Packit 577717
# Marc Schoechlin <ms * 256bit.org>, 2007-12-02
Packit 577717
#
Packit 577717
# This script is just a hack :-)
Packit 577717
#
Packit 577717
# This script is based loosely on the Generate_Graph set
Packit 577717
# of scripts that come with iozone, but is a complete re-write
Packit 577717
#
Packit 577717
# The main reason to write this was the need to compare the behaviour of
Packit 577717
# two or more different setups, for tuning filesystems or
Packit 577717
# comparing different pieces of hardware.
Packit 577717
#
Packit 577717
# This script is in the public domain, too short and too trivial
Packit 577717
# to deserve a copyright.
Packit 577717
#
Packit 577717
# Simply run iozone like, for example, ./iozone -a -g 4G > config1.out (if your machine has 4GB)
Packit 577717
#
Packit 577717
# and then run perl report.pl config1.out
Packit 577717
# or get another report from another box into config2.out and run
Packit 577717
# perl report.pl config1.out config2.out
Packit 577717
# the look in the report_* directory for .png
Packit 577717
#
Packit 577717
# If you don't like png or the graphic size, search for "set terminal" in this file and put whatever gnuplot
Packit 577717
# terminal you want. Note I've also noticed that gnuplot switched the set terminal png syntax
Packit 577717
# a while back, you might need "set terminal png small size 900,700"
Packit 577717
#
Packit 577717
use Getopt::Long;
Packit 577717
Packit 577717
my $column;
Packit 577717
my %columns;
Packit 577717
my $datafile;
Packit 577717
my @datafiles;
Packit 577717
my $outdir;
Packit 577717
my $report;
Packit 577717
my $nooffset=0;
Packit 577717
my @Reports;
Packit 577717
my @split;
Packit 577717
my $size3d; my $size2d;
Packit 577717
Packit 577717
# evaluate options
Packit 577717
GetOptions(
Packit 577717
    '3d=s'     => \$size3d,
Packit 577717
    '2d=s'     => \$size2d,
Packit 577717
    'nooffset' => \$nooffset
Packit 577717
);
Packit 577717
Packit 577717
$size3d = "900,700" unless defined $size3d;
Packit 577717
$size2d = "800,500" unless defined $size2d;
Packit 577717
Packit 577717
Packit 577717
my $xoffset = "offset -7";
Packit 577717
my $yoffset = "offset -3";
Packit 577717
Packit 577717
if ($nooffset == 1){
Packit 577717
   $xoffset = ""; $yoffset = "";
Packit 577717
}
Packit 577717
Packit 577717
print "\niozone_visualizer.pl : this script is distributed as public domain\n";
Packit 577717
print "Christian Mautner <christian * mautner . ca>, 2005-10-31\n";
Packit 577717
print "Marc Schoechlin <ms * 256bit.org>, 2007-12-02\n";
Packit 577717
Packit 577717
Packit 577717
@Reports=@ARGV;
Packit 577717
Packit 577717
die "usage: $0 --3d=x,y -2d=x,y <iozone.out> [<iozone2.out>...]\n" if not @Reports or grep (m|^-|, @Reports);
Packit 577717
Packit 577717
die "report files must be in current directory" if grep (m|/|, @Reports);
Packit 577717
Packit 577717
print "Configured xtics-offset '$xoffset', configured ytics-offfset '$yoffset' (disable with --nooffset)\n";
Packit 577717
print "Size 3d graphs : ".$size3d." (modify with '--3d=x,y')\n";
Packit 577717
print "Size 2d graphs : ".$size2d." (modify with '--2d=x,y')\n";
Packit 577717
Packit 577717
#KB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread
Packit 577717
%columns=(
Packit 577717
         'KB'        =>1,
Packit 577717
         'reclen'    =>2,
Packit 577717
         'write'     =>3,
Packit 577717
         'rewrite'   =>4,
Packit 577717
         'read'      =>5,
Packit 577717
         'reread'    =>6,
Packit 577717
         'randread'  =>7,
Packit 577717
         'randwrite' =>8,
Packit 577717
         'bkwdread'  =>9,
Packit 577717
         'recrewrite'=>10,
Packit 577717
         'strideread'=>11,
Packit 577717
         'fwrite'    =>12,
Packit 577717
         'frewrite'  =>13,
Packit 577717
         'fread'     =>14,
Packit 577717
         'freread'   =>15,
Packit 577717
         );
Packit 577717
Packit 577717
#
Packit 577717
# create output directory. the name is the concatenation
Packit 577717
# of all report file names (minus the file extension, plus
Packit 577717
# prefix report_)
Packit 577717
#
Packit 577717
$outdir="report_".join("_",map{/([^\.]+)(\..*)?/ && $1}(@Reports));
Packit 577717
Packit 577717
print STDERR "Output directory: $outdir ";
Packit 577717
Packit 577717
if ( -d $outdir )
Packit 577717
{
Packit 577717
    print STDERR "(removing old directory) ";
Packit 577717
    system "rm -rf $outdir";
Packit 577717
}
Packit 577717
Packit 577717
mkdir $outdir or die "cannot make directory $outdir";
Packit 577717
Packit 577717
print STDERR "done.\nPreparing data files...";
Packit 577717
Packit 577717
foreach $report (@Reports)
Packit 577717
{
Packit 577717
    open(I, $report) or die "cannot open $report for reading";
Packit 577717
    $report=~/^([^\.]+)/;
Packit 577717
    $datafile="$1.dat";
Packit 577717
    push @datafiles, $datafile;
Packit 577717
    open(O, ">$outdir/$datafile") or die "cannot open $outdir/$datafile for writing";
Packit 577717
    open(O2, ">$outdir/2d-$datafile") or die "cannot open $outdir/$datafile for writing";
Packit 577717
Packit 577717
    my @sorted = sort { $columns{$a} <=> $columns{$b} } keys %columns;
Packit 577717
    print O "# ".join(" ",@sorted)."\n";
Packit 577717
    print O2 "# ".join(" ",@sorted)."\n";
Packit 577717
Packit 577717
    while()
Packit 577717
    {
Packit 577717
        next unless ( /^[\s\d]+$/ );
Packit 577717
        @split = split();
Packit 577717
        next unless ( @split == 15 );
Packit 577717
        print O;
Packit 577717
        print O2 if $split[1] == 16384 or $split[0] == $split[1];
Packit 577717
    }
Packit 577717
    close(I);
Packit 577717
    close(O);
Packit 577717
    close(O2);
Packit 577717
}
Packit 577717
Packit 577717
print STDERR "done.\nGenerating graphs:";
Packit 577717
Packit 577717
Packit 577717
open(HTML, ">$outdir/index.html") or die "cannot open $outdir/index.html for writing";
Packit 577717
Packit 577717
print HTML qq{
Packit 577717
Packit 577717
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
Packit 577717
<head>
Packit 577717
<title>IOZone Statistics</title>
Packit 577717
 <STYLE type="text/css">
Packit 577717
.headline \{ font-family: Arial, Helvetica, sans-serif; font-size: 18px; color: 003300 ; font-weight: bold; text-decoration: none\}
Packit 577717
 </STYLE>
Packit 577717
</head>
Packit 577717
<body>
Packit 577717
Packit 577717

IOZone Statistics

Packit 577717
Packit 577717
Packit 577717
Packit 577717
};
Packit 577717
Packit 577717
# Generate Menu
Packit 577717
print HTML "<u>## Overview</u>\n
    \n";
Packit 577717
foreach $column (keys %columns){
Packit 577717
    print HTML '
  • '.uc($column).' : '.
  • Packit 577717
                       '3d\n".
    Packit 577717
                       '2d\n";
    Packit 577717
    }
    Packit 577717
    print HTML "\n";
    Packit 577717
    # Genereate 3d plots
    Packit 577717
    foreach $column (keys %columns)
    Packit 577717
    {
    Packit 577717
        print STDERR " $column";
    Packit 577717
    Packit 577717
        open(G, ">$outdir/$column.do") or die "cannot open $outdir/$column.do for writing";
    Packit 577717
    Packit 577717
    Packit 577717
    Packit 577717
        print G qq{
    Packit 577717
    set title "Iozone performance: $column"
    Packit 577717
    set grid lt 2 lw 1
    Packit 577717
    set surface
    Packit 577717
    set parametric
    Packit 577717
    set xtics $xoffset
    Packit 577717
    set ytics $yoffset
    Packit 577717
    set logscale x 2
    Packit 577717
    set logscale y 2
    Packit 577717
    set autoscale z
    Packit 577717
    #set xrange [2.**5:2.**24]
    Packit 577717
    set xlabel "File size in KBytes" -2
    Packit 577717
    set ylabel "Record size in Kbytes" 2
    Packit 577717
    set zlabel "Kbytes/sec" 4,8
    Packit 577717
    set style data lines
    Packit 577717
    set dgrid3d 80,80,3
    Packit 577717
    #set terminal png small picsize 900 700
    Packit 577717
    set terminal png small size $size3d nocrop
    Packit 577717
    set output "$column.png"
    Packit 577717
    };
    Packit 577717
    Packit 577717
        print HTML qq{
    Packit 577717
          
    Packit 577717
           
    Packit 577717
             

    3d-$column

    [top]
    Packit 577717
             3d-$column
    Packit 577717
           
    Packit 577717
          
    Packit 577717
        };
    Packit 577717
    Packit 577717
        print G "splot ". join(", ", map{qq{"$_" using 1:2:$columns{$column} title "$_"}}(@datafiles));
    Packit 577717
    Packit 577717
        print G "\n";
    Packit 577717
    Packit 577717
        close G;
    Packit 577717
    Packit 577717
        open(G, ">$outdir/2d-$column.do") or die "cannot open $outdir/$column.do for writing";
    Packit 577717
        print G qq{
    Packit 577717
    set title "Iozone performance: $column"
    Packit 577717
    #set terminal png small picsize 450 350
    Packit 577717
    set terminal png medium size $size2d nocrop
    Packit 577717
    set logscale x
    Packit 577717
    set xlabel "File size in KBytes"
    Packit 577717
    set ylabel "Kbytes/sec"
    Packit 577717
    set output "2d-$column.png"
    Packit 577717
    };
    Packit 577717
    Packit 577717
        print HTML qq{
    Packit 577717
          
    Packit 577717
           
    Packit 577717
             

    2d-$column

    [top]
    Packit 577717
             2d-$column
    Packit 577717
           
    Packit 577717
          
    Packit 577717
        };
    Packit 577717
    Packit 577717
    Packit 577717
    Packit 577717
        print G "plot ". join(", ", map{qq{"2d-$_" using 1:$columns{$column} title "$_" with lines}}(@datafiles));
    Packit 577717
    Packit 577717
        print G "\n";
    Packit 577717
    Packit 577717
        close G;
    Packit 577717
    Packit 577717
        if ( system("cd $outdir && gnuplot $column.do && gnuplot 2d-$column.do") )
    Packit 577717
        {
    Packit 577717
            print STDERR "(failed) ";
    Packit 577717
        }
    Packit 577717
        else
    Packit 577717
        {
    Packit 577717
            print STDERR "(ok) ";
    Packit 577717
        }
    Packit 577717
    }
    Packit 577717
    Packit 577717
    print HTML qq{
    Packit 577717
    Packit 577717
    </body>
    Packit 577717
    </html>
    Packit 577717
    };
    Packit 577717
    print STDERR "done.\n";