Interprétation des résultats d’IOMeter

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 :

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;

4 comments

  1. Les outils sont super et je suis content de l’initiative du Open Performance Test mais par contre je trouve que les config ICF ne refletent pas du tout des scenarios ‘real life’…

    • C’est sûr que les résultats ne sont pas à prendre comme argent comptant, mais je pense que ça peut être utile et plus pertinent surtout lors de comparaison de solutions.
      Après, c’est clair que rien ne vaudra le replay d’un workload similaire de la prod, ça c’est sûr !

Répondre à Ammesiah Annuler la réponse

Required fields are marked *.