2 eval 'exec perl -S $0 ${1+"$@"}'
3 if $running_under_some_shell;
5 # This script updates the simgrid XML file passed as argument (modification in place)
6 # It is built to do the conversion incrementally.
8 # Copyright (c) 2006-2014. The SimGrid Team.
11 # This program is free software; you can redistribute it and/or modify it
12 # under the terms of the license (GNU LGPL) which comes with this package.
18 simgrid_update_xml - updates simgrid XML files to latest version
22 B<simgrid_update_xml> I<xml_file>
26 simgrid_update_xml updates the simgrid XML file passed as argument. The file
27 is modified in place, without any kind of backup. You may want to save a copy
28 before running the script.
30 In SimGrid XML files, the standard version is indicated in the version
31 attribute of the platform tag. Current version is 4. Here is a list of major
32 changes in each version.
36 =item B<Version 0:> Used before SimGrid 3.3
38 =item B<Version 1:> Introduced in SimGrid 3.3
44 The version attribute of platform were added to allow file versionning.
48 The link bandwidth changed from Mb/s to b/s; and the CPU power were changed
49 from MFlop/s to Flop/s
53 =item B<Version 2:> Introduced in SimGrid 3.4
59 Several tags were renamed:
63 ROUTE_ELEMENT -> LINK_CTN
64 PLATFORM_DESCRIPTION -> PLATFORM
68 =item B<Version 3:> Introduced in SimGrid 3.5
74 The AS tag were introduced. Every plaform should now contain an englobing AS
79 Routes are now symmetric by default.
83 Several tags were renamed (for sake of XML sanity):
86 TRACE:CONNECT -> TRACE_CONNECT
90 =item B<Version 4:> Introduced in SimGrid 3.13 (this is the current version)
96 Rename the attributes describing the amount of flop that a host / peer / cluster / cabinet can deliver per second.
98 <host power=...> -> <host speed=...>
102 In <trace_connect>, attribute kind="POWER" is now kind="SPEED".
106 The DOCTYPE points to the right URL: http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd
110 Units are now mandatory in attributes. USE THE SCRIPT sg_xml_unit_converter.py TO CONVERT THIS
112 - speed. Old default: 'f' or 'flops'. Also defined:
113 'Yf', 'Zf', 'Ef', 'Pf', 'Tf', 'Gf', 'Mf', 'kf'
114 'yottaflops', 'zettaflops', 'exaflops', 'petaflops', 'teraflops', 'gigaflops', 'megaflops', 'kiloflops'
116 - bandwidth. Old default: 'Bps' bytes per second (or 'bps' but 1 Bps = 8 bps)
117 Also defined in bytes: 'TiBps', 'GiBps', 'MiBps', 'KiBps', 'TBps', 'GBps', 'MBps', 'kBps', 'Bps'
118 And the same in bits: 'Tibps', 'Gibps', 'Mibps', 'Kibps', 'Tbps', 'Gbps', 'Mbps', 'kbps', 'bps'
120 - latency. Old default: 's' second. Also defined:
121 'w' week, 'd' day, 'h' hour, 'm' minute, 'ms' millisecond, 'us' microsecond, 'ns' nanosecond, 'ps' picosecond
130 The SimGrid team (simgrid-devel@lists.gforge.inria.fr)
132 =head1 COPYRIGHT AND LICENSE
134 Copyright (c) 2006-2016. The SimGrid Team. All rights reserved.
136 This program is free software; you may redistribute it and/or modify it
137 under the terms of GNU LGPL (v2.1) license.
149 my $filename = $ARGV[0] or die "simgrid_update_xml.pl <platform.xml>\n";
150 open INPUT, "$filename" or die "Cannot open input file $filename: $!\n";
152 $output_string = "<?xml version='1.0'?>\n".
153 "<!DOCTYPE platform SYSTEM \"http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd\">\n".
154 "<platform version=\"$toversion\">\n";
160 while (defined($line = <INPUT>)) {
162 # eat the header, whatever form it has
163 next if ($line =~ s/<\?xml[^>]*>// && ! $line =~ /\S/); # just in case several tags are on the same line
164 next if ($line =~ s/<!DOCTYPE[^>]*>// && ! $line =~ /\S/);
166 if ($line =~ s/<platform(_description)? *>//) {
168 print "$filename was using version 0\n";
169 next if !$line =~ /\S/;
170 } elsif ($line =~ s/<platform.*version=["]*([0-9.])["]*>//) {
172 if ($fromversion == $toversion) {
173 die "Input platform file $filename is already conformant to version $fromversion. This should be a no-op.\n";
175 if ($fromversion > $toversion) {
176 die "Input platform file $filename is more recent than this script (file version: $fromversion; script version: $toversion)\n";
178 next if !$line =~ /\S/;
179 print "$filename was using version $fromversion\n";
182 if ($fromversion == 0) {
183 while ($line =~ m|^(.*?)<cpu(.*?)power="([^"]*)"(.*)$|) {
184 $line = "$1TOTOTUTUTATA${2}TOTOTUTUTATA".($3*1000000)."TOTOTUTUTATA${4}";
186 while ($line =~ /^(.*?)TOTOTUTUTATA(.*?)TOTOTUTUTATA(.*?)TOTOTUTUTATA(.*)$/) {
187 $line = "$1<cpu${2}power=\"$3\"$4";
189 while ($line =~ m|^(.*?)<network_link(.*?)bandwidth="([^"]*)"(.*?)$|) {
190 $line = "$1TOTOTUTUTATA${2}TOTOTUTUTATA".($3*1000000)."TOTOTUTUTATA${4}";
192 while ($line =~ /^(.*?)TOTOTUTUTATA(.*?)TOTOTUTUTATA(.*?)TOTOTUTUTATA(.*?)$/) {
193 $line = "$1<network_link${2}bandwidth=\"$3\"$4";
197 if ($fromversion < 2) {
198 # The renamings (\b=zero-width word boundary check)
199 $line =~ s/\bplatform_description\b/platform/g;
200 $line =~ s/\bname\b/id/g;
201 $line =~ s/\bcpu\b/host/g;
202 $line =~ s/\bnetwork_link\b/link/g;
203 $line =~ s/\broute_element\b/link:ctn/g;
206 if ($fromversion < 3) {
207 $line =~ s/\blink:ctn\b/link_ctn/g;
208 $line =~ s/\btrace:connect\b/trace_connect/g;
210 if($AS_opened && (($line=~ /<\/platform>/) || ($line=~ /<process/))) {
211 $output_string .= "</AS>\n";
215 if( (!$AS_opened) && (
216 ($line =~ /<host/) ||
217 ($line =~ /<link/) ||
218 ($line =~ /<cluster/) ||
221 $output_string .= " <AS id=\"AS0\" routing=\"Full\">\n";
225 if($line=~/<route /){$line =~ s/\<route/\<route symmetrical=\"NO\"/g;}
227 if ($fromversion < 4) {
228 $line =~ s/\bpower\b/speed/g;
229 $line =~ s/\bkind="POWER"/kind="SPEED"/g;
232 $output_string .= "$line\n";
237 if ($fromversion == -1) {
238 die "Cannot retrieve the platform version of $filename\n";
241 open OUTPUT, "> $filename";
242 print OUTPUT $output_string;