[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r10511 - gnunet/src/core
From: |
gnunet |
Subject: |
[GNUnet-SVN] r10511 - gnunet/src/core |
Date: |
Mon, 8 Mar 2010 14:57:10 +0100 |
Author: grothoff
Date: 2010-03-08 14:57:10 +0100 (Mon, 08 Mar 2010)
New Revision: 10511
Modified:
gnunet/src/core/gnunet-service-core.c
Log:
fixing corking
Modified: gnunet/src/core/gnunet-service-core.c
===================================================================
--- gnunet/src/core/gnunet-service-core.c 2010-03-08 13:43:36 UTC (rev
10510)
+++ gnunet/src/core/gnunet-service-core.c 2010-03-08 13:57:10 UTC (rev
10511)
@@ -76,6 +76,11 @@
#define PAST_EXPIRATION_DISCARD_TIME GNUNET_TIME_UNIT_SECONDS
/**
+ * How long do we delay messages to get larger packet sizes (CORKing)?
+ */
+#define MAX_CORK_DELAY GNUNET_TIME_relative_multiply
(GNUNET_TIME_UNIT_SECONDS, 1)
+
+/**
* What is the maximum delay for a SET_KEY message?
*/
#define MAX_SET_KEY_DELAY GNUNET_TIME_relative_multiply
(GNUNET_TIME_UNIT_SECONDS, 5)
@@ -116,7 +121,8 @@
#define PONG_PRIORITY 0xFFFFFF
/**
- * How many messages do we queue per peer at most?
+ * How many messages do we queue per peer at most? Must be at
+ * least two.
*/
#define MAX_PEER_QUEUE_SIZE 16
@@ -344,6 +350,12 @@
struct GNUNET_TIME_Absolute deadline;
/**
+ * By when are we supposed to transmit this message (after
+ * giving slack)?
+ */
+ struct GNUNET_TIME_Absolute slack_deadline;
+
+ /**
* How important is this message to us?
*/
unsigned int priority;
@@ -1409,7 +1421,7 @@
off = 0;
/* maximum time we can wait before transmitting anything
and still make all of our deadlines */
- slack = GNUNET_TIME_UNIT_FOREVER_REL;
+ slack = MAX_CORK_DELAY;
pos = n->messages;
/* note that we use "*2" here because we want to look
a bit further into the future; much more makes no
@@ -1447,17 +1459,25 @@
slack = GNUNET_TIME_relative_min (slack,
GNUNET_BANDWIDTH_value_get_delay_for (n->bw_out,
avail));
- if ( (pos->deadline.value < now.value) ||
- (GNUNET_YES == pos->got_slack) )
+ if (pos->deadline.value <= now.value)
{
+ /* now or never */
slack = GNUNET_TIME_UNIT_ZERO;
}
+ else if (GNUNET_YES == pos->got_slack)
+ {
+ /* should be soon now! */
+ slack = GNUNET_TIME_relative_min (slack,
+
GNUNET_TIME_absolute_get_remaining (pos->slack_deadline));
+ }
else
{
slack =
GNUNET_TIME_relative_min (slack,
GNUNET_TIME_absolute_get_difference (now, pos->deadline));
pos->got_slack = GNUNET_YES;
+ pos->slack_deadline = GNUNET_TIME_absolute_min
(pos->deadline,
+
GNUNET_TIME_relative_to_absolute (MAX_CORK_DELAY));
}
}
}
@@ -1481,15 +1501,15 @@
}
/* guard against sending "tiny" messages with large headers without
urgent deadlines */
- if ( (slack.value > 1000) &&
+ if ( (slack.value > 0) &&
(size > 4 * off) &&
- (queue_size < MAX_PEER_QUEUE_SIZE / 2) )
+ (queue_size <= MAX_PEER_QUEUE_SIZE - 2) )
{
/* less than 25% of message would be filled with deadlines still
being met if we delay by one second or more; so just wait for
more data; but do not wait longer than 1s (since we don't want
to delay messages for a really long time either). */
- retry_time->value = 1000;
+ *retry_time = MAX_CORK_DELAY;
/* reset do_transmit values for next time */
while (pos != last)
{
@@ -1498,7 +1518,8 @@
}
#if DEBUG_CORE
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "Deferring transmission for 1s due to underfull message
buffer size (%u/%u)\n",
+ "Deferring transmission for %llums due to underfull message
buffer size (%u/%u)\n",
+ (unsigned long long) slack.value,
(unsigned int) off,
(unsigned int) size);
#endif
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r10511 - gnunet/src/core,
gnunet <=