Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
A script to recompile and rerun the whole chain from platfile+daxfile to actual repla...
[simgrid.git] / examples / gras / replay / do_simulation.pl
diff --git a/examples/gras/replay/do_simulation.pl b/examples/gras/replay/do_simulation.pl
new file mode 100755 (executable)
index 0000000..5d8301a
--- /dev/null
@@ -0,0 +1,86 @@
+#! /usr/bin/perl
+
+use strict;
+
+my $platfile = $ARGV[0] || die "Usage: $0 platfile daxfile\n";
+my $daxfile = $ARGV[1] || die "Usage: $0 platfile daxfile\n";
+
+sub title {
+    my $l = "XXXX $0: $_[0] XXXX";
+    my $l2 = $l;
+    $l2 =~ s/./X/g;
+    print STDERR "\n\n$l2\n$l\n$l2\n";
+}
+
+title("relaunching make");
+system qw(make -C ../../../src libsimgrid.la) and die "XXXX $0: make library failed: $?\n";  
+system qw(make -C ../../simdag dax/dax_test) and die "XXXX $0: make dax_test failed.\n";
+system qw(make replay_simulator) and die "XXXX $0: make replay_simulator failed.\n";
+
+###################################################
+my $tracefile = "$daxfile";
+$tracefile =~ s/\.xml$//;
+$tracefile .= ".trace";
+title("Regenerating the trace '$tracefile'");
+my @args = ("../../simdag/dax/dax_test", "$platfile", "$daxfile","$tracefile");
+system @args and die "XXXX $0: cannot regenerate the trace '$tracefile': $?\n";
+
+
+###################################################
+my $deployfile = "deploy_$platfile";
+$deployfile =~ s/\.xml$//;
+$deployfile .= "_".$daxfile;
+title("Generate a deployment file '$deployfile'");
+my %hosts;
+
+print STDERR  "$0: parsing the trace file '$tracefile'\n";
+open TRACE,"$tracefile" || die "$0: cannot open tracefile $tracefile: $!\n";
+while (<TRACE>) {
+    #    print "Seen $_";
+    next unless /compute/;
+    m/^\[.*?\] ([^ ]*) .*$/ || die "unparsable line: $_";
+    if (defined $hosts{$1}) {
+       $hosts{$1}+=1;
+    } else {
+       $hosts{$1}++;
+    }
+} 
+close TRACE;
+my @hostnames = sort keys %hosts;
+my $master = $hostnames[0];
+
+foreach my $host (@hostnames) {
+    if ($host ne $master && $hosts{$host} > 1) {
+       print STDERR "$host computes $hosts{$host} times!\n";
+    }
+}
+
+print STDERR  "$0: Generating the xml deployment file\n";
+open DEPLOY,">$deployfile";
+print DEPLOY "<?xml version='1.0'?>\n";
+print DEPLOY "<!DOCTYPE platform SYSTEM \"simgrid.dtd\">\n\n";
+print DEPLOY "<!-- File generated by \"$0 $tracefile\" at ".(localtime())." -->\n\n";
+print DEPLOY "<platform version=\"2\">\n";
+
+print DEPLOY "  <process host=\"$master\" function=\"master\">\n";
+print DEPLOY "    <argument value=\"$tracefile\" /> <!-- trace file -->\n";
+print DEPLOY "    <argument value=\"4500\"/>            <!-- port number -->\n";
+print DEPLOY "  </process>\n";
+
+foreach my $host (@hostnames) {
+    print DEPLOY "  <process host=\"$host\" function=\"worker\">";
+    print DEPLOY "<argument value=\"$master:4500\" />";
+    print DEPLOY "</process>\n";
+}
+
+print DEPLOY "</platform>\n";
+close DEPLOY;
+print STDERR  "$0: Xml deployment file generated\n";
+
+###################################################
+title("Replay this trace onto the simulator");
+system ("./replay_simulator","$platfile","$deployfile")
+  and die "Cannot replay the trace. Command was:\n./replay_simulator $platfile $deployfile\n";
+
+
+# 
\ No newline at end of file