Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
let the maestro explictly kill the sensors so that they don't die too early; reduce...
[simgrid.git] / examples / bandwidth / bandwidth.c
index 9069985..59033b6 100644 (file)
@@ -20,8 +20,17 @@ XBT_LOG_NEW_DEFAULT_CATEGORY(Bandwidth,"Messages specific to this example");
 /* Global private data */
 typedef struct {
   gras_socket_t sock;
 /* Global private data */
 typedef struct {
   gras_socket_t sock;
+  int done;
 } s_sensor_data_t,*sensor_data_t;
 
 } s_sensor_data_t,*sensor_data_t;
 
+static int sensor_cb_quit(gras_socket_t  expeditor,
+                          void          *payload_data) {
+  sensor_data_t globals=(sensor_data_t)gras_userdata_get();
+                          
+  globals->done = 1;                  
+  return 1;         
+}
+
 /* Function prototypes */
 int sensor (int argc,char *argv[]);
 
 /* Function prototypes */
 int sensor (int argc,char *argv[]);
 
@@ -29,7 +38,7 @@ int sensor (int argc,char *argv[]) {
   xbt_error_t errcode;
   sensor_data_t g;
 
   xbt_error_t errcode;
   sensor_data_t g;
 
-  xbt_init(&argc,argv);
+  gras_init(&argc, argv, NULL);
   g=gras_userdata_new(s_sensor_data_t);  
 
   amok_bw_init();
   g=gras_userdata_new(s_sensor_data_t);  
 
   amok_bw_init();
@@ -38,13 +47,19 @@ int sensor (int argc,char *argv[]) {
     ERROR1("Sensor: Error %s encountered while opening the server socket",xbt_error_name(errcode));
     return 1;
   }
     ERROR1("Sensor: Error %s encountered while opening the server socket",xbt_error_name(errcode));
     return 1;
   }
-
-  errcode=gras_msg_handle(60.0);
-  if (errcode != no_error) {
-     ERROR1("Sensor: Error '%s' while handling message",xbt_error_name(errcode));
-     gras_socket_close(g->sock);
-     return errcode;
-  }
+  g->done = 0;
+  
+  gras_msgtype_declare("quit",NULL);
+  gras_cb_register(gras_msgtype_by_name("quit"),&sensor_cb_quit);
+  
+  while (! g->done ) {
+    errcode=gras_msg_handle(60.0);
+    if (errcode != no_error) {
+       ERROR1("Sensor: Error '%s' while handling message",xbt_error_name(errcode));
+       gras_socket_close(g->sock);
+       return errcode;
+    }  
+  }    
 
   gras_socket_close(g->sock);
   return 0;
 
   gras_socket_close(g->sock);
   return 0;
@@ -67,14 +82,13 @@ int maestro(int argc,char *argv[]) {
   maestro_data_t g;
   double sec, bw;
   int buf_size=32;
   maestro_data_t g;
   double sec, bw;
   int buf_size=32;
-  int exp_size=64;
-  int msg_size=64;
+  int exp_size=1024*50;
+  int msg_size=1024;
   gras_socket_t peer;
 
   gras_socket_t peer;
 
-  xbt_init(&argc,argv);
+  gras_init(&argc, argv, NULL);
   g=gras_userdata_new(s_maestro_data_t);
   amok_bw_init();
   g=gras_userdata_new(s_maestro_data_t);
   amok_bw_init();
-  gras_os_sleep(1,0);
    
   if ((errcode=gras_socket_server(6000,&(g->sock)))) { 
     ERROR1("Maestro: Error %s encountered while opening the server socket",xbt_error_name(errcode));
    
   if ((errcode=gras_socket_server(6000,&(g->sock)))) { 
     ERROR1("Maestro: Error %s encountered while opening the server socket",xbt_error_name(errcode));
@@ -87,25 +101,34 @@ int maestro(int argc,char *argv[]) {
      return 1;
   }
 
      return 1;
   }
 
+  /* wait to ensure that all server sockets are there before starting the experiment */        
+  gras_os_sleep(1.0);
+  
   if ((errcode=gras_socket_client(argv[1],atoi(argv[2]),&peer))) {
      ERROR3("Client: Unable to connect to my peer on %s:%s. Got %s",
            argv[1],argv[2],xbt_error_name(errcode));
      return 1;
   }
 
   if ((errcode=gras_socket_client(argv[1],atoi(argv[2]),&peer))) {
      ERROR3("Client: Unable to connect to my peer on %s:%s. Got %s",
            argv[1],argv[2],xbt_error_name(errcode));
      return 1;
   }
 
-/*  if ((errcode=amok_bw_request(argv[1],atoi(argv[2]),argv[3],atoi(argv[4]),
-                              buf_size,exp_size,msg_size,&sec,&bw))) {*/
-  
-  if ((errcode=amok_bw_test(peer,buf_size,exp_size,msg_size,&sec,&bw))) {
-    ERROR1("maestro: Error %s encountered while doing the test",xbt_error_name(errcode));
-    return 1;
-  }
-   
-  INFO6("maestro: Experience between me and %s:%d (%d ko in msgs of %d ko) took %f sec, achieving %f Mb/s",
+  INFO0("Test the BW between me and one of the sensors");  
+  TRY(amok_bw_test(peer,buf_size,exp_size,msg_size,&sec,&bw));
+  INFO6("maestro: Experience between me and %s:%d (%d kb in msgs of %d kb) took %f sec, achieving %f kb/s",
        argv[1],atoi(argv[2]),
        exp_size,msg_size,
        sec,bw);
 
        argv[1],atoi(argv[2]),
        exp_size,msg_size,
        sec,bw);
 
+  INFO0("Test the BW between the two sensors");  
+  TRY(amok_bw_request(argv[1],atoi(argv[2]),argv[3],atoi(argv[4]),
+                      buf_size,exp_size,msg_size,&sec,&bw));   
+
+  /* ask sensors to quit */                    
+  gras_msgtype_declare("quit",NULL);
+  TRY(gras_msg_send(peer,gras_msgtype_by_name("quit"), NULL));
+  gras_socket_close(peer);
+  TRY(gras_socket_client(argv[3],atoi(argv[4]),&peer));
+  TRY(gras_msg_send(peer,gras_msgtype_by_name("quit"), NULL));
+  gras_socket_close(peer);
+
   gras_socket_close(g->sock);
   return 0;
 }
   gras_socket_close(g->sock);
   return 0;
 }