From 1174c809820401ec254a701b4d478a8e88b8af59 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Fri, 25 Jun 2010 21:41:35 +0000 Subject: marking performance issues --- src/transport/gnunet-service-transport.c | 2 ++ src/transport/plugin_transport_tcp.c | 6 +++++- src/transport/test_transport_api_reliability.c | 2 +- src/transport/test_transport_api_tcp_peer1.conf | 2 +- src/transport/test_transport_api_tcp_peer2.conf | 1 + src/util/scheduler.c | 8 ++++++++ 6 files changed, 18 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/transport/gnunet-service-transport.c b/src/transport/gnunet-service-transport.c index f9191747e..c96652c75 100644 --- a/src/transport/gnunet-service-transport.c +++ b/src/transport/gnunet-service-transport.c @@ -1772,6 +1772,7 @@ transmit_to_peer (struct TransportClient *client, mq = GNUNET_malloc (sizeof (struct MessageQueue) + message_buf_size); mq->specific_address = peer_address; mq->client = client; + /* FIXME: this memcpy can be up to 7% of our total runtime! */ memcpy (&mq[1], message_buf, message_buf_size); mq->message_buf = (const char*) &mq[1]; mq->message_buf_size = message_buf_size; @@ -4781,6 +4782,7 @@ handle_send (void *cls, tcmc->priority = ntohl (obm->priority); tcmc->timeout = GNUNET_TIME_relative_to_absolute (GNUNET_TIME_relative_ntoh (obm->timeout)); tcmc->msize = msize; + /* FIXME: this memcpy can be up to 7% of our total runtime */ memcpy (&tcmc[1], obmm, msize); GNUNET_SERVER_client_keep (client); setup_peer_check_blacklist (&obm->peer, GNUNET_YES, diff --git a/src/transport/plugin_transport_tcp.c b/src/transport/plugin_transport_tcp.c index c1397da61..08bb00ff6 100644 --- a/src/transport/plugin_transport_tcp.c +++ b/src/transport/plugin_transport_tcp.c @@ -647,6 +647,7 @@ do_transmit (void *cls, size_t size, void *buf) session->pending_messages_tail, pos); GNUNET_assert (size >= pos->message_size); + /* FIXME: this memcpy can be up to 7% of our total runtime */ memcpy (cbuf, pos->msg, pos->message_size); cbuf += pos->message_size; ret += pos->message_size; @@ -1089,8 +1090,11 @@ tcp_plugin_send (void *cls, /* create new message entry */ pm = GNUNET_malloc (sizeof (struct PendingMessage) + msgbuf_size); + /* FIXME: the memset of this malloc can be up to 2% of our total runtime */ pm->msg = (const char*) &pm[1]; - memcpy (&pm[1], msg, msgbuf_size); + memcpy (&pm[1], msg, msgbuf_size); + /* FIXME: this memcpy can be up to 7% of our total run-time + (for transport service) */ pm->message_size = msgbuf_size; pm->timeout = GNUNET_TIME_relative_to_absolute (timeout); pm->transmit_cont = cont; diff --git a/src/transport/test_transport_api_reliability.c b/src/transport/test_transport_api_reliability.c index 27b86b388..b1891b32d 100644 --- a/src/transport/test_transport_api_reliability.c +++ b/src/transport/test_transport_api_reliability.c @@ -47,7 +47,7 @@ * 'MAX_PENDING' in 'gnunet-service-transport.c', otherwise * messages may be dropped even for a reliable transport. */ -#define TOTAL_MSGS (60000 * 2) +#define TOTAL_MSGS (60000 * 20) /** * How long until we give up on transmitting the message? diff --git a/src/transport/test_transport_api_tcp_peer1.conf b/src/transport/test_transport_api_tcp_peer1.conf index 363791e1c..2fe256318 100644 --- a/src/transport/test_transport_api_tcp_peer1.conf +++ b/src/transport/test_transport_api_tcp_peer1.conf @@ -34,7 +34,7 @@ MINIMUM-FRIENDS = 0 PLUGINS = tcp #DEBUG = YES #PREFIX = xterm -T transport2 -e gdb --command=cmd --args -#PREFIX = valgrind --leak-check=full +#PREFIX = valgrind --tool=callgrind ACCEPT_FROM6 = ::1; ACCEPT_FROM = 127.0.0.1; NEIGHBOUR_LIMIT = 50 diff --git a/src/transport/test_transport_api_tcp_peer2.conf b/src/transport/test_transport_api_tcp_peer2.conf index 3c7a8b8ff..58abe56eb 100644 --- a/src/transport/test_transport_api_tcp_peer2.conf +++ b/src/transport/test_transport_api_tcp_peer2.conf @@ -35,6 +35,7 @@ PLUGINS = tcp #DEBUG = YES ACCEPT_FROM6 = ::1; ACCEPT_FROM = 127.0.0.1; +#PREFIX = valgrind --tool=callgrind NEIGHBOUR_LIMIT = 50 #BINARY = /home/mrwiggles/documents/research/gnunet/gnunet-ng/src/transport/.libs/gnunet-service-transport BINARY = gnunet-service-transport diff --git a/src/util/scheduler.c b/src/util/scheduler.c index b94152025..5a10987ac 100644 --- a/src/util/scheduler.c +++ b/src/util/scheduler.c @@ -306,6 +306,10 @@ update_sets (struct GNUNET_SCHEDULER_Handle *sched, if (timeout->value > to.value) *timeout = to; } + /* FIXME: this is a very expensive (9% of runtime for some + benchmarks!) way to merge the bit sets; specializing + the common case where we only have one bit in the pos's + set should improve performance dramatically! */ if (pos->read_set != NULL) GNUNET_NETWORK_fdset_add (rs, pos->read_set); if (pos->write_set != NULL) @@ -332,6 +336,10 @@ set_overlaps (const struct GNUNET_NETWORK_FDSet *ready, { if (NULL == want) return GNUNET_NO; + /* FIXME: this is a very expensive (10% of runtime for some + benchmarks!) way to merge the bit sets; specializing + the common case where we only have one bit in the pos's + set should improve performance dramatically! */ if (GNUNET_NETWORK_fdset_overlap (ready, want)) { /* copy all over (yes, there maybe unrelated bits, -- cgit v1.2.3