Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
chainsend: print some transfer stats, move debug prints to where they belong
authorMaximiliano Geier <maximiliano.geier@loria.fr>
Mon, 17 Dec 2012 14:52:20 +0000 (15:52 +0100)
committerMaximiliano Geier <maximiliano.geier@loria.fr>
Mon, 17 Dec 2012 14:52:20 +0000 (15:52 +0100)
also count up bytes when transfering, so that the peer can print its "transfer speed" when it's done, and finally update tesh accordingly

examples/msg/chainsend/broadcaster.c
examples/msg/chainsend/chainsend.c
examples/msg/chainsend/chainsend.tesh
examples/msg/chainsend/peer.c
examples/msg/chainsend/peer.h

index 85e5ca1..86bf001 100644 (file)
@@ -138,7 +138,7 @@ int broadcaster(int argc, char *argv[])
   int status;
   unsigned int piece_count = PIECE_COUNT;
 
-  XBT_INFO("broadcaster");
+  XBT_DEBUG("broadcaster");
 
   /* Add every mailbox given by the hostcount in argv[1] to a dynamic array */
   host_list = build_hostlist_from_hostcount(atoi(argv[1]));
index 80ea6fe..ae6f7d3 100644 (file)
@@ -47,7 +47,7 @@ msg_error_t test_all(const char *platform_file,
 
 
 
-  XBT_INFO("test_all");
+  XBT_DEBUG("test_all");
 
   /*  Simulation setting */
   MSG_create_environment(platform_file);
index bee7909..45665b0 100644 (file)
@@ -5,22 +5,12 @@ p Testing the chainsend MSG implementation
 ! timeout 10
 ! output sort
 $ $SG_TEST_EXENV ${bindir:=.}/chainsend ${srcdir:=.}/platform_chainsend.xml ${srcdir:=.}/deployment_tesh.xml "--log=root.fmt:[%12.6r]%e(%i:%P@%h)%e%m%n"
-> [    0.000000] (0:@) test_all
-> [    0.000000] (1:broadcaster@host0) broadcaster
-> [    0.000000] (2:peer@host1) peer
-> [    0.000000] (3:peer@host2) peer
-> [    0.000000] (4:peer@host3) peer
-> [    0.000000] (5:peer@host4) peer
-> [    0.000000] (6:peer@host5) peer
-> [    0.000000] (7:peer@host6) peer
-> [    0.000000] (8:peer@host7) peer
-> [    0.000000] (9:peer@host8) peer
-> [   81.940000] (2:peer@host1) Waiting for sends to finish before shutdown...
-> [   81.950000] (3:peer@host2) Waiting for sends to finish before shutdown...
-> [   81.960000] (4:peer@host3) Waiting for sends to finish before shutdown...
-> [   81.970000] (5:peer@host4) Waiting for sends to finish before shutdown...
-> [   81.980000] (6:peer@host5) Waiting for sends to finish before shutdown...
-> [   81.990000] (7:peer@host6) Waiting for sends to finish before shutdown...
-> [   82.000000] (8:peer@host7) Waiting for sends to finish before shutdown...
-> [   82.010000] (9:peer@host8) Waiting for sends to finish before shutdown...
+> [   82.010000] (9:peer@host8) ### 82.010002 536870912 bytes (Avg 6.243141 MB/s); copy finished (simulated).
+> [   82.940000] (2:peer@host1) ### 82.940002 536870912 bytes (Avg 6.173137 MB/s); copy finished (simulated).
+> [   82.950000] (3:peer@host2) ### 82.949997 536870912 bytes (Avg 6.172393 MB/s); copy finished (simulated).
+> [   82.960000] (4:peer@host3) ### 82.959999 536870912 bytes (Avg 6.171649 MB/s); copy finished (simulated).
+> [   82.970000] (5:peer@host4) ### 82.970001 536870912 bytes (Avg 6.170905 MB/s); copy finished (simulated).
+> [   82.980000] (6:peer@host5) ### 82.980003 536870912 bytes (Avg 6.170161 MB/s); copy finished (simulated).
+> [   82.990000] (7:peer@host6) ### 82.989998 536870912 bytes (Avg 6.169418 MB/s); copy finished (simulated).
 > [   83.000000] (0:@) Total simulation time: 8.300000e+01
+> [   83.000000] (8:peer@host7) ### 83.000000 536870912 bytes (Avg 6.168675 MB/s); copy finished (simulated).
index 5605c88..1a34da5 100644 (file)
@@ -16,7 +16,7 @@ void peer_init_chain(peer_t peer, message_t msg)
 
 static void peer_forward_msg(peer_t peer, message_t msg)
 {
-  msg_task_t task = task_message_data_new(peer->me, peer->next, NULL, 0);
+  msg_task_t task = task_message_data_new(peer->me, peer->next, NULL, msg->data_length);
   msg_comm_t comm = NULL;
   XBT_DEBUG("Sending (isend) from %s into mailbox %s", peer->me, peer->next);
   comm = MSG_task_isend(task, peer->next);
@@ -38,6 +38,7 @@ int peer_execute_task(peer_t peer, msg_task_t task)
       if (peer->next != NULL)
         peer_forward_msg(peer, msg);
       peer->pieces++;
+      peer->bytes += msg->data_length;
       break;
     case MESSAGE_END_DATA:
       xbt_assert(peer->init, "peer_execute_task() failed: got msg_type %d before initialization", msg->type);
@@ -59,7 +60,7 @@ msg_error_t peer_wait_for_message(peer_t peer)
   int done = 0;
 
   while (!done) {
-    if (comm == NULL) // FIXME I should have a recv queue
+    if (comm == NULL)
       comm = MSG_task_irecv(&task, peer->me);
 
     if (MSG_comm_test(comm)) {
@@ -86,6 +87,7 @@ void peer_init(peer_t p, int argc, char *argv[])
   p->prev = NULL;
   p->next = NULL;
   p->pieces = 0;
+  p->bytes = 0;
   p->close_asap = 0;
   p->pending_sends = xbt_dynar_new(sizeof(msg_comm_t), NULL);
   p->me = xbt_new(char, HOSTNAME_LENGTH);
@@ -102,30 +104,44 @@ void peer_shutdown(peer_t p)
   float start_time = MSG_get_clock();
   float end_time = start_time + PEER_SHUTDOWN_DEADLINE;
 
-  XBT_INFO("Waiting for sends to finish before shutdown...");
+  XBT_DEBUG("Waiting for sends to finish before shutdown...");
   while (xbt_dynar_length(p->pending_sends) && MSG_get_clock() < end_time) {
     process_pending_connections(p->pending_sends);
     MSG_process_sleep(1);
   }
 
   xbt_assert(xbt_dynar_length(p->pending_sends) == 0, "Shutdown failed, sends still pending after deadline");
+}
+
+void peer_delete(peer_t p)
+{
   xbt_dynar_free(&p->pending_sends);
   xbt_free(p->me);
 
   xbt_free(p);
 }
 
+void peer_print_stats(peer_t p, float elapsed_time)
+{
+  XBT_INFO("### %f %llu bytes (Avg %f MB/s); copy finished (simulated).", elapsed_time, p->bytes, p->bytes / 1024.0 / 1024.0 / elapsed_time); 
+}
+
 /** Peer function  */
 int peer(int argc, char *argv[])
 {
+  float start_time, end_time;
   peer_t p = xbt_new(s_peer_t, 1);
   msg_error_t status;
 
-  XBT_INFO("peer");
+  XBT_DEBUG("peer");
 
   peer_init(p, argc, argv);
+  start_time = MSG_get_clock();
   status = peer_wait_for_message(p);
   peer_shutdown(p);
+  end_time = MSG_get_clock();
+  peer_print_stats(p, end_time - start_time);
+  peer_delete(p);
 
   return status;
 }                               /* end_of_receiver */
index a5d99d3..96c9faf 100644 (file)
@@ -16,6 +16,7 @@ typedef struct s_peer {
   const char *next;
   char *me;
   int pieces;
+  unsigned long long bytes;
   xbt_dynar_t pending_sends;
   int close_asap; /* TODO: unused */
 } s_peer_t, *peer_t;
@@ -24,8 +25,10 @@ typedef struct s_peer {
 msg_error_t peer_wait_for_message(peer_t peer);
 int peer_execute_task(peer_t peer, msg_task_t task);
 void peer_init_chain(peer_t peer, message_t msg);
+void peer_delete(peer_t p);
 void peer_shutdown(peer_t p);
 void peer_init(peer_t p, int argc, char *argv[]);
+void peer_print_stats(peer_t p, float elapsed_time);
 
 int peer(int argc, char *argv[]);