Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
6eef5a2e366a3bd9d68cf411ab257443f4d40806
[simgrid.git] / examples / bandwidth / bandwidth.c
1 /* $Id$ */
2
3 /* bandwidth - bandwidth test demo of GRAS features                         */
4
5 /* Copyright (c) 2003, 2004 Martin Quinson. All rights reserved.            */
6
7 /* This program is free software; you can redistribute it and/or modify it
8  * under the terms of the license (GNU LGPL) which comes with this package. */
9
10
11 #include "gras.h"
12 #include "amok/bandwidth.h"
13
14 XBT_LOG_NEW_DEFAULT_CATEGORY(Bandwidth,"Messages specific to this example");
15
16 /* **********************************************************************
17  * Sensor code
18  * **********************************************************************/
19
20 /* Global private data */
21 typedef struct {
22   gras_socket_t sock;
23 } s_sensor_data_t,*sensor_data_t;
24
25 /* Function prototypes */
26 int sensor (int argc,char *argv[]);
27
28 int sensor (int argc,char *argv[]) {
29   xbt_error_t errcode;
30   sensor_data_t g;
31
32   gras_init(&argc, argv, NULL);
33   g=gras_userdata_new(s_sensor_data_t);  
34
35   amok_bw_init();
36    
37   if ((errcode=gras_socket_server(atoi(argv[1]),&(g->sock)))) { 
38     ERROR1("Sensor: Error %s encountered while opening the server socket",xbt_error_name(errcode));
39     return 1;
40   }
41
42   errcode=gras_msg_handle(60.0);
43   if (errcode != no_error) {
44      ERROR1("Sensor: Error '%s' while handling message",xbt_error_name(errcode));
45      gras_socket_close(g->sock);
46      return errcode;
47   }
48
49   gras_socket_close(g->sock);
50   return 0;
51 }
52
53 /* **********************************************************************
54  * Maestro code
55  * **********************************************************************/
56
57 /* Global private data */
58 typedef struct {
59   gras_socket_t sock;
60 } s_maestro_data_t,*maestro_data_t;
61
62 /* Function prototypes */
63 int maestro (int argc,char *argv[]);
64
65 int maestro(int argc,char *argv[]) {
66   xbt_error_t errcode;
67   maestro_data_t g;
68   double sec, bw;
69   int buf_size=32;
70 //  int exp_size=64;
71   int exp_size=1024 * 1024;
72   int msg_size=1024;
73 //  int msg_size=64;
74   gras_socket_t peer;
75
76   gras_init(&argc, argv, NULL);
77   g=gras_userdata_new(s_maestro_data_t);
78   amok_bw_init();
79    
80   if ((errcode=gras_socket_server(6000,&(g->sock)))) { 
81     ERROR1("Maestro: Error %s encountered while opening the server socket",xbt_error_name(errcode));
82     return 1;
83   }
84       
85    
86   if (argc != 5) {
87      ERROR0("Usage: maestro host port host port\n");
88      return 1;
89   }
90
91   /* wait to ensure that all server sockets are there before starting the experiment */ 
92   gras_os_sleep(1.0);
93   
94   if ((errcode=gras_socket_client(argv[1],atoi(argv[2]),&peer))) {
95      ERROR3("Client: Unable to connect to my peer on %s:%s. Got %s",
96             argv[1],argv[2],xbt_error_name(errcode));
97      return 1;
98   }
99
100 /*  if ((errcode=amok_bw_request(argv[1],atoi(argv[2]),argv[3],atoi(argv[4]),
101                                buf_size,exp_size,msg_size,&sec,&bw))) {*/
102   
103   if ((errcode=amok_bw_test(peer,buf_size,exp_size,msg_size,&sec,&bw))) {
104     ERROR1("maestro: Error %s encountered while doing the test",xbt_error_name(errcode));
105     return 1;
106   }
107    
108   INFO6("maestro: Experience between me and %s:%d (%d kb in msgs of %d kb) took %f sec, achieving %f kb/s",
109         argv[1],atoi(argv[2]),
110         exp_size,msg_size,
111         sec,bw);
112
113   gras_socket_close(g->sock);
114   return 0;
115 }