From: Maximiliano Geier Date: Mon, 17 Dec 2012 14:52:20 +0000 (+0100) Subject: chainsend: print some transfer stats, move debug prints to where they belong X-Git-Tag: v3_9_rc1~86^2~107^2~4 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/d7ef0e2c3657154be52ac3303dee6c35594d9b8d chainsend: print some transfer stats, move debug prints to where they belong also count up bytes when transfering, so that the peer can print its "transfer speed" when it's done, and finally update tesh accordingly --- diff --git a/examples/msg/chainsend/broadcaster.c b/examples/msg/chainsend/broadcaster.c index 85e5ca152d..86bf0016b2 100644 --- a/examples/msg/chainsend/broadcaster.c +++ b/examples/msg/chainsend/broadcaster.c @@ -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])); diff --git a/examples/msg/chainsend/chainsend.c b/examples/msg/chainsend/chainsend.c index 80ea6fe9ee..ae6f7d37cd 100644 --- a/examples/msg/chainsend/chainsend.c +++ b/examples/msg/chainsend/chainsend.c @@ -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); diff --git a/examples/msg/chainsend/chainsend.tesh b/examples/msg/chainsend/chainsend.tesh index bee790907d..45665b0d3c 100644 --- a/examples/msg/chainsend/chainsend.tesh +++ b/examples/msg/chainsend/chainsend.tesh @@ -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). diff --git a/examples/msg/chainsend/peer.c b/examples/msg/chainsend/peer.c index 5605c88dd8..1a34da5a97 100644 --- a/examples/msg/chainsend/peer.c +++ b/examples/msg/chainsend/peer.c @@ -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 */ diff --git a/examples/msg/chainsend/peer.h b/examples/msg/chainsend/peer.h index a5d99d362e..96c9fafe6c 100644 --- a/examples/msg/chainsend/peer.h +++ b/examples/msg/chainsend/peer.h @@ -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[]);