Logo AND Algorithmique Numérique Distribuée

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