preloader
2 March 2011 / #Iometer

Interprétation des résultats d’IOMeter

post-thumb

On a eu récemment à interpréter et comparer des résultats générés par IOMeter.

D’habitude, on passe par la page du site de vmkTree (merci hypervisor :p) qui a en plus l’intérêt de fournir un fichier ISO avec une configuration automatique d’IOMeter et des scans à lancer.

Le problème a été pendant une mise à jour du serveur web de vmktree qui au final a duré quelque temps et qui nous a empêché  de l’utiliser.

Pendant ce temps, on a utilisé un script perl qui fait un peu la même chose.

Il est récupérable sur http://pvenezia.com/iw/iometer-parse.pl et il suffit de le lancer dans le dossier qui contient les fichiers *.csv de résultats IOMeter.

L’affichage des résultats se fait directement sur la console :

iometer_01

Voici le script :

#!/usr/bin/perl
#
# IOMeter results parser, 2005, Paul Venezia
#
#       Simply run this script in the directory containing the CSV output of IOMeter.
#       Results are organized by filename.
#
#

use File::Glob ':glob';
use Data::Dumper;

@files = <*.csv>;
my %results;
my $parmcount = 1;
my $lcount = 0;
foreach my $file (@files) {
    undef @lines;
    open (LOG, "<$file");
    my @lines = <LOG>;
    foreach my $line (@lines) {
        $lcount++;
        if ($line =~ /'Access\sspecification\sname.+/) {
            $line = @lines[$lcount];
            $line =~ /(.+),\d/;
            #%results->{$file}->{test} = "$1";
            $thistest = "$1";
            #print $thistest;

        }
        if ($line =~ /ALL,All.+/) {
            #$line = @lines[$lcount];
            @thisres = (split(",", $line);
            %results->{$file}->{$thistest}{IOps} = @thisres[6];
            %results->{$file}->{$thistest}{ReadIOps} = @thisres[7];
            %results->{$file}->{$thistest}{WriteIOps} = @thisres[8];
            %results->{$file}->{$thistest}{MBps} = @thisres[9];
            %results->{$file}->{$thistest}{ReadMBps} = @thisres[10];
            %results->{$file}->{$thistest}{CPU} = @thisres[45];
        }

    }
$parmcount = 0;
$lcount = 0;

}

sub swrite {
  my $fmt = shift(@_);
  $^A = '';
  formline($fmt,@_);
  return $^A;
}

my %output;
foreach my $logfile ( sort keys %results ) {
    #$TXT .= "$logfile: \n";
    $header = 1;
    foreach $test ( sort keys %{$results{$logfile}} ) {
        foreach $tsize ( sort keys %{$results{$logfile}{$test}} ) {
            $output{$test}{$logfile}{$tsize} =  swrite("@<<<<<<<<<<<<<<<<<<", $results{$logfile}{$test}{$tsize});
        }

    }
}

#print Dumper %results;
foreach $testsize ( sort keys %output ) {
    $TXT .= "$testsize\n";
    $header = 1;
    foreach $unit ( sort keys %{$output{$testsize}} ) {
        if ($header) {
            $TXT .= "\t\t";
            foreach $test ( sort keys %{$output{$testsize}{$unit}} ) {
                $TXT .= swrite("@>>>>>>>>>>>>> @<<<<<<", $test);
            }
            $TXT .= "\n";
            undef $header;
        }
        $testunit = $unit;
        $testunit =~ s/\.csv//;
        $TXT .= swrite("@<<<<<<<<<<<<<<<<<<<<<<<< @<<<<<", $testunit);

        foreach $test ( sort keys %{$output{$testsize}{$unit}} ) {
            $TXT .= swrite("@<<<<<<<<<<<<< @<<<<<<<", $output{$testsize}{$unit}{$test});
        }
        $TXT .= "\n";
    }
    $TXT .= "\n";
}

print $TXT;
#print Dumper %output;

> Frederic MARTIN