Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Oups, I changed the prototype of these functions
[simgrid.git] / examples / amok / bandwidth / bandwidth.c
index 148a86c..5f1b720 100644 (file)
@@ -23,19 +23,32 @@ int sensor (int argc,char *argv[]);
 
 int sensor (int argc,char *argv[]) {
   gras_socket_t mysock;
-  gras_socket_t master;
+  gras_socket_t master=NULL;
+  int connection_try = 10;
+  xbt_ex_t e;
 
   gras_init(&argc, argv);
   amok_bw_init();
-  amok_hm_init();
+  amok_pm_init();
  
   mysock = gras_socket_server_range(3000,9999,0,0);
   INFO1("Sensor starting (on port %d)",gras_os_myport());
-  gras_os_sleep(0.5); /* let the master get ready */
-  master = gras_socket_client_from_string(argv[1]);
+  while (connection_try > 0 && master == NULL) {
+     int connected = 0;
+     TRY {
+       master = gras_socket_client_from_string(argv[1]);
+       connected = 1;
+     } CATCH(e) {
+       xbt_ex_free(e);
+     }
+     if (!connected) {
+       connection_try--;
+       gras_os_sleep(0.5); /* let the master get ready */
+     }
+  }
                                              
-  amok_hm_group_join(master,"bandwidth");
-  amok_hm_mainloop(60);
+  amok_pm_group_join(master,"bandwidth",-1);
+  amok_pm_mainloop(60);
 
   gras_socket_close(mysock);
   gras_socket_close(master);
@@ -53,18 +66,18 @@ int maestro (int argc,char *argv[]);
 int maestro(int argc,char *argv[]) {
   double sec, bw;
   int buf_size=32  *1024;
-  int exp_size=512 *1024;
   int msg_size=512 *1024;
+  int msg_amount = 1;
   double min_duration = 1;
    
   gras_socket_t peer;
   gras_socket_t mysock;
-  xbt_peer_t h1,h2;
+  xbt_peer_t h1,h2,h_temp;
   xbt_dynar_t group;
 
   gras_init(&argc, argv);
   amok_bw_init();
-  amok_hm_init();
+  amok_pm_init();
 
   INFO0("Maestro starting");
   if (argc != 2) {
@@ -72,7 +85,7 @@ int maestro(int argc,char *argv[]) {
      return 1;
   }
   mysock=gras_socket_server(atoi(argv[1]));
-  group=amok_hm_group_new("bandwidth");
+  group=amok_pm_group_new("bandwidth");
   INFO0("Wait for peers for 5 sec");
   gras_msg_handleall(5); /* friends, we're ready. Come and play */
    
@@ -80,30 +93,37 @@ int maestro(int argc,char *argv[]) {
      char *msg;
      asprintf(&msg,"Not enough peers arrived. Expected 2 got %ld",
              xbt_dynar_length(group));
+     amok_pm_group_shutdown("bandwidth");
      xbt_die(msg);
   }
-  h1 = *(xbt_peer_t*) xbt_dynar_get_ptr(group, 0);
+  h1 = *(xbt_peer_t*)xbt_dynar_get_ptr(group, 0);
   h2 = *(xbt_peer_t*)xbt_dynar_get_ptr(group, 1);
+  /* sort peers in right order to keep output right */
+  if (strcmp(h1->name,h2->name) < 0 || h1->port > h2->port) {
+     h_temp = h1;
+     h1 = h2;
+     h2 = h_temp;
+  }
 
   INFO2("Contact %s:%d",h1->name, h1->port);
   peer = gras_socket_client(h1->name, h1->port);
 
   INFO0("Test the BW between me and one of the sensors");  
-  amok_bw_test(peer,buf_size,exp_size,msg_size,min_duration,&sec,&bw);
-  INFO6("Experience between me and %s:%d (%d bytes in msgs of %d bytes) took %f sec, achieving %f kb/s",
+  amok_bw_test(peer,buf_size,msg_size,msg_amount,min_duration,&sec,&bw);
+  INFO7("Experience between me and %s:%d (initially %d msgs of %d bytes, maybe modified to fill the pipe at least %.1fs) took %f sec, achieving %f kb/s",
        h1->name, h1->port,
-       exp_size,msg_size,
+       msg_amount,msg_size,min_duration,
        sec,((double)bw)/1024.0);
 
   INFO4("Test the BW between %s:%d and %s:%d", h1->name, h1->port,     h2->name, h2->port);
   amok_bw_request(h1->name, h1->port,  h2->name, h2->port,
-                 buf_size,exp_size,msg_size,min_duration,&sec,&bw);
+                 buf_size,msg_size,msg_amount,min_duration,&sec,&bw);
   INFO6("Experience between %s:%d and %s:%d took took %f sec, achieving %f kb/s",
        h1->name, h1->port,     h2->name, h2->port,
        sec,((double)bw)/1024.0);
 
   /* Game is over, friends */
-  amok_hm_group_shutdown ("bandwidth");
+  amok_pm_group_shutdown ("bandwidth");
 
   gras_socket_close(mysock);
   gras_exit();