1 /* bandwidth - bandwidth test demo of GRAS features */
3 /* Copyright (c) 2005, 2006, 2007, 2008, 2009, 2010. The SimGrid Team.
4 * All rights reserved. */
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. */
11 #include "amok/bandwidth.h"
12 #include "amok/peermanagement.h"
14 XBT_LOG_NEW_DEFAULT_CATEGORY(Bandwidth,
15 "Messages specific to this example");
17 /* **********************************************************************
19 * **********************************************************************/
21 static gras_socket_t try_gras_socket_client_from_string(const char *host)
23 volatile gras_socket_t sock = NULL;
26 sock = gras_socket_client_from_string(host);
34 /* Function prototypes */
35 int sensor(int argc, char *argv[]);
37 int sensor(int argc, char *argv[])
40 gras_socket_t master = NULL;
41 int connection_try = 10;
43 gras_init(&argc, argv);
47 mysock = gras_socket_server_range(3000, 9999, 0, 0);
48 XBT_INFO("Sensor starting (on port %d)", gras_os_myport());
49 while (connection_try > 0 &&
50 !(master = try_gras_socket_client_from_string(argv[1]))) {
52 gras_os_sleep(0.5); /* let the master get ready */
55 amok_pm_group_join(master, "bandwidth");
58 gras_socket_close(mysock);
59 gras_socket_close(master);
64 /* **********************************************************************
66 * **********************************************************************/
68 /* Function prototypes */
69 int maestro(int argc, char *argv[]);
71 int maestro(int argc, char *argv[])
74 int buf_size = 32 * 1024;
75 int msg_size = 512 * 1024;
77 double min_duration = 1;
81 xbt_peer_t h1, h2, h_temp;
84 gras_init(&argc, argv);
88 XBT_INFO("Maestro starting");
90 XBT_ERROR("Usage: maestro port\n");
93 mysock = gras_socket_server(atoi(argv[1]));
94 group = amok_pm_group_new("bandwidth");
95 XBT_INFO("Wait for peers for 5 sec");
96 gras_msg_handleall(5); /* friends, we're ready. Come and play */
98 if (xbt_dynar_length(group) < 2) {
99 amok_pm_group_shutdown("bandwidth");
100 xbt_die("Not enough peers arrived. Expected 2 got %ld",
101 xbt_dynar_length(group));
103 h1 = *(xbt_peer_t *) xbt_dynar_get_ptr(group, 0);
104 h2 = *(xbt_peer_t *) xbt_dynar_get_ptr(group, 1);
105 /* sort peers in right order to keep output right */
106 if (strcmp(h1->name, h2->name) < 0 || h1->port > h2->port) {
112 XBT_INFO("Contact %s:%d", h1->name, h1->port);
113 peer = gras_socket_client(h1->name, h1->port);
115 XBT_INFO("Test the BW between me and one of the sensors");
116 amok_bw_test(peer, buf_size, msg_size, msg_amount, min_duration, &sec,
119 ("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",
120 h1->name, h1->port, msg_amount, msg_size, min_duration, sec,
121 ((double) bw) / 1024.0);
123 XBT_INFO("Test the BW between %s:%d and %s:%d", h1->name, h1->port,
125 amok_bw_request(h1->name, h1->port, h2->name, h2->port, buf_size,
126 msg_size, msg_amount, min_duration, &sec, &bw);
128 ("Experience between %s:%d and %s:%d took took %f sec, achieving %f kb/s",
129 h1->name, h1->port, h2->name, h2->port, sec,
130 ((double) bw) / 1024.0);
132 /* Game is over, friends */
133 amok_pm_group_shutdown("bandwidth");
135 gras_socket_close(mysock);