|
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
|
|
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 |
|
|
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 |
|
|
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";
|