* Compilation de SimGrid
* Compilation...
* Utilisation
+* Tracé de courbes
* Communications
* Pour ajouter un nouvel algorithme d'équilibrage
* Pour ajouter une nouvelle option au programme
Pour plus de détail sur les options de logging :
http://simgrid.gforge.inria.fr/doc/group__XBT__log.html#log_use
+Tracé de courbes
+================
+
+Le script extract.pl permet d'extraire les données à partir des traces
+de simulation et de le présenter sous un format acceptable par gnuplot
+ou par graph (plotutils).
+
+Exemple:
+ ./loba platform.xml 2>&1 | ./extract.pl | graph -CTX
+
Communications
==============
colorized-loba script pour exécuter loba en colorant les
sorties
+ extract.pl outil d'extraction des données à partir des
+ traces, pour tracer des courbes
+
setlocalversion calcule un numéro de version à partir du hash
du dernier commit (git)
--- /dev/null
+#!/usr/bin/env perl
+
+use strict;
+use warnings;
+
+my $bookkeeping;
+my $flt = '[+-]?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?';
+my $pflt = "($flt)";
+my $prefix = '^\[([^: ]+)(?::loba:\(\d+\))? ' . $pflt . '\] \[proc/INFO\] ';
+my $initmatch = $prefix . 'Initial load: ' . $pflt . '';
+my $finalmatch;
+my $plainmatch;
+
+my %alldata = ();
+
+while (<>) {
+ chomp;
+ if (s{^(?:\[0\.0+\] )?\[main/INFO\] \| bookkeeping\.*: }{}) {
+ $bookkeeping = $_ eq "on";
+ if ($bookkeeping) {
+ $finalmatch = $prefix .
+ 'Final load after (\d+):(\d+) iterations: ' . $pflt .
+ ' ; expected: ' . $pflt;
+ $plainmatch = $prefix .
+ '\((\d+):(\d+)\) current load: ' . $pflt .
+ ' ; expected: ' . $pflt;
+ } else {
+ $finalmatch = $prefix .
+ 'Final load after (\d+) iterations: ' . $pflt;
+ $plainmatch = $prefix . '\((\d+)\) current load: ' . $pflt;
+ }
+ if (0) {
+ print STDERR "BOOKKEEPING: \"$_\" ($bookkeeping)\n";
+ print STDERR "INITMATCH..: \"$initmatch\"\n";
+ print STDERR "PLAINMATCH.: \"$plainmatch\"\n";
+ print STDERR "FINALMATCH.: \"$finalmatch\"\n";
+ }
+ }
+ next if not defined $bookkeeping;
+ if (m{$plainmatch}) {
+ my $host = $1;
+ my $data;
+ if ($bookkeeping) {
+ $data = {
+ time => $2,
+ lb => $3,
+ comp => $4,
+ load => $5,
+ expected => $6,
+ };
+ } else {
+ $data = {
+ time => $2,
+ lb => $3,
+ comp => $3,
+ load => $4,
+ expected => $4,
+ };
+ }
+# print STDERR "PUSH $host $data->{time} $data->{load} (plain)\n";
+ push @{$alldata{$host}}, $data;
+ } if (m{$initmatch}) {
+ my $host = $1;
+ my $data = {
+ time => $2,
+ lb => 0,
+ comp => 0,
+ load => $3,
+ expected => $3,
+ };
+# print STDERR "PUSH $host $data->{time} $data->{load} (init)\n";
+ push @{$alldata{$host}}, $data;
+ } elsif (m{$finalmatch}) {
+ my $host = $1;
+ my $data;
+ if ($bookkeeping) {
+ $data = {
+ time => $2,
+ lb => $3,
+ comp => $4,
+ load => $5,
+ expected => $6,
+ };
+ } else {
+ $data = {
+ time => $2,
+ lb => $3,
+ comp => $3,
+ load => $4,
+ expected => $4,
+ };
+ }
+# print STDERR "PUSH $host $data->{time} $data->{load} (final)\n";
+ push @{$alldata{$host}}, $data;
+ }
+}
+
+foreach my $host (sort(keys %alldata)) {
+# print STDERR "GOT \"$host\"\n";
+ my $datalist = $alldata{$host};
+ print "# $host\n";
+ foreach my $data (@{$datalist}) {
+ print "$data->{time} $data->{load}\n";
+ }
+ print "\n"
+}