Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge pull request #1 from mquinson/master
[simgrid.git] / examples / platforms / generation_scripts / generate_g5k_platform.pl
1 #!/usr/bin/env perl
2
3 # Copyright (c) 2011, 2014. The SimGrid Team.
4 # All rights reserved.
5
6 # This program is free software; you can redistribute it and/or modify it
7 # under the terms of the license (GNU LGPL) which comes with this package.
8
9 use strict;
10 use warnings;
11 use Switch;
12 my $toversion=3;
13
14 if($#ARGV!=1) {
15     die "Usage: ./generate_g5k_platform.pl g5k_username g5k_password\n";
16 }
17
18 print "<?xml version='1.0'?>\n";
19 print "<!DOCTYPE platform SYSTEM \"http://simgrid.gforge.inria.fr/simgrid.dtd\">\n";
20 print "<platform version=\"$toversion\">\n";
21 print "\t<AS id=\"AS_grid5000\" routing=\"Floyd\" >\n";
22
23 `rm -rf temp_g5k`;
24 `mkdir -p temp_g5k`;
25 chdir("./temp_g5k");
26 `wget https://api.grid5000.fr/2.0/grid5000/sites --http-user="$ARGV[0]" --http-password="$ARGV[1]" --no-check-certificate --quiet`;
27
28 open SITES_LIGNE, 'sites' or die "Unable to open sites $!\n";
29 my $line = "";
30 my $site = "";
31 my $cluster = "";
32 my $nodes = "";
33 my @AS_route = ();
34
35 print "\t\t<AS id=\"AS_interne\" routing=\"Floyd\">\n";
36 printf "\t\t\t<router id=\"lille\"/>\n";
37 printf "\t\t\t<router id=\"paris\"/>\n";
38 printf "\t\t\t<router id=\"nancy\"/>\n";
39 printf "\t\t\t<router id=\"rennes\"/>\n";
40 printf "\t\t\t<router id=\"lyon\"/>\n";
41 printf "\t\t\t<router id=\"bordeaux\"/>\n";
42 printf "\t\t\t<router id=\"grenoble\"/>\n";
43 printf "\t\t\t<router id=\"marseille\"/>\n";
44 printf "\t\t\t<router id=\"toulouse\"/>\n";
45 printf "\t\t\t<router id=\"sophia\"/>\n";
46 #printf "\t\t\t<router id=\"luxembourg\">\n";
47 print "\n";
48 printf "\t\t\t<link id=\"Lille_Paris\"        bandwidth=\"1.25E9\" latency=\"1.0E-4\"/>\n";
49 printf "\t\t\t<link id=\"Paris_Nancy\"        bandwidth=\"1.25E9\" latency=\"1.0E-4\"/>\n";
50 printf "\t\t\t<link id=\"Paris_Rennes\"       bandwidth=\"1.25E9\" latency=\"1.0E-4\"/>\n";
51 printf "\t\t\t<link id=\"Paris_Lyon\"         bandwidth=\"1.25E9\" latency=\"1.0E-4\"/>\n";
52 printf "\t\t\t<link id=\"Bordeaux_Lyon\"      bandwidth=\"1.25E9\" latency=\"1.0E-4\"/>\n";
53 printf "\t\t\t<link id=\"Lyon_Grenoble\"      bandwidth=\"1.25E9\" latency=\"1.0E-4\"/>\n";
54 printf "\t\t\t<link id=\"Lyon_Marseille\"     bandwidth=\"1.25E9\" latency=\"1.0E-4\"/>\n";
55 printf "\t\t\t<link id=\"Marseille_Sophia\"   bandwidth=\"1.25E9\" latency=\"1.0E-4\"/>\n";
56 printf "\t\t\t<link id=\"Marseille_Toulouse\" bandwidth=\"1.25E9\" latency=\"1.0E-4\"/>\n";
57 #printf "\t\t<link id=\"Luxemburg_Nancy\"    bandwidth=\"1.25E9\" latency=\"1.0E-4\"/>\n";
58 print "\n";
59
60 print "\t\t<route src=\"lille\"     dst=\"paris\"     ><link_ctn id=\"Lille_Paris\"/></route>\n";
61 print "\t\t<route src=\"paris\"     dst=\"nancy\"     ><link_ctn id=\"Paris_Nancy\"/></route>\n";
62 print "\t\t<route src=\"paris\"     dst=\"rennes\"    ><link_ctn id=\"Paris_Rennes\"/></route>\n";
63 print "\t\t<route src=\"paris\"     dst=\"lyon\"      ><link_ctn id=\"Paris_Lyon\"/></route>\n";
64 print "\t\t<route src=\"bordeaux\"  dst=\"lyon\"      ><link_ctn id=\"Bordeaux_Lyon\"/></route>\n";
65 print "\t\t<route src=\"lyon\"      dst=\"grenoble\"  ><link_ctn id=\"Lyon_Grenoble\"/></route>\n";
66 print "\t\t<route src=\"lyon\"      dst=\"marseille\" ><link_ctn id=\"Lyon_Marseille\"/></route>\n";
67 print "\t\t<route src=\"marseille\" dst=\"sophia\"    ><link_ctn id=\"Marseille_Sophia\"/></route>\n";
68 print "\t\t<route src=\"marseille\" dst=\"toulouse\"  ><link_ctn id=\"Marseille_Toulouse\"/></route>\n";
69 #print "\t\t<route src=\"Luxemburg\" dst=\"Nancy\"     ><link_ctn id=\"Luxemburg_Nancy\"/></route>\n";
70 print "\t\t</AS>\n";    
71
72 while(defined($line=<SITES_LIGNE>))
73 {
74         if($line =~ /"uid": "(.*)",/){
75                 $site = $1;
76                 print "\t\t<AS id=\"AS_$site\" routing=\"RuleBased\" >\n";
77                 `wget https://api.grid5000.fr/2.0/grid5000/sites/$site/clusters --http-user="$ARGV[0]" --http-password="$ARGV[1]" --no-check-certificate --quiet`;
78                 open CLUSTERS_LIGNE, 'clusters' or die "Unable to open clusters $!\n";
79                 while(defined($line=<CLUSTERS_LIGNE>))
80                 {
81                         if($line =~ /"uid": "(.*)",/){
82                                 $cluster = $1;
83                                 print "\t\t\t<cluster id=\"AS_$cluster\" prefix=\"$cluster-\" suffix=\".$site.grid5000.fr\"\n";
84                                 `wget https://api.grid5000.fr/2.0/grid5000/sites/$site/clusters/$cluster/nodes --http-user="$ARGV[0]" --http-password="$ARGV[1]" --no-check-certificate --quiet`;
85                                 open NODES_LIGNE, 'nodes' or die "Unable to open nodes $!\n";
86                                 while(defined($line=<NODES_LIGNE>))
87                                 {
88                                         if($line =~ /"total": (.*),/){
89                                                 print "\t\t\t\tradical=\"1-$1\" power=\"";
90                                                 &get_gflops($cluster);
91                                                 print "\" bw=\"1.25E8\" lat=\"1.0E-4\""."\n";
92                                                 print "\t\t\t\tbb_bw=\"1.25E9\" bb_lat=\"1.0E-4\"></cluster>\n";
93                                         }
94                                 }
95                                 print "\t\t\t<link   id=\"link_$cluster\" bandwidth=\"1.25E9\" latency=\"1.0E-4\"/>\n\n";
96                                 close NODES_LIGNE;
97                                 `rm nodes`;
98                         }
99                 }
100                 close CLUSTERS_LIGNE;
101                 `rm clusters`;
102                 
103                 print "\t\t\t<AS id=\"gw_AS_$site\" routing=\"Full\">\n";
104                 print "\t\t\t\t<router id=\"gw_$site\"/>\n";
105                 print "\t\t\t</AS>\n";
106                 print "\t\t\t<link   id=\"link_gw_$site\" bandwidth=\"1.25E9\" latency=\"1.0E-4\"/>\n";
107                 print "\n";
108                 
109                 print "\t\t\t<ASroute src=\"^AS_(.*)\$\" dst=\"^AS_(.*)\$\"\n";
110                 print "\t\t\t\tgw_src=\"\$1src-AS_\$1src_router.$site.grid5000.fr\"\n";
111                 print "\t\t\t\tgw_dst=\"\$1dst-AS_\$1dst_router.$site.grid5000.fr\"\n";
112                 print "\t\t\t\tsymmetrical=\"YES\">\n";
113                 print "\t\t\t\t\t<link_ctn id=\"link_\$1src\"/>\n";
114                 print "\t\t\t\t\t<link_ctn id=\"link_\$1dst\"/>\n";
115                 print "\t\t\t</ASroute>\n\n"; 
116
117                 print "\t\t\t<ASroute src=\"^AS_(.*)\$\" dst=\"^gw_AS_(.*)\$\"\n";
118                 print "\t\t\t\tgw_src=\"\$1src-AS_\$1src_router.$site.grid5000.fr\"\n";
119                 print "\t\t\t\tgw_dst=\"gw_\$1dst\"\n";
120                 print "\t\t\t\tsymmetrical=\"NO\">\n";
121                 print "\t\t\t\t\t<link_ctn id=\"link_\$1src\"/>\n";
122                 print "\t\t\t</ASroute>\n\n"; 
123                 
124                 print "\t\t\t<ASroute src=\"^gw_AS_(.*)\$\" dst=\"^AS_(.*)\$\"\n";
125                 print "\t\t\t\tgw_src=\"gw_\$1src\"\n";
126                 print "\t\t\t\tgw_dst=\"\$1dst-AS_\$1dst_router.$site.grid5000.fr\"\n";
127                 print "\t\t\t\tsymmetrical=\"NO\">\n";
128                 print "\t\t\t\t\t<link_ctn id=\"link_\$1dst\"/>\n";
129                 print "\t\t\t</ASroute>\n\n"; 
130                 
131                 print "\t\t</AS>\n";
132                 
133                 push @AS_route, $site;
134         }
135 }
136
137 while(@AS_route)
138 {
139         $site = pop @AS_route;
140         print "\t\t<ASroute src=\"AS_$site\" dst=\"AS_interne\" gw_src=\"gw_$site\"";
141         if( $site =~ /^orsay$/ )
142         {
143                 print " gw_dst=\"paris\"";
144         }
145         else
146         {
147                 print " gw_dst=\"$site\"";
148         }
149         print " symmetrical=\"YES\">\n";
150         print "\t\t\t<link_ctn id=\"link_gw_$site\"/>\n";
151         print "\t\t</ASroute>\n";
152         
153 #       print "\t\t<ASroute src=\"AS_interne\" dst=\"AS_$site\" gw_dst=\"gw_$site\"";
154 #       if( $site =~ /^orsay$/ )
155 #       {
156 #               print " gw_src=\"paris\"";
157 #       }
158 #       else
159 #       {
160 #               print " gw_src=\"$site\"";
161 #       }
162 #       print " symmetrical=\"NO\">\n";
163 #       print "\t\t\t<link_ctn id=\"link_gw_$site\"/>\n";
164 #       print "\t\t</ASroute>\n";
165 }
166
167 print "\t</AS>\n";
168 print "</platform>\n";
169 `rm sites`;
170 close SITES_LIGNE;
171
172
173 sub get_gflops {
174         switch ($_[0]) {
175                 #Bordeaux
176                 case "bordeplage" { print "5.2297E9" }
177                 case "bordereau"  { print "8.8925E9" }
178                 case "borderline" { print "13.357E9" }
179                 #Lille
180                 case "chicon"     { print "8.9618E9" }
181                 case "chimint"    { print "23.531E9" }
182                 case "chinqchint" { print "22.270E9" }
183                 case "chirloute"  { print "24.473E9" }
184                 #Grenoble
185                 case "adonis"     { print "23.681E9" }
186                 case "edel"       { print "23.492E9" }
187                 case "genepi"     { print "21.175E9" }
188                 #Lyon
189                 case "capricorne" { print "4.7233E9" }
190                 case "sagittaire" { print "5.6693E9" }
191                 #Nancy
192                 case "graphene"   { print "16.673E9" }
193                 case "griffon"    { print "20.678E9" }
194                 #Orsay
195                 case "gdx"        { print "4.7153E9" }
196                 case "netgdx"     { print "4.7144E9" }
197                 #Rennes
198                 case "paradent"   { print "21.496E9" }
199                 case "paramount"  { print "12.910E9" }
200                 case "parapide"   { print "30.130E9" }
201                 case "parapluie"  { print "27.391E9" }
202                 #Sophia
203                 case "helios"     { print "7.7318E9" }
204                 case "sol"        { print "8.9388E9" }
205                 case "suno"       { print "23.530E9" }
206                 #Toulouse
207                 case "pastel"     { print "9.5674E9" }
208                 case "violette"   { print "5.1143E9" }
209                 #Reims
210                 case "stremi"     { print "TODO" }
211                 #Luxembourg
212                 case "granduc"    { print "TODO" }
213
214                 default:          { print "TODO" }
215         }
216 }